aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Pierre Lerbscher <jp.lerbscher@loxodata.com>2020-08-13 15:38:21 +0200
committerJean-Pierre Lerbscher <jp.lerbscher@loxodata.com>2020-08-13 15:38:21 +0200
commit08a2c49554689b14d02dba12b37f2a6f6fd31bc7 (patch)
treeda447563c912b8773741ad405a863377263d052a
parent15a9504510c2d0a3ea78983890d0c5f267aa9264 (diff)
downloadplatform_external_javaparser-08a2c49554689b14d02dba12b37f2a6f6fd31bc7.tar.gz
platform_external_javaparser-08a2c49554689b14d02dba12b37f2a6f6fd31bc7.tar.bz2
platform_external_javaparser-08a2c49554689b14d02dba12b37f2a6f6fd31bc7.zip
Fix issue #2764 UnsupportedOperationException when resolving symbol inside for statement initialization
-rw-r--r--javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/ForStatementContext.java3
-rwxr-xr-xjavaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue2764Test.java59
2 files changed, 61 insertions, 1 deletions
diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/ForStatementContext.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/ForStatementContext.java
index ac94266a2..98daafccb 100644
--- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/ForStatementContext.java
+++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/contexts/ForStatementContext.java
@@ -26,6 +26,7 @@ import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.expr.AssignExpr;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.UnaryExpr;
import com.github.javaparser.ast.expr.VariableDeclarationExpr;
import com.github.javaparser.ast.nodeTypes.NodeWithStatements;
import com.github.javaparser.ast.stmt.ForStmt;
@@ -57,7 +58,7 @@ public class ForStatementContext extends AbstractJavaParserContext<ForStmt> {
return SymbolReference.solved(JavaParserSymbolDeclaration.localVar(variableDeclarator, typeSolver));
}
}
- } else if (!(expression instanceof AssignExpr || expression instanceof MethodCallExpr)) {
+ } else if (!(expression instanceof AssignExpr || expression instanceof MethodCallExpr || expression instanceof UnaryExpr)) {
throw new UnsupportedOperationException(expression.getClass().getCanonicalName());
}
}
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue2764Test.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue2764Test.java
new file mode 100755
index 000000000..c2c4c44d1
--- /dev/null
+++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue2764Test.java
@@ -0,0 +1,59 @@
+package com.github.javaparser.symbolsolver;
+
+import com.github.javaparser.JavaParser;
+import com.github.javaparser.ParseResult;
+import com.github.javaparser.ParseStart;
+import com.github.javaparser.ParserConfiguration;
+import com.github.javaparser.Providers;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.expr.NameExpr;
+import com.github.javaparser.ast.expr.UnaryExpr;
+import com.github.javaparser.ast.stmt.Statement;
+import com.github.javaparser.printer.PrettyPrinter;
+import com.github.javaparser.printer.PrettyPrinterConfiguration;
+import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration;
+import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
+import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
+
+import org.junit.jupiter.api.Test;
+
+import static com.github.javaparser.StaticJavaParser.parseStatement;
+import static com.github.javaparser.utils.Utils.EOL;
+import static com.github.javaparser.utils.Utils.normalizeEolInTextBlock;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.BeforeEach;
+
+public class Issue2764Test {
+ private JavaParser javaParser;
+
+ @BeforeEach
+ void setUp() {
+ TypeSolver typeSolver = new ReflectionTypeSolver();
+ ParserConfiguration config = new ParserConfiguration();
+ config.setSymbolResolver(new JavaSymbolSolver(typeSolver));
+ javaParser = new JavaParser(config);
+ }
+
+ @Test
+ void resolveUnaryExpr() {
+ String code =
+ "class A {" +
+ " void a() {" +
+ " int e;" +
+ " for(e++;;){}" +
+ " }" +
+ "}";
+
+ ParseResult<CompilationUnit> parseResult = javaParser.parse(ParseStart.COMPILATION_UNIT, Providers.provider(code));
+ assertTrue(parseResult.isSuccessful());
+ assertTrue(parseResult.getResult().isPresent());
+
+ CompilationUnit cu = parseResult.getResult().get();
+ NameExpr name = (NameExpr) cu.findFirst(UnaryExpr.class).get().getExpression();
+ ResolvedValueDeclaration resolve = name.resolve();
+
+ assertTrue("int".contentEquals(resolve.getType().describe()));
+ }
+}