From 0ad7585811fbf1c442d452ac2797934960a901b7 Mon Sep 17 00:00:00 2001 From: malte_langkabel Date: Tue, 23 Aug 2016 15:58:22 +0200 Subject: [PATCH] data: removed java import errors * removed error recording when import not found because of false positives --- java_indexer/src/io/coati/JavaAstVisitor.java | 44 ++++++++++++ .../src/io/coati/JavaDeclNameResolver.java | 67 +++++++++++++++++++ 2 files changed, 111 insertions(+) diff --git a/java_indexer/src/io/coati/JavaAstVisitor.java b/java_indexer/src/io/coati/JavaAstVisitor.java index 1718fcfe..a8f82b61 100644 --- a/java_indexer/src/io/coati/JavaAstVisitor.java +++ b/java_indexer/src/io/coati/JavaAstVisitor.java @@ -19,6 +19,7 @@ import com.github.javaparser.ast.comments.LineComment; import com.github.javaparser.ast.expr.ArrayInitializerExpr; import com.github.javaparser.ast.expr.MethodCallExpr; import com.github.javaparser.ast.expr.NameExpr; +import com.github.javaparser.ast.expr.QualifiedNameExpr; import com.github.javaparser.ast.expr.VariableDeclarationExpr; import com.github.javaparser.ast.stmt.BlockStmt; import com.github.javaparser.ast.stmt.SwitchStmt; @@ -32,6 +33,7 @@ import com.github.javaparser.ast.PackageDeclaration; import com.github.javaparser.ast.TypeParameter; import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade; +import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFactory; import me.tomassetti.symbolsolver.javaparsermodel.UnsolvedSymbolException; import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration; import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration; @@ -388,6 +390,45 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter { importedDeclName = JavaDeclNameResolver.getQualifiedDeclName(symbolReference.getCorrespondingDeclaration(), m_typeSolver); } + + /* + else + { + // TODO: handle import of static field or method + + if (nameExpr instanceof QualifiedNameExpr) + { + String qName = nameExpr.toString(); + int typeNameEndIndex = qName.lastIndexOf('.'); + if (typeNameEndIndex != -1) + { + String typeName = qName.substring(0, typeNameEndIndex); + String memberName = qName.substring(typeNameEndIndex + 1); + + me.tomassetti.symbolsolver.model.declarations.TypeDeclaration ref = m_typeSolver.solveType(typeName); + for (me.tomassetti.symbolsolver.model.declarations.MethodDeclaration methodDecl: ref.getDeclaredMethods()) // look for method + { + if (methodDecl.getName().equals(memberName)) + { + System.out.println("methodDeclNamasdasdasdasd: " + methodDecl.getName()); + importedDeclName = JavaDeclNameResolver.getQualifiedDeclName(methodDecl, m_typeSolver); + break; + } + } + if (importedDeclName == null && ref.hasField(memberName)) // look for field + { + JavaDeclName importedTypeDeclName = JavaDeclNameResolver.getQualifiedDeclName(ref, m_typeSolver); + if (importedTypeDeclName != null) + { + importedDeclName = new JavaDeclName(memberName); + importedDeclName.setParent(importedTypeDeclName); + } + } + } + } + } + + */ if (importedDeclName != null) { @@ -403,10 +444,13 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter } else { + // uncomment this when there are no errors where there shouldn't be + /* JavaIndexer.recordError( m_callbackId, "Import not found.", true, true, nameExpr.getBeginLine(), nameExpr.getBeginColumn(), nameExpr.getEndLine(), nameExpr.getEndColumn() ); + */ } } catch (Exception e) diff --git a/java_indexer/src/io/coati/JavaDeclNameResolver.java b/java_indexer/src/io/coati/JavaDeclNameResolver.java index dfee523d..d3254422 100644 --- a/java_indexer/src/io/coati/JavaDeclNameResolver.java +++ b/java_indexer/src/io/coati/JavaDeclNameResolver.java @@ -24,6 +24,7 @@ import com.github.javaparser.ast.expr.QualifiedNameExpr; import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration; import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserInterfaceDeclaration; +import me.tomassetti.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration; import me.tomassetti.symbolsolver.model.resolution.TypeSolver; public class JavaDeclNameResolver extends JavaNameResolver @@ -167,6 +168,72 @@ public class JavaDeclNameResolver extends JavaNameResolver return declName; } + // TODO: move this to JavaSymbolSolverDeclNameResolver + /* + public static JavaDeclName getQualifiedDeclName(me.tomassetti.symbolsolver.model.declarations.MethodDeclaration methodDecl, TypeSolver typeSolver) + { + return getQualifiedDeclName(methodDecl, typeSolver, null); + } + + public static JavaDeclName getQualifiedDeclName(me.tomassetti.symbolsolver.model.declarations.MethodDeclaration methodDecl, TypeSolver typeSolver, ArrayList ignoredContexts) + { + JavaDeclNameResolver resolver = new JavaDeclNameResolver(typeSolver, ignoredContexts); + return resolver.getQualifiedDeclName(methodDecl); + } + + public JavaDeclName getQualifiedDeclName(me.tomassetti.symbolsolver.model.declarations.MethodDeclaration methodDecl) + { + JavaDeclName declName = null; + if (methodDecl != null) + { + MethodDeclaration decl = null; + if (methodDecl instanceof JavaParserMethodDeclaration) + { + decl = ((JavaParserMethodDeclaration)methodDecl).getWrappedNode(); + } + else + { + methodDecl.declaringType(); + + + String name = methodDecl.getName(); + + List typeParameters = methodDecl.getTypeParameters(); + List typeParameterNames = new ArrayList<>(); + if (typeParameters != null && typeParameters.size() > 0) + { + for (int i = 0; i < typeParameters.size(); i++) + { + typeParameterNames.add(typeParameters.get(i).getName()); + } + } + + JavaTypeName returnTypeName = methodDecl.getReturnType().; + + List parameterNames = new ArrayList<>(); + for (Parameter parameter: decl.getParameters()) + { + parameterNames.add(JavaTypeNameResolver.getQualifiedTypeName(parameter.getType(), m_typeSolver, m_ignoredContexts)); + } + + return new JavaDeclName(name, typeParameterNames, returnTypeName, parameterNames); + + + + + } + // todo: implement for JavaParserEnumDeclaration.ValuesMethod + + if (decl != null) + { + declName = JavaDeclNameResolver.getQualifiedDeclName(decl, m_typeSolver, m_ignoredContexts); + } + } + return declName; + } + + */ + public JavaDeclName getDeclName(VariableDeclarator decl) { return new JavaDeclName(decl.getId().getName());