diff --git a/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java b/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java index 67fd75fd..1a87fb9b 100644 --- a/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java +++ b/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java @@ -72,7 +72,8 @@ public class AstVisitor extends AstVisitorAdapter // --- record declarations --- - @Override public void visit(final PackageDeclaration n, final Void v) + @Override + public Boolean visit(final PackageDeclaration n, final Void v) { Name name = n.getName(); @@ -96,10 +97,11 @@ public class AstVisitor extends AstVisitorAdapter ); } - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final ClassOrInterfaceDeclaration n, final Void v) + @Override + public Boolean visit(final ClassOrInterfaceDeclaration n, final Void v) { SimpleName name = n.getName(); @@ -122,11 +124,13 @@ public class AstVisitor extends AstVisitorAdapter List parentContext = m_context; m_context = new ArrayList(); m_context.add(new DeclContext(qualifiedName)); - super.visit(n, v); + Boolean result = super.visit(n, v); m_context = parentContext; + return result; } - @Override public void visit(final TypeParameter n, final Void v) + @Override + public Boolean visit(final TypeParameter n, final Void v) { // todo: test recording of typeargument of type parameter bound type?? @@ -159,11 +163,13 @@ public class AstVisitor extends AstVisitorAdapter List parentContext = m_context; m_context = new ArrayList(); m_context.add(new DeclContext(qualifiedName)); - super.visit(n, v); + Boolean result = super.visit(n, v); m_context = parentContext; + return result; } - @Override public void visit(final EnumDeclaration n, final Void v) + @Override + public Boolean visit(final EnumDeclaration n, final Void v) { SimpleName name = n.getName(); @@ -186,11 +192,13 @@ public class AstVisitor extends AstVisitorAdapter List parentContext = m_context; m_context = new ArrayList(); m_context.add(new DeclContext(qualifiedName)); - super.visit(n, v); + Boolean result = super.visit(n, v); m_context = parentContext; + return result; } - @Override public void visit(final EnumConstantDeclaration n, final Void v) + @Override + public Boolean visit(final EnumConstantDeclaration n, final Void v) { String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize(); @@ -204,11 +212,13 @@ public class AstVisitor extends AstVisitorAdapter List parentContext = m_context; m_context = new ArrayList(); m_context.add(new DeclContext(qualifiedName)); - super.visit(n, v); + Boolean result = super.visit(n, v); m_context = parentContext; + return result; } - @Override public void visit(final ConstructorDeclaration n, final Void v) + @Override + public Boolean visit(final ConstructorDeclaration n, final Void v) { SimpleName name = n.getName(); @@ -225,12 +235,20 @@ public class AstVisitor extends AstVisitorAdapter List parentContext = m_context; m_context = new ArrayList(); m_context.add(new DeclContext(qualifiedName)); - super.visit(n, v); + Boolean result = super.visit(n, v); m_context = parentContext; + return result; } - @Override public void visit(final MethodDeclaration n, final Void v) + @Override + public Boolean visit(final MethodDeclaration n, final Void v) { + if (m_client.getInterrupted()) + { + // return something that is not null in order to cancel AST traversal; + return false; + } + SimpleName name = n.getName(); String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize(); @@ -259,8 +277,9 @@ public class AstVisitor extends AstVisitorAdapter List parentContext = m_context; m_context = new ArrayList(); m_context.add(new DeclContext(qualifiedName)); - super.visit(n, v); + Boolean result = super.visit(n, v); m_context = parentContext; + return result; } private com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration getOverridden(MethodDeclaration overrider) @@ -321,7 +340,8 @@ public class AstVisitor extends AstVisitorAdapter return null; } - @Override public void visit(final FieldDeclaration n, final Void v) + @Override + public Boolean visit(final FieldDeclaration n, final Void v) { List parentContext = m_context; m_context = new ArrayList(); @@ -340,11 +360,13 @@ public class AstVisitor extends AstVisitorAdapter m_context.add(new DeclContext(qualifiedName)); } - super.visit(n, v); + Boolean result = super.visit(n, v); m_context = parentContext; + return result; } - @Override public void visit(final VariableDeclarationExpr n, final Void v) + @Override + public Boolean visit(final VariableDeclarationExpr n, final Void v) { for (VariableDeclarator declarator: n.getVariables()) { @@ -359,10 +381,11 @@ public class AstVisitor extends AstVisitorAdapter } // don't change the context here. - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final Parameter n, final Void v) + @Override + public Boolean visit(final Parameter n, final Void v) { SimpleName name = n.getName(); @@ -374,14 +397,14 @@ public class AstVisitor extends AstVisitorAdapter } // don't change the context here. - super.visit(n, v); + return super.visit(n, v); } // --- record references --- @Override - public void visit(final ImportDeclaration n, final Void v) + public Boolean visit(final ImportDeclaration n, final Void v) { Name name = n.getName(); @@ -461,10 +484,11 @@ public class AstVisitor extends AstVisitorAdapter recordException(e, n); } } - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final ClassOrInterfaceType n, final Void v) + @Override + public Boolean visit(final ClassOrInterfaceType n, final Void v) { try { @@ -507,10 +531,11 @@ public class AstVisitor extends AstVisitorAdapter { recordException(e, n); } - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final PrimitiveType n, final Void v) + @Override + public Boolean visit(final PrimitiveType n, final Void v) { try { @@ -535,10 +560,11 @@ public class AstVisitor extends AstVisitorAdapter recordException(e, n); } - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final VoidType n, final Void v) + @Override + public Boolean visit(final VoidType n, final Void v) { try { @@ -560,10 +586,11 @@ public class AstVisitor extends AstVisitorAdapter recordException(e, n); } - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final FieldAccessExpr n, final Void v) + @Override + public Boolean visit(final FieldAccessExpr n, final Void v) { SimpleName fieldName = n.getName(); @@ -604,10 +631,11 @@ public class AstVisitor extends AstVisitorAdapter recordException(e, n); } - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final NameExpr n, final Void v) + @Override + public Boolean visit(final NameExpr n, final Void v) { try { @@ -699,10 +727,11 @@ public class AstVisitor extends AstVisitorAdapter recordException(e, n); } - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final MethodCallExpr n, final Void v) + @Override + public Boolean visit(final MethodCallExpr n, final Void v) { String qualifiedName = ""; if (m_context.size() > 0) @@ -749,7 +778,7 @@ public class AstVisitor extends AstVisitorAdapter } } - super.visit(n, v); + return super.visit(n, v); } @@ -783,7 +812,8 @@ public class AstVisitor extends AstVisitorAdapter ); } - @Override public void visit(final ObjectCreationExpr n, final Void v) + @Override + public Boolean visit(final ObjectCreationExpr n, final Void v) { String qualifiedName = ""; if (m_context.size() > 0) @@ -830,29 +860,32 @@ public class AstVisitor extends AstVisitorAdapter } } - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final BlockStmt n, final Void v) + @Override + public Boolean visit(final BlockStmt n, final Void v) { recordScope(n.getRange()); - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final ArrayInitializerExpr n, final Void v) + @Override + public Boolean visit(final ArrayInitializerExpr n, final Void v) { recordScope(n.getRange()); - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final SwitchStmt n, final Void v) + @Override + public Boolean visit(final SwitchStmt n, final Void v) { if (n.getRange().isPresent()) { FileContent.Location scopeStartLocation = m_fileContent.find("{", n.getBegin()); recordScope(Range.range(scopeStartLocation.line, scopeStartLocation.column, n.getRange().get().end.line, n.getRange().get().end.column)); } - super.visit(n, v); + return super.visit(n, v); } private void recordScope(Optional range) @@ -870,15 +903,17 @@ public class AstVisitor extends AstVisitorAdapter m_client.recordLocalSymbol(qualifiedName, Range.range(range.end, range.end)); } - @Override public void visit(final LineComment n, final Void v) + @Override + public Boolean visit(final LineComment n, final Void v) { m_client.recordComment(n.getRange()); - super.visit(n, v); + return super.visit(n, v); } - @Override public void visit(final BlockComment n, final Void v) + @Override + public Boolean visit(final BlockComment n, final Void v) { m_client.recordComment(n.getRange()); - super.visit(n, v); + return super.visit(n, v); } } \ No newline at end of file diff --git a/java_indexer/src/main/java/com/sourcetrail/AstVisitorAdapter.java b/java_indexer/src/main/java/com/sourcetrail/AstVisitorAdapter.java index 665f61bd..2ea21537 100644 --- a/java_indexer/src/main/java/com/sourcetrail/AstVisitorAdapter.java +++ b/java_indexer/src/main/java/com/sourcetrail/AstVisitorAdapter.java @@ -1,5 +1,7 @@ package com.sourcetrail; +import com.github.javaparser.ast.visitor.GenericListVisitorAdapter; +import com.github.javaparser.ast.visitor.GenericVisitorAdapter; import com.github.javaparser.ast.visitor.VoidVisitorAdapter; import com.github.javaparser.ast.*; @@ -13,7 +15,9 @@ import com.github.javaparser.ast.type.*; import java.util.Optional; import java.util.Stack; -public abstract class AstVisitorAdapter extends VoidVisitorAdapter +import javax.annotation.Generated; + +public abstract class AstVisitorAdapter extends GenericVisitorAdapter { private Stack m_typeRefKind = new Stack(); @@ -28,221 +32,245 @@ public abstract class AstVisitorAdapter extends VoidVisitorAdapter //- Compilation Unit ---------------------------------- - @Override public void visit(final CompilationUnit n, Void arg) + @Override public Boolean visit(final CompilationUnit n, Void arg) { m_typeRefKind.push(ReferenceKind.TYPE_USAGE); - visitComment(n.getComment(), arg); - if (n.getPackageDeclaration().isPresent()) - { - n.getPackageDeclaration().get().accept(this, arg); - } - if (n.getImports() != null) - { - for (final ImportDeclaration i : n.getImports()) - { - i.accept(this, arg); - } - } - if (n.getTypes() != null) - { - for (final TypeDeclaration typeDeclaration : n.getTypes()) - { - typeDeclaration.accept(this, arg); - } - } + Boolean result = super.visit(n, arg); m_typeRefKind.pop(); + return result; } //- Body ---------------------------------------------- - @Override public void visit(ClassOrInterfaceDeclaration n, Void arg) + @Override public Boolean visit(ClassOrInterfaceDeclaration n, Void arg) { - visitComment(n.getComment(), arg); - visitAnnotations(n, arg); - n.getName().accept(this, arg); - for (final TypeParameter t : n.getTypeParameters()) - { - t.accept(this, arg); - } - + Boolean result; + { + result = n.getTypeParameters().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getMembers().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getName().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getAnnotations().accept(this, arg); + if (result != null) + return result; + } + if (n.getComment().isPresent()) { + result = n.getComment().get().accept(this, arg); + if (result != null) + return result; + } + m_typeRefKind.push(ReferenceKind.INHERITANCE); - for (final ClassOrInterfaceType c : n.getExtendedTypes()) - { - c.accept(this, arg); - } - for (final ClassOrInterfaceType c : n.getImplementedTypes()) - { - c.accept(this, arg); - } + { + result = n.getExtendedTypes().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getImplementedTypes().accept(this, arg); + if (result != null) + return result; + } m_typeRefKind.pop(); - - for (final BodyDeclaration member : n.getMembers()) - { - member.accept(this, arg); - } + + return null; } - @Override public void visit(EnumDeclaration n, Void arg) + @Override public Boolean visit(EnumDeclaration n, Void arg) { - visitComment(n.getComment(), arg); - visitAnnotations(n, arg); - n.getName().accept(this, arg); - + Boolean result; + { + result = n.getEntries().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getMembers().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getName().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getAnnotations().accept(this, arg); + if (result != null) + return result; + } + if (n.getComment().isPresent()) { + result = n.getComment().get().accept(this, arg); + if (result != null) + return result; + } + m_typeRefKind.push(ReferenceKind.INHERITANCE); - if (n.getImplementedTypes() != null) - { - for (final ClassOrInterfaceType c : n.getImplementedTypes()) - { - c.accept(this, arg); - } - } + { + result = n.getImplementedTypes().accept(this, arg); + if (result != null) + return result; + } m_typeRefKind.pop(); - if (n.getEntries() != null) - { - for (final EnumConstantDeclaration e : n.getEntries()) - { - e.accept(this, arg); - } - } - if (n.getMembers() != null) - { - for (final BodyDeclaration member : n.getMembers()) - { - member.accept(this, arg); - } - } + return null; } //- Type ---------------------------------------------- - @Override public void visit(ClassOrInterfaceType n, Void arg) + @Override public Boolean visit(ClassOrInterfaceType n, Void arg) { - visitComment(n.getComment(), arg); - visitAnnotations(n, arg); + Boolean result; + { + result = n.getName().accept(this, arg); + if (result != null) + return result; + } // don't visit the qualifier here. -// if (n.getScope().isPresent()) -// { -// n.getScope().get().accept(this, arg); -// } +// if (n.getScope().isPresent()) { +// result = n.getScope().get().accept(this, arg); +// if (result != null) +// return result; +// } + { + result = n.getAnnotations().accept(this, arg); + if (result != null) + return result; + } + if (n.getComment().isPresent()) { + result = n.getComment().get().accept(this, arg); + if (result != null) + return result; + } + m_typeRefKind.push(ReferenceKind.TYPE_ARGUMENT); - if (n.getTypeArguments().isPresent()) - { - for (final Type t : n.getTypeArguments().get()) - { - t.accept(this, arg); - } - } + if (n.getTypeArguments().isPresent()) { + result = n.getTypeArguments().get().accept(this, arg); + if (result != null) + return result; + } m_typeRefKind.pop(); + + return null; } //- Expression ---------------------------------------- - @Override public void visit(MethodCallExpr n, Void arg) + @Override public Boolean visit(MethodCallExpr n, Void arg) { - visitComment(n.getComment(), arg); - if (n.getScope().isPresent()) - { - n.getScope().get().accept(this, arg); - } - - m_typeRefKind.push(ReferenceKind.TYPE_ARGUMENT); - if (n.getTypeArguments().isPresent()) - { - for (final Type t : n.getTypeArguments().get()) - { - t.accept(this, arg); - } - } - m_typeRefKind.pop(); + Boolean result; + { + result = n.getArguments().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getName().accept(this, arg); + if (result != null) + return result; + } + if (n.getScope().isPresent()) { + result = n.getScope().get().accept(this, arg); + if (result != null) + return result; + } + if (n.getComment().isPresent()) { + result = n.getComment().get().accept(this, arg); + if (result != null) + return result; + } - n.getName().accept(this, arg); - if (n.getArguments() != null) - { - for (final Expression e : n.getArguments()) - { - e.accept(this, arg); - } - } + m_typeRefKind.push(ReferenceKind.TYPE_ARGUMENT); + if (n.getTypeArguments().isPresent()) { + result = n.getTypeArguments().get().accept(this, arg); + if (result != null) + return result; + } + m_typeRefKind.pop(); + + return null; } - @Override public void visit(ObjectCreationExpr n, Void arg) + @Override public Boolean visit(ObjectCreationExpr n, Void arg) { - visitComment(n.getComment(), arg); - if (n.getScope().isPresent()) - { - n.getScope().get().accept(this, arg); - } - + Boolean result; + if (n.getAnonymousClassBody().isPresent()) { + result = n.getAnonymousClassBody().get().accept(this, arg); + if (result != null) + return result; + } + { + result = n.getArguments().accept(this, arg); + if (result != null) + return result; + } + if (n.getScope().isPresent()) { + result = n.getScope().get().accept(this, arg); + if (result != null) + return result; + } +// { +// result = n.getType().accept(this, arg); +// if (result != null) +// return result; +// } + if (n.getComment().isPresent()) { + result = n.getComment().get().accept(this, arg); + if (result != null) + return result; + } + m_typeRefKind.push(ReferenceKind.TYPE_ARGUMENT); - if (n.getTypeArguments().isPresent()) - { - for (final Type t : n.getTypeArguments().get()) - { - t.accept(this, arg); - } - } + if (n.getTypeArguments().isPresent()) { + result = n.getTypeArguments().get().accept(this, arg); + if (result != null) + return result; + } m_typeRefKind.pop(); -// n.getType().accept(this, arg); - if (n.getArguments() != null) - { - for (final Expression e : n.getArguments()) - { - e.accept(this, arg); - } - } - if (n.getAnonymousClassBody().isPresent()) - { - for (final BodyDeclaration member : n.getAnonymousClassBody().get()) - { - member.accept(this, arg); - } - } + return null; } //- Statements ---------------------------------------- - @Override public void visit(ExplicitConstructorInvocationStmt n, Void arg) + @Override public Boolean visit(ExplicitConstructorInvocationStmt n, Void arg) { - visitComment(n.getComment(), arg); - if (!n.isThis() && n.getExpression().isPresent()) - { - n.getExpression().get().accept(this, arg); - } + Boolean result; + { + result = n.getArguments().accept(this, arg); + if (result != null) + return result; + } + if (n.getExpression().isPresent()) { + result = n.getExpression().get().accept(this, arg); + if (result != null) + return result; + } + if (n.getComment().isPresent()) { + result = n.getComment().get().accept(this, arg); + if (result != null) + return result; + } m_typeRefKind.push(ReferenceKind.TYPE_ARGUMENT); - if (n.getTypeArguments().isPresent()) - { - for (final Type t : n.getTypeArguments().get()) - { - t.accept(this, arg); - } - } + if (n.getTypeArguments().isPresent()) { + result = n.getTypeArguments().get().accept(this, arg); + if (result != null) + return result; + } m_typeRefKind.pop(); - if (n.getArguments() != null) - { - for (final Expression e : n.getArguments()) - { - e.accept(this, arg); - } - } - } - - private void visitComment(final Optional n, final Void arg) - { - if (n.isPresent()) - { - n.get().accept(this, arg); - } - } - - private void visitAnnotations(NodeWithAnnotations n, final Void arg) - { - for (AnnotationExpr annotation : n.getAnnotations()) - { - annotation.accept(this, arg); - } + return null; } } diff --git a/java_indexer/src/main/java/com/sourcetrail/AstVisitorClient.java b/java_indexer/src/main/java/com/sourcetrail/AstVisitorClient.java index 8548feb8..674e643d 100644 --- a/java_indexer/src/main/java/com/sourcetrail/AstVisitorClient.java +++ b/java_indexer/src/main/java/com/sourcetrail/AstVisitorClient.java @@ -71,6 +71,8 @@ public abstract class AstVisitorClient ); } + public abstract boolean getInterrupted(); + public abstract void logInfo(String info); public abstract void logWarning(String warning); diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaIndexer.java b/java_indexer/src/main/java/com/sourcetrail/JavaIndexer.java index 73e7964b..8153d876 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaIndexer.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaIndexer.java @@ -6,7 +6,6 @@ import java.io.StringReader; import java.lang.String; import java.util.HashMap; import java.util.Map; -import java.util.Optional; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.PackageDeclaration; @@ -15,7 +14,6 @@ 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; @@ -140,6 +138,8 @@ public class JavaIndexer // the following methods are defined in the native c++ code + static public native boolean getInterrupted(int address); + static public native void logInfo(int address, String info); static public native void logWarning(int address, String warning); diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaIndexerAstVisitorClient.java b/java_indexer/src/main/java/com/sourcetrail/JavaIndexerAstVisitorClient.java index 7dba867e..66c5ddf4 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaIndexerAstVisitorClient.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaIndexerAstVisitorClient.java @@ -11,6 +11,12 @@ public class JavaIndexerAstVisitorClient extends AstVisitorClient m_address = address; } + @Override + public boolean getInterrupted() + { + return JavaIndexer.getInterrupted(m_address); + } + @Override public void logInfo(String info) { diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java index 0d6f9a7b..65c3aadf 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java @@ -210,7 +210,7 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver 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(); + declName = JavaDeclName.unsolved(); } return declName; diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java index 517cd67a..e35f838c 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java @@ -91,6 +91,6 @@ public class JavaSymbolSolverTypeNameResolver extends JavaNameResolver System.out.println("Unable to resolve qualified name of " + type.getClass().toString() + ": " + type.toString()); - return new JavaTypeName("unsolved-jss-type", null); // JavaTypeName.unsolved(); + return 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 b5d0cd0f..c18b309d 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java @@ -20,7 +20,6 @@ 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; @@ -49,7 +48,7 @@ public class JavaparserDeclNameResolver extends JavaNameResolver public JavaDeclName getQualifiedDeclName(VariableDeclarator decl) { - JavaDeclName declName = new JavaDeclName("unsolved-jp-decl"); // JavaDeclName.unsolved(); + JavaDeclName declName = JavaDeclName.unsolved(); if (decl != null) { @@ -111,7 +110,7 @@ public class JavaparserDeclNameResolver extends JavaNameResolver public JavaDeclName getQualifiedDeclName(BodyDeclaration decl) { - JavaDeclName declName = new JavaDeclName("unsolved-jp-decl"); // JavaDeclName.unsolved(); + JavaDeclName declName = JavaDeclName.unsolved(); if (decl != null) { @@ -149,7 +148,7 @@ public class JavaparserDeclNameResolver extends JavaNameResolver public JavaDeclName getDeclName(BodyDeclaration decl) { - JavaDeclName declName = new JavaDeclName("unsolved-jp-decl"); // JavaDeclName.unsolved(); + JavaDeclName declName = JavaDeclName.unsolved(); if (decl != null) { @@ -201,7 +200,7 @@ public class JavaparserDeclNameResolver extends JavaNameResolver public JavaDeclName getQualifiedDeclName(TypeParameter decl) { - JavaDeclName declName = new JavaDeclName("unsolved-jp-decl"); // JavaDeclName.unsolved(); + JavaDeclName declName = JavaDeclName.unsolved(); if (decl != null) { diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java index 1a440707..ec615afb 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java @@ -1,8 +1,5 @@ package com.sourcetrail; -import java.util.List; - -import com.github.javaparser.ast.body.BodyDeclaration; import com.github.javaparser.ast.type.*; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; @@ -93,7 +90,7 @@ public class JavaparserTypeNameResolver extends JavaNameResolver System.out.println("Unable to resolve qualified name of " + type.getClass().toString() + ": " + fallbackTypeName); - return new JavaTypeName("unsolved-jp-type", null); // JavaTypeName.unsolved(); + return 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 9d2fc5e7..1841326e 100644 --- a/java_indexer/src/main/java/com/sourcetrail/VerboseAstVisitor.java +++ b/java_indexer/src/main/java/com/sourcetrail/VerboseAstVisitor.java @@ -56,171 +56,171 @@ public class VerboseAstVisitor extends AstVisitor{ //- Compilation Unit ---------------------------------- - public void visit(CompilationUnit n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(CompilationUnit n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(PackageDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(PackageDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ImportDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ImportDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(TypeParameter n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(TypeParameter n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(LineComment n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(LineComment n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(BlockComment n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(BlockComment n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } //- Body ---------------------------------------------- - public void visit(ClassOrInterfaceDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ClassOrInterfaceDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(EnumDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(EnumDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(EnumConstantDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(EnumConstantDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(AnnotationDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(AnnotationDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(AnnotationMemberDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(AnnotationMemberDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(FieldDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(FieldDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(VariableDeclarator n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(VariableDeclarator n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ConstructorDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ConstructorDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(MethodDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(MethodDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(Parameter n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(Parameter n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(InitializerDeclaration n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(InitializerDeclaration n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(JavadocComment n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(JavadocComment n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } //- Type ---------------------------------------------- - public void visit(ClassOrInterfaceType n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ClassOrInterfaceType n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(PrimitiveType n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(PrimitiveType n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ArrayType n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ArrayType n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ArrayCreationLevel n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ArrayCreationLevel n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(IntersectionType n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(IntersectionType n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(UnionType n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(UnionType n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(VoidType n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(VoidType n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(WildcardType n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(WildcardType n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(UnknownType n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(UnknownType n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } //- Expression ---------------------------------------- - public void visit(ArrayAccessExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ArrayAccessExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ArrayCreationExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ArrayCreationExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ArrayInitializerExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ArrayInitializerExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(AssignExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(AssignExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(BinaryExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(BinaryExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(CastExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(CastExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ClassExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ClassExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ConditionalExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ConditionalExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(EnclosedExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(EnclosedExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(FieldAccessExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(FieldAccessExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(InstanceOfExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(InstanceOfExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(StringLiteralExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(StringLiteralExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(IntegerLiteralExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(IntegerLiteralExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(LongLiteralExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(LongLiteralExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(CharLiteralExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(CharLiteralExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(DoubleLiteralExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(DoubleLiteralExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(BooleanLiteralExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(BooleanLiteralExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(NullLiteralExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(NullLiteralExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(MethodCallExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(MethodCallExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(NameExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(NameExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ObjectCreationExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ObjectCreationExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ThisExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ThisExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(SuperExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(SuperExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(UnaryExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(UnaryExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(VariableDeclarationExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(VariableDeclarationExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(MarkerAnnotationExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(MarkerAnnotationExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(SingleMemberAnnotationExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(SingleMemberAnnotationExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(NormalAnnotationExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(NormalAnnotationExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(MemberValuePair n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(MemberValuePair n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } //- Statements ---------------------------------------- - public void visit(ExplicitConstructorInvocationStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ExplicitConstructorInvocationStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(AssertStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(AssertStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(BlockStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(BlockStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(LabeledStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(LabeledStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(EmptyStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(EmptyStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ExpressionStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ExpressionStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(SwitchStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(SwitchStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(SwitchEntryStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(SwitchEntryStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(BreakStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(BreakStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ReturnStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ReturnStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(IfStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(IfStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(WhileStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(WhileStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ContinueStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ContinueStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(DoStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(DoStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ForeachStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ForeachStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ForStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ForStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(ThrowStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(ThrowStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(SynchronizedStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(SynchronizedStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(TryStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(TryStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(CatchClause n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(CatchClause n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(LambdaExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(LambdaExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(MethodReferenceExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(MethodReferenceExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(TypeExpr n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(TypeExpr n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } - public void visit(UnparsableStmt n, Void v) { dump(n); indent++; super.visit(n, v); indent--; } + public Boolean visit(UnparsableStmt n, Void v) { dump(n); indent++; Boolean result = super.visit(n, v); indent--; return result; } } diff --git a/src/lib_java/data/parser/java/JavaParser.cpp b/src/lib_java/data/parser/java/JavaParser.cpp index 3685eb0b..fb7d4de4 100644 --- a/src/lib_java/data/parser/java/JavaParser.cpp +++ b/src/lib_java/data/parser/java/JavaParser.cpp @@ -95,6 +95,7 @@ JavaParser::JavaParser(std::shared_ptr client, std::shared_ptr methods; + methods.push_back({"getInterrupted", "(I)Z", (void*)&JavaParser::GetInterrupted}); methods.push_back({"logInfo", "(ILjava/lang/String;)V", (void*)&JavaParser::LogInfo}); methods.push_back({"logWarning", "(ILjava/lang/String;)V", (void*)&JavaParser::LogWarning}); methods.push_back({"logError", "(ILjava/lang/String;)V", (void*)&JavaParser::LogError}); @@ -182,6 +183,11 @@ std::mutex JavaParser::s_parsersMutex; // definition of native methods +bool JavaParser::doGetInterrupted() +{ + return m_interruptCounter.getCount() > 0; +} + void JavaParser::doLogInfo(jstring jInfo) { LOG_INFO_STREAM_BARE(<< "Indexer - " << m_javaEnvironment->toStdString(jInfo)); diff --git a/src/lib_java/data/parser/java/JavaParser.h b/src/lib_java/data/parser/java/JavaParser.h index 0d39556d..347e4455 100644 --- a/src/lib_java/data/parser/java/JavaParser.h +++ b/src/lib_java/data/parser/java/JavaParser.h @@ -9,6 +9,7 @@ #include "data/parser/java/JavaEnvironment.h" #include "utility/file/FilePath.h" #include "utility/logging/logging.h" +#include "utility/messaging/MessageInterruptTasksCounter.h" struct JNIEnv_; typedef JNIEnv_ JNIEnv; @@ -48,18 +49,18 @@ private: // This macro makes available a variable T, the passed-in t. blablabla TODO: write somethign real here #define MAKE_PARAMS_0() -#define MAKE_PARAMS_1(t1) t1 arg1 -#define MAKE_PARAMS_2(t1, t2) t1 arg1, t2 arg2 -#define MAKE_PARAMS_3(t1, t2, t3) t1 arg1, t2 arg2, t3 arg3 -#define MAKE_PARAMS_4(t1, t2, t3, t4) t1 arg1, t2 arg2, t3 arg3, t4 arg4 -#define MAKE_PARAMS_5(t1, t2, t3, t4, t5) t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5 -#define MAKE_PARAMS_6(t1, t2, t3, t4, t5, t6) t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6 -#define MAKE_PARAMS_7(t1, t2, t3, t4, t5, t6, t7) t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7 -#define MAKE_PARAMS_8(t1, t2, t3, t4, t5, t6, t7, t8) t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8 -#define MAKE_PARAMS_9(t1, t2, t3, t4, t5, t6, t7, t8, t9) t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8, t9 arg9 -#define MAKE_PARAMS_10(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8, t9 arg9, t10 arg10 -#define MAKE_PARAMS_11(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8, t9 arg9, t10 arg10, t11 arg11 -#define MAKE_PARAMS_12(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8, t9 arg9, t10 arg10, t11 arg11, t12 arg12 +#define MAKE_PARAMS_1(t1) , t1 arg1 +#define MAKE_PARAMS_2(t1, t2) , t1 arg1, t2 arg2 +#define MAKE_PARAMS_3(t1, t2, t3) , t1 arg1, t2 arg2, t3 arg3 +#define MAKE_PARAMS_4(t1, t2, t3, t4) , t1 arg1, t2 arg2, t3 arg3, t4 arg4 +#define MAKE_PARAMS_5(t1, t2, t3, t4, t5) , t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5 +#define MAKE_PARAMS_6(t1, t2, t3, t4, t5, t6) , t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6 +#define MAKE_PARAMS_7(t1, t2, t3, t4, t5, t6, t7) , t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7 +#define MAKE_PARAMS_8(t1, t2, t3, t4, t5, t6, t7, t8) , t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8 +#define MAKE_PARAMS_9(t1, t2, t3, t4, t5, t6, t7, t8, t9) , t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8, t9 arg9 +#define MAKE_PARAMS_10(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) , t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8, t9 arg9, t10 arg10 +#define MAKE_PARAMS_11(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) , t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8, t9 arg9, t10 arg10, t11 arg11 +#define MAKE_PARAMS_12(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) , t1 arg1, t2 arg2, t3 arg3, t4 arg4, t5 arg5, t6 arg6, t7 arg7, t8 arg8, t9 arg9, t10 arg10, t11 arg11, t12 arg12 //.. add as many MAKE_PARAMS_* as required #define MAKE_ARGS_0() @@ -78,6 +79,9 @@ private: //.. add as many MAKE_ARGS_* as there are MAKE_PARAMS_* +#define DEF_RELAYING_METHOD_0(NAME) \ + DEF_RELAYING_METHOD(NAME, MAKE_PARAMS_0(), MAKE_ARGS_0()) + #define DEF_RELAYING_METHOD_1(NAME, t1) \ DEF_RELAYING_METHOD(NAME, MAKE_PARAMS_1(t1), MAKE_ARGS_1(t1)) @@ -115,7 +119,7 @@ private: DEF_RELAYING_METHOD(NAME, MAKE_PARAMS_12(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12), MAKE_ARGS_12(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12)) #define DEF_RELAYING_METHOD(NAME, PARAMETERS, ARGUMENTS) \ - static void NAME(JNIEnv *env, jobject objectOrClass, jint parserId, PARAMETERS) \ + static void NAME(JNIEnv *env, jobject objectOrClass, jint parserId PARAMETERS) \ { \ std::map::iterator it = s_parsers.find(int(parserId)); \ if (it != s_parsers.end()) \ @@ -139,13 +143,26 @@ private: DEF_RELAYING_METHOD_4(RecordComment, jint, jint, jint, jint) DEF_RELAYING_METHOD_7(RecordError, jstring, jint, jint, jint, jint, jint, jint) + static bool GetInterrupted(JNIEnv *env, jobject objectOrClass, jint parserId) + { + std::map::iterator it = s_parsers.find(int(parserId)); + if (it != s_parsers.end()) + { + return it->second->doGetInterrupted(); + } + else + { + LOG_ERROR("parser with id " + std::to_string(parserId) + " not found"); + } + } + static int s_nextParserId; static std::map s_parsers; static std::mutex s_parsersMutex; - + bool doGetInterrupted(); void doLogInfo(jstring jInfo); @@ -180,6 +197,7 @@ private: const int m_id; FilePath m_currentFilePath; + MessageInterruptTasksCounter m_interruptCounter; }; #endif // JAVA_PARSER_H