Skip to content

Commit e16d713

Browse files
committed
matching of operators for assignments
1 parent 7d9af86 commit e16d713

12 files changed

Lines changed: 60 additions & 45 deletions

File tree

key.core.infflow/src/main/java/de/uka/ilkd/key/informationflow/po/snippet/BasicLoopExecutionSnippet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.key_project.util.collection.ImmutableSLList;
2323
import org.key_project.util.collection.Pair;
2424

25-
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.Copy;
25+
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.COPY;
2626

2727
public class BasicLoopExecutionSnippet extends ReplaceAndRegisterMethod implements FactoryMethod {
2828

@@ -104,7 +104,7 @@ private Pair<JavaBlock, JavaBlock> buildJavaBlock(BasicSnippetData d) {
104104
StatementBlock sb = (StatementBlock) inv.getLoop().getBody();
105105

106106
final Assignment guardVarDecl =
107-
new Assignment(Copy, (LocationVariable) d.origVars.guard.op(),
107+
new Assignment(COPY, (LocationVariable) d.origVars.guard.op(),
108108
inv.getLoop().getGuardExpression());
109109
final Statement guardVarMethodFrame = context == null ? guardVarDecl
110110
: new MethodFrame(null, context, new StatementBlock(guardVarDecl));

key.core.proof_references/src/main/java/de/uka/ilkd/key/proof_references/analyst/ProgramVariableReferencesAnalyst.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import de.uka.ilkd.key.proof_references.reference.DefaultProofReference;
2121
import de.uka.ilkd.key.proof_references.reference.IProofReference;
2222

23-
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.Copy;
23+
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.COPY;
2424

2525
/**
2626
* Extracts read and write access to fields ({@link IProgramVariable}) via assignments.
@@ -35,7 +35,7 @@ public class ProgramVariableReferencesAnalyst implements IProofReferencesAnalyst
3535
public LinkedHashSet<IProofReference<?>> computeReferences(Node node, Services services) {
3636
if (node.getAppliedRuleApp() != null && node.getNodeInfo() != null) {
3737
SourceElement statement = node.getNodeInfo().getActiveStatement();
38-
if (statement instanceof Assignment a && a.getKind() == Copy) {
38+
if (statement instanceof Assignment a && a.getKind() == COPY) {
3939
LinkedHashSet<IProofReference<?>> result = new LinkedHashSet<>();
4040
listReferences(node, a,
4141
services.getJavaInfo().getArrayLength(), result, true);

key.core/src/main/java/de/uka/ilkd/key/java/KeYJavaASTFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
import org.jspecify.annotations.Nullable;
3636

37-
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.Copy;
37+
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.COPY;
3838

3939
/**
4040
* The KeYASTFactory helps building KeY Java AST structures.
@@ -45,7 +45,7 @@ public abstract class KeYJavaASTFactory {
4545
* creates an assignment <code> lhs:=rhs </code>
4646
*/
4747
public static Assignment assign(Expression lhs, Expression rhs) {
48-
return new Assignment(Copy, lhs, rhs);
48+
return new Assignment(COPY, lhs, rhs);
4949
}
5050

5151
/**

key.core/src/main/java/de/uka/ilkd/key/java/ast/expression/Assignment.java

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,22 @@
99
import de.uka.ilkd.key.java.Services;
1010
import de.uka.ilkd.key.java.ast.Comment;
1111
import de.uka.ilkd.key.java.ast.PositionInfo;
12+
import de.uka.ilkd.key.java.ast.ProgramElement;
13+
import de.uka.ilkd.key.java.ast.SourceData;
1214
import de.uka.ilkd.key.java.ast.abstraction.KeYJavaType;
1315
import de.uka.ilkd.key.java.ast.expression.literal.BooleanLiteral;
16+
import de.uka.ilkd.key.java.ast.expression.operator.LogicFunctionalOperator;
1417
import de.uka.ilkd.key.java.ast.reference.ExecutionContext;
1518
import de.uka.ilkd.key.java.visitor.Visitor;
1619

20+
import de.uka.ilkd.key.rule.MatchConditions;
21+
import org.jspecify.annotations.Nullable;
1722
import org.key_project.util.ExtList;
1823
import org.key_project.util.collection.ImmutableArray;
1924

2025
import org.jspecify.annotations.NullMarked;
2126

22-
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.Copy;
27+
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.COPY;
2328

2429

2530
/**
@@ -37,18 +42,18 @@ public AssignmentKind getKind() {
3742
}
3843

3944
public enum AssignmentKind {
40-
Copy(""),
41-
BinaryOr("|"),
42-
Divide("/"),
43-
ShiftLeft("<<"),
44-
UnsignedShiftRight(">>>"),
45-
Plus("+"),
46-
ShiftRight(">>"),
47-
Minus("-"),
48-
Modulo("%"),
49-
Times("*"),
50-
BinaryAnd("&"),
51-
BinaryXOr("^");
45+
COPY(""),
46+
BINARY_OR("|"),
47+
DIVIDE("/"),
48+
SHIFT_LEFT("<<"),
49+
UNSIGNED_SHIFT_RIGHT(">>>"),
50+
PLUS("+"),
51+
SHIFT_RIGHT(">>"),
52+
MINUS("-"),
53+
MODULO("%"),
54+
TIMES("*"),
55+
BINARY_AND("&"),
56+
BINARY_XOR("^");
5257

5358
public final String symbol;
5459

@@ -85,7 +90,7 @@ public Assignment(AssignmentKind kind, Expression lhs, Expression rhs) {
8590
}
8691

8792
public Assignment(Expression lhs, Expression rhs) {
88-
this(Copy, lhs, rhs);
93+
this(COPY, lhs, rhs);
8994
}
9095

9196

@@ -101,6 +106,17 @@ public boolean isLeftAssociative() {
101106
}
102107

103108

109+
@Override
110+
public @Nullable MatchConditions match(SourceData source, MatchConditions matchCond) {
111+
final ProgramElement src = source.getSource();
112+
if(src instanceof Assignment other) {
113+
if (getKind().equals(other.getKind())) {
114+
return super.match(source, matchCond);
115+
}
116+
}
117+
return null;
118+
}
119+
104120
/**
105121
* retrieves the type of the assignment expression
106122
*

key.core/src/main/java/de/uka/ilkd/key/java/ast/expression/operator/LogicFunctionalOperator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import de.uka.ilkd.key.pp.PrettyPrinter;
2121

2222
import de.uka.ilkd.key.rule.MatchConditions;
23+
import org.jspecify.annotations.Nullable;
2324
import org.key_project.util.collection.ImmutableArray;
2425

2526
import static de.uka.ilkd.key.pp.PrettyPrinter.*;
@@ -106,7 +107,7 @@ public KeYJavaType getKeYJavaType(Services javaServ, ExecutionContext ec) {
106107
}
107108

108109
@Override
109-
public MatchConditions match(SourceData source, MatchConditions matchCond) {
110+
public @Nullable MatchConditions match(SourceData source, MatchConditions matchCond) {
110111
final ProgramElement src = source.getSource();
111112
if(src instanceof LogicFunctionalOperator other) {
112113
if (getFunction().equals(other.getFunction())) {

key.core/src/main/java/de/uka/ilkd/key/java/loader/JP2KeYConverter.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -231,18 +231,18 @@ public Object visit(AssignExpr n, Void arg) {
231231
var pi = createPositionInfo(n);
232232
var c = createComments(n);
233233
var op = switch (n.getOperator()) {
234-
case ASSIGN -> AssignmentKind.Copy;
235-
case PLUS -> AssignmentKind.Plus;
236-
case MINUS -> AssignmentKind.Minus;
237-
case MULTIPLY -> AssignmentKind.Times;
238-
case DIVIDE -> AssignmentKind.Divide;
239-
case BINARY_AND -> AssignmentKind.BinaryAnd;
240-
case BINARY_OR -> AssignmentKind.BinaryOr;
241-
case XOR -> AssignmentKind.BinaryXOr;
242-
case REMAINDER -> AssignmentKind.Modulo;
243-
case LEFT_SHIFT -> AssignmentKind.ShiftLeft;
244-
case SIGNED_RIGHT_SHIFT -> AssignmentKind.ShiftRight;
245-
case UNSIGNED_RIGHT_SHIFT -> AssignmentKind.UnsignedShiftRight;
234+
case ASSIGN -> AssignmentKind.COPY;
235+
case PLUS -> AssignmentKind.PLUS;
236+
case MINUS -> AssignmentKind.MINUS;
237+
case MULTIPLY -> AssignmentKind.TIMES;
238+
case DIVIDE -> AssignmentKind.DIVIDE;
239+
case BINARY_AND -> AssignmentKind.BINARY_AND;
240+
case BINARY_OR -> AssignmentKind.BINARY_OR;
241+
case XOR -> AssignmentKind.BINARY_XOR;
242+
case REMAINDER -> AssignmentKind.MODULO;
243+
case LEFT_SHIFT -> AssignmentKind.SHIFT_LEFT;
244+
case SIGNED_RIGHT_SHIFT -> AssignmentKind.SHIFT_RIGHT;
245+
case UNSIGNED_RIGHT_SHIFT -> AssignmentKind.UNSIGNED_SHIFT_RIGHT;
246246
};
247247
return new Assignment(pi, c, op, target, expr);
248248
}

key.core/src/main/java/de/uka/ilkd/key/proof/init/AbstractOperationPO.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
import com.github.javaparser.ast.key.KeyTransactionStatement;
4343
import org.jspecify.annotations.Nullable;
4444

45-
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.Copy;
45+
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.COPY;
4646

4747
/**
4848
* <p>
@@ -908,11 +908,11 @@ protected JavaBlock buildJavaBlock(ImmutableList<LocationVariable> formalParVars
908908
sb2 = tryBlock;
909909
} else {
910910
// create try statement
911-
final Assignment nullStat = new Assignment(Copy, exceptionVar, NullLiteral.NULL);
911+
final Assignment nullStat = new Assignment(COPY, exceptionVar, NullLiteral.NULL);
912912
final VariableSpecification eSpec = new VariableSpecification(eVar);
913913
final ParameterDeclaration excDecl =
914914
new ParameterDeclaration(new Modifier[0], excTypeRef, eSpec, false);
915-
final Assignment assignStat = new Assignment(Copy, exceptionVar, eVar);
915+
final Assignment assignStat = new Assignment(COPY, exceptionVar, eVar);
916916
final Catch catchStat =
917917
new Catch(excDecl, catchBlock == null ? new StatementBlock(assignStat)
918918
: new StatementBlock(assignStat, catchBlock));

key.core/src/main/java/de/uka/ilkd/key/rule/ObserverToUpdateRule.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@
1111
import de.uka.ilkd.key.java.ast.expression.Assignment;
1212
import de.uka.ilkd.key.java.ast.expression.Expression;
1313
import de.uka.ilkd.key.java.ast.reference.*;
14-
import de.uka.ilkd.key.logic.*;
1514
import de.uka.ilkd.key.logic.JTerm;
1615
import de.uka.ilkd.key.logic.JavaBlock;
1716
import de.uka.ilkd.key.logic.TermBuilder;
1817
import de.uka.ilkd.key.logic.TermServices;
1918
import de.uka.ilkd.key.logic.label.TermLabelManager;
2019
import de.uka.ilkd.key.logic.label.TermLabelState;
21-
import de.uka.ilkd.key.logic.op.*;
2220
import de.uka.ilkd.key.logic.op.IObserverFunction;
2321
import de.uka.ilkd.key.logic.op.JModality;
2422
import de.uka.ilkd.key.logic.op.LocationVariable;
@@ -351,7 +349,7 @@ private static ModelFieldInstantiation matchModelField(JTerm focusTerm, Services
351349
// active statement must be reading model field
352350
final SourceElement activeStatement = JavaTools.getActiveStatement(mainFml.javaBlock());
353351
if (!(activeStatement instanceof Assignment ca
354-
&& ca.getKind() == Assignment.AssignmentKind.Copy)) {
352+
&& ca.getKind() == Assignment.AssignmentKind.COPY)) {
355353
return null;
356354
}
357355

key.core/src/main/java/de/uka/ilkd/key/rule/QueryExpand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
import org.slf4j.Logger;
4646
import org.slf4j.LoggerFactory;
4747

48-
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.Copy;
48+
import static de.uka.ilkd.key.java.ast.expression.Assignment.AssignmentKind.COPY;
4949

5050

5151
/**
@@ -201,7 +201,7 @@ public Pair<JTerm, JTerm> queryEvalTerm(Services services, JTerm query,
201201

202202
stmnt.add(KeYJavaASTFactory.declare(result, progResultType));
203203

204-
final Assignment assignment = new Assignment(Copy, result, mr);
204+
final Assignment assignment = new Assignment(COPY, result, mr);
205205

206206
stmnt.add(assignment);
207207

key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -927,7 +927,7 @@ protected void createPostGoal(Goal postGoal) {
927927
resultAssign = new StatementBlock();
928928
} else {
929929
final Assignment ca =
930-
new Assignment(Assignment.AssignmentKind.Copy, inst.actualResult, resultVar);
930+
new Assignment(Assignment.AssignmentKind.COPY, inst.actualResult, resultVar);
931931
resultAssign = new StatementBlock(ca);
932932
}
933933
final StatementBlock postSB = replaceStatement(jb, resultAssign);

0 commit comments

Comments
 (0)