Skip to content

Commit 0f20de0

Browse files
committed
add JML clauses in TypeCastingGenerator
* new tests from issues found by JJBMC
1 parent 30ce079 commit 0f20de0

File tree

19 files changed

+351
-21
lines changed

19 files changed

+351
-21
lines changed

javaparser-core-generators/src/main/java/com/github/javaparser/generator/core/node/TypeCastingGenerator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public class TypeCastingGenerator extends NodeGenerator {
4545
JavaParserMetaModel.typeMetaModel,
4646
JavaParserMetaModel.moduleDirectiveMetaModel,
4747
JavaParserMetaModel.bodyDeclarationMetaModel,
48-
JavaParserMetaModel.commentMetaModel
48+
JavaParserMetaModel.commentMetaModel,
49+
JavaParserMetaModel.jmlClauseMetaModel
4950
);
5051

5152
public TypeCastingGenerator(SourceRoot sourceRoot) {

javaparser-core-testing/src/test/java/com/github/javaparser/JKIssue.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import java.nio.file.Paths;
2929

3030
public class JKIssue {
31-
@Test()
31+
@Test
3232
void test() throws IOException {
3333
ParserConfiguration cfg = new ParserConfiguration();
3434
cfg.setProcessJml(true);
@@ -41,4 +41,16 @@ void test() throws IOException {
4141
Assertions.assertEquals(1, method.getContracts().get().size());
4242
}
4343
}
44+
45+
@Test
46+
void test2() throws IOException {
47+
ParserConfiguration cfg = new ParserConfiguration();
48+
cfg.setProcessJml(true);
49+
JavaParser parser = new JavaParser(cfg);
50+
CompilationUnit cu = parser.parse(Paths.get("src/test/test_sourcecode/MissingParentSimpleExprClause.java"))
51+
.getResult().get();
52+
53+
var clause = cu.getType(0).getMethods().get(0).getContracts().get().get(0).getClauses().get(0).asJmlSimpleExprClause();
54+
Assertions.assertEquals(1, clause.getChildNodes().size());
55+
}
4456
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class JKIssueDoubleContract {
2+
//@ ensures true;
3+
private int test() {}
4+
}

javaparser-core/src/main/java/com/github/javaparser/ast/jml/clauses/JmlCallableClause.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
import com.github.javaparser.metamodel.JmlCallableClauseMetaModel;
1111
import com.github.javaparser.ast.Node;
1212

13+
import java.util.Optional;
14+
import java.util.function.Consumer;
15+
1316
/**
1417
* @author Alexander Weigl
1518
* @version 1 (2/22/21)
@@ -58,4 +61,23 @@ public JmlCallableClauseMetaModel getMetaModel() {
5861
public JmlClauseKind getKind() {
5962
return JmlClauseKind.CALLABLE;
6063
}
64+
65+
@Override
66+
public boolean isJmlCallableClause() {
67+
return true;
68+
}
69+
70+
@Override
71+
public JmlCallableClause asJmlCallableClause() {
72+
return this;
73+
}
74+
75+
@Override
76+
public Optional<JmlCallableClause> toJmlCallableClause() {
77+
return Optional.of(this);
78+
}
79+
80+
public void ifJmlCallableClause(Consumer<JmlCallableClause> action) {
81+
action.accept(this);
82+
}
6183
}

javaparser-core/src/main/java/com/github/javaparser/ast/jml/clauses/JmlClause.java

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
import com.github.javaparser.metamodel.OptionalProperty;
1414
import java.util.Optional;
1515

16+
import static com.github.javaparser.utils.CodeGenerationUtils.f;
17+
18+
import java.util.function.Consumer;
19+
1620
/**
1721
* @author Alexander Weigl
1822
* @version 1 (2/21/21)
@@ -116,4 +120,124 @@ public boolean replace(Node node, Node replacementNode) {
116120
}
117121
return super.replace(node, replacementNode);
118122
}
123+
124+
public boolean isJmlCallableClause() {
125+
return false;
126+
}
127+
128+
public JmlCallableClause asJmlCallableClause() {
129+
throw new IllegalStateException(f("%s is not JmlCallableClause, it is %s", this, this.getClass().getSimpleName()));
130+
}
131+
132+
public Optional<JmlCallableClause> toJmlCallableClause() {
133+
return Optional.empty();
134+
}
135+
136+
public void ifJmlCallableClause(Consumer<JmlCallableClause> action) {
137+
}
138+
139+
public boolean isJmlClauseLabel() {
140+
return false;
141+
}
142+
143+
public JmlClauseLabel asJmlClauseLabel() {
144+
throw new IllegalStateException(f("%s is not JmlClauseLabel, it is %s", this, this.getClass().getSimpleName()));
145+
}
146+
147+
public Optional<JmlClauseLabel> toJmlClauseLabel() {
148+
return Optional.empty();
149+
}
150+
151+
public void ifJmlClauseLabel(Consumer<JmlClauseLabel> action) {
152+
}
153+
154+
public boolean isJmlForallClause() {
155+
return false;
156+
}
157+
158+
public JmlForallClause asJmlForallClause() {
159+
throw new IllegalStateException(f("%s is not JmlForallClause, it is %s", this, this.getClass().getSimpleName()));
160+
}
161+
162+
public Optional<JmlForallClause> toJmlForallClause() {
163+
return Optional.empty();
164+
}
165+
166+
public void ifJmlForallClause(Consumer<JmlForallClause> action) {
167+
}
168+
169+
public boolean isJmlMultiExprClause() {
170+
return false;
171+
}
172+
173+
public JmlMultiExprClause asJmlMultiExprClause() {
174+
throw new IllegalStateException(f("%s is not JmlMultiExprClause, it is %s", this, this.getClass().getSimpleName()));
175+
}
176+
177+
public Optional<JmlMultiExprClause> toJmlMultiExprClause() {
178+
return Optional.empty();
179+
}
180+
181+
public void ifJmlMultiExprClause(Consumer<JmlMultiExprClause> action) {
182+
}
183+
184+
public boolean isJmlOldClause() {
185+
return false;
186+
}
187+
188+
public JmlOldClause asJmlOldClause() {
189+
throw new IllegalStateException(f("%s is not JmlOldClause, it is %s", this, this.getClass().getSimpleName()));
190+
}
191+
192+
public Optional<JmlOldClause> toJmlOldClause() {
193+
return Optional.empty();
194+
}
195+
196+
public void ifJmlOldClause(Consumer<JmlOldClause> action) {
197+
}
198+
199+
public boolean isJmlSignalsClause() {
200+
return false;
201+
}
202+
203+
public JmlSignalsClause asJmlSignalsClause() {
204+
throw new IllegalStateException(f("%s is not JmlSignalsClause, it is %s", this, this.getClass().getSimpleName()));
205+
}
206+
207+
public Optional<JmlSignalsClause> toJmlSignalsClause() {
208+
return Optional.empty();
209+
}
210+
211+
public void ifJmlSignalsClause(Consumer<JmlSignalsClause> action) {
212+
}
213+
214+
public boolean isJmlSignalsOnlyClause() {
215+
return false;
216+
}
217+
218+
public JmlSignalsOnlyClause asJmlSignalsOnlyClause() {
219+
throw new IllegalStateException(f("%s is not JmlSignalsOnlyClause, it is %s", this, this.getClass().getSimpleName()));
220+
}
221+
222+
public Optional<JmlSignalsOnlyClause> toJmlSignalsOnlyClause() {
223+
return Optional.empty();
224+
}
225+
226+
public void ifJmlSignalsOnlyClause(Consumer<JmlSignalsOnlyClause> action) {
227+
}
228+
229+
public boolean isJmlSimpleExprClause() {
230+
return false;
231+
}
232+
233+
public JmlSimpleExprClause asJmlSimpleExprClause() {
234+
throw new IllegalStateException(f("%s is not JmlSimpleExprClause, it is %s", this, this.getClass().getSimpleName()));
235+
}
236+
237+
public Optional<JmlSimpleExprClause> toJmlSimpleExprClause() {
238+
return Optional.empty();
239+
}
240+
241+
public void ifJmlSimpleExprClause(Consumer<JmlSimpleExprClause> action) {
242+
}
119243
}

javaparser-core/src/main/java/com/github/javaparser/ast/jml/clauses/JmlClauseLabel.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import java.util.Optional;
1919
import static com.github.javaparser.utils.Utils.assertNotNull;
2020

21+
import java.util.function.Consumer;
22+
2123
/**
2224
* @author Alexander Weigl
2325
* @version 1 (2/21/21)
@@ -185,4 +187,23 @@ public JmlClauseLabel setKind(final JmlClauseKind kind) {
185187
this.kind = kind;
186188
return this;
187189
}
190+
191+
@Override
192+
public boolean isJmlClauseLabel() {
193+
return true;
194+
}
195+
196+
@Override
197+
public JmlClauseLabel asJmlClauseLabel() {
198+
return this;
199+
}
200+
201+
@Override
202+
public Optional<JmlClauseLabel> toJmlClauseLabel() {
203+
return Optional.of(this);
204+
}
205+
206+
public void ifJmlClauseLabel(Consumer<JmlClauseLabel> action) {
207+
action.accept(this);
208+
}
188209
}

javaparser-core/src/main/java/com/github/javaparser/ast/jml/clauses/JmlForallClause.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
import com.github.javaparser.metamodel.JmlForallClauseMetaModel;
1515
import static com.github.javaparser.utils.Utils.assertNotNull;
1616

17+
import java.util.Optional;
18+
import java.util.function.Consumer;
19+
1720
/**
1821
* @author Alexander Weigl
1922
* @version 1 (2/22/21)
@@ -114,4 +117,23 @@ public JmlForallClauseMetaModel getMetaModel() {
114117
public JmlClauseKind getKind() {
115118
return JmlClauseKind.FORALL;
116119
}
120+
121+
@Override
122+
public boolean isJmlForallClause() {
123+
return true;
124+
}
125+
126+
@Override
127+
public JmlForallClause asJmlForallClause() {
128+
return this;
129+
}
130+
131+
@Override
132+
public Optional<JmlForallClause> toJmlForallClause() {
133+
return Optional.of(this);
134+
}
135+
136+
public void ifJmlForallClause(Consumer<JmlForallClause> action) {
137+
action.accept(this);
138+
}
117139
}

javaparser-core/src/main/java/com/github/javaparser/ast/jml/clauses/JmlMultiExprClause.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import java.util.Optional;
1919
import static com.github.javaparser.utils.Utils.assertNotNull;
2020

21+
import java.util.function.Consumer;
22+
2123
/**
2224
* @author Alexander Weigl
2325
* @version 1 (25.02.22)
@@ -192,4 +194,23 @@ public JmlMultiExprClause setExpression(final NodeList<Expression> expressions)
192194
setAsParentNodeOf(expressions);
193195
return this;
194196
}
197+
198+
@Override
199+
public boolean isJmlMultiExprClause() {
200+
return true;
201+
}
202+
203+
@Override
204+
public JmlMultiExprClause asJmlMultiExprClause() {
205+
return this;
206+
}
207+
208+
@Override
209+
public Optional<JmlMultiExprClause> toJmlMultiExprClause() {
210+
return Optional.of(this);
211+
}
212+
213+
public void ifJmlMultiExprClause(Consumer<JmlMultiExprClause> action) {
214+
action.accept(this);
215+
}
195216
}

javaparser-core/src/main/java/com/github/javaparser/ast/jml/clauses/JmlOldClause.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import com.github.javaparser.metamodel.JmlOldClauseMetaModel;
1414
import static com.github.javaparser.utils.Utils.assertNotNull;
1515

16+
import java.util.Optional;
17+
import java.util.function.Consumer;
18+
1619
/**
1720
* @author Alexander Weigl
1821
* @version 1 (12/12/21)
@@ -101,4 +104,23 @@ public JmlOldClauseMetaModel getMetaModel() {
101104
public JmlClauseKind getKind() {
102105
return JmlClauseKind.OLD;
103106
}
107+
108+
@Override
109+
public boolean isJmlOldClause() {
110+
return true;
111+
}
112+
113+
@Override
114+
public JmlOldClause asJmlOldClause() {
115+
return this;
116+
}
117+
118+
@Override
119+
public Optional<JmlOldClause> toJmlOldClause() {
120+
return Optional.of(this);
121+
}
122+
123+
public void ifJmlOldClause(Consumer<JmlOldClause> action) {
124+
action.accept(this);
125+
}
104126
}

javaparser-core/src/main/java/com/github/javaparser/ast/jml/clauses/JmlSignalsClause.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
import com.github.javaparser.metamodel.JmlSignalsClauseMetaModel;
1616
import static com.github.javaparser.utils.Utils.assertNotNull;
1717

18+
import java.util.Optional;
19+
import java.util.function.Consumer;
20+
1821
/**
1922
* @author Alexander Weigl
2023
* @version 1 (2/21/21)
@@ -133,4 +136,23 @@ public boolean replace(Node node, Node replacementNode) {
133136
public JmlSignalsClause clone() {
134137
return (JmlSignalsClause) accept(new CloneVisitor(), null);
135138
}
139+
140+
@Override
141+
public boolean isJmlSignalsClause() {
142+
return true;
143+
}
144+
145+
@Override
146+
public JmlSignalsClause asJmlSignalsClause() {
147+
return this;
148+
}
149+
150+
@Override
151+
public Optional<JmlSignalsClause> toJmlSignalsClause() {
152+
return Optional.of(this);
153+
}
154+
155+
public void ifJmlSignalsClause(Consumer<JmlSignalsClause> action) {
156+
action.accept(this);
157+
}
136158
}

0 commit comments

Comments
 (0)