You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2014/08/27 00:43:50 UTC

[19/51] [partial] Refactored the PMD Maven build - Adjusted the directory structure - Fixed a lot of compile problems - Fixed the maven setup - Made PMD build with Flexmojos 7.1.0 and Apache Flex 4.13.0 - Fixed a few UnitTests

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/.pmd
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/.pmd b/FlexPMD/flex-pmd-java/flex-pmd-metrics/.pmd
new file mode 100644
index 0000000..b5adf0f
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/.pmd
@@ -0,0 +1,975 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<pmd>
+    <useProjectRuleSet>false</useProjectRuleSet>
+    <ruleSetFile>.ruleset</ruleSetFile>
+    <rules>
+        <rule>
+            <name>LooseCoupling</name>
+            <ruleset>Type Resolution Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CloneMethodMustImplementCloneable</name>
+            <ruleset>Type Resolution Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedImports</name>
+            <ruleset>Type Resolution Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SignatureDeclareThrowsException</name>
+            <ruleset>Type Resolution Rules</ruleset>
+        </rule>
+        <rule>
+            <name>IfStmtsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
+        </rule>
+        <rule>
+            <name>WhileLoopsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
+        </rule>
+        <rule>
+            <name>IfElseStmtsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ForLoopsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseSingleton</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyBooleanReturns</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyBooleanExpressions</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SwitchStmtsShouldHaveDefault</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidDeeplyNestedIfStmts</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidReassigningParameters</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SwitchDensity</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ConstructorCallsOverridableMethod</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AccessorClassGeneration</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalFieldCouldBeStatic</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CloseResource</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NonStaticInitializer</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DefaultLabelNotLastInSwitchStmt</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NonCaseLabelInSwitchStatement</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>OptimizableToArrayCall</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BadComparison</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EqualsNull</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ConfusingTernary</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InstantiationToGetClass</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>IdempotentOperations</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimpleDateFormatNeedsLocale</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ImmutableField</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseLocaleWithCaseConversions</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidProtectedFieldInFinalClass</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AssignmentToNonFinalStatic</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MissingStaticMethodInNonInstantiatableClass</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidSynchronizedAtMethodLevel</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MissingBreakInSwitch</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseNotifyAllInsteadOfNotify</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidInstanceofChecksInCatchClause</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AbstractClassWithoutAbstractMethod</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyConditional</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CompareObjectsWithEquals</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>PositionLiteralsFirstInComparisons</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryLocalBeforeReturn</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NonThreadSafeSingleton</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UncommentedEmptyMethod</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UncommentedEmptyConstructor</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidConstantsInterface</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnsynchronizedStaticDateFormatter</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>PreserveStackTrace</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseCollectionIsEmpty</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SingularField</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReturnEmptyArrayRatherThanNull</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AbstractClassWithoutAnyMethod</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TooFewBranchesForASwitchStatement</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidCatchingThrowable</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SignatureDeclareThrowsException</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExceptionAsFlowControl</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidCatchingNPE</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidThrowingRawExceptionTypes</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidThrowingNullPointerException</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidRethrowingException</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotExtendJavaLangError</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotThrowExceptionInFinally</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidThrowingNewInstanceOfSameException</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedPrivateField</name>
+            <ruleset>Unused Code Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedLocalVariable</name>
+            <ruleset>Unused Code Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedPrivateMethod</name>
+            <ruleset>Unused Code Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedFormalParameter</name>
+            <ruleset>Unused Code Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MoreThanOneLogger</name>
+            <ruleset>Java Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LoggerIsNotStaticFinal</name>
+            <ruleset>Java Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SystemPrintln</name>
+            <ruleset>Java Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidPrintStackTrace</name>
+            <ruleset>Java Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidDuplicateLiterals</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StringInstantiation</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StringToString</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InefficientStringBuffering</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryCaseChange</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseStringBufferLength</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AppendCharacterWithChar</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ConsecutiveLiteralAppends</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseIndexOfChar</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InefficientEmptyStringCheck</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InsufficientStringBufferDeclaration</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UselessStringValueOf</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StringBufferInstantiationWithChar</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseEqualsToCompareStrings</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidStringBufferField</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReplaceVectorWithList</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReplaceHashtableWithMap</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReplaceEnumerationWithIterator</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidEnumAsIdentifier</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidAssertAsIdentifier</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>IntegerInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ByteInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ShortInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LongInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnit4TestShouldUseBeforeAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnit4TestShouldUseAfterAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnit4TestShouldUseTestAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitUseExpected</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseProperClassLoader</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MDBAndSessionBeanNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>RemoteSessionInterfaceNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LocalInterfaceSessionNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LocalHomeNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>RemoteInterfaceNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotCallSystemExit</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StaticEJBFieldShouldBeFinal</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotUseThreads</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LocalVariableCouldBeFinal</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MethodArgumentCouldBeFinal</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidInstantiatingObjectsInLoops</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseArrayListInsteadOfVector</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyStartsWith</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseStringBufferForStringAppends</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseArraysAsList</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidArrayLoops</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryWrapperObjectCreation</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AddEmptyString</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyCatchBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyIfStmt</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyWhileStmt</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyTryBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyFinallyBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptySwitchStatements</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JumbledIncrementer</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ForLoopShouldBeWhileLoop</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryConversionTemporary</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>OverrideBothEqualsAndHashcode</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoubleCheckedLocking</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReturnFromFinallyBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptySynchronizedBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryReturn</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyStaticInitializer</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnconditionalIfStatement</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyStatementNotInLoop</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BooleanInstantiation</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryFinalModifier</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CollapsibleIfStatements</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UselessOverridingMethod</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ClassCastExceptionWithToArray</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UselessOperationOnImmutable</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MisplacedNullCheck</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedNullCheckInEquals</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidThreadGroup</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BrokenNullCheck</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BigIntegerInstantiation</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingOctalValues</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingHardCodedIP</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CheckResultSet</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidMultipleUnaryOperators</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyInitializer</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MethodReturnsInternalArray</name>
+            <ruleset>Security Code Guidelines</ruleset>
+        </rule>
+        <rule>
+            <name>ArrayIsStoredDirectly</name>
+            <ruleset>Security Code Guidelines</ruleset>
+        </rule>
+        <rule>
+            <name>CouplingBetweenObjects</name>
+            <ruleset>Coupling Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessiveImports</name>
+            <ruleset>Coupling Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LooseCoupling</name>
+            <ruleset>Coupling Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DuplicateImports</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DontImportJavaLang</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedImports</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ImportFromSamePackage</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TooManyStaticImports</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitStaticSuite</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitSpelling</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitAssertionsShouldIncludeMessage</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitTestsShouldIncludeAssert</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TestClassWithoutTestCases</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryBooleanAssertion</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseAssertEqualsInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseAssertSameInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseAssertNullInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyBooleanAssertion</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryConstructor</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NullAssignment</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>OnlyOneReturn</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedModifier</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AssignmentInOperand</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AtLeastOneConstructor</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DontImportSun</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SuspiciousOctalEscape</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CallSuperInConstructor</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryParentheses</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DefaultPackage</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BooleanInversion</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DataflowAnomalyAnalysis</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidFinalLocalVariable</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingShortType</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingVolatile</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingNativeCode</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidAccessibilityAlteration</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotCallGarbageCollectionExplicitly</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ShortVariable</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LongVariable</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ShortMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>VariableNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MethodNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ClassNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AbstractNaming</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidDollarSigns</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MethodWithSameNameAsEnclosingClass</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SuspiciousHashcodeMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SuspiciousConstantFieldName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SuspiciousEqualsMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidFieldNameMatchingTypeName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidFieldNameMatchingMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NoPackage</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>PackageCase</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MisleadingVariableName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BooleanGetMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NPathComplexity</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessiveMethodLength</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessiveParameterList</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessiveClassLength</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CyclomaticComplexity</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessivePublicCount</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TooManyFields</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NcssMethodCount</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NcssTypeCount</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NcssConstructorCount</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TooManyMethods</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyFinalizer</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalizeOnlyCallsSuperFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalizeOverloaded</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalizeDoesNotCallSuperFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalizeShouldBeProtected</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidCallingFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseCorrectExceptionLogging</name>
+            <ruleset>Jakarta Commons Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ProperLogger</name>
+            <ruleset>Jakarta Commons Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BeanMembersShouldSerialize</name>
+            <ruleset>JavaBean Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MissingSerialVersionUID</name>
+            <ruleset>JavaBean Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ProperCloneImplementation</name>
+            <ruleset>Clone Implementation Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CloneThrowsCloneNotSupportedException</name>
+            <ruleset>Clone Implementation Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CloneMethodMustImplementCloneable</name>
+            <ruleset>Clone Implementation Rules</ruleset>
+        </rule>
+    </rules>
+    <includeDerivedFiles>false</includeDerivedFiles>
+    <violationsAsErrors>true</violationsAsErrors>
+</pmd>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/pom.xml b/FlexPMD/flex-pmd-java/flex-pmd-metrics/pom.xml
new file mode 100644
index 0000000..1998f76
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/pom.xml
@@ -0,0 +1,100 @@
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.flex.pmd</groupId>
+        <artifactId>flex-pmd-java</artifactId>
+        <version>1.3-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>flex-pmd-metrics</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Adobe Flex Metrics</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>as3-plugin-utils</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>flex-pmd-files</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>flex-pmd-ruleset-api</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>dom4j</groupId>
+            <artifactId>dom4j</artifactId>
+            <version>${dom4j.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.parent.groupId}</groupId>
+            <artifactId>flex-pmd-test-resources</artifactId>
+            <version>${project.parent.version}</version>
+            <classifier>resources</classifier>
+            <type>zip</type>
+            <scope>provided</scope>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+
+        <testResources>
+            <testResource>
+                <directory>${project.build.directory}/test/generated-resources</directory>
+            </testResource>
+        </testResources>
+
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>unpack-test-resources</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <includeGroupIds>${project.groupId}</includeGroupIds>
+                            <includes>**/*.as,**/*.mxml</includes>
+                            <outputDirectory>${project.build.directory}/test/generated-resources</outputDirectory>
+                            <excludeTransitive>true</excludeTransitive>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AbstractNamedMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AbstractNamedMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AbstractNamedMetrics.java
new file mode 100644
index 0000000..da9e4b7
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AbstractNamedMetrics.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+public abstract class AbstractNamedMetrics extends AbstractPackagedMetrics
+{
+   private final String name;
+
+   protected AbstractNamedMetrics( final int nonCommentStatements,
+                                   final String nameToBeSet,
+                                   final String packageName,
+                                   final int ccn,
+                                   final int asDocs,
+                                   final int multiLineCommentsToBeSet )
+   {
+      super( nonCommentStatements, packageName, ccn, asDocs, multiLineCommentsToBeSet );
+      name = nameToBeSet;
+   }
+
+   public String getName()
+   {
+      return name;
+   }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AbstractPackagedMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AbstractPackagedMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AbstractPackagedMetrics.java
new file mode 100644
index 0000000..59a707d
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AbstractPackagedMetrics.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import java.text.MessageFormat;
+
+public abstract class AbstractPackagedMetrics implements IMetrics
+{
+   private final int    asDocs;
+   private final int    ccn;
+   private final int    multiLineComments;
+   private final int    nonCommentStatements;
+   private final String packageName;
+
+   protected AbstractPackagedMetrics( final int nonCommentStatementsToBeSet,
+                                      final String packageNameToBeSet,
+                                      final int ccnToBeSet,
+                                      final int asDocsToBeSet,
+                                      final int multiLineCommentsToBeSet )
+   {
+      super();
+      nonCommentStatements = nonCommentStatementsToBeSet;
+      packageName = packageNameToBeSet;
+      ccn = ccnToBeSet;
+      asDocs = asDocsToBeSet;
+      multiLineComments = multiLineCommentsToBeSet;
+   }
+
+   public int getAsDocs()
+   {
+      return asDocs;
+   }
+
+   public abstract String getFullName();
+
+   public abstract String getMetricsName();
+
+   public int getMultiLineComments()
+   {
+      return multiLineComments;
+   }
+
+   public int getNonCommentStatements()
+   {
+      return getNcss()
+            + nonCommentStatements;
+   }
+
+   public String getPackageName()
+   {
+      return packageName;
+   }
+
+   public String toXmlString()
+   {
+      return new StringBuffer().append( MessageFormat.format( "<{0}><name>{1}</name><ccn>{2}</ccn><ncss>{3}</ncss>"
+                                                                    + "<javadocs>{4}</javadocs>"
+                                                                    + "<javadoc_lines>{4}</javadoc_lines>"
+                                                                    + "<multi_comment_lines>{5}</multi_comment_lines>"
+                                                                    + "<single_comment_lines>0</single_comment_lines>"
+                                                                    + "{6}</{7}>",
+                                                              getMetricsName(),
+                                                              getFullName().equals( "" ) ? "."
+                                                                                        : getFullName(),
+                                                              String.valueOf( ccn ),
+                                                              String.valueOf( getNonCommentStatements() ),
+                                                              String.valueOf( asDocs ),
+                                                              String.valueOf( multiLineComments ),
+                                                              getContreteXml(),
+                                                              getMetricsName() ) )
+                               .toString();
+   }
+
+   protected abstract int getNcss();
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageClassMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageClassMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageClassMetrics.java
new file mode 100644
index 0000000..b0f0daf
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageClassMetrics.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import java.util.List;
+
+public final class AverageClassMetrics extends AverageMetricsBase
+{
+   public static AverageClassMetrics create( final List< ClassMetrics > classMetrics,
+                                             final TotalPackageMetrics totalPackageMetrics )
+   {
+      int functions = 0;
+
+      for ( final ClassMetrics metrics : classMetrics )
+      {
+         functions += metrics.getFunctions();
+      }
+      return new AverageClassMetrics( totalPackageMetrics.getTotalStatements(),
+                                      functions,
+                                      totalPackageMetrics.getTotalAsDocs(),
+                                      totalPackageMetrics.getTotalMultiLineComment(),
+                                      classMetrics.size() );
+   }
+
+   private final double averageFunctions;
+
+   private AverageClassMetrics( final double nonCommentStatements,
+                                final double functions,
+                                final double asDocs,
+                                final double multipleComments,
+                                final double totalClassNumber )
+   {
+      super( totalClassNumber, asDocs, nonCommentStatements, multipleComments );
+      averageFunctions = totalClassNumber > 0 ? functions
+                                                   / totalClassNumber
+                                             : 0;
+   }
+
+   public double getAverageFunctions()
+   {
+      return averageFunctions;
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageFunctionMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageFunctionMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageFunctionMetrics.java
new file mode 100644
index 0000000..5d3fe5d
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageFunctionMetrics.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import java.util.List;
+
+public final class AverageFunctionMetrics extends AverageMetricsBase
+{
+   public static AverageFunctionMetrics create( final List< FunctionMetrics > functionMetrics,
+                                                final TotalPackageMetrics totalPackageMetrics )
+   {
+      return new AverageFunctionMetrics( totalPackageMetrics.getTotalStatements(),
+                                         totalPackageMetrics.getTotalAsDocs(),
+                                         totalPackageMetrics.getTotalMultiLineComment(),
+                                         functionMetrics.size() );
+   }
+
+   private AverageFunctionMetrics( final double nonCommentStatements,
+                                   final double asDocs,
+                                   final double multipleComments,
+                                   final double totalFunctions )
+   {
+      super( totalFunctions, asDocs, nonCommentStatements, multipleComments );
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageMetricsBase.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageMetricsBase.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageMetricsBase.java
new file mode 100644
index 0000000..13b7fc9
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/AverageMetricsBase.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+public class AverageMetricsBase
+{
+   private final double averageDocs;
+   private final double averageMultipleComments;
+   private final double averageStatements;
+
+   protected AverageMetricsBase( final double total,
+                                 final double asDocs,
+                                 final double totalStatements,
+                                 final double mutlipleComments )
+   {
+      super();
+      this.averageStatements = totalStatements
+            / total;
+      this.averageDocs = asDocs
+            / total;
+      this.averageMultipleComments = mutlipleComments
+            / total;
+   }
+
+   public double getAverageDocs()
+   {
+      return averageDocs;
+   }
+
+   public double getAverageMultipleComments()
+   {
+      return averageMultipleComments;
+   }
+
+   public double getAverageStatements()
+   {
+      return averageStatements;
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/ClassMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/ClassMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/ClassMetrics.java
new file mode 100644
index 0000000..639579a
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/ClassMetrics.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import java.io.File;
+
+import com.adobe.ac.pmd.files.IFlexFile;
+import com.adobe.ac.pmd.nodes.IClass;
+
+public final class ClassMetrics extends AbstractNamedMetrics
+{
+   public static ClassMetrics create( final String packageFullName,
+                                      final File fileInPackage,
+                                      final InternalFunctionMetrics functionMetrics,
+                                      final IClass classNode,
+                                      final IFlexFile file,
+                                      final double mxmlFactor )
+   {
+      final int average = classNode == null ? 0
+                                           : ( int ) Math.round( classNode.getAverageCyclomaticComplexity() );
+      final int asDocs = ( classNode == null
+            || classNode.getAsDoc() == null ? 0
+                                           : MetricUtils.computeNbOfLines( classNode.getAsDoc()
+                                                                                    .getStringValue() ) )
+            + ( functionMetrics == null ? 0
+                                       : functionMetrics.getAsDocsInClass() );
+      final int multiLineComments = ( classNode == null ? 0
+                                                       : MetricUtils.computeMultiLineComments( classNode ) )
+            + ( functionMetrics == null ? 0
+                                       : functionMetrics.getMultipleLineCommentInClass() );
+      final int nonCommentStatements = computeStatements( functionMetrics,
+                                                          file,
+                                                          mxmlFactor );
+      return new ClassMetrics( nonCommentStatements, // NOPMD
+                               classNode == null ? 0
+                                                : classNode.getFunctions().size(),
+                               fileInPackage.getName().replace( ".as",
+                                                                "" ).replace( ".mxml",
+                                                                              "" ),
+                               packageFullName,
+                               average,
+                               asDocs,
+                               multiLineComments,
+                               classNode );
+   }
+
+   private static int computeStatements( final InternalFunctionMetrics functionMetrics,
+                                         final IFlexFile file,
+                                         final double mxmlFactor )
+   {
+      int stts = functionMetrics == null ? 0
+                                        : functionMetrics.getNcssInClass();
+      if ( file.isMxml() )
+      {
+         stts += file.getLinesNb()
+               * mxmlFactor;
+      }
+      return stts;
+   }
+
+   private final IClass classNode;
+   private final int    functions;
+
+   private ClassMetrics( final int nonCommentStatements,
+                         final int functionsToBeSet,
+                         final String name,
+                         final String packageName,
+                         final int ccn,
+                         final int asDocs,
+                         final int multiLineCommentsToBeSet,
+                         final IClass classNodeToBeSet )
+   {
+      super( nonCommentStatements, name, packageName, ccn, asDocs, multiLineCommentsToBeSet );
+
+      functions = functionsToBeSet;
+      this.classNode = classNodeToBeSet;
+   }
+
+   public String getContreteXml()
+   {
+      return "<functions>"
+            + functions + "</functions>";
+   }
+
+   @Override
+   public String getFullName()
+   {
+      return getPackageName().compareTo( "" ) == 0 ? getName()
+                                                  : getPackageName()
+                                                        + "." + getName();
+   }
+
+   public int getFunctions()
+   {
+      return functions;
+   }
+
+   @Override
+   public String getMetricsName()
+   {
+      return "object";
+   }
+
+   @Override
+   protected int getNcss()
+   {
+      if ( classNode == null )
+      {
+         return 1;
+      }
+      return 1
+            + classNode.getAttributes().size() + classNode.getConstants().size() + functions;
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/FunctionMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/FunctionMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/FunctionMetrics.java
new file mode 100644
index 0000000..4a4cad9
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/FunctionMetrics.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import com.adobe.ac.pmd.nodes.IClass;
+import com.adobe.ac.pmd.nodes.IFunction;
+
+public final class FunctionMetrics extends AbstractNamedMetrics
+{
+   static FunctionMetrics create( final String packageFullName,
+                                  final IClass classNode,
+                                  final IFunction function,
+                                  final int asDocs,
+                                  final int multipleDoc )
+   {
+      return new FunctionMetrics( function.getStatementNbInBody(), // NOPMD
+                                  function.getName(),
+                                  packageFullName.compareTo( "" ) == 0 ? classNode.getName()
+                                                                      : packageFullName
+                                                                            + "." + classNode.getName(),
+                                  function.getCyclomaticComplexity(),
+                                  asDocs,
+                                  multipleDoc );
+   }
+
+   private FunctionMetrics( final int nonCommentStatements,
+                            final String name,
+                            final String packageName,
+                            final int ccn,
+                            final int asDocs,
+                            final int multiLineCommentsToBeSet )
+   {
+      super( nonCommentStatements, name, packageName, ccn, asDocs, multiLineCommentsToBeSet );
+   }
+
+   public String getContreteXml()
+   {
+      return "";
+   }
+
+   @Override
+   public String getFullName()
+   {
+      return getPackageName().compareTo( "" ) == 0 ? getName()
+                                                  : getPackageName()
+                                                        + "::" + getName();
+   }
+
+   @Override
+   public String getMetricsName()
+   {
+      return "function";
+   }
+
+   @Override
+   protected int getNcss()
+   {
+      return 1;
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/IMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/IMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/IMetrics.java
new file mode 100644
index 0000000..7c7f814
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/IMetrics.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+public interface IMetrics
+{
+   String getContreteXml();
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/InternalFunctionMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/InternalFunctionMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/InternalFunctionMetrics.java
new file mode 100644
index 0000000..974837d
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/InternalFunctionMetrics.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import com.adobe.ac.pmd.nodes.IAttribute;
+import com.adobe.ac.pmd.nodes.IClass;
+import com.adobe.ac.pmd.nodes.IFunction;
+
+public final class InternalFunctionMetrics
+{
+   public static InternalFunctionMetrics create( final ProjectMetrics metrics,
+                                                 final String packageFullName,
+                                                 final IClass classNode )
+   {
+      int ncssInClass = 0;
+      int asDocsInClass = 0;
+      int multipleLineCommentInClass = 0;
+
+      for ( final IFunction function : classNode.getFunctions() )
+      {
+         final int multipleDoc = MetricUtils.computeMultiLineComments( function );
+         final int asDocs = MetricUtils.computeAsDocs( function );
+
+         ncssInClass += function.getStatementNbInBody();
+         multipleLineCommentInClass += multipleDoc;
+
+         asDocsInClass += asDocs;
+
+         metrics.getFunctionMetrics().add( FunctionMetrics.create( packageFullName,
+                                                                   classNode,
+                                                                   function,
+                                                                   asDocs,
+                                                                   multipleDoc ) );
+      }
+
+      for ( final IAttribute attribute : classNode.getAttributes() )
+      {
+         asDocsInClass += MetricUtils.computeAsDocs( attribute );
+      }
+
+      return new InternalFunctionMetrics( ncssInClass, asDocsInClass, multipleLineCommentInClass );
+   }
+
+   private final int asDocsInClass;
+   private final int multipleLineCommentInClass;
+   private final int ncssInClass;
+
+   private InternalFunctionMetrics( final int ncssInClassToBeSet,
+                                    final int asDocsInClassToBeSet,
+                                    final int multipleLineCommentInClassToBeSet )
+   {
+      ncssInClass = ncssInClassToBeSet;
+      asDocsInClass = asDocsInClassToBeSet;
+      multipleLineCommentInClass = multipleLineCommentInClassToBeSet;
+   }
+
+   public int getAsDocsInClass()
+   {
+      return asDocsInClass;
+   }
+
+   public int getMultipleLineCommentInClass()
+   {
+      return multipleLineCommentInClass;
+   }
+
+   public int getNcssInClass()
+   {
+      return ncssInClass;
+   }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/MetricUtils.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/MetricUtils.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/MetricUtils.java
new file mode 100644
index 0000000..8dc8fe2
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/MetricUtils.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import java.io.File;
+
+import com.adobe.ac.pmd.nodes.IAsDocHolder;
+import com.adobe.ac.pmd.nodes.ICommentHolder;
+import com.adobe.ac.pmd.parser.IParserNode;
+
+public final class MetricUtils
+{
+   public static int computeAsDocs( final IAsDocHolder attribute )
+   {
+      return attribute.getAsDoc() == null ? 0
+                                         : computeNbOfLines( attribute.getAsDoc().getStringValue() );
+   }
+
+   public static int computeMultiLineComments( final ICommentHolder commentHolder )
+   {
+      int lines = 0;
+
+      for ( final IParserNode comment : commentHolder.getMultiLinesComment() )
+      {
+         lines += comment.getStringValue() == null ? 0
+                                                  : MetricUtils.computeNbOfLines( comment.getStringValue() );
+      }
+      return lines;
+   }
+
+   public static int computeNbOfLines( final String lines )
+   {
+      return lines.split( "\\n" ).length;
+   }
+
+   public static String getQualifiedName( final File sourceDirectory,
+                                          final File file )
+   {
+      final String qualifiedName = file.getAbsolutePath().replace( sourceDirectory.getAbsolutePath(),
+                                                                   "" ).replace( "/",
+                                                                                 "." ).replace( "\\",
+                                                                                                "." ).trim();
+
+      if ( qualifiedName.length() > 0
+            && qualifiedName.charAt( 0 ) == '.' )
+      {
+         return qualifiedName.substring( 1 );
+      }
+
+      return qualifiedName;
+   }
+
+   private MetricUtils()
+   {
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/PackageMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/PackageMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/PackageMetrics.java
new file mode 100644
index 0000000..1757c1f
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/PackageMetrics.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.Collection;
+
+public final class PackageMetrics extends AbstractPackagedMetrics
+{
+   public static PackageMetrics create( final Collection< File > classesInPackage,
+                                        final String packageFullName,
+                                        final int functionsInPackage,
+                                        final int ncssInPackage,
+                                        final int asDocsInPackage,
+                                        final int multipleLineCommentInPackage,
+                                        final int imports )
+   {
+      return new PackageMetrics( ncssInPackage,// NOPMD
+                                 functionsInPackage,
+                                 classesInPackage.size(),
+                                 packageFullName,
+                                 asDocsInPackage,
+                                 multipleLineCommentInPackage,
+                                 imports );
+   }
+
+   private final int classes;
+   private final int functions;
+   private final int imports;
+
+   private PackageMetrics( final int nonCommentStatements,
+                           final int functionsToBeSet,
+                           final int classesToBeSet,
+                           final String packageName,
+                           final int asDocs,
+                           final int multiLineComments,
+                           final int importsToBeSet )
+   {
+      super( nonCommentStatements, packageName, 0, asDocs, multiLineComments );
+      functions = functionsToBeSet;
+      classes = classesToBeSet;
+      imports = importsToBeSet;
+   }
+
+   public int getClasses()
+   {
+      return classes;
+   }
+
+   public String getContreteXml()
+   {
+      return new StringBuffer().append( MessageFormat.format( "<functions>{0}</functions>"
+                                                                    + "<classes>{1}</classes>",
+                                                              String.valueOf( functions ),
+                                                              String.valueOf( classes ) ) ).toString();
+   }
+
+   @Override
+   public String getFullName()
+   {
+      return getPackageName();
+   }
+
+   public int getFunctions()
+   {
+      return functions;
+   }
+
+   @Override
+   public String getMetricsName()
+   {
+      return "package";
+   }
+
+   @Override
+   protected int getNcss()
+   {
+      return imports + 1;
+   }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/ProjectMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/ProjectMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/ProjectMetrics.java
new file mode 100644
index 0000000..800587d
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/ProjectMetrics.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+public final class ProjectMetrics
+{
+   private AverageFunctionMetrics        averageFunctions;
+   private AverageClassMetrics           averageObjects;
+   private final List< ClassMetrics >    classMetrics;
+   private final String                  date;
+   private final List< FunctionMetrics > functionMetrics;
+   private final List< PackageMetrics >  packageMetrics;
+   private final String                  time;
+   private TotalPackageMetrics           totalPackages;
+
+   public ProjectMetrics()
+   {
+      super();
+
+      final Date now = new Date();
+
+      date = new SimpleDateFormat( "yyyy-M-d", Locale.US ).format( now );
+      time = new SimpleDateFormat( "k:m:s", Locale.US ).format( now );
+      classMetrics = new ArrayList< ClassMetrics >();
+      functionMetrics = new ArrayList< FunctionMetrics >();
+      packageMetrics = new ArrayList< PackageMetrics >();
+   }
+
+   public AverageFunctionMetrics getAverageFunctions()
+   {
+      return averageFunctions;
+   }
+
+   public AverageClassMetrics getAverageObjects()
+   {
+      return averageObjects;
+   }
+
+   public List< ClassMetrics > getClasses()
+   {
+      return classMetrics;
+   }
+
+   public List< ClassMetrics > getClassMetrics()
+   {
+      return classMetrics;
+   }
+
+   public String getDate()
+   {
+      return date;
+   }
+
+   public List< FunctionMetrics > getFunctionMetrics()
+   {
+      return functionMetrics;
+   }
+
+   public List< FunctionMetrics > getFunctions()
+   {
+      return functionMetrics;
+   }
+
+   public List< PackageMetrics > getPackageMetrics()
+   {
+      return packageMetrics;
+   }
+
+   public List< PackageMetrics > getPackages()
+   {
+      return packageMetrics;
+   }
+
+   public String getTime()
+   {
+      return time;
+   }
+
+   public TotalPackageMetrics getTotalPackages()
+   {
+      return totalPackages;
+   }
+
+   public void setAverageFunctions( final AverageFunctionMetrics averageFunctionsToBeSet )
+   {
+      averageFunctions = averageFunctionsToBeSet;
+   }
+
+   public void setAverageObjects( final AverageClassMetrics averageObjectsToBeSet )
+   {
+      averageObjects = averageObjectsToBeSet;
+   }
+
+   public void setTotalPackages( final TotalPackageMetrics totalPackagesToBeSet )
+   {
+      totalPackages = totalPackagesToBeSet;
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/e43b7a87/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/TotalPackageMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/TotalPackageMetrics.java b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/TotalPackageMetrics.java
new file mode 100644
index 0000000..19630a9
--- /dev/null
+++ b/FlexPMD/flex-pmd-java/flex-pmd-metrics/src/main/java/com/adobe/ac/pmd/metrics/TotalPackageMetrics.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.adobe.ac.pmd.metrics;
+
+import java.text.MessageFormat;
+import java.util.List;
+
+public final class TotalPackageMetrics implements IMetrics
+{
+   public static TotalPackageMetrics create( final List< PackageMetrics > packageMetrics )
+   {
+      int nonCommentStatement = 0;
+      int functions = 0;
+      int classes = 0;
+      int asDocs = 0;
+      int multipleLineComments = 0;
+
+      for ( final PackageMetrics metrics : packageMetrics )
+      {
+         nonCommentStatement += metrics.getNonCommentStatements();
+         functions += metrics.getFunctions();
+         classes += metrics.getClasses();
+         asDocs += metrics.getAsDocs();
+         multipleLineComments += metrics.getMultiLineComments();
+      }
+      return new TotalPackageMetrics( nonCommentStatement, functions, classes, asDocs, multipleLineComments );
+   }
+
+   private final int totalAsDocs;
+   private final int totalClasses;
+   private final int totalFunctions;
+   private final int totalMultiLineComment;
+   private final int totalStatements;
+
+   private TotalPackageMetrics( final int totalStatementsToBeSet,
+                                final int totalFunctionsToBeSet,
+                                final int totalClassesToBeSet,
+                                final int totalAsDocsToBeSet,
+                                final int totalMultiLineCommentToBeSet )
+   {
+      super();
+
+      totalStatements = totalStatementsToBeSet;
+      totalFunctions = totalFunctionsToBeSet;
+      totalClasses = totalClassesToBeSet;
+      totalAsDocs = totalAsDocsToBeSet;
+      totalMultiLineComment = totalMultiLineCommentToBeSet;
+   }
+
+   public String getContreteXml()
+   {
+      return new StringBuffer().append( MessageFormat.format( "<total>"
+                                                                    + "<classes>{0}</classes>"
+                                                                    + "<functions>{1}</functions>"
+                                                                    + "<ncss>{2}</ncss>"
+                                                                    + "<javadocs>{3}</javadocs>"
+                                                                    + "<javadoc_lines>{3}</javadoc_lines>"
+                                                                    + "<single_comment_lines>0</single_comment_lines>"
+                                                                    + "<multi_comment_lines>{4}</multi_comment_lines>"
+                                                                    + "</total>",
+                                                              String.valueOf( totalClasses ),
+                                                              String.valueOf( totalFunctions ),
+                                                              String.valueOf( totalStatements ),
+                                                              String.valueOf( totalAsDocs ),
+                                                              String.valueOf( totalMultiLineComment ) ) )
+                               .toString();
+   }
+
+   public int getTotalAsDocs()
+   {
+      return totalAsDocs;
+   }
+
+   public int getTotalClasses()
+   {
+      return totalClasses;
+   }
+
+   public int getTotalFunctions()
+   {
+      return totalFunctions;
+   }
+
+   public int getTotalMultiLineComment()
+   {
+      return totalMultiLineComment;
+   }
+
+   public int getTotalStatements()
+   {
+      return totalStatements;
+   }
+}