blob: 605edec368a5d7ec1c7f89e3020ec6fc3443e840 [file] [log] [blame]
<?xml version="1.0"?>
<!--
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.
-->
<ruleset name="Maintanability Rules"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>
The Maintanability ruleset contains a collection of good practices around Maintanability.
</description>
<rule since="1.1" class="org.apache.flex.pmd.rules.maintanability.OnlyOneReturnRule" message="A method should have only one exit point, and that should be the last statement in the method">
<priority>3</priority>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.AlertShowRule" message="Do not call Alert.show directly">
<description>You should not Alert.show() directly. If an error occurred in the system, you should probably use an ErrorManager to have a consistent way to manage those errors.</description>
<priority>1</priority>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.ExcessiveImportRule"
message="A high number of imports can indicate a high degree of coupling within an object. ({0} maximum but {1} actually)">
<description>A high number of imports can indicate a high degree of coupling within an object. Rule counts the number of unique imports and reports a violation if the count is above the user defined threshold.</description>
<priority>3</priority>
<properties>
<property name="maximum">
<value>15</value>
</property>
</properties>
<example>
import blah.blah.Baz;
import blah.blah.Bif;
// 18 others from the same package elided
public class Foo
{
public function doWork() : void
{
}
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.TrueFalseConditionRule"
message="This test contains a hard coded boolean value. You could remove it by having '{0}'">
<priority>3</priority>
<example>
if ( true ) // VIOLATION
{
if ( myCondition == false ) // VIOLATION
{
}
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.AvoidUsingPublicStaticFieldRule"
message="If this field ({0}) was meant to be a constant, make it constant. Otherwise, if it is used as a global variable, you may want to redesign this class">
<priority>3</priority>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.DynamicClassRule" message="A class must not be dynamic">
<description>When using dynamic classes, you cannot control how the developer will use your class. It makes refactoring really difficult</description>
<priority>1</priority>
<example>
dynamic public class DynamicObject // VIOLATION
{
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.forbiddentypes.UseObjectTypeRule"
message="Do not use Object class">
<description>It is a bad practice to use the dynamic class Object. Prefer using strongly typed object, or marker interface in order to avoid silent compilation errors while refactoring</description>
<priority>1</priority>
<example>
public class Foo
{
public var bar : Object; // VIOLATION
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.forbiddentypes.UseDictionaryTypeRule"
message="Do not use Dictionnary class">
<description>It is a bad practice to use the dynamic class Dictionary. Prefer using strongly typed object, or marker interface in order to avoid silent compilation errors while refactoring</description>
<priority>1</priority>
<example>
public class Foo
{
public var bar : Dictionnary; // VIOLATION
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.NonStaticConstantFieldRule"
message="A constant field should be static ({0})">
<description>
</description>
<priority>1</priority>
<example>
public class MyObject {
public static const MY_STATIC_CONSTANT : String = "myStaticConstant";
public const MY_NON_STATIC_CONSTANT : String = "myStaticConstant"; // VIOLATION
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.forbiddentypes.UseGenericTypeRule"
message="Use strongly typed objects instead of *">
<description></description>
<priority>1</priority>
<example>
public class Foo
{
public var bar : *; // VIOLATION
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.UselessOverridenFunctionRule"
message="This method is empty. This should be removed ({0})">
<description>This function is not needed.</description>
<priority>3</priority>
<example>
override protected function createChildren() : void
{
super.createChildren();
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.AvoidProtectedFieldInFinalClassRule"
message="Protected accessors are useless in a final class. Make it private ({0})">
<priority>3</priority>
<example>
final public class Foo
{
protected var bar : int; // VIOLATION
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.AvoidUsingWithKeyWordRule"
message="You should not use the with keyword. It does not help readability">
<priority>3</priority>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.ArrayFieldWithNoArrayElementTypeRule"
message="ArrayElementType metadata is not specified for this array-type field ({0})">
<description>
</description>
<priority>3</priority>
<example>
public class ArrayVO {
public var items:Array; //VIOLATION
[ArrayElementType("model.vo.MenuItemVO")]
public var menuItems : Array;
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.ClassAndExtensionAreIdenticalRule"
message="The extension name is the same as the class name">
<description/>
<priority>3</priority>
<example>
package com.MyCompany
{
public class SomeClass extends mx.SomeClass // VIOLATION
{
}
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.ProtectedStaticMethodRule"
message="This method ({0}) should be private">
<description/>
<priority>3</priority>
<example>
protected static function foo() : void // VIOLATION
{
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.EmptyStatementRule"
message="This statement is empty">
<description/>
<priority>5</priority>
<example>
protected function foo() : void
{
var i : int = 0;
; // VIOLATION
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.ReferenceToVariableBindingFromItsInitializerRule"
message="The initializer refers to its variable. Its value will be null.">
<priority>1</priority>
<example>
package
{
public class Foo
{
public static const XYZ:String = XYZ; // meant to be "xyz"
}
}
</example>
</rule>
<rule class="org.apache.flex.pmd.rules.maintanability.AvoidUseOfAsKeywordRule"
message="Enforce that as is not used (silently ignores the cast and nulls the property when the type is wrong)">
<priority>5</priority>
</rule>
</ruleset>