[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();
     }
-
 }