From dcbf6cbf75cd0ed61667365fe490e682840f5d0f Mon Sep 17 00:00:00 2001 From: Nils Werner <64034005+nils-werner-sonarsource@users.noreply.github.com> Date: Mon, 24 Aug 2020 11:21:40 +0200 Subject: [PATCH] SONARPHP-1029: Return UnknownClassSymbol instead of throwing an exception (#655) * Return UnknownClassSymbol instead of throwing an exception * Use isUnknownSymbol instead of isInstanceOf --- .../src/main/java/org/sonar/php/symbols/Symbols.java | 5 +++-- .../java/org/sonar/php/symbols/ProjectSymbolTableTest.java | 5 +---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/php-frontend/src/main/java/org/sonar/php/symbols/Symbols.java b/php-frontend/src/main/java/org/sonar/php/symbols/Symbols.java index be33b2b406..3de5c8bafb 100644 --- a/php-frontend/src/main/java/org/sonar/php/symbols/Symbols.java +++ b/php-frontend/src/main/java/org/sonar/php/symbols/Symbols.java @@ -30,6 +30,8 @@ import org.sonar.plugins.php.api.tree.expression.AnonymousClassTree; import org.sonar.plugins.php.api.tree.expression.FunctionCallTree; +import static org.sonar.plugins.php.api.symbols.QualifiedName.qualifiedName; + /** * Utility class to retrieve symbols from the AST. * We can drop this class as soon as we expose an equivalent API directly on the AST interfaces. @@ -47,12 +49,11 @@ public static FunctionSymbol get(FunctionCallTree functionCallTree) { return ((FunctionCallTreeImpl) functionCallTree).symbol(); } - @Deprecated public static ClassSymbol getClass(NamespaceNameTree namespaceNameTree) { if (namespaceNameTree instanceof ClassNamespaceNameTreeImpl) { return ((ClassNamespaceNameTreeImpl) namespaceNameTree).symbol(); } - throw new IllegalStateException("No class symbol available on " + namespaceNameTree); + return new UnknownClassSymbol(qualifiedName(namespaceNameTree.qualifiedName())); } public static ClassSymbol get(AnonymousClassTree anonymousClassTree) { diff --git a/php-frontend/src/test/java/org/sonar/php/symbols/ProjectSymbolTableTest.java b/php-frontend/src/test/java/org/sonar/php/symbols/ProjectSymbolTableTest.java index d374f4c75b..0da3b4b764 100644 --- a/php-frontend/src/test/java/org/sonar/php/symbols/ProjectSymbolTableTest.java +++ b/php-frontend/src/test/java/org/sonar/php/symbols/ProjectSymbolTableTest.java @@ -42,7 +42,6 @@ import org.sonar.plugins.php.api.visitors.PhpFile; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.sonar.php.tree.TreeUtils.firstDescendant; import static org.sonar.plugins.php.api.symbols.QualifiedName.qualifiedName; @@ -124,9 +123,7 @@ public void non_class_namespace_name() { PhpFile file1 = file("file1.php", " Symbols.getClass(namespaceNameTree)) - .isInstanceOf(IllegalStateException.class); + assertThat(Symbols.getClass(namespaceNameTree).isUnknownSymbol()).isTrue(); } @Test