From 4fa7db254e516059fda8d60bbb19269d4fee00dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Fri, 1 Apr 2022 21:01:23 +0200 Subject: [PATCH] [core] Abort on semantic errors --- .../pmd/lang/ast/SemanticErrorReporter.java | 17 +++++++++++++++++ .../sourceforge/pmd/processor/PmdRunnable.java | 8 +++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/SemanticErrorReporter.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/SemanticErrorReporter.java index df76bfe1fc..2dfe1ddb36 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/SemanticErrorReporter.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/SemanticErrorReporter.java @@ -17,6 +17,18 @@ public interface SemanticErrorReporter { // TODO use resource bundle keys instead of string messages. + /** + * Report an informational message at the given location. + * + * @param location Location where the message should be reported + * @param message Message (rendered using a {@link MessageFormat}) + * @param formatArgs Format arguments + */ + default void info(Node location, String message, Object... formatArgs) { + // noop + } + + /** * Report a warning at the given location. Warnings do not abort * the analysis. @@ -87,6 +99,11 @@ public interface SemanticErrorReporter { return fullMessage; } + @Override + public void info(Node location, String message, Object... formatArgs) { + logMessage(Level.INFO, location, message, formatArgs); + } + @Override public void warning(Node location, String message, Object... args) { logMessage(Level.WARN, location, message, args); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/processor/PmdRunnable.java b/pmd-core/src/main/java/net/sourceforge/pmd/processor/PmdRunnable.java index 87df7b0eb6..4e4015adc3 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/processor/PmdRunnable.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/processor/PmdRunnable.java @@ -125,11 +125,12 @@ abstract class PmdRunnable implements Runnable { LanguageVersion languageVersion, String filename) throws FileAnalysisException { + SemanticErrorReporter reporter = SemanticErrorReporter.reportToLogger(LOGGER); ParserTask task = new ParserTask( languageVersion, filename, sourceCode, - SemanticErrorReporter.reportToLogger(LOGGER), + reporter, configuration.getClassLoader() ); @@ -143,6 +144,11 @@ abstract class PmdRunnable implements Runnable { RootNode rootNode = parse(parser, task); + if (reporter.hasError()) { + reporter.info(rootNode, "Errors occurred in file, skipping rule analysis"); + return; + } + ruleSets.apply(rootNode, listener); }