[MPMD-99] calculate PMD.VERSION by runtime reflection to avoid compiler inlining the constant value
base on a patch submitted by: Henri Tremblay
git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@939832 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java b/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java
index 6fb4663..b2eb6ee 100644
--- a/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java
+++ b/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java
@@ -32,6 +32,8 @@
import java.util.Map;
import java.util.TreeMap;
+import net.sourceforge.pmd.PMD;
+
import org.apache.maven.doxia.siterenderer.Renderer;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.project.MavenProject;
@@ -447,4 +449,20 @@
{
return ( outputEncoding != null ) ? outputEncoding : ReaderFactory.UTF_8;
}
+
+ static String getPmdVersion()
+ {
+ try
+ {
+ return (String) PMD.class.getField( "VERSION" ).get( null );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new RuntimeException( "PMD VERSION field not accessible", e );
+ }
+ catch ( NoSuchFieldException e )
+ {
+ throw new RuntimeException( "PMD VERSION field not found", e );
+ }
+ }
}
diff --git a/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java b/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java
index 28d445c..02df791 100644
--- a/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java
+++ b/src/main/java/org/apache/maven/plugin/pmd/CpdReportGenerator.java
@@ -24,7 +24,6 @@
import java.util.Map;
import java.util.ResourceBundle;
-import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.cpd.Match;
import org.apache.maven.doxia.sink.Sink;
@@ -88,7 +87,7 @@
sink.link( "http://pmd.sourceforge.net/cpd.html" );
sink.text( "CPD" );
sink.link_();
- sink.text( " " + PMD.VERSION + "." );
+ sink.text( " " + AbstractPmdReport.getPmdVersion() + "." );
sink.paragraph_();
sink.section1_();
diff --git a/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java b/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java
index efe4562..5c0fa1d 100644
--- a/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java
+++ b/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java
@@ -28,7 +28,6 @@
import java.util.ResourceBundle;
import net.sourceforge.pmd.IRuleViolation;
-import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.ReportListener;
import net.sourceforge.pmd.stat.Metric;
@@ -189,7 +188,7 @@
sink.link( "http://pmd.sourceforge.net/" );
sink.text( "PMD" );
sink.link_();
- sink.text( " " + PMD.VERSION + "." );
+ sink.text( " " + AbstractPmdReport.getPmdVersion() + "." );
sink.paragraph_();
sink.section1_();
@@ -305,5 +304,4 @@
sink.close();
}
-
}