From 4468db24283a99f073103d84bcd66c1fc2420906 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 6 Mar 2020 10:59:02 +0100 Subject: [PATCH] [core] Call SymbolFacade without classloader by default This allows languages, that don't need a classloader while creating symbol table to just override the one method. In the test, we call always the overloaded method with class loader with made the symbol table processing not being run for tests in plsql. Fixes #2325 --- docs/pages/release_notes.md | 1 + .../lang/AbstractLanguageVersionHandler.java | 2 +- .../pmd/lang/plsql/ast/AbstractPLSQLNode.java | 5 ---- .../plsql/ast/ASTExtractExpressionTest.java | 7 ++--- .../pmd/lang/plsql/ast/TriggerTest.java | 28 +++++++++++++++++++ .../pmd/lang/plsql/ast/TriggerUnit.pls | 8 ++++++ 6 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/TriggerTest.java create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/TriggerUnit.pls diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 3bb96db641..d740d71abc 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -92,6 +92,7 @@ should give more accurate results and especially fixes the problems with the usi * java-performance * [#2275](https://github.com/pmd/pmd/issues/2275): \[java] AppendCharacterWithChar flags literals in an expression * plsql + * [#2325](https://github.com/pmd/pmd/issues/2325): \[plsql] NullPointerException while running parsing test for CREATE TRIGGER * [#2327](https://github.com/pmd/pmd/pull/2327): \[plsql] Parsing of WHERE CURRENT OF * [#2328](https://github.com/pmd/pmd/issues/2328): \[plsql] Support XMLROOT * [#2331](https://github.com/pmd/pmd/pull/2331): \[plsql] Fix in Comment statement diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractLanguageVersionHandler.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractLanguageVersionHandler.java index 0f4aa6697d..9fb7fb820f 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractLanguageVersionHandler.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractLanguageVersionHandler.java @@ -45,7 +45,7 @@ public abstract class AbstractLanguageVersionHandler implements LanguageVersionH @Override public VisitorStarter getSymbolFacade(ClassLoader classLoader) { - return VisitorStarter.DUMMY; + return getSymbolFacade(); } @Override diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java index b6578991d3..fe8b0b2750 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java @@ -143,8 +143,3 @@ public abstract class AbstractPLSQLNode extends AbstractJjtreeNode im this.scope = scope; } } - -/* - * JavaCC - OriginalChecksum=3f651517d5069f856891d89230562ac4 (do not edit this - * line) - */ diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/ASTExtractExpressionTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/ASTExtractExpressionTest.java index 84f9a3550c..99a83f30e3 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/ASTExtractExpressionTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/ASTExtractExpressionTest.java @@ -7,15 +7,14 @@ package net.sourceforge.pmd.lang.plsql.ast; import org.junit.Assert; import org.junit.Test; -import net.sourceforge.pmd.lang.plsql.PlsqlParsingHelper; +import net.sourceforge.pmd.lang.plsql.AbstractPLSQLParserTst; -public class ASTExtractExpressionTest { +public class ASTExtractExpressionTest extends AbstractPLSQLParserTst { @Test public void testXml() { - PlsqlParsingHelper parser = PlsqlParsingHelper.JUST_PARSE; - ASTInput unit = parser.parse("SELECT warehouse_name, EXTRACT(warehouse_spec, '/Warehouse/Docks', " + ASTInput unit = plsql.parse("SELECT warehouse_name, EXTRACT(warehouse_spec, '/Warehouse/Docks', " + "'xmlns:a=\"http://warehouse/1\" xmlns:b=\"http://warehouse/2\"') \"Number of Docks\" " + " FROM warehouses WHERE warehouse_spec IS NOT NULL;"); ASTExtractExpression extract = unit.getFirstDescendantOfType(ASTExtractExpression.class); diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/TriggerTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/TriggerTest.java new file mode 100644 index 0000000000..073d87274a --- /dev/null +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/TriggerTest.java @@ -0,0 +1,28 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + + +package net.sourceforge.pmd.lang.plsql.ast; + +import org.junit.Assert; +import org.junit.Test; + +import net.sourceforge.pmd.lang.plsql.AbstractPLSQLParserTst; + + +public class TriggerTest extends AbstractPLSQLParserTst { + + /** + * Parsing a trigger should not result in a NPE. + * + * @see #2325 [plsql] NullPointerException while running parsing test for CREATE TRIGGER + */ + @Test + public void parseCreateTrigger() { + ASTInput input = plsql.parseResource("TriggerUnit.pls"); + PLSQLNode trigger = input.getChild(0); + Assert.assertEquals(ASTTriggerUnit.class, trigger.getClass()); + Assert.assertNotNull(trigger.getScope()); + } +} diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/TriggerUnit.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/TriggerUnit.pls new file mode 100644 index 0000000000..fe15216d28 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/TriggerUnit.pls @@ -0,0 +1,8 @@ +create or replace trigger test_trigger +instead of update +on test_table +for each row +begin + test.clr; +end; +/