Skip to content

Commit 8e49c8c

Browse files
authored
fix #264
1 parent 4d1317f commit 8e49c8c

File tree

14 files changed

+2240
-38
lines changed

14 files changed

+2240
-38
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
<dependency>
7979
<groupId>fr.inria.gforge.spoon.labs </groupId>
8080
<artifactId>gumtree-spoon-ast-diff</artifactId>
81-
<version>1.62</version>
81+
<version>1.70</version>
8282
</dependency>
8383

8484
<dependency>

src/main/java/fr/inria/coming/codefeatures/codeanalyze/AbstractCodeAnalyzer.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import spoon.reflect.visitor.filter.LineFilter;
4242
import spoon.reflect.visitor.filter.TypeFilter;
4343

44+
import static fr.inria.coming.codefeatures.codeanalyze.BinaryOperatorAnalyzer.getStringRepr;
45+
4446
public abstract class AbstractCodeAnalyzer {
4547

4648
protected CodeElementInfo elementinfo;
@@ -295,8 +297,8 @@ public boolean checkNormalGuardCondition(CtExpression condition) {
295297
if (binOp != null && binOp.size() > 0) {
296298

297299
for (CtBinaryOperator ctBinaryOperator : binOp) {
298-
if (ctBinaryOperator.getRightHandOperand().toString().equals("null")
299-
|| ctBinaryOperator.getLeftHandOperand().toString().equals("null")) {
300+
if (getStringRepr(ctBinaryOperator.getRightHandOperand()).equals("null")
301+
|| getStringRepr(ctBinaryOperator.getLeftHandOperand()).equals("null")) {
300302

301303
return false;
302304
}
@@ -349,8 +351,8 @@ public boolean checkNullCheckGuardCondition(CtExpression condition) {
349351
if (binOp != null && binOp.size() > 0) {
350352

351353
for (CtBinaryOperator ctBinaryOperator : binOp) {
352-
if (!ctBinaryOperator.getRightHandOperand().toString().equals("null")
353-
&& !ctBinaryOperator.getLeftHandOperand().toString().equals("null")) {
354+
if (!getStringRepr(ctBinaryOperator.getRightHandOperand()).equals("null")
355+
&& !getStringRepr(ctBinaryOperator.getLeftHandOperand()).equals("null")) {
354356

355357
return false;
356358
}

src/main/java/fr/inria/coming/codefeatures/codeanalyze/BinaryOperatorAnalyzer.java

+67-17
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ private void analyzeBinaryWhetehrMathRoot (CtBinaryOperator operatorunderstudy,
8989
whethermathroot =false;
9090
}
9191

92-
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+operatorunderstudy, CodeFeatures.O5_IS_MATH_ROOT,
92+
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+getStringRepr(operatorunderstudy), CodeFeatures.O5_IS_MATH_ROOT,
9393
whethermathroot, "FEATURES_BINARYOPERATOR");
9494
}
9595

@@ -122,7 +122,7 @@ private void analyzeBinaryLogicalOperator(CtBinaryOperator operatorunderstudy, i
122122
}
123123
}
124124

125-
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+operatorunderstudy, CodeFeatures.O2_LOGICAL_CONTAIN_NOT,
125+
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+getStringRepr(operatorunderstudy), CodeFeatures.O2_LOGICAL_CONTAIN_NOT,
126126
whethercontainnotoperator, "FEATURES_BINARYOPERATOR");
127127

128128
}
@@ -166,27 +166,75 @@ private void analyzeBinaryOperatorKind(CtBinaryOperator operatorunderstudy, int
166166

167167
for(int index=0; index<binoperatortype.size(); index++) {
168168
CodeFeatures cerainfeature = binoperatortype.get(index);
169-
169+
170+
final String operatorunderstudyStr = getStringRepr(operatorunderstudy);
170171
if(cerainfeature.toString().endsWith(operatorstring.toUpperCase()))
171-
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+operatorunderstudy, cerainfeature,
172+
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+ operatorunderstudyStr, cerainfeature,
172173
true, "FEATURES_BINARYOPERATOR");
173-
else writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+operatorunderstudy, cerainfeature,
174+
else writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+ operatorunderstudyStr, cerainfeature,
174175
false, "FEATURES_BINARYOPERATOR");
175176
}
176177
}
177-
178+
179+
public static String getStringRepr(CtElement operatorunderstudy) {
180+
// workaround for
181+
// at spoon.support.reflect.reference.CtTypeReferenceImpl.getAccessType(CtTypeReferenceImpl.java:774)
182+
// at spoon.reflect.visitor.ImportAnalyzer$ScannerListener.enter(ImportAnalyzer.java:135)
183+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:124)
184+
// at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
185+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
186+
// at spoon.reflect.visitor.CtScanner.visitCtTypeReference(CtScanner.java:813)
187+
// at spoon.support.reflect.reference.CtTypeReferenceImpl.accept(CtTypeReferenceImpl.java:79)
188+
// at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
189+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:127)
190+
// at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
191+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
192+
// at spoon.reflect.visitor.CtScanner.visitCtTypeAccess(CtScanner.java:825)
193+
// at spoon.support.reflect.code.CtTypeAccessImpl.accept(CtTypeAccessImpl.java:28)
194+
// at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
195+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:127)
196+
// at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
197+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
198+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
199+
// at spoon.reflect.visitor.CtScanner.visitCtInvocation(CtScanner.java:528)
200+
// at spoon.support.reflect.code.CtInvocationImpl.accept(CtInvocationImpl.java:46)
201+
// at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
202+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:127)
203+
// at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
204+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
205+
// at spoon.reflect.visitor.CtScanner.visitCtBinaryOperator(CtScanner.java:312)
206+
// at spoon.support.reflect.code.CtBinaryOperatorImpl.accept(CtBinaryOperatorImpl.java:34)
207+
// at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
208+
// at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:127)
209+
// at spoon.reflect.visitor.ImportAnalyzer.process(ImportAnalyzer.java:48)
210+
// at spoon.reflect.visitor.ForceFullyQualifiedProcessor.process(ForceFullyQualifiedProcessor.java:28)
211+
// at spoon.reflect.visitor.DefaultJavaPrettyPrinter.applyPreProcessors(DefaultJavaPrettyPrinter.java:2136)
212+
// at spoon.reflect.visitor.DefaultJavaPrettyPrinter.printElement(DefaultJavaPrettyPrinter.java:281)
213+
// at spoon.support.reflect.declaration.CtElementImpl.toString(CtElementImpl.java:295)
214+
// at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
215+
216+
try {
217+
return operatorunderstudy.toString();
218+
} catch (Exception e) {
219+
// fake string, please open an issue if this is a problem
220+
return "FIXME_oefa";
221+
}
222+
}
223+
178224
//icse15dataset: 1367617, 267239, 597123, 1348493, 614068, 306964, 902094, 410960, 1456710, 1458106
179225
private void analyzeBinaryOperatorInvolveNull(CtBinaryOperator operatorunderstudy, int operatorindex, Cntx<Object> context) {
180226

181227
boolean whethercontainnull = false;
182228

183229
CtExpression leftexpression = operatorunderstudy.getLeftHandOperand();
184230
CtExpression rightexpression = operatorunderstudy.getRightHandOperand();
185-
186-
if(leftexpression.toString().trim().equals("null") || rightexpression.toString().trim().equals("null"))
231+
232+
final String leftStr = getStringRepr(leftexpression);
233+
final String rightStr = getStringRepr(rightexpression);
234+
if(leftStr.trim().equals("null") || rightStr.trim().equals("null"))
187235
whethercontainnull = true;
188236

189-
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+operatorunderstudy, CodeFeatures.O3_CONTAIN_NULL,
237+
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+getStringRepr(operatorunderstudy), CodeFeatures.O3_CONTAIN_NULL,
190238
whethercontainnull, "FEATURES_BINARYOPERATOR");
191239

192240
}
@@ -199,15 +247,17 @@ private void analyzeBinaryOperatorInvolve01 (CtBinaryOperator operatorunderstudy
199247

200248
CtExpression leftexpression = operatorunderstudy.getLeftHandOperand();
201249
CtExpression rightexpression = operatorunderstudy.getRightHandOperand();
202-
203-
if(leftexpression.toString().trim().equals("0") || leftexpression.toString().trim().equals("0.0") ||
204-
leftexpression.toString().trim().equals("1.0") || leftexpression.toString().trim().equals("1")
205-
|| rightexpression.toString().trim().equals("0") || rightexpression.toString().trim().equals("0.0") ||
206-
rightexpression.toString().trim().equals("1.0") || rightexpression.toString().trim().equals("1")
207-
|| leftexpression.toString().trim().endsWith("1") || rightexpression.toString().trim().endsWith("1"))
250+
251+
final String leftStr = getStringRepr(leftexpression);
252+
final String rightStr = getStringRepr(rightexpression);
253+
if(leftStr.trim().equals("0") || leftStr.trim().equals("0.0") ||
254+
leftStr.trim().equals("1.0") || leftStr.trim().equals("1")
255+
|| rightStr.trim().equals("0") || rightStr.trim().equals("0.0") ||
256+
rightStr.trim().equals("1.0") || rightStr.trim().equals("1")
257+
|| leftStr.trim().endsWith("1") || rightStr.trim().endsWith("1"))
208258
whethercontain01 = true;
209259

210-
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+operatorunderstudy, CodeFeatures.O3_CONTAIN_01,
260+
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+getStringRepr(operatorunderstudy), CodeFeatures.O3_CONTAIN_01,
211261
whethercontain01, "FEATURES_BINARYOPERATOR");
212262
}
213263

@@ -224,7 +274,7 @@ private void analyzeBinaryOperatorCompareInCondition (CtElement wholeoriginal, C
224274
whethercompareincondition = true;
225275
}
226276

227-
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+operatorunderstudy, CodeFeatures.O4_COMPARE_IN_CONDITION,
277+
writeGroupedInfo(context, Integer.toString(operatorindex)+"_"+getStringRepr(operatorunderstudy), CodeFeatures.O4_COMPARE_IN_CONDITION,
228278
whethercompareincondition, "FEATURES_BINARYOPERATOR");
229279
}
230280
}

src/main/java/fr/inria/coming/codefeatures/codeanalyze/MethodAnalyzer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,7 @@ private int[] argumentDiffMethod(List<CtElement> argumentsoriginal, List<CtEleme
740740
CtElement original = argumentsoriginal.get(index);
741741
CtElement other = argumentsother.get(index);
742742

743-
if(original.equals(other) || original.toString().equals(other.toString())) {
743+
if(original.equals(other)) {
744744
// same
745745
} else {
746746
numberdiffargument+=1;

src/main/java/fr/inria/coming/codefeatures/codeanalyze/VariableAnalyzer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ private int[] argumentDiff(List<CtElement> argumentsoriginal, List<CtElement> ar
909909
CtElement original = argumentsoriginal.get(index);
910910
CtElement other = argumentsother.get(index);
911911

912-
if(original.equals(other) || original.toString().equals(other.toString())) {
912+
if(original.equals(other)) {
913913
// same
914914
} else {
915915
numberdiffargument+=1;

src/main/java/fr/inria/coming/core/entities/output/JSonPatternInstanceOutput.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import gumtree.spoon.diff.operations.Operation;
2727
import org.json.simple.JSONObject;
2828

29+
import static fr.inria.coming.codefeatures.codeanalyze.BinaryOperatorAnalyzer.getStringRepr;
30+
2931
public class JSonPatternInstanceOutput implements IOutput {
3032

3133
@Override
@@ -152,9 +154,9 @@ public static JsonObject getJSONFromOperator(Operation operation) {
152154
: "null");
153155

154156
op.addProperty("src_parent",
155-
(operation.getSrcNode() != null) ? operation.getSrcNode().getParent().toString() : "null");
157+
(operation.getSrcNode() != null) ? getStringRepr(operation.getSrcNode().getParent()) : "null");
156158
op.addProperty("dst_parent",
157-
(operation.getDstNode() != null) ? operation.getDstNode().getParent().toString() : "null");
159+
(operation.getDstNode() != null) ? getStringRepr(operation.getDstNode().getParent()) : "null");
158160

159161
return op;
160162
}

0 commit comments

Comments
 (0)