From fe961010557b44c36140fb070bdcd47cd2efb3b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Sun, 6 Jan 2019 17:23:27 +0100 Subject: [PATCH] Handle null provider --- .../pmd/lang/metrics/LanguageMetricsProvider.java | 7 +++++-- .../internal/AbstractLanguageMetricsProvider.java | 2 -- .../java/metrics/JavaMetricsProviderTest.java | 2 +- .../util/fxdesigner/NodeInfoPanelController.java | 15 +++++++++++---- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/metrics/LanguageMetricsProvider.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/metrics/LanguageMetricsProvider.java index e2d34c47f4..46edd263c2 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/metrics/LanguageMetricsProvider.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/metrics/LanguageMetricsProvider.java @@ -8,13 +8,16 @@ import java.util.List; import java.util.Map; import net.sourceforge.pmd.annotation.Experimental; +import net.sourceforge.pmd.lang.LanguageVersionHandler; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.ast.QualifiableNode; /** - * Language-independent provider for metrics. Can be used to know applicable metrics - * on a node, e.g. to build GUI applications like the designer. + * Language-specific provider for metrics. Knows about all the metrics + * defined for a language. Can be used e.g. to build GUI applications + * like the designer, in a language independent way. Accessible through + * {@link LanguageVersionHandler#getLanguageMetricsProvider()}. * * Note: this is experimental, ie unstable until 7.0.0, after which it will probably * be promoted to a real API. diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/metrics/internal/AbstractLanguageMetricsProvider.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/metrics/internal/AbstractLanguageMetricsProvider.java index 9de2ca3b88..8e3fa8dc28 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/metrics/internal/AbstractLanguageMetricsProvider.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/metrics/internal/AbstractLanguageMetricsProvider.java @@ -49,8 +49,6 @@ public abstract class AbstractLanguageMetricsProvider key, T node, MetricOptions options) { diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/metrics/JavaMetricsProviderTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/metrics/JavaMetricsProviderTest.java index 7be636b093..919253837e 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/metrics/JavaMetricsProviderTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/metrics/JavaMetricsProviderTest.java @@ -54,7 +54,7 @@ public class JavaMetricsProviderTest { @Test - public void testTheresNoMemoisation() { + public void testThereIsNoMemoisation() { LanguageMetricsProvider provider = ParserTstUtil.getLanguageVersionHandler("1.8").getLanguageMetricsProvider(); diff --git a/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/NodeInfoPanelController.java b/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/NodeInfoPanelController.java index 4270821e5e..d6a8426c46 100644 --- a/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/NodeInfoPanelController.java +++ b/pmd-ui/src/main/java/net/sourceforge/pmd/util/fxdesigner/NodeInfoPanelController.java @@ -8,7 +8,6 @@ import java.net.URL; import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.ResourceBundle; import java.util.stream.Collectors; @@ -17,7 +16,7 @@ import org.reactfx.EventStreams; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.ast.xpath.Attribute; -import net.sourceforge.pmd.lang.metrics.MetricKey; +import net.sourceforge.pmd.lang.metrics.LanguageMetricsProvider; import net.sourceforge.pmd.lang.symboltable.NameDeclaration; import net.sourceforge.pmd.util.fxdesigner.model.MetricResult; import net.sourceforge.pmd.util.fxdesigner.util.controls.ScopeHierarchyTreeCell; @@ -126,8 +125,16 @@ public class NodeInfoPanelController implements Initializable { private ObservableList evaluateAllMetrics(Node n) { - Map, Double> results = parent.getLanguageVersion().getLanguageVersionHandler().getLanguageMetricsProvider().computeAllMetricsFor(n); - List resultList = results.entrySet().stream().map(e -> new MetricResult(e.getKey(), e.getValue())).collect(Collectors.toList()); + LanguageMetricsProvider provider = parent.getLanguageVersion().getLanguageVersionHandler().getLanguageMetricsProvider(); + if (provider == null) { + return FXCollections.emptyObservableList(); + } + List resultList = + provider.computeAllMetricsFor(n) + .entrySet() + .stream() + .map(e -> new MetricResult(e.getKey(), e.getValue())) + .collect(Collectors.toList()); return FXCollections.observableArrayList(resultList); }