Skip to content

Commit c3cc215

Browse files
committed
SourceNaming: init && finish VariableDeclarator part
1 parent 6a60fb0 commit c3cc215

File tree

5 files changed

+164
-3
lines changed

5 files changed

+164
-3
lines changed

src/main/java/org/hacksource/core/SourceFormat.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.hacksource.core;
22

3-
import com.github.javaparser.Range;
43
import com.github.javaparser.TokenRange;
54
import com.github.javaparser.ast.CompilationUnit;
65
import com.github.javaparser.ast.Node;
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package org.hacksource.core;
2+
3+
import com.github.javaparser.TokenRange;
4+
import com.github.javaparser.ast.CompilationUnit;
5+
import com.github.javaparser.ast.Node;
6+
7+
import com.github.javaparser.ast.body.FieldDeclaration;
8+
import com.github.javaparser.ast.body.Parameter;
9+
import com.github.javaparser.ast.body.VariableDeclarator;
10+
import com.github.javaparser.ast.expr.NameExpr;
11+
import com.github.javaparser.ast.visitor.GenericVisitor;
12+
import com.github.javaparser.ast.visitor.VoidVisitor;
13+
import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration;
14+
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserFieldDeclaration;
15+
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration;
16+
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserParameterDeclaration;
17+
18+
import java.io.FileWriter;
19+
import java.io.IOException;
20+
import java.nio.file.Paths;
21+
import java.util.*;
22+
23+
public class SourceNaming {
24+
25+
public static void naming(CompilationUnit cu, List<SourceProblem> list) {
26+
27+
Map<Node, List<Node>> symbolMap = new HashMap<>();
28+
29+
cu.findAll(NameExpr.class).forEach(ne -> {
30+
ResolvedValueDeclaration rne = ne.resolve();
31+
32+
Node node = null;
33+
if(rne instanceof JavaParserSymbolDeclaration) {
34+
node = ((JavaParserSymbolDeclaration)rne).getWrappedNode();
35+
}
36+
else if (rne instanceof JavaParserFieldDeclaration) {
37+
node = ((JavaParserFieldDeclaration)rne).getWrappedNode();
38+
}
39+
else if (rne instanceof JavaParserParameterDeclaration) {
40+
node = ((JavaParserParameterDeclaration)rne).getWrappedNode();
41+
}
42+
43+
if(symbolMap.containsKey(node)) {
44+
symbolMap.get(node).add(ne);
45+
}
46+
else {
47+
List<Node> newList = new ArrayList<>();
48+
newList.add(ne);
49+
symbolMap.put(node, newList);
50+
}
51+
52+
});
53+
54+
symbolMap.forEach((k, v) -> {
55+
if(k instanceof FieldDeclaration) {
56+
// TODO
57+
}
58+
else if(k instanceof Parameter) {
59+
// TODO
60+
}
61+
else if(k instanceof VariableDeclarator){
62+
// local vars
63+
if(k.getChildNodes().size() >= 2) {
64+
Node child = k.getChildNodes().get(1);
65+
66+
fixNameToLower(child.toString()).ifPresent(name -> {
67+
((VariableDeclarator)k).setName(name);
68+
69+
for (Node n : v) {
70+
((NameExpr)n).setName(name);
71+
}
72+
73+
TokenRange tokenRange = k.getTokenRange().orElseThrow(() -> new RuntimeException("cannot get range"));
74+
list.add(new SourceProblem("s5.2.7-local-variable-names", tokenRange));
75+
});
76+
}
77+
}
78+
});
79+
}
80+
81+
private static Optional<String> fixNameToLower(String name) {
82+
if(name.charAt(0) >= 'A' && name.charAt(0) <= 'Z') {
83+
return Optional.of(name.substring(0, 1).toLowerCase() + name.substring(1));
84+
}
85+
86+
else return Optional.empty();
87+
}
88+
89+
public static void main(String[] args) throws IOException, SourceException {
90+
String path = SourceFormat.class.getResource("/example2.java").getPath();
91+
path = path.substring(1);
92+
93+
List<SourceProblem> problems = new ArrayList<>();
94+
CompilationUnit cu = SourceParser.parseFile(Paths.get(path));
95+
naming(cu, problems);
96+
97+
problems.forEach(p -> System.out.println(p));
98+
99+
FileWriter fileWriter = new FileWriter("generated/example2.java");
100+
fileWriter.write(cu.toString());
101+
fileWriter.close();
102+
103+
}
104+
105+
}

src/main/java/org/hacksource/core/SourceParser.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import com.github.javaparser.JavaParser;
44
import com.github.javaparser.ParseResult;
55
import com.github.javaparser.ast.CompilationUnit;
6+
import com.github.javaparser.symbolsolver.JavaSymbolSolver;
7+
import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver;
8+
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
69

710
import java.io.IOException;
811
import java.nio.file.Files;
@@ -15,7 +18,14 @@
1518
public class SourceParser {
1619

1720
public static CompilationUnit parse(String source) throws SourceException {
21+
CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver();
22+
combinedTypeSolver.add(new ReflectionTypeSolver());
23+
24+
JavaSymbolSolver symbolSolver = new JavaSymbolSolver(combinedTypeSolver);
25+
1826
JavaParser javaParser = new JavaParser();
27+
javaParser.getParserConfiguration().setSymbolResolver(symbolSolver);
28+
1929
ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider(source));
2030

2131
CompilationUnit cu = result.getResult().orElseThrow(() -> new SourceException(result.getProblems()));

src/main/resources/example.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
public class Graph {
88

99
private final int V;private int E ;
10-
private LinkedList<Integer>[] adj;
10+
private LinkedList<Integer>[] adj;
1111

1212
public Graph(int V)
1313
{
14-
this.V=V;
14+
this.V= V;
1515
this.E=0;
1616
adj = (LinkedList <Integer>[ ]) new LinkedList[ V];
1717
for (int v =0; v< V; v ++)

src/main/resources/example2.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package Graph;
2+
3+
import java.util.LinkedList;
4+
5+
public class Graph {
6+
7+
private final int V;
8+
9+
private int E;
10+
11+
private LinkedList<Integer>[] adj;
12+
13+
public Graph(int V) {
14+
this.V = V;
15+
this.E = 0;
16+
adj = (LinkedList<Integer>[]) new LinkedList[V];
17+
for (int v = 0; v < V; v++) {
18+
adj[v] = new LinkedList<>();
19+
}
20+
}
21+
22+
public int V() {
23+
return V;
24+
}
25+
26+
public int E() {
27+
return E;
28+
}
29+
30+
public void addEdge(int v, int w) {
31+
adj[v].add(w);
32+
adj[w].add(v);
33+
E++;
34+
}
35+
36+
public LinkedList<Integer> adj(int v) {
37+
return adj[v];
38+
}
39+
40+
public int degree(int Vertex, Graph g) {
41+
int Count = 0;
42+
for (int s : adj(Vertex)) {
43+
Count++;
44+
}
45+
return Count;
46+
}
47+
}

0 commit comments

Comments
 (0)