Skip to content

Commit ec92551

Browse files
author
Sebastian Höfer
committed
Added InvokesDescriptor, InvokesManipulator
1 parent 2d1b0d0 commit ec92551

File tree

16 files changed

+70
-207
lines changed

16 files changed

+70
-207
lines changed

src/main/java/org/jqassistant/contrib/plugin/javascript/api/model/ArrayDeclaresRelationshipDescriptor.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/main/java/org/jqassistant/contrib/plugin/javascript/api/model/ArrayDescriptor.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.jqassistant.contrib.plugin.javascript.api.model;
22

3-
import java.util.List;
4-
53
import com.buschmais.jqassistant.core.store.api.model.FullQualifiedNameDescriptor;
64
import com.buschmais.xo.neo4j.api.annotation.Label;
75

@@ -19,11 +17,5 @@ public interface ArrayDescriptor extends BaseObjectDescriptor {
1917
default String getFullQualifiedName() {
2018
return ARRAY;
2119
}
22-
/**
23-
* Returns all index {@link ArrayDeclaresRelationshipDescriptor} of this array.
24-
*
25-
* @return The elements of the array.
26-
*/
27-
List<ArrayDeclaresRelationshipDescriptor> getArrayDeclares();
2820
}
2921

src/main/java/org/jqassistant/contrib/plugin/javascript/api/model/CodeArtifact.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,31 @@
33
import java.util.List;
44

55
import com.buschmais.jqassistant.core.store.api.model.FullQualifiedNameDescriptor;
6+
import com.buschmais.xo.neo4j.api.annotation.Label;
67
import com.buschmais.xo.neo4j.api.annotation.Relation;
8+
import com.buschmais.xo.neo4j.api.annotation.Relation.Outgoing;
79

810
/**
911
* Interface to describe a JavaScript code artifact.
1012
*
1113
* @author sh20xyqi
1214
*/
1315

16+
@Label("JavaScriptCode")
1417
public interface CodeArtifact extends FullQualifiedNameDescriptor, LineNumberDescriptor {
1518

1619
public static final String DECLARES = "DECLARES";
1720

21+
@Outgoing
22+
List<InvokesDescriptor> getInvokes();
23+
1824
/**
1925
* Contains all named and anonymous {@link FunctionDescriptor} that occur in this code artifact.
2026
* @return List of functions
2127
*/
2228
@Relation(DECLARES)
2329
List<FunctionDescriptor> getFunctions();
2430

25-
/**
26-
* Contains all functions that were called by another {@link FunctionDescriptor}.
27-
* @return List of invoked functions
28-
*/
29-
@Relation("INVOKES")
30-
List<FunctionDescriptor> getInvokes();
31-
3231
/**
3332
* Contains all named and anonymous {@link ClassDescriptor} that occur in this JavaScript code artifact.
3433
* @return List of classes

src/main/java/org/jqassistant/contrib/plugin/javascript/api/model/FunctionDescriptor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.buschmais.xo.neo4j.api.annotation.Label;
55
import com.buschmais.xo.neo4j.api.annotation.Property;
66
import com.buschmais.xo.neo4j.api.annotation.Relation;
7+
import com.buschmais.xo.neo4j.api.annotation.Relation.Incoming;
8+
79
import java.util.List;
810

911
/**
@@ -30,5 +32,7 @@ public interface FunctionDescriptor extends JsDescriptor, FullQualifiedNameDescr
3032
*/
3133
@Relation("HAS")
3234
List<FunctionParameterDescriptor> getParameters();
33-
35+
36+
@Incoming
37+
List<InvokesDescriptor> getInvokedBy();
3438
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.jqassistant.contrib.plugin.javascript.api.model;
2+
3+
import java.util.List;
4+
5+
import com.buschmais.jqassistant.core.store.api.model.Descriptor;
6+
import com.buschmais.xo.neo4j.api.annotation.Relation;
7+
import com.buschmais.xo.neo4j.api.annotation.Relation.Incoming;
8+
import com.buschmais.xo.neo4j.api.annotation.Relation.Outgoing;
9+
10+
/**
11+
* Defines an INVOKES relation between two methods.
12+
*/
13+
@Relation("INVOKES")
14+
public interface InvokesDescriptor extends Descriptor, LineNumberDescriptor {
15+
16+
@Outgoing
17+
CodeArtifact getInvokingCodeArtifact();
18+
19+
@Incoming
20+
List<FunctionDescriptor> getInvokedFunction();
21+
22+
}
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.jqassistant.contrib.plugin.javascript.api.model;
22

3-
import java.util.List;
4-
53
import com.buschmais.jqassistant.core.store.api.model.Descriptor;
64
import com.buschmais.xo.neo4j.api.annotation.Label;
75

@@ -11,10 +9,7 @@
119
* @author sh20xyqi
1210
*/
1311

14-
@Label("JS")
12+
@Label("JavaScript")
1513
public interface JsDescriptor extends Descriptor {
16-
List<ObjectDeclaresRelationshipDescriptor> getObjectDeclaresRelationshipDescriptor();
17-
18-
List<ArrayDeclaresRelationshipDescriptor> getArrayDeclaresRelationshipDescriptor();
1914

2015
}

src/main/java/org/jqassistant/contrib/plugin/javascript/api/model/ObjectDeclaresRelationshipDescriptor.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/main/java/org/jqassistant/contrib/plugin/javascript/api/model/ObjectDescriptor.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.jqassistant.contrib.plugin.javascript.api.model;
22

3-
import java.util.List;
4-
53
import com.buschmais.jqassistant.core.store.api.model.FullQualifiedNameDescriptor;
64
import com.buschmais.xo.neo4j.api.annotation.Label;
75

@@ -19,11 +17,5 @@ public interface ObjectDescriptor extends BaseObjectDescriptor {
1917
default String getFullQualifiedName() {
2018
return OBJECT;
2119
}
22-
/**
23-
* Returns all declared {@link ObjectDeclaresRelationshipDescriptor} of this object.
24-
*
25-
* @return The elements of the object.
26-
*/
27-
List<ObjectDeclaresRelationshipDescriptor> getObjectDeclaresRelationshipDescriptor();
2820
}
2921

src/main/java/org/jqassistant/contrib/plugin/javascript/scanner/visitor/JavascriptVisitor.java

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,14 @@
2727
import org.jqassistant.contrib.plugin.javascript.api.model.ObjectDescriptor;
2828
import org.jqassistant.contrib.plugin.javascript.api.model.UndefinedDescriptor;
2929
import org.jqassistant.contrib.plugin.javascript.api.model.VariableDescriptor;
30-
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.ArrayDeclaresManipulator;
3130
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.ArrayStoreManipulator;
3231
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.ClassStoreManipulator;
3332
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.FunctionStoreManipulator;
33+
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.InvokesManipulator;
3434
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.LiteralStoreManipulator;
35-
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.ObjectDeclaresManipulator;
3635
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.ObjectStoreManipulator;
3736
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.ParameterStoreManipulator;
38-
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.StoreRelationManipulator;
3937
import org.jqassistant.contrib.plugin.javascript.scanner.visitor.manipulators.VariableStoreManipulator;
40-
import org.jruby.ext.ffi.FFIService;
4138

4239
import com.buschmais.jqassistant.core.store.api.Store;
4340

@@ -52,19 +49,13 @@ public class JavascriptVisitor extends JavaScriptParserBaseVisitor<Void> {
5249
private String fqnBase;
5350
private FqnCreator fqnCreator;
5451
private CodeArtifact rootComp;
55-
private Optional<StoreRelationManipulator<?>> relationCreator;
5652

5753
public JavascriptVisitor(Store store, String fqnBase, CodeArtifact basicComp) {
58-
this(store, fqnBase, basicComp, null);
59-
}
60-
61-
public JavascriptVisitor(Store store, String fqnBase, CodeArtifact basicComp, StoreRelationManipulator<?> relationCreator) {
6254
super();
6355
System.out.println("FQN: " + fqnBase);
6456
this.store = store;
6557
this.fqnBase = fqnBase;
6658
this.rootComp = basicComp;
67-
this.relationCreator = Optional.ofNullable(relationCreator);
6859
this.fqnCreator = new FqnCreator(fqnBase);
6960
}
7061

@@ -93,7 +84,6 @@ String createFqn(String varName) {
9384
public Void visitFunctionExpression(FunctionExpressionContext ctx) {
9485
FunctionDescriptor ecmaFunc = new FunctionStoreManipulator().createNodeIn(store, ctx, fqnCreator);
9586
rootComp.getFunctions().add(ecmaFunc);
96-
relationCreator.map((a) -> a.createRelation(ctx, rootComp, ecmaFunc));
9787
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, createFqn(ecmaFunc.getName()), ecmaFunc);
9888
ctx.children.forEach((c) -> c.accept(subTreeVistor));
9989
return VISITOR_DOES_NOT_GO_DEEPER_INTO_AST;
@@ -103,7 +93,6 @@ public Void visitFunctionExpression(FunctionExpressionContext ctx) {
10393
public Void visitArrowFunctionExpression(ArrowFunctionExpressionContext ctx) {
10494
FunctionDescriptor ecmaFunc = new FunctionStoreManipulator().createNodeIn(store, ctx, fqnCreator);
10595
rootComp.getFunctions().add(ecmaFunc);
106-
relationCreator.map((a) -> a.createRelation(ctx, rootComp, ecmaFunc));
10796
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, createFqn(ecmaFunc.getName()), ecmaFunc);
10897
ctx.children.forEach((c) -> c.accept(subTreeVistor));
10998
return VISITOR_DOES_NOT_GO_DEEPER_INTO_AST;
@@ -115,7 +104,6 @@ public Void visitFunctionDeclaration(FunctionDeclarationContext ctx) {
115104
FunctionDescriptor ecmaFunc = new FunctionStoreManipulator(funcName).createNodeIn(store, ctx, fqnCreator);
116105
rootComp.getFunctions().add(ecmaFunc);
117106
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, createFqn(funcName), ecmaFunc);
118-
relationCreator.map((a) -> a.createRelation(ctx, rootComp, ecmaFunc));
119107
ctx.children.forEach((c) -> c.accept(subTreeVistor));
120108
return VISITOR_DOES_NOT_GO_DEEPER_INTO_AST;
121109
}
@@ -127,7 +115,6 @@ public Void visitMethodDefinition(MethodDefinitionContext ctx) {
127115
FunctionDescriptor ecmaFunc = new FunctionStoreManipulator(funcName).createNodeIn(store, ctx, fqnCreator);
128116
rootComp.getFunctions().add(ecmaFunc);
129117
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, createFqn(funcName), ecmaFunc);
130-
relationCreator.map((a) -> a.createRelation(ctx, rootComp, ecmaFunc));
131118
ctx.children.forEach((c) -> c.accept(subTreeVistor));
132119
return VISITOR_DOES_NOT_GO_DEEPER_INTO_AST;
133120
}
@@ -154,8 +141,7 @@ public Void visitLiteral(LiteralContext ctx) {
154141
rootComp.getLiterals().add(d);
155142
d.setLine(ctx.getStart().getLine());
156143
d.setFullQualifiedName(createFqn(Integer.toString(d.hashCode())));
157-
// set relation
158-
return relationCreator.map((a) -> a.createRelation(ctx, rootComp, d));
144+
return d;
159145
});
160146

161147
return super.visitLiteral(ctx);
@@ -164,19 +150,17 @@ public Void visitLiteral(LiteralContext ctx) {
164150
@Override
165151
public Void visitObjectLiteral(ObjectLiteralContext ctx) {
166152
ObjectDescriptor ecmaObj = new ObjectStoreManipulator().createNodeIn(store, ctx, fqnCreator);
167-
relationCreator.map((a) -> a.createRelation(ctx, rootComp, ecmaObj));
168-
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, fqnCreator.createFqn(ObjectDescriptor.OBJECT), ecmaObj, new ObjectDeclaresManipulator(store));
153+
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, fqnCreator.createFqn(ObjectDescriptor.OBJECT), ecmaObj);
169154
ctx.children.forEach((c) -> c.accept(subTreeVistor));
170155
return VISITOR_DOES_NOT_GO_DEEPER_INTO_AST;
171156
}
172157

173158
@Override
174159
public Void visitArrayLiteralExpression(ArrayLiteralExpressionContext ctx) {
175160
ArrayDescriptor ecmaArray = new ArrayStoreManipulator().createNodeIn(store, ctx, fqnCreator);
176-
relationCreator.map((a) -> a.createRelation(ctx, rootComp, ecmaArray));
177161
rootComp.getObjects().add(ecmaArray);
178162

179-
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, fqnCreator.createFqn(ArrayDescriptor.ARRAY), ecmaArray, new ArrayDeclaresManipulator(store));
163+
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, fqnCreator.createFqn(ArrayDescriptor.ARRAY), ecmaArray);
180164
ctx.children.forEach((c) -> c.accept(subTreeVistor));
181165
return VISITOR_DOES_NOT_GO_DEEPER_INTO_AST;
182166
}
@@ -186,7 +170,6 @@ public Void visitClassDeclaration(ClassDeclarationContext ctx) {
186170
ClassDescriptor ecmaClass = new ClassStoreManipulator().createNodeIn(store, ctx, fqnCreator);
187171
rootComp.getClasses().add(ecmaClass);
188172
JavascriptVisitor subTreeVistor = new JavascriptVisitor(store, fqnCreator.createFqn(ecmaClass.getName()), ecmaClass);
189-
relationCreator.map((a) -> a.createRelation(ctx, rootComp, ecmaClass));
190173
ctx.children.forEach((c) -> c.accept(subTreeVistor));
191174
return VISITOR_DOES_NOT_GO_DEEPER_INTO_AST;
192175
}
@@ -228,8 +211,7 @@ public Void visitArgumentsExpression(ArgumentsExpressionContext ctx) {
228211
fd.setName(funcName);
229212
return fd;
230213
});
231-
rootComp.getInvokes().add(func);
232-
System.out.println(funcName);
214+
new InvokesManipulator(store).createRelation(ctx, rootComp, func);
233215
}
234216
}
235217

@@ -244,8 +226,6 @@ public Optional<FunctionDescriptor> findFunctioninStore(String funcName) {
244226
.map((String s) -> Optional.ofNullable(store.find(FunctionDescriptor.class, s)))
245227
.filter((Optional<FunctionDescriptor> curFd) -> curFd.isPresent())
246228
.findFirst().orElse(Optional.empty());
247-
248-
249229
}
250230

251231

src/main/java/org/jqassistant/contrib/plugin/javascript/scanner/visitor/manipulators/ArrayDeclaresManipulator.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)