Skip to content

Commit 3ac3287

Browse files
authored
clean ExtendedFeature (#267)
1 parent 57ffcbf commit 3ac3287

16 files changed

+75
-1291
lines changed

src/main/java/fr/inria/coming/codefeatures/P4JFeatureAnalyzer.java

+20-37
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import java.util.Map;
1515

1616
import fr.inria.coming.core.entities.interfaces.IRevisionPair;
17-
import fr.inria.prophet4j.feature.extended.ExtendedFeatureCross;
17+
import fr.inria.prophet4j.feature.enhanced.EnhancedFeatureCross;
1818
import org.apache.log4j.Logger;
1919

2020
import com.google.gson.JsonObject;
@@ -24,7 +24,6 @@
2424
import fr.inria.coming.core.entities.AnalysisResult;
2525
import fr.inria.coming.core.entities.DiffResult;
2626
import fr.inria.coming.core.entities.RevisionResult;
27-
import fr.inria.coming.main.ComingProperties;
2827
import fr.inria.prophet4j.feature.Feature;
2928
import fr.inria.prophet4j.feature.FeatureCross;
3029
import fr.inria.prophet4j.utility.CodeDiffer;
@@ -98,49 +97,20 @@ public JsonObject extractFeatures(Map<String, File> filePaths) {
9897
return null;
9998
}
10099
Option option = new Option();
101-
option.featureOption = FeatureOption.EXTENDED;
102-
//We set the first parameter of CodeDiffer as False to not allow the code generation at buggy location
103-
//By default, coming extracts simple P4J features, so the cross sets to false
104-
Boolean cross = ComingProperties.getPropertyBoolean("cross");
100+
option.featureOption = FeatureOption.ENHANCED;
105101

106-
CodeDiffer codeDiffer = new CodeDiffer(false, option,cross);
102+
CodeDiffer codeDiffer = new CodeDiffer(false, option);
107103
//Get feature matrix
108104
List<FeatureMatrix> featureMatrix = codeDiffer.runByGenerator(src, target);
109105
//Get feature vector
110106
JsonObject jsonfile = null;
111107
// csvfile = genVectorsCSV(option,target,featureMatrix);
112-
jsonfile = getP4JJSON(option,target,featureMatrix,true);
108+
jsonfile = genVectorsJSON(option,target,featureMatrix);
113109
return jsonfile;
114110
}
115-
116-
117-
public JsonObject getP4JJSON(Option option, File target, List<FeatureMatrix> featureMatrix, Boolean numericalIndixator) {
118-
119-
JsonObject jsonfile = new JsonObject();
120-
121-
for (FeatureVector featureVector : featureMatrix.get(0).getFeatureVectors()) {
122-
List<FeatureCross> featureCrosses = featureVector.getNonSortedFeatureCrosses();
123-
124-
for (FeatureCross featureCross : featureCrosses) {
125-
List<Feature> simpleP4JFeatures= featureCross.getFeatures();
126-
for(Feature f: simpleP4JFeatures) {
127-
Boolean positive = featureCross.containFeature(f);
128-
if(numericalIndixator) {
129-
jsonfile.addProperty("P4J_"+f, positive?"1":"0");
130-
}else {
131-
jsonfile.addProperty("P4J_"+f, positive?"true":"false");
132-
}
133-
}
134-
135-
}
136-
}
137-
return jsonfile;
138-
139-
}
140111

141112

142-
143-
public JsonObject genVectorsCSV(Option option, File patchedFile, List<FeatureMatrix> featureMatrices) {
113+
public JsonObject genVectorsJSON(Option option, File patchedFile, List<FeatureMatrix> featureMatrices) {
144114

145115
String[] pathStr = patchedFile.getAbsolutePath().split("/");
146116
String fileName = pathStr[pathStr.length-1];
@@ -152,10 +122,23 @@ public JsonObject genVectorsCSV(Option option, File patchedFile, List<FeatureMat
152122
List<String> values = new ArrayList<>();
153123
JsonObject jsonfile = new JsonObject();
154124

155-
//Initial all vector as 0.
125+
126+
for (FeatureVector featureVector : featureMatrices.get(0).getFeatureVectors()) {
127+
List<FeatureCross> featureCrosses = featureVector.getNonSortedFeatureCrosses();
128+
for (FeatureCross featureCross : featureCrosses) {
129+
List<Feature> simpleP4JFeatures= featureCross.getFeatures();
130+
for(Feature f: simpleP4JFeatures) {
131+
Boolean positive = featureCross.containFeature(f);
132+
jsonfile.addProperty("P4J_"+f, positive?"true":"false");
133+
}
134+
135+
}
136+
}
137+
138+
//Initial all vector as 0.
156139
for (int idx = 0; idx < parameterVector.size(); idx++) {
157140
FeatureCross featureCross;
158-
featureCross = new ExtendedFeatureCross(idx);
141+
featureCross = new EnhancedFeatureCross(idx);
159142
header.add(featureCross.getFeatures().toString());
160143
values.add("0");
161144
}

src/main/java/fr/inria/prophet4j/feature/FeatureExtractor.java

-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,4 @@
88
public interface FeatureExtractor {
99
// this is for CodeDiffer.java
1010
FeatureVector extractFeature(Repair repair, CtElement atom);
11-
FeatureVector extractSimpleP4JFeature(Repair repair, CtElement atom);
1211
}

src/main/java/fr/inria/prophet4j/feature/enhanced/EnhancedFeatureCross.java

-1
Original file line numberDiff line numberDiff line change
@@ -224,5 +224,4 @@ public boolean containFeature(Feature feature) {
224224
public String toString() {
225225
return "FeatureCross: " + features;
226226
}
227-
228227
}

src/main/java/fr/inria/prophet4j/feature/enhanced/EnhancedFeatureExtractor.java

-6
Original file line numberDiff line numberDiff line change
@@ -552,10 +552,4 @@ private void getNearbyStmts(Repair repair, List<CtElement> stmtsF, List<CtElemen
552552
if (!repair.isReplace)
553553
stmtsL.add(srcElem);
554554
}
555-
556-
@Override
557-
public FeatureVector extractSimpleP4JFeature(Repair repair, CtElement atom) {
558-
// TODO Auto-generated method stub
559-
return null;
560-
}
561555
}

src/main/java/fr/inria/prophet4j/feature/extended/ExtendedRepairGenerator.java src/main/java/fr/inria/prophet4j/feature/enhanced/EnhancedRepairGenerator.java

+15-19
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,33 @@
1-
package fr.inria.prophet4j.feature.extended;
1+
package fr.inria.prophet4j.feature.enhanced;
22

3-
import java.lang.reflect.Type;
4-
import java.util.*;
5-
6-
import fr.inria.prophet4j.utility.Structure.RepairKind;
7-
import fr.inria.prophet4j.utility.Structure.Repair;
8-
import fr.inria.prophet4j.utility.Structure.DiffEntry;
93
import fr.inria.prophet4j.feature.RepairGenerator;
10-
import fr.inria.prophet4j.feature.extended.util.ExtendedRepairAnalyzer;
4+
import fr.inria.prophet4j.utility.Structure.DiffEntry;
5+
import fr.inria.prophet4j.utility.Structure.Repair;
6+
import fr.inria.prophet4j.utility.Structure.RepairKind;
7+
import fr.inria.prophet4j.feature.enhanced.util.EnhancedRepairAnalyzer;
118
import spoon.Launcher;
12-
import spoon.reflect.code.CtIf;
13-
import spoon.reflect.code.CtStatement;
14-
import spoon.reflect.code.CtStatementList;
9+
import spoon.reflect.code.*;
1510
import spoon.reflect.declaration.CtClass;
1611
import spoon.reflect.declaration.CtElement;
1712
import spoon.reflect.declaration.CtMethod;
18-
import spoon.reflect.visitor.filter.TypeFilter;
19-
import spoon.reflect.code.*;
2013
import spoon.reflect.factory.CoreFactory;
2114
import spoon.reflect.path.CtRole;
2215
import spoon.reflect.visitor.CtScanner;
16+
import spoon.reflect.visitor.filter.TypeFilter;
17+
18+
import java.lang.reflect.Type;
19+
import java.util.*;
2320

2421
// based on RepairGenerator.cpp
25-
public class ExtendedRepairGenerator implements RepairGenerator {
22+
public class EnhancedRepairGenerator implements RepairGenerator {
2623
private Set<CtElement> area; // loc_map
2724
private DiffEntry diffEntry;
2825
private CoreFactory factory;
2926
private List<Repair> repairs = new ArrayList<>();
3027
private Map<CtStatementList, Integer> compound_counter = new HashMap<>();
31-
private ExtendedRepairAnalyzer repairAnalyzer = new ExtendedRepairAnalyzer();
28+
private EnhancedRepairAnalyzer repairAnalyzer = new EnhancedRepairAnalyzer();
3229

33-
public ExtendedRepairGenerator(DiffEntry diffEntry) {
30+
public EnhancedRepairGenerator(DiffEntry diffEntry) {
3431
this.area = fuzzyLocator(diffEntry.srcNode);
3532
this.diffEntry = diffEntry;
3633
this.factory = new Launcher().getFactory().Core();
@@ -189,7 +186,7 @@ private void genAddIfExit(CtStatement n) {
189186

190187
private void genReplaceStmt(CtStatement n) {
191188
if (n instanceof CtExpression) {
192-
ExtendedRepairAnalyzer.AtomReplaceVisitor V = repairAnalyzer.newAtomReplaceVisitor();
189+
EnhancedRepairAnalyzer.AtomReplaceVisitor V = repairAnalyzer.newAtomReplaceVisitor();
193190
V.TraverseStmt(n);
194191
for (CtElement it : V.getResult()) {
195192
Repair repair = new Repair();
@@ -241,7 +238,7 @@ private void genReplaceStmt(CtStatement n) {
241238
private void genAddStmt(CtStatement n) {
242239
Set<CtElement> exprs = repairAnalyzer.getGlobalCandidateExprs(n);
243240
for (CtElement it: exprs) {
244-
ExtendedRepairAnalyzer.AtomReplaceVisitor V = repairAnalyzer.newAtomReplaceVisitor();
241+
EnhancedRepairAnalyzer.AtomReplaceVisitor V = repairAnalyzer.newAtomReplaceVisitor();
245242
V.TraverseStmt(it);
246243
// if (!repairAnalyzer.isValidStmt(it))
247244
// continue;
@@ -383,7 +380,6 @@ public Repair obtainHumanRepair() {
383380
} catch (Exception e) {
384381
// such as public, final, static
385382
}
386-
387383
return repair;
388384
}
389385

src/main/java/fr/inria/prophet4j/feature/extended/util/ExtendedRepairAnalyzer.java src/main/java/fr/inria/prophet4j/feature/enhanced/util/EnhancedRepairAnalyzer.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
package fr.inria.prophet4j.feature.extended.util;
1+
package fr.inria.prophet4j.feature.enhanced.util;
22

33
import spoon.reflect.code.*;
4-
import spoon.reflect.declaration.*;
4+
import spoon.reflect.declaration.CtClass;
5+
import spoon.reflect.declaration.CtElement;
6+
import spoon.reflect.declaration.CtMethod;
57
import spoon.reflect.visitor.filter.TypeFilter;
68

79
import java.lang.reflect.Type;
810
import java.util.*;
911

1012
// based on LocalAnalyzer.cpp GlobalAnalyzer.cpp
11-
public class ExtendedRepairAnalyzer {
13+
public class EnhancedRepairAnalyzer {
1214
public List<CtElement> getCondCandidateVars(CtElement element) {
1315
List<CtElement> ret = new ArrayList<>();
1416
// Global variables

0 commit comments

Comments
 (0)