Skip to content

Commit b5843cf

Browse files
committed
Fix quality flaw: move (unused, overwritten) methods to concrete class.
1 parent 12495bf commit b5843cf

3 files changed

Lines changed: 30 additions & 42 deletions

File tree

java-squid/src/main/java/org/sonar/java/se/symbolicvalues/BinarySymbolicValue.java

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@
2525
import org.sonar.java.se.ObjectConstraint;
2626
import org.sonar.java.se.ProgramState;
2727

28-
import javax.annotation.CheckForNull;
29-
30-
import java.util.ArrayList;
3128
import java.util.List;
3229

3330
public abstract class BinarySymbolicValue extends SymbolicValue {
@@ -53,42 +50,6 @@ public void computedFrom(List<SymbolicValue> symbolicValues) {
5350
leftOp = symbolicValues.get(1);
5451
}
5552

56-
@Override
57-
public List<ProgramState> setConstraint(ProgramState initialProgramState, BooleanConstraint booleanConstraint) {
58-
ProgramState programState = initialProgramState;
59-
if (leftOp.equals(rightOp)) {
60-
if (shouldNotInverse().equals(booleanConstraint)) {
61-
return ImmutableList.of(programState);
62-
}
63-
return ImmutableList.of();
64-
}
65-
programState = checkRelation(booleanConstraint, programState);
66-
if (programState == null) {
67-
return ImmutableList.of();
68-
}
69-
List<ProgramState> results = new ArrayList<>();
70-
List<ProgramState> copiedConstraints = copyConstraint(leftOp, rightOp, programState, booleanConstraint);
71-
for (ProgramState ps : copiedConstraints) {
72-
List<ProgramState> copiedConstraintsRightToLeft = copyConstraint(rightOp, leftOp, ps, booleanConstraint);
73-
if (copiedConstraintsRightToLeft.size() == 1 && copiedConstraintsRightToLeft.get(0).equals(programState)) {
74-
results.add(programState.addConstraint(this, booleanConstraint));
75-
} else {
76-
results.addAll(copiedConstraintsRightToLeft);
77-
}
78-
}
79-
return results;
80-
}
81-
82-
@CheckForNull
83-
protected ProgramState checkRelation(BooleanConstraint booleanConstraint, ProgramState programState) {
84-
return programState;
85-
}
86-
87-
@Override
88-
public String toString() {
89-
return "EQ_TO_" + super.toString();
90-
}
91-
9253
protected List<ProgramState> copyConstraint(SymbolicValue from, SymbolicValue to, ProgramState programState, BooleanConstraint booleanConstraint) {
9354
Object constraintLeft = programState.getConstraint(from);
9455
if (constraintLeft instanceof BooleanConstraint) {

java-squid/src/main/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValue.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
*/
2020
package org.sonar.java.se.symbolicvalues;
2121

22+
import com.google.common.collect.ImmutableList;
2223
import org.sonar.java.se.ConstraintManager.BooleanConstraint;
2324
import org.sonar.java.se.ProgramState;
2425

2526
import javax.annotation.CheckForNull;
2627

28+
import java.util.ArrayList;
2729
import java.util.List;
2830

2931
public class RelationalSymbolicValue extends BinarySymbolicValue {
@@ -55,6 +57,32 @@ public BooleanConstraint shouldNotInverse() {
5557
}
5658
}
5759

60+
@Override
61+
public List<ProgramState> setConstraint(ProgramState initialProgramState, BooleanConstraint booleanConstraint) {
62+
ProgramState programState = initialProgramState;
63+
if (leftOp.equals(rightOp)) {
64+
if (shouldNotInverse().equals(booleanConstraint)) {
65+
return ImmutableList.of(programState);
66+
}
67+
return ImmutableList.of();
68+
}
69+
programState = checkRelation(booleanConstraint, programState);
70+
if (programState == null) {
71+
return ImmutableList.of();
72+
}
73+
List<ProgramState> results = new ArrayList<>();
74+
List<ProgramState> copiedConstraints = copyConstraint(leftOp, rightOp, programState, booleanConstraint);
75+
for (ProgramState ps : copiedConstraints) {
76+
List<ProgramState> copiedConstraintsRightToLeft = copyConstraint(rightOp, leftOp, ps, booleanConstraint);
77+
if (copiedConstraintsRightToLeft.size() == 1 && copiedConstraintsRightToLeft.get(0).equals(programState)) {
78+
results.add(programState.addConstraint(this, booleanConstraint));
79+
} else {
80+
results.addAll(copiedConstraintsRightToLeft);
81+
}
82+
}
83+
return results;
84+
}
85+
5886
@Override
5987
protected List<ProgramState> copyConstraint(SymbolicValue from, SymbolicValue to, ProgramState programState, BooleanConstraint booleanConstraint) {
6088
ProgramState newState = programState;
@@ -64,9 +92,8 @@ protected List<ProgramState> copyConstraint(SymbolicValue from, SymbolicValue to
6492
return super.copyConstraint(from, to, newState, booleanConstraint);
6593
}
6694

67-
@Override
6895
@CheckForNull
69-
protected ProgramState checkRelation(BooleanConstraint booleanConstraint, ProgramState programState) {
96+
private ProgramState checkRelation(BooleanConstraint booleanConstraint, ProgramState programState) {
7097
RelationState relationState = binaryRelation().resolveState(programState.getKnownRelations());
7198
if (relationState.rejects(booleanConstraint)) {
7299
return null;

java-squid/src/test/java/org/sonar/java/se/symbolicvalues/BinaryRelationsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,6 @@ public void transitiveConjunction() {
643643
checkConjunction(LessThanOrEqualRelation.class, NotMethodEqualsRelation.class, LessThanRelation.class, RelationState.FULFILLED);
644644
checkConjunction(GreaterThanOrEqualRelation.class, NotMethodEqualsRelation.class, GreaterThanRelation.class, RelationState.FULFILLED);
645645
checkConjunction(GreaterThanOrEqualRelation.class, MethodEqualsRelation.class, EqualRelation.class, RelationState.UNDETERMINED);
646-
checkConjunction(NotMethodEqualsRelation.class, NotMethodEqualsRelation.class, EqualRelation.class, RelationState.UNDETERMINED);
646+
checkConjunction(NotMethodEqualsRelation.class, NotEqualRelation.class, LessThanRelation.class, RelationState.UNDETERMINED);
647647
}
648648
}

0 commit comments

Comments
 (0)