diff --git a/java_indexer/lib/java-symbol-solver-core.jar b/java_indexer/lib/java-symbol-solver-core.jar
index 3478de87..a0e1a7d8 100644
Binary files a/java_indexer/lib/java-symbol-solver-core.jar and b/java_indexer/lib/java-symbol-solver-core.jar differ
diff --git a/java_indexer/lib/java-symbol-solver-logic.jar b/java_indexer/lib/java-symbol-solver-logic.jar
index a9214ac6..bcef5910 100644
Binary files a/java_indexer/lib/java-symbol-solver-logic.jar and b/java_indexer/lib/java-symbol-solver-logic.jar differ
diff --git a/java_indexer/lib/java-symbol-solver-model.jar b/java_indexer/lib/java-symbol-solver-model.jar
index 19e98140..7b322b5a 100644
Binary files a/java_indexer/lib/java-symbol-solver-model.jar and b/java_indexer/lib/java-symbol-solver-model.jar differ
diff --git a/java_indexer/pom.xml b/java_indexer/pom.xml
index 03ed75b6..beee195d 100644
--- a/java_indexer/pom.xml
+++ b/java_indexer/pom.xml
@@ -50,7 +50,7 @@
com.github.javaparser
javaparser-core
- 3.2.4
+ 3.3.0
compile
@@ -66,9 +66,9 @@
compile
- com.javaslang
+ io.javaslang
javaslang
- 2.0.0-beta
+ 2.0.3
compile
diff --git a/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java b/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java
index 5f19b941..67fd75fd 100644
--- a/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java
+++ b/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java
@@ -38,7 +38,6 @@ import com.github.javaparser.ast.Modifier;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.PackageDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
-import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserConstructorDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserFieldDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserParameterDeclaration;
@@ -132,16 +131,12 @@ public class AstVisitor extends AstVisitorAdapter
// todo: test recording of typeargument of type parameter bound type??
-
if (m_context.size() != 1)
{
// throw something!
}
-
- String qualifiedName = m_context.get(0).getName();
- qualifiedName += "\tn";
- qualifiedName += n.getName() + "\ts\tp";
-
+
+ String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize();
Optional range = Optional.empty();
if (n.getBegin().isPresent())
@@ -570,7 +565,7 @@ public class AstVisitor extends AstVisitorAdapter
@Override public void visit(final FieldAccessExpr n, final Void v)
{
- SimpleName fieldName = n.getField();
+ SimpleName fieldName = n.getName();
try
{
@@ -616,7 +611,88 @@ public class AstVisitor extends AstVisitorAdapter
{
try
{
- recordRef(n);
+ SymbolReference extends ValueDeclaration> ref = JavaParserFacade.get(m_typeSolver).solve(n);
+ if (ref.isSolved())
+ {
+ ValueDeclaration valueDecl = ref.getCorrespondingDeclaration();
+
+ Node wrappedNode = null;
+ if (valueDecl instanceof JavaParserSymbolDeclaration)
+ {
+ wrappedNode = ((JavaParserSymbolDeclaration)valueDecl).getWrappedNode();
+ }
+ else if (valueDecl instanceof JavaParserParameterDeclaration)
+ {
+ wrappedNode = ((JavaParserParameterDeclaration)valueDecl).getWrappedNode();
+ }
+ else if (valueDecl instanceof JavaParserFieldDeclaration)
+ {
+ wrappedNode = ((JavaParserFieldDeclaration)valueDecl).getWrappedNode();
+ }
+
+ if (wrappedNode != null)
+ {
+ if (wrappedNode instanceof FieldDeclaration)
+ {
+
+ for (VariableDeclarator var: ((FieldDeclaration)wrappedNode).getVariables())
+ {
+ if (var.getName().getIdentifier().equals(n.getName().getIdentifier()))
+ {
+ String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(var, m_typeSolver).toNameHierarchy().serialize();
+ for (DeclContext context: m_context)
+ {
+ m_client.recordReference(
+ ReferenceKind.USAGE, qualifiedName, context.getName(),
+ n.getName().getRange()
+ );
+ }
+ }
+ }
+ }
+ else if (wrappedNode instanceof Parameter)
+ {
+ SimpleName name = ((Parameter)wrappedNode).getName();
+ if (name.getBegin().isPresent())
+ {
+ String qualifiedName = m_filePath + "<" + name.getBegin().get().line + ":" + name.getBegin().get().column + ">";
+
+ m_client.recordLocalSymbol(
+ qualifiedName,
+ n.getRange()
+ );
+ }
+ }
+ else if (wrappedNode instanceof VariableDeclarator)
+ {
+ if (wrappedNode.getAncestorOfType(FieldDeclaration.class).isPresent())
+ {
+ String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName((VariableDeclarator)wrappedNode, m_typeSolver).toNameHierarchy().serialize();
+
+ for (DeclContext context: m_context)
+ {
+ m_client.recordReference(
+ ReferenceKind.USAGE, qualifiedName, context.getName(),
+ n.getRange()
+ );
+ }
+ }
+ else
+ {
+ SimpleName name = ((VariableDeclarator)wrappedNode).getName();
+ if (name.getBegin().isPresent())
+ {
+ String qualifiedName = m_filePath + "<" + name.getBegin().get().line + ":" + name.getBegin().get().column + ">";
+
+ m_client.recordLocalSymbol(
+ qualifiedName,
+ n.getRange()
+ );
+ }
+ }
+ }
+ }
+ }
}
catch (Exception e)
{
@@ -626,92 +702,6 @@ public class AstVisitor extends AstVisitorAdapter
super.visit(n, v);
}
- private void recordRef(NameExpr e)
- {
- SymbolReference extends ValueDeclaration> ref = JavaParserFacade.get(m_typeSolver).solve(e);
- if (ref.isSolved())
- {
- ValueDeclaration valueDecl = ref.getCorrespondingDeclaration();
-
- Node wrappedNode = null;
- if (valueDecl instanceof JavaParserSymbolDeclaration)
- {
- wrappedNode = ((JavaParserSymbolDeclaration)valueDecl).getWrappedNode();
- }
- else if (valueDecl instanceof JavaParserParameterDeclaration)
- {
- wrappedNode = ((JavaParserParameterDeclaration)valueDecl).getWrappedNode();
- }
- else if (valueDecl instanceof JavaParserFieldDeclaration)
- {
- wrappedNode = ((JavaParserFieldDeclaration)valueDecl).getWrappedNode();
- }
-
- if (wrappedNode != null)
- {
- if (wrappedNode instanceof FieldDeclaration)
- {
-
- for (VariableDeclarator var: ((FieldDeclaration)wrappedNode).getVariables())
- {
- if (var.getName().getIdentifier().equals(e.getName().getIdentifier()))
- {
- String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(var, m_typeSolver).toNameHierarchy().serialize();
- for (DeclContext context: m_context)
- {
- m_client.recordReference(
- ReferenceKind.USAGE, qualifiedName, context.getName(),
- e.getName().getRange()
- );
- }
- }
- }
- }
- else if (wrappedNode instanceof Parameter)
- {
- SimpleName name = ((Parameter)wrappedNode).getName();
- if (name.getBegin().isPresent())
- {
- String qualifiedName = m_filePath + "<" + name.getBegin().get().line + ":" + name.getBegin().get().column + ">";
-
- m_client.recordLocalSymbol(
- qualifiedName,
- e.getRange()
- );
- }
- }
- else if (wrappedNode instanceof VariableDeclarator)
- {
- if (wrappedNode.getAncestorOfType(FieldDeclaration.class).isPresent())
- {
- String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName((VariableDeclarator)wrappedNode, m_typeSolver).toNameHierarchy().serialize();
-
- for (DeclContext context: m_context)
- {
- m_client.recordReference(
- ReferenceKind.USAGE, qualifiedName, context.getName(),
- e.getRange()
- );
- }
- }
- else
- {
- SimpleName name = ((VariableDeclarator)wrappedNode).getName();
- if (name.getBegin().isPresent())
- {
- String qualifiedName = m_filePath + "<" + name.getBegin().get().line + ":" + name.getBegin().get().column + ">";
-
- m_client.recordLocalSymbol(
- qualifiedName,
- e.getRange()
- );
- }
- }
- }
- }
- }
- }
-
@Override public void visit(final MethodCallExpr n, final Void v)
{
String qualifiedName = "";
@@ -722,7 +712,7 @@ public class AstVisitor extends AstVisitorAdapter
SymbolReference solvedSymbol = JavaParserFacade.get(m_typeSolver).solve(n);
if (solvedSymbol.isSolved())
{
- qualifiedName = getQualifiedName(solvedSymbol.getCorrespondingDeclaration());
+ qualifiedName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(solvedSymbol.getCorrespondingDeclaration(), m_typeSolver).toNameHierarchy().serialize();
}
else
{
@@ -786,7 +776,7 @@ public class AstVisitor extends AstVisitorAdapter
m_client.logError(e + " at " + m_filePath + "<"+ beginLine + ", " + beginColumn + ">");
m_client.recordSymbolWithLocation(
- ".\tmunsolved-symbol\ts\tp", SymbolKind.TYPE_MAX,
+ JavaDeclName.unsolved().toNameHierarchy().serialize(), SymbolKind.TYPE_MAX,
n.getRange(),
AccessKind.DEFAULT,
DefinitionKind.EXPLICIT
@@ -803,7 +793,7 @@ public class AstVisitor extends AstVisitorAdapter
SymbolReference solvedSymbol = JavaParserFacade.get(m_typeSolver).solve(n);
if (solvedSymbol.isSolved())
{
- qualifiedName = getQualifiedName(solvedSymbol.getCorrespondingDeclaration());
+ qualifiedName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(solvedSymbol.getCorrespondingDeclaration(), m_typeSolver).toNameHierarchy().serialize();
}
else
{
@@ -843,70 +833,6 @@ public class AstVisitor extends AstVisitorAdapter
super.visit(n, v);
}
- private String getQualifiedName(com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration method)
- {
- String qualifiedName = "";
- if (method instanceof JavaParserMethodDeclaration)
- {
- MethodDeclaration wrappedNode = ((JavaParserMethodDeclaration)method).getWrappedNode();
- qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(wrappedNode, m_typeSolver).toNameHierarchy().serialize();
- }
- else // todo: move this implementation somewhere else
- {
- qualifiedName = ".\tm" + method.declaringType().getQualifiedName();
- qualifiedName = qualifiedName.replace(".", "\ts\tp\tn");
-
- qualifiedName += "\ts\tp\tn" + method.getName() + "\ts";
-
- String returnType = method.getReturnType().describe();
- qualifiedName += returnType;
- // qualifiedName += returnType.substring(returnType.lastIndexOf(".") + 1);
-
- qualifiedName += "\tp(";
- for (int i = 0; i < method.getNumberOfParams(); i++)
- {
- if(i != 0)
- {
- qualifiedName += (", ");
- }
- String paramType = method.getParam(i).describeType();
- qualifiedName += paramType;
- // qualifiedName += paramType.substring(paramType.lastIndexOf(".") + 1);
- }
- qualifiedName = qualifiedName.concat(")");
- }
- return qualifiedName;
- }
-
- private String getQualifiedName(com.github.javaparser.symbolsolver.model.declarations.ConstructorDeclaration constructor)
- {
- String qualifiedName = "";
- if (constructor instanceof JavaParserConstructorDeclaration)
- {
- ConstructorDeclaration wrappedNode = ((JavaParserConstructorDeclaration)constructor).getWrappedNode();
- qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(wrappedNode, m_typeSolver).toNameHierarchy().serialize();
- }
- else // todo: move this implementation somewhere else
- {
- qualifiedName = ".\tm" + constructor.declaringType().getQualifiedName();
- qualifiedName = qualifiedName.replace(".", "\ts\tp\tn");
-
- qualifiedName += "\ts\tp\tn" + constructor.getName() + "\ts\tp(";
- for (int i = 0; i < constructor.getNumberOfParams(); i++)
- {
- if(i != 0)
- {
- qualifiedName += (", ");
- }
- String paramType = constructor.getParam(i).describeType();
- qualifiedName += paramType;
- // qualifiedName += paramType.substring(paramType.lastIndexOf(".") + 1);
- }
- qualifiedName = qualifiedName.concat(")");
- }
- return qualifiedName;
- }
-
@Override public void visit(final BlockStmt n, final Void v)
{
recordScope(n.getRange());
diff --git a/java_indexer/src/main/java/com/sourcetrail/CallableConstructorDecl.java b/java_indexer/src/main/java/com/sourcetrail/CallableConstructorDecl.java
index 825e23d4..81d147e1 100644
--- a/java_indexer/src/main/java/com/sourcetrail/CallableConstructorDecl.java
+++ b/java_indexer/src/main/java/com/sourcetrail/CallableConstructorDecl.java
@@ -22,6 +22,11 @@ public class CallableConstructorDecl implements CallableDecl
return m_decl;
}
+ public boolean isMethod()
+ {
+ return false;
+ }
+
public String getName()
{
return m_decl.getNameAsString();
diff --git a/java_indexer/src/main/java/com/sourcetrail/CallableDecl.java b/java_indexer/src/main/java/com/sourcetrail/CallableDecl.java
index 320cd1b5..b0f6c3ab 100644
--- a/java_indexer/src/main/java/com/sourcetrail/CallableDecl.java
+++ b/java_indexer/src/main/java/com/sourcetrail/CallableDecl.java
@@ -9,6 +9,7 @@ import com.github.javaparser.ast.type.Type;
public interface CallableDecl
{
public BodyDeclaration getWrappedNode();
+ public boolean isMethod();
public String getName();
public NodeList getTypeParameters();
public NodeList getParameters();
diff --git a/java_indexer/src/main/java/com/sourcetrail/CallableMethodDecl.java b/java_indexer/src/main/java/com/sourcetrail/CallableMethodDecl.java
index d5b19669..f55c6b0f 100644
--- a/java_indexer/src/main/java/com/sourcetrail/CallableMethodDecl.java
+++ b/java_indexer/src/main/java/com/sourcetrail/CallableMethodDecl.java
@@ -21,6 +21,11 @@ public class CallableMethodDecl implements CallableDecl
return m_decl;
}
+ public boolean isMethod()
+ {
+ return true;
+ }
+
public String getName()
{
return m_decl.getNameAsString();
diff --git a/java_indexer/src/main/java/com/sourcetrail/ContextList.java b/java_indexer/src/main/java/com/sourcetrail/ContextList.java
new file mode 100644
index 00000000..5ceeec39
--- /dev/null
+++ b/java_indexer/src/main/java/com/sourcetrail/ContextList.java
@@ -0,0 +1,57 @@
+package com.sourcetrail;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.github.javaparser.ast.body.BodyDeclaration;
+import com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable;
+
+public class ContextList
+{
+ private List m_bodyDeclarations = new ArrayList<>();
+ private List m_typeParameterizables = new ArrayList<>();
+
+ public ContextList copy()
+ {
+ ContextList contextList = new ContextList();
+
+ contextList.m_bodyDeclarations = new ArrayList<>(m_bodyDeclarations);
+ contextList.m_typeParameterizables = new ArrayList<>(m_typeParameterizables);
+
+ return contextList;
+ }
+
+ public void add(BodyDeclaration v)
+ {
+ m_bodyDeclarations.add(v);
+ }
+
+ public boolean contains(BodyDeclaration v)
+ {
+ for (BodyDeclaration bodyDeclaration: m_bodyDeclarations)
+ {
+ if (bodyDeclaration.equals(v))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void add(TypeParametrizable v)
+ {
+ m_typeParameterizables.add(v);
+ }
+
+ public boolean contains(TypeParametrizable v)
+ {
+ for (TypeParametrizable typeParameterizable: m_typeParameterizables)
+ {
+ if (typeParameterizable.toString().equals(v.toString()))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaIndexer.java b/java_indexer/src/main/java/com/sourcetrail/JavaIndexer.java
index ddc37e2c..73e7964b 100644
--- a/java_indexer/src/main/java/com/sourcetrail/JavaIndexer.java
+++ b/java_indexer/src/main/java/com/sourcetrail/JavaIndexer.java
@@ -12,8 +12,10 @@ import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.PackageDeclaration;
import com.github.javaparser.JavaParser;
import com.github.javaparser.ParseProblemException;
+import com.github.javaparser.Position;
import com.github.javaparser.Problem;
import com.github.javaparser.Range;
+import com.github.javaparser.TokenRange;
import com.github.javaparser.symbolsolver.javaparser.Navigator;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
@@ -85,35 +87,20 @@ public class JavaIndexer
{
for (Problem problem: e.getProblems())
{
+ // "Parse error. Found \"package\", expected one of \";\" \"@\" \"\\u001a\" \"abstract\" \"class\" \"default\" \"enum\" \"final\" \"import\" \"interface\" \"module\" \"native\" \"open\" \"private\" \"protected\" \"public\" \"static\" \"stric...
String message = problem.toString();
- if (message.startsWith("(line "))
+ if (message.startsWith("Parse error. Found "))
{
- int startLine = Integer.parseInt(message.substring(
- message.indexOf("line ") + ("line ").length(),
- message.indexOf(",")
- ));
-
- int startColumn = Integer.parseInt(message.substring(
- message.indexOf("col ") + ("col ").length(),
- message.indexOf(")")
- ));
-
- astVisitorClient.recordError(
- "Encountered unexpected token.", true, true,
- Range.range(startLine, startColumn, startLine, startColumn)
- );
- }
- else
- {
- Optional range = problem.getRange();
- if (range.isPresent())
- {
- astVisitorClient.recordError(
- problem.toString(), true, true,
- range.get()
- );
- }
+ message = "Encountered unexpected token.";
+ }
+
+ Range range = new Range(new Position(0, 0), new Position(0, 0));
+ if (problem.getLocation().isPresent())
+ {
+ range = problem.getLocation().get().toRange();
}
+
+ astVisitorClient.recordError(message, true, true, range);
}
}
}
diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaNameResolver.java
index 3e035994..9047e762 100644
--- a/java_indexer/src/main/java/com/sourcetrail/JavaNameResolver.java
+++ b/java_indexer/src/main/java/com/sourcetrail/JavaNameResolver.java
@@ -1,6 +1,7 @@
package com.sourcetrail;
import java.util.ArrayList;
+import java.util.List;
import com.github.javaparser.ast.body.BodyDeclaration;
@@ -9,9 +10,9 @@ import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
public abstract class JavaNameResolver
{
TypeSolver m_typeSolver = null;
- ArrayList m_ignoredContexts = null;
+ ContextList m_ignoredContexts = null;
- public JavaNameResolver(TypeSolver typeSolver, ArrayList ignoredContexts)
+ public JavaNameResolver(TypeSolver typeSolver, ContextList ignoredContexts)
{
m_typeSolver = typeSolver;
if (ignoredContexts != null)
@@ -20,23 +21,7 @@ public abstract class JavaNameResolver
}
else
{
- m_ignoredContexts = new ArrayList();
+ m_ignoredContexts = new ContextList();
}
- }
-
- protected boolean ignoresContext(BodyDeclaration context)
- {
- if (m_ignoredContexts != null)
- {
- for (BodyDeclaration ignoredContext: m_ignoredContexts)
- {
- if (ignoredContext.equals(context))
- {
- return true;
- }
- }
- }
- return false;
- }
-
+ }
}
diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java
index a0e07cf3..0d6f9a7b 100644
--- a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java
+++ b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java
@@ -2,26 +2,45 @@ package com.sourcetrail;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import com.github.javaparser.ast.body.BodyDeclaration;
-import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
-
+import com.github.javaparser.ast.body.FieldDeclaration;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.type.TypeParameter;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnnotationDeclaration;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserConstructorDeclaration;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumConstantDeclaration;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserFieldDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserInterfaceDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserParameterDeclaration;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeParameter;
+import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeVariableDeclaration;
+import com.github.javaparser.symbolsolver.javassistmodel.JavassistClassDeclaration;
+import com.github.javaparser.symbolsolver.javassistmodel.JavassistTypeParameter;
import com.github.javaparser.symbolsolver.model.declarations.Declaration;
import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration;
+import com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration;
+import com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration;
import com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration;
+import com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable;
+import com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.sourcetrail.name.JavaDeclName;
import com.sourcetrail.name.JavaFunctionDeclName;
import com.sourcetrail.name.JavaTypeName;
+import com.sourcetrail.name.JavaVariableDeclName;
public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver
{
- public JavaSymbolSolverDeclNameResolver(TypeSolver typeSolver, ArrayList ignoredContexts)
+ public JavaSymbolSolverDeclNameResolver(TypeSolver typeSolver, ContextList ignoredContexts)
{
super(typeSolver, ignoredContexts);
}
@@ -31,7 +50,7 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver
return getQualifiedDeclName(decl, typeSolver, null);
}
- public static JavaDeclName getQualifiedDeclName(Declaration decl, TypeSolver typeSolver, ArrayList ignoredContexts)
+ public static JavaDeclName getQualifiedDeclName(Declaration decl, TypeSolver typeSolver, ContextList ignoredContexts)
{
JavaSymbolSolverDeclNameResolver resolver = new JavaSymbolSolverDeclNameResolver(typeSolver, ignoredContexts);
return resolver.getQualifiedDeclName(decl);
@@ -41,76 +60,166 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver
{
JavaDeclName declName = null;
- if (decl != null)
+ if (decl instanceof JavaParserAnnotationDeclaration)
+ {
+ // TODO: implement
+ System.out.println("solving name of JavaParserAnnotationDeclaration not implemented");
+ declName = JavaDeclName.unsolved();
+
+ }
+ if (decl instanceof JavaParserAnonymousClassDeclaration)
+ {
+ // TODO: implement
+ System.out.println("solving name of JavaParserAnonymousClassDeclaration not implemented");
+ declName = JavaDeclName.unsolved();
+ }
+ else if (decl instanceof JavaParserClassDeclaration)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserClassDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else if (decl instanceof JavaParserConstructorDeclaration)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserConstructorDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else if (decl instanceof JavaParserEnumDeclaration)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserEnumDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else if (decl instanceof JavaParserEnumConstantDeclaration)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserEnumConstantDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else if (decl instanceof JavaParserFieldDeclaration)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserFieldDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else if (decl instanceof JavaParserInterfaceDeclaration)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserInterfaceDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else if (decl instanceof JavaParserMethodDeclaration)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserMethodDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else if (decl instanceof JavaParserParameterDeclaration)
+ {
+ System.out.println("solving name of JavaParserParameterDeclaration not implemented");
+ declName = JavaDeclName.unsolved();
+ }
+ else if (decl instanceof JavaParserSymbolDeclaration)
+ {
+ System.out.println("solving name of JavaParserSymbolDeclaration not implemented");
+ declName = JavaDeclName.unsolved();
+ }
+ else if (decl instanceof JavaParserTypeParameter)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserTypeParameter)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else if (decl instanceof JavaParserTypeVariableDeclaration)
+ {
+ declName = JavaparserDeclNameResolver.getQualifiedDeclName(
+ ((JavaParserTypeVariableDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts);
+ }
+ else
{
- if (decl instanceof TypeDeclaration)
+ String name = decl.getName();
+ List typeParameters = new ArrayList<>();
+ if (decl instanceof TypeParametrizable)
+ {
+ typeParameters = getTypeParameterNames((TypeParametrizable) decl);
+ }
+
+ if (decl instanceof ReferenceTypeDeclaration)
{
- TypeDeclaration typeDecl = (TypeDeclaration)decl;
+ declName = new JavaDeclName(name, typeParameters);
- ClassOrInterfaceDeclaration javaparserDecl = null;
- if (typeDecl instanceof JavaParserClassDeclaration)
+ Optional containerType = ((ReferenceTypeDeclaration) decl).containerType();
+ if (containerType.isPresent())
{
- javaparserDecl = ((JavaParserClassDeclaration)typeDecl).getWrappedNode();
- }
- else if (typeDecl instanceof JavaParserInterfaceDeclaration)
- {
- javaparserDecl = ((JavaParserInterfaceDeclaration)typeDecl).getWrappedNode();
- }
-
- if (javaparserDecl != null)
- {
- declName = JavaparserDeclNameResolver.getQualifiedDeclName(javaparserDecl, m_typeSolver, m_ignoredContexts);
+ declName.setParent(getQualifiedDeclName(containerType.get(), m_typeSolver, m_ignoredContexts));
}
else
{
- declName = JavaDeclName.fromDotSeparatedString(typeDecl.getQualifiedName());
+ declName.setParent(JavaDeclName.fromDotSeparatedString(((ReferenceTypeDeclaration) decl).getPackageName()));
+ }
+
+ }
+ else if (decl instanceof TypeParameterDeclaration)
+ {
+ declName = new JavaDeclName(name);
+ TypeParametrizable container = ((TypeParameterDeclaration) decl).getContainer();
+ if (!m_ignoredContexts.contains(container))
+ {
+ if (container instanceof ReferenceTypeDeclaration)
+ {
+ declName.setParent(getQualifiedDeclName((ReferenceTypeDeclaration) container, m_typeSolver, m_ignoredContexts));
+ }
+ if (container instanceof MethodLikeDeclaration)
+ {
+ declName.setParent(getQualifiedDeclName((MethodLikeDeclaration) container, m_typeSolver, m_ignoredContexts));
+ }
}
}
- else if (decl instanceof MethodDeclaration)
+ else if (decl instanceof MethodLikeDeclaration)
{
- MethodDeclaration methodDecl = (MethodDeclaration)decl;
-
- if (methodDecl instanceof JavaParserMethodDeclaration)
+ ContextList ignoredContextsForTypes = m_ignoredContexts.copy();
+ ignoredContextsForTypes.add((MethodLikeDeclaration) decl); // adding own decl
+
+ JavaTypeName returnTypeName = new JavaTypeName("", null);
+ boolean isStatic = false;
+ if (decl instanceof MethodDeclaration)
{
- declName = JavaparserDeclNameResolver.getQualifiedDeclName(
- ((JavaParserMethodDeclaration)methodDecl).getWrappedNode(),
- m_typeSolver,
- m_ignoredContexts
- );
- }
- else
- {
- // TODO: what about endless recursion regarding type parameters and return type??
-
- List parameterNames = new ArrayList<>();
- for (int i = 0; i < methodDecl.getNumberOfParams(); i++)
- {
- parameterNames.add(JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(
- methodDecl.getParam(i).getType(), m_typeSolver, m_ignoredContexts
- ));
- }
-
- declName = new JavaFunctionDeclName(
- methodDecl.getName(),
- getTypeParameterNames(methodDecl.getTypeParameters()),
- JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(methodDecl.getReturnType(), m_typeSolver, m_ignoredContexts),
- parameterNames,
- methodDecl.isStatic()
- );
-
- declName.setParent(
- getQualifiedDeclName(methodDecl.declaringType(), m_typeSolver, m_ignoredContexts)
- );
+ returnTypeName = JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(((MethodDeclaration)decl).getReturnType(), m_typeSolver, ignoredContextsForTypes);
+ isStatic = ((MethodDeclaration)decl).isStatic();
}
+ declName = new JavaFunctionDeclName(
+ name, typeParameters,
+ returnTypeName,
+ getParameterTypeNames((MethodLikeDeclaration) decl, m_typeSolver, ignoredContextsForTypes),
+ isStatic);
+
+ declName.setParent(
+ getQualifiedDeclName(((MethodLikeDeclaration) decl).declaringType(), m_typeSolver, m_ignoredContexts));
+
+ }
+ else if (decl instanceof com.github.javaparser.symbolsolver.model.declarations.FieldDeclaration)
+ {
+ com.github.javaparser.symbolsolver.model.declarations.FieldDeclaration fieldDecl = ((com.github.javaparser.symbolsolver.model.declarations.FieldDeclaration) decl);
+ declName = new JavaVariableDeclName(
+ name,
+ JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(fieldDecl.getType(), m_typeSolver, m_ignoredContexts),
+ fieldDecl.isStatic());
+
+ declName.setParent(
+ getQualifiedDeclName(
+ fieldDecl.declaringType(),
+ m_typeSolver,
+ m_ignoredContexts));
}
}
+
+ if (declName == null)
+ {
+ System.out.println("Unable to resolve qualified declaration name of " + decl.getClass().toString() + ": " + decl.toString());
+ declName = new JavaDeclName("unsolved-jss-decl"); // JavaDeclName.unsolved();
+ }
+
return declName;
}
- private static List getTypeParameterNames(List typeParameters)
+ private static List getTypeParameterNames(TypeParametrizable decl)
{
List typeParameterNames = new ArrayList<>();
+ List typeParameters = decl.getTypeParameters();
if (typeParameters != null && typeParameters.size() > 0)
{
for (int i = 0; i < typeParameters.size(); i++)
@@ -121,4 +230,16 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver
return typeParameterNames;
}
+ private static List getParameterTypeNames(MethodLikeDeclaration decl, TypeSolver typeSolver, ContextList ignoredContexts)
+ {
+ List typeTypeParameterNames = new ArrayList<>();
+ for (int i = 0; i < decl.getNumberOfParams(); i++)
+ {
+ typeTypeParameterNames.add(JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(
+ decl.getParam(i).getType(), typeSolver, ignoredContexts
+ ));
+ }
+ return typeTypeParameterNames;
+ }
+
}
diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java
index 2892aa92..517cd67a 100644
--- a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java
+++ b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java
@@ -1,9 +1,9 @@
package com.sourcetrail;
import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
-import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.LambdaArgumentTypePlaceholder;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeParameter;
@@ -24,7 +24,7 @@ import com.sourcetrail.name.JavaTypeName;
public class JavaSymbolSolverTypeNameResolver extends JavaNameResolver
{
- public JavaSymbolSolverTypeNameResolver(TypeSolver typeSolver, ArrayList ignoredContexts)
+ public JavaSymbolSolverTypeNameResolver(TypeSolver typeSolver, ContextList ignoredContexts)
{
super(typeSolver, ignoredContexts);
}
@@ -34,7 +34,7 @@ public class JavaSymbolSolverTypeNameResolver extends JavaNameResolver
return getQualifiedTypeName(type, typeSolver, null);
}
- public static JavaTypeName getQualifiedTypeName(Type type, TypeSolver typeSolver, ArrayList ignoredContexts)
+ public static JavaTypeName getQualifiedTypeName(Type type, TypeSolver typeSolver, ContextList ignoredContexts)
{
JavaSymbolSolverTypeNameResolver resolver = new JavaSymbolSolverTypeNameResolver(typeSolver, ignoredContexts);
return resolver.getQualifiedTypeName(type);
@@ -67,46 +67,18 @@ public class JavaSymbolSolverTypeNameResolver extends JavaNameResolver
ReferenceType refTypeUsage = (ReferenceType)type;
JavaDeclName declName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(
- refTypeUsage.getTypeDeclaration(),
- m_typeSolver,
- m_ignoredContexts
- );
-
+ refTypeUsage.getTypeDeclaration(),
+ m_typeSolver,
+ m_ignoredContexts);
return new JavaTypeName(declName.getName() + declName.getTypeParameterString(), new ArrayList(), declName.getParent());
- /*
- if (declName != null)
- {
- List typeArgumentNames = new ArrayList<>();
-
- for (TypeUsage typeArgument: refTypeUsage.parameters()) // don't know why this method is called "parameters()"
- {
- typeArgumentNames.add(getQualifiedTypeName(typeArgument, m_typeSolver, m_ignoredContexts));
- }
- return new JavaTypeName(declName.getName(), typeArgumentNames, declName.getParent());
- }
- */
}
else if (type instanceof TypeVariable)
{
- TypeParameterDeclaration typeParam = ((TypeVariable)type).asTypeParameter();
- if (typeParam instanceof JavaParserTypeParameter)
- {
- com.github.javaparser.ast.type.TypeParameter jpTypeParameter = ((JavaParserTypeParameter)typeParam).getWrappedNode();
- Optional genericDecl = jpTypeParameter.getAncestorOfType(BodyDeclaration.class);
- if (genericDecl.isPresent())
- {
- JavaDeclName genericName = null;
- if (!ignoresContext(genericDecl.get()))
- {
- genericName = JavaparserDeclNameResolver.getQualifiedDeclName(genericDecl.get(), m_typeSolver, m_ignoredContexts);
- }
- return new JavaTypeName(jpTypeParameter.getName().getId(), genericName);
- }
- }
- else
- {
- // do we need to handle using type parameters of external code? YES! so: TODO: do this!
- }
+ JavaDeclName declName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(
+ ((TypeVariable)type).asTypeParameter(),
+ m_typeSolver,
+ m_ignoredContexts);
+ return new JavaTypeName(declName.getName(), new ArrayList(), declName.getParent());
}
else if (type instanceof VoidType)
{
@@ -118,6 +90,7 @@ public class JavaSymbolSolverTypeNameResolver extends JavaNameResolver
}
System.out.println("Unable to resolve qualified name of " + type.getClass().toString() + ": " + type.toString());
- return new JavaTypeName("unresolved-type", null);
+
+ return new JavaTypeName("unsolved-jss-type", null); // JavaTypeName.unsolved();
}
}
diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java
index d52c96e3..b5d0cd0f 100644
--- a/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java
+++ b/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java
@@ -12,7 +12,6 @@ import com.github.javaparser.ast.body.AnnotationMemberDeclaration;
import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
-import com.github.javaparser.ast.body.EmptyMemberDeclaration;
import com.github.javaparser.ast.body.EnumConstantDeclaration;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.InitializerDeclaration;
@@ -21,6 +20,7 @@ import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.body.TypeDeclaration;
import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.expr.Name;
+import com.github.javaparser.ast.expr.SimpleName;
import com.github.javaparser.ast.type.TypeParameter;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
@@ -31,7 +31,7 @@ import com.sourcetrail.name.JavaVariableDeclName;
public class JavaparserDeclNameResolver extends JavaNameResolver
{
- public JavaparserDeclNameResolver(TypeSolver typeSolver, ArrayList ignoredContexts)
+ public JavaparserDeclNameResolver(TypeSolver typeSolver, ContextList ignoredContexts)
{
super(typeSolver, ignoredContexts);
}
@@ -41,7 +41,7 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
return getQualifiedDeclName(decl, typeSolver, null);
}
- public static JavaDeclName getQualifiedDeclName(VariableDeclarator decl, TypeSolver typeSolver, ArrayList ignoredContexts)
+ public static JavaDeclName getQualifiedDeclName(VariableDeclarator decl, TypeSolver typeSolver, ContextList ignoredContexts)
{
JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(typeSolver, ignoredContexts);
return resolver.getQualifiedDeclName(decl);
@@ -49,8 +49,8 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
public JavaDeclName getQualifiedDeclName(VariableDeclarator decl)
{
- JavaDeclName declName = null;
-
+ JavaDeclName declName = new JavaDeclName("unsolved-jp-decl"); // JavaDeclName.unsolved();
+
if (decl != null)
{
declName = getDeclName(decl);
@@ -58,7 +58,7 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
BodyDeclaration declContext = getBodyDeclContext(decl);
if (declContext != null)
{
- if (!ignoresContext(declContext))
+ if (!m_ignoredContexts.contains(declContext))
{
declName.setParent(getQualifiedDeclName(declContext));
}
@@ -84,58 +84,9 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
return declName;
}
- public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, TypeSolver typeSolver)
- {
- return getQualifiedDeclName(decl, typeSolver, null);
- }
-
- public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, TypeSolver typeSolver, ArrayList ignoredContexts)
- {
- JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(typeSolver, ignoredContexts);
- return resolver.getQualifiedDeclName(decl);
- }
-
- public JavaDeclName getQualifiedDeclName(BodyDeclaration> decl)
- {
- JavaDeclName declName = null;
-
- if (decl != null)
- {
- declName = getDeclName(decl);
-
- BodyDeclaration declContext = getBodyDeclContext(decl);
- if (declContext != null)
- {
- if (!ignoresContext(declContext))
- {
- declName.setParent(getQualifiedDeclName(declContext));
- }
- }
- else
- {
- Optional compilationUnit = decl.getAncestorOfType(CompilationUnit.class);
-
- if (compilationUnit.isPresent())
- {
- Optional packageDecl = compilationUnit.get().getPackageDeclaration();
- if (packageDecl.isPresent())
- {
- declName.setParent(getQualifiedName(packageDecl.get().getName()));
- }
- }
- else
- {
- throw new UnsupportedOperationException();
- }
- }
- }
- return declName;
- }
-
public JavaDeclName getDeclName(VariableDeclarator decl)
{
- ArrayList ignoredContextsForTypes = new ArrayList(m_ignoredContexts);
- JavaTypeName typeName = JavaparserTypeNameResolver.getQualifiedTypeName(decl.getType(), m_typeSolver, ignoredContextsForTypes);
+ JavaTypeName typeName = JavaparserTypeNameResolver.getQualifiedTypeName(decl.getType(), m_typeSolver, m_ignoredContexts.copy());
boolean isStatic = false;
Optional fieldDeclaration = decl.getAncestorOfType(FieldDeclaration.class);
@@ -147,9 +98,58 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
return new JavaVariableDeclName(decl.getNameAsString(), typeName, isStatic);
}
+ public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, TypeSolver typeSolver)
+ {
+ return getQualifiedDeclName(decl, typeSolver, null);
+ }
+
+ public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, TypeSolver typeSolver, ContextList ignoredContexts)
+ {
+ JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(typeSolver, ignoredContexts);
+ return resolver.getQualifiedDeclName(decl);
+ }
+
+ public JavaDeclName getQualifiedDeclName(BodyDeclaration> decl)
+ {
+ JavaDeclName declName = new JavaDeclName("unsolved-jp-decl"); // JavaDeclName.unsolved();
+
+ if (decl != null)
+ {
+ declName = getDeclName(decl);
+
+ BodyDeclaration declContext = getBodyDeclContext(decl);
+ if (declContext != null)
+ {
+ if (!m_ignoredContexts.contains(declContext))
+ {
+ declName.setParent(getQualifiedDeclName(declContext));
+ }
+ }
+ else
+ {
+ Optional compilationUnit = decl.getAncestorOfType(CompilationUnit.class);
+
+ if (compilationUnit.isPresent())
+ {
+ Optional packageDecl = compilationUnit.get().getPackageDeclaration();
+ if (packageDecl.isPresent())
+ {
+ declName.setParent(getQualifiedName(packageDecl.get().getName()));
+ }
+ }
+ else
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+ }
+
+ return declName;
+ }
+
public JavaDeclName getDeclName(BodyDeclaration decl)
{
- JavaDeclName declName = null;
+ JavaDeclName declName = new JavaDeclName("unsolved-jp-decl"); // JavaDeclName.unsolved();
if (decl != null)
{
@@ -162,10 +162,6 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
CallableConstructorDecl callableDecl = new CallableConstructorDecl((ConstructorDeclaration)decl);
declName = getDeclNameOfCallable(callableDecl);
}
- else if (decl instanceof EmptyMemberDeclaration)
- {
- declName = new JavaDeclName("EmptyMemberDeclaration");
- }
else if (decl instanceof EnumConstantDeclaration)
{
declName = new JavaDeclName(((EnumConstantDeclaration)decl).getNameAsString());
@@ -192,6 +188,46 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
return declName;
}
+ public static JavaDeclName getQualifiedDeclName(TypeParameter decl, TypeSolver typeSolver)
+ {
+ return getQualifiedDeclName(decl, typeSolver, null);
+ }
+
+ public static JavaDeclName getQualifiedDeclName(TypeParameter decl, TypeSolver typeSolver, ContextList ignoredContexts)
+ {
+ JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(typeSolver, ignoredContexts);
+ return resolver.getQualifiedDeclName(decl);
+ }
+
+ public JavaDeclName getQualifiedDeclName(TypeParameter decl)
+ {
+ JavaDeclName declName = new JavaDeclName("unsolved-jp-decl"); // JavaDeclName.unsolved();
+
+ if (decl != null)
+ {
+ declName = getDeclName(decl);
+
+ BodyDeclaration declContext = getBodyDeclContext(decl);
+ if (declContext != null)
+ {
+ if (!m_ignoredContexts.contains(declContext))
+ {
+ declName.setParent(getQualifiedDeclName(declContext));
+ }
+ }
+ else
+ {
+ throw new UnsupportedOperationException("no appropriate parent found for TypeParameter");
+ }
+ }
+ return declName;
+ }
+
+ public JavaDeclName getDeclName(TypeParameter decl)
+ {
+ return new JavaDeclName(decl.getName().asString());
+ }
+
private static List getTypeParameterNames(TypeDeclaration decl)
{
NodeList typeParameters = null;
@@ -228,7 +264,7 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
private JavaDeclName getDeclNameOfCallable(T decl)
{
- ArrayList ignoredContextsForTypes = new ArrayList(m_ignoredContexts);
+ ContextList ignoredContextsForTypes = m_ignoredContexts.copy();
ignoredContextsForTypes.add(decl.getWrappedNode()); // adding own decl
List parameterNames = new ArrayList<>();
@@ -237,10 +273,16 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
parameterNames.add(JavaparserTypeNameResolver.getQualifiedTypeName(parameter.getType(), m_typeSolver, ignoredContextsForTypes));
}
+ JavaTypeName returnType = new JavaTypeName("", null);
+ if (decl.isMethod())
+ {
+ returnType = JavaparserTypeNameResolver.getQualifiedTypeName(decl.getType(), m_typeSolver, ignoredContextsForTypes);
+ }
+
return new JavaFunctionDeclName(
decl.getName(),
getTypeParameterNames(decl.getTypeParameters()),
- JavaparserTypeNameResolver.getQualifiedTypeName(decl.getType(), m_typeSolver, ignoredContextsForTypes),
+ returnType,
parameterNames,
decl.isStatic()
);
diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java
index cf819b64..1a440707 100644
--- a/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java
+++ b/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java
@@ -1,6 +1,6 @@
package com.sourcetrail;
-import java.util.ArrayList;
+import java.util.List;
import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.ast.type.*;
@@ -11,7 +11,7 @@ import com.sourcetrail.name.JavaTypeName;
public class JavaparserTypeNameResolver extends JavaNameResolver
{
- public JavaparserTypeNameResolver(TypeSolver typeSolver, ArrayList ignoredContexts)
+ public JavaparserTypeNameResolver(TypeSolver typeSolver, ContextList ignoredContexts)
{
super(typeSolver, ignoredContexts);
}
@@ -21,7 +21,7 @@ public class JavaparserTypeNameResolver extends JavaNameResolver
return getQualifiedTypeName(type, typeSolver, null);
}
- public static JavaTypeName getQualifiedTypeName(Type type, TypeSolver typeSolver, ArrayList ignoredContexts)
+ public static JavaTypeName getQualifiedTypeName(Type type, TypeSolver typeSolver, ContextList ignoredContexts)
{
JavaparserTypeNameResolver resolver = new JavaparserTypeNameResolver(typeSolver, ignoredContexts);
return resolver.getQualifiedTypeName(type);
@@ -92,7 +92,8 @@ public class JavaparserTypeNameResolver extends JavaNameResolver
}
System.out.println("Unable to resolve qualified name of " + type.getClass().toString() + ": " + fallbackTypeName);
- return new JavaTypeName("unresolved-type", null);
+
+ return new JavaTypeName("unsolved-jp-type", null); // JavaTypeName.unsolved();
}
diff --git a/java_indexer/src/main/java/com/sourcetrail/VerboseAstVisitor.java b/java_indexer/src/main/java/com/sourcetrail/VerboseAstVisitor.java
index 840f26c8..9d2fc5e7 100644
--- a/java_indexer/src/main/java/com/sourcetrail/VerboseAstVisitor.java
+++ b/java_indexer/src/main/java/com/sourcetrail/VerboseAstVisitor.java
@@ -90,8 +90,6 @@ public class VerboseAstVisitor extends AstVisitor{
public void visit(Parameter n, Void v) { dump(n); indent++; super.visit(n, v); indent--; }
- public void visit(EmptyMemberDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; }
-
public void visit(InitializerDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; }
public void visit(JavadocComment n, Void v) { dump(n); indent++; super.visit(n, v); indent--; }
@@ -223,4 +221,6 @@ public class VerboseAstVisitor extends AstVisitor{
public void visit(MethodReferenceExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; }
public void visit(TypeExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; }
+
+ public void visit(UnparsableStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; }
}
diff --git a/java_indexer/src/main/java/com/sourcetrail/name/JavaDeclName.java b/java_indexer/src/main/java/com/sourcetrail/name/JavaDeclName.java
index d6cff73e..a4a77476 100644
--- a/java_indexer/src/main/java/com/sourcetrail/name/JavaDeclName.java
+++ b/java_indexer/src/main/java/com/sourcetrail/name/JavaDeclName.java
@@ -8,9 +8,13 @@ public class JavaDeclName
private String m_name = "";
private List m_typeParameterNames = null;
+ public static JavaDeclName unsolved()
+ {
+ return new JavaDeclName("unsolved-symbol");
+ }
+
public static JavaDeclName fromDotSeparatedString(String s)
{
-
JavaDeclName declName = null;
int separatorIndex = s.lastIndexOf('.');
diff --git a/java_indexer/src/main/java/com/sourcetrail/name/JavaFunctionDeclName.java b/java_indexer/src/main/java/com/sourcetrail/name/JavaFunctionDeclName.java
index 38373fb4..bf4d9e47 100644
--- a/java_indexer/src/main/java/com/sourcetrail/name/JavaFunctionDeclName.java
+++ b/java_indexer/src/main/java/com/sourcetrail/name/JavaFunctionDeclName.java
@@ -1,12 +1,13 @@
package com.sourcetrail.name;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class JavaFunctionDeclName extends JavaDeclName
{
private JavaTypeName m_returnTypeName = null;
- private List m_parameterNames = null;
+ private List m_parameterNames = new ArrayList<>();
private boolean m_isStatic = false;
public JavaFunctionDeclName(String name, JavaTypeName returnTypeName, List parameterNames, boolean isStatic)
@@ -14,7 +15,7 @@ public class JavaFunctionDeclName extends JavaDeclName
super(name);
m_returnTypeName = returnTypeName;
- m_parameterNames = parameterNames;
+ if (m_parameterNames != null) m_parameterNames = parameterNames;
m_isStatic = isStatic;
}
diff --git a/java_indexer/src/main/java/com/sourcetrail/name/JavaTypeName.java b/java_indexer/src/main/java/com/sourcetrail/name/JavaTypeName.java
index 35011503..c696616f 100644
--- a/java_indexer/src/main/java/com/sourcetrail/name/JavaTypeName.java
+++ b/java_indexer/src/main/java/com/sourcetrail/name/JavaTypeName.java
@@ -8,6 +8,11 @@ public class JavaTypeName
private String m_name = "";
private List m_typeArgumentNames = null;
+ public static JavaTypeName unsolved()
+ {
+ return new JavaTypeName("unsolved-type", null);
+ }
+
public static JavaTypeName fromDotSeparatedString(String s)
{
JavaTypeName typeName = null;
diff --git a/script/update_java_indexer.sh b/script/update_java_indexer.sh
index 7e91272b..3611790f 100755
--- a/script/update_java_indexer.sh
+++ b/script/update_java_indexer.sh
@@ -39,7 +39,7 @@ mkdir -p bin/app/data/java
rm -rf bin/app/data/java/*
cp -r java_indexer/target/java-indexer-1.0.jar bin/app/data/java/java-indexer.jar
cp -r java_indexer/target/dependency/guava*.jar bin/app/data/java
-cp -r java_indexer/target/dependency/javaparser-core*.jar bin/app/data/java
+cp -r java_indexer/target/dependency/javaparser-core*.jar bin/app/data/java/javaparser-core.jar
cp -r java_indexer/target/dependency/javaslang*.jar bin/app/data/java
cp -r java_indexer/target/dependency/javassist*.jar bin/app/data/java
cp -r java_indexer/target/dependency/java-symbol-solver-core-x.x.x.jar bin/app/data/java/java-symbol-solver-core.jar
diff --git a/src/lib_java/data/parser/java/JavaParser.cpp b/src/lib_java/data/parser/java/JavaParser.cpp
index a70fb96a..3685eb0b 100644
--- a/src/lib_java/data/parser/java/JavaParser.cpp
+++ b/src/lib_java/data/parser/java/JavaParser.cpp
@@ -18,7 +18,7 @@ std::vector JavaParser::getRequiredJarNames()
std::vector jarNames = {
"guava-21.0.jar",
"java-indexer.jar",
- "javaparser-core-3.2.4.jar",
+ "javaparser-core.jar",
"javaslang-2.0.3.jar",
"javassist-3.19.0-GA.jar",
"java-symbol-solver-core.jar",