From 6a81a63dd84ea472f4a8d3764e30accb9124a686 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 12:45:21 -0500 Subject: [PATCH 001/371] Initial stub implementation for basic example mentioned in issue --- .../ArrayDeclarationVerbosenessRule.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRule.java diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRule.java new file mode 100644 index 0000000000..4c4f259664 --- /dev/null +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRule.java @@ -0,0 +1,19 @@ +package net.sourceforge.pmd.lang.java.rule.codestyle; + +import net.sourceforge.pmd.lang.java.ast.ASTLocalVariableDeclaration; +import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; + +public class ArrayDeclarationVerbosenessRule extends AbstractJavaRule { + + @Override + public Object visit(ASTLocalVariableDeclaration node, Object data) { + + if (node.isArray()) { + if (node.getImage().matches("(new).+\\{")) + addViolation(data, node); + return super.visit(node, data); + } + + return super.visit(node, data); + } +} From f26e37424815ea9d99563b9192ce636a45259a3a Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 12:59:30 -0500 Subject: [PATCH 002/371] Added stub unit test --- .../codestyle/ArrayDeclarationVerbosenessRuleTest.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRuleTest.java diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRuleTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRuleTest.java new file mode 100644 index 0000000000..01d3256fb7 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRuleTest.java @@ -0,0 +1,7 @@ +package net.sourceforge.pmd.lang.java.rule.codestyle; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class ArrayDeclarationVerbosenessRuleTest extends PmdRuleTst { + // no additional unit tests +} From 0a0209e70be303099bd9f450e542c53f7f64a0a0 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 13:08:48 -0500 Subject: [PATCH 003/371] Renamed rule class, added rule to codestyle.xml --- ...> ArrayInitializationVerbosenessRule.java} | 2 +- .../resources/category/java/codestyle.xml | 2510 +++++++++-------- ...rayInitializationVerbosenessRuleTest.java} | 2 +- 3 files changed, 1297 insertions(+), 1217 deletions(-) rename pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/{ArrayDeclarationVerbosenessRule.java => ArrayInitializationVerbosenessRule.java} (86%) rename pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/{ArrayDeclarationVerbosenessRuleTest.java => ArrayInitializationVerbosenessRuleTest.java} (65%) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java similarity index 86% rename from pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRule.java rename to pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java index 4c4f259664..15395111a1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java @@ -3,7 +3,7 @@ package net.sourceforge.pmd.lang.java.rule.codestyle; import net.sourceforge.pmd.lang.java.ast.ASTLocalVariableDeclaration; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; -public class ArrayDeclarationVerbosenessRule extends AbstractJavaRule { +public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { @Override public Object visit(ASTLocalVariableDeclaration node, Object data) { diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 9066684bed..29acc9947d 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -1,32 +1,32 @@ <?xml version="1.0"?> <ruleset name="Code Style" - 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + <description> + Rules which enforce a specific coding style. + </description> + + <rule name="AbstractNaming" + language="java" + since="1.4" + deprecated="true" + message="Abstract classes should be named 'AbstractXXX'" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#abstractnaming"> <description> - Rules which enforce a specific coding style. + Abstract classes should be named 'AbstractXXX'. + + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by {% rule java/codestyle/ClassNamingConventions %}. </description> - - <rule name="AbstractNaming" - language="java" - since="1.4" - deprecated="true" - message="Abstract classes should be named 'AbstractXXX'" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#abstractnaming"> - <description> -Abstract classes should be named 'AbstractXXX'. - -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by {% rule java/codestyle/ClassNamingConventions %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration [@Abstract='true' and @Interface='false'] [not (starts-with(@Image,'Abstract'))] @@ -36,71 +36,93 @@ by {% rule java/codestyle/ClassNamingConventions %}. [$strict='true'] [starts-with(@Image, 'Abstract')] ]]> - </value> - </property> - <property name="strict" type="Boolean" value="true" description="Also flag classes, that are named Abstract, but are not abstract."/> - </properties> - <example> -<![CDATA[ + </value> + </property> + <property name="strict" type="Boolean" value="true" + description="Also flag classes, that are named Abstract, but are not abstract."/> + </properties> + <example> + <![CDATA[ public abstract class Foo { // should be AbstractFoo } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AtLeastOneConstructor" - language="java" - since="1.04" - message="Each class should declare at least one constructor" - class="net.sourceforge.pmd.lang.java.rule.codestyle.AtLeastOneConstructorRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#atleastoneconstructor"> - <description> -<![CDATA[ + <rule name="ArrayInitializationVerboseness" + language="java" + since="1.1" + message="Array initialization does not require assignment to new object, assignment to {--array content--} is sufficient" + class="net.sourceforge.pmd.lang.java.rule.codestyle.ArrayInitializationVerbosenessRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#arrayinitializationverboseness"> + <description> + <![CDATA[ +Arrays can be initialized simply with curly braces without requiring to create new array object +]]> + </description> + <priority>3</priority> + <example> + <![CDATA[ +Foo[] x = new Foo[] { ... }; // Overly verbose + +Foo[] x = { ... }; //Equivalent to above line +]]> + </example> + </rule> + + <rule name="AtLeastOneConstructor" + language="java" + since="1.04" + message="Each class should declare at least one constructor" + class="net.sourceforge.pmd.lang.java.rule.codestyle.AtLeastOneConstructorRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#atleastoneconstructor"> + <description> + <![CDATA[ Each non-static class should declare at least one constructor. Classes with solely static members are ignored, refer to [UseUtilityClassRule](pmd_rules_java_design.html#useutilityclass) to detect those. ]]> - </description> - <priority>3</priority> - <example> -<![CDATA[ + </description> + <priority>3</priority> + <example> + <![CDATA[ public class Foo { // missing constructor public void doSomething() { ... } public void doOtherThing { ... } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidDollarSigns" - since="1.5" - message="Avoid using dollar signs in variable/method/class/interface names" - class="net.sourceforge.pmd.lang.java.rule.codestyle.AvoidDollarSignsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoiddollarsigns"> - <description> -Avoid using dollar signs in variable/method/class/interface names. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="AvoidDollarSigns" + since="1.5" + message="Avoid using dollar signs in variable/method/class/interface names" + class="net.sourceforge.pmd.lang.java.rule.codestyle.AvoidDollarSignsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoiddollarsigns"> + <description> + Avoid using dollar signs in variable/method/class/interface names. + </description> + <priority>3</priority> + <example> + <![CDATA[ public class Fo$o { // not a recommended name } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidFinalLocalVariable" - language="java" - since="4.1" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Avoid using final local variables, turn them into fields" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidfinallocalvariable"> - <description>Avoid using final local variables, turn them into fields.</description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="AvoidFinalLocalVariable" + language="java" + since="4.1" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Avoid using final local variables, turn them into fields" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidfinallocalvariable"> + <description>Avoid using final local variables, turn them into fields.</description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //LocalVariableDeclaration[ @Final = 'true' and not(../../ForStatement) @@ -112,49 +134,51 @@ public class Fo$o { // not a recommended name ) ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class MyClass { public void foo() { final String finalLocalVariable; } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidPrefixingMethodParameters" - language="java" - since="5.0" - deprecated="true" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Avoid prefixing parameters by in, out or inOut. Uses Javadoc to document this behavior." - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprefixingmethodparameters"> - <description> -Prefixing parameters by 'in' or 'out' pollutes the name of the parameters and reduces code readability. -To indicate whether or not a parameter will be modify in a method, its better to document method -behavior with Javadoc. + <rule name="AvoidPrefixingMethodParameters" + language="java" + since="5.0" + deprecated="true" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Avoid prefixing parameters by in, out or inOut. Uses Javadoc to document this behavior." + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprefixingmethodparameters"> + <description> + Prefixing parameters by 'in' or 'out' pollutes the name of the parameters and reduces code + readability. + To indicate whether or not a parameter will be modify in a method, its better to document + method + behavior with Javadoc. -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by the more general rule {% rule java/codestyle/FormalParameterNamingConventions %}. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by the more general rule {% rule java/codestyle/FormalParameterNamingConventions %}. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //MethodDeclaration/MethodDeclarator/FormalParameters/FormalParameter/VariableDeclaratorId[ pmd:matches(@Image,'^in[A-Z].*','^out[A-Z].*','^in$','^out$') ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ // Not really clear public class Foo { public void bar( @@ -164,9 +188,9 @@ public class Foo { } } ]]> - </example> - <example> -<![CDATA[ + </example> + <example> + <![CDATA[ // Far more useful public class Foo { /** @@ -181,93 +205,96 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidProtectedFieldInFinalClass" - language="java" - since="2.1" - message="Avoid protected fields in a final class. Change to private or package access." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass"> - <description> -Do not use protected fields in final classes since they cannot be subclassed. -Clarify your intent by using private or package access modifiers instead. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="AvoidProtectedFieldInFinalClass" + language="java" + since="2.1" + message="Avoid protected fields in a final class. Change to private or package access." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass"> + <description> + Do not use protected fields in final classes since they cannot be subclassed. + Clarify your intent by using private or package access modifiers instead. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration[@Final='true'] /ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration /FieldDeclaration[@Protected='true'] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public final class Bar { private int x; protected int y; // bar cannot be subclassed, so is y really private or package visible? Bar() {} } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidProtectedMethodInFinalClassNotExtending" - language="java" - since="5.1" - message="Avoid protected methods in a final class that doesn't extend anything other than Object. Change to private or package access." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending"> - <description> -Do not use protected methods in most final classes since they cannot be subclassed. This should -only be allowed in final classes that extend other classes with protected methods (whose -visibility cannot be reduced). Clarify your intent by using private or package access modifiers instead. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="AvoidProtectedMethodInFinalClassNotExtending" + language="java" + since="5.1" + message="Avoid protected methods in a final class that doesn't extend anything other than Object. Change to private or package access." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending"> + <description> + Do not use protected methods in most final classes since they cannot be subclassed. This + should + only be allowed in final classes that extend other classes with protected methods (whose + visibility cannot be reduced). Clarify your intent by using private or package access + modifiers instead. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration[@Final='true' and not(ExtendsList)] /ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration /MethodDeclaration[@Protected='true'][MethodDeclarator/@Image != 'finalize'] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public final class Foo { private int bar() {} protected int baz() {} // Foo cannot be subclassed, and doesn't extend anything, so is baz() really private or package visible? } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidUsingNativeCode" - language="java" - since="4.1" - message="The use of native code is not recommended." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidusingnativecode"> - <description> -Unnecessary reliance on Java Native Interface (JNI) calls directly reduces application portability -and increases the maintenance burden. - </description> - <priority>2</priority> - <properties> - <property name="xpath"> - <value>//Name[starts-with(@Image,'System.loadLibrary')]</value> - </property> - </properties> - <example> -<![CDATA[ + <rule name="AvoidUsingNativeCode" + language="java" + since="4.1" + message="The use of native code is not recommended." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidusingnativecode"> + <description> + Unnecessary reliance on Java Native Interface (JNI) calls directly reduces application + portability + and increases the maintenance burden. + </description> + <priority>2</priority> + <properties> + <property name="xpath"> + <value>//Name[starts-with(@Image,'System.loadLibrary')]</value> + </property> + </properties> + <example> + <![CDATA[ public class SomeJNIClass { public SomeJNIClass() { @@ -283,25 +310,25 @@ public class SomeJNIClass { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="BooleanGetMethodName" - language="java" - since="4.0" - message="A 'getX()' method which returns a boolean should be named 'isX()'" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#booleangetmethodname"> - <description> -Methods that return boolean results should be named as predicate statements to denote this. -I.e, 'isReady()', 'hasValues()', 'canCommit()', 'willFail()', etc. Avoid the use of the 'get' -prefix for these methods. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="BooleanGetMethodName" + language="java" + since="4.0" + message="A 'getX()' method which returns a boolean should be named 'isX()'" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#booleangetmethodname"> + <description> + Methods that return boolean results should be named as predicate statements to denote this. + I.e, 'isReady()', 'hasValues()', 'canCommit()', 'willFail()', etc. Avoid the use of the 'get' + prefix for these methods. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //MethodDeclaration[ MethodDeclarator[count(FormalParameters/FormalParameter) = 0 or $checkParameterizedMethods = 'true'] [starts-with(@Image, 'get')] @@ -310,44 +337,46 @@ ResultType/Type/PrimitiveType[@Image = 'boolean'] and not(../Annotation//Name[@Image = 'Override']) ] ]]> - </value> - </property> - <property name="checkParameterizedMethods" type="Boolean" description="Check parameterized methods" value="false"/> - </properties> - <example> -<![CDATA[ + </value> + </property> + <property name="checkParameterizedMethods" type="Boolean" + description="Check parameterized methods" value="false"/> + </properties> + <example> + <![CDATA[ public boolean getFoo(); // bad public boolean isFoo(); // ok public boolean getFoo(boolean bar); // ok, unless checkParameterizedMethods=true ]]> - </example> - </rule> + </example> + </rule> - <rule name="CallSuperInConstructor" - language="java" - since="3.0" - message="It is a good practice to call super() in a constructor" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#callsuperinconstructor"> - <description> -It is a good practice to call super() in a constructor. If super() is not called but -another constructor (such as an overloaded constructor) is called, this rule will not report it. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="CallSuperInConstructor" + language="java" + since="3.0" + message="It is a good practice to call super() in a constructor" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#callsuperinconstructor"> + <description> + It is a good practice to call super() in a constructor. If super() is not called but + another constructor (such as an overloaded constructor) is called, this rule will not report + it. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration[ count (ExtendsList/*) > 0 ] /ClassOrInterfaceBody /ClassOrInterfaceBodyDeclaration /ConstructorDeclaration[ count (.//ExplicitConstructorInvocation)=0 ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo extends Bar{ public Foo() { // call the constructor of Bar @@ -360,26 +389,26 @@ public class Foo extends Bar{ } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ClassNamingConventions" - since="1.2" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.ClassNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#classnamingconventions"> - <description> - Configurable naming conventions for type declarations. This rule reports - type declarations which do not match the regex that applies to their - specific kind (e.g. enum or interface). Each regex can be configured through - properties. + <rule name="ClassNamingConventions" + since="1.2" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.ClassNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#classnamingconventions"> + <description> + Configurable naming conventions for type declarations. This rule reports + type declarations which do not match the regex that applies to their + specific kind (e.g. enum or interface). Each regex can be configured through + properties. - By default this rule uses the standard Java naming convention (Pascal case), - and reports utility class names not ending with 'Util'. - </description> - <priority>1</priority> - <example> -<![CDATA[ + By default this rule uses the standard Java naming convention (Pascal case), + and reports utility class names not ending with 'Util'. + </description> + <priority>1</priority> + <example> + <![CDATA[ // This is Pascal case, the recommended naming convention in Java // Note that the default values of this rule don't allow underscores // or accented characters in type names @@ -393,24 +422,26 @@ public abstract class Thing {} // This class doesn't respect the convention, and will be flagged public class Éléphant {} ]]> - </example> - </rule> + </example> + </rule> - <rule name="CommentDefaultAccessModifier" - since="5.4.0" - class="net.sourceforge.pmd.lang.java.rule.codestyle.CommentDefaultAccessModifierRule" - message="Missing commented default access modifier" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier"> - <description> -To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default access modifier -we must add a comment at the beginning of it's declaration. -By default the comment must be /* default */ or /* package */, if you want another, you have to provide a regular expression. -This rule ignores by default all cases that have a @VisibleForTesting annotation. Use the -property "ignoredAnnotations" to customize the recognized annotations. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="CommentDefaultAccessModifier" + since="5.4.0" + class="net.sourceforge.pmd.lang.java.rule.codestyle.CommentDefaultAccessModifierRule" + message="Missing commented default access modifier" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier"> + <description> + To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default + access modifier + we must add a comment at the beginning of it's declaration. + By default the comment must be /* default */ or /* package */, if you want another, you have + to provide a regular expression. + This rule ignores by default all cases that have a @VisibleForTesting annotation. Use the + property "ignoredAnnotations" to customize the recognized annotations. + </description> + <priority>3</priority> + <example> + <![CDATA[ public class Foo { final String stringValue = "some string"; String getString() { @@ -432,61 +463,72 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ConfusingTernary" - since="1.9" - message="Avoid if (x != y) ..; else ..;" - class="net.sourceforge.pmd.lang.java.rule.codestyle.ConfusingTernaryRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#confusingternary"> - <description> -Avoid negation within an "if" expression with an "else" clause. For example, rephrase: -`if (x != y) diff(); else same();` as: `if (x == y) same(); else diff();`. + <rule name="ConfusingTernary" + since="1.9" + message="Avoid if (x != y) ..; else ..;" + class="net.sourceforge.pmd.lang.java.rule.codestyle.ConfusingTernaryRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#confusingternary"> + <description> + Avoid negation within an "if" expression with an "else" clause. For example, rephrase: + `if (x != y) diff(); else same();` as: `if (x == y) same(); else diff();`. -Most "if (x != y)" cases without an "else" are often return cases, so consistent use of this -rule makes the code easier to read. Also, this resolves trivial ordering problems, such -as "does the error case go first?" or "does the common case go first?". - </description> - <priority>3</priority> - <example> -<![CDATA[ + Most "if (x != y)" cases without an "else" are often return cases, so consistent use of this + rule makes the code easier to read. Also, this resolves trivial ordering problems, such + as "does the error case go first?" or "does the common case go first?". + </description> + <priority>3</priority> + <example> + <![CDATA[ boolean bar(int x, int y) { return (x != y) ? diff : same; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ControlStatementBraces" - language="java" - since="6.2.0" - message="This statement should have braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#controlstatementbraces"> - <description> - Enforce a policy for braces on control statements. It is recommended to use braces on 'if ... else' - statements and loop statements, even if they are optional. This usually makes the code clearer, and - helps prepare the future when you need to add another statement. That said, this rule lets you control - which statements are required to have braces via properties. + <rule name="ControlStatementBraces" + language="java" + since="6.2.0" + message="This statement should have braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#controlstatementbraces"> + <description> + Enforce a policy for braces on control statements. It is recommended to use braces on 'if ... + else' + statements and loop statements, even if they are optional. This usually makes the code + clearer, and + helps prepare the future when you need to add another statement. That said, this rule lets you + control + which statements are required to have braces via properties. - From 6.2.0 on, this rule supersedes WhileLoopMustUseBraces, ForLoopMustUseBraces, IfStmtMustUseBraces, - and IfElseStmtMustUseBraces. - </description> - <priority>3</priority> - <properties> - <property name="checkIfElseStmt" type="Boolean" value="true" description="Require that 'if ... else' statements use braces" /> - <property name="checkSingleIfStmt" type="Boolean" value="true" description="Require that 'if' statements with a single branch use braces" /> - <property name="checkWhileStmt" type="Boolean" value="true" description="Require that 'while' loops use braces" /> - <property name="checkForStmt" type="Boolean" value="true" description="Require that 'for' loops should use braces" /> - <property name="checkDoWhileStmt" type="Boolean" value="true" description="Require that 'do ... while' loops use braces" /> - <property name="checkCaseStmt" type="Boolean" value="false" description="Require that cases of a switch have braces"/> + From 6.2.0 on, this rule supersedes WhileLoopMustUseBraces, ForLoopMustUseBraces, + IfStmtMustUseBraces, + and IfElseStmtMustUseBraces. + </description> + <priority>3</priority> + <properties> + <property name="checkIfElseStmt" type="Boolean" value="true" + description="Require that 'if ... else' statements use braces"/> + <property name="checkSingleIfStmt" type="Boolean" value="true" + description="Require that 'if' statements with a single branch use braces"/> + <property name="checkWhileStmt" type="Boolean" value="true" + description="Require that 'while' loops use braces"/> + <property name="checkForStmt" type="Boolean" value="true" + description="Require that 'for' loops should use braces"/> + <property name="checkDoWhileStmt" type="Boolean" value="true" + description="Require that 'do ... while' loops use braces"/> + <property name="checkCaseStmt" type="Boolean" value="false" + description="Require that cases of a switch have braces"/> - <property name="allowEmptyLoop" type="Boolean" value="false" description="Allow loops with an empty statement, e.g. 'while(true);'" /> + <property name="allowEmptyLoop" type="Boolean" value="false" + description="Allow loops with an empty statement, e.g. 'while(true);'"/> - <property name="version" value="2.0"/> - <property name="xpath"> - <value><![CDATA[ + <property name="version" value="2.0"/> + <property name="xpath"> + <value><![CDATA[ //WhileStatement[$checkWhileStmt and not(Statement/Block) and not($allowEmptyLoop and Statement/EmptyStatement)] | //ForStatement[$checkForStmt and not(Statement/Block) and not($allowEmptyLoop and Statement/EmptyStatement)] @@ -509,10 +551,10 @@ boolean bar(int x, int y) { in following-sibling::BlockStatement except following-sibling::SwitchLabel[1]/following-sibling::BlockStatement satisfies not($stmt/Statement/Block))] ]]></value> - </property> - </properties> - <example> - <![CDATA[ + </property> + </properties> + <example> + <![CDATA[ while (true) // not recommended x++; @@ -520,24 +562,24 @@ while (true) { // preferred approach x++; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="DefaultPackage" - language="java" - since="3.4" - message="Use explicit scoping instead of the default package private level" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#defaultpackage"> - <description> -Use explicit scoping instead of accidental usage of default package private level. -The rule allows methods and fields annotated with Guava's @VisibleForTesting. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="DefaultPackage" + language="java" + since="3.4" + message="Use explicit scoping instead of the default package private level" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#defaultpackage"> + <description> + Use explicit scoping instead of accidental usage of default package private level. + The rule allows methods and fields annotated with Guava's @VisibleForTesting. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration[@Interface='false'] /ClassOrInterfaceBody /ClassOrInterfaceBodyDeclaration @@ -547,22 +589,23 @@ FieldDeclaration[@PackagePrivate='true'] or MethodDeclaration[@PackagePrivate='true'] ] ]]> - </value> - </property> - </properties> - </rule> + </value> + </property> + </properties> + </rule> - <rule name="DontImportJavaLang" - since="0.5" - message="Avoid importing anything from the package 'java.lang'" - class="net.sourceforge.pmd.lang.java.rule.codestyle.DontImportJavaLangRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#dontimportjavalang"> - <description> -Avoid importing anything from the package 'java.lang'. These classes are automatically imported (JLS 7.5.3). - </description> - <priority>4</priority> - <example> -<![CDATA[ + <rule name="DontImportJavaLang" + since="0.5" + message="Avoid importing anything from the package 'java.lang'" + class="net.sourceforge.pmd.lang.java.rule.codestyle.DontImportJavaLangRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#dontimportjavalang"> + <description> + Avoid importing anything from the package 'java.lang'. These classes are automatically + imported (JLS 7.5.3). + </description> + <priority>4</priority> + <example> + <![CDATA[ import java.lang.String; // this is unnecessary public class Foo {} @@ -573,42 +616,43 @@ import java.lang.*; // this is bad public class Foo {} ]]> - </example> - </rule> + </example> + </rule> - <rule name="DuplicateImports" - since="0.5" - message="Avoid duplicate imports such as ''{0}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.DuplicateImportsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#duplicateimports"> - <description> -Duplicate or overlapping import statements should be avoided. - </description> - <priority>4</priority> - <example> -<![CDATA[ + <rule name="DuplicateImports" + since="0.5" + message="Avoid duplicate imports such as ''{0}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.DuplicateImportsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#duplicateimports"> + <description> + Duplicate or overlapping import statements should be avoided. + </description> + <priority>4</priority> + <example> + <![CDATA[ import java.lang.String; import java.lang.*; public class Foo {} ]]> - </example> - </rule> + </example> + </rule> - <rule name="EmptyMethodInAbstractClassShouldBeAbstract" - language="java" - since="4.1" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="An empty method in an abstract class should be abstract instead" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#emptymethodinabstractclassshouldbeabstract"> - <description> -Empty or auto-generated methods in an abstract class should be tagged as abstract. This helps to remove their inapproprate -usage by developers who should be implementing their own versions in the concrete subclasses. - </description> - <priority>1</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="EmptyMethodInAbstractClassShouldBeAbstract" + language="java" + since="4.1" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="An empty method in an abstract class should be abstract instead" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#emptymethodinabstractclassshouldbeabstract"> + <description> + Empty or auto-generated methods in an abstract class should be tagged as abstract. This helps + to remove their inapproprate + usage by developers who should be implementing their own versions in the concrete subclasses. + </description> + <priority>1</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration[@Abstract = 'true'] /ClassOrInterfaceBody /ClassOrInterfaceBodyDeclaration @@ -625,11 +669,11 @@ usage by developers who should be implementing their own versions in the concret ( count (./Block/*) = 0 ) ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public abstract class ShouldBeAbstract { public Object couldBeAbstract() { // Should be abstract method ? @@ -640,46 +684,47 @@ public abstract class ShouldBeAbstract { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ExtendsObject" - language="java" - since="5.0" - message="No need to explicitly extend Object." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#extendsobject"> - <description>No need to explicitly extend Object.</description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="ExtendsObject" + language="java" + since="5.0" + message="No need to explicitly extend Object." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#extendsobject"> + <description>No need to explicitly extend Object.</description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ExtendsList/ClassOrInterfaceType[@Image='Object' or @Image='java.lang.Object'] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo extends Object { // not required } ]]> - </example> - </rule> + </example> + </rule> - <rule name="FieldDeclarationsShouldBeAtStartOfClass" - language="java" - since="5.0" - message="Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes." - class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldDeclarationsShouldBeAtStartOfClassRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fielddeclarationsshouldbeatstartofclass"> - <description> -Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="FieldDeclarationsShouldBeAtStartOfClass" + language="java" + since="5.0" + message="Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes." + class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldDeclarationsShouldBeAtStartOfClassRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fielddeclarationsshouldbeatstartofclass"> + <description> + Fields should be declared at the top of the class, before any method declarations, + constructors, initializers or inner classes. + </description> + <priority>3</priority> + <example> + <![CDATA[ public class HelloWorldBean { // Field declared before methods / inner classes - OK @@ -693,26 +738,29 @@ public class HelloWorldBean { private String _fieldInWrongLocation; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="FieldNamingConventions" - since="6.7.0" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fieldnamingconventions"> - <description> - Configurable naming conventions for field declarations. This rule reports variable declarations - which do not match the regex that applies to their specific kind ---e.g. constants (static final), - enum constant, final field. Each regex can be configured through properties. + <rule name="FieldNamingConventions" + since="6.7.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fieldnamingconventions"> + <description> + Configurable naming conventions for field declarations. This rule reports variable + declarations + which do not match the regex that applies to their specific kind ---e.g. constants (static + final), + enum constant, final field. Each regex can be configured through properties. - By default this rule uses the standard Java naming convention (Camel case), and uses the ALL_UPPER - convention for constants and enum constants. - </description> - <priority>1</priority> - <example> - <![CDATA[ + By default this rule uses the standard Java naming convention (Camel case), and uses the + ALL_UPPER + convention for constants and enum constants. + </description> + <priority>1</priority> + <example> + <![CDATA[ class Foo { int myField = 1; // This is in camel case, so it's ok int my_Field = 1; // This contains an underscore, it's not ok by default @@ -730,88 +778,88 @@ public class HelloWorldBean { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ForLoopShouldBeWhileLoop" - language="java" - since="1.02" - message="This for loop could be simplified to a while loop" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#forloopshouldbewhileloop"> - <description> -Some for loops can be simplified to while loops, this makes them more concise. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="ForLoopShouldBeWhileLoop" + language="java" + since="1.02" + message="This for loop could be simplified to a while loop" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#forloopshouldbewhileloop"> + <description> + Some for loops can be simplified to while loops, this makes them more concise. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ForStatement [not(LocalVariableDeclaration)] [not(ForInit)] [not(ForUpdate)] [Expression] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo { void bar() { for (;true;) true; // No Init or Update part, may as well be: while (true) } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ForLoopsMustUseBraces" - language="java" - since="0.7" - deprecated="true" - message="Avoid using 'for' statements without curly braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#forloopsmustusebraces"> - <description> -Avoid using 'for' statements without using curly braces. If the code formatting or -indentation is lost then it becomes difficult to separate the code being controlled -from the rest. + <rule name="ForLoopsMustUseBraces" + language="java" + since="0.7" + deprecated="true" + message="Avoid using 'for' statements without curly braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#forloopsmustusebraces"> + <description> + Avoid using 'for' statements without using curly braces. If the code formatting or + indentation is lost then it becomes difficult to separate the code being controlled + from the rest. -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by the rule {% rule java/codestyle/ControlStatementBraces %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value>//ForStatement[not(Statement/Block)]</value> - </property> - </properties> - <example> -<![CDATA[ + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by the rule {% rule java/codestyle/ControlStatementBraces %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value>//ForStatement[not(Statement/Block)]</value> + </property> + </properties> + <example> + <![CDATA[ for (int i = 0; i < 42; i++) foo(); ]]> - </example> - </rule> + </example> + </rule> - <rule name="FormalParameterNamingConventions" - since="6.6.0" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.FormalParameterNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#formalparameternamingconventions"> - <description> - Configurable naming conventions for formal parameters of methods and lambdas. - This rule reports formal parameters which do not match the regex that applies to their - specific kind (e.g. lambda parameter, or final formal parameter). Each regex can be - configured through properties. + <rule name="FormalParameterNamingConventions" + since="6.6.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.FormalParameterNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#formalparameternamingconventions"> + <description> + Configurable naming conventions for formal parameters of methods and lambdas. + This rule reports formal parameters which do not match the regex that applies to their + specific kind (e.g. lambda parameter, or final formal parameter). Each regex can be + configured through properties. - By default this rule uses the standard Java naming convention (Camel case). - </description> - <priority>1</priority> - <example> - <![CDATA[ + By default this rule uses the standard Java naming convention (Camel case). + </description> + <priority>1</priority> + <example> + <![CDATA[ class Foo { abstract void bar(int myInt); // This is Camel case, so it's ok @@ -832,34 +880,34 @@ for (int i = 0; i < 42; i++) } ]]> - </example> - </rule> + </example> + </rule> - <rule name="GenericsNaming" - language="java" - since="4.2.6" - message="Generics names should be a one letter long and upper case." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#genericsnaming"> - <description> -Names for references to generic values should be limited to a single uppercase letter. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="GenericsNaming" + language="java" + since="4.2.6" + message="Generics names should be a one letter long and upper case." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#genericsnaming"> + <description> + Names for references to generic values should be limited to a single uppercase letter. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //TypeDeclaration/ClassOrInterfaceDeclaration/TypeParameters/TypeParameter[ string-length(@Image) > 1 or string:upper-case(@Image) != @Image ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public interface GenericDao<E extends BaseModel, K extends Serializable> extends BaseDao { // This is ok... } @@ -876,25 +924,26 @@ public interface GenericDao<EF extends BaseModel, K extends Serializable> { // 'EF' is not ok. } ]]> - </example> - </rule> + </example> + </rule> - <rule name="IdenticalCatchBranches" - language="java" - since="6.4.0" - minimumLanguageVersion="1.7" - message="''catch'' branch identical to ''{0}'' branch" - class="net.sourceforge.pmd.lang.java.rule.codestyle.IdenticalCatchBranchesRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#identicalcatchbranches"> - <description> - Identical `catch` branches use up vertical space and increase the complexity of code without - adding functionality. It's better style to collapse identical branches into a single multi-catch - branch. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="IdenticalCatchBranches" + language="java" + since="6.4.0" + minimumLanguageVersion="1.7" + message="''catch'' branch identical to ''{0}'' branch" + class="net.sourceforge.pmd.lang.java.rule.codestyle.IdenticalCatchBranchesRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#identicalcatchbranches"> + <description> + Identical `catch` branches use up vertical space and increase the complexity of code without + adding functionality. It's better style to collapse identical branches into a single + multi-catch + branch. + </description> + <priority>3</priority> + <example> + <![CDATA[ try { // do something } catch (IllegalArgumentException e) { @@ -909,39 +958,39 @@ try { throw e; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="IfElseStmtsMustUseBraces" - language="java" - since="0.2" - deprecated="true" - message="Avoid using 'if...else' statements without curly braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#ifelsestmtsmustusebraces"> - <description> -Avoid using if..else statements without using surrounding braces. If the code formatting -or indentation is lost then it becomes difficult to separate the code being controlled -from the rest. + <rule name="IfElseStmtsMustUseBraces" + language="java" + since="0.2" + deprecated="true" + message="Avoid using 'if...else' statements without curly braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#ifelsestmtsmustusebraces"> + <description> + Avoid using if..else statements without using surrounding braces. If the code formatting + or indentation is lost then it becomes difficult to separate the code being controlled + from the rest. -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by the rule {% rule java/codestyle/ControlStatementBraces %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by the rule {% rule java/codestyle/ControlStatementBraces %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //Statement [parent::IfStatement[@Else='true']] [not(child::Block)] [not(child::IfStatement)] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ // this is OK if (foo) x++; @@ -951,36 +1000,36 @@ if (foo) else x = x-1; ]]> - </example> - </rule> + </example> + </rule> - <rule name="IfStmtsMustUseBraces" - language="java" - since="1.0" - deprecated="true" - message="Avoid using if statements without curly braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#ifstmtsmustusebraces"> - <description> -Avoid using if statements without using braces to surround the code block. If the code -formatting or indentation is lost then it becomes difficult to separate the code being -controlled from the rest. + <rule name="IfStmtsMustUseBraces" + language="java" + since="1.0" + deprecated="true" + message="Avoid using if statements without curly braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#ifstmtsmustusebraces"> + <description> + Avoid using if statements without using braces to surround the code block. If the code + formatting or indentation is lost then it becomes difficult to separate the code being + controlled from the rest. -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by the rule {% rule java/codestyle/ControlStatementBraces %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by the rule {% rule java/codestyle/ControlStatementBraces %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //IfStatement[count(*) < 3][not(Statement/Block)] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ if (foo) // not recommended x++; @@ -989,32 +1038,38 @@ if (foo) { // preferred approach } ]]> - </example> - </rule> + </example> + </rule> - <rule name="LinguisticNaming" - language="java" - since="6.7.0" - message="Linguistics Antipattern - Method name and return type is inconsistent linguistically" - class="net.sourceforge.pmd.lang.java.rule.codestyle.LinguisticNamingRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#linguisticnaming" - typeResolution="true"> - <description> - This rule finds Linguistic Naming Antipatterns. It checks for fields, that are named, as if they should - be boolean but have a different type. It also checks for methods, that according to their name, should - return a boolean, but don't. Further, it checks, that getters return something and setters won't. - Finally, it checks that methods, that start with "to" - so called transform methods - actually return - something, since according to their name, they should convert or transform one object into another. - There is additionally an option, to check for methods that contain "To" in their name - which are - also transform methods. However, this is disabled by default, since this detection is prone to - false positives. + <rule name="LinguisticNaming" + language="java" + since="6.7.0" + message="Linguistics Antipattern - Method name and return type is inconsistent linguistically" + class="net.sourceforge.pmd.lang.java.rule.codestyle.LinguisticNamingRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#linguisticnaming" + typeResolution="true"> + <description> + This rule finds Linguistic Naming Antipatterns. It checks for fields, that are named, as if + they should + be boolean but have a different type. It also checks for methods, that according to their + name, should + return a boolean, but don't. Further, it checks, that getters return something and setters + won't. + Finally, it checks that methods, that start with "to" - so called transform methods - actually + return + something, since according to their name, they should convert or transform one object into + another. + There is additionally an option, to check for methods that contain "To" in their name - which + are + also transform methods. However, this is disabled by default, since this detection is prone to + false positives. - For more information, see [Linguistic Antipatterns - What They Are and How -Developers Perceive Them](https://doi.org/10.1007/s10664-014-9350-8). - </description> - <priority>3</priority> - <example> -<![CDATA[ + For more information, see [Linguistic Antipatterns - What They Are and How + Developers Perceive Them](https://doi.org/10.1007/s10664-014-9350-8). + </description> + <priority>3</priority> + <example> + <![CDATA[ public class LinguisticNaming { int isValid; // the field name indicates a boolean, but it is an int. boolean isTrue; // correct type of the field @@ -1053,23 +1108,23 @@ public class LinguisticNaming { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="LocalHomeNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="The Local Home interface of a Session EJB should be suffixed by 'LocalHome'" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localhomenamingconvention"> - <description> -The Local Home interface of a Session EJB should be suffixed by 'LocalHome'. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="LocalHomeNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="The Local Home interface of a Session EJB should be suffixed by 'LocalHome'" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localhomenamingconvention"> + <description> + The Local Home interface of a Session EJB should be suffixed by 'LocalHome'. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration [ ( @@ -1082,32 +1137,32 @@ The Local Home interface of a Session EJB should be suffixed by 'LocalHome'. ) ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public interface MyBeautifulLocalHome extends javax.ejb.EJBLocalHome {} // proper name public interface MissingProperSuffix extends javax.ejb.EJBLocalHome {} // non-standard name ]]> - </example> - </rule> + </example> + </rule> - <rule name="LocalInterfaceSessionNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="The Local Interface of a Session EJB should be suffixed by 'Local'" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localinterfacesessionnamingconvention"> - <description> -The Local Interface of a Session EJB should be suffixed by 'Local'. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="LocalInterfaceSessionNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="The Local Interface of a Session EJB should be suffixed by 'Local'" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localinterfacesessionnamingconvention"> + <description> + The Local Interface of a Session EJB should be suffixed by 'Local'. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration [ ( @@ -1120,29 +1175,29 @@ The Local Interface of a Session EJB should be suffixed by 'Local'. ) ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public interface MyLocal extends javax.ejb.EJBLocalObject {} // proper name public interface MissingProperSuffix extends javax.ejb.EJBLocalObject {} // non-standard name ]]> - </example> - </rule> + </example> + </rule> - <rule name="LocalVariableCouldBeFinal" - since="2.2" - message="Local variable ''{0}'' could be declared final" - class="net.sourceforge.pmd.lang.java.rule.codestyle.LocalVariableCouldBeFinalRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablecouldbefinal"> - <description> -A local variable assigned only once can be declared final. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="LocalVariableCouldBeFinal" + since="2.2" + message="Local variable ''{0}'' could be declared final" + class="net.sourceforge.pmd.lang.java.rule.codestyle.LocalVariableCouldBeFinalRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablecouldbefinal"> + <description> + A local variable assigned only once can be declared final. + </description> + <priority>3</priority> + <example> + <![CDATA[ public class Bar { public void foo () { String txtA = "a"; // if txtA will not be assigned again it is better to do this: @@ -1150,25 +1205,27 @@ public class Bar { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="LocalVariableNamingConventions" - since="6.6.0" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.LocalVariableNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablenamingconventions"> - <description> - Configurable naming conventions for local variable declarations and other locally-scoped - variables. This rule reports variable declarations which do not match the regex that applies to their - specific kind (e.g. final variable, or catch-clause parameter). Each regex can be configured through - properties. + <rule name="LocalVariableNamingConventions" + since="6.6.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.LocalVariableNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablenamingconventions"> + <description> + Configurable naming conventions for local variable declarations and other locally-scoped + variables. This rule reports variable declarations which do not match the regex that applies + to their + specific kind (e.g. final variable, or catch-clause parameter). Each regex can be configured + through + properties. - By default this rule uses the standard Java naming convention (Camel case). - </description> - <priority>1</priority> - <example> - <![CDATA[ + By default this rule uses the standard Java naming convention (Camel case). + </description> + <priority>1</priority> + <example> + <![CDATA[ class Foo { void bar() { int localVariable = 1; // This is in camel case, so it's ok @@ -1185,31 +1242,33 @@ public class Bar { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="LongVariable" - language="java" - since="0.3" - message="Avoid excessively long variable names like {0}" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#longvariable"> - <description> -Fields, formal arguments, or local variable names that are too long can make the code difficult to follow. - </description> - <priority>3</priority> - <properties> - <property name="minimum" type="Integer" description="The variable length reporting threshold" min="1" max="100" value="17"/> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="LongVariable" + language="java" + since="0.3" + message="Avoid excessively long variable names like {0}" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#longvariable"> + <description> + Fields, formal arguments, or local variable names that are too long can make the code + difficult to follow. + </description> + <priority>3</priority> + <properties> + <property name="minimum" type="Integer" description="The variable length reporting threshold" + min="1" max="100" value="17"/> + <property name="xpath"> + <value> + <![CDATA[ //VariableDeclaratorId[string-length(@Image) > $minimum] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Something { int reallyLongIntName = -3; // VIOLATION - Field public static void main( String argumentsList[] ) { // VIOLATION - Formal @@ -1220,23 +1279,24 @@ public class Something { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="MDBAndSessionBeanNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="SessionBean or MessageBean should be suffixed by Bean" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#mdbandsessionbeannamingconvention"> - <description> -The EJB Specification states that any MessageDrivenBean or SessionBean should be suffixed by 'Bean'. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="MDBAndSessionBeanNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="SessionBean or MessageBean should be suffixed by Bean" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#mdbandsessionbeannamingconvention"> + <description> + The EJB Specification states that any MessageDrivenBean or SessionBean should be suffixed by + 'Bean'. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //TypeDeclaration/ClassOrInterfaceDeclaration [ ( @@ -1251,29 +1311,29 @@ The EJB Specification states that any MessageDrivenBean or SessionBean should be ) ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class SomeBean implements SessionBean{} // proper name public class MissingTheProperSuffix implements SessionBean {} // non-standard name ]]> - </example> - </rule> + </example> + </rule> - <rule name="MethodArgumentCouldBeFinal" - since="2.2" - message="Parameter ''{0}'' is not assigned and could be declared final" - class="net.sourceforge.pmd.lang.java.rule.codestyle.MethodArgumentCouldBeFinalRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#methodargumentcouldbefinal"> - <description> -A method argument that is never re-assigned within the method can be declared final. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="MethodArgumentCouldBeFinal" + since="2.2" + message="Parameter ''{0}'' is not assigned and could be declared final" + class="net.sourceforge.pmd.lang.java.rule.codestyle.MethodArgumentCouldBeFinalRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#methodargumentcouldbefinal"> + <description> + A method argument that is never re-assigned within the method can be declared final. + </description> + <priority>3</priority> + <example> + <![CDATA[ public void foo1 (String param) { // do stuff with param never assigning it } @@ -1282,61 +1342,62 @@ public void foo2 (final String param) { // better, do stuff with param never ass } ]]> - </example> - </rule> + </example> + </rule> - <rule name="MethodNamingConventions" - since="1.2" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.MethodNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#methodnamingconventions"> - <description> - Configurable naming conventions for method declarations. This rule reports - method declarations which do not match the regex that applies to their - specific kind (e.g. JUnit test or native method). Each regex can be - configured through properties. + <rule name="MethodNamingConventions" + since="1.2" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.MethodNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#methodnamingconventions"> + <description> + Configurable naming conventions for method declarations. This rule reports + method declarations which do not match the regex that applies to their + specific kind (e.g. JUnit test or native method). Each regex can be + configured through properties. - By default this rule uses the standard Java naming convention (Camel case). - </description> - <priority>1</priority> - <example> -<![CDATA[ + By default this rule uses the standard Java naming convention (Camel case). + </description> + <priority>1</priority> + <example> + <![CDATA[ public class Foo { public void fooStuff() { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="MIsLeadingVariableName" - language="java" - since="3.4" - deprecated="true" - message="Avoid naming non-fields with the prefix 'm_'" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#misleadingvariablename"> - <description> -Detects when a non-field has a name starting with 'm_'. This usually denotes a field and could be confusing. + <rule name="MIsLeadingVariableName" + language="java" + since="3.4" + deprecated="true" + message="Avoid naming non-fields with the prefix 'm_'" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#misleadingvariablename"> + <description> + Detects when a non-field has a name starting with 'm_'. This usually denotes a field and could + be confusing. -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by the more general rule -{% rule java/codestyle/LocalVariableNamingConventions %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by the more general rule + {% rule java/codestyle/LocalVariableNamingConventions %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //VariableDeclaratorId [starts-with(@Image, 'm_')] [not (../../../FieldDeclaration)] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo { private int m_foo; // OK public void bar(String m_baz) { // Bad @@ -1344,56 +1405,59 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="NoPackage" - language="java" - since="3.3" - message="All classes and interfaces must belong to a named package" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#nopackage"> - <description> -Detects when a class or interface does not have a package definition. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value>//ClassOrInterfaceDeclaration[count(preceding::PackageDeclaration) = 0]</value> - </property> - </properties> - <example> -<![CDATA[ + <rule name="NoPackage" + language="java" + since="3.3" + message="All classes and interfaces must belong to a named package" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#nopackage"> + <description> + Detects when a class or interface does not have a package definition. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value>//ClassOrInterfaceDeclaration[count(preceding::PackageDeclaration) = 0]</value> + </property> + </properties> + <example> + <![CDATA[ // no package declaration public class ClassInDefaultPackage { } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UseUnderscoresInNumericLiterals" - language="java" - since="6.10.0" - minimumLanguageVersion="1.7" - message="Number {0} should separate every third digit with an underscore" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#useunderscoresinnumericliterals"> - <description> - Since Java 1.7, numeric literals can use underscores to separate digits. This rule enforces that - numeric literals above a certain length use these underscores to increase readability. + <rule name="UseUnderscoresInNumericLiterals" + language="java" + since="6.10.0" + minimumLanguageVersion="1.7" + message="Number {0} should separate every third digit with an underscore" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#useunderscoresinnumericliterals"> + <description> + Since Java 1.7, numeric literals can use underscores to separate digits. This rule enforces + that + numeric literals above a certain length use these underscores to increase readability. - The rule only supports decimal (base 10) literals for now. The acceptable length under which literals - are not required to have underscores is configurable via a property. Even under that length, underscores - that are misplaced (not making groups of 3 digits) are reported. - </description> - <priority>3</priority> - <properties> - <property name="version" value="2.0"/> - <property name="acceptableDecimalLength" type="Integer" value="4" min="3" max="1000" - description="Length under which literals in base 10 are not required to have underscores"/> - <property name="xpath"> - <value> - <![CDATA[ + The rule only supports decimal (base 10) literals for now. The acceptable length under which + literals + are not required to have underscores is configurable via a property. Even under that length, + underscores + that are misplaced (not making groups of 3 digits) are reported. + </description> + <priority>3</priority> + <properties> + <property name="version" value="2.0"/> + <property name="acceptableDecimalLength" type="Integer" value="4" min="3" max="1000" + description="Length under which literals in base 10 are not required to have underscores"/> + <property name="xpath"> + <value> + <![CDATA[ //Literal[ @IntLiteral = true() or @LongLiteral = true() @@ -1413,29 +1477,29 @@ public class ClassInDefaultPackage { ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo { private int num = 1000000; // should be 1_000_000 } ]]> - </example> - </rule> + </example> + </rule> - <rule name="OnlyOneReturn" - since="1.0" - message="A method should have only one exit point, and that should be the last statement in the method" - class="net.sourceforge.pmd.lang.java.rule.codestyle.OnlyOneReturnRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#onlyonereturn"> - <description> -A method should have only one exit point, and that should be the last statement in the method. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="OnlyOneReturn" + since="1.0" + message="A method should have only one exit point, and that should be the last statement in the method" + class="net.sourceforge.pmd.lang.java.rule.codestyle.OnlyOneReturnRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#onlyonereturn"> + <description> + A method should have only one exit point, and that should be the last statement in the method. + </description> + <priority>3</priority> + <example> + <![CDATA[ public class OneReturnOnly1 { public void foo(int x) { if (x > 0) { @@ -1445,46 +1509,48 @@ public class OneReturnOnly1 { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="PackageCase" - language="java" - since="3.3" - message="Package name contains upper case characters" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#packagecase"> - <description> -Detects when a package definition contains uppercase characters. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value>//PackageDeclaration/Name[lower-case(@Image)!=@Image]</value> - </property> - </properties> - <example> -<![CDATA[ + <rule name="PackageCase" + language="java" + since="3.3" + message="Package name contains upper case characters" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#packagecase"> + <description> + Detects when a package definition contains uppercase characters. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value>//PackageDeclaration/Name[lower-case(@Image)!=@Image]</value> + </property> + </properties> + <example> + <![CDATA[ package com.MyCompany; // should be lowercase name public class SomeClass { } ]]> - </example> - </rule> + </example> + </rule> - <rule name="PrematureDeclaration" - language="java" - since="5.0" - message="Avoid declaring a variable if it is unreferenced before a possible exit point." - class="net.sourceforge.pmd.lang.java.rule.codestyle.PrematureDeclarationRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#prematuredeclaration"> - <description> -Checks for variables that are defined before they might be used. A reference is deemed to be premature if it is created right before a block of code that doesn't use it that also has the ability to return or throw an exception. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="PrematureDeclaration" + language="java" + since="5.0" + message="Avoid declaring a variable if it is unreferenced before a possible exit point." + class="net.sourceforge.pmd.lang.java.rule.codestyle.PrematureDeclarationRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#prematuredeclaration"> + <description> + Checks for variables that are defined before they might be used. A reference is deemed to be + premature if it is created right before a block of code that doesn't use it that also has the + ability to return or throw an exception. + </description> + <priority>3</priority> + <example> + <![CDATA[ public int getLength(String[] strings) { int length = 0; // declared prematurely @@ -1498,23 +1564,23 @@ public int getLength(String[] strings) { return length; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="RemoteInterfaceNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Remote Interface of a Session EJB should NOT be suffixed" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#remoteinterfacenamingconvention"> - <description> -Remote Interface of a Session EJB should not have a suffix. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="RemoteInterfaceNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Remote Interface of a Session EJB should NOT be suffixed" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#remoteinterfacenamingconvention"> + <description> + Remote Interface of a Session EJB should not have a suffix. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration [ ( @@ -1530,11 +1596,11 @@ Remote Interface of a Session EJB should not have a suffix. ) ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ /* Poor Session suffix */ public interface BadSuffixSession extends javax.ejb.EJBObject {} @@ -1544,23 +1610,23 @@ public interface BadSuffixEJB extends javax.ejb.EJBObject {} /* Poor Bean suffix */ public interface BadSuffixBean extends javax.ejb.EJBObject {} ]]> - </example> - </rule> + </example> + </rule> - <rule name="RemoteSessionInterfaceNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Remote Home interface of a Session EJB should be suffixed by 'Home'" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#remotesessioninterfacenamingconvention"> - <description> -A Remote Home interface type of a Session EJB should be suffixed by 'Home'. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="RemoteSessionInterfaceNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Remote Home interface of a Session EJB should be suffixed by 'Home'" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#remotesessioninterfacenamingconvention"> + <description> + A Remote Home interface type of a Session EJB should be suffixed by 'Home'. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration [ ( @@ -1573,92 +1639,95 @@ A Remote Home interface type of a Session EJB should be suffixed by 'Home'. ) ] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public interface MyBeautifulHome extends javax.ejb.EJBHome {} // proper name public interface MissingProperSuffix extends javax.ejb.EJBHome {} // non-standard name ]]> - </example> - </rule> + </example> + </rule> - <rule name="ShortClassName" - language="java" - since="5.0" - message="Avoid short class names like {0}" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortclassname"> - <description> -Short Classnames with fewer than e.g. five characters are not recommended. - </description> - <priority>4</priority> - <properties> - <property name="minimum" type="Integer" value="5" min="1" max="100" description="Number of characters that are required as a minimum for a class name."/> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="ShortClassName" + language="java" + since="5.0" + message="Avoid short class names like {0}" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortclassname"> + <description> + Short Classnames with fewer than e.g. five characters are not recommended. + </description> + <priority>4</priority> + <properties> + <property name="minimum" type="Integer" value="5" min="1" max="100" + description="Number of characters that are required as a minimum for a class name."/> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration[string-length(@Image) < $minimum] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo { } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ShortMethodName" - language="java" - since="0.3" - message="Avoid using short method names" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortmethodname"> - <description> -Method names that are very short are not helpful to the reader. - </description> - <priority>3</priority> - <properties> - <property name="minimum" type="Integer" value="3" min="1" max="100" description="Number of characters that are required as a minimum for a method name."/> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="ShortMethodName" + language="java" + since="0.3" + message="Avoid using short method names" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortmethodname"> + <description> + Method names that are very short are not helpful to the reader. + </description> + <priority>3</priority> + <properties> + <property name="minimum" type="Integer" value="3" min="1" max="100" + description="Number of characters that are required as a minimum for a method name."/> + <property name="xpath"> + <value> + <![CDATA[ //MethodDeclarator[string-length(@Image) < $minimum] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class ShortMethod { public void a( int i ) { // Violation } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ShortVariable" - language="java" - since="0.3" - message="Avoid variables with short names like {0}" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortvariable"> - <description> -Fields, local variables, or parameter names that are very short are not helpful to the reader. - </description> - <priority>3</priority> - <properties> - <property name="minimum" type="Integer" value="3" min="1" max="100" description="Number of characters that are required as a minimum for a variable name."/> - <property name="version" value="2.0"/> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="ShortVariable" + language="java" + since="0.3" + message="Avoid variables with short names like {0}" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortvariable"> + <description> + Fields, local variables, or parameter names that are very short are not helpful to the reader. + </description> + <priority>3</priority> + <properties> + <property name="minimum" type="Integer" value="3" min="1" max="100" + description="Number of characters that are required as a minimum for a variable name."/> + <property name="version" value="2.0"/> + <property name="xpath"> + <value> + <![CDATA[ //VariableDeclaratorId[string-length(@Image) < $minimum] (: ForStatement :) [not(../../..[self::ForInit])] @@ -1669,11 +1738,11 @@ Fields, local variables, or parameter names that are very short are not helpful (: Lambda expression parameter :) [not(parent::LambdaExpression or ../../..[self::LambdaExpression])] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Something { private int q = 15; // field - too short public static void main( String as[] ) { // formal arg - too short @@ -1687,38 +1756,39 @@ public class Something { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="SuspiciousConstantFieldName" - language="java" - since="2.0" - deprecated="true" - message="The field name indicates a constant but its modifiers do not" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#suspiciousconstantfieldname"> - <description> -Field names using all uppercase characters - Sun's Java naming conventions indicating constants - should -be declared as final. + <rule name="SuspiciousConstantFieldName" + language="java" + since="2.0" + deprecated="true" + message="The field name indicates a constant but its modifiers do not" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#suspiciousconstantfieldname"> + <description> + Field names using all uppercase characters - Sun's Java naming conventions indicating + constants - should + be declared as final. -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by the more general rule {% rule java/codestyle/FieldNamingConventions %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by the more general rule {% rule java/codestyle/FieldNamingConventions %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //ClassOrInterfaceDeclaration[@Interface='false'] /ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/FieldDeclaration [@Final='false'] [VariableDeclarator/VariableDeclaratorId[upper-case(@Image)=@Image]] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo { // this is bad, since someone could accidentally // do PI = 2.71828; which is actually e @@ -1726,56 +1796,57 @@ public class Foo { double PI = 3.16; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="TooManyStaticImports" - language="java" - since="4.1" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Too many static imports may lead to messy code" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#toomanystaticimports"> - <description> -If you overuse the static import feature, it can make your program unreadable and -unmaintainable, polluting its namespace with all the static members you import. -Readers of your code (including you, a few months after you wrote it) will not know -which class a static member comes from (Sun 1.5 Language Guide). - </description> - <priority>3</priority> - <properties> - <property name="maximumStaticImports" type="Integer" - description="All static imports can be disallowed by setting this to 0" min="0" max="100" value="4"/> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="TooManyStaticImports" + language="java" + since="4.1" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Too many static imports may lead to messy code" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#toomanystaticimports"> + <description> + If you overuse the static import feature, it can make your program unreadable and + unmaintainable, polluting its namespace with all the static members you import. + Readers of your code (including you, a few months after you wrote it) will not know + which class a static member comes from (Sun 1.5 Language Guide). + </description> + <priority>3</priority> + <properties> + <property name="maximumStaticImports" type="Integer" + description="All static imports can be disallowed by setting this to 0" min="0" max="100" + value="4"/> + <property name="xpath"> + <value> + <![CDATA[ .[count(ImportDeclaration[@Static = 'true']) > $maximumStaticImports] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ import static Lennon; import static Ringo; import static George; import static Paul; import static Yoko; // Too much ! ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryAnnotationValueElement" - since="6.2.0" - message="Avoid the use of value in annotations when it's the only element" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryAnnotationValueElementRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryannotationvalueelement"> - <description> - Avoid the use of value in annotations when it's the only element. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="UnnecessaryAnnotationValueElement" + since="6.2.0" + message="Avoid the use of value in annotations when it's the only element" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryAnnotationValueElementRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryannotationvalueelement"> + <description> + Avoid the use of value in annotations when it's the only element. + </description> + <priority>3</priority> + <example> + <![CDATA[ @TestClassAnnotation(value = "TEST") public class Foo { @@ -1805,44 +1876,49 @@ public class Foo { } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryConstructor" - language="java" - since="1.0" - message="Avoid unnecessary constructors - the compiler will generate these for you" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryConstructorRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryconstructor"> - <description> -This rule detects when a constructor is not necessary; i.e., when there is only one constructor and the -constructor is identical to the default constructor. The default constructor should has same access -modifier as the declaring class. In an enum type, the default constructor is implicitly private. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="UnnecessaryConstructor" + language="java" + since="1.0" + message="Avoid unnecessary constructors - the compiler will generate these for you" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryConstructorRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryconstructor"> + <description> + This rule detects when a constructor is not necessary; i.e., when there is only one + constructor and the + constructor is identical to the default constructor. The default constructor should has same + access + modifier as the declaring class. In an enum type, the default constructor is implicitly + private. + </description> + <priority>3</priority> + <example> + <![CDATA[ public class Foo { public Foo() {} } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryFullyQualifiedName" - language="java" - since="5.0" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryFullyQualifiedNameRule" - message="Unnecessary use of fully qualified name ''{0}'' due to existing {2}import ''{1}''" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname"> - <description> -Import statements allow the use of non-fully qualified names. The use of a fully qualified name -which is covered by an import statement is redundant. Consider using the non-fully qualified name. - </description> - <priority>4</priority> - <example> -<![CDATA[ + <rule name="UnnecessaryFullyQualifiedName" + language="java" + since="5.0" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryFullyQualifiedNameRule" + message="Unnecessary use of fully qualified name ''{0}'' due to existing {2}import ''{1}''" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname"> + <description> + Import statements allow the use of non-fully qualified names. The use of a fully qualified + name + which is covered by an import statement is redundant. Consider using the non-fully qualified + name. + </description> + <priority>4</priority> + <example> + <![CDATA[ import java.util.List; public class Foo { @@ -1850,20 +1926,20 @@ public class Foo { private List list2; // More appropriate given import of 'java.util.List' } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryLocalBeforeReturn" - since="3.3" - message="Consider simply returning the value vs storing it in local variable ''{0}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryLocalBeforeReturnRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarylocalbeforereturn"> - <description> -Avoid the creation of unnecessary local variables - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="UnnecessaryLocalBeforeReturn" + since="3.3" + message="Consider simply returning the value vs storing it in local variable ''{0}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryLocalBeforeReturnRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarylocalbeforereturn"> + <description> + Avoid the creation of unnecessary local variables + </description> + <priority>3</priority> + <example> + <![CDATA[ public class Foo { public int foo() { int x = doSomething(); @@ -1871,25 +1947,28 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryModifier" - language="java" - since="1.02" - message="Unnecessary modifier{0} on {1} ''{2}''{3}" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryModifierRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarymodifier"> - <description> -Fields in interfaces and annotations are automatically `public static final`, and methods are `public abstract`. -Classes, interfaces or annotations nested in an interface or annotation are automatically `public static` -(all nested interfaces and annotations are automatically static). -Nested enums are automatically `static`. -For historical reasons, modifiers which are implied by the context are accepted by the compiler, but are superfluous. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="UnnecessaryModifier" + language="java" + since="1.02" + message="Unnecessary modifier{0} on {1} ''{2}''{3}" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryModifierRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarymodifier"> + <description> + Fields in interfaces and annotations are automatically `public static final`, and methods are + `public abstract`. + Classes, interfaces or annotations nested in an interface or annotation are automatically + `public static` + (all nested interfaces and annotations are automatically static). + Nested enums are automatically `static`. + For historical reasons, modifiers which are implied by the context are accepted by the + compiler, but are superfluous. + </description> + <priority>3</priority> + <example> + <![CDATA[ public @interface Annotation { public abstract void bar(); // both abstract and public are ignored by the compiler public static final int X = 0; // public, static, and final all ignored @@ -1909,20 +1988,20 @@ public class Bar { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryReturn" - since="1.3" - message="Avoid unnecessary return statements" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryReturnRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryreturn"> - <description> -Avoid the use of unnecessary return statements. - </description> - <priority>3</priority> - <example> -<![CDATA[ + <rule name="UnnecessaryReturn" + since="1.3" + message="Avoid unnecessary return statements" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryReturnRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryreturn"> + <description> + Avoid the use of unnecessary return statements. + </description> + <priority>3</priority> + <example> + <![CDATA[ public class Foo { public void bar() { int x = 42; @@ -1930,27 +2009,28 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UseDiamondOperator" - language="java" - since="6.11.0" - message="Explicit type arguments can be replaced by Diamond Operator" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#usediamondoperator" - minimumLanguageVersion="1.7"> - <description> -Use the diamond operator to let the type be inferred automatically. With the Diamond operator it is possible -to avoid duplication of the type parameters. -Instead, the compiler is now able to infer the parameter types for constructor calls, -which makes the code also more readable. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="UseDiamondOperator" + language="java" + since="6.11.0" + message="Explicit type arguments can be replaced by Diamond Operator" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#usediamondoperator" + minimumLanguageVersion="1.7"> + <description> + Use the diamond operator to let the type be inferred automatically. With the Diamond operator + it is possible + to avoid duplication of the type parameters. + Instead, the compiler is now able to infer the parameter types for constructor calls, + which makes the code also more readable. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //VariableInitializer //PrimaryExpression[not(PrimarySuffix)] [not(ancestor::ArgumentList)] @@ -1961,29 +2041,29 @@ which makes the code also more readable. [not(ancestor::ArgumentList)] /PrimaryPrefix/AllocationExpression[ClassOrInterfaceType[@AnonymousClass='false']/TypeArguments//ReferenceType[not(.//TypeArguments)]] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ List<String> strings = new ArrayList<String>(); // unnecessary duplication of type parameters List<String> stringsWithDiamond = new ArrayList<>(); // using the diamond operator is more concise ]]> - </example> - </rule> + </example> + </rule> - <rule name="UselessParentheses" - language="java" - since="5.0" - message="Useless parentheses." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#uselessparentheses"> - <description>Useless parentheses should be removed.</description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="UselessParentheses" + language="java" + since="5.0" + message="Useless parentheses." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#uselessparentheses"> + <description>Useless parentheses should be removed.</description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //Expression[not(parent::PrimaryPrefix)]/PrimaryExpression[count(*)>1] /PrimaryPrefix/Expression [not(./CastExpression)] @@ -2039,11 +2119,11 @@ List<String> stringsWithDiamond = new ArrayList<>(); // using the diamond operat not(./ConditionalOrExpression) and not(./EqualityExpression)] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo { private int _bar1; @@ -2055,23 +2135,23 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UselessQualifiedThis" - language="java" - since="5.4.0" - message="Useless qualified this usage in the same class." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#uselessqualifiedthis"> - <description> - Reports qualified this usages in the same class. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ + <rule name="UselessQualifiedThis" + language="java" + since="5.4.0" + message="Useless qualified this usage in the same class." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#uselessqualifiedthis"> + <description> + Reports qualified this usages in the same class. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //PrimaryExpression [PrimaryPrefix/Name[@Image]] [PrimarySuffix[@Arguments='false' and @ArrayDereference = 'false']] @@ -2079,11 +2159,11 @@ public class Foo { [ancestor::ClassOrInterfaceBodyDeclaration[1][@AnonymousInnerClass='false']] /PrimaryPrefix/Name[@Image = ancestor::ClassOrInterfaceDeclaration[1]/@Image] ]]> - </value> - </property> - </properties> - <example> -<![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo { final Foo otherFoo = Foo.this; // use "this" directly @@ -2109,60 +2189,60 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="VariableNamingConventions" - since="1.2" - deprecated="true" - message="{0} variable {1} should begin with {2}" - class="net.sourceforge.pmd.lang.java.rule.codestyle.VariableNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#variablenamingconventions"> - <description> -A variable naming conventions rule - customize this to your liking. Currently, it -checks for final variables that should be fully capitalized and non-final variables -that should not include underscores. + <rule name="VariableNamingConventions" + since="1.2" + deprecated="true" + message="{0} variable {1} should begin with {2}" + class="net.sourceforge.pmd.lang.java.rule.codestyle.VariableNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#variablenamingconventions"> + <description> + A variable naming conventions rule - customize this to your liking. Currently, it + checks for final variables that should be fully capitalized and non-final variables + that should not include underscores. -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by the more general rules {% rule java/codestyle/FieldNamingConventions %}, -{% rule java/codestyle/FormalParameterNamingConventions %}, and -{% rule java/codestyle/LocalVariableNamingConventions %}. - </description> - <priority>1</priority> - <example> -<![CDATA[ + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by the more general rules {% rule java/codestyle/FieldNamingConventions %}, + {% rule java/codestyle/FormalParameterNamingConventions %}, and + {% rule java/codestyle/LocalVariableNamingConventions %}. + </description> + <priority>1</priority> + <example> + <![CDATA[ public class Foo { public static final int MY_NUM = 0; public String myTest = ""; DataModule dmTest = new DataModule(); } ]]> - </example> - </rule> + </example> + </rule> - <rule name="WhileLoopsMustUseBraces" - language="java" - since="0.7" - deprecated="true" - message="Avoid using 'while' statements without curly braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#whileloopsmustusebraces"> - <description> -Avoid using 'while' statements without using braces to surround the code block. If the code -formatting or indentation is lost then it becomes difficult to separate the code being -controlled from the rest. + <rule name="WhileLoopsMustUseBraces" + language="java" + since="0.7" + deprecated="true" + message="Avoid using 'while' statements without curly braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#whileloopsmustusebraces"> + <description> + Avoid using 'while' statements without using braces to surround the code block. If the code + formatting or indentation is lost then it becomes difficult to separate the code being + controlled from the rest. -This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced -by the rule {% rule java/codestyle/ControlStatementBraces %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value>//WhileStatement[not(Statement/Block)]</value> - </property> - </properties> - <example> -<![CDATA[ + This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced + by the rule {% rule java/codestyle/ControlStatementBraces %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value>//WhileStatement[not(Statement/Block)]</value> + </property> + </properties> + <example> + <![CDATA[ while (true) // not recommended x++; @@ -2170,7 +2250,7 @@ while (true) { // preferred approach x++; } ]]> - </example> - </rule> + </example> + </rule> </ruleset> diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRuleTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java similarity index 65% rename from pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRuleTest.java rename to pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java index 01d3256fb7..6f2d189eb0 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayDeclarationVerbosenessRuleTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java @@ -2,6 +2,6 @@ package net.sourceforge.pmd.lang.java.rule.codestyle; import net.sourceforge.pmd.testframework.PmdRuleTst; -public class ArrayDeclarationVerbosenessRuleTest extends PmdRuleTst { +public class ArrayInitializationVerbosenessRuleTest extends PmdRuleTst { // no additional unit tests } From f751c3b64058a34dfbc6e204b7af76f444440187 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 13:27:56 -0500 Subject: [PATCH 004/371] Added test cases --- .../xml/ArrayInitializationVerboseness.xml | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml new file mode 100644 index 0000000000..42add35368 --- /dev/null +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + <test-code> + <description><![CDATA[ +simple failure case + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Foo { + void foo() { + int[] x = new int[] {1,2,3}; + } +} + ]]></code> + </test-code> + <test-code> + <description><![CDATA[ +ok + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + void foo() { + int[] x = {1,2,3}; + } +} + ]]></code> + </test-code> +</test-data> \ No newline at end of file From d4829281f2117765017237953ec97d81acceb166 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 15:15:22 -0500 Subject: [PATCH 005/371] Version no fix, revert auto-formatting --- .../resources/category/java/codestyle.xml | 262 +++++------------- 1 file changed, 66 insertions(+), 196 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 29acc9947d..c3e22c50c9 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -38,8 +38,7 @@ ]]> </value> </property> - <property name="strict" type="Boolean" value="true" - description="Also flag classes, that are named Abstract, but are not abstract."/> + <property name="strict" type="Boolean" value="true" description="Also flag classes, that are named Abstract, but are not abstract."/> </properties> <example> <![CDATA[ @@ -156,10 +155,8 @@ public class MyClass { message="Avoid prefixing parameters by in, out or inOut. Uses Javadoc to document this behavior." externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprefixingmethodparameters"> <description> - Prefixing parameters by 'in' or 'out' pollutes the name of the parameters and reduces code - readability. - To indicate whether or not a parameter will be modify in a method, its better to document - method + Prefixing parameters by 'in' or 'out' pollutes the name of the parameters and reduces code readability. + To indicate whether or not a parameter will be modify in a method, its better to document method behavior with Javadoc. This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced @@ -248,11 +245,9 @@ public final class Bar { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending"> <description> - Do not use protected methods in most final classes since they cannot be subclassed. This - should + Do not use protected methods in most final classes since they cannot be subclassed. This should only be allowed in final classes that extend other classes with protected methods (whose - visibility cannot be reduced). Clarify your intent by using private or package access - modifiers instead. + visibility cannot be reduced). Clarify your intent by using private or package access modifiers instead. </description> <priority>3</priority> <properties> @@ -283,8 +278,7 @@ public final class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidusingnativecode"> <description> - Unnecessary reliance on Java Native Interface (JNI) calls directly reduces application - portability + Unnecessary reliance on Java Native Interface (JNI) calls directly reduces application portability and increases the maintenance burden. </description> <priority>2</priority> @@ -296,15 +290,12 @@ public final class Foo { <example> <![CDATA[ public class SomeJNIClass { - public SomeJNIClass() { System.loadLibrary("nativelib"); } - static { System.loadLibrary("nativelib"); } - public void invalidCallsInMethod() throws SecurityException, NoSuchMethodException { System.loadLibrary("nativelib"); } @@ -321,7 +312,7 @@ public class SomeJNIClass { externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#booleangetmethodname"> <description> Methods that return boolean results should be named as predicate statements to denote this. - I.e, 'isReady()', 'hasValues()', 'canCommit()', 'willFail()', etc. Avoid the use of the 'get' + I.e, 'isReady()', 'hasValues()', 'canCommit()', 'willFail()', etc. Avoid the use of the 'get' prefix for these methods. </description> <priority>4</priority> @@ -339,8 +330,7 @@ and not(../Annotation//Name[@Image = 'Override']) ]]> </value> </property> - <property name="checkParameterizedMethods" type="Boolean" - description="Check parameterized methods" value="false"/> + <property name="checkParameterizedMethods" type="Boolean" description="Check parameterized methods" value="false"/> </properties> <example> <![CDATA[ @@ -359,8 +349,7 @@ public boolean getFoo(boolean bar); // ok, unless checkParameterizedMethods=true externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#callsuperinconstructor"> <description> It is a good practice to call super() in a constructor. If super() is not called but - another constructor (such as an overloaded constructor) is called, this rule will not report - it. + another constructor (such as an overloaded constructor) is called, this rule will not report it. </description> <priority>3</priority> <properties> @@ -410,15 +399,13 @@ public class Foo extends Bar{ <example> <![CDATA[ // This is Pascal case, the recommended naming convention in Java -// Note that the default values of this rule don't allow underscores +// Note that the default values of this rule don't allow underscores // or accented characters in type names public class FooBar {} - // You may want abstract classes to be named 'AbstractXXX', // in which case you can customize the regex for abstract // classes to 'Abstract[A-Z]\w+' public abstract class Thing {} - // This class doesn't respect the convention, and will be flagged public class Éléphant {} ]]> @@ -431,11 +418,9 @@ public class Éléphant {} message="Missing commented default access modifier" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier"> <description> - To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default - access modifier + To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default access modifier we must add a comment at the beginning of it's declaration. - By default the comment must be /* default */ or /* package */, if you want another, you have - to provide a regular expression. + By default the comment must be /* default */ or /* package */, if you want another, you have to provide a regular expression. This rule ignores by default all cases that have a @VisibleForTesting annotation. Use the property "ignoredAnnotations" to customize the recognized annotations. </description> @@ -447,18 +432,15 @@ public class Foo { String getString() { return stringValue; } - class NestedFoo { } } - // should be public class Foo { /* default */ final String stringValue = "some string"; /* default */ String getString() { return stringValue; } - /* default */ class NestedFoo { } } @@ -472,11 +454,11 @@ public class Foo { class="net.sourceforge.pmd.lang.java.rule.codestyle.ConfusingTernaryRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#confusingternary"> <description> - Avoid negation within an "if" expression with an "else" clause. For example, rephrase: + Avoid negation within an "if" expression with an "else" clause. For example, rephrase: `if (x != y) diff(); else same();` as: `if (x == y) same(); else diff();`. Most "if (x != y)" cases without an "else" are often return cases, so consistent use of this - rule makes the code easier to read. Also, this resolves trivial ordering problems, such + rule makes the code easier to read. Also, this resolves trivial ordering problems, such as "does the error case go first?" or "does the common case go first?". </description> <priority>3</priority> @@ -496,35 +478,24 @@ boolean bar(int x, int y) { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#controlstatementbraces"> <description> - Enforce a policy for braces on control statements. It is recommended to use braces on 'if ... - else' - statements and loop statements, even if they are optional. This usually makes the code - clearer, and - helps prepare the future when you need to add another statement. That said, this rule lets you - control + Enforce a policy for braces on control statements. It is recommended to use braces on 'if ... else' + statements and loop statements, even if they are optional. This usually makes the code clearer, and + helps prepare the future when you need to add another statement. That said, this rule lets you control which statements are required to have braces via properties. - From 6.2.0 on, this rule supersedes WhileLoopMustUseBraces, ForLoopMustUseBraces, - IfStmtMustUseBraces, + From 6.2.0 on, this rule supersedes WhileLoopMustUseBraces, ForLoopMustUseBraces, IfStmtMustUseBraces, and IfElseStmtMustUseBraces. </description> <priority>3</priority> <properties> - <property name="checkIfElseStmt" type="Boolean" value="true" - description="Require that 'if ... else' statements use braces"/> - <property name="checkSingleIfStmt" type="Boolean" value="true" - description="Require that 'if' statements with a single branch use braces"/> - <property name="checkWhileStmt" type="Boolean" value="true" - description="Require that 'while' loops use braces"/> - <property name="checkForStmt" type="Boolean" value="true" - description="Require that 'for' loops should use braces"/> - <property name="checkDoWhileStmt" type="Boolean" value="true" - description="Require that 'do ... while' loops use braces"/> - <property name="checkCaseStmt" type="Boolean" value="false" - description="Require that cases of a switch have braces"/> + <property name="checkIfElseStmt" type="Boolean" value="true" description="Require that 'if ... else' statements use braces" /> + <property name="checkSingleIfStmt" type="Boolean" value="true" description="Require that 'if' statements with a single branch use braces" /> + <property name="checkWhileStmt" type="Boolean" value="true" description="Require that 'while' loops use braces" /> + <property name="checkForStmt" type="Boolean" value="true" description="Require that 'for' loops should use braces" /> + <property name="checkDoWhileStmt" type="Boolean" value="true" description="Require that 'do ... while' loops use braces" /> + <property name="checkCaseStmt" type="Boolean" value="false" description="Require that cases of a switch have braces"/> - <property name="allowEmptyLoop" type="Boolean" value="false" - description="Allow loops with an empty statement, e.g. 'while(true);'"/> + <property name="allowEmptyLoop" type="Boolean" value="false" description="Allow loops with an empty statement, e.g. 'while(true);'" /> <property name="version" value="2.0"/> <property name="xpath"> @@ -557,7 +528,6 @@ boolean bar(int x, int y) { <![CDATA[ while (true) // not recommended x++; - while (true) { // preferred approach x++; } @@ -600,20 +570,15 @@ or MethodDeclaration[@PackagePrivate='true'] class="net.sourceforge.pmd.lang.java.rule.codestyle.DontImportJavaLangRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#dontimportjavalang"> <description> - Avoid importing anything from the package 'java.lang'. These classes are automatically - imported (JLS 7.5.3). + Avoid importing anything from the package 'java.lang'. These classes are automatically imported (JLS 7.5.3). </description> <priority>4</priority> <example> <![CDATA[ import java.lang.String; // this is unnecessary - public class Foo {} - // --- in another source code file... - import java.lang.*; // this is bad - public class Foo {} ]]> </example> @@ -644,8 +609,7 @@ public class Foo {} message="An empty method in an abstract class should be abstract instead" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#emptymethodinabstractclassshouldbeabstract"> <description> - Empty or auto-generated methods in an abstract class should be tagged as abstract. This helps - to remove their inapproprate + Empty or auto-generated methods in an abstract class should be tagged as abstract. This helps to remove their inapproprate usage by developers who should be implementing their own versions in the concrete subclasses. </description> <priority>1</priority> @@ -679,7 +643,6 @@ public abstract class ShouldBeAbstract { // Should be abstract method ? return null; } - public void couldBeAbstract() { } } @@ -719,21 +682,17 @@ public class Foo extends Object { // not required class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldDeclarationsShouldBeAtStartOfClassRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fielddeclarationsshouldbeatstartofclass"> <description> - Fields should be declared at the top of the class, before any method declarations, - constructors, initializers or inner classes. + Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes. </description> <priority>3</priority> <example> <![CDATA[ public class HelloWorldBean { - // Field declared before methods / inner classes - OK private String _thing; - public String getMessage() { return "Hello World!"; } - // Field declared after methods / inner classes - avoid this private String _fieldInWrongLocation; } @@ -748,14 +707,11 @@ public class HelloWorldBean { class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldNamingConventionsRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fieldnamingconventions"> <description> - Configurable naming conventions for field declarations. This rule reports variable - declarations - which do not match the regex that applies to their specific kind ---e.g. constants (static - final), + Configurable naming conventions for field declarations. This rule reports variable declarations + which do not match the regex that applies to their specific kind ---e.g. constants (static final), enum constant, final field. Each regex can be configured through properties. - By default this rule uses the standard Java naming convention (Camel case), and uses the - ALL_UPPER + By default this rule uses the standard Java naming convention (Camel case), and uses the ALL_UPPER convention for constants and enum constants. </description> <priority>1</priority> @@ -765,14 +721,11 @@ public class HelloWorldBean { int myField = 1; // This is in camel case, so it's ok int my_Field = 1; // This contains an underscore, it's not ok by default // but you may allow it, or even require the "my_" prefix - final int FinalField = 1; // you may configure a different convention for final fields, // e.g. here PascalCase: [A-Z][a-zA-Z0-9]* - interface Interface { double PI = 3.14; // interface "fields" use the constantPattern property } - enum AnEnum { ORG, NET, COM; // These use a separate property but are set to ALL_UPPER by default } @@ -861,23 +814,15 @@ for (int i = 0; i < 42; i++) <example> <![CDATA[ class Foo { - abstract void bar(int myInt); // This is Camel case, so it's ok - void bar(int my_i) { // this will be reported - } - void lambdas() { - // lambdas parameters can be configured separately Consumer<String> lambda1 = s_str -> { }; - // lambda parameters with an explicit type can be configured separately Consumer<String> lambda1 = (String str) -> { }; - } - } ]]> </example> @@ -898,7 +843,7 @@ for (int i = 0; i < 42; i++) <value> <![CDATA[ //TypeDeclaration/ClassOrInterfaceDeclaration/TypeParameters/TypeParameter[ - string-length(@Image) > 1 + string-length(@Image) > 1 or string:upper-case(@Image) != @Image ] @@ -911,15 +856,12 @@ for (int i = 0; i < 42; i++) public interface GenericDao<E extends BaseModel, K extends Serializable> extends BaseDao { // This is ok... } - public interface GenericDao<E extends BaseModel, K extends Serializable> { // Also this } - public interface GenericDao<e extends BaseModel, K extends Serializable> { // 'e' should be an 'E' } - public interface GenericDao<EF extends BaseModel, K extends Serializable> { // 'EF' is not ok. } @@ -937,8 +879,7 @@ public interface GenericDao<EF extends BaseModel, K extends Serializable> { externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#identicalcatchbranches"> <description> Identical `catch` branches use up vertical space and increase the complexity of code without - adding functionality. It's better style to collapse identical branches into a single - multi-catch + adding functionality. It's better style to collapse identical branches into a single multi-catch branch. </description> <priority>3</priority> @@ -951,7 +892,6 @@ try { } catch (IllegalStateException e) { // Can be collapsed into the previous block throw e; } - try { // do something } catch (IllegalArgumentException | IllegalStateException e) { // This is better @@ -993,7 +933,6 @@ try { <![CDATA[ // this is OK if (foo) x++; - // but this is not if (foo) x = x+1; @@ -1032,11 +971,9 @@ if (foo) <![CDATA[ if (foo) // not recommended x++; - if (foo) { // preferred approach x++; } - ]]> </example> </rule> @@ -1049,18 +986,12 @@ if (foo) { // preferred approach externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#linguisticnaming" typeResolution="true"> <description> - This rule finds Linguistic Naming Antipatterns. It checks for fields, that are named, as if - they should - be boolean but have a different type. It also checks for methods, that according to their - name, should - return a boolean, but don't. Further, it checks, that getters return something and setters - won't. - Finally, it checks that methods, that start with "to" - so called transform methods - actually - return - something, since according to their name, they should convert or transform one object into - another. - There is additionally an option, to check for methods that contain "To" in their name - which - are + This rule finds Linguistic Naming Antipatterns. It checks for fields, that are named, as if they should + be boolean but have a different type. It also checks for methods, that according to their name, should + return a boolean, but don't. Further, it checks, that getters return something and setters won't. + Finally, it checks that methods, that start with "to" - so called transform methods - actually return + something, since according to their name, they should convert or transform one object into another. + There is additionally an option, to check for methods that contain "To" in their name - which are also transform methods. However, this is disabled by default, since this detection is prone to false positives. @@ -1073,12 +1004,10 @@ if (foo) { // preferred approach public class LinguisticNaming { int isValid; // the field name indicates a boolean, but it is an int. boolean isTrue; // correct type of the field - void myMethod() { int hasMoneyLocal; // the local variable name indicates a boolean, but it is an int. boolean hasSalaryLocal; // correct naming and type } - // the name of the method indicates, it is a boolean, but the method returns an int. int isValid() { return 1; @@ -1087,17 +1016,14 @@ public class LinguisticNaming { boolean isSmall() { return true; } - // the name indicates, this is a setter, but it returns something int setName() { return 1; } - // the name indicates, this is a getter, but it doesn't return anything void getName() { // nothing to return? } - // the name indicates, it transforms an object and should return the result void toDataType() { // nothing to return? @@ -1143,7 +1069,6 @@ public class LinguisticNaming { <example> <![CDATA[ public interface MyBeautifulLocalHome extends javax.ejb.EJBLocalHome {} // proper name - public interface MissingProperSuffix extends javax.ejb.EJBLocalHome {} // non-standard name ]]> </example> @@ -1181,7 +1106,6 @@ public interface MissingProperSuffix extends javax.ejb.EJBLocalHome {} // non-s <example> <![CDATA[ public interface MyLocal extends javax.ejb.EJBLocalObject {} // proper name - public interface MissingProperSuffix extends javax.ejb.EJBLocalObject {} // non-standard name ]]> </example> @@ -1215,10 +1139,8 @@ public class Bar { externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablenamingconventions"> <description> Configurable naming conventions for local variable declarations and other locally-scoped - variables. This rule reports variable declarations which do not match the regex that applies - to their - specific kind (e.g. final variable, or catch-clause parameter). Each regex can be configured - through + variables. This rule reports variable declarations which do not match the regex that applies to their + specific kind (e.g. final variable, or catch-clause parameter). Each regex can be configured through properties. By default this rule uses the standard Java naming convention (Camel case). @@ -1230,15 +1152,12 @@ public class Bar { void bar() { int localVariable = 1; // This is in camel case, so it's ok int local_variable = 1; // This will be reported unless you change the regex - final int i_var = 1; // final local variables can be configured separately - try { foo(); } catch (IllegalArgumentException e_illegal) { // exception block parameters can be configured separately } - } } ]]> @@ -1252,13 +1171,11 @@ public class Bar { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#longvariable"> <description> - Fields, formal arguments, or local variable names that are too long can make the code - difficult to follow. + Fields, formal arguments, or local variable names that are too long can make the code difficult to follow. </description> <priority>3</priority> <properties> - <property name="minimum" type="Integer" description="The variable length reporting threshold" - min="1" max="100" value="17"/> + <property name="minimum" type="Integer" description="The variable length reporting threshold" min="1" max="100" value="17"/> <property name="xpath"> <value> <![CDATA[ @@ -1289,8 +1206,7 @@ public class Something { message="SessionBean or MessageBean should be suffixed by Bean" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#mdbandsessionbeannamingconvention"> <description> - The EJB Specification states that any MessageDrivenBean or SessionBean should be suffixed by - 'Bean'. + The EJB Specification states that any MessageDrivenBean or SessionBean should be suffixed by 'Bean'. </description> <priority>4</priority> <properties> @@ -1317,7 +1233,6 @@ public class Something { <example> <![CDATA[ public class SomeBean implements SessionBean{} // proper name - public class MissingTheProperSuffix implements SessionBean {} // non-standard name ]]> </example> @@ -1335,11 +1250,8 @@ public class MissingTheProperSuffix implements SessionBean {} // non-standard <example> <![CDATA[ public void foo1 (String param) { // do stuff with param never assigning it - } - public void foo2 (final String param) { // better, do stuff with param never assigning it - } ]]> </example> @@ -1377,8 +1289,7 @@ public class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#misleadingvariablename"> <description> - Detects when a non-field has a name starting with 'm_'. This usually denotes a field and could - be confusing. + Detects when a non-field has a name starting with 'm_'. This usually denotes a field and could be confusing. This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced by the more general rule @@ -1440,14 +1351,11 @@ public class ClassInDefaultPackage { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#useunderscoresinnumericliterals"> <description> - Since Java 1.7, numeric literals can use underscores to separate digits. This rule enforces - that + Since Java 1.7, numeric literals can use underscores to separate digits. This rule enforces that numeric literals above a certain length use these underscores to increase readability. - The rule only supports decimal (base 10) literals for now. The acceptable length under which - literals - are not required to have underscores is configurable via a property. Even under that length, - underscores + The rule only supports decimal (base 10) literals for now. The acceptable length under which literals + are not required to have underscores is configurable via a property. Even under that length, underscores that are misplaced (not making groups of 3 digits) are reported. </description> <priority>3</priority> @@ -1530,7 +1438,6 @@ public class OneReturnOnly1 { <example> <![CDATA[ package com.MyCompany; // should be lowercase name - public class SomeClass { } ]]> @@ -1544,23 +1451,17 @@ public class SomeClass { class="net.sourceforge.pmd.lang.java.rule.codestyle.PrematureDeclarationRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#prematuredeclaration"> <description> - Checks for variables that are defined before they might be used. A reference is deemed to be - premature if it is created right before a block of code that doesn't use it that also has the - ability to return or throw an exception. + Checks for variables that are defined before they might be used. A reference is deemed to be premature if it is created right before a block of code that doesn't use it that also has the ability to return or throw an exception. </description> <priority>3</priority> <example> <![CDATA[ public int getLength(String[] strings) { - int length = 0; // declared prematurely - if (strings == null || strings.length == 0) return 0; - for (String str : strings) { length += str.length(); } - return length; } ]]> @@ -1603,10 +1504,8 @@ public int getLength(String[] strings) { <![CDATA[ /* Poor Session suffix */ public interface BadSuffixSession extends javax.ejb.EJBObject {} - /* Poor EJB suffix */ public interface BadSuffixEJB extends javax.ejb.EJBObject {} - /* Poor Bean suffix */ public interface BadSuffixBean extends javax.ejb.EJBObject {} ]]> @@ -1645,7 +1544,6 @@ public interface BadSuffixBean extends javax.ejb.EJBObject {} <example> <![CDATA[ public interface MyBeautifulHome extends javax.ejb.EJBHome {} // proper name - public interface MissingProperSuffix extends javax.ejb.EJBHome {} // non-standard name ]]> </example> @@ -1662,8 +1560,7 @@ public interface MissingProperSuffix extends javax.ejb.EJBHome {} // non-stand </description> <priority>4</priority> <properties> - <property name="minimum" type="Integer" value="5" min="1" max="100" - description="Number of characters that are required as a minimum for a class name."/> + <property name="minimum" type="Integer" value="5" min="1" max="100" description="Number of characters that are required as a minimum for a class name."/> <property name="xpath"> <value> <![CDATA[ @@ -1691,8 +1588,7 @@ public class Foo { </description> <priority>3</priority> <properties> - <property name="minimum" type="Integer" value="3" min="1" max="100" - description="Number of characters that are required as a minimum for a method name."/> + <property name="minimum" type="Integer" value="3" min="1" max="100" description="Number of characters that are required as a minimum for a method name."/> <property name="xpath"> <value> <![CDATA[ @@ -1722,8 +1618,7 @@ public class ShortMethod { </description> <priority>3</priority> <properties> - <property name="minimum" type="Integer" value="3" min="1" max="100" - description="Number of characters that are required as a minimum for a variable name."/> + <property name="minimum" type="Integer" value="3" min="1" max="100" description="Number of characters that are required as a minimum for a variable name."/> <property name="version" value="2.0"/> <property name="xpath"> <value> @@ -1767,8 +1662,7 @@ public class Something { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#suspiciousconstantfieldname"> <description> - Field names using all uppercase characters - Sun's Java naming conventions indicating - constants - should + Field names using all uppercase characters - Sun's Java naming conventions indicating constants - should be declared as final. This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced @@ -1814,8 +1708,7 @@ public class Foo { <priority>3</priority> <properties> <property name="maximumStaticImports" type="Integer" - description="All static imports can be disallowed by setting this to 0" min="0" max="100" - value="4"/> + description="All static imports can be disallowed by setting this to 0" min="0" max="100" value="4"/> <property name="xpath"> <value> <![CDATA[ @@ -1849,32 +1742,25 @@ import static Yoko; // Too much ! <![CDATA[ @TestClassAnnotation(value = "TEST") public class Foo { - @TestMemberAnnotation(value = "TEST") private String y; - @TestMethodAnnotation(value = "TEST") public void bar() { int x = 42; return; } } - // should be - @TestClassAnnotation("TEST") public class Foo { - @TestMemberAnnotation("TEST") private String y; - @TestMethodAnnotation("TEST") public void bar() { int x = 42; return; } } - ]]> </example> </rule> @@ -1887,12 +1773,9 @@ public class Foo { class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryConstructorRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryconstructor"> <description> - This rule detects when a constructor is not necessary; i.e., when there is only one - constructor and the - constructor is identical to the default constructor. The default constructor should has same - access - modifier as the declaring class. In an enum type, the default constructor is implicitly - private. + This rule detects when a constructor is not necessary; i.e., when there is only one constructor and the + constructor is identical to the default constructor. The default constructor should has same access + modifier as the declaring class. In an enum type, the default constructor is implicitly private. </description> <priority>3</priority> <example> @@ -1911,16 +1794,13 @@ public class Foo { message="Unnecessary use of fully qualified name ''{0}'' due to existing {2}import ''{1}''" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname"> <description> - Import statements allow the use of non-fully qualified names. The use of a fully qualified - name - which is covered by an import statement is redundant. Consider using the non-fully qualified - name. + Import statements allow the use of non-fully qualified names. The use of a fully qualified name + which is covered by an import statement is redundant. Consider using the non-fully qualified name. </description> <priority>4</priority> <example> <![CDATA[ import java.util.List; - public class Foo { private java.util.List list1; // Unnecessary FQN private List list2; // More appropriate given import of 'java.util.List' @@ -1957,14 +1837,11 @@ public class Foo { class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryModifierRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarymodifier"> <description> - Fields in interfaces and annotations are automatically `public static final`, and methods are - `public abstract`. - Classes, interfaces or annotations nested in an interface or annotation are automatically - `public static` + Fields in interfaces and annotations are automatically `public static final`, and methods are `public abstract`. + Classes, interfaces or annotations nested in an interface or annotation are automatically `public static` (all nested interfaces and annotations are automatically static). Nested enums are automatically `static`. - For historical reasons, modifiers which are implied by the context are accepted by the - compiler, but are superfluous. + For historical reasons, modifiers which are implied by the context are accepted by the compiler, but are superfluous. </description> <priority>3</priority> <example> @@ -2020,8 +1897,7 @@ public class Foo { externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#usediamondoperator" minimumLanguageVersion="1.7"> <description> - Use the diamond operator to let the type be inferred automatically. With the Diamond operator - it is possible + Use the diamond operator to let the type be inferred automatically. With the Diamond operator it is possible to avoid duplication of the type parameters. Instead, the compiler is now able to infer the parameter types for constructor calls, which makes the code also more readable. @@ -2125,10 +2001,8 @@ List<String> stringsWithDiamond = new ArrayList<>(); // using the diamond operat <example> <![CDATA[ public class Foo { - private int _bar1; private Integer _bar2; - public void setBar(int n) { _bar1 = Integer.valueOf((n)); // here _bar2 = (n); // and here @@ -2166,11 +2040,9 @@ public class Foo { <![CDATA[ public class Foo { final Foo otherFoo = Foo.this; // use "this" directly - public void doSomething() { final Foo anotherFoo = Foo.this; // use "this" directly } - private ActionListener returnListener() { return new ActionListener() { @Override @@ -2179,11 +2051,9 @@ public class Foo { } }; } - private class Foo3 { final Foo myFoo = Foo.this; // This is fine } - private class Foo2 { final Foo2 myFoo2 = Foo2.this; // Use "this" direclty } @@ -2199,7 +2069,7 @@ public class Foo { class="net.sourceforge.pmd.lang.java.rule.codestyle.VariableNamingConventionsRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#variablenamingconventions"> <description> - A variable naming conventions rule - customize this to your liking. Currently, it + A variable naming conventions rule - customize this to your liking. Currently, it checks for final variables that should be fully capitalized and non-final variables that should not include underscores. @@ -2245,7 +2115,7 @@ public class Foo { <![CDATA[ while (true) // not recommended x++; - + while (true) { // preferred approach x++; } @@ -2253,4 +2123,4 @@ while (true) { // preferred approach </example> </rule> -</ruleset> +</ruleset> \ No newline at end of file From 33ab74c8d24b33d959f7424c7762521e7c596139 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 15:35:23 -0500 Subject: [PATCH 006/371] Fix style violation causing build failure --- .../rule/codestyle/ArrayInitializationVerbosenessRule.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java index 15395111a1..d05a61879b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java @@ -9,8 +9,9 @@ public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { public Object visit(ASTLocalVariableDeclaration node, Object data) { if (node.isArray()) { - if (node.getImage().matches("(new).+\\{")) + if (node.getImage().matches("(new).+\\{")) { addViolation(data, node); + } return super.visit(node, data); } From c3047700f4f99dac35c5c9c59bf2472280f45dda Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 16:09:18 -0500 Subject: [PATCH 007/371] Indent fix to address build failure --- .../ArrayInitializationVerbosenessRule.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java index d05a61879b..3381c5d00a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java @@ -1,3 +1,7 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + package net.sourceforge.pmd.lang.java.rule.codestyle; import net.sourceforge.pmd.lang.java.ast.ASTLocalVariableDeclaration; @@ -5,16 +9,16 @@ import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { - @Override - public Object visit(ASTLocalVariableDeclaration node, Object data) { + @Override + public Object visit(ASTLocalVariableDeclaration node, Object data) { - if (node.isArray()) { - if (node.getImage().matches("(new).+\\{")) { - addViolation(data, node); - } - return super.visit(node, data); + if (node.isArray()) { + if (node.getImage().matches("(new).+\\{")) { + addViolation(data, node); + } + return super.visit(node, data); + } + + return super.visit(node, data); } - - return super.visit(node, data); - } } From 6f957a58b957ddd52595596a7d6becd3812a0432 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 16:36:08 -0500 Subject: [PATCH 008/371] Regex logic change to avoid style violations outside variable assignments --- .../java/rule/codestyle/ArrayInitializationVerbosenessRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java index 3381c5d00a..6ccb3ed008 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java @@ -13,7 +13,7 @@ public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { public Object visit(ASTLocalVariableDeclaration node, Object data) { if (node.isArray()) { - if (node.getImage().matches("(new).+\\{")) { + if (node.getImage().matches("(= ?new).+\\{")) { addViolation(data, node); } return super.visit(node, data); From 83f6b49cc076353b6d69e6ed6312a64edc43c0f6 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 17:57:22 -0500 Subject: [PATCH 009/371] Further style fixes --- .../rule/codestyle/ArrayInitializationVerbosenessRule.java | 2 +- .../codestyle/ArrayInitializationVerbosenessRuleTest.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java index 6ccb3ed008..6ec816fc11 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java @@ -14,7 +14,7 @@ public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { if (node.isArray()) { if (node.getImage().matches("(= ?new).+\\{")) { - addViolation(data, node); + addViolation(data, node); } return super.visit(node, data); } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java index 6f2d189eb0..c832cfaec8 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java @@ -1,3 +1,7 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + package net.sourceforge.pmd.lang.java.rule.codestyle; import net.sourceforge.pmd.testframework.PmdRuleTst; From 0e2bbfc86009de451fe4e429107af975a48f62c3 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Thu, 7 Feb 2019 18:56:16 -0500 Subject: [PATCH 010/371] Added check for null node image to avoid regex checking null str --- .../java/rule/codestyle/ArrayInitializationVerbosenessRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java index 6ec816fc11..4347d7c5a0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java @@ -12,7 +12,7 @@ public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { @Override public Object visit(ASTLocalVariableDeclaration node, Object data) { - if (node.isArray()) { + if (node.isArray() && node.getImage() != null) { if (node.getImage().matches("(= ?new).+\\{")) { addViolation(data, node); } From 67f755ad3a26e8c08ec6d91154c81578b8c8fe94 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Fri, 8 Feb 2019 20:37:17 -0500 Subject: [PATCH 011/371] Additional test case for multiple initializers --- .../xml/ArrayInitializationVerboseness.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml index 42add35368..2cc09a80ad 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml @@ -16,6 +16,21 @@ public class Foo { } ]]></code> </test-code> + + <test-code> + <description><![CDATA[ +case with two initializers + ]]></description> + <expected-problems>2</expected-problems> + <code><![CDATA[ +public class Foo { + void foo() { + int ar[] = new int[] { 1,2,3}, foo[] = new int[] { 4, 5, 6 } + } +} + ]]></code> + </test-code> + <test-code> <description><![CDATA[ ok From adabe19ec441e2008e4d1e2da8871856c9e1bf4c Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Fri, 8 Feb 2019 20:38:42 -0500 Subject: [PATCH 012/371] Rename test class --- ...essRuleTest.java => ArrayInitializationVerbosenessTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/{ArrayInitializationVerbosenessRuleTest.java => ArrayInitializationVerbosenessTest.java} (75%) diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessTest.java similarity index 75% rename from pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java rename to pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessTest.java index c832cfaec8..0c7e46a3ce 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRuleTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessTest.java @@ -6,6 +6,6 @@ package net.sourceforge.pmd.lang.java.rule.codestyle; import net.sourceforge.pmd.testframework.PmdRuleTst; -public class ArrayInitializationVerbosenessRuleTest extends PmdRuleTst { +public class ArrayInitializationVerbosenessTest extends PmdRuleTst { // no additional unit tests } From 97d8faa2efb0bab16450953c2afe5d3659b2c12c Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Fri, 8 Feb 2019 20:57:31 -0500 Subject: [PATCH 013/371] Modified regex logic to account for multiple initializers --- .../codestyle/ArrayInitializationVerbosenessRule.java | 11 +++++++---- .../codestyle/xml/ArrayInitializationVerboseness.xml | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java index 4347d7c5a0..56d531ec41 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java @@ -4,6 +4,9 @@ package net.sourceforge.pmd.lang.java.rule.codestyle; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression; import net.sourceforge.pmd.lang.java.ast.ASTLocalVariableDeclaration; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; @@ -11,14 +14,14 @@ public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { @Override public Object visit(ASTLocalVariableDeclaration node, Object data) { - if (node.isArray() && node.getImage() != null) { - if (node.getImage().matches("(= ?new).+\\{")) { + Pattern verbosePattern = Pattern.compile("(= ?new).+\\{"); + Matcher matcher = verbosePattern.matcher(string); + + while (matcher.find()) { addViolation(data, node); } - return super.visit(node, data); } - return super.visit(node, data); } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml index 2cc09a80ad..146139f78e 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml @@ -25,7 +25,7 @@ case with two initializers <code><![CDATA[ public class Foo { void foo() { - int ar[] = new int[] { 1,2,3}, foo[] = new int[] { 4, 5, 6 } + int ar[] = new int[] { 1,2,3}, foo[] = new int[] { 4, 5, 6 }; } } ]]></code> From 834283b34f702a82b884d0b41301c949e1ca1af5 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Fri, 8 Feb 2019 21:04:36 -0500 Subject: [PATCH 014/371] Removed .isArray check, replaced with placeholder --- .../rule/codestyle/ArrayInitializationVerbosenessRule.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java index 56d531ec41..6018e4fd91 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java @@ -14,9 +14,11 @@ public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { @Override public Object visit(ASTLocalVariableDeclaration node, Object data) { - if (node.isArray() && node.getImage() != null) { + boolean isArrayPlaceholder = true; + + if (isArrayPlaceholder && node.getImage() != null) { Pattern verbosePattern = Pattern.compile("(= ?new).+\\{"); - Matcher matcher = verbosePattern.matcher(string); + Matcher matcher = verbosePattern.matcher(node.getImage()); while (matcher.find()) { addViolation(data, node); From cba6ea376f6c032d5abfa6d71fe03ed1c84e0d33 Mon Sep 17 00:00:00 2001 From: IDoCodingStuffs <sahinvictor@gmail.com> Date: Fri, 8 Feb 2019 21:20:40 -0500 Subject: [PATCH 015/371] Revert autoformatting whitespaces --- .../resources/category/java/codestyle.xml | 2538 +++++++++-------- 1 file changed, 1304 insertions(+), 1234 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index c3e22c50c9..e77db41815 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -1,32 +1,32 @@ <?xml version="1.0"?> <ruleset name="Code Style" - 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> - <description> - Rules which enforce a specific coding style. - </description> - - <rule name="AbstractNaming" - language="java" - since="1.4" - deprecated="true" - message="Abstract classes should be named 'AbstractXXX'" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#abstractnaming"> <description> - Abstract classes should be named 'AbstractXXX'. - - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by {% rule java/codestyle/ClassNamingConventions %}. + Rules which enforce a specific coding style. </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + + <rule name="AbstractNaming" + language="java" + since="1.4" + deprecated="true" + message="Abstract classes should be named 'AbstractXXX'" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#abstractnaming"> + <description> +Abstract classes should be named 'AbstractXXX'. + +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by {% rule java/codestyle/ClassNamingConventions %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration [@Abstract='true' and @Interface='false'] [not (starts-with(@Image,'Abstract'))] @@ -36,92 +36,91 @@ [$strict='true'] [starts-with(@Image, 'Abstract')] ]]> - </value> - </property> - <property name="strict" type="Boolean" value="true" description="Also flag classes, that are named Abstract, but are not abstract."/> - </properties> - <example> - <![CDATA[ + </value> + </property> + <property name="strict" type="Boolean" value="true" description="Also flag classes, that are named Abstract, but are not abstract."/> + </properties> + <example> +<![CDATA[ public abstract class Foo { // should be AbstractFoo } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ArrayInitializationVerboseness" - language="java" - since="1.1" - message="Array initialization does not require assignment to new object, assignment to {--array content--} is sufficient" - class="net.sourceforge.pmd.lang.java.rule.codestyle.ArrayInitializationVerbosenessRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#arrayinitializationverboseness"> - <description> - <![CDATA[ + <rule name="ArrayInitializationVerboseness" + language="java" + since="1.1" + message="Array initialization does not require assignment to new object, assignment to {--array content--} is sufficient" + class="net.sourceforge.pmd.lang.java.rule.codestyle.ArrayInitializationVerbosenessRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#arrayinitializationverboseness"> + <description> +<![CDATA[ Arrays can be initialized simply with curly braces without requiring to create new array object ]]> - </description> - <priority>3</priority> - <example> - <![CDATA[ + </description> + <priority>3</priority> + <example> +<![CDATA[ Foo[] x = new Foo[] { ... }; // Overly verbose - Foo[] x = { ... }; //Equivalent to above line ]]> - </example> - </rule> + </example> + </rule> - <rule name="AtLeastOneConstructor" - language="java" - since="1.04" - message="Each class should declare at least one constructor" - class="net.sourceforge.pmd.lang.java.rule.codestyle.AtLeastOneConstructorRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#atleastoneconstructor"> - <description> - <![CDATA[ + <rule name="AtLeastOneConstructor" + language="java" + since="1.04" + message="Each class should declare at least one constructor" + class="net.sourceforge.pmd.lang.java.rule.codestyle.AtLeastOneConstructorRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#atleastoneconstructor"> + <description> +<![CDATA[ Each non-static class should declare at least one constructor. Classes with solely static members are ignored, refer to [UseUtilityClassRule](pmd_rules_java_design.html#useutilityclass) to detect those. ]]> - </description> - <priority>3</priority> - <example> - <![CDATA[ + </description> + <priority>3</priority> + <example> +<![CDATA[ public class Foo { // missing constructor public void doSomething() { ... } public void doOtherThing { ... } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidDollarSigns" - since="1.5" - message="Avoid using dollar signs in variable/method/class/interface names" - class="net.sourceforge.pmd.lang.java.rule.codestyle.AvoidDollarSignsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoiddollarsigns"> - <description> - Avoid using dollar signs in variable/method/class/interface names. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="AvoidDollarSigns" + since="1.5" + message="Avoid using dollar signs in variable/method/class/interface names" + class="net.sourceforge.pmd.lang.java.rule.codestyle.AvoidDollarSignsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoiddollarsigns"> + <description> +Avoid using dollar signs in variable/method/class/interface names. + </description> + <priority>3</priority> + <example> +<![CDATA[ public class Fo$o { // not a recommended name } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidFinalLocalVariable" - language="java" - since="4.1" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Avoid using final local variables, turn them into fields" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidfinallocalvariable"> - <description>Avoid using final local variables, turn them into fields.</description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="AvoidFinalLocalVariable" + language="java" + since="4.1" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Avoid using final local variables, turn them into fields" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidfinallocalvariable"> + <description>Avoid using final local variables, turn them into fields.</description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //LocalVariableDeclaration[ @Final = 'true' and not(../../ForStatement) @@ -133,49 +132,49 @@ public class Fo$o { // not a recommended name ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class MyClass { public void foo() { final String finalLocalVariable; } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidPrefixingMethodParameters" - language="java" - since="5.0" - deprecated="true" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Avoid prefixing parameters by in, out or inOut. Uses Javadoc to document this behavior." - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprefixingmethodparameters"> - <description> - Prefixing parameters by 'in' or 'out' pollutes the name of the parameters and reduces code readability. - To indicate whether or not a parameter will be modify in a method, its better to document method - behavior with Javadoc. + <rule name="AvoidPrefixingMethodParameters" + language="java" + since="5.0" + deprecated="true" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Avoid prefixing parameters by in, out or inOut. Uses Javadoc to document this behavior." + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprefixingmethodparameters"> + <description> +Prefixing parameters by 'in' or 'out' pollutes the name of the parameters and reduces code readability. +To indicate whether or not a parameter will be modify in a method, its better to document method +behavior with Javadoc. - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by the more general rule {% rule java/codestyle/FormalParameterNamingConventions %}. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the more general rule {% rule java/codestyle/FormalParameterNamingConventions %}. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //MethodDeclaration/MethodDeclarator/FormalParameters/FormalParameter/VariableDeclaratorId[ pmd:matches(@Image,'^in[A-Z].*','^out[A-Z].*','^in$','^out$') ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ // Not really clear public class Foo { public void bar( @@ -185,9 +184,9 @@ public class Foo { } } ]]> - </example> - <example> - <![CDATA[ + </example> + <example> +<![CDATA[ // Far more useful public class Foo { /** @@ -202,124 +201,127 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidProtectedFieldInFinalClass" - language="java" - since="2.1" - message="Avoid protected fields in a final class. Change to private or package access." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass"> - <description> - Do not use protected fields in final classes since they cannot be subclassed. - Clarify your intent by using private or package access modifiers instead. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="AvoidProtectedFieldInFinalClass" + language="java" + since="2.1" + message="Avoid protected fields in a final class. Change to private or package access." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass"> + <description> +Do not use protected fields in final classes since they cannot be subclassed. +Clarify your intent by using private or package access modifiers instead. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration[@Final='true'] /ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration /FieldDeclaration[@Protected='true'] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public final class Bar { private int x; protected int y; // bar cannot be subclassed, so is y really private or package visible? Bar() {} } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidProtectedMethodInFinalClassNotExtending" - language="java" - since="5.1" - message="Avoid protected methods in a final class that doesn't extend anything other than Object. Change to private or package access." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending"> - <description> - Do not use protected methods in most final classes since they cannot be subclassed. This should - only be allowed in final classes that extend other classes with protected methods (whose - visibility cannot be reduced). Clarify your intent by using private or package access modifiers instead. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="AvoidProtectedMethodInFinalClassNotExtending" + language="java" + since="5.1" + message="Avoid protected methods in a final class that doesn't extend anything other than Object. Change to private or package access." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending"> + <description> +Do not use protected methods in most final classes since they cannot be subclassed. This should +only be allowed in final classes that extend other classes with protected methods (whose +visibility cannot be reduced). Clarify your intent by using private or package access modifiers instead. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration[@Final='true' and not(ExtendsList)] /ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration /MethodDeclaration[@Protected='true'][MethodDeclarator/@Image != 'finalize'] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public final class Foo { private int bar() {} protected int baz() {} // Foo cannot be subclassed, and doesn't extend anything, so is baz() really private or package visible? } ]]> - </example> - </rule> + </example> + </rule> - <rule name="AvoidUsingNativeCode" - language="java" - since="4.1" - message="The use of native code is not recommended." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidusingnativecode"> - <description> - Unnecessary reliance on Java Native Interface (JNI) calls directly reduces application portability - and increases the maintenance burden. - </description> - <priority>2</priority> - <properties> - <property name="xpath"> - <value>//Name[starts-with(@Image,'System.loadLibrary')]</value> - </property> - </properties> - <example> - <![CDATA[ + <rule name="AvoidUsingNativeCode" + language="java" + since="4.1" + message="The use of native code is not recommended." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidusingnativecode"> + <description> +Unnecessary reliance on Java Native Interface (JNI) calls directly reduces application portability +and increases the maintenance burden. + </description> + <priority>2</priority> + <properties> + <property name="xpath"> + <value>//Name[starts-with(@Image,'System.loadLibrary')]</value> + </property> + </properties> + <example> +<![CDATA[ public class SomeJNIClass { + public SomeJNIClass() { System.loadLibrary("nativelib"); } + static { System.loadLibrary("nativelib"); } + public void invalidCallsInMethod() throws SecurityException, NoSuchMethodException { System.loadLibrary("nativelib"); } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="BooleanGetMethodName" - language="java" - since="4.0" - message="A 'getX()' method which returns a boolean should be named 'isX()'" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#booleangetmethodname"> - <description> - Methods that return boolean results should be named as predicate statements to denote this. - I.e, 'isReady()', 'hasValues()', 'canCommit()', 'willFail()', etc. Avoid the use of the 'get' - prefix for these methods. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="BooleanGetMethodName" + language="java" + since="4.0" + message="A 'getX()' method which returns a boolean should be named 'isX()'" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#booleangetmethodname"> + <description> +Methods that return boolean results should be named as predicate statements to denote this. +I.e, 'isReady()', 'hasValues()', 'canCommit()', 'willFail()', etc. Avoid the use of the 'get' +prefix for these methods. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //MethodDeclaration[ MethodDeclarator[count(FormalParameters/FormalParameter) = 0 or $checkParameterizedMethods = 'true'] [starts-with(@Image, 'get')] @@ -328,44 +330,44 @@ ResultType/Type/PrimitiveType[@Image = 'boolean'] and not(../Annotation//Name[@Image = 'Override']) ] ]]> - </value> - </property> - <property name="checkParameterizedMethods" type="Boolean" description="Check parameterized methods" value="false"/> - </properties> - <example> - <![CDATA[ + </value> + </property> + <property name="checkParameterizedMethods" type="Boolean" description="Check parameterized methods" value="false"/> + </properties> + <example> +<![CDATA[ public boolean getFoo(); // bad public boolean isFoo(); // ok public boolean getFoo(boolean bar); // ok, unless checkParameterizedMethods=true ]]> - </example> - </rule> + </example> + </rule> - <rule name="CallSuperInConstructor" - language="java" - since="3.0" - message="It is a good practice to call super() in a constructor" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#callsuperinconstructor"> - <description> - It is a good practice to call super() in a constructor. If super() is not called but - another constructor (such as an overloaded constructor) is called, this rule will not report it. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="CallSuperInConstructor" + language="java" + since="3.0" + message="It is a good practice to call super() in a constructor" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#callsuperinconstructor"> + <description> +It is a good practice to call super() in a constructor. If super() is not called but +another constructor (such as an overloaded constructor) is called, this rule will not report it. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration[ count (ExtendsList/*) > 0 ] /ClassOrInterfaceBody /ClassOrInterfaceBodyDeclaration /ConstructorDeclaration[ count (.//ExplicitConstructorInvocation)=0 ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Foo extends Bar{ public Foo() { // call the constructor of Bar @@ -378,128 +380,133 @@ public class Foo extends Bar{ } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ClassNamingConventions" - since="1.2" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.ClassNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#classnamingconventions"> - <description> - Configurable naming conventions for type declarations. This rule reports - type declarations which do not match the regex that applies to their - specific kind (e.g. enum or interface). Each regex can be configured through - properties. + <rule name="ClassNamingConventions" + since="1.2" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.ClassNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#classnamingconventions"> + <description> + Configurable naming conventions for type declarations. This rule reports + type declarations which do not match the regex that applies to their + specific kind (e.g. enum or interface). Each regex can be configured through + properties. - By default this rule uses the standard Java naming convention (Pascal case), - and reports utility class names not ending with 'Util'. - </description> - <priority>1</priority> - <example> - <![CDATA[ + By default this rule uses the standard Java naming convention (Pascal case), + and reports utility class names not ending with 'Util'. + </description> + <priority>1</priority> + <example> +<![CDATA[ // This is Pascal case, the recommended naming convention in Java -// Note that the default values of this rule don't allow underscores +// Note that the default values of this rule don't allow underscores // or accented characters in type names public class FooBar {} + // You may want abstract classes to be named 'AbstractXXX', // in which case you can customize the regex for abstract // classes to 'Abstract[A-Z]\w+' public abstract class Thing {} + // This class doesn't respect the convention, and will be flagged public class Éléphant {} ]]> - </example> - </rule> + </example> + </rule> - <rule name="CommentDefaultAccessModifier" - since="5.4.0" - class="net.sourceforge.pmd.lang.java.rule.codestyle.CommentDefaultAccessModifierRule" - message="Missing commented default access modifier" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier"> - <description> - To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default access modifier - we must add a comment at the beginning of it's declaration. - By default the comment must be /* default */ or /* package */, if you want another, you have to provide a regular expression. - This rule ignores by default all cases that have a @VisibleForTesting annotation. Use the - property "ignoredAnnotations" to customize the recognized annotations. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="CommentDefaultAccessModifier" + since="5.4.0" + class="net.sourceforge.pmd.lang.java.rule.codestyle.CommentDefaultAccessModifierRule" + message="Missing commented default access modifier" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier"> + <description> +To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default access modifier +we must add a comment at the beginning of it's declaration. +By default the comment must be /* default */ or /* package */, if you want another, you have to provide a regular expression. +This rule ignores by default all cases that have a @VisibleForTesting annotation. Use the +property "ignoredAnnotations" to customize the recognized annotations. + </description> + <priority>3</priority> + <example> +<![CDATA[ public class Foo { final String stringValue = "some string"; String getString() { return stringValue; } + class NestedFoo { } } + // should be public class Foo { /* default */ final String stringValue = "some string"; /* default */ String getString() { return stringValue; } + /* default */ class NestedFoo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ConfusingTernary" - since="1.9" - message="Avoid if (x != y) ..; else ..;" - class="net.sourceforge.pmd.lang.java.rule.codestyle.ConfusingTernaryRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#confusingternary"> - <description> - Avoid negation within an "if" expression with an "else" clause. For example, rephrase: - `if (x != y) diff(); else same();` as: `if (x == y) same(); else diff();`. + <rule name="ConfusingTernary" + since="1.9" + message="Avoid if (x != y) ..; else ..;" + class="net.sourceforge.pmd.lang.java.rule.codestyle.ConfusingTernaryRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#confusingternary"> + <description> +Avoid negation within an "if" expression with an "else" clause. For example, rephrase: +`if (x != y) diff(); else same();` as: `if (x == y) same(); else diff();`. - Most "if (x != y)" cases without an "else" are often return cases, so consistent use of this - rule makes the code easier to read. Also, this resolves trivial ordering problems, such - as "does the error case go first?" or "does the common case go first?". - </description> - <priority>3</priority> - <example> - <![CDATA[ +Most "if (x != y)" cases without an "else" are often return cases, so consistent use of this +rule makes the code easier to read. Also, this resolves trivial ordering problems, such +as "does the error case go first?" or "does the common case go first?". + </description> + <priority>3</priority> + <example> +<![CDATA[ boolean bar(int x, int y) { return (x != y) ? diff : same; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ControlStatementBraces" - language="java" - since="6.2.0" - message="This statement should have braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#controlstatementbraces"> - <description> - Enforce a policy for braces on control statements. It is recommended to use braces on 'if ... else' - statements and loop statements, even if they are optional. This usually makes the code clearer, and - helps prepare the future when you need to add another statement. That said, this rule lets you control - which statements are required to have braces via properties. + <rule name="ControlStatementBraces" + language="java" + since="6.2.0" + message="This statement should have braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#controlstatementbraces"> + <description> + Enforce a policy for braces on control statements. It is recommended to use braces on 'if ... else' + statements and loop statements, even if they are optional. This usually makes the code clearer, and + helps prepare the future when you need to add another statement. That said, this rule lets you control + which statements are required to have braces via properties. - From 6.2.0 on, this rule supersedes WhileLoopMustUseBraces, ForLoopMustUseBraces, IfStmtMustUseBraces, - and IfElseStmtMustUseBraces. - </description> - <priority>3</priority> - <properties> - <property name="checkIfElseStmt" type="Boolean" value="true" description="Require that 'if ... else' statements use braces" /> - <property name="checkSingleIfStmt" type="Boolean" value="true" description="Require that 'if' statements with a single branch use braces" /> - <property name="checkWhileStmt" type="Boolean" value="true" description="Require that 'while' loops use braces" /> - <property name="checkForStmt" type="Boolean" value="true" description="Require that 'for' loops should use braces" /> - <property name="checkDoWhileStmt" type="Boolean" value="true" description="Require that 'do ... while' loops use braces" /> - <property name="checkCaseStmt" type="Boolean" value="false" description="Require that cases of a switch have braces"/> + From 6.2.0 on, this rule supersedes WhileLoopMustUseBraces, ForLoopMustUseBraces, IfStmtMustUseBraces, + and IfElseStmtMustUseBraces. + </description> + <priority>3</priority> + <properties> + <property name="checkIfElseStmt" type="Boolean" value="true" description="Require that 'if ... else' statements use braces" /> + <property name="checkSingleIfStmt" type="Boolean" value="true" description="Require that 'if' statements with a single branch use braces" /> + <property name="checkWhileStmt" type="Boolean" value="true" description="Require that 'while' loops use braces" /> + <property name="checkForStmt" type="Boolean" value="true" description="Require that 'for' loops should use braces" /> + <property name="checkDoWhileStmt" type="Boolean" value="true" description="Require that 'do ... while' loops use braces" /> + <property name="checkCaseStmt" type="Boolean" value="false" description="Require that cases of a switch have braces"/> - <property name="allowEmptyLoop" type="Boolean" value="false" description="Allow loops with an empty statement, e.g. 'while(true);'" /> + <property name="allowEmptyLoop" type="Boolean" value="false" description="Allow loops with an empty statement, e.g. 'while(true);'" /> - <property name="version" value="2.0"/> - <property name="xpath"> - <value><![CDATA[ + <property name="version" value="2.0"/> + <property name="xpath"> + <value><![CDATA[ //WhileStatement[$checkWhileStmt and not(Statement/Block) and not($allowEmptyLoop and Statement/EmptyStatement)] | //ForStatement[$checkForStmt and not(Statement/Block) and not($allowEmptyLoop and Statement/EmptyStatement)] @@ -522,34 +529,35 @@ boolean bar(int x, int y) { in following-sibling::BlockStatement except following-sibling::SwitchLabel[1]/following-sibling::BlockStatement satisfies not($stmt/Statement/Block))] ]]></value> - </property> - </properties> - <example> - <![CDATA[ + </property> + </properties> + <example> + <![CDATA[ while (true) // not recommended x++; + while (true) { // preferred approach x++; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="DefaultPackage" - language="java" - since="3.4" - message="Use explicit scoping instead of the default package private level" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#defaultpackage"> - <description> - Use explicit scoping instead of accidental usage of default package private level. - The rule allows methods and fields annotated with Guava's @VisibleForTesting. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="DefaultPackage" + language="java" + since="3.4" + message="Use explicit scoping instead of the default package private level" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#defaultpackage"> + <description> +Use explicit scoping instead of accidental usage of default package private level. +The rule allows methods and fields annotated with Guava's @VisibleForTesting. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration[@Interface='false'] /ClassOrInterfaceBody /ClassOrInterfaceBodyDeclaration @@ -559,64 +567,68 @@ FieldDeclaration[@PackagePrivate='true'] or MethodDeclaration[@PackagePrivate='true'] ] ]]> - </value> - </property> - </properties> - </rule> + </value> + </property> + </properties> + </rule> - <rule name="DontImportJavaLang" - since="0.5" - message="Avoid importing anything from the package 'java.lang'" - class="net.sourceforge.pmd.lang.java.rule.codestyle.DontImportJavaLangRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#dontimportjavalang"> - <description> - Avoid importing anything from the package 'java.lang'. These classes are automatically imported (JLS 7.5.3). - </description> - <priority>4</priority> - <example> - <![CDATA[ + <rule name="DontImportJavaLang" + since="0.5" + message="Avoid importing anything from the package 'java.lang'" + class="net.sourceforge.pmd.lang.java.rule.codestyle.DontImportJavaLangRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#dontimportjavalang"> + <description> +Avoid importing anything from the package 'java.lang'. These classes are automatically imported (JLS 7.5.3). + </description> + <priority>4</priority> + <example> +<![CDATA[ import java.lang.String; // this is unnecessary + public class Foo {} + // --- in another source code file... + import java.lang.*; // this is bad + public class Foo {} ]]> - </example> - </rule> + </example> + </rule> - <rule name="DuplicateImports" - since="0.5" - message="Avoid duplicate imports such as ''{0}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.DuplicateImportsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#duplicateimports"> - <description> - Duplicate or overlapping import statements should be avoided. - </description> - <priority>4</priority> - <example> - <![CDATA[ + <rule name="DuplicateImports" + since="0.5" + message="Avoid duplicate imports such as ''{0}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.DuplicateImportsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#duplicateimports"> + <description> +Duplicate or overlapping import statements should be avoided. + </description> + <priority>4</priority> + <example> +<![CDATA[ import java.lang.String; import java.lang.*; public class Foo {} ]]> - </example> - </rule> + </example> + </rule> - <rule name="EmptyMethodInAbstractClassShouldBeAbstract" - language="java" - since="4.1" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="An empty method in an abstract class should be abstract instead" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#emptymethodinabstractclassshouldbeabstract"> - <description> - Empty or auto-generated methods in an abstract class should be tagged as abstract. This helps to remove their inapproprate - usage by developers who should be implementing their own versions in the concrete subclasses. - </description> - <priority>1</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="EmptyMethodInAbstractClassShouldBeAbstract" + language="java" + since="4.1" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="An empty method in an abstract class should be abstract instead" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#emptymethodinabstractclassshouldbeabstract"> + <description> +Empty or auto-generated methods in an abstract class should be tagged as abstract. This helps to remove their inapproprate +usage by developers who should be implementing their own versions in the concrete subclasses. + </description> + <priority>1</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration[@Abstract = 'true'] /ClassOrInterfaceBody /ClassOrInterfaceBodyDeclaration @@ -633,258 +645,276 @@ public class Foo {} ( count (./Block/*) = 0 ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public abstract class ShouldBeAbstract { public Object couldBeAbstract() { // Should be abstract method ? return null; } + public void couldBeAbstract() { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ExtendsObject" - language="java" - since="5.0" - message="No need to explicitly extend Object." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#extendsobject"> - <description>No need to explicitly extend Object.</description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="ExtendsObject" + language="java" + since="5.0" + message="No need to explicitly extend Object." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#extendsobject"> + <description>No need to explicitly extend Object.</description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ExtendsList/ClassOrInterfaceType[@Image='Object' or @Image='java.lang.Object'] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Foo extends Object { // not required } ]]> - </example> - </rule> + </example> + </rule> - <rule name="FieldDeclarationsShouldBeAtStartOfClass" - language="java" - since="5.0" - message="Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes." - class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldDeclarationsShouldBeAtStartOfClassRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fielddeclarationsshouldbeatstartofclass"> - <description> - Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="FieldDeclarationsShouldBeAtStartOfClass" + language="java" + since="5.0" + message="Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes." + class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldDeclarationsShouldBeAtStartOfClassRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fielddeclarationsshouldbeatstartofclass"> + <description> +Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes. + </description> + <priority>3</priority> + <example> +<![CDATA[ public class HelloWorldBean { + // Field declared before methods / inner classes - OK private String _thing; + public String getMessage() { return "Hello World!"; } + // Field declared after methods / inner classes - avoid this private String _fieldInWrongLocation; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="FieldNamingConventions" - since="6.7.0" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fieldnamingconventions"> - <description> - Configurable naming conventions for field declarations. This rule reports variable declarations - which do not match the regex that applies to their specific kind ---e.g. constants (static final), - enum constant, final field. Each regex can be configured through properties. + <rule name="FieldNamingConventions" + since="6.7.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.FieldNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#fieldnamingconventions"> + <description> + Configurable naming conventions for field declarations. This rule reports variable declarations + which do not match the regex that applies to their specific kind ---e.g. constants (static final), + enum constant, final field. Each regex can be configured through properties. - By default this rule uses the standard Java naming convention (Camel case), and uses the ALL_UPPER - convention for constants and enum constants. - </description> - <priority>1</priority> - <example> - <![CDATA[ + By default this rule uses the standard Java naming convention (Camel case), and uses the ALL_UPPER + convention for constants and enum constants. + </description> + <priority>1</priority> + <example> + <![CDATA[ class Foo { int myField = 1; // This is in camel case, so it's ok int my_Field = 1; // This contains an underscore, it's not ok by default // but you may allow it, or even require the "my_" prefix + final int FinalField = 1; // you may configure a different convention for final fields, // e.g. here PascalCase: [A-Z][a-zA-Z0-9]* + interface Interface { double PI = 3.14; // interface "fields" use the constantPattern property } + enum AnEnum { ORG, NET, COM; // These use a separate property but are set to ALL_UPPER by default } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ForLoopShouldBeWhileLoop" - language="java" - since="1.02" - message="This for loop could be simplified to a while loop" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#forloopshouldbewhileloop"> - <description> - Some for loops can be simplified to while loops, this makes them more concise. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="ForLoopShouldBeWhileLoop" + language="java" + since="1.02" + message="This for loop could be simplified to a while loop" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#forloopshouldbewhileloop"> + <description> +Some for loops can be simplified to while loops, this makes them more concise. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ForStatement [not(LocalVariableDeclaration)] [not(ForInit)] [not(ForUpdate)] [Expression] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Foo { void bar() { for (;true;) true; // No Init or Update part, may as well be: while (true) } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ForLoopsMustUseBraces" - language="java" - since="0.7" - deprecated="true" - message="Avoid using 'for' statements without curly braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#forloopsmustusebraces"> - <description> - Avoid using 'for' statements without using curly braces. If the code formatting or - indentation is lost then it becomes difficult to separate the code being controlled - from the rest. + <rule name="ForLoopsMustUseBraces" + language="java" + since="0.7" + deprecated="true" + message="Avoid using 'for' statements without curly braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#forloopsmustusebraces"> + <description> +Avoid using 'for' statements without using curly braces. If the code formatting or +indentation is lost then it becomes difficult to separate the code being controlled +from the rest. - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by the rule {% rule java/codestyle/ControlStatementBraces %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value>//ForStatement[not(Statement/Block)]</value> - </property> - </properties> - <example> - <![CDATA[ +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the rule {% rule java/codestyle/ControlStatementBraces %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value>//ForStatement[not(Statement/Block)]</value> + </property> + </properties> + <example> +<![CDATA[ for (int i = 0; i < 42; i++) foo(); ]]> - </example> - </rule> + </example> + </rule> - <rule name="FormalParameterNamingConventions" - since="6.6.0" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.FormalParameterNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#formalparameternamingconventions"> - <description> - Configurable naming conventions for formal parameters of methods and lambdas. - This rule reports formal parameters which do not match the regex that applies to their - specific kind (e.g. lambda parameter, or final formal parameter). Each regex can be - configured through properties. + <rule name="FormalParameterNamingConventions" + since="6.6.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.FormalParameterNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#formalparameternamingconventions"> + <description> + Configurable naming conventions for formal parameters of methods and lambdas. + This rule reports formal parameters which do not match the regex that applies to their + specific kind (e.g. lambda parameter, or final formal parameter). Each regex can be + configured through properties. - By default this rule uses the standard Java naming convention (Camel case). - </description> - <priority>1</priority> - <example> - <![CDATA[ + By default this rule uses the standard Java naming convention (Camel case). + </description> + <priority>1</priority> + <example> + <![CDATA[ class Foo { + abstract void bar(int myInt); // This is Camel case, so it's ok + void bar(int my_i) { // this will be reported + } + void lambdas() { + // lambdas parameters can be configured separately Consumer<String> lambda1 = s_str -> { }; + // lambda parameters with an explicit type can be configured separately Consumer<String> lambda1 = (String str) -> { }; + } + } ]]> - </example> - </rule> + </example> + </rule> - <rule name="GenericsNaming" - language="java" - since="4.2.6" - message="Generics names should be a one letter long and upper case." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#genericsnaming"> - <description> - Names for references to generic values should be limited to a single uppercase letter. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="GenericsNaming" + language="java" + since="4.2.6" + message="Generics names should be a one letter long and upper case." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#genericsnaming"> + <description> +Names for references to generic values should be limited to a single uppercase letter. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //TypeDeclaration/ClassOrInterfaceDeclaration/TypeParameters/TypeParameter[ - string-length(@Image) > 1 + string-length(@Image) > 1 or string:upper-case(@Image) != @Image ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public interface GenericDao<E extends BaseModel, K extends Serializable> extends BaseDao { // This is ok... } + public interface GenericDao<E extends BaseModel, K extends Serializable> { // Also this } + public interface GenericDao<e extends BaseModel, K extends Serializable> { // 'e' should be an 'E' } + public interface GenericDao<EF extends BaseModel, K extends Serializable> { // 'EF' is not ok. } ]]> - </example> - </rule> + </example> + </rule> - <rule name="IdenticalCatchBranches" - language="java" - since="6.4.0" - minimumLanguageVersion="1.7" - message="''catch'' branch identical to ''{0}'' branch" - class="net.sourceforge.pmd.lang.java.rule.codestyle.IdenticalCatchBranchesRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#identicalcatchbranches"> - <description> - Identical `catch` branches use up vertical space and increase the complexity of code without - adding functionality. It's better style to collapse identical branches into a single multi-catch - branch. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="IdenticalCatchBranches" + language="java" + since="6.4.0" + minimumLanguageVersion="1.7" + message="''catch'' branch identical to ''{0}'' branch" + class="net.sourceforge.pmd.lang.java.rule.codestyle.IdenticalCatchBranchesRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#identicalcatchbranches"> + <description> + Identical `catch` branches use up vertical space and increase the complexity of code without + adding functionality. It's better style to collapse identical branches into a single multi-catch + branch. + </description> + <priority>3</priority> + <example> + <![CDATA[ try { // do something } catch (IllegalArgumentException e) { @@ -892,122 +922,128 @@ try { } catch (IllegalStateException e) { // Can be collapsed into the previous block throw e; } + try { // do something } catch (IllegalArgumentException | IllegalStateException e) { // This is better throw e; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="IfElseStmtsMustUseBraces" - language="java" - since="0.2" - deprecated="true" - message="Avoid using 'if...else' statements without curly braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#ifelsestmtsmustusebraces"> - <description> - Avoid using if..else statements without using surrounding braces. If the code formatting - or indentation is lost then it becomes difficult to separate the code being controlled - from the rest. + <rule name="IfElseStmtsMustUseBraces" + language="java" + since="0.2" + deprecated="true" + message="Avoid using 'if...else' statements without curly braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#ifelsestmtsmustusebraces"> + <description> +Avoid using if..else statements without using surrounding braces. If the code formatting +or indentation is lost then it becomes difficult to separate the code being controlled +from the rest. - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by the rule {% rule java/codestyle/ControlStatementBraces %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the rule {% rule java/codestyle/ControlStatementBraces %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //Statement [parent::IfStatement[@Else='true']] [not(child::Block)] [not(child::IfStatement)] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ // this is OK if (foo) x++; + // but this is not if (foo) x = x+1; else x = x-1; ]]> - </example> - </rule> + </example> + </rule> - <rule name="IfStmtsMustUseBraces" - language="java" - since="1.0" - deprecated="true" - message="Avoid using if statements without curly braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#ifstmtsmustusebraces"> - <description> - Avoid using if statements without using braces to surround the code block. If the code - formatting or indentation is lost then it becomes difficult to separate the code being - controlled from the rest. + <rule name="IfStmtsMustUseBraces" + language="java" + since="1.0" + deprecated="true" + message="Avoid using if statements without curly braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#ifstmtsmustusebraces"> + <description> +Avoid using if statements without using braces to surround the code block. If the code +formatting or indentation is lost then it becomes difficult to separate the code being +controlled from the rest. - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by the rule {% rule java/codestyle/ControlStatementBraces %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the rule {% rule java/codestyle/ControlStatementBraces %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //IfStatement[count(*) < 3][not(Statement/Block)] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ if (foo) // not recommended x++; + if (foo) { // preferred approach x++; } + ]]> - </example> - </rule> + </example> + </rule> - <rule name="LinguisticNaming" - language="java" - since="6.7.0" - message="Linguistics Antipattern - Method name and return type is inconsistent linguistically" - class="net.sourceforge.pmd.lang.java.rule.codestyle.LinguisticNamingRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#linguisticnaming" - typeResolution="true"> - <description> - This rule finds Linguistic Naming Antipatterns. It checks for fields, that are named, as if they should - be boolean but have a different type. It also checks for methods, that according to their name, should - return a boolean, but don't. Further, it checks, that getters return something and setters won't. - Finally, it checks that methods, that start with "to" - so called transform methods - actually return - something, since according to their name, they should convert or transform one object into another. - There is additionally an option, to check for methods that contain "To" in their name - which are - also transform methods. However, this is disabled by default, since this detection is prone to - false positives. + <rule name="LinguisticNaming" + language="java" + since="6.7.0" + message="Linguistics Antipattern - Method name and return type is inconsistent linguistically" + class="net.sourceforge.pmd.lang.java.rule.codestyle.LinguisticNamingRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#linguisticnaming" + typeResolution="true"> + <description> + This rule finds Linguistic Naming Antipatterns. It checks for fields, that are named, as if they should + be boolean but have a different type. It also checks for methods, that according to their name, should + return a boolean, but don't. Further, it checks, that getters return something and setters won't. + Finally, it checks that methods, that start with "to" - so called transform methods - actually return + something, since according to their name, they should convert or transform one object into another. + There is additionally an option, to check for methods that contain "To" in their name - which are + also transform methods. However, this is disabled by default, since this detection is prone to + false positives. - For more information, see [Linguistic Antipatterns - What They Are and How - Developers Perceive Them](https://doi.org/10.1007/s10664-014-9350-8). - </description> - <priority>3</priority> - <example> - <![CDATA[ + For more information, see [Linguistic Antipatterns - What They Are and How +Developers Perceive Them](https://doi.org/10.1007/s10664-014-9350-8). + </description> + <priority>3</priority> + <example> +<![CDATA[ public class LinguisticNaming { int isValid; // the field name indicates a boolean, but it is an int. boolean isTrue; // correct type of the field + void myMethod() { int hasMoneyLocal; // the local variable name indicates a boolean, but it is an int. boolean hasSalaryLocal; // correct naming and type } + // the name of the method indicates, it is a boolean, but the method returns an int. int isValid() { return 1; @@ -1016,14 +1052,17 @@ public class LinguisticNaming { boolean isSmall() { return true; } + // the name indicates, this is a setter, but it returns something int setName() { return 1; } + // the name indicates, this is a getter, but it doesn't return anything void getName() { // nothing to return? } + // the name indicates, it transforms an object and should return the result void toDataType() { // nothing to return? @@ -1034,23 +1073,23 @@ public class LinguisticNaming { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="LocalHomeNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="The Local Home interface of a Session EJB should be suffixed by 'LocalHome'" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localhomenamingconvention"> - <description> - The Local Home interface of a Session EJB should be suffixed by 'LocalHome'. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="LocalHomeNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="The Local Home interface of a Session EJB should be suffixed by 'LocalHome'" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localhomenamingconvention"> + <description> +The Local Home interface of a Session EJB should be suffixed by 'LocalHome'. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration [ ( @@ -1063,31 +1102,32 @@ public class LinguisticNaming { ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public interface MyBeautifulLocalHome extends javax.ejb.EJBLocalHome {} // proper name + public interface MissingProperSuffix extends javax.ejb.EJBLocalHome {} // non-standard name ]]> - </example> - </rule> + </example> + </rule> - <rule name="LocalInterfaceSessionNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="The Local Interface of a Session EJB should be suffixed by 'Local'" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localinterfacesessionnamingconvention"> - <description> - The Local Interface of a Session EJB should be suffixed by 'Local'. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="LocalInterfaceSessionNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="The Local Interface of a Session EJB should be suffixed by 'Local'" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localinterfacesessionnamingconvention"> + <description> +The Local Interface of a Session EJB should be suffixed by 'Local'. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration [ ( @@ -1100,28 +1140,29 @@ public interface MissingProperSuffix extends javax.ejb.EJBLocalHome {} // non-s ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public interface MyLocal extends javax.ejb.EJBLocalObject {} // proper name + public interface MissingProperSuffix extends javax.ejb.EJBLocalObject {} // non-standard name ]]> - </example> - </rule> + </example> + </rule> - <rule name="LocalVariableCouldBeFinal" - since="2.2" - message="Local variable ''{0}'' could be declared final" - class="net.sourceforge.pmd.lang.java.rule.codestyle.LocalVariableCouldBeFinalRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablecouldbefinal"> - <description> - A local variable assigned only once can be declared final. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="LocalVariableCouldBeFinal" + since="2.2" + message="Local variable ''{0}'' could be declared final" + class="net.sourceforge.pmd.lang.java.rule.codestyle.LocalVariableCouldBeFinalRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablecouldbefinal"> + <description> +A local variable assigned only once can be declared final. + </description> + <priority>3</priority> + <example> +<![CDATA[ public class Bar { public void foo () { String txtA = "a"; // if txtA will not be assigned again it is better to do this: @@ -1129,63 +1170,66 @@ public class Bar { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="LocalVariableNamingConventions" - since="6.6.0" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.LocalVariableNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablenamingconventions"> - <description> - Configurable naming conventions for local variable declarations and other locally-scoped - variables. This rule reports variable declarations which do not match the regex that applies to their - specific kind (e.g. final variable, or catch-clause parameter). Each regex can be configured through - properties. + <rule name="LocalVariableNamingConventions" + since="6.6.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.LocalVariableNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#localvariablenamingconventions"> + <description> + Configurable naming conventions for local variable declarations and other locally-scoped + variables. This rule reports variable declarations which do not match the regex that applies to their + specific kind (e.g. final variable, or catch-clause parameter). Each regex can be configured through + properties. - By default this rule uses the standard Java naming convention (Camel case). - </description> - <priority>1</priority> - <example> - <![CDATA[ + By default this rule uses the standard Java naming convention (Camel case). + </description> + <priority>1</priority> + <example> + <![CDATA[ class Foo { void bar() { int localVariable = 1; // This is in camel case, so it's ok int local_variable = 1; // This will be reported unless you change the regex + final int i_var = 1; // final local variables can be configured separately + try { foo(); } catch (IllegalArgumentException e_illegal) { // exception block parameters can be configured separately } + } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="LongVariable" - language="java" - since="0.3" - message="Avoid excessively long variable names like {0}" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#longvariable"> - <description> - Fields, formal arguments, or local variable names that are too long can make the code difficult to follow. - </description> - <priority>3</priority> - <properties> - <property name="minimum" type="Integer" description="The variable length reporting threshold" min="1" max="100" value="17"/> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="LongVariable" + language="java" + since="0.3" + message="Avoid excessively long variable names like {0}" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#longvariable"> + <description> +Fields, formal arguments, or local variable names that are too long can make the code difficult to follow. + </description> + <priority>3</priority> + <properties> + <property name="minimum" type="Integer" description="The variable length reporting threshold" min="1" max="100" value="17"/> + <property name="xpath"> + <value> +<![CDATA[ //VariableDeclaratorId[string-length(@Image) > $minimum] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Something { int reallyLongIntName = -3; // VIOLATION - Field public static void main( String argumentsList[] ) { // VIOLATION - Formal @@ -1196,23 +1240,23 @@ public class Something { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="MDBAndSessionBeanNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="SessionBean or MessageBean should be suffixed by Bean" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#mdbandsessionbeannamingconvention"> - <description> - The EJB Specification states that any MessageDrivenBean or SessionBean should be suffixed by 'Bean'. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="MDBAndSessionBeanNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="SessionBean or MessageBean should be suffixed by Bean" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#mdbandsessionbeannamingconvention"> + <description> +The EJB Specification states that any MessageDrivenBean or SessionBean should be suffixed by 'Bean'. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //TypeDeclaration/ClassOrInterfaceDeclaration [ ( @@ -1227,88 +1271,92 @@ public class Something { ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class SomeBean implements SessionBean{} // proper name + public class MissingTheProperSuffix implements SessionBean {} // non-standard name ]]> - </example> - </rule> + </example> + </rule> - <rule name="MethodArgumentCouldBeFinal" - since="2.2" - message="Parameter ''{0}'' is not assigned and could be declared final" - class="net.sourceforge.pmd.lang.java.rule.codestyle.MethodArgumentCouldBeFinalRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#methodargumentcouldbefinal"> - <description> - A method argument that is never re-assigned within the method can be declared final. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="MethodArgumentCouldBeFinal" + since="2.2" + message="Parameter ''{0}'' is not assigned and could be declared final" + class="net.sourceforge.pmd.lang.java.rule.codestyle.MethodArgumentCouldBeFinalRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#methodargumentcouldbefinal"> + <description> +A method argument that is never re-assigned within the method can be declared final. + </description> + <priority>3</priority> + <example> +<![CDATA[ public void foo1 (String param) { // do stuff with param never assigning it + } + public void foo2 (final String param) { // better, do stuff with param never assigning it + } ]]> - </example> - </rule> + </example> + </rule> - <rule name="MethodNamingConventions" - since="1.2" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.MethodNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#methodnamingconventions"> - <description> - Configurable naming conventions for method declarations. This rule reports - method declarations which do not match the regex that applies to their - specific kind (e.g. JUnit test or native method). Each regex can be - configured through properties. + <rule name="MethodNamingConventions" + since="1.2" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.MethodNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#methodnamingconventions"> + <description> + Configurable naming conventions for method declarations. This rule reports + method declarations which do not match the regex that applies to their + specific kind (e.g. JUnit test or native method). Each regex can be + configured through properties. - By default this rule uses the standard Java naming convention (Camel case). - </description> - <priority>1</priority> - <example> - <![CDATA[ + By default this rule uses the standard Java naming convention (Camel case). + </description> + <priority>1</priority> + <example> +<![CDATA[ public class Foo { public void fooStuff() { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="MIsLeadingVariableName" - language="java" - since="3.4" - deprecated="true" - message="Avoid naming non-fields with the prefix 'm_'" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#misleadingvariablename"> - <description> - Detects when a non-field has a name starting with 'm_'. This usually denotes a field and could be confusing. + <rule name="MIsLeadingVariableName" + language="java" + since="3.4" + deprecated="true" + message="Avoid naming non-fields with the prefix 'm_'" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#misleadingvariablename"> + <description> +Detects when a non-field has a name starting with 'm_'. This usually denotes a field and could be confusing. - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by the more general rule - {% rule java/codestyle/LocalVariableNamingConventions %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the more general rule +{% rule java/codestyle/LocalVariableNamingConventions %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //VariableDeclaratorId [starts-with(@Image, 'm_')] [not (../../../FieldDeclaration)] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Foo { private int m_foo; // OK public void bar(String m_baz) { // Bad @@ -1316,56 +1364,56 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="NoPackage" - language="java" - since="3.3" - message="All classes and interfaces must belong to a named package" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#nopackage"> - <description> - Detects when a class or interface does not have a package definition. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value>//ClassOrInterfaceDeclaration[count(preceding::PackageDeclaration) = 0]</value> - </property> - </properties> - <example> - <![CDATA[ + <rule name="NoPackage" + language="java" + since="3.3" + message="All classes and interfaces must belong to a named package" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#nopackage"> + <description> +Detects when a class or interface does not have a package definition. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value>//ClassOrInterfaceDeclaration[count(preceding::PackageDeclaration) = 0]</value> + </property> + </properties> + <example> +<![CDATA[ // no package declaration public class ClassInDefaultPackage { } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UseUnderscoresInNumericLiterals" - language="java" - since="6.10.0" - minimumLanguageVersion="1.7" - message="Number {0} should separate every third digit with an underscore" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#useunderscoresinnumericliterals"> - <description> - Since Java 1.7, numeric literals can use underscores to separate digits. This rule enforces that - numeric literals above a certain length use these underscores to increase readability. + <rule name="UseUnderscoresInNumericLiterals" + language="java" + since="6.10.0" + minimumLanguageVersion="1.7" + message="Number {0} should separate every third digit with an underscore" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#useunderscoresinnumericliterals"> + <description> + Since Java 1.7, numeric literals can use underscores to separate digits. This rule enforces that + numeric literals above a certain length use these underscores to increase readability. - The rule only supports decimal (base 10) literals for now. The acceptable length under which literals - are not required to have underscores is configurable via a property. Even under that length, underscores - that are misplaced (not making groups of 3 digits) are reported. - </description> - <priority>3</priority> - <properties> - <property name="version" value="2.0"/> - <property name="acceptableDecimalLength" type="Integer" value="4" min="3" max="1000" - description="Length under which literals in base 10 are not required to have underscores"/> - <property name="xpath"> - <value> - <![CDATA[ + The rule only supports decimal (base 10) literals for now. The acceptable length under which literals + are not required to have underscores is configurable via a property. Even under that length, underscores + that are misplaced (not making groups of 3 digits) are reported. + </description> + <priority>3</priority> + <properties> + <property name="version" value="2.0"/> + <property name="acceptableDecimalLength" type="Integer" value="4" min="3" max="1000" + description="Length under which literals in base 10 are not required to have underscores"/> + <property name="xpath"> + <value> + <![CDATA[ //Literal[ @IntLiteral = true() or @LongLiteral = true() @@ -1385,29 +1433,29 @@ public class ClassInDefaultPackage { ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ public class Foo { private int num = 1000000; // should be 1_000_000 } ]]> - </example> - </rule> + </example> + </rule> - <rule name="OnlyOneReturn" - since="1.0" - message="A method should have only one exit point, and that should be the last statement in the method" - class="net.sourceforge.pmd.lang.java.rule.codestyle.OnlyOneReturnRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#onlyonereturn"> - <description> - A method should have only one exit point, and that should be the last statement in the method. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="OnlyOneReturn" + since="1.0" + message="A method should have only one exit point, and that should be the last statement in the method" + class="net.sourceforge.pmd.lang.java.rule.codestyle.OnlyOneReturnRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#onlyonereturn"> + <description> +A method should have only one exit point, and that should be the last statement in the method. + </description> + <priority>3</priority> + <example> +<![CDATA[ public class OneReturnOnly1 { public void foo(int x) { if (x > 0) { @@ -1417,71 +1465,76 @@ public class OneReturnOnly1 { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="PackageCase" - language="java" - since="3.3" - message="Package name contains upper case characters" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#packagecase"> - <description> - Detects when a package definition contains uppercase characters. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value>//PackageDeclaration/Name[lower-case(@Image)!=@Image]</value> - </property> - </properties> - <example> - <![CDATA[ + <rule name="PackageCase" + language="java" + since="3.3" + message="Package name contains upper case characters" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#packagecase"> + <description> +Detects when a package definition contains uppercase characters. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value>//PackageDeclaration/Name[lower-case(@Image)!=@Image]</value> + </property> + </properties> + <example> +<![CDATA[ package com.MyCompany; // should be lowercase name + public class SomeClass { } ]]> - </example> - </rule> + </example> + </rule> - <rule name="PrematureDeclaration" - language="java" - since="5.0" - message="Avoid declaring a variable if it is unreferenced before a possible exit point." - class="net.sourceforge.pmd.lang.java.rule.codestyle.PrematureDeclarationRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#prematuredeclaration"> - <description> - Checks for variables that are defined before they might be used. A reference is deemed to be premature if it is created right before a block of code that doesn't use it that also has the ability to return or throw an exception. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="PrematureDeclaration" + language="java" + since="5.0" + message="Avoid declaring a variable if it is unreferenced before a possible exit point." + class="net.sourceforge.pmd.lang.java.rule.codestyle.PrematureDeclarationRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#prematuredeclaration"> + <description> +Checks for variables that are defined before they might be used. A reference is deemed to be premature if it is created right before a block of code that doesn't use it that also has the ability to return or throw an exception. + </description> + <priority>3</priority> + <example> +<![CDATA[ public int getLength(String[] strings) { + int length = 0; // declared prematurely + if (strings == null || strings.length == 0) return 0; + for (String str : strings) { length += str.length(); } + return length; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="RemoteInterfaceNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Remote Interface of a Session EJB should NOT be suffixed" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#remoteinterfacenamingconvention"> - <description> - Remote Interface of a Session EJB should not have a suffix. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="RemoteInterfaceNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Remote Interface of a Session EJB should NOT be suffixed" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#remoteinterfacenamingconvention"> + <description> +Remote Interface of a Session EJB should not have a suffix. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration [ ( @@ -1497,35 +1550,37 @@ public int getLength(String[] strings) { ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ /* Poor Session suffix */ public interface BadSuffixSession extends javax.ejb.EJBObject {} + /* Poor EJB suffix */ public interface BadSuffixEJB extends javax.ejb.EJBObject {} + /* Poor Bean suffix */ public interface BadSuffixBean extends javax.ejb.EJBObject {} ]]> - </example> - </rule> + </example> + </rule> - <rule name="RemoteSessionInterfaceNamingConvention" - language="java" - since="4.0" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Remote Home interface of a Session EJB should be suffixed by 'Home'" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#remotesessioninterfacenamingconvention"> - <description> - A Remote Home interface type of a Session EJB should be suffixed by 'Home'. - </description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="RemoteSessionInterfaceNamingConvention" + language="java" + since="4.0" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Remote Home interface of a Session EJB should be suffixed by 'Home'" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#remotesessioninterfacenamingconvention"> + <description> +A Remote Home interface type of a Session EJB should be suffixed by 'Home'. + </description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration [ ( @@ -1538,91 +1593,92 @@ public interface BadSuffixBean extends javax.ejb.EJBObject {} ) ] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public interface MyBeautifulHome extends javax.ejb.EJBHome {} // proper name + public interface MissingProperSuffix extends javax.ejb.EJBHome {} // non-standard name ]]> - </example> - </rule> + </example> + </rule> - <rule name="ShortClassName" - language="java" - since="5.0" - message="Avoid short class names like {0}" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortclassname"> - <description> - Short Classnames with fewer than e.g. five characters are not recommended. - </description> - <priority>4</priority> - <properties> - <property name="minimum" type="Integer" value="5" min="1" max="100" description="Number of characters that are required as a minimum for a class name."/> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="ShortClassName" + language="java" + since="5.0" + message="Avoid short class names like {0}" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortclassname"> + <description> +Short Classnames with fewer than e.g. five characters are not recommended. + </description> + <priority>4</priority> + <properties> + <property name="minimum" type="Integer" value="5" min="1" max="100" description="Number of characters that are required as a minimum for a class name."/> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration[string-length(@Image) < $minimum] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Foo { } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ShortMethodName" - language="java" - since="0.3" - message="Avoid using short method names" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortmethodname"> - <description> - Method names that are very short are not helpful to the reader. - </description> - <priority>3</priority> - <properties> - <property name="minimum" type="Integer" value="3" min="1" max="100" description="Number of characters that are required as a minimum for a method name."/> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="ShortMethodName" + language="java" + since="0.3" + message="Avoid using short method names" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortmethodname"> + <description> +Method names that are very short are not helpful to the reader. + </description> + <priority>3</priority> + <properties> + <property name="minimum" type="Integer" value="3" min="1" max="100" description="Number of characters that are required as a minimum for a method name."/> + <property name="xpath"> + <value> +<![CDATA[ //MethodDeclarator[string-length(@Image) < $minimum] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class ShortMethod { public void a( int i ) { // Violation } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="ShortVariable" - language="java" - since="0.3" - message="Avoid variables with short names like {0}" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortvariable"> - <description> - Fields, local variables, or parameter names that are very short are not helpful to the reader. - </description> - <priority>3</priority> - <properties> - <property name="minimum" type="Integer" value="3" min="1" max="100" description="Number of characters that are required as a minimum for a variable name."/> - <property name="version" value="2.0"/> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="ShortVariable" + language="java" + since="0.3" + message="Avoid variables with short names like {0}" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#shortvariable"> + <description> +Fields, local variables, or parameter names that are very short are not helpful to the reader. + </description> + <priority>3</priority> + <properties> + <property name="minimum" type="Integer" value="3" min="1" max="100" description="Number of characters that are required as a minimum for a variable name."/> + <property name="version" value="2.0"/> + <property name="xpath"> + <value> +<![CDATA[ //VariableDeclaratorId[string-length(@Image) < $minimum] (: ForStatement :) [not(../../..[self::ForInit])] @@ -1633,11 +1689,11 @@ public class ShortMethod { (: Lambda expression parameter :) [not(parent::LambdaExpression or ../../..[self::LambdaExpression])] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Something { private int q = 15; // field - too short public static void main( String as[] ) { // formal arg - too short @@ -1651,38 +1707,38 @@ public class Something { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="SuspiciousConstantFieldName" - language="java" - since="2.0" - deprecated="true" - message="The field name indicates a constant but its modifiers do not" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#suspiciousconstantfieldname"> - <description> - Field names using all uppercase characters - Sun's Java naming conventions indicating constants - should - be declared as final. + <rule name="SuspiciousConstantFieldName" + language="java" + since="2.0" + deprecated="true" + message="The field name indicates a constant but its modifiers do not" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#suspiciousconstantfieldname"> + <description> +Field names using all uppercase characters - Sun's Java naming conventions indicating constants - should +be declared as final. - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by the more general rule {% rule java/codestyle/FieldNamingConventions %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the more general rule {% rule java/codestyle/FieldNamingConventions %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //ClassOrInterfaceDeclaration[@Interface='false'] /ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/FieldDeclaration [@Final='false'] [VariableDeclarator/VariableDeclaratorId[upper-case(@Image)=@Image]] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Foo { // this is bad, since someone could accidentally // do PI = 2.71828; which is actually e @@ -1690,136 +1746,144 @@ public class Foo { double PI = 3.16; } ]]> - </example> - </rule> + </example> + </rule> - <rule name="TooManyStaticImports" - language="java" - since="4.1" - class="net.sourceforge.pmd.lang.rule.XPathRule" - message="Too many static imports may lead to messy code" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#toomanystaticimports"> - <description> - If you overuse the static import feature, it can make your program unreadable and - unmaintainable, polluting its namespace with all the static members you import. - Readers of your code (including you, a few months after you wrote it) will not know - which class a static member comes from (Sun 1.5 Language Guide). - </description> - <priority>3</priority> - <properties> - <property name="maximumStaticImports" type="Integer" - description="All static imports can be disallowed by setting this to 0" min="0" max="100" value="4"/> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="TooManyStaticImports" + language="java" + since="4.1" + class="net.sourceforge.pmd.lang.rule.XPathRule" + message="Too many static imports may lead to messy code" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#toomanystaticimports"> + <description> +If you overuse the static import feature, it can make your program unreadable and +unmaintainable, polluting its namespace with all the static members you import. +Readers of your code (including you, a few months after you wrote it) will not know +which class a static member comes from (Sun 1.5 Language Guide). + </description> + <priority>3</priority> + <properties> + <property name="maximumStaticImports" type="Integer" + description="All static imports can be disallowed by setting this to 0" min="0" max="100" value="4"/> + <property name="xpath"> + <value> +<![CDATA[ .[count(ImportDeclaration[@Static = 'true']) > $maximumStaticImports] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ import static Lennon; import static Ringo; import static George; import static Paul; import static Yoko; // Too much ! ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryAnnotationValueElement" - since="6.2.0" - message="Avoid the use of value in annotations when it's the only element" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryAnnotationValueElementRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryannotationvalueelement"> - <description> - Avoid the use of value in annotations when it's the only element. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="UnnecessaryAnnotationValueElement" + since="6.2.0" + message="Avoid the use of value in annotations when it's the only element" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryAnnotationValueElementRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryannotationvalueelement"> + <description> + Avoid the use of value in annotations when it's the only element. + </description> + <priority>3</priority> + <example> + <![CDATA[ @TestClassAnnotation(value = "TEST") public class Foo { + @TestMemberAnnotation(value = "TEST") private String y; + @TestMethodAnnotation(value = "TEST") public void bar() { int x = 42; return; } } + // should be + @TestClassAnnotation("TEST") public class Foo { + @TestMemberAnnotation("TEST") private String y; + @TestMethodAnnotation("TEST") public void bar() { int x = 42; return; } } + ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryConstructor" - language="java" - since="1.0" - message="Avoid unnecessary constructors - the compiler will generate these for you" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryConstructorRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryconstructor"> - <description> - This rule detects when a constructor is not necessary; i.e., when there is only one constructor and the - constructor is identical to the default constructor. The default constructor should has same access - modifier as the declaring class. In an enum type, the default constructor is implicitly private. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="UnnecessaryConstructor" + language="java" + since="1.0" + message="Avoid unnecessary constructors - the compiler will generate these for you" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryConstructorRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryconstructor"> + <description> +This rule detects when a constructor is not necessary; i.e., when there is only one constructor and the +constructor is identical to the default constructor. The default constructor should has same access +modifier as the declaring class. In an enum type, the default constructor is implicitly private. + </description> + <priority>3</priority> + <example> +<![CDATA[ public class Foo { public Foo() {} } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryFullyQualifiedName" - language="java" - since="5.0" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryFullyQualifiedNameRule" - message="Unnecessary use of fully qualified name ''{0}'' due to existing {2}import ''{1}''" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname"> - <description> - Import statements allow the use of non-fully qualified names. The use of a fully qualified name - which is covered by an import statement is redundant. Consider using the non-fully qualified name. - </description> - <priority>4</priority> - <example> - <![CDATA[ + <rule name="UnnecessaryFullyQualifiedName" + language="java" + since="5.0" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryFullyQualifiedNameRule" + message="Unnecessary use of fully qualified name ''{0}'' due to existing {2}import ''{1}''" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname"> + <description> +Import statements allow the use of non-fully qualified names. The use of a fully qualified name +which is covered by an import statement is redundant. Consider using the non-fully qualified name. + </description> + <priority>4</priority> + <example> +<![CDATA[ import java.util.List; + public class Foo { private java.util.List list1; // Unnecessary FQN private List list2; // More appropriate given import of 'java.util.List' } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryLocalBeforeReturn" - since="3.3" - message="Consider simply returning the value vs storing it in local variable ''{0}''" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryLocalBeforeReturnRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarylocalbeforereturn"> - <description> - Avoid the creation of unnecessary local variables - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="UnnecessaryLocalBeforeReturn" + since="3.3" + message="Consider simply returning the value vs storing it in local variable ''{0}''" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryLocalBeforeReturnRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarylocalbeforereturn"> + <description> +Avoid the creation of unnecessary local variables + </description> + <priority>3</priority> + <example> +<![CDATA[ public class Foo { public int foo() { int x = doSomething(); @@ -1827,25 +1891,25 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryModifier" - language="java" - since="1.02" - message="Unnecessary modifier{0} on {1} ''{2}''{3}" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryModifierRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarymodifier"> - <description> - Fields in interfaces and annotations are automatically `public static final`, and methods are `public abstract`. - Classes, interfaces or annotations nested in an interface or annotation are automatically `public static` - (all nested interfaces and annotations are automatically static). - Nested enums are automatically `static`. - For historical reasons, modifiers which are implied by the context are accepted by the compiler, but are superfluous. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="UnnecessaryModifier" + language="java" + since="1.02" + message="Unnecessary modifier{0} on {1} ''{2}''{3}" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryModifierRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessarymodifier"> + <description> +Fields in interfaces and annotations are automatically `public static final`, and methods are `public abstract`. +Classes, interfaces or annotations nested in an interface or annotation are automatically `public static` +(all nested interfaces and annotations are automatically static). +Nested enums are automatically `static`. +For historical reasons, modifiers which are implied by the context are accepted by the compiler, but are superfluous. + </description> + <priority>3</priority> + <example> +<![CDATA[ public @interface Annotation { public abstract void bar(); // both abstract and public are ignored by the compiler public static final int X = 0; // public, static, and final all ignored @@ -1865,20 +1929,20 @@ public class Bar { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UnnecessaryReturn" - since="1.3" - message="Avoid unnecessary return statements" - class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryReturnRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryreturn"> - <description> - Avoid the use of unnecessary return statements. - </description> - <priority>3</priority> - <example> - <![CDATA[ + <rule name="UnnecessaryReturn" + since="1.3" + message="Avoid unnecessary return statements" + class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryReturnRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#unnecessaryreturn"> + <description> +Avoid the use of unnecessary return statements. + </description> + <priority>3</priority> + <example> +<![CDATA[ public class Foo { public void bar() { int x = 42; @@ -1886,27 +1950,27 @@ public class Foo { } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UseDiamondOperator" - language="java" - since="6.11.0" - message="Explicit type arguments can be replaced by Diamond Operator" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#usediamondoperator" - minimumLanguageVersion="1.7"> - <description> - Use the diamond operator to let the type be inferred automatically. With the Diamond operator it is possible - to avoid duplication of the type parameters. - Instead, the compiler is now able to infer the parameter types for constructor calls, - which makes the code also more readable. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="UseDiamondOperator" + language="java" + since="6.11.0" + message="Explicit type arguments can be replaced by Diamond Operator" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#usediamondoperator" + minimumLanguageVersion="1.7"> + <description> +Use the diamond operator to let the type be inferred automatically. With the Diamond operator it is possible +to avoid duplication of the type parameters. +Instead, the compiler is now able to infer the parameter types for constructor calls, +which makes the code also more readable. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ //VariableInitializer //PrimaryExpression[not(PrimarySuffix)] [not(ancestor::ArgumentList)] @@ -1917,29 +1981,29 @@ public class Foo { [not(ancestor::ArgumentList)] /PrimaryPrefix/AllocationExpression[ClassOrInterfaceType[@AnonymousClass='false']/TypeArguments//ReferenceType[not(.//TypeArguments)]] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> + <![CDATA[ List<String> strings = new ArrayList<String>(); // unnecessary duplication of type parameters List<String> stringsWithDiamond = new ArrayList<>(); // using the diamond operator is more concise ]]> - </example> - </rule> + </example> + </rule> - <rule name="UselessParentheses" - language="java" - since="5.0" - message="Useless parentheses." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#uselessparentheses"> - <description>Useless parentheses should be removed.</description> - <priority>4</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="UselessParentheses" + language="java" + since="5.0" + message="Useless parentheses." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#uselessparentheses"> + <description>Useless parentheses should be removed.</description> + <priority>4</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //Expression[not(parent::PrimaryPrefix)]/PrimaryExpression[count(*)>1] /PrimaryPrefix/Expression [not(./CastExpression)] @@ -1995,37 +2059,39 @@ List<String> stringsWithDiamond = new ArrayList<>(); // using the diamond operat not(./ConditionalOrExpression) and not(./EqualityExpression)] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Foo { + private int _bar1; private Integer _bar2; + public void setBar(int n) { _bar1 = Integer.valueOf((n)); // here _bar2 = (n); // and here } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="UselessQualifiedThis" - language="java" - since="5.4.0" - message="Useless qualified this usage in the same class." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#uselessqualifiedthis"> - <description> - Reports qualified this usages in the same class. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> - <![CDATA[ + <rule name="UselessQualifiedThis" + language="java" + since="5.4.0" + message="Useless qualified this usage in the same class." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#uselessqualifiedthis"> + <description> + Reports qualified this usages in the same class. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> +<![CDATA[ //PrimaryExpression [PrimaryPrefix/Name[@Image]] [PrimarySuffix[@Arguments='false' and @ArrayDereference = 'false']] @@ -2033,16 +2099,18 @@ public class Foo { [ancestor::ClassOrInterfaceBodyDeclaration[1][@AnonymousInnerClass='false']] /PrimaryPrefix/Name[@Image = ancestor::ClassOrInterfaceDeclaration[1]/@Image] ]]> - </value> - </property> - </properties> - <example> - <![CDATA[ + </value> + </property> + </properties> + <example> +<![CDATA[ public class Foo { final Foo otherFoo = Foo.this; // use "this" directly + public void doSomething() { final Foo anotherFoo = Foo.this; // use "this" directly } + private ActionListener returnListener() { return new ActionListener() { @Override @@ -2051,76 +2119,78 @@ public class Foo { } }; } + private class Foo3 { final Foo myFoo = Foo.this; // This is fine } + private class Foo2 { final Foo2 myFoo2 = Foo2.this; // Use "this" direclty } } ]]> - </example> - </rule> + </example> + </rule> - <rule name="VariableNamingConventions" - since="1.2" - deprecated="true" - message="{0} variable {1} should begin with {2}" - class="net.sourceforge.pmd.lang.java.rule.codestyle.VariableNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#variablenamingconventions"> - <description> - A variable naming conventions rule - customize this to your liking. Currently, it - checks for final variables that should be fully capitalized and non-final variables - that should not include underscores. + <rule name="VariableNamingConventions" + since="1.2" + deprecated="true" + message="{0} variable {1} should begin with {2}" + class="net.sourceforge.pmd.lang.java.rule.codestyle.VariableNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#variablenamingconventions"> + <description> +A variable naming conventions rule - customize this to your liking. Currently, it +checks for final variables that should be fully capitalized and non-final variables +that should not include underscores. - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by the more general rules {% rule java/codestyle/FieldNamingConventions %}, - {% rule java/codestyle/FormalParameterNamingConventions %}, and - {% rule java/codestyle/LocalVariableNamingConventions %}. - </description> - <priority>1</priority> - <example> - <![CDATA[ +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the more general rules {% rule java/codestyle/FieldNamingConventions %}, +{% rule java/codestyle/FormalParameterNamingConventions %}, and +{% rule java/codestyle/LocalVariableNamingConventions %}. + </description> + <priority>1</priority> + <example> +<![CDATA[ public class Foo { public static final int MY_NUM = 0; public String myTest = ""; DataModule dmTest = new DataModule(); } ]]> - </example> - </rule> + </example> + </rule> - <rule name="WhileLoopsMustUseBraces" - language="java" - since="0.7" - deprecated="true" - message="Avoid using 'while' statements without curly braces" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#whileloopsmustusebraces"> - <description> - Avoid using 'while' statements without using braces to surround the code block. If the code - formatting or indentation is lost then it becomes difficult to separate the code being - controlled from the rest. + <rule name="WhileLoopsMustUseBraces" + language="java" + since="0.7" + deprecated="true" + message="Avoid using 'while' statements without curly braces" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#whileloopsmustusebraces"> + <description> +Avoid using 'while' statements without using braces to surround the code block. If the code +formatting or indentation is lost then it becomes difficult to separate the code being +controlled from the rest. - This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced - by the rule {% rule java/codestyle/ControlStatementBraces %}. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value>//WhileStatement[not(Statement/Block)]</value> - </property> - </properties> - <example> - <![CDATA[ +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the rule {% rule java/codestyle/ControlStatementBraces %}. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value>//WhileStatement[not(Statement/Block)]</value> + </property> + </properties> + <example> +<![CDATA[ while (true) // not recommended x++; - + while (true) { // preferred approach x++; } ]]> - </example> - </rule> + </example> + </rule> -</ruleset> \ No newline at end of file +</ruleset> From ae05641f8c44d77e613b5c116e8915755f5ab592 Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Sun, 17 Feb 2019 02:16:24 -0300 Subject: [PATCH 016/371] ant file to make all swift nodes implement Node --- pmd-swift/pom.xml | 25 +++++++++++++++++++++++++ pmd-swift/src/main/ant/antlr4.xml | 10 ++++++++++ 2 files changed, 35 insertions(+) create mode 100644 pmd-swift/src/main/ant/antlr4.xml diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index f84fd9490f..4ca080ae2d 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -10,8 +10,33 @@ <version>7.0.0-SNAPSHOT</version> </parent> + <properties> + <antlr4.visitor>true</antlr4.visitor> + </properties> + <build> <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <inherited>true</inherited> + <executions> + <execution> + <id>process-sources</id> + <phase>process-sources</phase> + <configuration> + <target> + <ant antfile="src/main/ant/antlr4.xml"> + <property name="target" value="${project.build.directory}/generated-sources/antlr4" /> + </ant> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> <plugin> <groupId>org.antlr</groupId> <artifactId>antlr4-maven-plugin</artifactId> diff --git a/pmd-swift/src/main/ant/antlr4.xml b/pmd-swift/src/main/ant/antlr4.xml new file mode 100644 index 0000000000..60f6be9a3b --- /dev/null +++ b/pmd-swift/src/main/ant/antlr4.xml @@ -0,0 +1,10 @@ +<project name="pmd" default="antlr4" basedir="../../../../"> + + <property name="target-package-dir" value="${target}/net/sourceforge/pmd/lang/swift/antlr4" /> + + <target name="antlr4" description="Generates all Antlr4 aspects within PMD"> + <replace file="${target-package-dir}/SwiftParser.java" + token="extends ParserRuleContext" + value="extends net.sourceforge.pmd.lang.ast.AntlrBaseNode" /> + </target> +</project> \ No newline at end of file From 47bc813cafc35b1df4a7124465bf0b96da42cd55 Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Mon, 25 Feb 2019 14:33:09 -0300 Subject: [PATCH 017/371] added AntlrBaseParser adapter and SwiftParserAdapter --- .../pmd/lang/antlr/AntlrBaseParser.java | 74 +++++++++++++++++++ .../pmd/lang/swift/SwiftParserAdapter.java | 43 +++++++++++ 2 files changed, 117 insertions(+) create mode 100644 pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java create mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java new file mode 100644 index 0000000000..5742356905 --- /dev/null +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java @@ -0,0 +1,74 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.antlr; + +import java.io.IOException; +import java.io.Reader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import org.antlr.v4.runtime.Lexer; + +import net.sourceforge.pmd.lang.Parser; +import net.sourceforge.pmd.lang.ParserOptions; +import net.sourceforge.pmd.lang.TokenManager; +import net.sourceforge.pmd.lang.ast.AntlrBaseNode; +import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.ast.ParseException; + +/** + * Generic Antlr parser adapter for all Antlr parsers. + */ +public abstract class AntlrBaseParser implements Parser { + + protected final ParserOptions parserOptions; + + public AntlrBaseParser(final ParserOptions parserOptions) { + this.parserOptions = parserOptions; + } + + @Override + public ParserOptions getParserOptions() { + return parserOptions; + } + + @Override + public TokenManager getTokenManager(final String fileName, final Reader source) { + try { + return new AntlrTokenManager(getLexer(source), fileName); + } catch (final IOException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public Node parse(final String fileName, final Reader source) throws ParseException { + AntlrBaseNode rootNode = null; + try { + rootNode = getRootNode(getParser(getLexer(source))); + } catch (final IOException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + return rootNode; + } + + private AntlrBaseNode getRootNode(final org.antlr.v4.runtime.Parser parser) + throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + final Method rootMethod = parser.getClass().getMethod(parser.getRuleNames()[0]); + return (AntlrBaseNode) rootMethod.invoke(parser); + } + + @Override + public Map<Integer, String> getSuppressMap() { + return new HashMap<>(); + } + + protected abstract Lexer getLexer(Reader source) throws IOException; + + protected abstract org.antlr.v4.runtime.Parser getParser(Lexer lexer); +} diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java new file mode 100644 index 0000000000..18eb0ccafb --- /dev/null +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java @@ -0,0 +1,43 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.swift; + +import java.io.IOException; +import java.io.Reader; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; + +import net.sourceforge.pmd.lang.ParserOptions; +import net.sourceforge.pmd.lang.antlr.AntlrBaseParser; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftLexer; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; + +/** + * Adapter for the SwiftParser. + */ +public class SwiftParserAdapter extends AntlrBaseParser { + + public SwiftParserAdapter(final ParserOptions parserOptions) { + super(parserOptions); + } + + @Override + protected Lexer getLexer(final Reader source) throws IOException { + return new SwiftLexer(CharStreams.fromReader(source)); + } + + @Override + protected Parser getParser(final Lexer lexer) { + return new SwiftParser(new CommonTokenStream(lexer)); + } + + @Override + public boolean canParse() { + return true; + } +} From 8255af258feb806793e4f4d878b45ff432a9a13f Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Mon, 25 Feb 2019 18:34:51 -0300 Subject: [PATCH 018/371] added Antlr visitor infrastructure and swift implementation --- .../pmd/lang/antlr/AbstractAntlrVisitor.java | 85 +++++++++++++++++++ .../pmd/lang/antlr/AntlrRuleChainVisitor.java | 42 +++++++++ .../lang/antlr/AntlrRuleViolationFactory.java | 36 ++++++++ pmd-swift/src/main/ant/antlr4.xml | 11 ++- .../pmd/lang/swift/AbstractSwiftRule.java | 14 +++ 5 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java create mode 100644 pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java create mode 100644 pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleViolationFactory.java create mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/AbstractSwiftRule.java diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java new file mode 100644 index 0000000000..6694ae1c0b --- /dev/null +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java @@ -0,0 +1,85 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.antlr; + +import java.util.List; + +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; +import org.antlr.v4.runtime.tree.RuleNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +import net.sourceforge.pmd.RuleContext; +import net.sourceforge.pmd.lang.ast.AntlrBaseNode; +import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.rule.AbstractRule; + +public abstract class AbstractAntlrVisitor<T> extends AbstractRule implements ParseTreeVisitor<T> { + + protected RuleContext data; + + @Override + public void start(RuleContext ctx) { + data = ctx; + } + + @Override + public T visit(ParseTree tree) { + return tree.accept(this); + } + + @Override + public T visitChildren(RuleNode node) { + T result = this.defaultResult(); + int n = node.getChildCount(); + + for (int i = 0; i < n && this.shouldVisitNextChild(node, result); ++i) { + ParseTree c = node.getChild(i); + T childResult = c.accept(this); + result = this.aggregateResult(result, childResult); + } + + return result; + } + + @Override + public T visitTerminal(TerminalNode node) { + return this.defaultResult(); + } + + @Override + public T visitErrorNode(ErrorNode node) { + return this.defaultResult(); + } + + protected T defaultResult() { + return null; + } + + protected T aggregateResult(T aggregate, T nextResult) { + return nextResult; + } + + protected boolean shouldVisitNextChild(RuleNode node, T currentResult) { + return true; + } + + @Override + public void apply(List<? extends Node> nodes, RuleContext ctx) { + visitAll(nodes); + } + + protected void visitAll(List<? extends Node> nodes) { + for (Node n : nodes) { + AntlrBaseNode node = (AntlrBaseNode) n; + visit(node); + } + } + + public Object visit(final AntlrBaseNode node) { + return node.accept(this); + } +} diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java new file mode 100644 index 0000000000..ba24b30575 --- /dev/null +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java @@ -0,0 +1,42 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.antlr; + +import java.util.List; + +import net.sourceforge.pmd.Rule; +import net.sourceforge.pmd.RuleContext; +import net.sourceforge.pmd.lang.ast.AntlrBaseNode; +import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor; +import net.sourceforge.pmd.lang.rule.XPathRule; + +public class AntlrRuleChainVisitor extends AbstractRuleChainVisitor { + @Override + protected void visit(Rule rule, Node node, RuleContext ctx) { + if (rule instanceof AbstractAntlrVisitor) { + ((AntlrBaseNode) node).accept((AbstractAntlrVisitor) rule); + } else { + ((XPathRule) rule).evaluate(node, ctx); + } + } + + @Override + protected void indexNodes(List<Node> nodes, RuleContext ctx) { + final AbstractAntlrVisitor antlrVisitor = new AbstractAntlrVisitor<Object>() { + // Perform a visitation of the AST to index nodes which need + // visiting by type + @Override + public Object visit(final AntlrBaseNode node) { + indexNode(node); + return super.visit(node); + } + }; + + for (int i = 0; i < nodes.size(); i++) { + antlrVisitor.visit((AntlrBaseNode) nodes.get(i)); + } + } +} diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleViolationFactory.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleViolationFactory.java new file mode 100644 index 0000000000..8d2584643e --- /dev/null +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleViolationFactory.java @@ -0,0 +1,36 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.antlr; + +import net.sourceforge.pmd.Rule; +import net.sourceforge.pmd.RuleContext; +import net.sourceforge.pmd.RuleViolation; +import net.sourceforge.pmd.lang.ast.AntlrBaseNode; +import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.rule.AbstractRuleViolationFactory; +import net.sourceforge.pmd.lang.rule.ParametricRuleViolation; +import net.sourceforge.pmd.lang.rule.RuleViolationFactory; + +public final class AntlrRuleViolationFactory extends AbstractRuleViolationFactory { + public static final RuleViolationFactory INSTANCE = new AntlrRuleViolationFactory(); + + private AntlrRuleViolationFactory() { + } + + @Override + protected RuleViolation createRuleViolation(final Rule rule, final RuleContext ruleContext, final Node node, + final String message) { + return new ParametricRuleViolation<>(rule, ruleContext, (AntlrBaseNode) node, message); + } + + @Override + protected RuleViolation createRuleViolation(final Rule rule, final RuleContext ruleContext, final Node node, + final String message, final int beginLine, final int endLine) { + final ParametricRuleViolation<AntlrBaseNode> violation = new ParametricRuleViolation<>(rule, ruleContext, + (AntlrBaseNode) node, message); + violation.setLines(beginLine, endLine); + return violation; + } +} diff --git a/pmd-swift/src/main/ant/antlr4.xml b/pmd-swift/src/main/ant/antlr4.xml index 60f6be9a3b..bd54620a73 100644 --- a/pmd-swift/src/main/ant/antlr4.xml +++ b/pmd-swift/src/main/ant/antlr4.xml @@ -1,10 +1,17 @@ <project name="pmd" default="antlr4" basedir="../../../../"> - <property name="target-package-dir" value="${target}/net/sourceforge/pmd/lang/swift/antlr4" /> - <target name="antlr4" description="Generates all Antlr4 aspects within PMD"> <replace file="${target-package-dir}/SwiftParser.java" token="extends ParserRuleContext" value="extends net.sourceforge.pmd.lang.ast.AntlrBaseNode" /> + <replace file="${target-package-dir}/SwiftBaseVisitor.java" + token="extends AbstractParseTreeVisitor" + value="extends AbstractAntlrVisitor" /> + <replace file="${target-package-dir}/SwiftBaseVisitor.java" + token="public class SwiftBaseVisitor" + value="public abstract class SwiftBaseVisitor" /> + <replace file="${target-package-dir}/SwiftBaseVisitor.java" + token="import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;" + value="import net.sourceforge.pmd.lang.antlr.AbstractAntlrVisitor;" /> </target> </project> \ No newline at end of file diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/AbstractSwiftRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/AbstractSwiftRule.java new file mode 100644 index 0000000000..62c94cc4a6 --- /dev/null +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/AbstractSwiftRule.java @@ -0,0 +1,14 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.swift; + +import net.sourceforge.pmd.lang.LanguageRegistry; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftBaseVisitor; + +public abstract class AbstractSwiftRule<T> extends SwiftBaseVisitor<T> { + public AbstractSwiftRule() { + super.setLanguage(LanguageRegistry.getLanguage(SwiftLanguageModule.NAME)); + } +} From 3cbcedf37d98ae0e5bda1583e0ff1908e4c1b402 Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Sat, 13 Apr 2019 19:30:33 -0300 Subject: [PATCH 019/371] Replace foreach --- .../net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java index ba24b30575..b20d6146de 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrRuleChainVisitor.java @@ -35,8 +35,8 @@ public class AntlrRuleChainVisitor extends AbstractRuleChainVisitor { } }; - for (int i = 0; i < nodes.size(); i++) { - antlrVisitor.visit((AntlrBaseNode) nodes.get(i)); + for (final Node node : nodes) { + antlrVisitor.visit((AntlrBaseNode) node); } } } From dd841d6ccb617f810afb9324cf62b0ffd9fee6c7 Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Sun, 17 Feb 2019 02:16:24 -0300 Subject: [PATCH 020/371] ant file to make all swift nodes implement Node --- pmd-swift/pom.xml | 25 +++++++++++++++++++++++++ pmd-swift/src/main/ant/antlr4.xml | 10 ++++++++++ 2 files changed, 35 insertions(+) create mode 100644 pmd-swift/src/main/ant/antlr4.xml diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index f84fd9490f..4ca080ae2d 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -10,8 +10,33 @@ <version>7.0.0-SNAPSHOT</version> </parent> + <properties> + <antlr4.visitor>true</antlr4.visitor> + </properties> + <build> <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <inherited>true</inherited> + <executions> + <execution> + <id>process-sources</id> + <phase>process-sources</phase> + <configuration> + <target> + <ant antfile="src/main/ant/antlr4.xml"> + <property name="target" value="${project.build.directory}/generated-sources/antlr4" /> + </ant> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> <plugin> <groupId>org.antlr</groupId> <artifactId>antlr4-maven-plugin</artifactId> diff --git a/pmd-swift/src/main/ant/antlr4.xml b/pmd-swift/src/main/ant/antlr4.xml new file mode 100644 index 0000000000..60f6be9a3b --- /dev/null +++ b/pmd-swift/src/main/ant/antlr4.xml @@ -0,0 +1,10 @@ +<project name="pmd" default="antlr4" basedir="../../../../"> + + <property name="target-package-dir" value="${target}/net/sourceforge/pmd/lang/swift/antlr4" /> + + <target name="antlr4" description="Generates all Antlr4 aspects within PMD"> + <replace file="${target-package-dir}/SwiftParser.java" + token="extends ParserRuleContext" + value="extends net.sourceforge.pmd.lang.ast.AntlrBaseNode" /> + </target> +</project> \ No newline at end of file From 10bbe24c45ae2a6616fbf36955a3b1ea89725bb5 Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Mon, 25 Feb 2019 14:33:09 -0300 Subject: [PATCH 021/371] added AntlrBaseParser adapter and SwiftParserAdapter --- .../pmd/lang/antlr/AntlrBaseParser.java | 74 +++++++++++++++++++ .../pmd/lang/swift/SwiftParserAdapter.java | 43 +++++++++++ 2 files changed, 117 insertions(+) create mode 100644 pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java create mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java new file mode 100644 index 0000000000..5742356905 --- /dev/null +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java @@ -0,0 +1,74 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.antlr; + +import java.io.IOException; +import java.io.Reader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import org.antlr.v4.runtime.Lexer; + +import net.sourceforge.pmd.lang.Parser; +import net.sourceforge.pmd.lang.ParserOptions; +import net.sourceforge.pmd.lang.TokenManager; +import net.sourceforge.pmd.lang.ast.AntlrBaseNode; +import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.ast.ParseException; + +/** + * Generic Antlr parser adapter for all Antlr parsers. + */ +public abstract class AntlrBaseParser implements Parser { + + protected final ParserOptions parserOptions; + + public AntlrBaseParser(final ParserOptions parserOptions) { + this.parserOptions = parserOptions; + } + + @Override + public ParserOptions getParserOptions() { + return parserOptions; + } + + @Override + public TokenManager getTokenManager(final String fileName, final Reader source) { + try { + return new AntlrTokenManager(getLexer(source), fileName); + } catch (final IOException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public Node parse(final String fileName, final Reader source) throws ParseException { + AntlrBaseNode rootNode = null; + try { + rootNode = getRootNode(getParser(getLexer(source))); + } catch (final IOException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + return rootNode; + } + + private AntlrBaseNode getRootNode(final org.antlr.v4.runtime.Parser parser) + throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + final Method rootMethod = parser.getClass().getMethod(parser.getRuleNames()[0]); + return (AntlrBaseNode) rootMethod.invoke(parser); + } + + @Override + public Map<Integer, String> getSuppressMap() { + return new HashMap<>(); + } + + protected abstract Lexer getLexer(Reader source) throws IOException; + + protected abstract org.antlr.v4.runtime.Parser getParser(Lexer lexer); +} diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java new file mode 100644 index 0000000000..18eb0ccafb --- /dev/null +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java @@ -0,0 +1,43 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.swift; + +import java.io.IOException; +import java.io.Reader; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.Parser; + +import net.sourceforge.pmd.lang.ParserOptions; +import net.sourceforge.pmd.lang.antlr.AntlrBaseParser; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftLexer; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; + +/** + * Adapter for the SwiftParser. + */ +public class SwiftParserAdapter extends AntlrBaseParser { + + public SwiftParserAdapter(final ParserOptions parserOptions) { + super(parserOptions); + } + + @Override + protected Lexer getLexer(final Reader source) throws IOException { + return new SwiftLexer(CharStreams.fromReader(source)); + } + + @Override + protected Parser getParser(final Lexer lexer) { + return new SwiftParser(new CommonTokenStream(lexer)); + } + + @Override + public boolean canParse() { + return true; + } +} From ed7a6f0951bb9380effd1ce6c4cc21a114a09e2b Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Sat, 13 Apr 2019 16:54:45 -0300 Subject: [PATCH 022/371] minor fixes --- .../net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java index 5742356905..d3a8e873a7 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java @@ -41,20 +41,17 @@ public abstract class AntlrBaseParser implements Parser { try { return new AntlrTokenManager(getLexer(source), fileName); } catch (final IOException e) { - e.printStackTrace(); + throw new RuntimeException(e); } - return null; } @Override public Node parse(final String fileName, final Reader source) throws ParseException { - AntlrBaseNode rootNode = null; try { - rootNode = getRootNode(getParser(getLexer(source))); + return getRootNode(getParser(getLexer(source))); } catch (final IOException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); + throw new ParseException(e); } - return rootNode; } private AntlrBaseNode getRootNode(final org.antlr.v4.runtime.Parser parser) From 3469834ebc72eb0709f6410ad8645f0637c5913b Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Sun, 21 Apr 2019 02:00:23 -0300 Subject: [PATCH 023/371] abstract getRootNode method --- .../sourceforge/pmd/lang/antlr/AntlrBaseParser.java | 12 +++--------- .../pmd/lang/swift/SwiftParserAdapter.java | 6 ++++++ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java index d3a8e873a7..460aa0334e 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java @@ -6,8 +6,6 @@ package net.sourceforge.pmd.lang.antlr; import java.io.IOException; import java.io.Reader; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @@ -49,22 +47,18 @@ public abstract class AntlrBaseParser implements Parser { public Node parse(final String fileName, final Reader source) throws ParseException { try { return getRootNode(getParser(getLexer(source))); - } catch (final IOException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + } catch (final IOException e) { throw new ParseException(e); } } - private AntlrBaseNode getRootNode(final org.antlr.v4.runtime.Parser parser) - throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { - final Method rootMethod = parser.getClass().getMethod(parser.getRuleNames()[0]); - return (AntlrBaseNode) rootMethod.invoke(parser); - } - @Override public Map<Integer, String> getSuppressMap() { return new HashMap<>(); } + protected abstract AntlrBaseNode getRootNode(org.antlr.v4.runtime.Parser parser); + protected abstract Lexer getLexer(Reader source) throws IOException; protected abstract org.antlr.v4.runtime.Parser getParser(Lexer lexer); diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java index 18eb0ccafb..dfa3f0b4a8 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java @@ -14,6 +14,7 @@ import org.antlr.v4.runtime.Parser; import net.sourceforge.pmd.lang.ParserOptions; import net.sourceforge.pmd.lang.antlr.AntlrBaseParser; +import net.sourceforge.pmd.lang.ast.AntlrBaseNode; import net.sourceforge.pmd.lang.swift.antlr4.SwiftLexer; import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; @@ -26,6 +27,11 @@ public class SwiftParserAdapter extends AntlrBaseParser { super(parserOptions); } + @Override + protected AntlrBaseNode getRootNode(final Parser parser) { + return ((SwiftParser) parser).topLevel(); + } + @Override protected Lexer getLexer(final Reader source) throws IOException { return new SwiftLexer(CharStreams.fromReader(source)); From 8758bc2643a3370101542b8e74337e795035f2fe Mon Sep 17 00:00:00 2001 From: jakivey32 <36869603+jakivey32@users.noreply.github.com> Date: Thu, 25 Apr 2019 02:55:49 -0500 Subject: [PATCH 024/371] Add lombok.experimental to AbstractLombokAwareRule --- .../sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java index e0f8fd5345..062da0f4bb 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java @@ -41,6 +41,7 @@ public class AbstractLombokAwareRule extends AbstractIgnoredAnnotationRule { LOMBOK_ANNOTATIONS.add("lombok.AllArgsConstructor"); LOMBOK_ANNOTATIONS.add("lombok.NoArgsConstructor"); LOMBOK_ANNOTATIONS.add("lombok.Builder"); + LOMBOK_ANNOTATIONS.add("lombok.experimental"); } @Override From 779848aa3fd734c658e68c00e7684f765ca4f571 Mon Sep 17 00:00:00 2001 From: "Venkatachalam, Srinivasan" <srvenkatachalam@paypal.com> Date: Sun, 28 Apr 2019 15:02:18 +0530 Subject: [PATCH 025/371] MethodReturnsInternalArray does not work in inner classes #1738 - Fixed --- .../lang/java/rule/bestpractices/AbstractSunSecureRule.java | 4 ++-- .../rule/bestpractices/MethodReturnsInternalArrayRule.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AbstractSunSecureRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AbstractSunSecureRule.java index 1e44a3959f..7f5b727cd9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AbstractSunSecureRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AbstractSunSecureRule.java @@ -6,6 +6,7 @@ package net.sourceforge.pmd.lang.java.rule.bestpractices; import java.util.List; +import net.sourceforge.pmd.lang.ast.AbstractNode; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTConditionalExpression; import net.sourceforge.pmd.lang.java.ast.ASTEqualityExpression; @@ -15,7 +16,6 @@ import net.sourceforge.pmd.lang.java.ast.ASTName; import net.sourceforge.pmd.lang.java.ast.ASTNullLiteral; import net.sourceforge.pmd.lang.java.ast.ASTPrimarySuffix; import net.sourceforge.pmd.lang.java.ast.ASTReturnStatement; -import net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; @@ -38,7 +38,7 @@ public abstract class AbstractSunSecureRule extends AbstractJavaRule { * @return <code>true</code> if there is a field in the type declaration * named varName, <code>false</code> in other case */ - protected final boolean isField(String varName, ASTTypeDeclaration typeDeclaration) { + protected final boolean isField(String varName, AbstractNode typeDeclaration) { final List<ASTFieldDeclaration> fds = typeDeclaration.findDescendantsOfType(ASTFieldDeclaration.class); if (fds != null) { for (ASTFieldDeclaration fd : fds) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java index 71170722eb..7578c8cda7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java @@ -8,6 +8,7 @@ import java.util.List; import org.jaxen.JaxenException; +import net.sourceforge.pmd.lang.ast.AbstractNode; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression; import net.sourceforge.pmd.lang.java.ast.ASTArrayInitializer; @@ -20,7 +21,6 @@ import net.sourceforge.pmd.lang.java.ast.ASTPrimaryExpression; import net.sourceforge.pmd.lang.java.ast.ASTPrimaryPrefix; import net.sourceforge.pmd.lang.java.ast.ASTPrimarySuffix; import net.sourceforge.pmd.lang.java.ast.ASTReturnStatement; -import net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.java.ast.ASTVariableInitializer; @@ -46,7 +46,7 @@ public class MethodReturnsInternalArrayRule extends AbstractSunSecureRule { return data; } List<ASTReturnStatement> returns = method.findDescendantsOfType(ASTReturnStatement.class); - ASTTypeDeclaration td = method.getFirstParentOfType(ASTTypeDeclaration.class); + ASTClassOrInterfaceDeclaration td = method.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class); for (ASTReturnStatement ret : returns) { final String vn = getReturnedVariableName(ret); if (!isField(vn, td)) { @@ -111,7 +111,7 @@ public class MethodReturnsInternalArrayRule extends AbstractSunSecureRule { return false; } - private boolean isEmptyArray(String varName, ASTTypeDeclaration typeDeclaration) { + private boolean isEmptyArray(String varName, AbstractNode typeDeclaration) { final List<ASTFieldDeclaration> fds = typeDeclaration.findDescendantsOfType(ASTFieldDeclaration.class); if (fds != null) { for (ASTFieldDeclaration fd : fds) { From 58b3aaa0dac2c496c4dbb96f2ab0247450fc3d36 Mon Sep 17 00:00:00 2001 From: Boris Petrov <boris_petrov@live.com> Date: Sun, 28 Apr 2019 20:26:09 +0300 Subject: [PATCH 026/371] [java] Make CommentDefaultAccessModifier work for top-level classes, enums and annotations --- docs/pages/pmd/rules/java.md | 2 +- docs/pages/pmd/rules/java/codestyle.md | 2 +- .../CommentDefaultAccessModifierRule.java | 38 +++++++++--- .../resources/category/java/codestyle.xml | 2 +- .../xml/CommentDefaultAccessModifier.xml | 60 +++++++++++++++++++ 5 files changed, 92 insertions(+), 12 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 80ca10856f..18c784a222 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -75,7 +75,7 @@ folder: pmd/rules * [BooleanGetMethodName](pmd_rules_java_codestyle.html#booleangetmethodname): Methods that return boolean results should be named as predicate statements to denote this.I.e, '... * [CallSuperInConstructor](pmd_rules_java_codestyle.html#callsuperinconstructor): It is a good practice to call super() in a constructor. If super() is not called butanother const... * [ClassNamingConventions](pmd_rules_java_codestyle.html#classnamingconventions): Configurable naming conventions for type declarations. This rule reports type declarat... -* [CommentDefaultAccessModifier](pmd_rules_java_codestyle.html#commentdefaultaccessmodifier): To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default acc... +* [CommentDefaultAccessModifier](pmd_rules_java_codestyle.html#commentdefaultaccessmodifier): To avoid mistakes if we want that an Annotation, Class, Enum, Method, Constructor or Field have a default acc... * [ConfusingTernary](pmd_rules_java_codestyle.html#confusingternary): Avoid negation within an "if" expression with an "else" clause. For example, rephrase:'if (x != ... * [ControlStatementBraces](pmd_rules_java_codestyle.html#controlstatementbraces): Enforce a policy for braces on control statements. It is recommended to use braces on 'if ... els... * [DefaultPackage](pmd_rules_java_codestyle.html#defaultpackage): Use explicit scoping instead of accidental usage of default package private level.The rule allows... diff --git a/docs/pages/pmd/rules/java/codestyle.md b/docs/pages/pmd/rules/java/codestyle.md index d2ff5b66c1..814e6a4f2a 100644 --- a/docs/pages/pmd/rules/java/codestyle.md +++ b/docs/pages/pmd/rules/java/codestyle.md @@ -473,7 +473,7 @@ public class Éléphant {} **Priority:** Medium (3) -To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default access modifier +To avoid mistakes if we want that an Annotation, Class, Enum, Method, Constructor or Field have a default access modifier we must add a comment at the beginning of it's declaration. By default the comment must be `/* default */` or `/* package */`, if you want another, you have to provide a regular expression. This rule ignores by default all cases that have a @VisibleForTesting annotation. Use the diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java index 37c5eac750..af2ebd7d56 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java @@ -11,10 +11,12 @@ import java.util.List; import java.util.Set; import java.util.regex.Pattern; +import net.sourceforge.pmd.lang.java.ast.ASTAnnotationTypeDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTAnyTypeDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit; import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclarator; @@ -84,11 +86,28 @@ public class CommentDefaultAccessModifierRule extends AbstractIgnoredAnnotationR return super.visit(decl, data); } + @Override + public Object visit(final ASTAnnotationTypeDeclaration decl, final Object data) { + if (!decl.isNested() && shouldReportTypeDeclaration(decl)) { // check for top-level annotation declarations + addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "top-level annotation")); + } + return super.visit(decl, data); + } + + @Override + public Object visit(final ASTEnumDeclaration decl, final Object data) { + if (!decl.isNested() && shouldReportTypeDeclaration(decl)) { // check for top-level enums + addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "top-level enum")); + } + return super.visit(decl, data); + } + @Override public Object visit(final ASTClassOrInterfaceDeclaration decl, final Object data) { - // check for nested classes - if (decl.isNested() && shouldReport(decl)) { + if (decl.isNested() && shouldReport(decl)) { // check for nested classes addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "nested class")); + } else if (!decl.isNested() && shouldReportTypeDeclaration(decl)) { // and for top-level ones + addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "top-level class")); } return super.visit(decl, data); } @@ -106,14 +125,15 @@ public class CommentDefaultAccessModifierRule extends AbstractIgnoredAnnotationR .getFirstParentOfType(AbstractAnyTypeDeclaration.class); boolean isConcreteClass = parentClassOrInterface.getTypeKind() == ASTAnyTypeDeclaration.TypeKind.CLASS; - boolean isEnumConstructor = parentClassOrInterface.getTypeKind() == ASTAnyTypeDeclaration.TypeKind.ENUM - && decl instanceof ASTConstructorDeclaration; - // ignore if it's an Interface / Annotation / Enum constructor - return isConcreteClass && !isEnumConstructor - // check if the field/method/nested class has a default access - // modifier - && decl.isPackagePrivate() + // ignore if it's an Interface / Annotation + return isConcreteClass && shouldReportTypeDeclaration(decl); + } + + private boolean shouldReportTypeDeclaration(final AbstractJavaAccessNode decl) { + // check if the class/method/field has a default access + // modifier + return decl.isPackagePrivate() // if is a default access modifier check if there is a comment // in this line && !interestingLineNumberComments.contains(decl.getBeginLine()) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 05bd9f803b..19c3e4dea5 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -402,7 +402,7 @@ public class Éléphant {} message="Missing commented default access modifier" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier"> <description> -To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default access modifier +To avoid mistakes if we want that an Annotation, Class, Enum, Method, Constructor or Field have a default access modifier we must add a comment at the beginning of it's declaration. By default the comment must be `/* default */` or `/* package */`, if you want another, you have to provide a regular expression. This rule ignores by default all cases that have a @VisibleForTesting annotation. Use the diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml index a01d2c9997..ae52606693 100755 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml @@ -115,6 +115,66 @@ public class Foo { <code-ref id="nested-class-with-default-access-modifier"/> </test-code> + <code-fragment id="top-level-annotations-with-default-access-modifier"><![CDATA[ +@interface Bar {} + +public @interface Foo {} + +@SomeAnnotation +@interface Baz {} + +@VisibleForTesting +@interface Foobar {} + +/* default */ @interface FoobarWithComment {} + ]]></code-fragment> + <test-code> + <description>Top-level annotations with default access modifier</description> + <expected-problems>2</expected-problems> + <expected-linenumbers>1,6</expected-linenumbers> + <code-ref id="top-level-annotations-with-default-access-modifier"/> + </test-code> + + <code-fragment id="top-level-enums-with-default-access-modifier"><![CDATA[ +enum Bar {} + +public enum Foo {} + +@SomeAnnotation +enum Baz {} + +@VisibleForTesting +enum Foobar {} + +/* default */ enum FoobarWithComment {} + ]]></code-fragment> + <test-code> + <description>Top-level enums with default access modifier</description> + <expected-problems>2</expected-problems> + <expected-linenumbers>1,6</expected-linenumbers> + <code-ref id="top-level-enums-with-default-access-modifier"/> + </test-code> + + <code-fragment id="top-level-classes-with-default-access-modifier"><![CDATA[ +class Bar {} + +public class Foo {} + +@SomeAnnotation +class Baz {} + +@VisibleForTesting +class Foobar {} + +/* default */ class FoobarWithComment {} + ]]></code-fragment> + <test-code> + <description>Top-level classes with default access modifier</description> + <expected-problems>2</expected-problems> + <expected-linenumbers>1,6</expected-linenumbers> + <code-ref id="top-level-classes-with-default-access-modifier"/> + </test-code> + <code-fragment id="own-regex-to-default-access-modifier-rule"><![CDATA[ public class Foo { /* default */ final String stringValue = "stringValue"; From a5b12a4e83f99552bc113101e640220999cd921c Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 15 Jun 2018 11:22:59 +0200 Subject: [PATCH 027/371] Added test case for Python backticks. --- .../net/sourceforge/pmd/cpd/PythonTokenizerTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pmd-python/src/test/java/net/sourceforge/pmd/cpd/PythonTokenizerTest.java b/pmd-python/src/test/java/net/sourceforge/pmd/cpd/PythonTokenizerTest.java index 58d771f7eb..6896a14d62 100644 --- a/pmd-python/src/test/java/net/sourceforge/pmd/cpd/PythonTokenizerTest.java +++ b/pmd-python/src/test/java/net/sourceforge/pmd/cpd/PythonTokenizerTest.java @@ -53,4 +53,16 @@ public class PythonTokenizerTest extends AbstractTokenizerTest { TokenEntry.getEOF(); assertEquals(3, tokens.size()); // 3 tokens: "import" + "logging" + EOF } + + @Test + public void testBackticks() throws IOException { + SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader("test = 'hello'" + PMD.EOL + + "quoted = `test`" + PMD.EOL + + "print quoted" + PMD.EOL + )); + Tokens tokens = new Tokens(); + tokenizer.tokenize(sourceCode, tokens); // should not result in parse error + TokenEntry.getEOF(); + assertEquals(3, tokens.getTokens().get(tokens.getTokens().size() - 2).getBeginLine()); + } } From cad32d9b830b7b437cd299e87fbdd01658407326 Mon Sep 17 00:00:00 2001 From: Bram Stappers <bram.stappers@tiobe.com> Date: Wed, 28 Jun 2017 15:28:25 +0200 Subject: [PATCH 028/371] 18984: [PMD] Added support for Python 2 backticks (`). --- pmd-python/etc/grammar/python.jj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pmd-python/etc/grammar/python.jj b/pmd-python/etc/grammar/python.jj index 60f723870c..1f97f9d948 100644 --- a/pmd-python/etc/grammar/python.jj +++ b/pmd-python/etc/grammar/python.jj @@ -52,6 +52,7 @@ TOKEN : /* SEPARATORS */ | < COMMA: "," > | < DOT: "." > | < COLON: ":" > +| < BACKTICK: "`" > } @@ -280,4 +281,4 @@ MORE : /* Strings */ | <"\r"> { image.setCharAt(image.length()-1, '\n'); } | <~["\n","\r"]> | <"\\" ~["\n","\r"]> -} \ No newline at end of file +} From 6f442b15caf16d6ccd0551f6d9d32b679bf44d48 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Tue, 30 Apr 2019 13:58:12 +0200 Subject: [PATCH 029/371] Added Dart tokenizer test cases for escaped backslashes (\\) and other characters (\n, \$). --- .../test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java | 2 ++ .../resources/net/sourceforge/pmd/cpd/escape_sequences.dart | 3 +++ .../resources/net/sourceforge/pmd/cpd/escaped_backslash.dart | 2 ++ 3 files changed, 7 insertions(+) create mode 100644 pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escape_sequences.dart create mode 100644 pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escaped_backslash.dart diff --git a/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java b/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java index 919001cd09..373444edfa 100644 --- a/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java +++ b/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java @@ -31,6 +31,8 @@ public class DartTokenizerTest extends AbstractTokenizerTest { public static Collection<Object[]> data() { return Arrays.asList( new Object[] { "comment.dart", 5 }, + new Object[] { "escape_sequences.dart", 13 }, + new Object[] { "escaped_backslash.dart", 14 }, new Object[] { "escaped_string.dart", 17 }, new Object[] { "increment.dart", 185 }, new Object[] { "imports.dart", 1 } diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escape_sequences.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escape_sequences.dart new file mode 100644 index 0000000000..7d70500426 --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escape_sequences.dart @@ -0,0 +1,3 @@ +var newline = '\n'; +var dollar = '$'; +var escaped_dollar = "\$"; \ No newline at end of file diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escaped_backslash.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escaped_backslash.dart new file mode 100644 index 0000000000..ee9c4a6419 --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escaped_backslash.dart @@ -0,0 +1,2 @@ +var separator = '\\'; +var separators = const ['/', '\\']; \ No newline at end of file From 1ebfb7df87c6d8aab648078489aa35516fe6cdc0 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Tue, 30 Apr 2019 14:01:07 +0200 Subject: [PATCH 030/371] Extended Dart grammar to take escape sequences into account. --- .../antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 b/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 index aae6073e6a..fcc42ae013 100644 --- a/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 +++ b/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 @@ -344,8 +344,8 @@ booleanLiteral stringLiteral: SingleLineString; //stringLiteral: SingleLineString; SingleLineString - : '"' (~["] | '\\"')* '"' - | '\'' (~['] | '\\\'')* '\'' + : '"' (~[\\"] | '\\\\' | ESCAPE_SEQUENCE | '\\"')* '"' + | '\'' (~[\\'] | '\\\\' | ESCAPE_SEQUENCE | '\\\'')* '\'' // | 'r\'' (~('\'' | NEWLINE))* '\'' // TODO // | 'r"' (~('\'' | NEWLINE))* '"' ; @@ -369,6 +369,7 @@ ESCAPE_SEQUENCE | '\\x' HEX_DIGIT HEX_DIGIT | '\\u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT | '\\u{' HEX_DIGIT_SEQUENCE '}' + | '\\$' ; fragment HEX_DIGIT_SEQUENCE From 97354a64d5de4fe4d564eb3eaa63693d2066d38e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Tue, 30 Apr 2019 10:40:02 -0300 Subject: [PATCH 031/371] Update changelog, refs #1803 --- docs/pages/release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0c717925c2..c702a584eb 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -73,6 +73,7 @@ No changes. * [#1781](https://github.com/pmd/pmd/pull/1781): \[java] Location change in AssignmentToNonFinalStatic - [Maikel Steneker](https://github.com/maikelsteneker) * [#1789](https://github.com/pmd/pmd/pull/1789): \[cpd] \[core] Use current classloader instead of Thread's classloader - [Andreas Schmid](https://github.com/aaschmid) * [#1791](https://github.com/pmd/pmd/pull/1791): \[dart] \[cpd] Dart escaped string - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} From 9545eada2fa5d317eb3532ba58a57a0046a3f68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Tue, 30 Apr 2019 14:53:55 -0300 Subject: [PATCH 032/371] Fix NPE in UnnecessaryLocalBeforeReturnRule - Fixes #1804 --- .../UnnecessaryLocalBeforeReturnRule.java | 2 +- .../xml/UnnecessaryLocalBeforeReturn.xml | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryLocalBeforeReturnRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryLocalBeforeReturnRule.java index 056878a58f..82dab662ef 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryLocalBeforeReturnRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryLocalBeforeReturnRule.java @@ -136,7 +136,7 @@ public class UnnecessaryLocalBeforeReturnRule extends AbstractJavaRule { final ASTBlockStatement location = occ.getLocation().getFirstParentOfType(ASTBlockStatement.class); // Is it used after initializing our "unnecessary" local but before the return statement? - if (isAfter(location, initializerStmt) && isAfter(rtnStmt, location)) { + if (location != null && isAfter(location, initializerStmt) && isAfter(rtnStmt, location)) { return true; } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryLocalBeforeReturn.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryLocalBeforeReturn.xml index a97b4efc4d..eb5a8c6794 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryLocalBeforeReturn.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryLocalBeforeReturn.xml @@ -244,6 +244,23 @@ public class UnnecessaryLocalBeforeReturnFP { .make(i); return o; // true positive } +} + ]]></code> + </test-code> + + <test-code> + <description>#1804 [java] NPE with fields</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class ObjectCreator { + + private static final String A = ""; + private static final String B = "" + A; // the existence of this line causes the NPE. + + public Object create() { + final Object o = new Object(A); + return o; + } } ]]></code> </test-code> From 62e7f72dd755199cb4776ff73e5478a079eb1a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Tue, 30 Apr 2019 14:56:01 -0300 Subject: [PATCH 033/371] Update changelog, refs #1804 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 2178f6ed15..5c1e180206 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* java-codestyle + * [#1804](https://github.com/pmd/pmd/issues/1804): \[java] NPE in UnnecessaryLocalBeforeReturnRule + ### API Changes ### External Contributions From 92499ed3a01e70e6b551511b7564aa6074f9eb92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Tue, 30 Apr 2019 23:24:15 -0300 Subject: [PATCH 034/371] Bump PMD version on self --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ca273f818f..81d5424673 100644 --- a/pom.xml +++ b/pom.xml @@ -543,12 +543,12 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <dependency> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd-core</artifactId> - <version>6.13.0</version> + <version>6.14.0</version> </dependency> <dependency> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd-java</artifactId> - <version>6.13.0</version> + <version>6.14.0</version> </dependency> <!-- This contains the dogfood ruleset --> <dependency> From 1c9a73426c9f16829ee447dcd3b717b4a57fa849 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Wed, 1 May 2019 11:29:43 +0200 Subject: [PATCH 035/371] deprecate: DumpFacade will be removed in PMD 7 Refs #1801 --- docs/pages/release_notes.md | 17 +++++++++++++++++ .../pmd/lang/apex/ast/DumpFacade.java | 5 +++++ .../pmd/lang/java/ast/DumpFacade.java | 5 +++++ .../pmd/lang/ecmascript/ast/DumpFacade.java | 5 +++++ .../pmd/lang/jsp/ast/DumpFacade.java | 5 +++++ .../pmd/lang/plsql/ast/DumpFacade.java | 5 +++++ .../sourceforge/pmd/lang/vf/ast/DumpFacade.java | 5 +++++ .../pmd/lang/vm/ast/AbstractVmNode.java | 2 ++ .../pmd/lang/xml/ast/DumpFacade.java | 5 +++++ 9 files changed, 54 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 2178f6ed15..1760022561 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -18,6 +18,23 @@ This is a {{ site.pmd.release_type }} release. ### API Changes +#### Deprecated APIs + +##### For removal + +* The `DumpFacades` in all languages, that could be used to transform a AST into a textual representation, + will be removed with PMD 7. The rule designer is a better way to inspect nodes. + * {% jdoc !q!apex::lang.apex.ast.DumpFacade %} + * {% jdoc !q!java::lang.java.ast.DumpFacade %} + * {% jdoc !q!javascript::lang.ecmascript.ast.DumpFacade %} + * {% jdoc !q!jsp::lang.jsp.ast.DumpFacade %} + * {% jdoc !q!plsql::lang.plsql.ast.DumpFacade %} + * {% jdoc !q!visualforce::lang.vf.ast.DumpFacade %} + * {% jdoc !q!vm::lang.vm.ast.AbstractVmNode#dump(String, boolean, Writer) %} + * {% jdoc !q!xml::lang.xml.ast.DumpFacade %} +* The method {% jdoc !c!core::lang.LanguageVersionHandler#getDumpFacade(Writer, String, boolean) %} will be + removed as well. + ### External Contributions * [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/DumpFacade.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/DumpFacade.java index f4b0e4efb9..616ce31520 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/DumpFacade.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/DumpFacade.java @@ -12,6 +12,11 @@ import java.util.List; import net.sourceforge.pmd.util.StringUtil; +/** + * + * @deprecated This class will be removed with PMD 7. The rule designer is a better way to inspect nodes. + */ +@Deprecated public class DumpFacade { private PrintWriter writer; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java index 8d6917d5a5..f0266acee4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java @@ -10,6 +10,11 @@ import java.io.Writer; import java.util.ArrayList; import java.util.List; +/** + * + * @deprecated This class will be removed with PMD 7. The rule designer is a better way to inspect nodes. + */ +@Deprecated public class DumpFacade extends JavaParserVisitorAdapter { private PrintWriter writer; diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.java index 4c2910248b..11a862d54c 100644 --- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.java +++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.java @@ -12,6 +12,11 @@ import java.util.List; import net.sourceforge.pmd.util.StringUtil; +/** + * + * @deprecated This class will be removed with PMD 7. The rule designer is a better way to inspect nodes. + */ +@Deprecated public class DumpFacade { private PrintWriter writer; diff --git a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.java b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.java index e1381a9626..ee6c78b206 100644 --- a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.java +++ b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.java @@ -12,6 +12,11 @@ import java.util.List; import net.sourceforge.pmd.lang.ast.Node; +/** + * + * @deprecated This class will be removed with PMD 7. The rule designer is a better way to inspect nodes. + */ +@Deprecated public class DumpFacade extends JspParserVisitorAdapter { private PrintWriter writer; diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.java index d6be0486fe..e53532b1eb 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.java @@ -10,6 +10,11 @@ import java.io.Writer; import java.util.ArrayList; import java.util.List; +/** + * + * @deprecated This class will be removed with PMD 7. The rule designer is a better way to inspect nodes. + */ +@Deprecated public class DumpFacade extends PLSQLParserVisitorAdapter { private PrintWriter writer; diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/DumpFacade.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/DumpFacade.java index 704ae8e1a3..7430f77b1c 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/DumpFacade.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/DumpFacade.java @@ -12,6 +12,11 @@ import java.util.List; import net.sourceforge.pmd.lang.ast.Node; +/** + * + * @deprecated This class will be removed with PMD 7. The rule designer is a better way to inspect nodes. + */ +@Deprecated public class DumpFacade extends VfParserVisitorAdapter { private PrintWriter writer; diff --git a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java index a640db2813..9e552aac82 100644 --- a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java +++ b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java @@ -151,7 +151,9 @@ public class AbstractVmNode extends AbstractNode implements VmNode { * children. * * @param prefix + * @deprecated This method will be removed with PMD 7. The rule designer is a better way to inspect nodes. */ + @Deprecated public void dump(final String prefix, final boolean recurse, final Writer writer) { final PrintWriter printWriter = writer instanceof PrintWriter ? (PrintWriter) writer : new PrintWriter(writer); printWriter.println(toString(prefix)); diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/DumpFacade.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/DumpFacade.java index 888995fe9b..76ebac8655 100644 --- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/DumpFacade.java +++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/DumpFacade.java @@ -14,6 +14,11 @@ import java.util.List; import net.sourceforge.pmd.lang.ast.xpath.Attribute; import net.sourceforge.pmd.util.StringUtil; +/** + * + * @deprecated This class will be removed with PMD 7. The rule designer is a better way to inspect nodes. + */ +@Deprecated public class DumpFacade { private PrintWriter writer; From 113ad74ddb71092c1c1e9f97eef99770933c709d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 4 Apr 2019 11:46:12 +0200 Subject: [PATCH 036/371] refactor: Make the children array never null --- .../pmd/lang/apex/ast/AbstractApexNodeBase.java | 11 +++++------ .../sourceforge/pmd/lang/ast/AbstractNode.java | 13 +++++++------ .../java/net/sourceforge/pmd/lang/ast/Node.java | 2 ++ .../pmd/lang/java/ast/AbstractJavaNode.java | 17 ++++++++--------- .../ecmascript/ast/AbstractEcmascriptNode.java | 15 +++++++-------- .../pmd/lang/jsp/ast/AbstractJspNode.java | 10 +++++----- .../pmd/lang/plsql/ast/AbstractPLSQLNode.java | 13 ++++++------- .../pmd/lang/vf/ast/AbstractVFNode.java | 7 ++++--- .../pmd/lang/vm/ast/AbstractVmNode.java | 14 +++++++------- 9 files changed, 51 insertions(+), 51 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/AbstractApexNodeBase.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/AbstractApexNodeBase.java index 8ba32fe4a7..c03bc464f6 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/AbstractApexNodeBase.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/AbstractApexNodeBase.java @@ -38,13 +38,12 @@ public abstract class AbstractApexNodeBase extends AbstractNode { * Accept the visitor. * */ public Object childrenAccept(ApexParserVisitor visitor, Object data) { - if (children != null) { - for (int i = 0; i < children.length; ++i) { - // we know that the children here are all ApexNodes - AbstractApexNodeBase apexNode = (AbstractApexNodeBase) children[i]; - apexNode.jjtAccept(visitor, data); - } + for (int i = 0; i < children.length; ++i) { + // we know that the children here are all ApexNodes + AbstractApexNodeBase apexNode = (AbstractApexNodeBase) children[i]; + apexNode.jjtAccept(visitor, data); } + return data; } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java index a03c22221d..5c20ee1ba5 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java @@ -19,8 +19,11 @@ public abstract class AbstractNode implements Node { private static final Logger LOG = Logger.getLogger(AbstractNode.class.getName()); + private static final Node[] EMPTY_ARRAY = new Node[0]; + protected Node parent; - protected Node[] children; + // never null, never contains null elements + protected Node[] children = EMPTY_ARRAY; protected int childIndex; protected int id; @@ -74,9 +77,7 @@ public abstract class AbstractNode implements Node { @Override public void jjtAddChild(final Node child, final int index) { - if (children == null) { - children = new Node[index + 1]; - } else if (index >= children.length) { + if (index >= children.length) { final Node[] newChildren = new Node[index + 1]; System.arraycopy(children, 0, newChildren, 0, children.length); children = newChildren; @@ -102,7 +103,7 @@ public abstract class AbstractNode implements Node { @Override public int jjtGetNumChildren() { - return children == null ? 0 : children.length; + return children.length; } @Override @@ -137,7 +138,7 @@ public abstract class AbstractNode implements Node { @Override public int getBeginColumn() { if (beginColumn == -1) { - if (children != null && children.length > 0) { + if (children.length > 0) { return children[0].getBeginColumn(); } else { throw new RuntimeException("Unable to determine beginning line of Node."); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Node.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Node.java index 3a66e90d1c..839fca5c1b 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Node.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Node.java @@ -82,6 +82,8 @@ public interface Node { * This method returns a child node. The children are numbered from zero, left to right. * * @param index the child index. Must be nonnegative and less than {@link #jjtGetNumChildren}. + * + * @throws IndexOutOfBoundsException If the index is less than zero or greater or equal to {@link #jjtGetNumChildren()} */ Node jjtGetChild(int index); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java index 735b0b58aa..f3941fb6fc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.ast; import net.sourceforge.pmd.lang.ast.AbstractNode; +import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.symboltable.Scope; public abstract class AbstractJavaNode extends AbstractNode implements JavaNode { @@ -32,7 +33,7 @@ public abstract class AbstractJavaNode extends AbstractNode implements JavaNode @Override public void jjtClose() { - if (beginLine == -1 && (children == null || children.length == 0)) { + if (beginLine == -1 && children.length == 0) { beginColumn = parser.token.beginColumn; } if (beginLine == -1) { @@ -62,22 +63,20 @@ public abstract class AbstractJavaNode extends AbstractNode implements JavaNode */ @Override public Object childrenAccept(JavaParserVisitor visitor, Object data) { - if (children != null) { - for (int i = 0; i < children.length; ++i) { - ((JavaNode) children[i]).jjtAccept(visitor, data); - } + for (Node child : children) { + ((JavaNode) child).jjtAccept(visitor, data); } + return data; } @Override public <T> void childrenAccept(SideEffectingVisitor<T> visitor, T data) { - if (children != null) { - for (int i = 0; i < children.length; i++) { - ((JavaNode) children[i]).jjtAccept(visitor, data); - } + for (Node child : children) { + ((JavaNode) child).jjtAccept(visitor, data); } + } diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.java index 671b83b2e7..b6df841ca0 100644 --- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.java +++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.java @@ -7,6 +7,7 @@ package net.sourceforge.pmd.lang.ecmascript.ast; import org.mozilla.javascript.ast.AstNode; import net.sourceforge.pmd.lang.ast.AbstractNode; +import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.ast.SourceCodePositioner; public abstract class AbstractEcmascriptNode<T extends AstNode> extends AbstractNode implements EcmascriptNode<T> { @@ -46,14 +47,12 @@ public abstract class AbstractEcmascriptNode<T extends AstNode> extends Abstract */ @Override public Object childrenAccept(EcmascriptParserVisitor visitor, Object data) { - if (children != null) { - for (int i = 0; i < children.length; ++i) { - // we know that the children here - // are all EcmascriptNodes - @SuppressWarnings("unchecked") - EcmascriptNode<T> ecmascriptNode = (EcmascriptNode<T>) children[i]; - ecmascriptNode.jjtAccept(visitor, data); - } + for (Node child : children) { + // we know that the children here + // are all EcmascriptNodes + @SuppressWarnings("unchecked") + EcmascriptNode<T> ecmascriptNode = (EcmascriptNode<T>) child; + ecmascriptNode.jjtAccept(visitor, data); } return data; } diff --git a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/AbstractJspNode.java b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/AbstractJspNode.java index 97c1d3de89..06491c8fc8 100644 --- a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/AbstractJspNode.java +++ b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/AbstractJspNode.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.jsp.ast; import net.sourceforge.pmd.lang.ast.AbstractNode; +import net.sourceforge.pmd.lang.ast.Node; public class AbstractJspNode extends AbstractNode implements JspNode { @@ -29,7 +30,7 @@ public class AbstractJspNode extends AbstractNode implements JspNode { @Override public void jjtClose() { - if (beginLine == -1 && (children == null || children.length == 0)) { + if (beginLine == -1 && children.length == 0) { beginColumn = parser.token.beginColumn; } if (beginLine == -1) { @@ -52,11 +53,10 @@ public class AbstractJspNode extends AbstractNode implements JspNode { */ @Override public Object childrenAccept(JspParserVisitor visitor, Object data) { - if (children != null) { - for (int i = 0; i < children.length; ++i) { - ((JspNode) children[i]).jjtAccept(visitor, data); - } + for (Node child : children) { + ((JspNode) child).jjtAccept(visitor, data); } + return data; } diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java index aebc968098..791229a093 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java @@ -7,6 +7,7 @@ package net.sourceforge.pmd.lang.plsql.ast; +import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.symboltable.Scope; public abstract class AbstractPLSQLNode extends net.sourceforge.pmd.lang.ast.AbstractNode implements PLSQLNode { @@ -33,7 +34,7 @@ public abstract class AbstractPLSQLNode extends net.sourceforge.pmd.lang.ast.Abs @Override public void jjtClose() { - if (beginLine == -1 && (children == null || children.length == 0)) { + if (beginLine == -1 && children.length == 0) { beginColumn = parser.token.beginColumn; } if (beginLine == -1) { @@ -92,12 +93,10 @@ public abstract class AbstractPLSQLNode extends net.sourceforge.pmd.lang.ast.Abs public void dump(String prefix) { System.out.println(toString(prefix)); - if (children != null) { - for (int i = 0; i < children.length; ++i) { - AbstractPLSQLNode n = (AbstractPLSQLNode) children[i]; - if (n != null) { - n.dump(prefix + " "); - } + for (Node child : children) { + AbstractPLSQLNode n = (AbstractPLSQLNode) child; + if (n != null) { + n.dump(prefix + " "); } } } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/AbstractVFNode.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/AbstractVFNode.java index 57e12782d3..4bb819aac8 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/AbstractVFNode.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/AbstractVFNode.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.vf.ast; import net.sourceforge.pmd.lang.ast.AbstractNode; +import net.sourceforge.pmd.lang.ast.Node; public class AbstractVFNode extends AbstractNode implements VfNode { @@ -29,7 +30,7 @@ public class AbstractVFNode extends AbstractNode implements VfNode { @Override public void jjtClose() { - if (beginLine == -1 && (children == null || children.length == 0)) { + if (beginLine == -1 && children.length == 0) { beginColumn = parser.token.beginColumn; } if (beginLine == -1) { @@ -53,8 +54,8 @@ public class AbstractVFNode extends AbstractNode implements VfNode { @Override public Object childrenAccept(VfParserVisitor visitor, Object data) { if (children != null) { - for (int i = 0; i < children.length; ++i) { - ((VfNode) children[i]).jjtAccept(visitor, data); + for (Node child : children) { + ((VfNode) child).jjtAccept(visitor, data); } } return data; diff --git a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java index a640db2813..1a9e2b5a70 100644 --- a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java +++ b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java @@ -26,6 +26,7 @@ import java.io.Writer; import org.apache.commons.lang3.text.StrBuilder; import net.sourceforge.pmd.lang.ast.AbstractNode; +import net.sourceforge.pmd.lang.ast.Node; /** * @@ -115,11 +116,10 @@ public class AbstractVmNode extends AbstractNode implements VmNode { @Override public Object childrenAccept(final VmParserVisitor visitor, final Object data) { - if (children != null) { - for (int i = 0; i < children.length; ++i) { - ((VmNode) children[i]).jjtAccept(visitor, data); - } + for (Node child : children) { + ((VmNode) child).jjtAccept(visitor, data); } + return data; } @@ -155,9 +155,9 @@ public class AbstractVmNode extends AbstractNode implements VmNode { public void dump(final String prefix, final boolean recurse, final Writer writer) { final PrintWriter printWriter = writer instanceof PrintWriter ? (PrintWriter) writer : new PrintWriter(writer); printWriter.println(toString(prefix)); - if (children != null && recurse) { - for (int i = 0; i < children.length; ++i) { - final AbstractVmNode n = (AbstractVmNode) children[i]; + if (recurse) { + for (Node child : children) { + final AbstractVmNode n = (AbstractVmNode) child; if (n != null) { n.dump(prefix + " ", recurse, printWriter); } From d0eaf73e2998703a2d303cea590143e91a9629f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Fri, 15 Mar 2019 09:30:42 +0100 Subject: [PATCH 037/371] Remove pmd-java test dependency --- pmd-lang-test/pom.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml index 8dff01d621..ca14226358 100644 --- a/pmd-lang-test/pom.xml +++ b/pmd-lang-test/pom.xml @@ -129,13 +129,5 @@ <version>2.0.1</version> <scope>compile</scope> </dependency> - - <!-- Use pmd-java for tests --> - <dependency> - <groupId>net.sourceforge.pmd</groupId> - <artifactId>pmd-java</artifactId> - <version>6.12.0</version> - <scope>test</scope> - </dependency> </dependencies> </project> From 13bbbfb2c4c40592c3eba0edbb1ebe5ef47ee257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Fri, 15 Mar 2019 10:28:21 +0100 Subject: [PATCH 038/371] Expose default config --- pmd-lang-test/pom.xml | 2 +- .../pmd/lang/ast/test/AstMatcherDslAdapter.kt | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml index ca14226358..88cb7bd139 100644 --- a/pmd-lang-test/pom.xml +++ b/pmd-lang-test/pom.xml @@ -126,7 +126,7 @@ <dependency> <groupId>com.github.oowekyala.treeutils</groupId> <artifactId>tree-matchers</artifactId> - <version>2.0.1</version> + <version>2.0.2</version> <scope>compile</scope> </dependency> </dependencies> diff --git a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/AstMatcherDslAdapter.kt b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/AstMatcherDslAdapter.kt index 99ed28c236..5d27eff327 100644 --- a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/AstMatcherDslAdapter.kt +++ b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/AstMatcherDslAdapter.kt @@ -4,6 +4,7 @@ package net.sourceforge.pmd.lang.ast.test +import com.github.oowekyala.treeutils.DoublyLinkedTreeLikeAdapter import com.github.oowekyala.treeutils.TreeLikeAdapter import com.github.oowekyala.treeutils.matchers.MatchingConfig import com.github.oowekyala.treeutils.matchers.TreeNodeWrapper @@ -12,10 +13,12 @@ import com.github.oowekyala.treeutils.printers.KotlintestBeanTreePrinter import net.sourceforge.pmd.lang.ast.Node /** An adapter for [baseShouldMatchSubtree]. */ -object NodeTreeLikeAdapter : TreeLikeAdapter<Node> { +object NodeTreeLikeAdapter : DoublyLinkedTreeLikeAdapter<Node> { override fun getChildren(node: Node): List<Node> = node.findChildrenOfType(Node::class.java) override fun nodeName(type: Class<out Node>): String = type.simpleName.removePrefix("AST") + + override fun getParent(node: Node): Node? = node.parent } /** A subtree matcher written in the DSL documented on [TreeNodeWrapper]. */ @@ -24,9 +27,11 @@ typealias NodeSpec<N> = TreeNodeWrapper<Node, N>.() -> Unit /** A function feedable to [io.kotlintest.should], which fails the test if an [AssertionError] is thrown. */ typealias Assertions<M> = (M) -> Unit +val DefaultMatchingConfig = MatchingConfig(adapter = NodeTreeLikeAdapter, errorPrinter = KotlintestBeanTreePrinter(NodeTreeLikeAdapter)) + /** A shorthand for [baseShouldMatchSubtree] providing the [NodeTreeLikeAdapter]. */ inline fun <reified N : Node> Node?.shouldMatchNode(ignoreChildren: Boolean = false, noinline nodeSpec: NodeSpec<N>) { - this.baseShouldMatchSubtree(MatchingConfig(adapter = NodeTreeLikeAdapter, errorPrinter = KotlintestBeanTreePrinter(NodeTreeLikeAdapter)), ignoreChildren, nodeSpec) + this.baseShouldMatchSubtree(DefaultMatchingConfig, ignoreChildren, nodeSpec) } /** From eedc3210fcd7cb48c4c8e693662526362ef34b75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Fri, 15 Mar 2019 10:48:49 +0100 Subject: [PATCH 039/371] Add text bounds implicit assertions --- .../pmd/lang/ast/test/AstMatcherDslAdapter.kt | 7 ++- .../pmd/lang/ast/test/NodeExtensions.kt | 54 +++++++++++++++++++ .../pmd/lang/ast/test/TestUtils.kt | 1 - 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/AstMatcherDslAdapter.kt b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/AstMatcherDslAdapter.kt index 5d27eff327..fc9d2ac255 100644 --- a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/AstMatcherDslAdapter.kt +++ b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/AstMatcherDslAdapter.kt @@ -5,7 +5,6 @@ package net.sourceforge.pmd.lang.ast.test import com.github.oowekyala.treeutils.DoublyLinkedTreeLikeAdapter -import com.github.oowekyala.treeutils.TreeLikeAdapter import com.github.oowekyala.treeutils.matchers.MatchingConfig import com.github.oowekyala.treeutils.matchers.TreeNodeWrapper import com.github.oowekyala.treeutils.matchers.baseShouldMatchSubtree @@ -27,7 +26,11 @@ typealias NodeSpec<N> = TreeNodeWrapper<Node, N>.() -> Unit /** A function feedable to [io.kotlintest.should], which fails the test if an [AssertionError] is thrown. */ typealias Assertions<M> = (M) -> Unit -val DefaultMatchingConfig = MatchingConfig(adapter = NodeTreeLikeAdapter, errorPrinter = KotlintestBeanTreePrinter(NodeTreeLikeAdapter)) +val DefaultMatchingConfig = MatchingConfig( + adapter = NodeTreeLikeAdapter, + errorPrinter = KotlintestBeanTreePrinter(NodeTreeLikeAdapter), + implicitAssertions = { it.assertTextRangeIsOk() } +) /** A shorthand for [baseShouldMatchSubtree] providing the [NodeTreeLikeAdapter]. */ inline fun <reified N : Node> Node?.shouldMatchNode(ignoreChildren: Boolean = false, noinline nodeSpec: NodeSpec<N>) { diff --git a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt index c8e9ebaff7..a50e840984 100644 --- a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt +++ b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.ast.test import net.sourceforge.pmd.lang.ast.Node +import java.util.* /** Extension methods to make the Node API more Kotlin-like */ @@ -29,3 +30,56 @@ fun Node.safeGetChild(i: Int): Node? = when { else -> null } +val Node.textRange: TextRange + get() = TextRange(beginPosition, endPosition) + +val Node.beginPosition: TextPosition + get() = TextPosition(beginLine, beginColumn) + +val Node.endPosition: TextPosition + get() = TextPosition(endLine, endColumn) + + +fun Node.assertTextRangeIsOk() { + + // they're defined + assert(beginLine >= 0) + assert(endLine >= 0) + assert(beginColumn >= 0) + assert(endColumn >= 0) + + // they're in the right order + textRange.assertOrdered() + + val parent = parent ?: return + + assert(textRange in parent.textRange) +} + + +data class TextPosition(val line: Int, val column: Int) : Comparable<TextPosition> { + + override operator fun compareTo(other: TextPosition): Int = Comparator.compare(this, other) + + companion object { + val Comparator: Comparator<TextPosition> = + java.util.Comparator.comparingInt<TextPosition> { o -> o.line } + .thenComparingInt { o -> o.column } + + } +} + +data class TextRange(val beginPos: TextPosition, val endPos: TextPosition) { + + fun assertOrdered() { + assert(beginPos <= endPos) { + "The begin position should be lower than the end position" + } + } + + operator fun contains(position: TextPosition): Boolean = position in beginPos..endPos + + /** Result makes no sense if either of those text bounds is not ordered. */ + operator fun contains(other: TextRange): Boolean = other.beginPos in this && other.endPos in this + +} \ No newline at end of file diff --git a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt index bd18c52b06..637e5f7fd8 100644 --- a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt +++ b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt @@ -52,4 +52,3 @@ private fun <N, V> assertWrapper(callable: KCallable<N>, right: V, asserter: (N, infix fun <N, V : N> KCallable<N>.shouldBe(expected: V?) = this.shouldEqual(expected) infix fun <T> KCallable<T>.shouldMatch(expected: T.() -> Unit) = assertWrapper(this, expected) { n, v -> n should v } - From 367ae2a4a9239293996ca1a438aaddd300adc626 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Wed, 1 May 2019 17:23:34 +0200 Subject: [PATCH 040/371] Remove need for late init completely --- .../sourceforge/pmd/lang/ast/test/NodeExtensions.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt index a50e840984..58cf39f8d7 100644 --- a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt +++ b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt @@ -43,17 +43,19 @@ val Node.endPosition: TextPosition fun Node.assertTextRangeIsOk() { // they're defined - assert(beginLine >= 0) - assert(endLine >= 0) - assert(beginColumn >= 0) - assert(endColumn >= 0) + assert(beginLine >= 0) { "Begin line is not set" } + assert(endLine >= 0) { "End line is not set" } + assert(beginColumn >= 0) { "Begin column is not set" } + assert(endColumn >= 0) { "End column is not set" } // they're in the right order textRange.assertOrdered() val parent = parent ?: return - assert(textRange in parent.textRange) + assert(textRange in parent.textRange) { + "The text range is not a subrange of that of the parent" + } } From 5ec4324fbc7bff706c00c82571bb99afc181c63e Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Wed, 1 May 2019 17:25:01 +0200 Subject: [PATCH 041/371] Fix AbstractLrBinaryExpr type check --- .../main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt index 637e5f7fd8..d4b49ccc3a 100644 --- a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt +++ b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/TestUtils.kt @@ -6,6 +6,7 @@ package net.sourceforge.pmd.lang.ast.test import io.kotlintest.should import kotlin.reflect.KCallable +import kotlin.reflect.jvm.isAccessible import io.kotlintest.shouldBe as ktShouldBe /** @@ -21,6 +22,7 @@ private fun <N, V> assertWrapper(callable: KCallable<N>, right: V, asserter: (N, fun formatName() = "::" + callable.name.removePrefix("get").decapitalize() val value: N = try { + callable.isAccessible = true callable.call() } catch (e: Exception) { throw RuntimeException("Couldn't fetch value for property ${formatName()}", e) From 9a93a6c5e980375ddf095ecccff505358d53ea5f Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Wed, 1 May 2019 17:29:32 +0200 Subject: [PATCH 042/371] Delegate text coordinates to the tokens --- .../pmd/lang/ast/test/NodeExtensions.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt index 58cf39f8d7..464e9ef570 100644 --- a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt +++ b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/NodeExtensions.kt @@ -4,6 +4,8 @@ package net.sourceforge.pmd.lang.ast.test +import net.sourceforge.pmd.lang.ast.AbstractNode +import net.sourceforge.pmd.lang.ast.GenericToken import net.sourceforge.pmd.lang.ast.Node import java.util.* @@ -22,6 +24,16 @@ val Node.childIndex: Int val Node.parent: Node? get() = this.jjtGetParent() +val Node.containingFile: Node + get() = generateSequence(this) { it.parent }.last() + + +val Node.firstToken: GenericToken + get() = (this as AbstractNode).jjtGetFirstToken() + +val Node.lastToken: GenericToken + get() = (this as AbstractNode).jjtGetLastToken() + fun Node.getChild(i: Int) = jjtGetChild(i) @@ -84,4 +96,4 @@ data class TextRange(val beginPos: TextPosition, val endPos: TextPosition) { /** Result makes no sense if either of those text bounds is not ordered. */ operator fun contains(other: TextRange): Boolean = other.beginPos in this && other.endPos in this -} \ No newline at end of file +} From 2057fc391974323c7986a56c82226edb0b9a5e0e Mon Sep 17 00:00:00 2001 From: BBG <djydewang@gmail.com> Date: Thu, 2 May 2019 00:01:23 +0800 Subject: [PATCH 043/371] [ci] fix missing local branch issues --- .travis/build-deploy.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.travis/build-deploy.sh b/.travis/build-deploy.sh index 8d26b44b08..f5a97b19a2 100755 --- a/.travis/build-deploy.sh +++ b/.travis/build-deploy.sh @@ -60,9 +60,12 @@ elif travis_isPullRequest; then log_info "This is a pull-request build" ./mvnw verify $MVN_BUILD_FLAGS ( - set +e - log_info "Running danger" - bundle exec danger --verbose + set +e + # if ${TRAVIS_BRANCH} is master, the script will fail since there is local master branch + git checkout -b ${TRAVIS_BRANCH} origin/${TRAVIS_BRANCH} + git checkout -qf FETCH_HEAD + log_info "Running danger" + bundle exec danger --verbose ) elif travis_isPush; then From a0657dd0157a479f2b0af08328e9fd2334efd77a Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Wed, 1 May 2019 18:13:03 +0200 Subject: [PATCH 044/371] Fix node positions of ASTSwitchLabeled* nodes Note: this is a temporary fix. A more general fix is in branch java-grammar --- .../net/sourceforge/pmd/lang/ast/AbstractNode.java | 2 ++ .../pmd/lang/java/ast/ASTSwitchLabeledBlock.java | 11 +++++++++++ .../pmd/lang/java/ast/ASTSwitchLabeledExpression.java | 11 +++++++++++ .../lang/java/ast/ASTSwitchLabeledThrowStatement.java | 11 +++++++++++ 4 files changed, 35 insertions(+) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java index a03c22221d..6cd196da1f 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java @@ -231,6 +231,8 @@ public abstract class AbstractNode implements Node { public void jjtSetFirstToken(final GenericToken token) { this.firstToken = token; + this.beginLine = token.getBeginLine(); + this.beginColumn = token.getBeginColumn(); } public GenericToken jjtGetLastToken() { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledBlock.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledBlock.java index 8ff927bef2..0e04b6de68 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledBlock.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledBlock.java @@ -4,6 +4,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.lang.ast.AbstractNode; + public class ASTSwitchLabeledBlock extends AbstractJavaNode implements ASTSwitchLabeledRule { ASTSwitchLabeledBlock(int id) { @@ -18,4 +20,13 @@ public class ASTSwitchLabeledBlock extends AbstractJavaNode implements ASTSwitch public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } + + @Override + public void jjtClose() { + super.jjtClose(); + if (jjtGetNumChildren() > 0) { + AbstractNode firstChild = (AbstractNode) jjtGetChild(0); + jjtSetFirstToken(firstChild.jjtGetFirstToken()); + } + } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledExpression.java index b2ba1b17a6..c8aabe3a93 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledExpression.java @@ -4,6 +4,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.lang.ast.AbstractNode; + public class ASTSwitchLabeledExpression extends AbstractJavaNode implements ASTSwitchLabeledRule { ASTSwitchLabeledExpression(int id) { @@ -18,4 +20,13 @@ public class ASTSwitchLabeledExpression extends AbstractJavaNode implements ASTS public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } + + @Override + public void jjtClose() { + super.jjtClose(); + if (jjtGetNumChildren() > 0) { + AbstractNode firstChild = (AbstractNode) jjtGetChild(0); + jjtSetFirstToken(firstChild.jjtGetFirstToken()); + } + } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java index d0a863f967..5454d1fdc7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java @@ -4,6 +4,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.lang.ast.AbstractNode; + public class ASTSwitchLabeledThrowStatement extends AbstractJavaNode implements ASTSwitchLabeledRule { ASTSwitchLabeledThrowStatement(int id) { @@ -18,4 +20,13 @@ public class ASTSwitchLabeledThrowStatement extends AbstractJavaNode implements public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } + + @Override + public void jjtClose() { + super.jjtClose(); + if (jjtGetNumChildren() > 0) { + AbstractNode firstChild = (AbstractNode) jjtGetChild(0); + jjtSetFirstToken(firstChild.jjtGetFirstToken()); + } + } } From f9530d1a04f552c02a5de2da2bd9d9e095a7a566 Mon Sep 17 00:00:00 2001 From: "Venkatachalam, Srinivasan" <srvenkatachalam@paypal.com> Date: Thu, 2 May 2019 19:05:08 +0530 Subject: [PATCH 045/371] Test cases added for #1738 fix --- .../xml/MethodReturnsInternalArray.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml index 25ec834be8..d53ded6b2d 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml @@ -220,4 +220,23 @@ public class MethodReturnsInternalArrayCase { } ]]></code> </test-code> + + <test-code> + <description> #1738 MethodReturnsInternalArray in inner classes</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Outer { + + public static class Inner { + private int[] arr2; + + public int[] getArr2() { + return arr2; + } + + } +} + ]]></code> + </test-code> + </test-data> From 6f4123afcc245f9d24747257106c2a829887a23d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 2 May 2019 16:20:07 +0200 Subject: [PATCH 046/371] Annotated overriding #getDumpFacade as Deprecated --- docs/pages/release_notes.md | 2 +- .../main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java | 1 + .../sourceforge/pmd/lang/AbstractLanguageVersionHandler.java | 1 + .../java/net/sourceforge/pmd/lang/java/AbstractJavaHandler.java | 1 + .../net/sourceforge/pmd/lang/ecmascript/Ecmascript3Handler.java | 1 + .../src/main/java/net/sourceforge/pmd/lang/jsp/JspHandler.java | 1 + .../main/java/net/sourceforge/pmd/lang/plsql/PLSQLHandler.java | 1 + .../src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java | 1 + pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java | 1 + .../src/main/java/net/sourceforge/pmd/lang/xml/XmlHandler.java | 1 + 10 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 1760022561..fbe577a1a2 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -33,7 +33,7 @@ This is a {{ site.pmd.release_type }} release. * {% jdoc !q!vm::lang.vm.ast.AbstractVmNode#dump(String, boolean, Writer) %} * {% jdoc !q!xml::lang.xml.ast.DumpFacade %} * The method {% jdoc !c!core::lang.LanguageVersionHandler#getDumpFacade(Writer, String, boolean) %} will be - removed as well. + removed as well. It is deprecated, along with all its implementations in the subclasses of {% jdoc core::lang.LanguageVersionHandler %}. ### External Contributions diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java index 3a8663871d..ed2a66c5e4 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java @@ -59,6 +59,7 @@ public class ApexHandler extends AbstractLanguageVersionHandler { return new ApexParser(parserOptions); } + @Deprecated @Override public VisitorStarter getDumpFacade(Writer writer, String prefix, boolean recurse) { return rootNode -> new DumpFacade().initializeWith(writer, prefix, recurse, (ApexNode<?>) rootNode); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractLanguageVersionHandler.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractLanguageVersionHandler.java index c00f38a05f..83b169e2f8 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractLanguageVersionHandler.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractLanguageVersionHandler.java @@ -52,6 +52,7 @@ public abstract class AbstractLanguageVersionHandler implements LanguageVersionH return VisitorStarter.DUMMY; } + @Deprecated @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { return VisitorStarter.DUMMY; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/AbstractJavaHandler.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/AbstractJavaHandler.java index 179ac6a6f1..fa17dde5f3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/AbstractJavaHandler.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/AbstractJavaHandler.java @@ -123,6 +123,7 @@ public abstract class AbstractJavaHandler extends AbstractLanguageVersionHandler }; } + @Deprecated @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { return new VisitorStarter() { diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/Ecmascript3Handler.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/Ecmascript3Handler.java index bfbdd95fae..c43f3b5255 100644 --- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/Ecmascript3Handler.java +++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/Ecmascript3Handler.java @@ -43,6 +43,7 @@ public class Ecmascript3Handler extends AbstractLanguageVersionHandler { return new Ecmascript3Parser(parserOptions); } + @Deprecated @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { return new VisitorStarter() { diff --git a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/JspHandler.java b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/JspHandler.java index 5965244316..8c1dd425e5 100644 --- a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/JspHandler.java +++ b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/JspHandler.java @@ -40,6 +40,7 @@ public class JspHandler extends AbstractLanguageVersionHandler { return new JspParser(parserOptions); } + @Deprecated @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { return new VisitorStarter() { diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/PLSQLHandler.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/PLSQLHandler.java index 2b2de68d98..4d354d1501 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/PLSQLHandler.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/PLSQLHandler.java @@ -72,6 +72,7 @@ public class PLSQLHandler extends AbstractLanguageVersionHandler { }; } + @Deprecated @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { return new VisitorStarter() { diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java index 236a304f35..afaf88eedd 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java @@ -35,6 +35,7 @@ public class VfHandler extends AbstractLanguageVersionHandler { return new VfParser(parserOptions); } + @Deprecated @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { return new VisitorStarter() { diff --git a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java index 6012bddc48..6c35508584 100644 --- a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java +++ b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java @@ -38,6 +38,7 @@ public class VmHandler extends AbstractLanguageVersionHandler { return new VmParser(parserOptions); } + @Deprecated @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { return new VisitorStarter() { diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlHandler.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlHandler.java index f8591b418b..921f73f414 100644 --- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlHandler.java +++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlHandler.java @@ -43,6 +43,7 @@ public class XmlHandler extends AbstractLanguageVersionHandler { return new XmlParser(parserOptions); } + @Deprecated @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { return new VisitorStarter() { From a390a19486087b5b2b66f176f113bfea0b431c58 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Thu, 2 May 2019 17:00:15 +0200 Subject: [PATCH 047/371] Update release notes, refs #1799, fixes #1738 --- docs/pages/release_notes.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 2178f6ed15..4b5e9d4899 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,11 +16,15 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* java-bestpractices + * [#1738](https://github.com/pmd/pmd/issues/1738): \[java] MethodReturnsInternalArray does not work in inner classes + ### API Changes ### External Contributions * [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) {% endtocmaker %} From 8dcda9e2a401bc35e8791f9869da2c4995d8b16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Fri, 15 Mar 2019 12:14:01 +0100 Subject: [PATCH 048/371] Fix null parent --- .../src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java | 1 + 1 file changed, 1 insertion(+) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java index a03c22221d..5e62402b98 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java @@ -83,6 +83,7 @@ public abstract class AbstractNode implements Node { } children[index] = child; child.jjtSetChildIndex(index); + child.jjtSetParent(this); } @Override From 4ea3911b8d2053f4a27cf5f862c695e275e995ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Wed, 3 Apr 2019 14:48:48 +0200 Subject: [PATCH 049/371] Make AbstractNode.getXPathNodeName() abstract --- .../pmd/lang/ast/AbstractNode.java | 21 ++----------------- .../pmd/lang/java/ast/CommentTest.java | 4 ++++ 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java index 5e62402b98..1f056c05e1 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java @@ -5,11 +5,9 @@ package net.sourceforge.pmd.lang.ast; import java.util.Objects; -import java.util.logging.Logger; import org.apache.commons.lang3.ArrayUtils; -import net.sourceforge.pmd.PMDVersion; import net.sourceforge.pmd.lang.dfa.DataFlowNode; /** @@ -17,8 +15,6 @@ import net.sourceforge.pmd.lang.dfa.DataFlowNode; */ public abstract class AbstractNode implements Node { - private static final Logger LOG = Logger.getLogger(AbstractNode.class.getName()); - protected Node parent; protected Node[] children; protected int childIndex; @@ -266,21 +262,8 @@ public abstract class AbstractNode implements Node { } } - /** - * {@inheritDoc} - * <p> - * <p>This default implementation adds compatibility with the previous - * way to get the xpath node name, which used {@link Object#toString()}. - * <p> - * <p>Please override it. It may be removed in a future major version. - */ @Override - // @Deprecated // FUTURE 7.0.0 make abstract - public String getXPathNodeName() { - LOG.warning("getXPathNodeName should be overriden in classes derived from AbstractNode. " - + "The implementation is provided for compatibility with existing implementors," - + "but could be declared abstract as soon as release " + PMDVersion.getNextMajorRelease() - + "."); - return toString(); + public String toString() { + return getXPathNodeName(); } } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/CommentTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/CommentTest.java index 2c586d5a2f..7af699a499 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/CommentTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/CommentTest.java @@ -100,6 +100,10 @@ public class CommentTest { Token t = new Token(); t.image = comment; Comment node = new Comment(t) { + @Override + public String getXPathNodeName() { + return "DummyComment"; + } }; return node.getFilteredComment(); } From ef619af7c49da010f7d66fe3db455ac3b345abf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 9 Apr 2019 20:19:54 +0200 Subject: [PATCH 050/371] Delegate text coordinates to the tokens --- .../main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java index 1f056c05e1..de64fb16e4 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java @@ -236,6 +236,8 @@ public abstract class AbstractNode implements Node { public void jjtSetLastToken(final GenericToken token) { this.lastToken = token; + this.endLine = token.getEndLine(); + this.endColumn = token.getEndColumn(); } @Override From 518db3927b439af5662925b4b76b7217d5c115ed Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Thu, 2 May 2019 23:31:23 -0400 Subject: [PATCH 051/371] [plsql] Add support for BULK_ROWCOUNT, BULK_EXCEPTIONS --- pmd-plsql/etc/grammar/PldocAST.jjt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 19b8548887..b27255848c 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1541,6 +1541,8 @@ ASTSimpleExpression SimpleExpression() : | LOOKAHEAD({isKeyword("found")}) KEYWORD("FOUND") | LOOKAHEAD({isKeyword("notfound")}) KEYWORD("NOTFOUND") | LOOKAHEAD({isKeyword("rowcount")}) KEYWORD("ROWCOUNT") + | LOOKAHEAD({isKeyword("bulk_rowcount")}) KEYWORD("BULK_ROWCOUNT") + | LOOKAHEAD({isKeyword("bulk_exceptions")}) KEYWORD("BULK_EXCEPTIONS") ) { sb.append('%').append(token.image); } | LOOKAHEAD(2) From 85f222eaa7e67e77c5bd64554d75557664cebf6c Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Thu, 2 May 2019 23:32:17 -0400 Subject: [PATCH 052/371] [plsql] Add RETURNING support for INSERT --- pmd-plsql/etc/grammar/PldocAST.jjt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index b27255848c..3ceb9e584e 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -2270,7 +2270,7 @@ ASTInsertStatement InsertStatement() : ASTSingleTableInsert SingleTableInsert() : {} { - InsertIntoClause() ( ValuesClause() | Subquery() ) + InsertIntoClause() ( ValuesClause() [ ReturningClause() ] | Subquery() ) { return jjtThis; } } From b43032f5b9eaabc544b414d48d55a0f4405c43dd Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Thu, 2 May 2019 23:33:33 -0400 Subject: [PATCH 053/371] [plsql] Fix TrimExpression syntax --- pmd-plsql/etc/grammar/PldocAST.jjt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 3ceb9e584e..a07f5f6df1 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -2906,9 +2906,9 @@ ASTTrimExpression TrimExpression() : { ( "(" { sb.append("(");} - [ ( <LEADING> | <TRAILING> | <BOTH> ){ sb.append(" "); sb.append(token.toString()); } ] - [ simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } ] - ( <FROM> ) { sb.append(token.image);} + [ [ ( <LEADING> | <TRAILING> | <BOTH> ) { sb.append(" "); sb.append(token.toString()); } ] + [ <CHARACTER_LITERAL> { sb.append(" "); sb.append(token.image); } ] + ( <FROM> ) { sb.append(token.image); } ] simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } ")" { sb.append(")");} ) From 506b0aa8f7270d4b3c9533d02a01efe838ca2fe7 Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Thu, 2 May 2019 23:34:48 -0400 Subject: [PATCH 054/371] [plsql] Add ROWTYPE identifier support for INSERT --- pmd-plsql/etc/grammar/PldocAST.jjt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index a07f5f6df1..77e2a25fc0 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -2284,7 +2284,7 @@ ASTInsertIntoClause InsertIntoClause() : ASTValuesClause ValuesClause() : {} { - <VALUES> "(" ( Expression() | <_DEFAULT> ) ( "," ( Expression() | <_DEFAULT> ) )* ")" + <VALUES> [ "(" ( Expression() | <_DEFAULT> ) ( "," ( Expression() | <_DEFAULT> ) )* ")" | <IDENTIFIER> ] { return jjtThis; } } ASTMultiTableInsert MultiTableInsert() : From becc6ff2f5775488efbbdf62021b9aa26bf050cd Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 3 May 2019 11:51:08 +0200 Subject: [PATCH 055/371] Release notes: Fix PR ordering --- docs/pages/release_notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 053ac31b15..cb91b86773 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -25,8 +25,8 @@ This is a {{ site.pmd.release_type }} release. ### External Contributions -* [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) * [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) +* [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} From eb37bc12c416e647d6e0ccd0de927601faf5db1b Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 3 May 2019 11:55:28 +0200 Subject: [PATCH 056/371] Updates release notes, fixes #1809, refs #1803 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index cb91b86773..c39992466f 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,8 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* dart + * [#1809](https://github.com/pmd/pmd/issues/1809): \[dart] \[cpd] Parse error with escape sequences * java-bestpractices * [#1738](https://github.com/pmd/pmd/issues/1738): \[java] MethodReturnsInternalArray does not work in inner classes * java-codestyle From cd6be28f9bdea3e15b48c286b98afd8fa5c7184c Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 3 May 2019 12:27:47 +0200 Subject: [PATCH 057/371] Update release notes, refs #1802, fixes #1810 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index edf8ae5b63..2ca9bdc86e 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -45,6 +45,8 @@ Being based on a proper Antlr grammar, CPD can: * [#1782](https://github.com/pmd/pmd/issues/1782): \[java] NoPackage: False Negative for enums * java-design * [#1760](https://github.com/pmd/pmd/issues/1760): \[java] UseObjectForClearerAPI flags private methods +* python + * [#1810](https://github.com/pmd/pmd/issues/1810): \[python] \[cpd] Parse error when using Python 2 backticks ### API Changes @@ -56,6 +58,7 @@ Being based on a proper Antlr grammar, CPD can: * [#1761](https://github.com/pmd/pmd/pull/1761): \[dart] \[cpd] Added CPD support for Dart - [Maikel Steneker](https://github.com/maikelsteneker) * [#1776](https://github.com/pmd/pmd/pull/1776): \[java] Show more detailed message when can't resolve field type - [Andrey Fomin](https://github.com/andrey-fomin) * [#1781](https://github.com/pmd/pmd/pull/1781): \[java] Location change in AssignmentToNonFinalStatic - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1802](https://github.com/pmd/pmd/pull/1802): \[python] \[cpd] Add support for Python 2 backticks - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} From fe4ba1433a251104843b531f12ea169dee7459f9 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 3 May 2019 18:16:39 +0200 Subject: [PATCH 058/371] Add checker-qual dependency --- pmd-core/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index c78aabfa37..9443265f3b 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -143,6 +143,12 @@ <version>2.8.5</version> </dependency> + <dependency> + <groupId>org.checkerframework</groupId> + <artifactId>checker-qual</artifactId> + <version>2.5.2</version> + </dependency> + <dependency> <groupId>net.sourceforge.saxon</groupId> From ccf99a4dc3bdd035717d18c6cfb5cde42a1931f5 Mon Sep 17 00:00:00 2001 From: Ivo Smid <ivo.smid@gmail.com> Date: Mon, 22 Apr 2019 14:55:15 +0200 Subject: [PATCH 059/371] ProperLogger - make class-name configurable and requirement of static-final logger (deprecate LoggerIsNotStaticFinal) --- docs/pages/pmd/rules/java.md | 2 +- docs/pages/pmd/rules/java/errorprone.md | 81 ++++++++------ .../resources/category/java/errorprone.xml | 82 ++++++++------ .../java/rule/errorprone/xml/ProperLogger.xml | 101 +++++++++++++++++- 4 files changed, 199 insertions(+), 67 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 80ca10856f..9f7e60c0e0 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -255,7 +255,7 @@ folder: pmd/rules * [JumbledIncrementer](pmd_rules_java_errorprone.html#jumbledincrementer): Avoid jumbled loop incrementers - its usually a mistake, and is confusing even if intentional. * [JUnitSpelling](pmd_rules_java_errorprone.html#junitspelling): Some JUnit framework methods are easy to misspell. * [JUnitStaticSuite](pmd_rules_java_errorprone.html#junitstaticsuite): The suite() method in a JUnit test needs to be both public and static. -* [LoggerIsNotStaticFinal](pmd_rules_java_errorprone.html#loggerisnotstaticfinal): In most cases, the Logger reference can be declared as static and final. +* [LoggerIsNotStaticFinal](pmd_rules_java_errorprone.html#loggerisnotstaticfinal): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> In most cases, the Logger reference can be declared as static and final. This rule is deprecated. ... * [MethodWithSameNameAsEnclosingClass](pmd_rules_java_errorprone.html#methodwithsamenameasenclosingclass): Non-constructor methods should not have the same name as the enclosing class. * [MisplacedNullCheck](pmd_rules_java_errorprone.html#misplacednullcheck): The null check here is misplaced. If the variable is null a NullPointerException will be thrown.E... * [MissingBreakInSwitch](pmd_rules_java_errorprone.html#missingbreakinswitch): Switch statements without break or return statements for each case optionmay indicate problematic... diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index adb805ee8b..451e634512 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -245,7 +245,7 @@ for (int i = 0; i < 10; i++) { The method Object.finalize() is called by the garbage collector on an object when garbage collection determines that there are no more references to the object. It should not be invoked by application logic. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.AvoidCallingFinalizeRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidCallingFinalizeRule.java) @@ -270,7 +270,7 @@ void foo() { **Priority:** Medium (3) -Code should never throw NullPointerExceptions under normal circumstances. A catch block may hide the +Code should never throw NullPointerExceptions under normal circumstances. A catch block may hide the original error, causing other, more subtle problems later on. **This rule is defined by the following XPath expression:** @@ -303,7 +303,7 @@ public class Foo { **Priority:** Medium (3) -Catching Throwable errors is not recommended since its scope is very broad. It includes runtime issues such as +Catching Throwable errors is not recommended since its scope is very broad. It includes runtime issues such as OutOfMemoryError that should be exposed and managed separately. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.AvoidCatchingThrowableRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidCatchingThrowableRule.java) @@ -464,8 +464,8 @@ public class A { **Priority:** Medium (3) -It can be confusing to have a field name with the same name as a method. While this is permitted, -having information (field) and actions (method) is not clear naming. Developers versed in +It can be confusing to have a field name with the same name as a method. While this is permitted, +having information (field) and actions (method) is not clear naming. Developers versed in Smalltalk often prefer this approach as the methods denote accessor methods. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.AvoidFieldNameMatchingMethodNameRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidFieldNameMatchingMethodNameRule.java) @@ -764,9 +764,9 @@ boolean x = (y == Double.NaN); **Priority:** Medium (3) -If a class is a bean, or is referenced by a bean directly or indirectly it needs to be serializable. -Member variables need to be marked as transient, static, or have accessor methods in the class. Marking -variables as transient is the safest and easiest modification. Accessor methods should follow the Java +If a class is a bean, or is referenced by a bean directly or indirectly it needs to be serializable. +Member variables need to be marked as transient, static, or have accessor methods in the class. Marking +variables as transient is the safest and easiest modification. Accessor methods should follow the Java naming conventions, i.e. for a variable named foo, getFoo() and setFoo() accessor methods should be provided. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.BeanMembersShouldSerializeRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/BeanMembersShouldSerializeRule.java) @@ -1527,7 +1527,7 @@ public class MyActivity extends Activity { **Priority:** Medium Low (4) -Throwing exceptions within a 'finally' block is confusing since they may mask other exceptions +Throwing exceptions within a 'finally' block is confusing since they may mask other exceptions or code defects. Note: This is a PMD implementation of the Lint4j rule "A throw in a finally block" @@ -1623,8 +1623,8 @@ public class Count { **Priority:** Medium (3) -Empty Catch Block finds instances where an exception is caught, but nothing is done. -In most circumstances, this swallows an exception which should either be acted on +Empty Catch Block finds instances where an exception is caught, but nothing is done. +In most circumstances, this swallows an exception which should either be acted on or reported. **This rule is defined by the following XPath expression:** @@ -1830,7 +1830,7 @@ public class Foo { **Priority:** Medium (3) -An empty statement (or a semicolon by itself) that is not used as the sole body of a 'for' +An empty statement (or a semicolon by itself) that is not used as the sole body of a 'for' or 'while' loop is probably a bug. It could also be a double semicolon, which has no purpose and should be removed. @@ -1961,7 +1961,7 @@ public class Foo { **Priority:** Medium (3) -Empty While Statement finds all instances where a while statement does nothing. +Empty While Statement finds all instances where a while statement does nothing. If it is a timing loop, then you should use Thread.sleep() for it; if it is a while loop that does a lot in the exit expression, rewrite it to make it clearer. @@ -2109,7 +2109,7 @@ protected void finalize() { Methods named finalize() should not have parameters. It is confusing and most likely an attempt to overload Object.finalize(). It will not be called by the VM. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **This rule is defined by the following XPath expression:** @@ -2139,9 +2139,9 @@ public class Foo { **Priority:** Medium (3) -When overriding the finalize(), the new method should be set as protected. If made public, +When overriding the finalize(), the new method should be set as protected. If made public, other classes may invoke it at inappropriate times. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **This rule is defined by the following XPath expression:** @@ -2391,12 +2391,16 @@ public class Foo extends TestCase { ## LoggerIsNotStaticFinal +<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f;">Deprecated</span> + **Since:** PMD 2.0 **Priority:** Medium High (2) In most cases, the Logger reference can be declared as static and final. +This rule is deprecated. The rule is replaced by {% rule java/errorprone/ProperLogger %}. + **This rule is defined by the following XPath expression:** ``` xpath //VariableDeclarator @@ -2850,16 +2854,26 @@ with the restriction that the logger needs to be passed into the constructor. **This rule is defined by the following XPath expression:** ``` xpath -//ClassOrInterfaceBodyDeclaration[FieldDeclaration//ClassOrInterfaceType[@Image='Log'] - and - not(FieldDeclaration[@Final='true'][@Static='true'][@Private='true'][.//VariableDeclaratorId[@Image=$staticLoggerName]] - and - //ArgumentList//ClassOrInterfaceType[@Image = ancestor::ClassOrInterfaceDeclaration/@Image or @Image = ancestor::EnumDeclaration/@Image]) - and - not(FieldDeclaration[@Final='true'][@Private='true'][.//VariableDeclaratorId[@Image='log']] - [count(.//VariableInitializer)=0] - [ancestor::ClassOrInterfaceBody//StatementExpression[.//PrimaryExpression/descendant::*[@Image='log']][count(.//AllocationExpression)=0]] - )] +//ClassOrInterfaceBodyDeclaration[ + FieldDeclaration//ClassOrInterfaceType[pmd-java:typeIs($loggerClass)] + and not ( + (: check logger name :) + ( + FieldDeclaration[$requireStaticFinalLogger][@Final=true()][@Static=true()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] + | + FieldDeclaration[$requireStaticFinalLogger = false()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] + ) + and + (: in place initialization with method argument pointing to current class (even for Enums) :) + .//ArgumentList//ClassOrInterfaceType[@Image = ancestor::ClassOrInterfaceDeclaration/@Image or @Image = ancestor::EnumDeclaration/@Image] + ) + and not ( + (: final logger initialized inside constructor :) + FieldDeclaration[@Final=true()][@Private=true()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] + [count(.//VariableInitializer)=0] + [ancestor::ClassOrInterfaceBody//StatementExpression[.//PrimaryExpression/descendant::*[@Image=$loggerName or @Image=$staticLoggerName]][count(.//AllocationExpression)=0]] + ) +] ``` **Example(s):** @@ -2877,7 +2891,10 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|staticLoggerName|LOG|Name of the static Logger variable|no| +|staticLoggerName|LOG|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> (Use 'loggerName' property) Name of the static Logger variable|no| +|loggerName|LOG|Name of the Logger variable|no| +|loggerClass|Log|Class name of the logger|no| +|requireStaticFinalLogger|false|Static final logger is required|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -2888,7 +2905,9 @@ public class Foo { ``` xml <rule ref="category/java/errorprone.xml/ProperLogger"> <properties> - <property name="staticLoggerName" value="LOG" /> + <property name="loggerName" value="LOG" /> + <property name="loggerClass" value="Log" /> + <property name="requireStaticFinalLogger" value="false" /> </properties> </rule> ``` @@ -3130,7 +3149,7 @@ new StringBuffer() // 16 new StringBuffer(6) // 6 new StringBuffer("hello world") // 11 + 16 = 27 new StringBuffer('A') // chr(A) = 65 -new StringBuffer("A") // 1 + 16 = 17 +new StringBuffer("A") // 1 + 16 = 17 new StringBuilder() // 16 new StringBuilder(6) // 6 @@ -3285,7 +3304,7 @@ public void foo() { **Priority:** Medium (3) -Test classes end with the suffix Test. Having a non-test class with that name is not a good practice, +Test classes end with the suffix Test. Having a non-test class with that name is not a good practice, since most people will assume it is a test case. Test classes have test methods named testXXX. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.TestClassWithoutTestCasesRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/TestClassWithoutTestCasesRule.java) @@ -3663,7 +3682,7 @@ class Foo { **Priority:** Medium (3) -In J2EE, the getClassLoader() method might not work as expected. Use +In J2EE, the getClassLoader() method might not work as expected. Use Thread.currentThread().getContextClassLoader() instead. **This rule is defined by the following XPath expression:** diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 23cfaefab8..5be2e93cb6 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -190,7 +190,7 @@ for (int i = 0; i < 10; i++) { <description> The method Object.finalize() is called by the garbage collector on an object when garbage collection determines that there are no more references to the object. It should not be invoked by application logic. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. </description> <priority>3</priority> @@ -211,7 +211,7 @@ void foo() { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#avoidcatchingnpe"> <description> -Code should never throw NullPointerExceptions under normal circumstances. A catch block may hide the +Code should never throw NullPointerExceptions under normal circumstances. A catch block may hide the original error, causing other, more subtle problems later on. </description> <priority>3</priority> @@ -245,7 +245,7 @@ public class Foo { class="net.sourceforge.pmd.lang.java.rule.errorprone.AvoidCatchingThrowableRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#avoidcatchingthrowable"> <description> -Catching Throwable errors is not recommended since its scope is very broad. It includes runtime issues such as +Catching Throwable errors is not recommended since its scope is very broad. It includes runtime issues such as OutOfMemoryError that should be exposed and managed separately. </description> <priority>3</priority> @@ -372,8 +372,8 @@ public class A { class="net.sourceforge.pmd.lang.java.rule.errorprone.AvoidFieldNameMatchingMethodNameRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#avoidfieldnamematchingmethodname"> <description> -It can be confusing to have a field name with the same name as a method. While this is permitted, -having information (field) and actions (method) is not clear naming. Developers versed in +It can be confusing to have a field name with the same name as a method. While this is permitted, +having information (field) and actions (method) is not clear naming. Developers versed in Smalltalk often prefer this approach as the methods denote accessor methods. </description> <priority>3</priority> @@ -634,9 +634,9 @@ boolean x = (y == Double.NaN); class="net.sourceforge.pmd.lang.java.rule.errorprone.BeanMembersShouldSerializeRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#beanmembersshouldserialize"> <description> -If a class is a bean, or is referenced by a bean directly or indirectly it needs to be serializable. -Member variables need to be marked as transient, static, or have accessor methods in the class. Marking -variables as transient is the safest and easiest modification. Accessor methods should follow the Java +If a class is a bean, or is referenced by a bean directly or indirectly it needs to be serializable. +Member variables need to be marked as transient, static, or have accessor methods in the class. Marking +variables as transient is the safest and easiest modification. Accessor methods should follow the Java naming conventions, i.e. for a variable named foo, getFoo() and setFoo() accessor methods should be provided. </description> <priority>3</priority> @@ -1324,7 +1324,7 @@ public class MyActivity extends Activity { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#donotthrowexceptioninfinally"> <description> -Throwing exceptions within a 'finally' block is confusing since they may mask other exceptions +Throwing exceptions within a 'finally' block is confusing since they may mask other exceptions or code defects. Note: This is a PMD implementation of the Lint4j rule "A throw in a finally block" </description> @@ -1415,8 +1415,8 @@ public class Count { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#emptycatchblock"> <description> -Empty Catch Block finds instances where an exception is caught, but nothing is done. -In most circumstances, this swallows an exception which should either be acted on +Empty Catch Block finds instances where an exception is caught, but nothing is done. +In most circumstances, this swallows an exception which should either be acted on or reported. </description> <priority>3</priority> @@ -1611,7 +1611,7 @@ public class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#emptystatementnotinloop"> <description> -An empty statement (or a semicolon by itself) that is not used as the sole body of a 'for' +An empty statement (or a semicolon by itself) that is not used as the sole body of a 'for' or 'while' loop is probably a bug. It could also be a double semicolon, which has no purpose and should be removed. </description> @@ -1742,7 +1742,7 @@ public class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#emptywhilestmt"> <description> -Empty While Statement finds all instances where a while statement does nothing. +Empty While Statement finds all instances where a while statement does nothing. If it is a timing loop, then you should use Thread.sleep() for it; if it is a while loop that does a lot in the exit expression, rewrite it to make it clearer. </description> @@ -1900,7 +1900,7 @@ protected void finalize() { <description> Methods named finalize() should not have parameters. It is confusing and most likely an attempt to overload Object.finalize(). It will not be called by the VM. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. </description> <priority>3</priority> @@ -1932,9 +1932,9 @@ public class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#finalizeshouldbeprotected"> <description> -When overriding the finalize(), the new method should be set as protected. If made public, +When overriding the finalize(), the new method should be set as protected. If made public, other classes may invoke it at inappropriate times. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. </description> <priority>3</priority> @@ -2180,9 +2180,12 @@ public class Foo extends TestCase { since="2.0" message="The Logger variable declaration does not contain the static and final modifiers" class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#loggerisnotstaticfinal"> + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#loggerisnotstaticfinal" + deprecated="true"> <description> In most cases, the Logger reference can be declared as static and final. + +This rule is deprecated. The rule is replaced by {% rule java/errorprone/ProperLogger %}. </description> <priority>2</priority> <properties> @@ -2625,7 +2628,8 @@ class Foo{ since="3.3" message="Logger should be defined private static final and have the correct class" class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#properlogger"> + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#properlogger" + typeResolution="true"> <description> A logger should normally be defined private static final and be associated with the correct class. Private final Log log; is also allowed for rare cases where loggers need to be passed around, @@ -2633,23 +2637,37 @@ with the restriction that the logger needs to be passed into the constructor. </description> <priority>3</priority> <properties> + <property name="version" value="2.0"/> <property name="xpath"> <value> <![CDATA[ -//ClassOrInterfaceBodyDeclaration[FieldDeclaration//ClassOrInterfaceType[@Image='Log'] - and - not(FieldDeclaration[@Final='true'][@Static='true'][@Private='true'][.//VariableDeclaratorId[@Image=$staticLoggerName]] - and - //ArgumentList//ClassOrInterfaceType[@Image = ancestor::ClassOrInterfaceDeclaration/@Image or @Image = ancestor::EnumDeclaration/@Image]) - and - not(FieldDeclaration[@Final='true'][@Private='true'][.//VariableDeclaratorId[@Image='log']] - [count(.//VariableInitializer)=0] - [ancestor::ClassOrInterfaceBody//StatementExpression[.//PrimaryExpression/descendant::*[@Image='log']][count(.//AllocationExpression)=0]] - )] +//ClassOrInterfaceBodyDeclaration[ + FieldDeclaration//ClassOrInterfaceType[pmd-java:typeIs($loggerClass)] + and not ( + (: check logger name :) + ( + FieldDeclaration[$requireStaticFinalLogger][@Final=true()][@Static=true()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] + | + FieldDeclaration[$requireStaticFinalLogger = false()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] + ) + and + (: in place initialization with method argument pointing to current class (even for Enums) :) + .//ArgumentList//ClassOrInterfaceType[@Image = ancestor::ClassOrInterfaceDeclaration/@Image or @Image = ancestor::EnumDeclaration/@Image] + ) + and not ( + (: final logger initialized inside constructor :) + FieldDeclaration[@Final=true()][@Private=true()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] + [count(.//VariableInitializer)=0] + [ancestor::ClassOrInterfaceBody//StatementExpression[.//PrimaryExpression/descendant::*[@Image=$loggerName or @Image=$staticLoggerName]][count(.//AllocationExpression)=0]] + ) +] ]]> </value> </property> - <property name="staticLoggerName" type="String" description="Name of the static Logger variable" value="LOG"/> + <property name="staticLoggerName" type="String" description="deprecated!(Use 'loggerName' property) Name of the static Logger variable" value="LOG"/> + <property name="loggerName" type="String" description="Name of the Logger variable" value="LOG"/> + <property name="loggerClass" type="String" description="Class name of the logger" value="Log"/> + <property name="requireStaticFinalLogger" type="Boolean" description="Static final logger is required" value="false"/> </properties> <example> <![CDATA[ @@ -2896,7 +2914,7 @@ new StringBuffer() // 16 new StringBuffer(6) // 6 new StringBuffer("hello world") // 11 + 16 = 27 new StringBuffer('A') // chr(A) = 65 -new StringBuffer("A") // 1 + 16 = 17 +new StringBuffer("A") // 1 + 16 = 17 new StringBuilder() // 16 new StringBuilder(6) // 6 @@ -3044,7 +3062,7 @@ public void foo() { class="net.sourceforge.pmd.lang.java.rule.errorprone.TestClassWithoutTestCasesRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#testclasswithouttestcases"> <description> -Test classes end with the suffix Test. Having a non-test class with that name is not a good practice, +Test classes end with the suffix Test. Having a non-test class with that name is not a good practice, since most people will assume it is a test case. Test classes have test methods named testXXX. </description> <priority>3</priority> @@ -3415,7 +3433,7 @@ class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#useproperclassloader"> <description> -In J2EE, the getClassLoader() method might not work as expected. Use +In J2EE, the getClassLoader() method might not work as expected. Use Thread.currentThread().getContextClassLoader() instead. </description> <priority>3</priority> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ProperLogger.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ProperLogger.xml index 73f92b6747..4d396a3632 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ProperLogger.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ProperLogger.xml @@ -29,6 +29,7 @@ public class Foo { <description><![CDATA[ Ok, special case ]]></description> + <rule-property name="loggerName">log</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ public class Foo { @@ -55,18 +56,19 @@ public enum Foo { <description><![CDATA[ bug 1626232, a separate variable initialization should not confuse the rule ]]></description> + <rule-property name="loggerName">log</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ public class Foo { private String bar = ""; private final Log log; - Foo(Log log) { - this.log = log; + Foo(Log log1) { + this.log = log1; } } ]]> </code> </test-code> - <test-code> + <test-code> <description><![CDATA[ Enums shoud be accepted for declaration ]]></description> @@ -87,6 +89,99 @@ bug 1626232, extra loggers with different names are not allowed by default (use public class Foo { private static final Log LOG = LogFactory.getLog(Foo.class); private static final Log LOG2 = LogFactory.getLog(Foo.class + ".foo"); +} + ]]> </code> + </test-code> + <test-code> + <description><![CDATA[ +Custom logger-class with invalid logger variable name + ]]></description> + <rule-property name="loggerClass">MyLog</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Foo { + private static final MyLog INVALID_LOG_NAME = LogFactory.getLog(Foo.class); +} + ]]> </code> + </test-code> + <test-code> + <description><![CDATA[ +Public logger + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public static final Log LOG = LogFactory.getLog(Foo.class); +} + ]]> </code> + </test-code> + <test-code> + <description><![CDATA[ +Public logger when static final required + ]]></description> + <rule-property name="requireStaticFinalLogger">true</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public static final Log LOG = LogFactory.getLog(Foo.class); +} + ]]> </code> + </test-code> + <test-code> + <description><![CDATA[ +Logger initialized as String constant from class name + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + Log LOG = LogFactory.getLog(Foo.class.getName()); +} + ]]> </code> + </test-code> + <test-code> + <description><![CDATA[ +Package-protected logger when static final is not required + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + Log LOG = LogFactory.getLog(Foo.class); +} + ]]> </code> + </test-code> + <test-code> + <description><![CDATA[ +Package-protected logger when static final is required + ]]></description> + <rule-property name="requireStaticFinalLogger">true</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Foo { + Log LOG = LogFactory.getLog(Foo.class); +} + ]]> </code> + </test-code> + <test-code> + <description><![CDATA[ +Check type resolution of logger + ]]></description> + <rule-property name="loggerClass">org.slf4j.Logger</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(Foo.class); +} + ]]> </code> + </test-code> + <test-code> + <description><![CDATA[ +Check type resolution of logger with invalid logger specified + ]]></description> + <rule-property name="loggerClass">org.slf4j.Logger</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Foo { + org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(Bar.class); } ]]> </code> </test-code> From bf709546982e7e6941403bff72d9ff16edcd2f24 Mon Sep 17 00:00:00 2001 From: BBG <djydewang@gmail.com> Date: Sun, 5 May 2019 14:59:25 +0800 Subject: [PATCH 060/371] [ci] create a corresponding travis remote branch locally --- .travis/build-deploy.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis/build-deploy.sh b/.travis/build-deploy.sh index f5a97b19a2..ece8029a7b 100755 --- a/.travis/build-deploy.sh +++ b/.travis/build-deploy.sh @@ -61,9 +61,11 @@ elif travis_isPullRequest; then ./mvnw verify $MVN_BUILD_FLAGS ( set +e - # if ${TRAVIS_BRANCH} is master, the script will fail since there is local master branch - git checkout -b ${TRAVIS_BRANCH} origin/${TRAVIS_BRANCH} - git checkout -qf FETCH_HEAD + # Create a corresponding remote branch locally + if ! git show-ref --verify --quiet refs/heads/${TRAVIS_BRANCH}; then + git fetch --no-tags origin +refs/heads/${TRAVIS_BRANCH}:refs/remotes/origin/${TRAVIS_BRANCH} + git branch ${TRAVIS_BRANCH} origin/${TRAVIS_BRANCH} + fi log_info "Running danger" bundle exec danger --verbose ) From 1a6a19aaaa3365b692863ac76724827a8efb04b1 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Wed, 8 May 2019 11:56:02 +0200 Subject: [PATCH 061/371] Added test case for failing Matlab file. --- .../sourceforge/pmd/cpd/MatlabTokenizerTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java index 50fdb1832e..88f30ecf20 100644 --- a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java +++ b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java @@ -54,4 +54,18 @@ public class MatlabTokenizerTest extends AbstractTokenizerTest { TokenEntry.getEOF(); assertEquals(2, tokens.size()); // 2 tokens: "end" + EOF } + + @Test + public void testComments() throws IOException { + SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader("classdef LC" + PMD.EOL + + " methods" + PMD.EOL + + " function [obj, c,t, s ] = Classification( obj,m,t, cm )%#codegen" + PMD.EOL + + " end" + PMD.EOL + + " end" + PMD.EOL + + "end")); + Tokens tokens = new Tokens(); + tokenizer.tokenize(sourceCode, tokens); // should not result in parse error + TokenEntry.getEOF(); + assertEquals(28, tokens.size()); + } } From 735b5305acc90a25ef96fd99c2fbbadadf8f33ad Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Wed, 8 May 2019 11:57:31 +0200 Subject: [PATCH 062/371] Fixed Matlab parsing issue. --- pmd-matlab/etc/grammar/matlab.jj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmd-matlab/etc/grammar/matlab.jj b/pmd-matlab/etc/grammar/matlab.jj index 6f61dd0d42..ae971c0cff 100644 --- a/pmd-matlab/etc/grammar/matlab.jj +++ b/pmd-matlab/etc/grammar/matlab.jj @@ -41,10 +41,10 @@ PARSER_END(MatlabParser) "\n" : DEFAULT } -MORE: +<DEFAULT, TRANSPOSE> MORE: { "%{": IN_COMMENT } -SPECIAL_TOKEN: +<DEFAULT, TRANSPOSE> SPECIAL_TOKEN: { <SINGLE_LINE_COMMENT: "%"(~["\n","\r"])* ("\n"|"\r"|"\r\n")?> } <IN_COMMENT> SPECIAL_TOKEN: From 8ae6563fff7871bec37d21d806535668ba8c599f Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Wed, 8 May 2019 14:50:51 -0400 Subject: [PATCH 063/371] Fix ApexDoc handling with inner classes --- .../pmd/lang/apex/ast/ApexTreeBuilder.java | 94 ++++++++++++------- .../apex/rule/documentation/xml/ApexDoc.xml | 24 +++++ 2 files changed, 85 insertions(+), 33 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ApexTreeBuilder.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ApexTreeBuilder.java index fc44166cb6..75e383bebb 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ApexTreeBuilder.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ApexTreeBuilder.java @@ -9,7 +9,6 @@ import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.ListIterator; import java.util.Map; import java.util.Stack; @@ -221,17 +220,17 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { // The Apex nodes with children to build. private Stack<AstNode> parents = new Stack<>(); - + private AdditionalPassScope scope = new AdditionalPassScope(Errors.createErrors()); private final SourceCodePositioner sourceCodePositioner; private final String sourceCode; - private ListIterator<TokenLocation> apexDocTokenLocations; + private List<ApexDocTokenLocation> apexDocTokenLocations; public ApexTreeBuilder(String sourceCode) { this.sourceCode = sourceCode; sourceCodePositioner = new SourceCodePositioner(sourceCode); - apexDocTokenLocations = buildApexDocTokenLocations(sourceCode).listIterator(); + apexDocTokenLocations = buildApexDocTokenLocations(sourceCode); } static <T extends AstNode> AbstractApexNode<T> createNodeAdapter(T node) { @@ -279,11 +278,17 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { private void buildFormalComment(AstNode node) { if (parents.peek() == node) { ApexNode<?> parent = (ApexNode<?>) nodes.peek(); - TokenLocation tokenLocation = getApexDocTokenLocation(getApexDocIndex(parent)); + ApexDocTokenLocation tokenLocation = getApexDocTokenLocation(getApexDocIndex(parent)); if (tokenLocation != null) { ASTFormalComment comment = new ASTFormalComment(tokenLocation.token); comment.calculateLineNumbers(sourceCodePositioner, tokenLocation.index, tokenLocation.index + tokenLocation.token.length()); + + // move existing nodes so that we can insert the comment as the first node + for (int i = parent.jjtGetNumChildren(); i > 0; i--) { + parent.jjtAddChild(parent.jjtGetChild(i - 1), i); + } + parent.jjtAddChild(comment, 0); comment.jjtSetParent(parent); } @@ -291,43 +296,50 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { } private int getApexDocIndex(ApexNode<?> node) { - final int index = node.getNode().getLoc().getStartIndex(); + ASTAnnotation annotation = node.getFirstDescendantOfType(ASTAnnotation.class); + ApexNode<?> firstNode = annotation == null ? node : annotation; + final int index = firstNode.getNode().getLoc().getStartIndex(); return sourceCode.lastIndexOf('\n', index); } - private TokenLocation getApexDocTokenLocation(int index) { - TokenLocation last = null; - while (apexDocTokenLocations.hasNext()) { - final TokenLocation location = apexDocTokenLocations.next(); - if (location.index >= index) { - // rollback, the next token corresponds to a different node - apexDocTokenLocations.previous(); - - if (last != null) { - return last; + private ApexDocTokenLocation getApexDocTokenLocation(int index) { + for (ApexDocTokenLocation loc : apexDocTokenLocations) { + if (index >= loc.targetStart) { + if (index <= loc.targetEnd) { + return loc; } - return null; + } else { + // remaining tokens start after the index we are looking for + break; } - last = location; } - return last; + return null; } - private static List<TokenLocation> buildApexDocTokenLocations(String source) { + private static List<ApexDocTokenLocation> buildApexDocTokenLocations(String source) { ANTLRStringStream stream = new ANTLRStringStream(source); ApexLexer lexer = new ApexLexer(stream); - ArrayList<TokenLocation> tokenLocations = new ArrayList<>(); + ArrayList<ApexDocTokenLocation> tokenLocations = new ArrayList<>(); int startIndex = 0; Token token = lexer.nextToken(); int endIndex = lexer.getCharIndex(); + + String currentToken = null; + int currentIndex = 0; + int currentTargetStart = 0; + while (token.getType() != Token.EOF) { if (token.getType() == ApexLexer.BLOCK_COMMENT) { - // Filter only block comments starting with "/**" if (token.getText().startsWith("/**")) { - tokenLocations.add(new TokenLocation(startIndex, token.getText())); + currentToken = token.getText(); + currentIndex = startIndex; + currentTargetStart = lexer.getCharIndex(); } + } else if (currentToken != null && token.getType() != ApexLexer.WS) { + tokenLocations.add(new ApexDocTokenLocation(currentIndex, currentToken, currentTargetStart, lexer.getCharIndex())); + currentToken = null; } // TODO : Check other non-doc comments and tokens of type ApexLexer.EOL_COMMENT for "NOPMD" suppressions startIndex = endIndex; @@ -338,13 +350,17 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { return tokenLocations; } - private static class TokenLocation { + private static class ApexDocTokenLocation { int index; String token; + int targetStart; + int targetEnd; - TokenLocation(int index, String token) { + ApexDocTokenLocation(int index, String token, int targetStart, int targetEnd) { this.index = index; this.token = token; + this.targetStart = targetStart; + this.targetEnd = targetEnd; } } @@ -364,9 +380,12 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { @Override public boolean visit(UserInterface node, AdditionalPassScope scope) { - final boolean ret = visit(node); + return visit(node); + } + + @Override + public void visitEnd(UserInterface node, AdditionalPassScope scope) { buildFormalComment(node); - return ret; } @Override @@ -651,9 +670,12 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { @Override public boolean visit(Property node, AdditionalPassScope scope) { - final boolean ret = visit(node); + return visit(node); + } + + @Override + public void visitEnd(Property node, AdditionalPassScope scope) { buildFormalComment(node); - return ret; } @Override @@ -718,16 +740,22 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { @Override public boolean visit(UserClass node, AdditionalPassScope scope) { - final boolean ret = visit(node); + return visit(node); + } + + @Override + public void visitEnd(UserClass node, AdditionalPassScope scope) { buildFormalComment(node); - return ret; } @Override public boolean visit(Method node, AdditionalPassScope scope) { - final boolean ret = visit(node); + return visit(node); + } + + @Override + public void visitEnd(Method node, AdditionalPassScope scope) { buildFormalComment(node); - return ret; } @Override diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/documentation/xml/ApexDoc.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/documentation/xml/ApexDoc.xml index 0e890cd274..8258932d81 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/documentation/xml/ApexDoc.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/documentation/xml/ApexDoc.xml @@ -398,4 +398,28 @@ public class Foo { ]]></code> </test-code> + <test-code> + <description>correct comments for constructor and inner class</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +/** + * @description Foo + */ +public class Foo { + + /** + * @description Foo + */ + public Foo() { + } + + /** + * @description Bar + */ + public class Bar { + } +} + ]]></code> + </test-code> + </test-data> From c5b0c8c17aa56d5f2d585bfaa882489b9b9a83b7 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Thu, 9 May 2019 15:04:46 -0400 Subject: [PATCH 064/371] Add configurable naming convention rules --- .../pmd/lang/apex/ast/ASTUserEnum.java | 12 +- .../AbstractRegexNamingConventionsRule.java | 33 ++++ .../ClassRegexNamingConventionsRule.java | 79 ++++++++++ .../FieldRegexNamingConventionsRule.java | 67 ++++++++ ...alParameterRegexNamingConventionsRule.java | 47 ++++++ ...calVariableRegexNamingConventionsRule.java | 48 ++++++ .../MethodRegexNamingConventionsRule.java | 74 +++++++++ .../PropertyRegexNamingConventionsRule.java | 52 ++++++ .../resources/category/apex/codestyle.xml | 148 ++++++++++++++++++ .../ClassRegexNamingConventionsTest.java | 11 ++ .../FieldRegexNamingConventionsTest.java | 11 ++ ...alParameterRegexNamingConventionsTest.java | 11 ++ ...calVariableRegexNamingConventionsTest.java | 11 ++ .../MethodRegexNamingConventionsTest.java | 11 ++ .../PropertyRegexNamingConventionsTest.java | 11 ++ .../xml/ClassRegexNamingConventions.xml | 146 +++++++++++++++++ .../xml/FieldRegexNamingConventions.xml | 126 +++++++++++++++ .../FormalParameterRegexNamingConventions.xml | 60 +++++++ .../LocalVariableRegexNamingConventions.xml | 72 +++++++++ .../xml/MethodRegexNamingConventions.xml | 122 +++++++++++++++ .../xml/PropertyRegexNamingConventions.xml | 74 +++++++++ 21 files changed, 1225 insertions(+), 1 deletion(-) create mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java create mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java create mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java create mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java create mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java create mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java create mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsTest.java create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsTest.java create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsTest.java create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsTest.java create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsTest.java create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsTest.java create mode 100644 pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml create mode 100644 pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml create mode 100644 pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml create mode 100644 pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/LocalVariableRegexNamingConventions.xml create mode 100644 pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml create mode 100644 pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/PropertyRegexNamingConventions.xml diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnum.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnum.java index 7249cba5ce..fade85f7d5 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnum.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnum.java @@ -4,6 +4,9 @@ package net.sourceforge.pmd.lang.apex.ast; +import java.lang.reflect.Field; + +import apex.jorje.data.Identifier; import apex.jorje.semantic.ast.compilation.UserEnum; public class ASTUserEnum extends ApexRootNode<UserEnum> { @@ -19,7 +22,14 @@ public class ASTUserEnum extends ApexRootNode<UserEnum> { @Override public String getImage() { - return node.getClass().getName(); + try { + Field field = node.getClass().getDeclaredField("name"); + field.setAccessible(true); + Identifier name = (Identifier) field.get(node); + return name.getValue(); + } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { + throw new RuntimeException(e); + } } public ASTModifierNode getModifiers() { diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java new file mode 100644 index 0000000000..1aae91a0e6 --- /dev/null +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java @@ -0,0 +1,33 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import static net.sourceforge.pmd.properties.PropertyFactory.regexProperty; + +import java.util.Map; +import java.util.regex.Pattern; + +import net.sourceforge.pmd.lang.apex.ast.ApexNode; +import net.sourceforge.pmd.lang.apex.rule.AbstractApexRule; +import net.sourceforge.pmd.properties.PropertyBuilder; +import net.sourceforge.pmd.properties.PropertyDescriptor; + +public abstract class AbstractRegexNamingConventionsRule extends AbstractApexRule { + abstract String displayName(String name); + + protected void checkMatches(PropertyDescriptor<Pattern> propertyDescriptor, ApexNode<?> node, Object data) { + Pattern regex = getProperty(propertyDescriptor); + String name = node.getImage(); + if (!regex.matcher(name).matches()) { + String displayName = displayName(propertyDescriptor.name()); + addViolation(data, node, new Object[] { displayName, name, regex.toString() }); + } + } + + protected static PropertyBuilder.RegexPropertyBuilder prop(String name, String displayName, Map<String, String> descriptorToDisplayNames) { + descriptorToDisplayNames.put(name, displayName); + return regexProperty(name).desc("Regex which applies to " + displayName + " names"); + } +} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java new file mode 100644 index 0000000000..6795fd99d7 --- /dev/null +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java @@ -0,0 +1,79 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +import net.sourceforge.pmd.lang.apex.ast.ASTUserClass; +import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum; +import net.sourceforge.pmd.lang.apex.ast.ASTUserInterface; +import net.sourceforge.pmd.properties.PropertyDescriptor; + +public class ClassRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { + private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); + + private static final String TITLE_CASE = "[a-zA-Z0-9]+"; + + private static final PropertyDescriptor<Pattern> TEST_CLASS_REGEX = prop("testClassPattern", "test class", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + + private static final PropertyDescriptor<Pattern> ABSTRACT_CLASS_REGEX = prop("abstractClassPattern", "abstract class", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + + private static final PropertyDescriptor<Pattern> CLASS_REGEX = prop("classPattern", "class", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + + private static final PropertyDescriptor<Pattern> INTERFACE_REGEX = prop("interfacePattern", "interface", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + + private static final PropertyDescriptor<Pattern> ENUM_REGEX = prop("enumPattern", "enum", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + + public ClassRegexNamingConventionsRule() { + definePropertyDescriptor(TEST_CLASS_REGEX); + definePropertyDescriptor(ABSTRACT_CLASS_REGEX); + definePropertyDescriptor(CLASS_REGEX); + definePropertyDescriptor(INTERFACE_REGEX); + definePropertyDescriptor(ENUM_REGEX); + + addRuleChainVisit(ASTUserClass.class); + addRuleChainVisit(ASTUserInterface.class); + addRuleChainVisit(ASTUserEnum.class); + } + + @Override + public Object visit(ASTUserClass node, Object data) { + if (node.getModifiers().isTest()) { + checkMatches(TEST_CLASS_REGEX, node, data); + } else if (node.getModifiers().isAbstract()) { + checkMatches(ABSTRACT_CLASS_REGEX, node, data); + } else { + checkMatches(CLASS_REGEX, node, data); + } + + return data; + } + + @Override + public Object visit(ASTUserInterface node, Object data) { + checkMatches(INTERFACE_REGEX, node, data); + + return data; + } + + @Override + public Object visit(ASTUserEnum node, Object data) { + checkMatches(ENUM_REGEX, node, data); + + return data; + } + + @Override + protected String displayName(String name) { + return DESCRIPTOR_TO_DISPLAY_NAME.get(name); + } +} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java new file mode 100644 index 0000000000..d69389fdf5 --- /dev/null +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java @@ -0,0 +1,67 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +import net.sourceforge.pmd.lang.apex.ast.ASTField; +import net.sourceforge.pmd.lang.apex.ast.ASTModifierNode; +import net.sourceforge.pmd.lang.apex.ast.ASTProperty; +import net.sourceforge.pmd.properties.PropertyDescriptor; + +public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { + private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); + + private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; + + private static final PropertyDescriptor<Pattern> CONSTANT_REGEX = prop("constantPattern", "constant field", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> FINAL_REGEX = prop("finalPattern", "final field", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> STATIC_REGEX = prop("staticPattern", "static field", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> INSTANCE_REGEX = prop("instancePattern", "instance field", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + public FieldRegexNamingConventionsRule() { + definePropertyDescriptor(CONSTANT_REGEX); + definePropertyDescriptor(FINAL_REGEX); + definePropertyDescriptor(STATIC_REGEX); + definePropertyDescriptor(INSTANCE_REGEX); + + addRuleChainVisit(ASTField.class); + } + + @Override + public Object visit(ASTField node, Object data) { + if (node.getFirstParentOfType(ASTProperty.class) != null) { + return data; + } + + ASTModifierNode modifiers = node.getModifiers(); + + if (modifiers.isFinal() && modifiers.isStatic()) { + checkMatches(CONSTANT_REGEX, node, data); + } else if (modifiers.isFinal()) { + checkMatches(FINAL_REGEX, node, data); + } else if (modifiers.isStatic()) { + checkMatches(STATIC_REGEX, node, data); + } else { + checkMatches(INSTANCE_REGEX, node, data); + } + + return data; + } + + @Override + protected String displayName(String name) { + return DESCRIPTOR_TO_DISPLAY_NAME.get(name); + } +} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java new file mode 100644 index 0000000000..8b0392cd92 --- /dev/null +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java @@ -0,0 +1,47 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +import net.sourceforge.pmd.lang.apex.ast.ASTParameter; +import net.sourceforge.pmd.properties.PropertyDescriptor; + +public class FormalParameterRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { + private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); + + private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; + + private static final PropertyDescriptor<Pattern> FINAL_METHOD_PARAMETER_REGEX = prop("finalMethodParameterPattern", "final method parameter", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> METHOD_PARAMETER_REGEX = prop("methodParameterPattern", "method parameter", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + public FormalParameterRegexNamingConventionsRule() { + definePropertyDescriptor(FINAL_METHOD_PARAMETER_REGEX); + definePropertyDescriptor(METHOD_PARAMETER_REGEX); + + addRuleChainVisit(ASTParameter.class); + } + + @Override + public Object visit(ASTParameter node, Object data) { + if (node.getModifiers().isFinal()) { + checkMatches(FINAL_METHOD_PARAMETER_REGEX, node, data); + } else { + checkMatches(METHOD_PARAMETER_REGEX, node, data); + } + + return data; + } + + @Override + protected String displayName(String name) { + return DESCRIPTOR_TO_DISPLAY_NAME.get(name); + } +} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java new file mode 100644 index 0000000000..f38a175451 --- /dev/null +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java @@ -0,0 +1,48 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +import net.sourceforge.pmd.lang.apex.ast.ASTVariableDeclaration; +import net.sourceforge.pmd.lang.apex.ast.ASTVariableDeclarationStatements; +import net.sourceforge.pmd.properties.PropertyDescriptor; + +public class LocalVariableRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { + private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); + + private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; + + private static final PropertyDescriptor<Pattern> FINAL_REGEX = prop("finalLocalPattern", "final local variable", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> LOCAL_REGEX = prop("localPattern", "local variable", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + public LocalVariableRegexNamingConventionsRule() { + definePropertyDescriptor(FINAL_REGEX); + definePropertyDescriptor(LOCAL_REGEX); + + addRuleChainVisit(ASTVariableDeclaration.class); + } + + @Override + public Object visit(ASTVariableDeclaration node, Object data) { + if (node.getFirstParentOfType(ASTVariableDeclarationStatements.class).getModifiers().isFinal()) { + checkMatches(FINAL_REGEX, node, data); + } else { + checkMatches(LOCAL_REGEX, node, data); + } + + return data; + } + + @Override + protected String displayName(String name) { + return DESCRIPTOR_TO_DISPLAY_NAME.get(name); + } +} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java new file mode 100644 index 0000000000..0f062d8a60 --- /dev/null +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java @@ -0,0 +1,74 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +import net.sourceforge.pmd.lang.apex.ast.ASTMethod; +import net.sourceforge.pmd.lang.apex.ast.ASTProperty; +import net.sourceforge.pmd.properties.PropertyDescriptor; + +public class MethodRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { + private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); + + private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; + + private static final PropertyDescriptor<Pattern> TEST_REGEX = prop("testPattern", "test method", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> STATIC_REGEX = prop("staticPattern", "static method", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> INSTANCE_REGEX = prop("instancePattern", "instance method", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + public MethodRegexNamingConventionsRule() { + definePropertyDescriptor(TEST_REGEX); + definePropertyDescriptor(STATIC_REGEX); + definePropertyDescriptor(INSTANCE_REGEX); + + addRuleChainVisit(ASTMethod.class); + } + + @Override + public Object visit(ASTMethod node, Object data) { + if (isOverriddenMethod(node) || isPropertyAccessor(node) || isConstructor(node)) { + return data; + } + + if ("<clinit>".equals(node.getImage()) || "clone".equals(node.getImage())) { + return data; + } + + if (node.getModifiers().isTest()) { + checkMatches(TEST_REGEX, node, data); + } else if (node.getModifiers().isStatic()) { + checkMatches(STATIC_REGEX, node, data); + } else { + checkMatches(INSTANCE_REGEX, node, data); + } + + return data; + } + + @Override + protected String displayName(String name) { + return DESCRIPTOR_TO_DISPLAY_NAME.get(name); + } + + private boolean isOverriddenMethod(ASTMethod node) { + return node.getModifiers().isOverride(); + } + + private boolean isPropertyAccessor(ASTMethod node) { + return !node.getParentsOfType(ASTProperty.class).isEmpty(); + } + + private boolean isConstructor(ASTMethod node) { + return node.isConstructor(); + } +} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java new file mode 100644 index 0000000000..db4a80394f --- /dev/null +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java @@ -0,0 +1,52 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +import net.sourceforge.pmd.lang.apex.ast.ASTField; +import net.sourceforge.pmd.lang.apex.ast.ASTProperty; +import net.sourceforge.pmd.properties.PropertyDescriptor; + +public class PropertyRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { + private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); + + private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; + + private static final PropertyDescriptor<Pattern> STATIC_REGEX = prop("staticPattern", "static property", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> INSTANCE_REGEX = prop("instancePattern", "instance property", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + public PropertyRegexNamingConventionsRule() { + definePropertyDescriptor(STATIC_REGEX); + definePropertyDescriptor(INSTANCE_REGEX); + + addRuleChainVisit(ASTField.class); + } + + @Override + public Object visit(ASTField node, Object data) { + if (node.getFirstParentOfType(ASTProperty.class) == null) { + return data; + } + + if (node.getModifiers().isStatic()) { + checkMatches(STATIC_REGEX, node, data); + } else { + checkMatches(INSTANCE_REGEX, node, data); + } + + return data; + } + + @Override + protected String displayName(String name) { + return DESCRIPTOR_TO_DISPLAY_NAME.get(name); + } +} diff --git a/pmd-apex/src/main/resources/category/apex/codestyle.xml b/pmd-apex/src/main/resources/category/apex/codestyle.xml index ef53ac90d0..b2d3f835a0 100644 --- a/pmd-apex/src/main/resources/category/apex/codestyle.xml +++ b/pmd-apex/src/main/resources/category/apex/codestyle.xml @@ -25,6 +25,29 @@ public class Foo {} </example> </rule> + <rule name="ClassRegexNamingConventions" + since="6.15.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.apex.rule.codestyle.ClassRegexNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#classregexnamingconventions"> + <description> + Configurable naming conventions for type declarations. This rule reports + type declarations which do not match the regex that applies to their + specific kind (e.g. enum or interface). Each regex can be configured through + properties. + + By default this rule uses the standard Apex naming convention (Pascal case). + </description> + <priority>1</priority> + <example> + <![CDATA[ +public class FooClass { } // This is in pascal case, so it's ok + +public class FOO_CLASS { } // This will be reported unless you change the regex +]]> + </example> + </rule> + <rule name="IfElseStmtsMustUseBraces" language="apex" since="5.6.0" @@ -95,6 +118,30 @@ if (foo) { // preferred approach </example> </rule> + <rule name="FieldRegexNamingConventions" + since="6.15.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.apex.rule.codestyle.FieldRegexNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#fieldregexnamingconventions"> + <description> + Configurable naming conventions for field declarations. This rule reports variable declarations + which do not match the regex that applies to their specific kind ---e.g. constants (static final), + static field, final field. Each regex can be configured through properties. + + By default this rule uses the standard Apex naming convention (Camel case). + </description> + <priority>1</priority> + <example> +<![CDATA[ +public class Foo { + Integer instanceField; // This is in camel case, so it's ok + + Integer INSTANCE_FIELD; // This will be reported unless you change the regex +} +]]> + </example> + </rule> + <rule name="ForLoopsMustUseBraces" language="apex" since="5.6.0" @@ -130,6 +177,58 @@ for (int i = 0; i < 42; i++) { // preferred approach </example> </rule> + <rule name="FormalParameterRegexNamingConventions" + since="6.15.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.apex.rule.codestyle.FormalParameterRegexNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#formalparameterregexnamingconventions"> + <description> + Configurable naming conventions for formal parameters of methods. + This rule reports formal parameters which do not match the regex that applies to their + specific kind (e.g. method parameter, or final method parameter). Each regex can be + configured through properties. + + By default this rule uses the standard Apex naming convention (Camel case). + </description> + <priority>1</priority> + <example> +<![CDATA[ +public class Foo { + public bar(Integer methodParameter) { } // This is in camel case, so it's ok + + public baz(Integer METHOD_PARAMETER) { } // This will be reported unless you change the regex +} +]]> + </example> + </rule> + + <rule name="LocalVariableRegexNamingConventions" + since="6.15.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.apex.rule.codestyle.LocalVariableRegexNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#localvariableregexnamingconventions"> + <description> + Configurable naming conventions for local variable declarations. + This rule reports variable declarations which do not match the regex that applies to their + specific kind (e.g. local variable, or final local variable). Each regex can be configured through + properties. + + By default this rule uses the standard Apex naming convention (Camel case). + </description> + <priority>1</priority> + <example> +<![CDATA[ +public class Foo { + public Foo() { + Integer localVariable; // This is in camel case, so it's ok + + Integer LOCAL_VARIABLE; // This will be reported unless you change the regex + } +} +]]> + </example> + </rule> + <rule name="MethodNamingConventions" since="5.5.0" message="Method name does not begin with a lower case character." @@ -149,6 +248,30 @@ public class Foo { </example> </rule> + <rule name="MethodRegexNamingConventions" + since="6.15.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.apex.rule.codestyle.MethodRegexNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#methodregexnamingconventions"> + <description> + Configurable naming conventions for method declarations. This rule reports + method declarations which do not match the regex that applies to their + specific kind (e.g. static method, or test method). Each regex can be + configured through properties. + + By default this rule uses the standard Apex naming convention (Camel case). + </description> + <priority>1</priority> + <example> +<![CDATA[ +public class Foo { + public void instanceMethod() { } // This is in camel case, so it's ok + + public void INSTANCE_METHOD() { } // This will be reported unless you change the regex +]]> + </example> + </rule> + <rule name="OneDeclarationPerLine" since="6.7.0" message="Use one statement for each line, it enhances code readability." @@ -190,6 +313,31 @@ Integer b; </example> </rule> + <rule name="PropertyRegexNamingConventions" + since="6.15.0" + message="The {0} name ''{1}'' doesn''t match ''{2}''" + class="net.sourceforge.pmd.lang.apex.rule.codestyle.PropertyRegexNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#propertyregexnamingconventions"> + <description> + Configurable naming conventions for property declarations. This rule reports + property declarations which do not match the regex that applies to their + specific kind (e.g. static property, or instance property). Each regex can be + configured through properties. + + By default this rule uses the standard Apex naming convention (Camel case). + </description> + <priority>1</priority> + <example> +<![CDATA[ +public class Foo { + public Integer instanceProperty { get; set; } // This is in camel case, so it's ok + + public Integer INSTANCE_PROPERTY { get; set; } // This will be reported unless you change the regex +} +]]> + </example> + </rule> + <rule name="VariableNamingConventions" since="5.5.0" message="{0} variable {1} should begin with {2}" diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsTest.java new file mode 100644 index 0000000000..3eb7c0dd3a --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsTest.java @@ -0,0 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class ClassRegexNamingConventionsTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsTest.java new file mode 100644 index 0000000000..1cf95b7ad8 --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsTest.java @@ -0,0 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class FieldRegexNamingConventionsTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsTest.java new file mode 100644 index 0000000000..3ccf560db9 --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsTest.java @@ -0,0 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class FormalParameterRegexNamingConventionsTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsTest.java new file mode 100644 index 0000000000..641184d922 --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsTest.java @@ -0,0 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class LocalVariableRegexNamingConventionsTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsTest.java new file mode 100644 index 0000000000..5df2a60127 --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsTest.java @@ -0,0 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class MethodRegexNamingConventionsTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsTest.java new file mode 100644 index 0000000000..bd1e58fa92 --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsTest.java @@ -0,0 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.rule.codestyle; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class PropertyRegexNamingConventionsTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml new file mode 100644 index 0000000000..77cd196bab --- /dev/null +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + + <test-code> + <description>test class all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +@isTest +public class TestClass { } + ]]></code> + </test-code> + + <test-code> + <description>abstract class all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public abstract class AbstractClass { } + ]]></code> + </test-code> + + <test-code> + <description>class all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class FooClass { } + ]]></code> + </test-code> + + <test-code> + <description>interface all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public interface FooInterface { } + ]]></code> + </test-code> + + <test-code> + <description>enum all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public enum FooEnum { } +} + ]]></code> + </test-code> + + <test-code> + <description>test class default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The test class name 'TEST_CLASS' doesn't match '[a-zA-Z0-9]+'</message> + </expected-messages> + <code><![CDATA[ +@isTest +public class TEST_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>abstract class default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The abstract class name 'ABSTRACT_CLASS' doesn't match '[a-zA-Z0-9]+'</message> + </expected-messages> + <code><![CDATA[ +public abstract class ABSTRACT_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>class default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The class name 'FOO_CLASS' doesn't match '[a-zA-Z0-9]+'</message> + </expected-messages> + <code><![CDATA[ +public class FOO_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>interface default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The interface name 'FOO_INTERFACE' doesn't match '[a-zA-Z0-9]+'</message> + </expected-messages> + <code><![CDATA[ +public interface FOO_INTERFACE { } + ]]></code> + </test-code> + + <test-code> + <description>enum default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The enum name 'FOO_ENUM' doesn't match '[a-zA-Z0-9]+'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public enum FOO_ENUM { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom test class pattern</description> + <rule-property name="testClassPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +@isTest +public class TEST_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>custom abstract class pattern</description> + <rule-property name="abstractClassPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public abstract class ABSTRACT_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>custom class pattern</description> + <rule-property name="classPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class FOO_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>custom interface pattern</description> + <rule-property name="interfacePattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public interface FOO_INTERFACE { } + ]]></code> + </test-code> + +</test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml new file mode 100644 index 0000000000..53da854bbb --- /dev/null +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + + <test-code> + <description>all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + final static Integer constantField; + final Integer finalField; + static Integer staticField; + Integer instanceField; +} + ]]></code> + </test-code> + + <test-code> + <description>default is camel case</description> + <expected-problems>4</expected-problems> + <expected-messages> + <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + final static Integer CONSTANT_FIELD; + final Integer FINAL_FIELD; + static Integer STATIC_FIELD; + Integer INSTANCE_FIELD; +} + ]]></code> + </test-code> + + <test-code> + <description>ignores properties</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + Integer BAR { get; set; } +} + ]]></code> + </test-code> + + <test-code> + <description>custom constant pattern</description> + <rule-property name="constantPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>3</expected-problems> + <expected-messages> + <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + final static Integer CONSTANT_FIELD; + final Integer FINAL_FIELD; + static Integer STATIC_FIELD; + Integer INSTANCE_FIELD; +} + ]]></code> + </test-code> + + <test-code> + <description>custom final pattern</description> + <rule-property name="finalPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>3</expected-problems> + <expected-messages> + <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + final static Integer CONSTANT_FIELD; + final Integer FINAL_FIELD; + static Integer STATIC_FIELD; + Integer INSTANCE_FIELD; +} + ]]></code> + </test-code> + + <test-code> + <description>custom static pattern</description> + <rule-property name="staticPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>3</expected-problems> + <expected-messages> + <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + final static Integer CONSTANT_FIELD; + final Integer FINAL_FIELD; + static Integer STATIC_FIELD; + Integer INSTANCE_FIELD; +} + ]]></code> + </test-code> + + <test-code> + <description>custom instance pattern</description> + <rule-property name="instancePattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>3</expected-problems> + <expected-messages> + <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + final static Integer CONSTANT_FIELD; + final Integer FINAL_FIELD; + static Integer STATIC_FIELD; + Integer INSTANCE_FIELD; +} + ]]></code> + </test-code> + +</test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml new file mode 100644 index 0000000000..76366ad383 --- /dev/null +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + + <test-code> + <description>all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public Foo(final Integer finalMethodParameter, Integer methodParameter) { } +} + ]]></code> + </test-code> + + <test-code> + <description>default is camel case</description> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The final method parameter name 'FINAL_METHOD_PARAMETER' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The method parameter name 'METHOD_PARAMETER' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public Foo(final Integer FINAL_METHOD_PARAMETER, Integer METHOD_PARAMETER) { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom final method parameter pattern</description> + <rule-property name="finalMethodParameterPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The method parameter name 'METHOD_PARAMETER' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public Foo(final Integer FINAL_METHOD_PARAMETER, Integer METHOD_PARAMETER) { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom method parameter pattern</description> + <rule-property name="methodParameterPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The final method parameter name 'FINAL_METHOD_PARAMETER' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public Foo(final Integer FINAL_METHOD_PARAMETER, Integer METHOD_PARAMETER) { } +} + ]]></code> + </test-code> + +</test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/LocalVariableRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/LocalVariableRegexNamingConventions.xml new file mode 100644 index 0000000000..ff5098dfd2 --- /dev/null +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/LocalVariableRegexNamingConventions.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + + <test-code> + <description>all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public Foo() { + final Integer finalLocalVariable; + Integer localVariable; + } +} + ]]></code> + </test-code> + + <test-code> + <description>default is camel case</description> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The final local variable name 'FINAL_LOCAL_VARIABLE' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The local variable name 'LOCAL_VARIABLE' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public Foo() { + final Integer FINAL_LOCAL_VARIABLE; + Integer LOCAL_VARIABLE; + } +} + ]]></code> + </test-code> + + <test-code> + <description>custom final local pattern</description> + <rule-property name="finalLocalPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The local variable name 'LOCAL_VARIABLE' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public Foo() { + Integer LOCAL_VARIABLE; + final Integer FINAL_LOCAL_VARIABLE; + } +} + ]]></code> + </test-code> + + <test-code> + <description>custom local pattern</description> + <rule-property name="localPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The final local variable name 'FINAL_LOCAL_VARIABLE' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public Foo() { + Integer LOCAL_VARIABLE; + final Integer FINAL_LOCAL_VARIABLE; + } +} + ]]></code> + </test-code> + +</test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml new file mode 100644 index 0000000000..97569b1dd4 --- /dev/null +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + + <test-code> + <description>all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + @isTest + public static void testMethod() { } + public static void staticMethod() { } + public void instanceMethod() { } +} + ]]></code> + </test-code> + + <test-code> + <description>default is camel case</description> + <expected-problems>3</expected-problems> + <expected-messages> + <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + @isTest + public static void TEST_METHOD() { } + public static void STATIC_METHOD() { } + public void INSTANCE_METHOD() { } +} + ]]></code> + </test-code> + + <test-code> + <description>ignores overrides</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public override Integer BAR() { } +} + ]]></code> + </test-code> + + <test-code> + <description>ignores properties</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public Integer BAR { get; set; } +} + ]]></code> + </test-code> + + <test-code> + <description>ignores constructors</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class FOO { + public FOO() { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom test method pattern</description> + <rule-property name="testPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + @isTest + public static void TEST_METHOD() { } + public static void STATIC_METHOD() { } + public void INSTANCE_METHOD() { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom static method pattern</description> + <rule-property name="staticPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + @isTest + public static void TEST_METHOD() { } + public static void STATIC_METHOD() { } + public void INSTANCE_METHOD() { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom instance method pattern</description> + <rule-property name="instancePattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + @isTest + public static void TEST_METHOD() { } + public static void STATIC_METHOD() { } + public void INSTANCE_METHOD() { } +} + ]]></code> + </test-code> +</test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/PropertyRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/PropertyRegexNamingConventions.xml new file mode 100644 index 0000000000..4fdd885597 --- /dev/null +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/PropertyRegexNamingConventions.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + + <test-code> + <description>all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public static Integer staticProperty { get; set; } + public Integer instanceProperty { get; set; } +} + ]]></code> + </test-code> + + <test-code> + <description>default is camel case</description> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The static property name 'STATIC_PROPERTY' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance property name 'INSTANCE_PROPERTY' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public static Integer STATIC_PROPERTY { get; set; } + public Integer INSTANCE_PROPERTY { get; set; } +} + ]]></code> + </test-code> + + <test-code> + <description>ignores methods</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public void BAR() { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom static property pattern</description> + <rule-property name="staticPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The instance property name 'INSTANCE_PROPERTY' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public static Integer STATIC_PROPERTY { get; set; } + public Integer INSTANCE_PROPERTY { get; set; } +} + ]]></code> + </test-code> + + <test-code> + <description>custom instance property pattern</description> + <rule-property name="instancePattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The static property name 'STATIC_PROPERTY' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public static Integer STATIC_PROPERTY { get; set; } + public Integer INSTANCE_PROPERTY { get; set; } +} + ]]></code> + </test-code> + +</test-data> From 6d828833c0cf6d8131b8baf32416610dc90d986d Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 14:32:36 +0200 Subject: [PATCH 065/371] Added unit test for C++14 digit separators. --- .../net/sourceforge/pmd/cpd/CPPTokenizerTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java index 4bffb5208d..f6a8dc11fd 100644 --- a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java +++ b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java @@ -159,6 +159,18 @@ public class CPPTokenizerTest { tokenizer.tokenize(code, new Tokens()); } + @Test + public void testDigitSeparators() { + final String code = "auto integer_literal = 1'000'000;" + PMD.EOL + + "auto floating_point_literal = 0.000'015'3;" + PMD.EOL + + "auto hex_literal = 0x0F00'abcd'6f3d;" + PMD.EOL + + "auto silly_example = 1'0'0'000'00;"; + Tokens tokens = parse(code); + System.out.println(tokens.getTokens()); + assertTrue(TokenEntry.getEOF() != tokens.getTokens().get(0)); + assertEquals(21, tokens.size()); + } + private Tokens parse(String snippet) { try { return parse(snippet, false, new Tokens()); From af41fc4230f7b5540b84033ad683fe59c2b65b96 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 14:33:22 +0200 Subject: [PATCH 066/371] Added support for C++14 digit separators. --- pmd-cpp/etc/grammar/cpp.jj | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pmd-cpp/etc/grammar/cpp.jj b/pmd-cpp/etc/grammar/cpp.jj index a39effe982..ed44b6fcd8 100644 --- a/pmd-cpp/etc/grammar/cpp.jj +++ b/pmd-cpp/etc/grammar/cpp.jj @@ -284,27 +284,31 @@ TOKEN : TOKEN [IGNORE_CASE] : { - < OCTALINT : "0" (["0"-"7"])* > + < OCTALINT : "0" (["'", "0"-"7"])* > | < OCTALLONG : <OCTALINT> "l" > | < UNSIGNED_OCTALINT : <OCTALINT> "u" > | < UNSIGNED_OCTALLONG : <OCTALINT> ("ul" | "lu") > -| < DECIMALINT : ["1"-"9"] (["0"-"9"])* > +| < #DECIMALDIGIT : ["'", "0"-"9"] > + +| < DECIMALINT : ["1"-"9"] (<DECIMALDIGIT>)* > | < DECIMALLONG : <DECIMALINT> ["u","l"] > | < UNSIGNED_DECIMALINT : <DECIMALINT> "u" > | < UNSIGNED_DECIMALLONG : <DECIMALINT> ("ul" | "lu") > -| < HEXADECIMALINT : "0x" (["0"-"9","a"-"f"])+ > +| < HEXADECIMALINT : "0x" (<DECIMALDIGIT> | ["a"-"f"])+ > | < HEXADECIMALLONG : <HEXADECIMALINT> (["u","l"])? > | < UNSIGNED_HEXADECIMALINT : <HEXADECIMALINT> "u" > | < UNSIGNED_HEXADECIMALLONG : <HEXADECIMALINT> ("ul" | "lu") > -| < FLOATONE : ((["0"-"9"])+ "." (["0"-"9"])* | (["0"-"9"])* "." (["0"-"9"])+) - ("e" (["-","+"])? (["0"-"9"])+)? (["f","l"])? > +| < FLOATONE : (["0"-"9"](<DECIMALDIGIT>)* "." + | "." (<DECIMALDIGIT>)+ + | ["0"-"9"](<DECIMALDIGIT>)* "." (<DECIMALDIGIT>)+) + ("e" (["-","+"])? (<DECIMALDIGIT>)+)? (["f","l"])? > -| < FLOATTWO : (["0"-"9"])+ "e" (["-","+"])? (["0"-"9"])+ (["f","l"])? > +| < FLOATTWO : ["0"-"9"](<DECIMALDIGIT>)* "e" (["-","+"])? (<DECIMALDIGIT>)+ (["f","l"])? > } TOKEN : From b4821131ea4554eca97194f091661caadbd2e922 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 15:27:00 +0200 Subject: [PATCH 067/371] Added unit tests for C++ raw literals. There was already an existing unit test for issue #1559. This unit test broke with this change, because the code it's attempting to tokenize is now valid. This test was slightly modified to still give an error, and a new test was added to verify that the code is now correctly tokenized, even in a more difficult situation. --- .../sourceforge/pmd/cpd/CPPTokenizerTest.java | 25 +++++++++++++++++++ .../sourceforge/pmd/cpd/cpp/issue-1559.cpp | 2 +- .../sourceforge/pmd/cpd/cpp/issue-1784.cpp | 12 +++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1784.cpp diff --git a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java index 4bffb5208d..883716cb06 100644 --- a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java +++ b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java @@ -159,6 +159,31 @@ public class CPPTokenizerTest { tokenizer.tokenize(code, new Tokens()); } + @Test + public void testStringPrefixes() { + final String code = "char a = '\\x30'; // character, no semantics" + PMD.EOL + + "wchar_t b = L'\\xFFEF'; // wide character, no semantics" + PMD.EOL + + "char16_t c = u'\\u00F6'; // 16-bit, assumed UTF16?" + PMD.EOL + + "char32_t d = U'\\U0010FFFF'; // 32-bit, assumed UCS-4" + PMD.EOL + + "char A[] = \"Hello\\x0A\"; // byte string, \"narrow encoding\"" + PMD.EOL + + "wchar_t B[] = L\"Hell\\xF6\\x0A\"; // wide string, impl-def'd encoding" + PMD.EOL + + "char16_t C[] = u\"Hell\\u00F6\"; // (1)" + PMD.EOL + + "char32_t D[] = U\"Hell\\U000000F6\\U0010FFFF\"; // (2)" + PMD.EOL + + "auto E[] = u8\"\\u00F6\\U0010FFFF\"; // (3)"; + Tokens tokens = parse(code); + assertTrue(TokenEntry.getEOF() != tokens.getTokens().get(0)); + assertEquals(58, tokens.size()); + } + + @Test + public void testRawStringLiterals() throws IOException { + final String code = IOUtils.toString(CPPTokenizerTest.class.getResourceAsStream("cpp/issue-1784.cpp"), StandardCharsets.UTF_8); + Tokens tokens = parse(code); + System.out.println(tokens.getTokens()); + assertTrue(TokenEntry.getEOF() != tokens.getTokens().get(0)); + assertEquals(16, tokens.size()); + } + private Tokens parse(String snippet) { try { return parse(snippet, false, new Tokens()); diff --git a/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1559.cpp b/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1559.cpp index 010ec09fc6..a60ce005b5 100644 --- a/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1559.cpp +++ b/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1559.cpp @@ -4,7 +4,7 @@ namespace ABC { #ifdef USE_QT - const char* perPixelQml = R"QML( + const char* perPixelQml = "QML( )QML"; } } diff --git a/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1784.cpp b/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1784.cpp new file mode 100644 index 0000000000..29d644f449 --- /dev/null +++ b/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1784.cpp @@ -0,0 +1,12 @@ +namespace ABC +{ + namespace DEF + { + +#ifdef USE_QT + const char* perPixelQml = R"QML( + )NOTTHEND"; +)QML"; + } +} +#endif // USE_QT From 6bb83a71dda1199a1f3dea8e82c18d9fcff4a1c8 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 15:30:01 +0200 Subject: [PATCH 068/371] Added support for various C++ string prefixes. These were already tokenized without errors, but the prefixes were considered to be a separate token. --- pmd-cpp/etc/grammar/cpp.jj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pmd-cpp/etc/grammar/cpp.jj b/pmd-cpp/etc/grammar/cpp.jj index a39effe982..59eb1b51c6 100644 --- a/pmd-cpp/etc/grammar/cpp.jj +++ b/pmd-cpp/etc/grammar/cpp.jj @@ -312,7 +312,9 @@ TOKEN : < CHARACTER : ("L")? "'" ( ( ~["'","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] ) ) )* "'" > -| < STRING : ("L")? "\"" ( ( ~["\"","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] | "\n" | "\r\n" ) ) )* "\"" > +| < #STRPREF : (["L", "u", "U"] | "u8")? > +| < STRING : <STRPREF> + "\"" ( ( ~["\"","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] | "\n" | "\r\n" ) ) )* "\"" > | < RSTRING : "R\"(" ( ~[")"] | ( ")" ~["\""] ) )* ")\"" > } From d73a5505c27f0471b80d988fc57a68a9e5cee8a0 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 15:30:41 +0200 Subject: [PATCH 069/371] Added support for C++ raw string literals. --- pmd-cpp/etc/grammar/cpp.jj | 60 +++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/pmd-cpp/etc/grammar/cpp.jj b/pmd-cpp/etc/grammar/cpp.jj index 59eb1b51c6..c8344a270b 100644 --- a/pmd-cpp/etc/grammar/cpp.jj +++ b/pmd-cpp/etc/grammar/cpp.jj @@ -316,7 +316,65 @@ TOKEN : | < STRING : <STRPREF> "\"" ( ( ~["\"","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] | "\n" | "\r\n" ) ) )* "\"" > -| < RSTRING : "R\"(" ( ~[")"] | ( ")" ~["\""] ) )* ")\"" > +} + +// Raw C++11 string literal support +// https://en.cppreference.com/w/cpp/language/string_literal +TOKEN : +{ + < RSTRING : <STRPREF> "R\"" > + { + StringBuffer sb = new StringBuffer(16); + + // delim ------+ + // vvv + // Matching R"...(...)..." + // ^ + for (;;) { + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return; } + if (curChar == '(') break; + sb.append(curChar); + } + final String delim = sb.toString(); + + sb = new StringBuffer(256); +rstringbody: + // Matching R"...(...)..." + // ^ + for (;;) { + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return; } + sb.append(curChar); + if (curChar == ')') { + // delim --------------+ + // vvv + // Matching R"...(...)..." + // ^^^ + for (int i = 0; i < delim.length(); i++) { + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return; } + if (delim.charAt(i) != curChar) { + input_stream.backup(1); + continue rstringbody; + } + sb.append(curChar); + } + // Matching R"...(...)..." + // ^ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return; } + if (curChar != '"') { + input_stream.backup(1); + continue rstringbody; + } + sb.append(curChar); + break; + } + } + // Setting final token image + matchedToken.image += delim + "(" + sb.toString(); + } } TOKEN : From 224c3931e4e3c5f502332d2efe119ac2611cf606 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 16:10:03 +0200 Subject: [PATCH 070/371] Added unit tests for block comments. --- .../pmd/cpd/MatlabTokenizerTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java index 88f30ecf20..949e048eed 100644 --- a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java +++ b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java @@ -68,4 +68,22 @@ public class MatlabTokenizerTest extends AbstractTokenizerTest { TokenEntry.getEOF(); assertEquals(28, tokens.size()); } + + @Test + public void testBlockComments() throws IOException { + SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader("%{" + PMD.EOL + + " Name: helloworld.m\n" + PMD.EOL + + " Purpose: Say \"Hello World!\" in two different ways" + PMD.EOL + + "%}" + PMD.EOL + + PMD.EOL + + "% Do it the good ol' fashioned way...command window" + PMD.EOL + + "disp('Hello World!');\n" + PMD.EOL + + "%" + PMD.EOL + + "% Do it the new hip GUI way...with a message box" + PMD.EOL + + "msgbox('Hello World!','Hello World!');")); + Tokens tokens = new Tokens(); + tokenizer.tokenize(sourceCode, tokens); // should not result in parse error + TokenEntry.getEOF(); + assertEquals(13, tokens.size()); + } } From ecda36fa70c7da97a18946389845b4da17d30c0f Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 16:11:46 +0200 Subject: [PATCH 071/371] Adjusted Matlab tokenizer to correctly identify block comments. --- pmd-matlab/etc/grammar/matlab.jj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-matlab/etc/grammar/matlab.jj b/pmd-matlab/etc/grammar/matlab.jj index ae971c0cff..c91105d282 100644 --- a/pmd-matlab/etc/grammar/matlab.jj +++ b/pmd-matlab/etc/grammar/matlab.jj @@ -45,7 +45,7 @@ PARSER_END(MatlabParser) { "%{": IN_COMMENT } <DEFAULT, TRANSPOSE> SPECIAL_TOKEN: -{ <SINGLE_LINE_COMMENT: "%"(~["\n","\r"])* ("\n"|"\r"|"\r\n")?> } +{ <SINGLE_LINE_COMMENT: "%"~["{"](~["\n","\r"])* ("\n"|"\r"|"\r\n")?> } <IN_COMMENT> SPECIAL_TOKEN: { <MULTI_LINE_COMMENT: "%}">: DEFAULT } From f76ac0aa8970f8837955e1e8f43026f5199b23fa Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 16:27:37 +0200 Subject: [PATCH 072/371] Added unit test for question mark (?) token in Matlab tokenizer. --- .../net/sourceforge/pmd/cpd/MatlabTokenizerTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java index 50fdb1832e..6f10aa814d 100644 --- a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java +++ b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java @@ -54,4 +54,14 @@ public class MatlabTokenizerTest extends AbstractTokenizerTest { TokenEntry.getEOF(); assertEquals(2, tokens.size()); // 2 tokens: "end" + EOF } + + @Test + public void testQuestionMark() throws IOException { + SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader("classdef Class1" + PMD.EOL + + "properties (SetAccess = ?Class2)")); + Tokens tokens = new Tokens(); + tokenizer.tokenize(sourceCode, tokens); + TokenEntry.getEOF(); + assertEquals(10, tokens.size()); + } } From 4ec25840bb33ef1ae3362617eca6d90416260000 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 16:28:08 +0200 Subject: [PATCH 073/371] Added support for question mark (?) token in Matlab tokenizer. --- pmd-matlab/etc/grammar/matlab.jj | 1 + 1 file changed, 1 insertion(+) diff --git a/pmd-matlab/etc/grammar/matlab.jj b/pmd-matlab/etc/grammar/matlab.jj index 6f61dd0d42..0e1029a203 100644 --- a/pmd-matlab/etc/grammar/matlab.jj +++ b/pmd-matlab/etc/grammar/matlab.jj @@ -65,6 +65,7 @@ SPECIAL_TOKEN: | < AT: "@" > : DEFAULT | < DOT: "." > : TRANSPOSE | < COMMA: "," > : DEFAULT +| < QUESTIONMARK: "?" > : DEFAULT } <DEFAULT, TRANSPOSE> TOKEN : /* OPERATORS AND ASSIGNMENTS */ From 1c1c2d87f75fcc804b16afa0e72257b2f58b8f36 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 17:16:17 +0200 Subject: [PATCH 074/371] Added unit test for double-quoted string in Matlab. --- .../net/sourceforge/pmd/cpd/MatlabTokenizerTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java index 50fdb1832e..128fced6b3 100644 --- a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java +++ b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java @@ -54,4 +54,14 @@ public class MatlabTokenizerTest extends AbstractTokenizerTest { TokenEntry.getEOF(); assertEquals(2, tokens.size()); // 2 tokens: "end" + EOF } + + @Test + public void testDoubleQuotedStrings() throws IOException { + SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader( + "error(\"This is a double-quoted string\");")); + Tokens tokens = new Tokens(); + tokenizer.tokenize(sourceCode, tokens); + TokenEntry.getEOF(); + assertEquals(6, tokens.size()); + } } From a3b09910fdd976346d5b13838c7428ca34fb82a6 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 10 May 2019 17:16:47 +0200 Subject: [PATCH 075/371] Added support for double-quoted string to Matlab tokenizer. --- pmd-matlab/etc/grammar/matlab.jj | 1 + 1 file changed, 1 insertion(+) diff --git a/pmd-matlab/etc/grammar/matlab.jj b/pmd-matlab/etc/grammar/matlab.jj index 6f61dd0d42..2176abc41b 100644 --- a/pmd-matlab/etc/grammar/matlab.jj +++ b/pmd-matlab/etc/grammar/matlab.jj @@ -139,6 +139,7 @@ SPECIAL_TOKEN: <DEFAULT> TOKEN : { < STRING: "'" ( <ESC_SEQ> | "'" "'" | ~["\\","'","\n"] )* "'" > +| < DSTRING: "\"" ( "\\" | "\"" "\"" | ~["\\","\"","\n"] )* "\"" > | < #ESC_SEQ: "\\" ( "b" | "t" | "n" | "f" | "r" | "\"" | "'" | "\\" ) | <UNICODE_ESC> From 000e32b2ee8769a81c2900a2f33afa2b6cab4d2e Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Fri, 10 May 2019 12:16:30 -0400 Subject: [PATCH 076/371] Fix NPE on custom exceptions --- .../FormalParameterRegexNamingConventionsRule.java | 5 +++++ .../xml/FormalParameterRegexNamingConventions.xml | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java index 8b0392cd92..b5f3511194 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java @@ -31,6 +31,11 @@ public class FormalParameterRegexNamingConventionsRule extends AbstractRegexNami @Override public Object visit(ASTParameter node, Object data) { + // classes that extend Exception will contains methods that have parameters with null names + if (node.getImage() == null) { + return data; + } + if (node.getModifiers().isFinal()) { checkMatches(FINAL_METHOD_PARAMETER_REGEX, node, data); } else { diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml index 76366ad383..7cc3fc943d 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml @@ -57,4 +57,12 @@ public class Foo { ]]></code> </test-code> + <test-code> + <description>ignores null parameter names</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public with sharing class MyException extends Exception { } + ]]></code> + </test-code> + </test-data> From 6cf64949d1d5ac1faa2a9959105bfebb947d9874 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Fri, 10 May 2019 14:00:41 -0400 Subject: [PATCH 077/371] Ignore autogenerated enum methods --- .../codestyle/MethodRegexNamingConventionsRule.java | 5 +++++ .../codestyle/xml/MethodRegexNamingConventions.xml | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java index 0f062d8a60..a65e73ffcf 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java @@ -10,6 +10,7 @@ import java.util.regex.Pattern; import net.sourceforge.pmd.lang.apex.ast.ASTMethod; import net.sourceforge.pmd.lang.apex.ast.ASTProperty; +import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum; import net.sourceforge.pmd.properties.PropertyDescriptor; public class MethodRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { @@ -44,6 +45,10 @@ public class MethodRegexNamingConventionsRule extends AbstractRegexNamingConvent return data; } + if (node.getFirstParentOfType(ASTUserEnum.class) != null) { + return data; + } + if (node.getModifiers().isTest()) { checkMatches(TEST_REGEX, node, data); } else if (node.getModifiers().isStatic()) { diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml index 97569b1dd4..7d87d71fdc 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml @@ -66,6 +66,18 @@ public class FOO { ]]></code> </test-code> + <test-code> + <description>ignores enum methods</description> + <rule-property name="instancePattern">Z</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + enum Bar { + } +} + ]]></code> + </test-code> + <test-code> <description>custom test method pattern</description> <rule-property name="testPattern">[a-zA-Z0-9_]+</rule-property> From 48617ee51c746e5b50bd0eb635a84b316dc04fe6 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Fri, 10 May 2019 16:07:23 -0400 Subject: [PATCH 078/371] Add enumConstantPattern to FieldRegexNamingConventionsRule --- .../FieldRegexNamingConventionsRule.java | 9 +++- .../xml/FieldRegexNamingConventions.xml | 49 +++++++++++++++---- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java index d69389fdf5..29df42b1cd 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java @@ -11,6 +11,7 @@ import java.util.regex.Pattern; import net.sourceforge.pmd.lang.apex.ast.ASTField; import net.sourceforge.pmd.lang.apex.ast.ASTModifierNode; import net.sourceforge.pmd.lang.apex.ast.ASTProperty; +import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum; import net.sourceforge.pmd.properties.PropertyDescriptor; public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { @@ -18,6 +19,9 @@ public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventi private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; + private static final PropertyDescriptor<Pattern> ENUM_CONSTANT_REGEX = prop("enumConstantPattern", "enum constant field", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue("[A-Z][A-Z0-9_]*").build(); + private static final PropertyDescriptor<Pattern> CONSTANT_REGEX = prop("constantPattern", "constant field", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); @@ -31,6 +35,7 @@ public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventi DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); public FieldRegexNamingConventionsRule() { + definePropertyDescriptor(ENUM_CONSTANT_REGEX); definePropertyDescriptor(CONSTANT_REGEX); definePropertyDescriptor(FINAL_REGEX); definePropertyDescriptor(STATIC_REGEX); @@ -47,7 +52,9 @@ public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventi ASTModifierNode modifiers = node.getModifiers(); - if (modifiers.isFinal() && modifiers.isStatic()) { + if (node.getFirstParentOfType(ASTUserEnum.class) != null) { + checkMatches(ENUM_CONSTANT_REGEX, node, data); + } else if (modifiers.isFinal() && modifiers.isStatic()) { checkMatches(CONSTANT_REGEX, node, data); } else if (modifiers.isFinal()) { checkMatches(FINAL_REGEX, node, data); diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml index 53da854bbb..9577096b1a 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml @@ -14,25 +14,43 @@ public class Foo { final Integer finalField; static Integer staticField; Integer instanceField; + enum FooEnum { + DEFAULT + } } ]]></code> </test-code> <test-code> - <description>default is camel case</description> - <expected-problems>4</expected-problems> - <expected-messages> - <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ + <description>default is camel case</description> + <expected-problems>4</expected-problems> + <expected-messages> + <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ public class Foo { final static Integer CONSTANT_FIELD; final Integer FINAL_FIELD; static Integer STATIC_FIELD; Integer INSTANCE_FIELD; +} + ]]></code> +</test-code> + + <test-code> + <description>enum default is all caps and underscores</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The enum constant field name 'default' doesn't match '[A-Z][A-Z0-9_]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + enum FooEnum { + default + } } ]]></code> </test-code> @@ -47,6 +65,19 @@ public class Foo { ]]></code> </test-code> + <test-code> + <description>custom enum constant pattern</description> + <rule-property name="enumConstantPattern">[a-zA-Z0-9]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + enum FooEnum { + default + } +} + ]]></code> + </test-code> + <test-code> <description>custom constant pattern</description> <rule-property name="constantPattern">[a-zA-Z0-9_]+</rule-property> From 4bcdfba3530dd950ffbe43ad29713cecab9e1b75 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Fri, 10 May 2019 16:10:34 -0400 Subject: [PATCH 079/371] Class defaults should be pascal case --- .../codestyle/ClassRegexNamingConventionsRule.java | 12 ++++++------ .../codestyle/xml/ClassRegexNamingConventions.xml | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java index 6795fd99d7..0a4021c2fe 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java @@ -16,22 +16,22 @@ import net.sourceforge.pmd.properties.PropertyDescriptor; public class ClassRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - private static final String TITLE_CASE = "[a-zA-Z0-9]+"; + private static final String PASCAL_CASE = "[A-Z][a-zA-Z0-9]*"; private static final PropertyDescriptor<Pattern> TEST_CLASS_REGEX = prop("testClassPattern", "test class", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); private static final PropertyDescriptor<Pattern> ABSTRACT_CLASS_REGEX = prop("abstractClassPattern", "abstract class", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); private static final PropertyDescriptor<Pattern> CLASS_REGEX = prop("classPattern", "class", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); private static final PropertyDescriptor<Pattern> INTERFACE_REGEX = prop("interfacePattern", "interface", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); private static final PropertyDescriptor<Pattern> ENUM_REGEX = prop("enumPattern", "enum", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(TITLE_CASE).build(); + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); public ClassRegexNamingConventionsRule() { definePropertyDescriptor(TEST_CLASS_REGEX); diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml index 77cd196bab..fc36f4c71c 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml @@ -52,7 +52,7 @@ public class Foo { <description>test class default is title case</description> <expected-problems>1</expected-problems> <expected-messages> - <message>The test class name 'TEST_CLASS' doesn't match '[a-zA-Z0-9]+'</message> + <message>The test class name 'TEST_CLASS' doesn't match '[A-Z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ @isTest @@ -64,7 +64,7 @@ public class TEST_CLASS { } <description>abstract class default is title case</description> <expected-problems>1</expected-problems> <expected-messages> - <message>The abstract class name 'ABSTRACT_CLASS' doesn't match '[a-zA-Z0-9]+'</message> + <message>The abstract class name 'ABSTRACT_CLASS' doesn't match '[A-Z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ public abstract class ABSTRACT_CLASS { } @@ -75,7 +75,7 @@ public abstract class ABSTRACT_CLASS { } <description>class default is title case</description> <expected-problems>1</expected-problems> <expected-messages> - <message>The class name 'FOO_CLASS' doesn't match '[a-zA-Z0-9]+'</message> + <message>The class name 'FOO_CLASS' doesn't match '[A-Z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ public class FOO_CLASS { } @@ -86,7 +86,7 @@ public class FOO_CLASS { } <description>interface default is title case</description> <expected-problems>1</expected-problems> <expected-messages> - <message>The interface name 'FOO_INTERFACE' doesn't match '[a-zA-Z0-9]+'</message> + <message>The interface name 'FOO_INTERFACE' doesn't match '[A-Z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ public interface FOO_INTERFACE { } @@ -97,7 +97,7 @@ public interface FOO_INTERFACE { } <description>enum default is title case</description> <expected-problems>1</expected-problems> <expected-messages> - <message>The enum name 'FOO_ENUM' doesn't match '[a-zA-Z0-9]+'</message> + <message>The enum name 'FOO_ENUM' doesn't match '[A-Z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ public class Foo { From c96d879a5a03973f5f46b85cf917a66315d04413 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Fri, 10 May 2019 16:27:31 -0400 Subject: [PATCH 080/371] Move constants to AbstractRegexNamingConventionsRule --- .../rule/codestyle/AbstractRegexNamingConventionsRule.java | 3 +++ .../apex/rule/codestyle/ClassRegexNamingConventionsRule.java | 2 -- .../apex/rule/codestyle/FieldRegexNamingConventionsRule.java | 2 -- .../codestyle/FormalParameterRegexNamingConventionsRule.java | 2 -- .../codestyle/LocalVariableRegexNamingConventionsRule.java | 2 -- .../apex/rule/codestyle/MethodRegexNamingConventionsRule.java | 2 -- .../rule/codestyle/PropertyRegexNamingConventionsRule.java | 2 -- 7 files changed, 3 insertions(+), 12 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java index 1aae91a0e6..f328c67117 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java @@ -15,6 +15,9 @@ import net.sourceforge.pmd.properties.PropertyBuilder; import net.sourceforge.pmd.properties.PropertyDescriptor; public abstract class AbstractRegexNamingConventionsRule extends AbstractApexRule { + protected static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; + protected static final String PASCAL_CASE = "[A-Z][a-zA-Z0-9]*"; + abstract String displayName(String name); protected void checkMatches(PropertyDescriptor<Pattern> propertyDescriptor, ApexNode<?> node, Object data) { diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java index 0a4021c2fe..2876be3685 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java @@ -16,8 +16,6 @@ import net.sourceforge.pmd.properties.PropertyDescriptor; public class ClassRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - private static final String PASCAL_CASE = "[A-Z][a-zA-Z0-9]*"; - private static final PropertyDescriptor<Pattern> TEST_CLASS_REGEX = prop("testClassPattern", "test class", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java index 29df42b1cd..5e9a8ce3aa 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java @@ -17,8 +17,6 @@ import net.sourceforge.pmd.properties.PropertyDescriptor; public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; - private static final PropertyDescriptor<Pattern> ENUM_CONSTANT_REGEX = prop("enumConstantPattern", "enum constant field", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue("[A-Z][A-Z0-9_]*").build(); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java index b5f3511194..a5246d8573 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java @@ -14,8 +14,6 @@ import net.sourceforge.pmd.properties.PropertyDescriptor; public class FormalParameterRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; - private static final PropertyDescriptor<Pattern> FINAL_METHOD_PARAMETER_REGEX = prop("finalMethodParameterPattern", "final method parameter", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java index f38a175451..b40fa26be9 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java @@ -15,8 +15,6 @@ import net.sourceforge.pmd.properties.PropertyDescriptor; public class LocalVariableRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; - private static final PropertyDescriptor<Pattern> FINAL_REGEX = prop("finalLocalPattern", "final local variable", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java index a65e73ffcf..85dec6772d 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java @@ -16,8 +16,6 @@ import net.sourceforge.pmd.properties.PropertyDescriptor; public class MethodRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; - private static final PropertyDescriptor<Pattern> TEST_REGEX = prop("testPattern", "test method", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java index db4a80394f..23898d22ef 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java @@ -15,8 +15,6 @@ import net.sourceforge.pmd.properties.PropertyDescriptor; public class PropertyRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - private static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; - private static final PropertyDescriptor<Pattern> STATIC_REGEX = prop("staticPattern", "static property", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); From 15d499ba3325ea7e9c4d5216736bb80bc4ad274f Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 11 May 2019 12:00:07 +0200 Subject: [PATCH 081/371] Update release notes, refs #1807 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..a27cf0ee45 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -20,5 +20,7 @@ This is a {{ site.pmd.release_type }} release. ### External Contributions +* [#1807](https://github.com/pmd/pmd/pull/1807): \[ci] Fix missing local branch issues when executing pmd-regression-tester - [BBG](https://github.com/djydewang) + {% endtocmaker %} From 0c28170a85dd8b4ff62af222346e0673fbb55f6e Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 11 May 2019 12:11:25 +0200 Subject: [PATCH 082/371] [doc] Update generated documentation --- docs/pages/pmd/rules/apex.md | 2 +- docs/pages/pmd/rules/apex/bestpractices.md | 60 ++--------- docs/pages/pmd/rules/apex/codestyle.md | 59 +---------- docs/pages/pmd/rules/apex/design.md | 68 +++---------- docs/pages/pmd/rules/apex/documentation.md | 10 +- docs/pages/pmd/rules/apex/errorprone.md | 90 ++--------------- docs/pages/pmd/rules/apex/performance.md | 30 +----- docs/pages/pmd/rules/apex/security.md | 110 +++------------------ docs/pages/pmd/rules/java/design.md | 2 +- 9 files changed, 50 insertions(+), 381 deletions(-) diff --git a/docs/pages/pmd/rules/apex.md b/docs/pages/pmd/rules/apex.md index dec0347f36..f58e1edb33 100644 --- a/docs/pages/pmd/rules/apex.md +++ b/docs/pages/pmd/rules/apex.md @@ -116,7 +116,7 @@ folder: pmd/rules [AvoidDeeplyNestedIfStmts](pmd_rules_apex_design.html#avoiddeeplynestedifstmts), [ExcessiveClassLength](pmd_rules_apex_design.html#excessiveclasslength), [ExcessiveParameterList](pmd_rules_apex_design.html#excessiveparameterlist), [ExcessivePublicCount](pmd_rules_apex_design.html#excessivepubliccount), [NcssConstructorCount](pmd_rules_apex_design.html#ncssconstructorcount), [NcssMethodCount](pmd_rules_apex_design.html#ncssmethodcount), [NcssTypeCount](pmd_rules_apex_design.html#ncsstypecount), [StdCyclomaticComplexity](pmd_rules_apex_design.html#stdcyclomaticcomplexity), [TooManyFields](pmd_rules_apex_design.html#toomanyfields) -* Default ruleset used by the CodeClimate Engine for Salesforce.com Apex (`rulesets/apex/ruleset.xml`): +* Default ruleset for Salesforce.com Apex (`rulesets/apex/ruleset.xml`): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility. diff --git a/docs/pages/pmd/rules/apex/bestpractices.md b/docs/pages/pmd/rules/apex/bestpractices.md index 4acf3f478d..e130002d00 100644 --- a/docs/pages/pmd/rules/apex/bestpractices.md +++ b/docs/pages/pmd/rules/apex/bestpractices.md @@ -36,15 +36,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Bug Risk|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/bestpractices.xml/ApexAssertionsShouldIncludeMessage" /> ``` @@ -74,15 +66,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Bug Risk|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/bestpractices.xml/ApexUnitTestClassShouldHaveAsserts" /> ``` @@ -119,15 +103,7 @@ private class ATest { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Bug Risk|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/bestpractices.xml/ApexUnitTestMethodShouldHaveIsTestAnnotation" /> ``` @@ -156,15 +132,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Bug Risk|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/bestpractices.xml/ApexUnitTestShouldNotUseSeeAllDataTrue" /> ``` @@ -190,15 +158,7 @@ global class Unchangeable { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/bestpractices.xml/AvoidGlobalModifier" /> ``` @@ -234,15 +194,7 @@ trigger Accounts on Account (before insert, before update, before delete, after } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|200|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/bestpractices.xml/AvoidLogicInTrigger" /> ``` diff --git a/docs/pages/pmd/rules/apex/codestyle.md b/docs/pages/pmd/rules/apex/codestyle.md index 7f8f72b1a5..f70bfb0b78 100644 --- a/docs/pages/pmd/rules/apex/codestyle.md +++ b/docs/pages/pmd/rules/apex/codestyle.md @@ -25,15 +25,7 @@ Class names should always begin with an upper case character. public class Foo {} ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|5|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/codestyle.xml/ClassNamingConventions" /> ``` @@ -66,15 +58,7 @@ for (int i = 0; i < 42; i++) { // preferred approach } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/codestyle.xml/ForLoopsMustUseBraces" /> ``` @@ -109,15 +93,7 @@ else x = x-1; ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/codestyle.xml/IfElseStmtsMustUseBraces" /> ``` @@ -148,15 +124,7 @@ if (foo) { // preferred approach } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/codestyle.xml/IfStmtsMustUseBraces" /> ``` @@ -184,9 +152,6 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| |skipTestMethodUnderscores|false|Skip underscores in test methods|no| **Use this rule with the default properties by just referencing it:** @@ -239,9 +204,6 @@ Integer b; |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| |strictMode|false|If true, mark combined declaration even if the declarations are on separate lines.|no| **Use this rule with the default properties by just referencing it:** @@ -284,9 +246,6 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|5|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| |checkMembers|true|Check member variables|no| |checkLocals|true|Check local variables|no| |checkParameters|true|Check constructor and method parameter variables|no| @@ -349,15 +308,7 @@ while (true) { // preferred approach } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/codestyle.xml/WhileLoopsMustUseBraces" /> ``` diff --git a/docs/pages/pmd/rules/apex/design.md b/docs/pages/pmd/rules/apex/design.md index b7043622cf..df269d18cb 100644 --- a/docs/pages/pmd/rules/apex/design.md +++ b/docs/pages/pmd/rules/apex/design.md @@ -39,9 +39,6 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|200|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| |problemDepth|3|The if statement depth reporting threshold|no| **Use this rule with the default properties by just referencing it:** @@ -73,7 +70,7 @@ program. As such, they include all control flow statements, such as 'if', 'while Generally, numbers ranging from 1-4 denote low complexity, 5-7 denote moderate complexity, 8-10 denote high complexity, and 11+ is very high complexity. By default, this rule reports methods with a complexity >= 10. -Additionnally, classes with many methods of moderate complexity get reported as well once the total of their +Additionally, classes with many methods of moderate complexity get reported as well once the total of their methods' complexities reaches 40, even if none of the methods was directly reported. Reported methods should be broken down into several smaller methods. Reported classes should probably be broken down @@ -113,9 +110,6 @@ public class Complicated { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| |classReportLevel|40|Total class complexity reporting threshold|no| |methodReportLevel|10|Cyclomatic complexity reporting threshold|no| @@ -169,12 +163,7 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|topscore||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Top score value|no| -|minimum|1000.0|Minimum reporting threshold|no| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|150|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| -|sigma||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Sigma value|no| +|minimum|1000|Threshold above which a node is reported|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -185,7 +174,7 @@ public class Foo { ``` xml <rule ref="category/apex/design.xml/ExcessiveClassLength"> <properties> - <property name="minimum" value="1000.0" /> + <property name="minimum" value="1000" /> </properties> </rule> ``` @@ -218,12 +207,7 @@ public void addPerson(Date birthdate, BodyMeasurements measurements, int ssn) { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|topscore||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Top score value|no| -|minimum|4.0|Minimum reporting threshold|no| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|50|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| -|sigma||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Sigma value|no| +|minimum|4|Threshold above which a node is reported|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -234,7 +218,7 @@ public void addPerson(Date birthdate, BodyMeasurements measurements, int ssn) { ``` xml <rule ref="category/apex/design.xml/ExcessiveParameterList"> <properties> - <property name="minimum" value="4.0" /> + <property name="minimum" value="4" /> </properties> </rule> ``` @@ -272,12 +256,7 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|topscore||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Top score value|no| -|minimum|20.0|Minimum reporting threshold|no| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|150|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| -|sigma||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Sigma value|no| +|minimum|20|Threshold above which a node is reported|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -288,7 +267,7 @@ public class Foo { ``` xml <rule ref="category/apex/design.xml/ExcessivePublicCount"> <properties> - <property name="minimum" value="20.0" /> + <property name="minimum" value="20" /> </properties> </rule> ``` @@ -325,12 +304,7 @@ public class Foo extends Bar { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|topscore||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Top score value|no| -|minimum|20.0|Minimum reporting threshold|no| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|50|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| -|sigma||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Sigma value|no| +|minimum|20|Threshold above which a node is reported|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -341,7 +315,7 @@ public class Foo extends Bar { ``` xml <rule ref="category/apex/design.xml/NcssConstructorCount"> <properties> - <property name="minimum" value="20.0" /> + <property name="minimum" value="20" /> </properties> </rule> ``` @@ -377,12 +351,7 @@ public class Foo extends Bar { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|topscore||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Top score value|no| -|minimum|40.0|Minimum reporting threshold|no| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|50|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| -|sigma||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Sigma value|no| +|minimum|40|Threshold above which a node is reported|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -393,7 +362,7 @@ public class Foo extends Bar { ``` xml <rule ref="category/apex/design.xml/NcssMethodCount"> <properties> - <property name="minimum" value="40.0" /> + <property name="minimum" value="40" /> </properties> </rule> ``` @@ -431,12 +400,7 @@ public class Foo extends Bar { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|topscore||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Top score value|no| -|minimum|500.0|Minimum reporting threshold|no| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|250|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| -|sigma||<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Sigma value|no| +|minimum|500|Threshold above which a node is reported|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -447,7 +411,7 @@ public class Foo extends Bar { ``` xml <rule ref="category/apex/design.xml/NcssTypeCount"> <properties> - <property name="minimum" value="500.0" /> + <property name="minimum" value="500" /> </properties> </rule> ``` @@ -510,9 +474,6 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|250|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| |reportLevel|10|Cyclomatic Complexity reporting threshold|no| |showClassesComplexity|true|Add class average violations to the report|no| |showMethodsComplexity|true|Add method average violations to the report|no| @@ -568,9 +529,6 @@ public class Person { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|cc\_categories|Complexity|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|200|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| |maxfields|15|Max allowable fields|no| **Use this rule with the default properties by just referencing it:** diff --git a/docs/pages/pmd/rules/apex/documentation.md b/docs/pages/pmd/rules/apex/documentation.md index 20a24496e8..05ef2de323 100644 --- a/docs/pages/pmd/rules/apex/documentation.md +++ b/docs/pages/pmd/rules/apex/documentation.md @@ -44,15 +44,7 @@ public class HelloWorld { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/documentation.xml/ApexDoc" /> ``` diff --git a/docs/pages/pmd/rules/apex/errorprone.md b/docs/pages/pmd/rules/apex/errorprone.md index 2e1c5ae832..cbea6d10d6 100644 --- a/docs/pages/pmd/rules/apex/errorprone.md +++ b/docs/pages/pmd/rules/apex/errorprone.md @@ -34,15 +34,7 @@ trigger AccountTrigger on Account (before insert, before update) { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/AvoidDirectAccessTriggerMap" /> ``` @@ -74,15 +66,7 @@ public without sharing class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/AvoidHardcodingId" /> ``` @@ -110,15 +94,7 @@ A full list of supported annotations can be found at https://developer.salesforc } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/AvoidNonExistentAnnotations" /> ``` @@ -151,15 +127,7 @@ public void doSomething() { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/EmptyCatchBlock" /> ``` @@ -190,15 +158,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/EmptyIfStmt" /> ``` @@ -231,15 +191,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/EmptyStatementBlock" /> ``` @@ -281,15 +233,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/EmptyTryOrFinallyBlock" /> ``` @@ -319,15 +263,7 @@ public void bar(Integer a, Integer b) { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/EmptyWhileStmt" /> ``` @@ -353,15 +289,7 @@ public class MyClass { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|50|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/errorprone.xml/MethodWithSameNameAsEnclosingClass" /> ``` diff --git a/docs/pages/pmd/rules/apex/performance.md b/docs/pages/pmd/rules/apex/performance.md index d092b7820f..7428d0d5a4 100644 --- a/docs/pages/pmd/rules/apex/performance.md +++ b/docs/pages/pmd/rules/apex/performance.md @@ -33,15 +33,7 @@ public class Something { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Performance|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|150|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/performance.xml/AvoidDmlStatementsInLoops" /> ``` @@ -68,15 +60,7 @@ public class Something { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Performance|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|150|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/performance.xml/AvoidSoqlInLoops" /> ``` @@ -103,15 +87,7 @@ public class Something { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Performance|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|150|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/performance.xml/AvoidSoslInLoops" /> ``` diff --git a/docs/pages/pmd/rules/apex/security.md b/docs/pages/pmd/rules/apex/security.md index e77159bddb..e7391c0b25 100644 --- a/docs/pages/pmd/rules/apex/security.md +++ b/docs/pages/pmd/rules/apex/security.md @@ -31,15 +31,7 @@ public without sharing class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexBadCrypto" /> ``` @@ -75,15 +67,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexCRUDViolation" /> ``` @@ -113,15 +97,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexCSRF" /> ``` @@ -153,15 +129,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexDangerousMethods" /> ``` @@ -188,15 +156,7 @@ public without sharing class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexInsecureEndpoint" /> ``` @@ -223,15 +183,7 @@ public without sharing class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexOpenRedirect" /> ``` @@ -255,15 +207,7 @@ public without sharing class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexSharingViolations" /> ``` @@ -288,15 +232,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexSOQLInjection" /> ``` @@ -335,15 +271,7 @@ public class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexSuggestUsingNamedCred" /> ``` @@ -368,15 +296,7 @@ public without sharing class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|100|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexXSSFromEscapeFalse" /> ``` @@ -401,15 +321,7 @@ public without sharing class Foo { } ``` -**This rule has the following properties:** - -|Name|Default Value|Description|Multivalued| -|----|-------------|-----------|-----------| -|cc\_categories|Security|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| -|cc\_remediation\_points\_multiplier|50|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| -|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| - -**Use this rule with the default properties by just referencing it:** +**Use this rule by referencing it:** ``` xml <rule ref="category/apex/security.xml/ApexXSSFromURLParam" /> ``` diff --git a/docs/pages/pmd/rules/java/design.md b/docs/pages/pmd/rules/java/design.md index b0647c24cd..b8324a695c 100644 --- a/docs/pages/pmd/rules/java/design.md +++ b/docs/pages/pmd/rules/java/design.md @@ -464,7 +464,7 @@ details on the calculation, see the documentation of the [Cyclo metric](pmd_java Generally, numbers ranging from 1-4 denote low complexity, 5-7 denote moderate complexity, 8-10 denote high complexity, and 11+ is very high complexity. By default, this rule reports methods with a complexity >= 10. -Additionnally, classes with many methods of moderate complexity get reported as well once the total of their +Additionally, classes with many methods of moderate complexity get reported as well once the total of their methods' complexities reaches 80, even if none of the methods was directly reported. Reported methods should be broken down into several smaller methods. Reported classes should probably be broken down From 76af31dcab807699277ff8fa0f80742d42104bb1 Mon Sep 17 00:00:00 2001 From: "Venkatachalam, Srinivasan" <srvenkatachalam@paypal.com> Date: Sun, 12 May 2019 12:23:50 +0530 Subject: [PATCH 083/371] [java] UnsynchronizedStaticFormatter documentation and implementation wrong #1814 - Fixed --- docs/pages/pmd/rules/java/multithreading.md | 4 ++-- .../UnsynchronizedStaticFormatterRule.java | 2 +- .../xml/UnsynchronizedStaticDateFormatter.xml | 22 +++++++++++++++---- .../xml/UnsynchronizedStaticFormatter.xml | 19 ++++++++++++++-- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/docs/pages/pmd/rules/java/multithreading.md b/docs/pages/pmd/rules/java/multithreading.md index 43373006ee..256bb3e149 100644 --- a/docs/pages/pmd/rules/java/multithreading.md +++ b/docs/pages/pmd/rules/java/multithreading.md @@ -307,7 +307,7 @@ public class Foo { void bar() { sdf.format(); // poor, no thread-safety } - synchronized void foo() { + static synchronized void foo() { sdf.format(); // preferred } } @@ -339,7 +339,7 @@ public class Foo { void bar() { sdf.format(); // poor, no thread-safety } - synchronized void foo() { + static synchronized void foo() { sdf.format(); // preferred } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java index e4f43f3ecb..9a52e5397b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java @@ -69,7 +69,7 @@ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { } ASTMethodDeclaration method = n.getFirstParentOfType(ASTMethodDeclaration.class); - if (method != null && !method.isSynchronized()) { + if (method != null && ( !method.isSynchronized() || !method.isStatic() )) { addViolation(data, n); } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticDateFormatter.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticDateFormatter.xml index aaad1b5dab..dce41430c7 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticDateFormatter.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticDateFormatter.xml @@ -31,8 +31,8 @@ public class Foo { ]]></code> </test-code> <test-code> - <description>3, Inside synchronized, OK</description> - <expected-problems>0</expected-problems> + <description>3, Instace synchronized, Not OK</description> + <expected-problems>1</expected-problems> <code><![CDATA[ import java.text.SimpleDateFormat; @@ -61,8 +61,8 @@ public class Foo { ]]></code> </test-code> <test-code> - <description>5, Use DateFormat, ok</description> - <expected-problems>0</expected-problems> + <description>5, Use DateFormat with instance Synchronized, not ok</description> + <expected-problems>1</expected-problems> <code><![CDATA[ import java.text.DateFormat; @@ -105,4 +105,18 @@ public class Test { } ]]></code> </test-code> + <test-code> + <description>#1815 static synchronized, OK</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + static synchronized void bar() { + sdf.format(); + } +} + ]]></code> + </test-code> </test-data> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml index 5c9db4e1f0..c46600a570 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml @@ -32,7 +32,7 @@ public class Foo { </test-code> <test-code> <description>3, Inside synchronized, OK</description> - <expected-problems>0</expected-problems> + <expected-problems>1</expected-problems> <code><![CDATA[ import java.text.SimpleDateFormat; @@ -62,7 +62,7 @@ public class Foo { </test-code> <test-code> <description>5, Use DateFormat, ok</description> - <expected-problems>0</expected-problems> + <expected-problems>1</expected-problems> <code><![CDATA[ import java.text.DateFormat; @@ -149,4 +149,19 @@ public class Foo { } ]]></code> </test-code> + <test-code> + <description>#1815 static synchronized, OK</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + static synchronized void bar() { + sdf.format(); + } +} + ]]></code> + </test-code> + </test-data> From eaaf7e48dd70b37f20345218663be95cb559fc75 Mon Sep 17 00:00:00 2001 From: "Venkatachalam, Srinivasan" <srvenkatachalam@paypal.com> Date: Sun, 12 May 2019 12:36:13 +0530 Subject: [PATCH 084/371] checkstyle violation fix --- .../rule/multithreading/UnsynchronizedStaticFormatterRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java index 9a52e5397b..638f3ab975 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java @@ -69,7 +69,7 @@ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { } ASTMethodDeclaration method = n.getFirstParentOfType(ASTMethodDeclaration.class); - if (method != null && ( !method.isSynchronized() || !method.isStatic() )) { + if (method != null && (!method.isSynchronized() || !method.isStatic())) { addViolation(data, n); } } From 5a5eee16ca664b0ed2276326e5b5dfb896044f56 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 12 May 2019 15:51:38 +0200 Subject: [PATCH 085/371] Update release notes, fixes #1830, refs #1813 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0c717925c2..31b5e97412 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -58,6 +58,8 @@ For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designe * [#1782](https://github.com/pmd/pmd/issues/1782): \[java] NoPackage: False Negative for enums * java-design * [#1760](https://github.com/pmd/pmd/issues/1760): \[java] UseObjectForClearerAPI flags private methods +* matlab + * [#1830](https://github.com/pmd/pmd/issues/1830): \[matlab] \[cpd] Parse error with comments ### API Changes @@ -73,6 +75,7 @@ No changes. * [#1781](https://github.com/pmd/pmd/pull/1781): \[java] Location change in AssignmentToNonFinalStatic - [Maikel Steneker](https://github.com/maikelsteneker) * [#1789](https://github.com/pmd/pmd/pull/1789): \[cpd] \[core] Use current classloader instead of Thread's classloader - [Andreas Schmid](https://github.com/aaschmid) * [#1791](https://github.com/pmd/pmd/pull/1791): \[dart] \[cpd] Dart escaped string - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1813](https://github.com/pmd/pmd/pull/1813): \[matlab] \[cpd] Matlab comments - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} From bacc7b2a668de3f2e458291f7be6c4c155c02ef2 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 12 May 2019 15:58:35 +0200 Subject: [PATCH 086/371] Update release notes, refs #1822 --- docs/pages/release_notes.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0c717925c2..235858e7ba 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -29,6 +29,16 @@ Being based on a proper Antlr grammar, CPD can: This PMD release ships a new version of the pmd-designer. For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/blob/6.14.0/CHANGELOG.md). +#### Enhanced Matlab support + +Thanks to the contribution from [Maikel Steneker](https://github.com/maikelsteneker) CPD for Matlab can +now parse double quoted strings, which are supported since version R2017a of Matlab: + +``` +str = "This is a string" +``` + + ### Modified Rules * The Java rule {% rule "java/errorprone/AssignmentToNonFinalStatic" %} (`java-errorprone`) will now report on each @@ -73,6 +83,7 @@ No changes. * [#1781](https://github.com/pmd/pmd/pull/1781): \[java] Location change in AssignmentToNonFinalStatic - [Maikel Steneker](https://github.com/maikelsteneker) * [#1789](https://github.com/pmd/pmd/pull/1789): \[cpd] \[core] Use current classloader instead of Thread's classloader - [Andreas Schmid](https://github.com/aaschmid) * [#1791](https://github.com/pmd/pmd/pull/1791): \[dart] \[cpd] Dart escaped string - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1822](https://github.com/pmd/pmd/pull/1822): \[matlab] \[cpd] Double quoted string - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} From 93050a2c7f4dd3cb326a364c0ea69e817f4829de Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 12 May 2019 16:06:23 +0200 Subject: [PATCH 087/371] Improve unit test --- .../test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java index 128fced6b3..b0fdd778c4 100644 --- a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java +++ b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java @@ -51,7 +51,6 @@ public class MatlabTokenizerTest extends AbstractTokenizerTest { )); Tokens tokens = new Tokens(); tokenizer.tokenize(sourceCode, tokens); - TokenEntry.getEOF(); assertEquals(2, tokens.size()); // 2 tokens: "end" + EOF } @@ -61,7 +60,7 @@ public class MatlabTokenizerTest extends AbstractTokenizerTest { "error(\"This is a double-quoted string\");")); Tokens tokens = new Tokens(); tokenizer.tokenize(sourceCode, tokens); - TokenEntry.getEOF(); + assertEquals("\"This is a double-quoted string\"", tokens.getTokens().get(2).toString()); assertEquals(6, tokens.size()); } } From 1f02f5ff7f4a5172bbb28677b6bded7fc3a42b4c Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 12 May 2019 16:12:07 +0200 Subject: [PATCH 088/371] Update release notes, refs #1821 --- docs/pages/release_notes.md | 12 ++++++++++++ .../net/sourceforge/pmd/cpd/MatlabTokenizerTest.java | 1 - 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0c717925c2..2d8a1811bf 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -29,6 +29,17 @@ Being based on a proper Antlr grammar, CPD can: This PMD release ships a new version of the pmd-designer. For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/blob/6.14.0/CHANGELOG.md). +#### Enhanced Matlab support + +Thanks to the contribution from [Maikel Steneker](https://github.com/maikelsteneker) CPD for Matlab can +now parse matlab programs which use the question mark operator to specify access to +class members: + +``` +lassdef Class1 +properties (SetAccess = ?Class2) +``` + ### Modified Rules * The Java rule {% rule "java/errorprone/AssignmentToNonFinalStatic" %} (`java-errorprone`) will now report on each @@ -73,6 +84,7 @@ No changes. * [#1781](https://github.com/pmd/pmd/pull/1781): \[java] Location change in AssignmentToNonFinalStatic - [Maikel Steneker](https://github.com/maikelsteneker) * [#1789](https://github.com/pmd/pmd/pull/1789): \[cpd] \[core] Use current classloader instead of Thread's classloader - [Andreas Schmid](https://github.com/aaschmid) * [#1791](https://github.com/pmd/pmd/pull/1791): \[dart] \[cpd] Dart escaped string - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1821](https://github.com/pmd/pmd/pull/1821): \[matlab] \[cpd] Matlab question mark token - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} diff --git a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java index 6f10aa814d..ae041a3e1c 100644 --- a/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java +++ b/pmd-matlab/src/test/java/net/sourceforge/pmd/cpd/MatlabTokenizerTest.java @@ -61,7 +61,6 @@ public class MatlabTokenizerTest extends AbstractTokenizerTest { + "properties (SetAccess = ?Class2)")); Tokens tokens = new Tokens(); tokenizer.tokenize(sourceCode, tokens); - TokenEntry.getEOF(); assertEquals(10, tokens.size()); } } From 44ca6d307e55081b3e14f4b7022e2d8f4c2ecd74 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 12 May 2019 19:25:08 +0200 Subject: [PATCH 089/371] Improve unit test --- .../src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java index f6a8dc11fd..1796852fda 100644 --- a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java +++ b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java @@ -166,8 +166,8 @@ public class CPPTokenizerTest { + "auto hex_literal = 0x0F00'abcd'6f3d;" + PMD.EOL + "auto silly_example = 1'0'0'000'00;"; Tokens tokens = parse(code); - System.out.println(tokens.getTokens()); assertTrue(TokenEntry.getEOF() != tokens.getTokens().get(0)); + assertEquals("1'000'000", tokens.getTokens().get(3).toString()); assertEquals(21, tokens.size()); } From 615ebb6fe3af37a062ec925569384d0327f078fa Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 12 May 2019 19:25:23 +0200 Subject: [PATCH 090/371] Update release notes, refs #1819 --- docs/pages/release_notes.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0c717925c2..d5226fd6a6 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -29,6 +29,14 @@ Being based on a proper Antlr grammar, CPD can: This PMD release ships a new version of the pmd-designer. For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/blob/6.14.0/CHANGELOG.md). +#### Enhanced C++ support + +CPD now supports digit separators in C++ (language module "cpp"). This is a C++14 feature. + +Example: `auto integer_literal = 1'000'000;` + +The single quotes can be used to add some structure to large numbers. + ### Modified Rules * The Java rule {% rule "java/errorprone/AssignmentToNonFinalStatic" %} (`java-errorprone`) will now report on each @@ -73,6 +81,7 @@ No changes. * [#1781](https://github.com/pmd/pmd/pull/1781): \[java] Location change in AssignmentToNonFinalStatic - [Maikel Steneker](https://github.com/maikelsteneker) * [#1789](https://github.com/pmd/pmd/pull/1789): \[cpd] \[core] Use current classloader instead of Thread's classloader - [Andreas Schmid](https://github.com/aaschmid) * [#1791](https://github.com/pmd/pmd/pull/1791): \[dart] \[cpd] Dart escaped string - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1819](https://github.com/pmd/pmd/pull/1819): \[cpp] \[cpd] Add support for digit separators - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} From 5f24c07a831f80af3a46c37a76b10e4cdc0daadf Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Mon, 13 May 2019 14:31:10 +0200 Subject: [PATCH 091/371] Rewrote unit tests for C++ raw string literals. --- .../sourceforge/pmd/cpd/CPPTokenizerTest.java | 71 +++++++++++++++---- .../sourceforge/pmd/cpd/cpp/issue-1559.cpp | 2 +- 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java index 883716cb06..7ea59bc95d 100644 --- a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java +++ b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CPPTokenizerTest.java @@ -159,27 +159,70 @@ public class CPPTokenizerTest { tokenizer.tokenize(code, new Tokens()); } + public void testStringPrefix(String code, String expToken, int tokenIndex, int expNoTokens) { + final Tokens tokens = parse(code); + final TokenEntry token = tokens.getTokens().get(tokenIndex); + assertEquals(expNoTokens, tokens.size()); + assertEquals(expToken, token.toString()); + } + + public void testCharacterPrefix(String code, String expToken) { + testStringPrefix(code, expToken, 3, 6); + } + + public void testStringPrefix(String code, String expToken) { + testStringPrefix(code, expToken, 5, 8); + } + @Test - public void testStringPrefixes() { - final String code = "char a = '\\x30'; // character, no semantics" + PMD.EOL - + "wchar_t b = L'\\xFFEF'; // wide character, no semantics" + PMD.EOL - + "char16_t c = u'\\u00F6'; // 16-bit, assumed UTF16?" + PMD.EOL - + "char32_t d = U'\\U0010FFFF'; // 32-bit, assumed UCS-4" + PMD.EOL - + "char A[] = \"Hello\\x0A\"; // byte string, \"narrow encoding\"" + PMD.EOL - + "wchar_t B[] = L\"Hell\\xF6\\x0A\"; // wide string, impl-def'd encoding" + PMD.EOL - + "char16_t C[] = u\"Hell\\u00F6\"; // (1)" + PMD.EOL - + "char32_t D[] = U\"Hell\\U000000F6\\U0010FFFF\"; // (2)" + PMD.EOL - + "auto E[] = u8\"\\u00F6\\U0010FFFF\"; // (3)"; - Tokens tokens = parse(code); - assertTrue(TokenEntry.getEOF() != tokens.getTokens().get(0)); - assertEquals(58, tokens.size()); + public void testCharacterPrefixNoPrefix() { + testCharacterPrefix("char a = '\\x30';", "'\\x30'"); + } + + @Test + public void testCharacterPrefixWideCharacter() { + testCharacterPrefix("wchar_t b = L'\\xFFEF';", "L'\\xFFEF'"); + } + + @Test + public void testCharacterPrefixChar16() { + testCharacterPrefix("char16_t c = u'\\u00F6';", "u'\\u00F6'"); + } + + @Test + public void testCharacterPrefixChar32() { + testCharacterPrefix("char32_t d = U'\\U0010FFFF';", "U'\\U0010FFFF'"); + } + + @Test + public void testStringPrefixNoPrefix() { + testStringPrefix("char A[] = \"Hello\\x0A\";", "\"Hello\\x0A\""); + } + + @Test + public void testStringPrefixWideString() { + testStringPrefix("wchar_t B[] = L\"Hell\\xF6\\x0A\";", "L\"Hell\\xF6\\x0A\""); + } + + @Test + public void testStringPrefixChar16() { + testStringPrefix("char16_t C[] = u\"Hell\\u00F6\";", "u\"Hell\\u00F6\""); + } + + @Test + public void testStringPrefixChar32() { + testStringPrefix("char32_t D[] = U\"Hell\\U000000F6\\U0010FFFF\";", "U\"Hell\\U000000F6\\U0010FFFF\""); + } + + @Test + public void testStringPrefixUtf8() { + testStringPrefix("auto E[] = u8\"\\u00F6\\U0010FFFF\";", "u8\"\\u00F6\\U0010FFFF\""); } @Test public void testRawStringLiterals() throws IOException { final String code = IOUtils.toString(CPPTokenizerTest.class.getResourceAsStream("cpp/issue-1784.cpp"), StandardCharsets.UTF_8); Tokens tokens = parse(code); - System.out.println(tokens.getTokens()); assertTrue(TokenEntry.getEOF() != tokens.getTokens().get(0)); assertEquals(16, tokens.size()); } diff --git a/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1559.cpp b/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1559.cpp index a60ce005b5..cdf47c53e6 100644 --- a/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1559.cpp +++ b/pmd-cpp/src/test/resources/net/sourceforge/pmd/cpd/cpp/issue-1559.cpp @@ -4,7 +4,7 @@ namespace ABC { #ifdef USE_QT - const char* perPixelQml = "QML( + const char* perPixelQml = "QML( // provoking a parser error )QML"; } } From 95673a0bfc6067ed860de0b385eb23820f46e8ca Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Mon, 13 May 2019 14:31:33 +0200 Subject: [PATCH 092/371] Added support for character prefixes + various other improvements. --- pmd-cpp/etc/grammar/cpp.jj | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pmd-cpp/etc/grammar/cpp.jj b/pmd-cpp/etc/grammar/cpp.jj index c8344a270b..7a691dbc30 100644 --- a/pmd-cpp/etc/grammar/cpp.jj +++ b/pmd-cpp/etc/grammar/cpp.jj @@ -96,7 +96,7 @@ public final class CppParser { if (t.kind != ID && t.kind != SCOPE) return null; - StringBuffer s = new StringBuffer(); + StringBuilder s = new StringBuilder(); int i; if (t.kind != SCOPE) @@ -309,10 +309,11 @@ TOKEN [IGNORE_CASE] : TOKEN : { + < #CHRPREF : <STRPREF>> +| < CHARACTER : <CHRPREF> + "'" ( ( ~["'","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] ) ) )* "'" > - < CHARACTER : ("L")? "'" ( ( ~["'","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] ) ) )* "'" > - -| < #STRPREF : (["L", "u", "U"] | "u8")? > +| < #STRPREF : ("L" | "u" | "U" | "u8")? > | < STRING : <STRPREF> "\"" ( ( ~["\"","\\","\r","\n"] ) | ( "\\" ( ~["\n","\r"] | "\n" | "\r\n" ) ) )* "\"" > @@ -324,7 +325,7 @@ TOKEN : { < RSTRING : <STRPREF> "R\"" > { - StringBuffer sb = new StringBuffer(16); + StringBuilder sb = new StringBuilder(16); // delim ------+ // vvv @@ -338,14 +339,12 @@ TOKEN : } final String delim = sb.toString(); - sb = new StringBuffer(256); rstringbody: // Matching R"...(...)..." // ^ for (;;) { try { curChar = input_stream.readChar(); } catch(java.io.IOException e) { return; } - sb.append(curChar); if (curChar == ')') { // delim --------------+ // vvv @@ -358,7 +357,6 @@ rstringbody: input_stream.backup(1); continue rstringbody; } - sb.append(curChar); } // Matching R"...(...)..." // ^ @@ -368,12 +366,13 @@ rstringbody: input_stream.backup(1); continue rstringbody; } - sb.append(curChar); break; } } // Setting final token image - matchedToken.image += delim + "(" + sb.toString(); + matchedToken.image = input_stream.GetImage(); + matchedToken.endLine = input_stream.getEndLine(); + matchedToken.endColumn = input_stream.getEndColumn(); } } From a0bffae1a159e3086f3cc0adf544d66cabadd143 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Mon, 13 May 2019 13:08:25 -0400 Subject: [PATCH 093/371] Make AbstractRegexNamingConventionsRule package private --- .../apex/rule/codestyle/AbstractRegexNamingConventionsRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java index f328c67117..25b5414591 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java @@ -14,7 +14,7 @@ import net.sourceforge.pmd.lang.apex.rule.AbstractApexRule; import net.sourceforge.pmd.properties.PropertyBuilder; import net.sourceforge.pmd.properties.PropertyDescriptor; -public abstract class AbstractRegexNamingConventionsRule extends AbstractApexRule { +abstract class AbstractRegexNamingConventionsRule extends AbstractApexRule { protected static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; protected static final String PASCAL_CASE = "[A-Z][a-zA-Z0-9]*"; From 63c71366bdd39898e22571e0fc03bcb0b73ee0a8 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Mon, 13 May 2019 13:17:09 -0400 Subject: [PATCH 094/371] Compile regexes once --- .../rule/codestyle/AbstractRegexNamingConventionsRule.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java index 25b5414591..f1267593b9 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java @@ -15,8 +15,8 @@ import net.sourceforge.pmd.properties.PropertyBuilder; import net.sourceforge.pmd.properties.PropertyDescriptor; abstract class AbstractRegexNamingConventionsRule extends AbstractApexRule { - protected static final String CAMEL_CASE = "[a-z][a-zA-Z0-9]*"; - protected static final String PASCAL_CASE = "[A-Z][a-zA-Z0-9]*"; + protected static final Pattern CAMEL_CASE = Pattern.compile("[a-z][a-zA-Z0-9]*"); + protected static final Pattern PASCAL_CASE = Pattern.compile("[A-Z][a-zA-Z0-9]*"); abstract String displayName(String name); From ff7abcf224b1ac55c1b5b8e9ef7d33c0ade4d43f Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Mon, 13 May 2019 13:44:38 -0400 Subject: [PATCH 095/371] Get names without reflection --- .../pmd/lang/apex/ast/ASTUserClass.java | 13 ++------ .../pmd/lang/apex/ast/ASTUserEnum.java | 13 ++------ .../pmd/lang/apex/ast/ASTUserInterface.java | 13 ++------ .../pmd/lang/apex/ast/ASTUserTrigger.java | 12 +------ .../pmd/lang/apex/ast/ASTUserClassTest.java | 31 +++++++++++++++++++ .../pmd/lang/apex/ast/ASTUserEnumTest.java | 24 ++++++++++++++ .../lang/apex/ast/ASTUserInterfaceTest.java | 31 +++++++++++++++++++ 7 files changed, 93 insertions(+), 44 deletions(-) create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserClassTest.java create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnumTest.java create mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserInterfaceTest.java diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserClass.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserClass.java index 87f94bc3ce..08a7eb2857 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserClass.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserClass.java @@ -4,11 +4,8 @@ package net.sourceforge.pmd.lang.apex.ast; -import java.lang.reflect.Field; - import net.sourceforge.pmd.Rule; -import apex.jorje.data.Identifier; import apex.jorje.semantic.ast.compilation.UserClass; public class ASTUserClass extends ApexRootNode<UserClass> implements ASTUserClassOrInterface<UserClass>, @@ -29,14 +26,8 @@ public class ASTUserClass extends ApexRootNode<UserClass> implements ASTUserClas @Override public String getImage() { - try { - Field field = node.getClass().getDeclaredField("name"); - field.setAccessible(true); - Identifier name = (Identifier) field.get(node); - return name.getValue(); - } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } + String apexName = node.getDefiningType().getApexName(); + return apexName.substring(apexName.lastIndexOf('.') + 1); } @Override diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnum.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnum.java index fade85f7d5..54e5034fdc 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnum.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnum.java @@ -4,9 +4,6 @@ package net.sourceforge.pmd.lang.apex.ast; -import java.lang.reflect.Field; - -import apex.jorje.data.Identifier; import apex.jorje.semantic.ast.compilation.UserEnum; public class ASTUserEnum extends ApexRootNode<UserEnum> { @@ -22,14 +19,8 @@ public class ASTUserEnum extends ApexRootNode<UserEnum> { @Override public String getImage() { - try { - Field field = node.getClass().getDeclaredField("name"); - field.setAccessible(true); - Identifier name = (Identifier) field.get(node); - return name.getValue(); - } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } + String apexName = node.getDefiningType().getApexName(); + return apexName.substring(apexName.lastIndexOf('.') + 1); } public ASTModifierNode getModifiers() { diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserInterface.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserInterface.java index af6ccb8100..645b6e02aa 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserInterface.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserInterface.java @@ -4,11 +4,8 @@ package net.sourceforge.pmd.lang.apex.ast; -import java.lang.reflect.Field; - import net.sourceforge.pmd.Rule; -import apex.jorje.data.Identifier; import apex.jorje.semantic.ast.compilation.UserInterface; public class ASTUserInterface extends ApexRootNode<UserInterface> implements ASTUserClassOrInterface<UserInterface>, @@ -27,14 +24,8 @@ public class ASTUserInterface extends ApexRootNode<UserInterface> implements AST @Override public String getImage() { - try { - Field field = node.getClass().getDeclaredField("name"); - field.setAccessible(true); - Identifier name = (Identifier) field.get(node); - return name.getValue(); - } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } + String apexName = node.getDefiningType().getApexName(); + return apexName.substring(apexName.lastIndexOf('.') + 1); } @Override diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserTrigger.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserTrigger.java index 3360750889..66c9b32004 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserTrigger.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ASTUserTrigger.java @@ -4,9 +4,6 @@ package net.sourceforge.pmd.lang.apex.ast; -import java.lang.reflect.Field; - -import apex.jorje.data.Identifier; import apex.jorje.semantic.ast.compilation.UserTrigger; public class ASTUserTrigger extends ApexRootNode<UserTrigger> { @@ -22,14 +19,7 @@ public class ASTUserTrigger extends ApexRootNode<UserTrigger> { @Override public String getImage() { - try { - Field field = node.getClass().getDeclaredField("name"); - field.setAccessible(true); - Identifier name = (Identifier) field.get(node); - return name.getValue(); - } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } + return node.getDefiningType().getApexName(); } public ASTModifierNode getModifiers() { diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserClassTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserClassTest.java new file mode 100644 index 0000000000..7e2ea41201 --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserClassTest.java @@ -0,0 +1,31 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.ast; + +import static net.sourceforge.pmd.lang.apex.ast.ApexParserTestHelpers.parse; + +import org.junit.Assert; +import org.junit.Test; + +import apex.jorje.semantic.ast.compilation.Compilation; + +public class ASTUserClassTest { + + @Test + public void testClassName() { + ApexNode<Compilation> node = parse("class Foo { }"); + Assert.assertSame(ASTUserClass.class, node.getClass()); + Assert.assertEquals("Foo", node.getImage()); + } + + @Test + public void testInnerClassName() { + ApexNode<Compilation> node = parse("class Foo { class Bar { } }"); + Assert.assertSame(ASTUserClass.class, node.getClass()); + ASTUserClass innerNode = node.getFirstDescendantOfType(ASTUserClass.class); + Assert.assertNotNull(innerNode); + Assert.assertEquals("Bar", innerNode.getImage()); + } +} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnumTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnumTest.java new file mode 100644 index 0000000000..827833e4bd --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserEnumTest.java @@ -0,0 +1,24 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.ast; + +import static net.sourceforge.pmd.lang.apex.ast.ApexParserTestHelpers.parse; + +import org.junit.Assert; +import org.junit.Test; + +import apex.jorje.semantic.ast.compilation.Compilation; + +public class ASTUserEnumTest { + + @Test + public void testEnumName() { + ApexNode<Compilation> node = parse("class Foo { enum Bar { } }"); + Assert.assertSame(ASTUserClass.class, node.getClass()); + ASTUserEnum enumNode = node.getFirstDescendantOfType(ASTUserEnum.class); + Assert.assertNotNull(enumNode); + Assert.assertEquals("Bar", enumNode.getImage()); + } +} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserInterfaceTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserInterfaceTest.java new file mode 100644 index 0000000000..f7944db734 --- /dev/null +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/ast/ASTUserInterfaceTest.java @@ -0,0 +1,31 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.apex.ast; + +import static net.sourceforge.pmd.lang.apex.ast.ApexParserTestHelpers.parse; + +import org.junit.Assert; +import org.junit.Test; + +import apex.jorje.semantic.ast.compilation.Compilation; + +public class ASTUserInterfaceTest { + + @Test + public void testInterfaceName() { + ApexNode<Compilation> node = parse("interface Foo { }"); + Assert.assertSame(ASTUserInterface.class, node.getClass()); + Assert.assertEquals("Foo", node.getImage()); + } + + @Test + public void testInnerInterfaceName() { + ApexNode<Compilation> node = parse("class Foo { interface Bar { } }"); + Assert.assertSame(ASTUserClass.class, node.getClass()); + ASTUserInterface innerNode = node.getFirstDescendantOfType(ASTUserInterface.class); + Assert.assertNotNull(innerNode); + Assert.assertEquals("Bar", innerNode.getImage()); + } +} From 1053d31fd7318a781900f8a00343d76a58fc0232 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Mon, 13 May 2019 17:01:44 -0400 Subject: [PATCH 096/371] Use all caps for constant fields --- .../AbstractRegexNamingConventionsRule.java | 1 + .../FieldRegexNamingConventionsRule.java | 4 ++-- .../xml/FieldRegexNamingConventions.xml | 22 +++++++++---------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java index f1267593b9..1dd82cf96f 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java @@ -17,6 +17,7 @@ import net.sourceforge.pmd.properties.PropertyDescriptor; abstract class AbstractRegexNamingConventionsRule extends AbstractApexRule { protected static final Pattern CAMEL_CASE = Pattern.compile("[a-z][a-zA-Z0-9]*"); protected static final Pattern PASCAL_CASE = Pattern.compile("[A-Z][a-zA-Z0-9]*"); + protected static final Pattern ALL_CAPS = Pattern.compile("[A-Z][A-Z0-9_]*"); abstract String displayName(String name); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java index 5e9a8ce3aa..628c99676c 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java @@ -18,10 +18,10 @@ public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventi private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); private static final PropertyDescriptor<Pattern> ENUM_CONSTANT_REGEX = prop("enumConstantPattern", "enum constant field", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue("[A-Z][A-Z0-9_]*").build(); + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(ALL_CAPS).build(); private static final PropertyDescriptor<Pattern> CONSTANT_REGEX = prop("constantPattern", "constant field", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(ALL_CAPS).build(); private static final PropertyDescriptor<Pattern> FINAL_REGEX = prop("finalPattern", "final field", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml index 9577096b1a..b5de65a6b6 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml @@ -10,7 +10,7 @@ <expected-problems>0</expected-problems> <code><![CDATA[ public class Foo { - final static Integer constantField; + final static Integer CONSTANT_FIELD; final Integer finalField; static Integer staticField; Integer instanceField; @@ -22,17 +22,17 @@ public class Foo { </test-code> <test-code> - <description>default is camel case</description> + <description>default is all caps for constants, camel case for others</description> <expected-problems>4</expected-problems> <expected-messages> - <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The constant field name 'constantField' doesn't match '[A-Z][A-Z0-9_]*'</message> <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ public class Foo { - final static Integer CONSTANT_FIELD; + final static Integer constantField; final Integer FINAL_FIELD; static Integer STATIC_FIELD; Integer INSTANCE_FIELD; @@ -89,7 +89,7 @@ public class Foo { </expected-messages> <code><![CDATA[ public class Foo { - final static Integer CONSTANT_FIELD; + final static Integer constantField; final Integer FINAL_FIELD; static Integer STATIC_FIELD; Integer INSTANCE_FIELD; @@ -102,13 +102,13 @@ public class Foo { <rule-property name="finalPattern">[a-zA-Z0-9_]+</rule-property> <expected-problems>3</expected-problems> <expected-messages> - <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The constant field name 'constantField' doesn't match '[A-Z][A-Z0-9_]*'</message> <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ public class Foo { - final static Integer CONSTANT_FIELD; + final static Integer constantField; final Integer FINAL_FIELD; static Integer STATIC_FIELD; Integer INSTANCE_FIELD; @@ -121,13 +121,13 @@ public class Foo { <rule-property name="staticPattern">[a-zA-Z0-9_]+</rule-property> <expected-problems>3</expected-problems> <expected-messages> - <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The constant field name 'constantField' doesn't match '[A-Z][A-Z0-9_]*'</message> <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> <message>The instance field name 'INSTANCE_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ public class Foo { - final static Integer CONSTANT_FIELD; + final static Integer constantField; final Integer FINAL_FIELD; static Integer STATIC_FIELD; Integer INSTANCE_FIELD; @@ -140,13 +140,13 @@ public class Foo { <rule-property name="instancePattern">[a-zA-Z0-9_]+</rule-property> <expected-problems>3</expected-problems> <expected-messages> - <message>The constant field name 'CONSTANT_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The constant field name 'constantField' doesn't match '[A-Z][A-Z0-9_]*'</message> <message>The final field name 'FINAL_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> <message>The static field name 'STATIC_FIELD' doesn't match '[a-z][a-zA-Z0-9]*'</message> </expected-messages> <code><![CDATA[ public class Foo { - final static Integer CONSTANT_FIELD; + final static Integer constantField; final Integer FINAL_FIELD; static Integer STATIC_FIELD; Integer INSTANCE_FIELD; From 6e937ed1a9f5bc601b3206920c84f395b9875452 Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Tue, 14 May 2019 11:23:59 -0400 Subject: [PATCH 097/371] Remove Regex suffix from new rule names --- ...ava => AbstractNamingConventionsRule.java} | 13 +- .../codestyle/ClassNamingConventionsRule.java | 65 ++++++-- .../ClassRegexNamingConventionsRule.java | 77 --------- ...e.java => FieldNamingConventionsRule.java} | 9 +- ...FormalParameterNamingConventionsRule.java} | 9 +- ...> LocalVariableNamingConventionsRule.java} | 9 +- .../MethodNamingConventionsRule.java | 55 +++++-- .../MethodRegexNamingConventionsRule.java | 77 --------- ...ava => PropertyNamingConventionsRule.java} | 9 +- .../resources/category/apex/codestyle.xml | 65 ++------ ...t.java => FieldNamingConventionsTest.java} | 2 +- ...FormalParameterNamingConventionsTest.java} | 2 +- ...alParameterRegexNamingConventionsTest.java | 11 -- ...> LocalVariableNamingConventionsTest.java} | 2 +- ...calVariableRegexNamingConventionsTest.java | 11 -- ...ava => PropertyNamingConventionsTest.java} | 2 +- .../codestyle/xml/ClassNamingConventions.xml | 138 +++++++++++++++++ .../xml/ClassRegexNamingConventions.xml | 146 ------------------ ...entions.xml => FieldNamingConventions.xml} | 0 ...l => FormalParameterNamingConventions.xml} | 0 ...xml => LocalVariableNamingConventions.xml} | 0 .../codestyle/xml/MethodNamingConventions.xml | 127 +++++++++++++++ .../xml/MethodRegexNamingConventions.xml | 134 ---------------- ...ions.xml => PropertyNamingConventions.xml} | 0 24 files changed, 420 insertions(+), 543 deletions(-) rename pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{AbstractRegexNamingConventionsRule.java => AbstractNamingConventionsRule.java} (67%) delete mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java rename pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{FieldRegexNamingConventionsRule.java => FieldNamingConventionsRule.java} (88%) rename pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{FormalParameterRegexNamingConventionsRule.java => FormalParameterNamingConventionsRule.java} (81%) rename pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{LocalVariableRegexNamingConventionsRule.java => LocalVariableNamingConventionsRule.java} (80%) delete mode 100644 pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java rename pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{PropertyRegexNamingConventionsRule.java => PropertyNamingConventionsRule.java} (80%) rename pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{ClassRegexNamingConventionsTest.java => FieldNamingConventionsTest.java} (77%) rename pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{MethodRegexNamingConventionsTest.java => FormalParameterNamingConventionsTest.java} (76%) delete mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsTest.java rename pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{PropertyRegexNamingConventionsTest.java => LocalVariableNamingConventionsTest.java} (78%) delete mode 100644 pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsTest.java rename pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/{FieldRegexNamingConventionsTest.java => PropertyNamingConventionsTest.java} (77%) delete mode 100644 pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml rename pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/{FieldRegexNamingConventions.xml => FieldNamingConventions.xml} (100%) rename pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/{FormalParameterRegexNamingConventions.xml => FormalParameterNamingConventions.xml} (100%) rename pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/{LocalVariableRegexNamingConventions.xml => LocalVariableNamingConventions.xml} (100%) delete mode 100644 pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml rename pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/{PropertyRegexNamingConventions.xml => PropertyNamingConventions.xml} (100%) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractNamingConventionsRule.java similarity index 67% rename from pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java rename to pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractNamingConventionsRule.java index 1dd82cf96f..53e6fa6894 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/AbstractNamingConventionsRule.java @@ -14,9 +14,10 @@ import net.sourceforge.pmd.lang.apex.rule.AbstractApexRule; import net.sourceforge.pmd.properties.PropertyBuilder; import net.sourceforge.pmd.properties.PropertyDescriptor; -abstract class AbstractRegexNamingConventionsRule extends AbstractApexRule { +abstract class AbstractNamingConventionsRule extends AbstractApexRule { protected static final Pattern CAMEL_CASE = Pattern.compile("[a-z][a-zA-Z0-9]*"); - protected static final Pattern PASCAL_CASE = Pattern.compile("[A-Z][a-zA-Z0-9]*"); + protected static final Pattern CAMEL_CASE_WITH_UNDERSCORES = Pattern.compile("[a-z][a-zA-Z0-9_]*"); + protected static final Pattern PASCAL_CASE_WITH_UNDERSCORES = Pattern.compile("[A-Z][a-zA-Z0-9_]*"); protected static final Pattern ALL_CAPS = Pattern.compile("[A-Z][A-Z0-9_]*"); abstract String displayName(String name); @@ -30,6 +31,14 @@ abstract class AbstractRegexNamingConventionsRule extends AbstractApexRule { } } + protected void checkMatches(PropertyDescriptor<Pattern> propertyDescriptor, Pattern overridePattern, ApexNode<?> node, Object data) { + String name = node.getImage(); + if (!overridePattern.matcher(name).matches()) { + String displayName = displayName(propertyDescriptor.name()); + addViolation(data, node, new Object[] { displayName, name, overridePattern.toString() }); + } + } + protected static PropertyBuilder.RegexPropertyBuilder prop(String name, String displayName, Map<String, String> descriptorToDisplayNames) { descriptorToDisplayNames.put(name, displayName); return regexProperty(name).desc("Regex which applies to " + displayName + " names"); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassNamingConventionsRule.java index 433acc7fe3..9e956793e3 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassNamingConventionsRule.java @@ -4,32 +4,79 @@ package net.sourceforge.pmd.lang.apex.rule.codestyle; -import net.sourceforge.pmd.lang.apex.ast.ASTUserClass; -import net.sourceforge.pmd.lang.apex.ast.ASTUserInterface; -import net.sourceforge.pmd.lang.apex.rule.AbstractApexRule; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; -public class ClassNamingConventionsRule extends AbstractApexRule { +import net.sourceforge.pmd.lang.apex.ast.ASTUserClass; +import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum; +import net.sourceforge.pmd.lang.apex.ast.ASTUserInterface; +import net.sourceforge.pmd.properties.PropertyDescriptor; + +public class ClassNamingConventionsRule extends AbstractNamingConventionsRule { + private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); + + private static final PropertyDescriptor<Pattern> TEST_CLASS_REGEX = prop("testClassPattern", "test class", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE_WITH_UNDERSCORES).build(); + + private static final PropertyDescriptor<Pattern> ABSTRACT_CLASS_REGEX = prop("abstractClassPattern", "abstract class", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE_WITH_UNDERSCORES).build(); + + private static final PropertyDescriptor<Pattern> CLASS_REGEX = prop("classPattern", "class", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE_WITH_UNDERSCORES).build(); + + private static final PropertyDescriptor<Pattern> INTERFACE_REGEX = prop("interfacePattern", "interface", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE_WITH_UNDERSCORES).build(); + + private static final PropertyDescriptor<Pattern> ENUM_REGEX = prop("enumPattern", "enum", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE_WITH_UNDERSCORES).build(); public ClassNamingConventionsRule() { + definePropertyDescriptor(TEST_CLASS_REGEX); + definePropertyDescriptor(ABSTRACT_CLASS_REGEX); + definePropertyDescriptor(CLASS_REGEX); + definePropertyDescriptor(INTERFACE_REGEX); + definePropertyDescriptor(ENUM_REGEX); + setProperty(CODECLIMATE_CATEGORIES, "Style"); // Note: x10 as Apex has not automatic refactoring setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 5); setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); + + addRuleChainVisit(ASTUserClass.class); + addRuleChainVisit(ASTUserInterface.class); + addRuleChainVisit(ASTUserEnum.class); } @Override public Object visit(ASTUserClass node, Object data) { - if (Character.isLowerCase(node.getImage().charAt(0))) { - addViolation(data, node); + if (node.getModifiers().isTest()) { + checkMatches(TEST_CLASS_REGEX, node, data); + } else if (node.getModifiers().isAbstract()) { + checkMatches(ABSTRACT_CLASS_REGEX, node, data); + } else { + checkMatches(CLASS_REGEX, node, data); } + return data; } @Override public Object visit(ASTUserInterface node, Object data) { - if (Character.isLowerCase(node.getImage().charAt(0))) { - addViolation(data, node); - } + checkMatches(INTERFACE_REGEX, node, data); + return data; } + + @Override + public Object visit(ASTUserEnum node, Object data) { + checkMatches(ENUM_REGEX, node, data); + + return data; + } + + @Override + protected String displayName(String name) { + return DESCRIPTOR_TO_DISPLAY_NAME.get(name); + } } diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java deleted file mode 100644 index 2876be3685..0000000000 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsRule.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.apex.rule.codestyle; - -import java.util.HashMap; -import java.util.Map; -import java.util.regex.Pattern; - -import net.sourceforge.pmd.lang.apex.ast.ASTUserClass; -import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum; -import net.sourceforge.pmd.lang.apex.ast.ASTUserInterface; -import net.sourceforge.pmd.properties.PropertyDescriptor; - -public class ClassRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { - private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - - private static final PropertyDescriptor<Pattern> TEST_CLASS_REGEX = prop("testClassPattern", "test class", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); - - private static final PropertyDescriptor<Pattern> ABSTRACT_CLASS_REGEX = prop("abstractClassPattern", "abstract class", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); - - private static final PropertyDescriptor<Pattern> CLASS_REGEX = prop("classPattern", "class", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); - - private static final PropertyDescriptor<Pattern> INTERFACE_REGEX = prop("interfacePattern", "interface", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); - - private static final PropertyDescriptor<Pattern> ENUM_REGEX = prop("enumPattern", "enum", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(PASCAL_CASE).build(); - - public ClassRegexNamingConventionsRule() { - definePropertyDescriptor(TEST_CLASS_REGEX); - definePropertyDescriptor(ABSTRACT_CLASS_REGEX); - definePropertyDescriptor(CLASS_REGEX); - definePropertyDescriptor(INTERFACE_REGEX); - definePropertyDescriptor(ENUM_REGEX); - - addRuleChainVisit(ASTUserClass.class); - addRuleChainVisit(ASTUserInterface.class); - addRuleChainVisit(ASTUserEnum.class); - } - - @Override - public Object visit(ASTUserClass node, Object data) { - if (node.getModifiers().isTest()) { - checkMatches(TEST_CLASS_REGEX, node, data); - } else if (node.getModifiers().isAbstract()) { - checkMatches(ABSTRACT_CLASS_REGEX, node, data); - } else { - checkMatches(CLASS_REGEX, node, data); - } - - return data; - } - - @Override - public Object visit(ASTUserInterface node, Object data) { - checkMatches(INTERFACE_REGEX, node, data); - - return data; - } - - @Override - public Object visit(ASTUserEnum node, Object data) { - checkMatches(ENUM_REGEX, node, data); - - return data; - } - - @Override - protected String displayName(String name) { - return DESCRIPTOR_TO_DISPLAY_NAME.get(name); - } -} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsRule.java similarity index 88% rename from pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java rename to pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsRule.java index 628c99676c..d5c19968dc 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsRule.java @@ -14,7 +14,7 @@ import net.sourceforge.pmd.lang.apex.ast.ASTProperty; import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum; import net.sourceforge.pmd.properties.PropertyDescriptor; -public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { +public class FieldNamingConventionsRule extends AbstractNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); private static final PropertyDescriptor<Pattern> ENUM_CONSTANT_REGEX = prop("enumConstantPattern", "enum constant field", @@ -32,13 +32,18 @@ public class FieldRegexNamingConventionsRule extends AbstractRegexNamingConventi private static final PropertyDescriptor<Pattern> INSTANCE_REGEX = prop("instancePattern", "instance field", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); - public FieldRegexNamingConventionsRule() { + public FieldNamingConventionsRule() { definePropertyDescriptor(ENUM_CONSTANT_REGEX); definePropertyDescriptor(CONSTANT_REGEX); definePropertyDescriptor(FINAL_REGEX); definePropertyDescriptor(STATIC_REGEX); definePropertyDescriptor(INSTANCE_REGEX); + setProperty(CODECLIMATE_CATEGORIES, "Style"); + // Note: x10 as Apex has not automatic refactoring + setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); + setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); + addRuleChainVisit(ASTField.class); } diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsRule.java similarity index 81% rename from pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java rename to pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsRule.java index a5246d8573..8c611cb2e3 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsRule.java @@ -11,7 +11,7 @@ import java.util.regex.Pattern; import net.sourceforge.pmd.lang.apex.ast.ASTParameter; import net.sourceforge.pmd.properties.PropertyDescriptor; -public class FormalParameterRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { +public class FormalParameterNamingConventionsRule extends AbstractNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); private static final PropertyDescriptor<Pattern> FINAL_METHOD_PARAMETER_REGEX = prop("finalMethodParameterPattern", "final method parameter", @@ -20,10 +20,15 @@ public class FormalParameterRegexNamingConventionsRule extends AbstractRegexNami private static final PropertyDescriptor<Pattern> METHOD_PARAMETER_REGEX = prop("methodParameterPattern", "method parameter", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); - public FormalParameterRegexNamingConventionsRule() { + public FormalParameterNamingConventionsRule() { definePropertyDescriptor(FINAL_METHOD_PARAMETER_REGEX); definePropertyDescriptor(METHOD_PARAMETER_REGEX); + setProperty(CODECLIMATE_CATEGORIES, "Style"); + // Note: x10 as Apex has not automatic refactoring + setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); + setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); + addRuleChainVisit(ASTParameter.class); } diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsRule.java similarity index 80% rename from pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java rename to pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsRule.java index b40fa26be9..ee19980719 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsRule.java @@ -12,7 +12,7 @@ import net.sourceforge.pmd.lang.apex.ast.ASTVariableDeclaration; import net.sourceforge.pmd.lang.apex.ast.ASTVariableDeclarationStatements; import net.sourceforge.pmd.properties.PropertyDescriptor; -public class LocalVariableRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { +public class LocalVariableNamingConventionsRule extends AbstractNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); private static final PropertyDescriptor<Pattern> FINAL_REGEX = prop("finalLocalPattern", "final local variable", @@ -21,10 +21,15 @@ public class LocalVariableRegexNamingConventionsRule extends AbstractRegexNaming private static final PropertyDescriptor<Pattern> LOCAL_REGEX = prop("localPattern", "local variable", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); - public LocalVariableRegexNamingConventionsRule() { + public LocalVariableNamingConventionsRule() { definePropertyDescriptor(FINAL_REGEX); definePropertyDescriptor(LOCAL_REGEX); + setProperty(CODECLIMATE_CATEGORIES, "Style"); + // Note: x10 as Apex has not automatic refactoring + setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); + setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); + addRuleChainVisit(ASTVariableDeclaration.class); } diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodNamingConventionsRule.java index af57206f65..96b9b32539 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodNamingConventionsRule.java @@ -6,21 +6,38 @@ package net.sourceforge.pmd.lang.apex.rule.codestyle; import static net.sourceforge.pmd.properties.PropertyFactory.booleanProperty; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + import net.sourceforge.pmd.lang.apex.ast.ASTMethod; import net.sourceforge.pmd.lang.apex.ast.ASTProperty; -import net.sourceforge.pmd.lang.apex.rule.AbstractApexRule; +import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum; import net.sourceforge.pmd.properties.PropertyDescriptor; -public class MethodNamingConventionsRule extends AbstractApexRule { +public class MethodNamingConventionsRule extends AbstractNamingConventionsRule { + private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); + + private static final PropertyDescriptor<Pattern> TEST_REGEX = prop("testPattern", "test method", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> STATIC_REGEX = prop("staticPattern", "static method", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); + + private static final PropertyDescriptor<Pattern> INSTANCE_REGEX = prop("instancePattern", "instance method", + DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); private static final PropertyDescriptor<Boolean> SKIP_TEST_METHOD_UNDERSCORES_DESCRIPTOR = booleanProperty("skipTestMethodUnderscores") - .desc("Skip underscores in test methods") + .desc("deprecated! Skip underscores in test methods") .defaultValue(false) .build(); public MethodNamingConventionsRule() { definePropertyDescriptor(SKIP_TEST_METHOD_UNDERSCORES_DESCRIPTOR); + definePropertyDescriptor(TEST_REGEX); + definePropertyDescriptor(STATIC_REGEX); + definePropertyDescriptor(INSTANCE_REGEX); setProperty(CODECLIMATE_CATEGORIES, "Style"); // Note: x10 as Apex has not automatic refactoring @@ -35,21 +52,35 @@ public class MethodNamingConventionsRule extends AbstractApexRule { if (isOverriddenMethod(node) || isPropertyAccessor(node) || isConstructor(node)) { return data; } - if (isTestMethod(node) && getProperty(SKIP_TEST_METHOD_UNDERSCORES_DESCRIPTOR)) { + + if ("<clinit>".equals(node.getImage()) || "clone".equals(node.getImage())) { return data; } - String methodName = node.getImage(); + if (node.getFirstParentOfType(ASTUserEnum.class) != null) { + return data; + } - if (Character.isUpperCase(methodName.charAt(0))) { - addViolationWithMessage(data, node, "Method names should not start with capital letters"); - } - if (methodName.indexOf('_') >= 0) { - addViolationWithMessage(data, node, "Method names should not contain underscores"); + if (node.getModifiers().isTest()) { + if (getProperty(SKIP_TEST_METHOD_UNDERSCORES_DESCRIPTOR)) { + checkMatches(TEST_REGEX, CAMEL_CASE_WITH_UNDERSCORES, node, data); + } else { + checkMatches(TEST_REGEX, node, data); + } + } else if (node.getModifiers().isStatic()) { + checkMatches(STATIC_REGEX, node, data); + } else { + checkMatches(INSTANCE_REGEX, node, data); } + return data; } + @Override + protected String displayName(String name) { + return DESCRIPTOR_TO_DISPLAY_NAME.get(name); + } + private boolean isOverriddenMethod(ASTMethod node) { return node.getModifiers().isOverride(); } @@ -61,8 +92,4 @@ public class MethodNamingConventionsRule extends AbstractApexRule { private boolean isConstructor(ASTMethod node) { return node.isConstructor(); } - - private boolean isTestMethod(ASTMethod node) { - return node.getModifiers().isTest(); - } } diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java deleted file mode 100644 index 85dec6772d..0000000000 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsRule.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.apex.rule.codestyle; - -import java.util.HashMap; -import java.util.Map; -import java.util.regex.Pattern; - -import net.sourceforge.pmd.lang.apex.ast.ASTMethod; -import net.sourceforge.pmd.lang.apex.ast.ASTProperty; -import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum; -import net.sourceforge.pmd.properties.PropertyDescriptor; - -public class MethodRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { - private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); - - private static final PropertyDescriptor<Pattern> TEST_REGEX = prop("testPattern", "test method", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); - - private static final PropertyDescriptor<Pattern> STATIC_REGEX = prop("staticPattern", "static method", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); - - private static final PropertyDescriptor<Pattern> INSTANCE_REGEX = prop("instancePattern", "instance method", - DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); - - public MethodRegexNamingConventionsRule() { - definePropertyDescriptor(TEST_REGEX); - definePropertyDescriptor(STATIC_REGEX); - definePropertyDescriptor(INSTANCE_REGEX); - - addRuleChainVisit(ASTMethod.class); - } - - @Override - public Object visit(ASTMethod node, Object data) { - if (isOverriddenMethod(node) || isPropertyAccessor(node) || isConstructor(node)) { - return data; - } - - if ("<clinit>".equals(node.getImage()) || "clone".equals(node.getImage())) { - return data; - } - - if (node.getFirstParentOfType(ASTUserEnum.class) != null) { - return data; - } - - if (node.getModifiers().isTest()) { - checkMatches(TEST_REGEX, node, data); - } else if (node.getModifiers().isStatic()) { - checkMatches(STATIC_REGEX, node, data); - } else { - checkMatches(INSTANCE_REGEX, node, data); - } - - return data; - } - - @Override - protected String displayName(String name) { - return DESCRIPTOR_TO_DISPLAY_NAME.get(name); - } - - private boolean isOverriddenMethod(ASTMethod node) { - return node.getModifiers().isOverride(); - } - - private boolean isPropertyAccessor(ASTMethod node) { - return !node.getParentsOfType(ASTProperty.class).isEmpty(); - } - - private boolean isConstructor(ASTMethod node) { - return node.isConstructor(); - } -} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsRule.java similarity index 80% rename from pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java rename to pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsRule.java index 23898d22ef..70ad5594e1 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsRule.java @@ -12,7 +12,7 @@ import net.sourceforge.pmd.lang.apex.ast.ASTField; import net.sourceforge.pmd.lang.apex.ast.ASTProperty; import net.sourceforge.pmd.properties.PropertyDescriptor; -public class PropertyRegexNamingConventionsRule extends AbstractRegexNamingConventionsRule { +public class PropertyNamingConventionsRule extends AbstractNamingConventionsRule { private static final Map<String, String> DESCRIPTOR_TO_DISPLAY_NAME = new HashMap<>(); private static final PropertyDescriptor<Pattern> STATIC_REGEX = prop("staticPattern", "static property", @@ -21,10 +21,15 @@ public class PropertyRegexNamingConventionsRule extends AbstractRegexNamingConve private static final PropertyDescriptor<Pattern> INSTANCE_REGEX = prop("instancePattern", "instance property", DESCRIPTOR_TO_DISPLAY_NAME).defaultValue(CAMEL_CASE).build(); - public PropertyRegexNamingConventionsRule() { + public PropertyNamingConventionsRule() { definePropertyDescriptor(STATIC_REGEX); definePropertyDescriptor(INSTANCE_REGEX); + setProperty(CODECLIMATE_CATEGORIES, "Style"); + // Note: x10 as Apex has not automatic refactoring + setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); + setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); + addRuleChainVisit(ASTField.class); } diff --git a/pmd-apex/src/main/resources/category/apex/codestyle.xml b/pmd-apex/src/main/resources/category/apex/codestyle.xml index b2d3f835a0..a73567c18b 100644 --- a/pmd-apex/src/main/resources/category/apex/codestyle.xml +++ b/pmd-apex/src/main/resources/category/apex/codestyle.xml @@ -11,26 +11,10 @@ Rules which enforce a specific coding style. <rule name="ClassNamingConventions" since="5.5.0" - message="Class names should begin with an uppercase character" + message="The {0} name ''{1}'' doesn''t match ''{2}''" class="net.sourceforge.pmd.lang.apex.rule.codestyle.ClassNamingConventionsRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#classnamingconventions"> <description> -Class names should always begin with an upper case character. - </description> - <priority>1</priority> - <example> -<![CDATA[ -public class Foo {} -]]> - </example> - </rule> - - <rule name="ClassRegexNamingConventions" - since="6.15.0" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.apex.rule.codestyle.ClassRegexNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#classregexnamingconventions"> - <description> Configurable naming conventions for type declarations. This rule reports type declarations which do not match the regex that applies to their specific kind (e.g. enum or interface). Each regex can be configured through @@ -43,7 +27,7 @@ public class Foo {} <![CDATA[ public class FooClass { } // This is in pascal case, so it's ok -public class FOO_CLASS { } // This will be reported unless you change the regex +public class fooClass { } // This will be reported unless you change the regex ]]> </example> </rule> @@ -118,11 +102,11 @@ if (foo) { // preferred approach </example> </rule> - <rule name="FieldRegexNamingConventions" + <rule name="FieldNamingConventions" since="6.15.0" message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.apex.rule.codestyle.FieldRegexNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#fieldregexnamingconventions"> + class="net.sourceforge.pmd.lang.apex.rule.codestyle.FieldNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#fieldnamingconventions"> <description> Configurable naming conventions for field declarations. This rule reports variable declarations which do not match the regex that applies to their specific kind ---e.g. constants (static final), @@ -177,11 +161,11 @@ for (int i = 0; i < 42; i++) { // preferred approach </example> </rule> - <rule name="FormalParameterRegexNamingConventions" + <rule name="FormalParameterNamingConventions" since="6.15.0" message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.apex.rule.codestyle.FormalParameterRegexNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#formalparameterregexnamingconventions"> + class="net.sourceforge.pmd.lang.apex.rule.codestyle.FormalParameterNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#formalparameternamingconventions"> <description> Configurable naming conventions for formal parameters of methods. This rule reports formal parameters which do not match the regex that applies to their @@ -202,11 +186,11 @@ public class Foo { </example> </rule> - <rule name="LocalVariableRegexNamingConventions" + <rule name="LocalVariableNamingConventions" since="6.15.0" message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.apex.rule.codestyle.LocalVariableRegexNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#localvariableregexnamingconventions"> + class="net.sourceforge.pmd.lang.apex.rule.codestyle.LocalVariableNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#localvariablenamingconventions"> <description> Configurable naming conventions for local variable declarations. This rule reports variable declarations which do not match the regex that applies to their @@ -231,29 +215,10 @@ public class Foo { <rule name="MethodNamingConventions" since="5.5.0" - message="Method name does not begin with a lower case character." + message="The {0} name ''{1}'' doesn''t match ''{2}''" class="net.sourceforge.pmd.lang.apex.rule.codestyle.MethodNamingConventionsRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#methodnamingconventions"> <description> -Method names should always begin with a lower case character, and should not contain underscores. - </description> - <priority>1</priority> - <example> -<![CDATA[ -public class Foo { - public void fooStuff() { - } -} -]]> - </example> - </rule> - - <rule name="MethodRegexNamingConventions" - since="6.15.0" - message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.apex.rule.codestyle.MethodRegexNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#methodregexnamingconventions"> - <description> Configurable naming conventions for method declarations. This rule reports method declarations which do not match the regex that applies to their specific kind (e.g. static method, or test method). Each regex can be @@ -313,11 +278,11 @@ Integer b; </example> </rule> - <rule name="PropertyRegexNamingConventions" + <rule name="PropertyNamingConventions" since="6.15.0" message="The {0} name ''{1}'' doesn''t match ''{2}''" - class="net.sourceforge.pmd.lang.apex.rule.codestyle.PropertyRegexNamingConventionsRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#propertyregexnamingconventions"> + class="net.sourceforge.pmd.lang.apex.rule.codestyle.PropertyNamingConventionsRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#propertynamingconventions"> <description> Configurable naming conventions for property declarations. This rule reports property declarations which do not match the regex that applies to their diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsTest.java similarity index 77% rename from pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsTest.java rename to pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsTest.java index 3eb7c0dd3a..823a7f32fc 100644 --- a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassRegexNamingConventionsTest.java +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsTest.java @@ -6,6 +6,6 @@ package net.sourceforge.pmd.lang.apex.rule.codestyle; import net.sourceforge.pmd.testframework.PmdRuleTst; -public class ClassRegexNamingConventionsTest extends PmdRuleTst { +public class FieldNamingConventionsTest extends PmdRuleTst { // no additional unit tests } diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsTest.java similarity index 76% rename from pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsTest.java rename to pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsTest.java index 5df2a60127..45dba2964e 100644 --- a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodRegexNamingConventionsTest.java +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsTest.java @@ -6,6 +6,6 @@ package net.sourceforge.pmd.lang.apex.rule.codestyle; import net.sourceforge.pmd.testframework.PmdRuleTst; -public class MethodRegexNamingConventionsTest extends PmdRuleTst { +public class FormalParameterNamingConventionsTest extends PmdRuleTst { // no additional unit tests } diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsTest.java deleted file mode 100644 index 3ccf560db9..0000000000 --- a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterRegexNamingConventionsTest.java +++ /dev/null @@ -1,11 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.apex.rule.codestyle; - -import net.sourceforge.pmd.testframework.PmdRuleTst; - -public class FormalParameterRegexNamingConventionsTest extends PmdRuleTst { - // no additional unit tests -} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsTest.java similarity index 78% rename from pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsTest.java rename to pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsTest.java index bd1e58fa92..6ddf91a354 100644 --- a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyRegexNamingConventionsTest.java +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsTest.java @@ -6,6 +6,6 @@ package net.sourceforge.pmd.lang.apex.rule.codestyle; import net.sourceforge.pmd.testframework.PmdRuleTst; -public class PropertyRegexNamingConventionsTest extends PmdRuleTst { +public class LocalVariableNamingConventionsTest extends PmdRuleTst { // no additional unit tests } diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsTest.java deleted file mode 100644 index 641184d922..0000000000 --- a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableRegexNamingConventionsTest.java +++ /dev/null @@ -1,11 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.apex.rule.codestyle; - -import net.sourceforge.pmd.testframework.PmdRuleTst; - -public class LocalVariableRegexNamingConventionsTest extends PmdRuleTst { - // no additional unit tests -} diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsTest.java similarity index 77% rename from pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsTest.java rename to pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsTest.java index 1cf95b7ad8..413e80ed09 100644 --- a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldRegexNamingConventionsTest.java +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsTest.java @@ -6,6 +6,6 @@ package net.sourceforge.pmd.lang.apex.rule.codestyle; import net.sourceforge.pmd.testframework.PmdRuleTst; -public class FieldRegexNamingConventionsTest extends PmdRuleTst { +public class PropertyNamingConventionsTest extends PmdRuleTst { // no additional unit tests } diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassNamingConventions.xml index 4f9f93b79f..8817e4f30b 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassNamingConventions.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassNamingConventions.xml @@ -20,5 +20,143 @@ public class foo {}; public class FooBar {}; ]]></code> </test-code> + + <test-code> + <description>test class all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +@isTest +public class TestClass { } + ]]></code> + </test-code> + + <test-code> + <description>abstract class all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public abstract class AbstractClass { } + ]]></code> + </test-code> + + <test-code> + <description>class all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class FooClass { } + ]]></code> + </test-code> + + <test-code> + <description>interface all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public interface FooInterface { } + ]]></code> + </test-code> + + <test-code> + <description>enum all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public enum FooEnum { } +} + ]]></code> + </test-code> + + <test-code> + <description>test class default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The test class name 'testClass' doesn't match '[A-Z][a-zA-Z0-9_]*'</message> + </expected-messages> + <code><![CDATA[ +@isTest +public class testClass { } + ]]></code> + </test-code> + + <test-code> + <description>abstract class default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The abstract class name 'abstractClass' doesn't match '[A-Z][a-zA-Z0-9_]*'</message> + </expected-messages> + <code><![CDATA[ +public abstract class abstractClass { } + ]]></code> + </test-code> + + <test-code> + <description>class default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The class name 'fooClass' doesn't match '[A-Z][a-zA-Z0-9_]*'</message> + </expected-messages> + <code><![CDATA[ +public class fooClass { } + ]]></code> + </test-code> + + <test-code> + <description>interface default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The interface name 'fooInterface' doesn't match '[A-Z][a-zA-Z0-9_]*'</message> + </expected-messages> + <code><![CDATA[ +public interface fooInterface { } + ]]></code> + </test-code> + + <test-code> + <description>enum default is title case</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message>The enum name 'fooEnum' doesn't match '[A-Z][a-zA-Z0-9_]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public enum fooEnum { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom test class pattern</description> + <rule-property name="testClassPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +@isTest +public class TEST_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>custom abstract class pattern</description> + <rule-property name="abstractClassPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public abstract class ABSTRACT_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>custom class pattern</description> + <rule-property name="classPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class FOO_CLASS { } + ]]></code> + </test-code> + + <test-code> + <description>custom interface pattern</description> + <rule-property name="interfacePattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public interface FOO_INTERFACE { } + ]]></code> + </test-code> </test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml deleted file mode 100644 index fc36f4c71c..0000000000 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/ClassRegexNamingConventions.xml +++ /dev/null @@ -1,146 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<test-data - xmlns="http://pmd.sourceforge.net/rule-tests" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> - - <test-code> - <description>test class all is well</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -@isTest -public class TestClass { } - ]]></code> - </test-code> - - <test-code> - <description>abstract class all is well</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public abstract class AbstractClass { } - ]]></code> - </test-code> - - <test-code> - <description>class all is well</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class FooClass { } - ]]></code> - </test-code> - - <test-code> - <description>interface all is well</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public interface FooInterface { } - ]]></code> - </test-code> - - <test-code> - <description>enum all is well</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class Foo { - public enum FooEnum { } -} - ]]></code> - </test-code> - - <test-code> - <description>test class default is title case</description> - <expected-problems>1</expected-problems> - <expected-messages> - <message>The test class name 'TEST_CLASS' doesn't match '[A-Z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -@isTest -public class TEST_CLASS { } - ]]></code> - </test-code> - - <test-code> - <description>abstract class default is title case</description> - <expected-problems>1</expected-problems> - <expected-messages> - <message>The abstract class name 'ABSTRACT_CLASS' doesn't match '[A-Z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -public abstract class ABSTRACT_CLASS { } - ]]></code> - </test-code> - - <test-code> - <description>class default is title case</description> - <expected-problems>1</expected-problems> - <expected-messages> - <message>The class name 'FOO_CLASS' doesn't match '[A-Z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -public class FOO_CLASS { } - ]]></code> - </test-code> - - <test-code> - <description>interface default is title case</description> - <expected-problems>1</expected-problems> - <expected-messages> - <message>The interface name 'FOO_INTERFACE' doesn't match '[A-Z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -public interface FOO_INTERFACE { } - ]]></code> - </test-code> - - <test-code> - <description>enum default is title case</description> - <expected-problems>1</expected-problems> - <expected-messages> - <message>The enum name 'FOO_ENUM' doesn't match '[A-Z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -public class Foo { - public enum FOO_ENUM { } -} - ]]></code> - </test-code> - - <test-code> - <description>custom test class pattern</description> - <rule-property name="testClassPattern">[a-zA-Z0-9_]+</rule-property> - <expected-problems>0</expected-problems> - <code><![CDATA[ -@isTest -public class TEST_CLASS { } - ]]></code> - </test-code> - - <test-code> - <description>custom abstract class pattern</description> - <rule-property name="abstractClassPattern">[a-zA-Z0-9_]+</rule-property> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public abstract class ABSTRACT_CLASS { } - ]]></code> - </test-code> - - <test-code> - <description>custom class pattern</description> - <rule-property name="classPattern">[a-zA-Z0-9_]+</rule-property> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class FOO_CLASS { } - ]]></code> - </test-code> - - <test-code> - <description>custom interface pattern</description> - <rule-property name="interfacePattern">[a-zA-Z0-9_]+</rule-property> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public interface FOO_INTERFACE { } - ]]></code> - </test-code> - -</test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldNamingConventions.xml similarity index 100% rename from pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldRegexNamingConventions.xml rename to pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FieldNamingConventions.xml diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterNamingConventions.xml similarity index 100% rename from pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterRegexNamingConventions.xml rename to pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/FormalParameterNamingConventions.xml diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/LocalVariableRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/LocalVariableNamingConventions.xml similarity index 100% rename from pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/LocalVariableRegexNamingConventions.xml rename to pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/LocalVariableNamingConventions.xml diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodNamingConventions.xml index 0a1798e969..ea9db4a8d0 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodNamingConventions.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodNamingConventions.xml @@ -100,4 +100,131 @@ public class Foo { } ]]></code> </test-code> + + <test-code> + <description>all is well</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + @isTest + public static void testMethod() { } + public static void staticMethod() { } + public void instanceMethod() { } +} + ]]></code> + </test-code> + + <test-code> + <description>default is camel case</description> + <expected-problems>3</expected-problems> + <expected-messages> + <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + @isTest + public static void TEST_METHOD() { } + public static void STATIC_METHOD() { } + public void INSTANCE_METHOD() { } +} + ]]></code> + </test-code> + + <test-code> + <description>ignores overrides</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public override Integer BAR() { } +} + ]]></code> + </test-code> + + <test-code> + <description>ignores properties</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public Integer BAR { get; set; } +} + ]]></code> + </test-code> + + <test-code> + <description>ignores constructors</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class FOO { + public FOO() { } +} + ]]></code> + </test-code> + + <test-code> + <description>ignores enum methods</description> + <rule-property name="instancePattern">Z</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + enum Bar { + } +} + ]]></code> + </test-code> + + <test-code> + <description>custom test method pattern</description> + <rule-property name="testPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + @isTest + public static void TEST_METHOD() { } + public static void STATIC_METHOD() { } + public void INSTANCE_METHOD() { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom static method pattern</description> + <rule-property name="staticPattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + @isTest + public static void TEST_METHOD() { } + public static void STATIC_METHOD() { } + public void INSTANCE_METHOD() { } +} + ]]></code> + </test-code> + + <test-code> + <description>custom instance method pattern</description> + <rule-property name="instancePattern">[a-zA-Z0-9_]+</rule-property> + <expected-problems>2</expected-problems> + <expected-messages> + <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + @isTest + public static void TEST_METHOD() { } + public static void STATIC_METHOD() { } + public void INSTANCE_METHOD() { } +} + ]]></code> + </test-code> </test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml deleted file mode 100644 index 7d87d71fdc..0000000000 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/MethodRegexNamingConventions.xml +++ /dev/null @@ -1,134 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<test-data - xmlns="http://pmd.sourceforge.net/rule-tests" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> - - <test-code> - <description>all is well</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class Foo { - @isTest - public static void testMethod() { } - public static void staticMethod() { } - public void instanceMethod() { } -} - ]]></code> - </test-code> - - <test-code> - <description>default is camel case</description> - <expected-problems>3</expected-problems> - <expected-messages> - <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -public class Foo { - @isTest - public static void TEST_METHOD() { } - public static void STATIC_METHOD() { } - public void INSTANCE_METHOD() { } -} - ]]></code> - </test-code> - - <test-code> - <description>ignores overrides</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class Foo { - public override Integer BAR() { } -} - ]]></code> - </test-code> - - <test-code> - <description>ignores properties</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class Foo { - public Integer BAR { get; set; } -} - ]]></code> - </test-code> - - <test-code> - <description>ignores constructors</description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class FOO { - public FOO() { } -} - ]]></code> - </test-code> - - <test-code> - <description>ignores enum methods</description> - <rule-property name="instancePattern">Z</rule-property> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class Foo { - enum Bar { - } -} - ]]></code> - </test-code> - - <test-code> - <description>custom test method pattern</description> - <rule-property name="testPattern">[a-zA-Z0-9_]+</rule-property> - <expected-problems>2</expected-problems> - <expected-messages> - <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -public class Foo { - @isTest - public static void TEST_METHOD() { } - public static void STATIC_METHOD() { } - public void INSTANCE_METHOD() { } -} - ]]></code> - </test-code> - - <test-code> - <description>custom static method pattern</description> - <rule-property name="staticPattern">[a-zA-Z0-9_]+</rule-property> - <expected-problems>2</expected-problems> - <expected-messages> - <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - <message>The instance method name 'INSTANCE_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -public class Foo { - @isTest - public static void TEST_METHOD() { } - public static void STATIC_METHOD() { } - public void INSTANCE_METHOD() { } -} - ]]></code> - </test-code> - - <test-code> - <description>custom instance method pattern</description> - <rule-property name="instancePattern">[a-zA-Z0-9_]+</rule-property> - <expected-problems>2</expected-problems> - <expected-messages> - <message>The test method name 'TEST_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - <message>The static method name 'STATIC_METHOD' doesn't match '[a-z][a-zA-Z0-9]*'</message> - </expected-messages> - <code><![CDATA[ -public class Foo { - @isTest - public static void TEST_METHOD() { } - public static void STATIC_METHOD() { } - public void INSTANCE_METHOD() { } -} - ]]></code> - </test-code> -</test-data> diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/PropertyRegexNamingConventions.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/PropertyNamingConventions.xml similarity index 100% rename from pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/PropertyRegexNamingConventions.xml rename to pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/codestyle/xml/PropertyNamingConventions.xml From 609750332a27a9f905c4dd65beef618c2f7e009e Mon Sep 17 00:00:00 2001 From: Jeff Hube <jeff2365@gmail.com> Date: Tue, 14 May 2019 11:33:34 -0400 Subject: [PATCH 098/371] Deprecate VariableNamingConventionsRule --- .../apex/rule/codestyle/VariableNamingConventionsRule.java | 1 + pmd-apex/src/main/resources/category/apex/codestyle.xml | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/VariableNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/VariableNamingConventionsRule.java index ff1cc6caa2..19ca2c92a8 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/VariableNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/VariableNamingConventionsRule.java @@ -21,6 +21,7 @@ import net.sourceforge.pmd.lang.apex.ast.ApexNode; import net.sourceforge.pmd.lang.apex.rule.AbstractApexRule; import net.sourceforge.pmd.properties.PropertyDescriptor; +@Deprecated public class VariableNamingConventionsRule extends AbstractApexRule { private boolean checkMembers; diff --git a/pmd-apex/src/main/resources/category/apex/codestyle.xml b/pmd-apex/src/main/resources/category/apex/codestyle.xml index a73567c18b..06800f2403 100644 --- a/pmd-apex/src/main/resources/category/apex/codestyle.xml +++ b/pmd-apex/src/main/resources/category/apex/codestyle.xml @@ -305,6 +305,7 @@ public class Foo { <rule name="VariableNamingConventions" since="5.5.0" + deprecated="true" message="{0} variable {1} should begin with {2}" class="net.sourceforge.pmd.lang.apex.rule.codestyle.VariableNamingConventionsRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#variablenamingconventions"> @@ -312,6 +313,12 @@ public class Foo { A variable naming conventions rule - customize this to your liking. Currently, it checks for final variables that should be fully capitalized and non-final variables that should not include underscores. + +This rule is deprecated. The rule is replaced +by the more general rules {% rule apex/codestyle/FieldNamingConventions %}, +{% rule apex/codestyle/FormalParameterNamingConventions %}, +{% rule apex/codestyle/LocalVariableNamingConventions %}, and +{% rule apex/codestyle/PropertyNamingConventions %}. </description> <priority>1</priority> <example> From abb8d705153cdc8f618954e7a0a87497e37b4354 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 16 May 2019 18:54:12 +0200 Subject: [PATCH 099/371] Update release notes, fixes #1784, refs #1820 --- docs/pages/release_notes.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index fc4ad1d256..87ca95fc24 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -39,8 +39,12 @@ Example: `auto integer_literal = 1'000'000;` The single quotes can be used to add some structure to large numbers. +CPD also parses raw string literals now correctly (see [#1784](https://github.com/pmd/pmd/issues/1784)). + ### Fixed Issues +* cpp + * [#1784](https://github.com/pmd/pmd/issues/1784): \[cpp] Improve support for raw string literals * dart * [#1809](https://github.com/pmd/pmd/issues/1809): \[dart] \[cpd] Parse error with escape sequences * java-bestpractices @@ -62,6 +66,7 @@ The single quotes can be used to add some structure to large numbers. * [#1807](https://github.com/pmd/pmd/pull/1807): \[ci] Fix missing local branch issues when executing pmd-regression-tester - [BBG](https://github.com/djydewang) * [#1813](https://github.com/pmd/pmd/pull/1813): \[matlab] \[cpd] Matlab comments - [Maikel Steneker](https://github.com/maikelsteneker) * [#1819](https://github.com/pmd/pmd/pull/1819): \[cpp] \[cpd] Add support for digit separators - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1820](https://github.com/pmd/pmd/pull/1820): \[cpp] \[cpd] Improve support for raw string literals - [Maikel Steneker](https://github.com/maikelsteneker) * [#1821](https://github.com/pmd/pmd/pull/1821): \[matlab] \[cpd] Matlab question mark token - [Maikel Steneker](https://github.com/maikelsteneker) * [#1822](https://github.com/pmd/pmd/pull/1822): \[matlab] \[cpd] Double quoted string - [Maikel Steneker](https://github.com/maikelsteneker) From bce37244f7021cbefe0f4f6309c2eef049463696 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 17 May 2019 15:06:56 +0200 Subject: [PATCH 100/371] First assign the comments and then add the comments to the nodes in a second pass. --- .../pmd/lang/apex/ast/ApexTreeBuilder.java | 114 +++++++++--------- .../apex/rule/documentation/xml/ApexDoc.xml | 27 ++++- 2 files changed, 84 insertions(+), 57 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ApexTreeBuilder.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ApexTreeBuilder.java index 75e383bebb..75a5fc0904 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ApexTreeBuilder.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/ApexTreeBuilder.java @@ -6,8 +6,8 @@ package net.sourceforge.pmd.lang.apex.ast; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Stack; @@ -18,6 +18,8 @@ import org.antlr.runtime.Token; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.ast.SourceCodePositioner; +import apex.jorje.data.Location; +import apex.jorje.data.Locations; import apex.jorje.parser.impl.ApexLexer; import apex.jorje.semantic.ast.AstNode; import apex.jorje.semantic.ast.compilation.AnonymousClass; @@ -272,14 +274,18 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { nodes.pop(); parents.pop(); + if (nodes.isEmpty()) { + // add the comments only at the end of the processing as the last step + addFormalComments(); + } + return node; } - private void buildFormalComment(AstNode node) { - if (parents.peek() == node) { - ApexNode<?> parent = (ApexNode<?>) nodes.peek(); - ApexDocTokenLocation tokenLocation = getApexDocTokenLocation(getApexDocIndex(parent)); - if (tokenLocation != null) { + private void addFormalComments() { + for (ApexDocTokenLocation tokenLocation : apexDocTokenLocations) { + ApexNode<?> parent = tokenLocation.nearestNode; + if (parent != null) { ASTFormalComment comment = new ASTFormalComment(tokenLocation.token); comment.calculateLineNumbers(sourceCodePositioner, tokenLocation.index, tokenLocation.index + tokenLocation.token.length()); @@ -295,51 +301,61 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { } } - private int getApexDocIndex(ApexNode<?> node) { - ASTAnnotation annotation = node.getFirstDescendantOfType(ASTAnnotation.class); - ApexNode<?> firstNode = annotation == null ? node : annotation; - final int index = firstNode.getNode().getLoc().getStartIndex(); - return sourceCode.lastIndexOf('\n', index); + private void buildFormalComment(AstNode node) { + if (parents.peek() == node) { + ApexNode<?> parent = (ApexNode<?>) nodes.peek(); + assignApexDocTokenToNode(node, parent); + } } - private ApexDocTokenLocation getApexDocTokenLocation(int index) { - for (ApexDocTokenLocation loc : apexDocTokenLocations) { - if (index >= loc.targetStart) { - if (index <= loc.targetEnd) { - return loc; - } - } else { - // remaining tokens start after the index we are looking for + /** + * Only remembers the node, to which the comment could belong. + * Since the visiting order of the nodes does not match the source order, + * the nodes appearing later in the source might be visiting first. + * The correct node will then be visited afterwards, and since the distance + * to the comment is smaller, it overrides the remembered node. + * @param jorjeNode the original node + * @param node the potential parent node, to which the comment could belong + */ + private void assignApexDocTokenToNode(AstNode jorjeNode, ApexNode<?> node) { + Location loc = jorjeNode.getLoc(); + if (!Locations.isReal(loc)) { + // Synthetic nodes such as "<clinit>" don't have a location in the + // source code, since they are generated by the compiler + return; + } + // find the token, that appears as close as possible before the node + int nodeStart = loc.getStartIndex(); + for (ApexDocTokenLocation tokenLocation : apexDocTokenLocations) { + if (tokenLocation.index > nodeStart) { + // this and all remaining tokens are after the node + // so no need to check the remaining tokens. break; } + + int distance = nodeStart - tokenLocation.index; + if (tokenLocation.nearestNode == null || distance < tokenLocation.nearestNodeDistance) { + tokenLocation.nearestNode = node; + tokenLocation.nearestNodeDistance = distance; + } } - return null; } private static List<ApexDocTokenLocation> buildApexDocTokenLocations(String source) { ANTLRStringStream stream = new ANTLRStringStream(source); ApexLexer lexer = new ApexLexer(stream); - ArrayList<ApexDocTokenLocation> tokenLocations = new ArrayList<>(); + List<ApexDocTokenLocation> tokenLocations = new LinkedList<>(); int startIndex = 0; Token token = lexer.nextToken(); int endIndex = lexer.getCharIndex(); - String currentToken = null; - int currentIndex = 0; - int currentTargetStart = 0; - while (token.getType() != Token.EOF) { if (token.getType() == ApexLexer.BLOCK_COMMENT) { // Filter only block comments starting with "/**" if (token.getText().startsWith("/**")) { - currentToken = token.getText(); - currentIndex = startIndex; - currentTargetStart = lexer.getCharIndex(); + tokenLocations.add(new ApexDocTokenLocation(startIndex, token.getText())); } - } else if (currentToken != null && token.getType() != ApexLexer.WS) { - tokenLocations.add(new ApexDocTokenLocation(currentIndex, currentToken, currentTargetStart, lexer.getCharIndex())); - currentToken = null; } // TODO : Check other non-doc comments and tokens of type ApexLexer.EOL_COMMENT for "NOPMD" suppressions startIndex = endIndex; @@ -353,14 +369,12 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { private static class ApexDocTokenLocation { int index; String token; - int targetStart; - int targetEnd; + ApexNode<?> nearestNode; + int nearestNodeDistance; - ApexDocTokenLocation(int index, String token, int targetStart, int targetEnd) { + ApexDocTokenLocation(int index, String token) { this.index = index; this.token = token; - this.targetStart = targetStart; - this.targetEnd = targetEnd; } } @@ -380,12 +394,9 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { @Override public boolean visit(UserInterface node, AdditionalPassScope scope) { - return visit(node); - } - - @Override - public void visitEnd(UserInterface node, AdditionalPassScope scope) { + final boolean ret = visit(node); buildFormalComment(node); + return ret; } @Override @@ -670,12 +681,9 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { @Override public boolean visit(Property node, AdditionalPassScope scope) { - return visit(node); - } - - @Override - public void visitEnd(Property node, AdditionalPassScope scope) { + final boolean ret = visit(node); buildFormalComment(node); + return ret; } @Override @@ -740,22 +748,16 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> { @Override public boolean visit(UserClass node, AdditionalPassScope scope) { - return visit(node); - } - - @Override - public void visitEnd(UserClass node, AdditionalPassScope scope) { + final boolean ret = visit(node); buildFormalComment(node); + return ret; } @Override public boolean visit(Method node, AdditionalPassScope scope) { - return visit(node); - } - - @Override - public void visitEnd(Method node, AdditionalPassScope scope) { + final boolean ret = visit(node); buildFormalComment(node); + return ret; } @Override diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/documentation/xml/ApexDoc.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/documentation/xml/ApexDoc.xml index 8258932d81..28946ce929 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/documentation/xml/ApexDoc.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/documentation/xml/ApexDoc.xml @@ -52,6 +52,10 @@ private class Foo { } <test-code> <description>class comment should have description</description> <expected-problems>1</expected-problems> + <expected-linenumbers>3</expected-linenumbers> + <expected-messages> + <message>Missing ApexDoc @description</message> + </expected-messages> <code><![CDATA[ /** */ @@ -399,7 +403,7 @@ public class Foo { </test-code> <test-code> - <description>correct comments for constructor and inner class</description> + <description>#1783 correct comments for constructor and inner class</description> <expected-problems>0</expected-problems> <code><![CDATA[ /** @@ -422,4 +426,25 @@ public class Foo { ]]></code> </test-code> + <test-code> + <description>#1783 correct comments for constructor and inner class - false negative</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>12</expected-linenumbers> + <code><![CDATA[ +/** + * @description Foo + */ +public class Foo { + + /** + * @description Foo + */ + public Foo() { + } + + public class Bar { + } +} + ]]></code> + </test-code> </test-data> From 7de0df16ebf1de795720e14acaa71c32ecd44cc4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 17 May 2019 15:58:37 +0200 Subject: [PATCH 101/371] Update release notes, fixes #1783, refs #1816 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index cdcddea67f..b2ddd23e66 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,8 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* apex + * [#1783](https://github.com/pmd/pmd/issues/1783): \[apex] comments on constructor not recognized when the Class has inner class * dart * [#1809](https://github.com/pmd/pmd/issues/1809): \[dart] \[cpd] Parse error with escape sequences * java-bestpractices @@ -32,6 +34,7 @@ This is a {{ site.pmd.release_type }} release. * [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) * [#1802](https://github.com/pmd/pmd/pull/1802): \[python] \[cpd] Add support for Python 2 backticks - [Maikel Steneker](https://github.com/maikelsteneker) * [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1816](https://github.com/pmd/pmd/pull/1816): \[apex] Fix ApexDoc handling with inner classes - [Jeff Hube](https://github.com/jeffhube) {% endtocmaker %} From eae662ac944a3a4037bb2fbb21c787f422aab1b9 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 17 May 2019 16:14:15 +0200 Subject: [PATCH 102/371] Update release notes, fixes #1321, refs #1817 --- docs/pages/release_notes.md | 40 +++++++++++++++++++ .../resources/category/apex/codestyle.xml | 10 ++--- .../main/resources/rulesets/releases/6150.xml | 17 ++++++++ 3 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 pmd-core/src/main/resources/rulesets/releases/6150.xml diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index cdcddea67f..c265836b94 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,8 +14,47 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### New Rules + +* The new Apex rule {% rule "apex/codestyle/FieldNamingConventions" %} (`apex-codestyle`) checks the naming + conventions for field declarations. By default this rule uses the standard Apex naming convention (Camel case), + but it can be configured through properties. + +* The new Apex rule {% rule "apex/codestyle/FormalParameterNamingConventions" %} (`apex-codestyle`) checks the + naming conventions for formal parameters of methods. By default this rule uses the standard Apex naming + convention (Camel case), but it can be configured through properties. + +* The new Apex rule {% rule "apex/codestyle/LocalVariableNamingConventions" %} (`apex-codestyle`) checks the + naming conventions for local variable declarations. By default this rule uses the standard Apex naming + convention (Camel case), but it can be configured through properties. + +* The new Apex rule {% rule "apex/codestyle/PropertyNamingConventions" %} (`apex-codestyle`) checks the naming + conventions for property declarations. By default this rule uses the standard Apex naming convention (Camel case), + but it can be configured through properties. + +#### Modified Rules + +* The Apex rule {% rule "apex/codestyle/ClassNamingConventions" %} (`apex-codestyle`) can now be configured + using various properties for the specific kind of type declarations (e.g. class, interface, enum). + As before, this rule uses by default the standard Apex naming convention (Pascal case). + +* The Apex rule {% rule "apex/codestyle/MethodNamingConventions" %} (`apex-codestyle`) can now be configured + using various properties to differenciate e.g. static methods and test methods. + As before, this rule uses by default the standard Apex naming convention (Camel case). + +#### Deprecated Rules + +* The Apex rule {% rule "apex/codestyle/VariableNamingConventions" %} (`apex-codestyle`) has been deprecated and + will be removed with PMD 7.0.0. The rule is replaced by the more general rules + {% rule "apex/codestyle/FieldNamingConventions" %}, + {% rule "apex/codestyle/FormalParameterNamingConventions" %}, + {% rule "apex/codestyle/LocalVariableNamingConventions" %}, and + {% rule "apex/codestyle/PropertyNamingConventions" %}. + ### Fixed Issues +* apex + * [#1321](https://github.com/pmd/pmd/issues/1321): \[apex] Should VariableNamingConventions require properties to start with a lowercase letter? * dart * [#1809](https://github.com/pmd/pmd/issues/1809): \[dart] \[cpd] Parse error with escape sequences * java-bestpractices @@ -32,6 +71,7 @@ This is a {{ site.pmd.release_type }} release. * [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) * [#1802](https://github.com/pmd/pmd/pull/1802): \[python] \[cpd] Add support for Python 2 backticks - [Maikel Steneker](https://github.com/maikelsteneker) * [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1817](https://github.com/pmd/pmd/pull/1817): \[apex] Add configurable naming convention rules - [Jeff Hube](https://github.com/jeffhube) {% endtocmaker %} diff --git a/pmd-apex/src/main/resources/category/apex/codestyle.xml b/pmd-apex/src/main/resources/category/apex/codestyle.xml index 06800f2403..262b6f9757 100644 --- a/pmd-apex/src/main/resources/category/apex/codestyle.xml +++ b/pmd-apex/src/main/resources/category/apex/codestyle.xml @@ -314,11 +314,11 @@ A variable naming conventions rule - customize this to your liking. Currently, checks for final variables that should be fully capitalized and non-final variables that should not include underscores. -This rule is deprecated. The rule is replaced -by the more general rules {% rule apex/codestyle/FieldNamingConventions %}, -{% rule apex/codestyle/FormalParameterNamingConventions %}, -{% rule apex/codestyle/LocalVariableNamingConventions %}, and -{% rule apex/codestyle/PropertyNamingConventions %}. +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the more general rules {% rule "apex/codestyle/FieldNamingConventions" %}, +{% rule "apex/codestyle/FormalParameterNamingConventions" %}, +{% rule "apex/codestyle/LocalVariableNamingConventions" %}, and +{% rule "apex/codestyle/PropertyNamingConventions" %}. </description> <priority>1</priority> <example> diff --git a/pmd-core/src/main/resources/rulesets/releases/6150.xml b/pmd-core/src/main/resources/rulesets/releases/6150.xml new file mode 100644 index 0000000000..0d9fb888a0 --- /dev/null +++ b/pmd-core/src/main/resources/rulesets/releases/6150.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> + +<ruleset name="6150" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + <description> +This ruleset contains links to rules that are new in PMD v6.15.0 + </description> + + <rule ref="category/apex/codestyle/FieldNamingConventions"/> + <rule ref="category/apex/codestyle/FormalParameterNamingConventions"/> + <rule ref="category/apex/codestyle/LocalVariableNamingConventions"/> + <rule ref="category/apex/codestyle/PropertyNamingConventions"/> + +</ruleset> + From 7defd6b501d70ac5844bedb9ff200895db7b1cdd Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 17 May 2019 16:29:21 +0200 Subject: [PATCH 103/371] Fix internal ruleset 6150.xml --- pmd-core/src/main/resources/rulesets/releases/6150.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pmd-core/src/main/resources/rulesets/releases/6150.xml b/pmd-core/src/main/resources/rulesets/releases/6150.xml index 0d9fb888a0..25c9b94dad 100644 --- a/pmd-core/src/main/resources/rulesets/releases/6150.xml +++ b/pmd-core/src/main/resources/rulesets/releases/6150.xml @@ -8,10 +8,10 @@ This ruleset contains links to rules that are new in PMD v6.15.0 </description> - <rule ref="category/apex/codestyle/FieldNamingConventions"/> - <rule ref="category/apex/codestyle/FormalParameterNamingConventions"/> - <rule ref="category/apex/codestyle/LocalVariableNamingConventions"/> - <rule ref="category/apex/codestyle/PropertyNamingConventions"/> + <rule ref="category/apex/codestyle.xml/FieldNamingConventions"/> + <rule ref="category/apex/codestyle.xml/FormalParameterNamingConventions"/> + <rule ref="category/apex/codestyle.xml/LocalVariableNamingConventions"/> + <rule ref="category/apex/codestyle.xml/PropertyNamingConventions"/> </ruleset> From bf51f15834c3b67f6ba1aebf114dd823069a7f3c Mon Sep 17 00:00:00 2001 From: "Travis CI (pmd-bot)" <andreas.dangel+pmd-bot@adangel.org> Date: Fri, 17 May 2019 14:51:36 +0000 Subject: [PATCH 104/371] Update documentation TRAVIS_JOB_NUMBER=3757.1 TRAVIS_COMMIT_RANGE=8d21fd52b345...7defd6b501d7 --- docs/pages/pmd/rules/apex.md | 10 +- docs/pages/pmd/rules/apex/codestyle.md | 270 ++++++++++++++++++++++++- 2 files changed, 267 insertions(+), 13 deletions(-) diff --git a/docs/pages/pmd/rules/apex.md b/docs/pages/pmd/rules/apex.md index dec0347f36..d9d4ef3d06 100644 --- a/docs/pages/pmd/rules/apex.md +++ b/docs/pages/pmd/rules/apex.md @@ -22,13 +22,17 @@ folder: pmd/rules {% include callout.html content="Rules which enforce a specific coding style." %} -* [ClassNamingConventions](pmd_rules_apex_codestyle.html#classnamingconventions): Class names should always begin with an upper case character. +* [ClassNamingConventions](pmd_rules_apex_codestyle.html#classnamingconventions): Configurable naming conventions for type declarations. This rule reports type declarat... +* [FieldNamingConventions](pmd_rules_apex_codestyle.html#fieldnamingconventions): Configurable naming conventions for field declarations. This rule reports variable declarations ... * [ForLoopsMustUseBraces](pmd_rules_apex_codestyle.html#forloopsmustusebraces): Avoid using 'for' statements without using surrounding braces. If the code formatting orindentati... +* [FormalParameterNamingConventions](pmd_rules_apex_codestyle.html#formalparameternamingconventions): Configurable naming conventions for formal parameters of methods. This rule reports fo... * [IfElseStmtsMustUseBraces](pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces): Avoid using if..else statements without using surrounding braces. If the code formattingor indent... * [IfStmtsMustUseBraces](pmd_rules_apex_codestyle.html#ifstmtsmustusebraces): Avoid using if statements without using braces to surround the code block. If the codeformatting ... -* [MethodNamingConventions](pmd_rules_apex_codestyle.html#methodnamingconventions): Method names should always begin with a lower case character, and should not contain underscores. +* [LocalVariableNamingConventions](pmd_rules_apex_codestyle.html#localvariablenamingconventions): Configurable naming conventions for local variable declarations. This rule reports var... +* [MethodNamingConventions](pmd_rules_apex_codestyle.html#methodnamingconventions): Configurable naming conventions for method declarations. This rule reports method decl... * [OneDeclarationPerLine](pmd_rules_apex_codestyle.html#onedeclarationperline): Apex allows the use of several variables declaration of the same type on one line. However, itcan... -* [VariableNamingConventions](pmd_rules_apex_codestyle.html#variablenamingconventions): A variable naming conventions rule - customize this to your liking. Currently, itchecks for fina... +* [PropertyNamingConventions](pmd_rules_apex_codestyle.html#propertynamingconventions): Configurable naming conventions for property declarations. This rule reports property ... +* [VariableNamingConventions](pmd_rules_apex_codestyle.html#variablenamingconventions): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> A variable naming conventions rule - customize this to your liking. Currently, itchecks for fina... * [WhileLoopsMustUseBraces](pmd_rules_apex_codestyle.html#whileloopsmustusebraces): Avoid using 'while' statements without using braces to surround the code block. If the codeformat... ## Design diff --git a/docs/pages/pmd/rules/apex/codestyle.md b/docs/pages/pmd/rules/apex/codestyle.md index 7f8f72b1a5..c6286feaa7 100644 --- a/docs/pages/pmd/rules/apex/codestyle.md +++ b/docs/pages/pmd/rules/apex/codestyle.md @@ -5,7 +5,7 @@ permalink: pmd_rules_apex_codestyle.html folder: pmd/rules/apex sidebaractiveurl: /pmd_rules_apex.html editmepath: ../pmd-apex/src/main/resources/category/apex/codestyle.xml -keywords: Code Style, ClassNamingConventions, IfElseStmtsMustUseBraces, IfStmtsMustUseBraces, ForLoopsMustUseBraces, MethodNamingConventions, OneDeclarationPerLine, VariableNamingConventions, WhileLoopsMustUseBraces +keywords: Code Style, ClassNamingConventions, IfElseStmtsMustUseBraces, IfStmtsMustUseBraces, FieldNamingConventions, ForLoopsMustUseBraces, FormalParameterNamingConventions, LocalVariableNamingConventions, MethodNamingConventions, OneDeclarationPerLine, PropertyNamingConventions, VariableNamingConventions, WhileLoopsMustUseBraces language: Apex --- <!-- DO NOT EDIT THIS FILE. This file is generated from file ../pmd-apex/src/main/resources/category/apex/codestyle.xml. --> @@ -15,14 +15,21 @@ language: Apex **Priority:** High (1) -Class names should always begin with an upper case character. +Configurable naming conventions for type declarations. This rule reports +type declarations which do not match the regex that applies to their +specific kind (e.g. enum or interface). Each regex can be configured through +properties. + +By default this rule uses the standard Apex naming convention (Pascal case). **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.apex.rule.codestyle.ClassNamingConventionsRule](https://github.com/pmd/pmd/blob/master/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/ClassNamingConventionsRule.java) **Example(s):** ``` java -public class Foo {} +public class FooClass { } // This is in pascal case, so it's ok + +public class fooClass { } // This will be reported unless you change the regex ``` **This rule has the following properties:** @@ -32,12 +39,85 @@ public class Foo {} |cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| |cc\_remediation\_points\_multiplier|5|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| |cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| +|testClassPattern|\[A-Z\]\[a-zA-Z0-9\_\]\*|Regex which applies to test class names|no| +|abstractClassPattern|\[A-Z\]\[a-zA-Z0-9\_\]\*|Regex which applies to abstract class names|no| +|classPattern|\[A-Z\]\[a-zA-Z0-9\_\]\*|Regex which applies to class names|no| +|interfacePattern|\[A-Z\]\[a-zA-Z0-9\_\]\*|Regex which applies to interface names|no| +|enumPattern|\[A-Z\]\[a-zA-Z0-9\_\]\*|Regex which applies to enum names|no| **Use this rule with the default properties by just referencing it:** ``` xml <rule ref="category/apex/codestyle.xml/ClassNamingConventions" /> ``` +**Use this rule and customize it:** +``` xml +<rule ref="category/apex/codestyle.xml/ClassNamingConventions"> + <properties> + <property name="testClassPattern" value="[A-Z][a-zA-Z0-9_]*" /> + <property name="abstractClassPattern" value="[A-Z][a-zA-Z0-9_]*" /> + <property name="classPattern" value="[A-Z][a-zA-Z0-9_]*" /> + <property name="interfacePattern" value="[A-Z][a-zA-Z0-9_]*" /> + <property name="enumPattern" value="[A-Z][a-zA-Z0-9_]*" /> + </properties> +</rule> +``` + +## FieldNamingConventions + +**Since:** PMD 6.15.0 + +**Priority:** High (1) + +Configurable naming conventions for field declarations. This rule reports variable declarations +which do not match the regex that applies to their specific kind ---e.g. constants (static final), +static field, final field. Each regex can be configured through properties. + +By default this rule uses the standard Apex naming convention (Camel case). + +**This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.apex.rule.codestyle.FieldNamingConventionsRule](https://github.com/pmd/pmd/blob/master/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsRule.java) + +**Example(s):** + +``` java +public class Foo { + Integer instanceField; // This is in camel case, so it's ok + + Integer INSTANCE_FIELD; // This will be reported unless you change the regex +} +``` + +**This rule has the following properties:** + +|Name|Default Value|Description|Multivalued| +|----|-------------|-----------|-----------| +|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| +|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| +|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| +|enumConstantPattern|\[A-Z\]\[A-Z0-9\_\]\*|Regex which applies to enum constant field names|no| +|constantPattern|\[A-Z\]\[A-Z0-9\_\]\*|Regex which applies to constant field names|no| +|finalPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to final field names|no| +|staticPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to static field names|no| +|instancePattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to instance field names|no| + +**Use this rule with the default properties by just referencing it:** +``` xml +<rule ref="category/apex/codestyle.xml/FieldNamingConventions" /> +``` + +**Use this rule and customize it:** +``` xml +<rule ref="category/apex/codestyle.xml/FieldNamingConventions"> + <properties> + <property name="enumConstantPattern" value="[A-Z][A-Z0-9_]*" /> + <property name="constantPattern" value="[A-Z][A-Z0-9_]*" /> + <property name="finalPattern" value="[a-z][a-zA-Z0-9]*" /> + <property name="staticPattern" value="[a-z][a-zA-Z0-9]*" /> + <property name="instancePattern" value="[a-z][a-zA-Z0-9]*" /> + </properties> +</rule> +``` + ## ForLoopsMustUseBraces **Since:** PMD 5.6.0 @@ -79,6 +159,56 @@ for (int i = 0; i < 42; i++) { // preferred approach <rule ref="category/apex/codestyle.xml/ForLoopsMustUseBraces" /> ``` +## FormalParameterNamingConventions + +**Since:** PMD 6.15.0 + +**Priority:** High (1) + +Configurable naming conventions for formal parameters of methods. +This rule reports formal parameters which do not match the regex that applies to their +specific kind (e.g. method parameter, or final method parameter). Each regex can be +configured through properties. + +By default this rule uses the standard Apex naming convention (Camel case). + +**This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.apex.rule.codestyle.FormalParameterNamingConventionsRule](https://github.com/pmd/pmd/blob/master/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsRule.java) + +**Example(s):** + +``` java +public class Foo { + public bar(Integer methodParameter) { } // This is in camel case, so it's ok + + public baz(Integer METHOD_PARAMETER) { } // This will be reported unless you change the regex +} +``` + +**This rule has the following properties:** + +|Name|Default Value|Description|Multivalued| +|----|-------------|-----------|-----------| +|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| +|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| +|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| +|finalMethodParameterPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to final method parameter names|no| +|methodParameterPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to method parameter names|no| + +**Use this rule with the default properties by just referencing it:** +``` xml +<rule ref="category/apex/codestyle.xml/FormalParameterNamingConventions" /> +``` + +**Use this rule and customize it:** +``` xml +<rule ref="category/apex/codestyle.xml/FormalParameterNamingConventions"> + <properties> + <property name="finalMethodParameterPattern" value="[a-z][a-zA-Z0-9]*" /> + <property name="methodParameterPattern" value="[a-z][a-zA-Z0-9]*" /> + </properties> +</rule> +``` + ## IfElseStmtsMustUseBraces **Since:** PMD 5.6.0 @@ -161,21 +291,29 @@ if (foo) { // preferred approach <rule ref="category/apex/codestyle.xml/IfStmtsMustUseBraces" /> ``` -## MethodNamingConventions +## LocalVariableNamingConventions -**Since:** PMD 5.5.0 +**Since:** PMD 6.15.0 **Priority:** High (1) -Method names should always begin with a lower case character, and should not contain underscores. +Configurable naming conventions for local variable declarations. +This rule reports variable declarations which do not match the regex that applies to their +specific kind (e.g. local variable, or final local variable). Each regex can be configured through +properties. -**This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.apex.rule.codestyle.MethodNamingConventionsRule](https://github.com/pmd/pmd/blob/master/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodNamingConventionsRule.java) +By default this rule uses the standard Apex naming convention (Camel case). + +**This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.apex.rule.codestyle.LocalVariableNamingConventionsRule](https://github.com/pmd/pmd/blob/master/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsRule.java) **Example(s):** ``` java public class Foo { - public void fooStuff() { + public Foo() { + Integer localVariable; // This is in camel case, so it's ok + + Integer LOCAL_VARIABLE; // This will be reported unless you change the regex } } ``` @@ -187,7 +325,59 @@ public class Foo { |cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| |cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| |cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| -|skipTestMethodUnderscores|false|Skip underscores in test methods|no| +|finalLocalPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to final local variable names|no| +|localPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to local variable names|no| + +**Use this rule with the default properties by just referencing it:** +``` xml +<rule ref="category/apex/codestyle.xml/LocalVariableNamingConventions" /> +``` + +**Use this rule and customize it:** +``` xml +<rule ref="category/apex/codestyle.xml/LocalVariableNamingConventions"> + <properties> + <property name="finalLocalPattern" value="[a-z][a-zA-Z0-9]*" /> + <property name="localPattern" value="[a-z][a-zA-Z0-9]*" /> + </properties> +</rule> +``` + +## MethodNamingConventions + +**Since:** PMD 5.5.0 + +**Priority:** High (1) + +Configurable naming conventions for method declarations. This rule reports +method declarations which do not match the regex that applies to their +specific kind (e.g. static method, or test method). Each regex can be +configured through properties. + +By default this rule uses the standard Apex naming convention (Camel case). + +**This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.apex.rule.codestyle.MethodNamingConventionsRule](https://github.com/pmd/pmd/blob/master/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/MethodNamingConventionsRule.java) + +**Example(s):** + +``` java +public class Foo { + public void instanceMethod() { } // This is in camel case, so it's ok + + public void INSTANCE_METHOD() { } // This will be reported unless you change the regex +``` + +**This rule has the following properties:** + +|Name|Default Value|Description|Multivalued| +|----|-------------|-----------|-----------| +|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| +|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| +|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| +|skipTestMethodUnderscores|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Skip underscores in test methods|no| +|testPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to test method names|no| +|staticPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to static method names|no| +|instancePattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to instance method names|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -198,7 +388,9 @@ public class Foo { ``` xml <rule ref="category/apex/codestyle.xml/MethodNamingConventions"> <properties> - <property name="skipTestMethodUnderscores" value="false" /> + <property name="testPattern" value="[a-z][a-zA-Z0-9]*" /> + <property name="staticPattern" value="[a-z][a-zA-Z0-9]*" /> + <property name="instancePattern" value="[a-z][a-zA-Z0-9]*" /> </properties> </rule> ``` @@ -258,8 +450,60 @@ Integer b; </rule> ``` +## PropertyNamingConventions + +**Since:** PMD 6.15.0 + +**Priority:** High (1) + +Configurable naming conventions for property declarations. This rule reports +property declarations which do not match the regex that applies to their +specific kind (e.g. static property, or instance property). Each regex can be +configured through properties. + +By default this rule uses the standard Apex naming convention (Camel case). + +**This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.apex.rule.codestyle.PropertyNamingConventionsRule](https://github.com/pmd/pmd/blob/master/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsRule.java) + +**Example(s):** + +``` java +public class Foo { + public Integer instanceProperty { get; set; } // This is in camel case, so it's ok + + public Integer INSTANCE_PROPERTY { get; set; } // This will be reported unless you change the regex +} +``` + +**This rule has the following properties:** + +|Name|Default Value|Description|Multivalued| +|----|-------------|-----------|-----------| +|cc\_categories|Style|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Categories|yes. Delimiter is '\|'.| +|cc\_remediation\_points\_multiplier|1|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Remediation Points multiplier|no| +|cc\_block\_highlighting|false|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Code Climate Block Highlighting|no| +|staticPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to static property names|no| +|instancePattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to instance property names|no| + +**Use this rule with the default properties by just referencing it:** +``` xml +<rule ref="category/apex/codestyle.xml/PropertyNamingConventions" /> +``` + +**Use this rule and customize it:** +``` xml +<rule ref="category/apex/codestyle.xml/PropertyNamingConventions"> + <properties> + <property name="staticPattern" value="[a-z][a-zA-Z0-9]*" /> + <property name="instancePattern" value="[a-z][a-zA-Z0-9]*" /> + </properties> +</rule> +``` + ## VariableNamingConventions +<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f;">Deprecated</span> + **Since:** PMD 5.5.0 **Priority:** High (1) @@ -268,6 +512,12 @@ A variable naming conventions rule - customize this to your liking. Currently, checks for final variables that should be fully capitalized and non-final variables that should not include underscores. +This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced +by the more general rules {% rule "apex/codestyle/FieldNamingConventions" %}, +{% rule "apex/codestyle/FormalParameterNamingConventions" %}, +{% rule "apex/codestyle/LocalVariableNamingConventions" %}, and +{% rule "apex/codestyle/PropertyNamingConventions" %}. + **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.apex.rule.codestyle.VariableNamingConventionsRule](https://github.com/pmd/pmd/blob/master/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/VariableNamingConventionsRule.java) **Example(s):** From d31c66cd5b166c3df95365c8464b581548b0c350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Sat, 18 May 2019 16:35:57 +0200 Subject: [PATCH 105/371] Remove CC categories in new rules Fixes compilation --- .../lang/apex/rule/codestyle/FieldNamingConventionsRule.java | 5 ----- .../rule/codestyle/FormalParameterNamingConventionsRule.java | 5 ----- .../rule/codestyle/LocalVariableNamingConventionsRule.java | 5 ----- .../apex/rule/codestyle/PropertyNamingConventionsRule.java | 5 ----- 4 files changed, 20 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsRule.java index d5c19968dc..27f464bca5 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldNamingConventionsRule.java @@ -39,11 +39,6 @@ public class FieldNamingConventionsRule extends AbstractNamingConventionsRule { definePropertyDescriptor(STATIC_REGEX); definePropertyDescriptor(INSTANCE_REGEX); - setProperty(CODECLIMATE_CATEGORIES, "Style"); - // Note: x10 as Apex has not automatic refactoring - setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); - setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); - addRuleChainVisit(ASTField.class); } diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsRule.java index 8c611cb2e3..ae1a606409 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/FormalParameterNamingConventionsRule.java @@ -24,11 +24,6 @@ public class FormalParameterNamingConventionsRule extends AbstractNamingConventi definePropertyDescriptor(FINAL_METHOD_PARAMETER_REGEX); definePropertyDescriptor(METHOD_PARAMETER_REGEX); - setProperty(CODECLIMATE_CATEGORIES, "Style"); - // Note: x10 as Apex has not automatic refactoring - setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); - setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); - addRuleChainVisit(ASTParameter.class); } diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsRule.java index ee19980719..4969f429b1 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/LocalVariableNamingConventionsRule.java @@ -25,11 +25,6 @@ public class LocalVariableNamingConventionsRule extends AbstractNamingConvention definePropertyDescriptor(FINAL_REGEX); definePropertyDescriptor(LOCAL_REGEX); - setProperty(CODECLIMATE_CATEGORIES, "Style"); - // Note: x10 as Apex has not automatic refactoring - setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); - setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); - addRuleChainVisit(ASTVariableDeclaration.class); } diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsRule.java index 70ad5594e1..376bc93b92 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/codestyle/PropertyNamingConventionsRule.java @@ -25,11 +25,6 @@ public class PropertyNamingConventionsRule extends AbstractNamingConventionsRule definePropertyDescriptor(STATIC_REGEX); definePropertyDescriptor(INSTANCE_REGEX); - setProperty(CODECLIMATE_CATEGORIES, "Style"); - // Note: x10 as Apex has not automatic refactoring - setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); - setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); - addRuleChainVisit(ASTField.class); } From 3b646edd718736c6d7bd643e3a600b0d4d89b509 Mon Sep 17 00:00:00 2001 From: Michael Hausegger <hausegger.michael@googlemail.com> Date: Mon, 20 May 2019 17:08:50 +0200 Subject: [PATCH 106/371] Small minor performance improvements --- pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java | 4 ++-- .../main/java/net/sourceforge/pmd/util/designer/Designer.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java index 916276502a..fd7e436af2 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/GUI.java @@ -421,7 +421,7 @@ public class GUI implements CPDListener { ignoreAnnotationsCheckbox.setEnabled(current.canIgnoreAnnotations()); ignoreUsingsCheckbox.setEnabled(current.canIgnoreUsings()); extensionField.setText(current.extensions()[0]); - boolean enableExtension = current.extensions()[0].length() == 0; + boolean enableExtension = current.extensions()[0].isEmpty(); extensionField.setEnabled(enableExtension); extensionLabel.setEnabled(enableExtension); } @@ -611,7 +611,7 @@ public class GUI implements CPDListener { private boolean isLegalPath(String path, LanguageConfig config) { String[] extensions = config.extensions(); for (int i = 0; i < extensions.length; i++) { - if (path.endsWith(extensions[i]) && extensions[i].length() > 0) { + if (path.endsWith(extensions[i]) && !extensions[i].isEmpty()) { return true; } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/util/designer/Designer.java b/pmd-core/src/main/java/net/sourceforge/pmd/util/designer/Designer.java index a43fa65778..90af1421f5 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/util/designer/Designer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/util/designer/Designer.java @@ -939,7 +939,7 @@ public class Designer implements ClipboardOwner { } private String getXmlTreeCode() { - if (codeEditorPane.getText() != null && codeEditorPane.getText().trim().length() > 0) { + if (codeEditorPane.getText() != null && !codeEditorPane.getText().trim().isEmpty()) { Node cu = getCompilationUnit(); return getXmlTreeCode(cu); } From bcf0de6880c9a0f81cd8171127819014bc38abca Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Tue, 21 May 2019 14:33:07 +0200 Subject: [PATCH 107/371] Various unit tests for strings that are currently not handled correctly by the Dart tokenizer. --- .../java/net/sourceforge/pmd/cpd/DartTokenizerTest.java | 6 +++++- .../src/test/resources/net/sourceforge/pmd/cpd/regex.dart | 3 +++ .../src/test/resources/net/sourceforge/pmd/cpd/regex2.dart | 3 +++ .../src/test/resources/net/sourceforge/pmd/cpd/regex3.dart | 3 +++ .../net/sourceforge/pmd/cpd/string_with_backslashes.dart | 3 +++ 5 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex.dart create mode 100644 pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex2.dart create mode 100644 pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex3.dart create mode 100644 pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/string_with_backslashes.dart diff --git a/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java b/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java index 373444edfa..d6517df023 100644 --- a/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java +++ b/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java @@ -35,7 +35,11 @@ public class DartTokenizerTest extends AbstractTokenizerTest { new Object[] { "escaped_backslash.dart", 14 }, new Object[] { "escaped_string.dart", 17 }, new Object[] { "increment.dart", 185 }, - new Object[] { "imports.dart", 1 } + new Object[] { "imports.dart", 1 }, + new Object[] { "regex.dart", 13 }, + new Object[] { "regex2.dart", 13 }, + new Object[] { "regex3.dart", 13 }, + new Object[] { "string_with_backslashes.dart", 9 } ); } diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex.dart new file mode 100644 index 0000000000..14f45f2955 --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex.dart @@ -0,0 +1,3 @@ +class MyClass { + final regex = new RegExp(r'^--([a-zA-Z\-_0-9]+)(=(.*))?$'); +} diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex2.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex2.dart new file mode 100644 index 0000000000..57decc436c --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex2.dart @@ -0,0 +1,3 @@ +class MyClass { + final regex = new RegExp(r"(^[a-zA-Z][-+.a-zA-Z\d]*://|[^/])$"); +} diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex3.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex3.dart new file mode 100644 index 0000000000..c5de8271b7 --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/regex3.dart @@ -0,0 +1,3 @@ +class MyClass { + final regex = new RegExp(r'''[ \t\r\n"'\\/]'''); +} diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/string_with_backslashes.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/string_with_backslashes.dart new file mode 100644 index 0000000000..bc7168870c --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/string_with_backslashes.dart @@ -0,0 +1,3 @@ +class MyClass { + final stringWithBackslashes = "Escaping\ spaces\ should work"; +} From 806b130e4a3c834280d695806274740bab7afb6c Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Tue, 21 May 2019 14:33:43 +0200 Subject: [PATCH 108/371] Improved Dart tokenizer to handle strings correctly. This is based on the grammar at https://github.com/chalin/dart-spec-and-grammar/blob/master/doc/grammar-AUTOGENERATED-DO-NOT-EDIT.txt. The string handling is now much closer to this grammar, resulting in more files being tokenized correctly. --- .../sourceforge/pmd/lang/dart/antlr4/Dart2.g4 | 77 ++++++++----------- 1 file changed, 34 insertions(+), 43 deletions(-) diff --git a/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 b/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 index fcc42ae013..7d8793edab 100644 --- a/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 +++ b/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 @@ -340,58 +340,49 @@ booleanLiteral | 'false' ; -//stringLiteral: (MultilineString | SingleLineString)+; -stringLiteral: SingleLineString; -//stringLiteral: SingleLineString; +stringLiteral: (MultiLineString | SingleLineString)+; + SingleLineString - : '"' (~[\\"] | '\\\\' | ESCAPE_SEQUENCE | '\\"')* '"' - | '\'' (~[\\'] | '\\\\' | ESCAPE_SEQUENCE | '\\\'')* '\'' -// | 'r\'' (~('\'' | NEWLINE))* '\'' // TODO -// | 'r"' (~('\'' | NEWLINE))* '"' + : '"' StringContentDQ* '"' + | '\'' StringContentSQ* '\'' + | 'r\'' (~('\'' | '\n' | '\r'))* '\'' + | 'r"' (~('"' | '\n' | '\r'))* '"' ; -//MultilineString -// : '"""' StringContentTDQ* '"""' -// | '\'\'\'' StringContentTDQ* '\'\'\'' -// | 'r"""' (~'"""')* '"""' // TODO -// | 'r\'\'\'' (~'\'\'\'')* '\'\'\'' -// ; -//StringContentSQ: .;// TODO -//StringContentTDQ: .;// TODO fragment -ESCAPE_SEQUENCE - : '\\n' - | '\\r' - | '\\f' - | '\\b' - | '\\t' - | '\\v' - | '\\x' HEX_DIGIT HEX_DIGIT - | '\\u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT - | '\\u{' HEX_DIGIT_SEQUENCE '}' - | '\\$' +StringContentDQ + : ~('\\' | '"' /*| '$'*/ | '\n' | '\r') + | '\\' ~('\n' | '\r') + //| stringInterpolation ; + fragment -HEX_DIGIT_SEQUENCE - : HEX_DIGIT HEX_DIGIT? HEX_DIGIT? - HEX_DIGIT? HEX_DIGIT? HEX_DIGIT? +StringContentSQ + : ~('\\' | '\'' /*| '$'*/ | '\n' | '\r') + | '\\' ~('\n' | '\r') + //| stringInterpolation ; -/*TODO -<stringContentDQ> ::= \~{}( `\\' | `"' | `$' | <NEWLINE> ) - \alt `\\' \~{}( <NEWLINE> ) - \alt <stringInterpolation> -<stringContentSQ> ::= \~{}( `\\' | `\'' | `$' | <NEWLINE> ) - \alt `\\' \~{}( <NEWLINE> ) - \alt <stringInterpolation> -<stringContentTDQ> ::= \~{}( `\\' | `"""' | `$') - \alt `\\' \~{}( <NEWLINE> ) - \alt <stringInterpolation> +MultiLineString + : '"""' StringContentTDQ* '"""' + | '\'\'\'' StringContentTSQ* '\'\'\'' + | 'r"""' (~'"' | '"' ~'"' | '""' ~'"')* '"""' + | 'r\'\'\'' (~'\'' | '\'' ~'\'' | '\'\'' ~'\'')* '\'\'\'' + ; + +fragment +StringContentTDQ + : ~('\\' | '"' /*| '$'*/) + | '"' ~'"' | '""' ~'"' + //| stringInterpolation + ; + +fragment StringContentTSQ + : ~('\\' | '\'' /*| '$'*/) + | '\'' ~'\'' | '\'\'' ~'\'' + //| stringInterpolation + ; -<stringContentTSQ> ::= \~{}( `\\' | `\'\'\'' | `$') - \alt `\\' \~{}( <NEWLINE> ) - \alt <stringInterpolation> -*/ NEWLINE : '\n' | '\r' From 68f2e556a2c8b47fdf60b6be8d88b0020671467f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20H=C3=A4rle?= <marcel.haerle@sonnvest.de> Date: Wed, 22 May 2019 08:38:05 +0200 Subject: [PATCH 109/371] [java] Whitelist serialPersistentFields --- .../codestyle/FieldNamingConventionsRule.java | 2 +- .../documentation/CommentRequiredRule.java | 27 ++++++- .../codestyle/xml/FieldNamingConventions.xml | 14 ++++ .../documentation/xml/CommentRequired.xml | 79 +++++++++++++++++++ 4 files changed, 120 insertions(+), 2 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/FieldNamingConventionsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/FieldNamingConventionsRule.java index 74fff9114f..904b7dbdd4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/FieldNamingConventionsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/FieldNamingConventionsRule.java @@ -26,7 +26,7 @@ public class FieldNamingConventionsRule extends AbstractNamingConventionRule<AST private static final PropertyDescriptor<List<String>> EXCLUDED_NAMES = PropertyFactory.stringListProperty("exclusions") .desc("Names of fields to whitelist.") - .defaultValues("serialVersionUID") + .defaultValues("serialVersionUID", "serialPersistentFields") .build(); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/documentation/CommentRequiredRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/documentation/CommentRequiredRule.java index 56ab5c1e96..d14a2f7551 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/documentation/CommentRequiredRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/documentation/CommentRequiredRule.java @@ -56,6 +56,9 @@ public class CommentRequiredRule extends AbstractCommentRule { private static final PropertyDescriptor<CommentRequirement> SERIAL_VERSION_UID_CMT_REQUIREMENT_DESCRIPTOR = requirementPropertyBuilder("serialVersionUIDCommentRequired", "Serial version UID comments") .defaultValue(CommentRequirement.Ignored).build(); + private static final PropertyDescriptor<CommentRequirement> SERIAL_PERSISTENT_FIELDS_CMT_REQUIREMENT_DESCRIPTOR + = requirementPropertyBuilder("serialPersistentFieldsCommentRequired", "Serial persistent fields comments") + .defaultValue(CommentRequirement.Ignored).build(); public CommentRequiredRule() { @@ -67,6 +70,7 @@ public class CommentRequiredRule extends AbstractCommentRule { definePropertyDescriptor(PROT_METHOD_CMT_REQUIREMENT_DESCRIPTOR); definePropertyDescriptor(ENUM_CMT_REQUIREMENT_DESCRIPTOR); definePropertyDescriptor(SERIAL_VERSION_UID_CMT_REQUIREMENT_DESCRIPTOR); + definePropertyDescriptor(SERIAL_PERSISTENT_FIELDS_CMT_REQUIREMENT_DESCRIPTOR); } @@ -154,6 +158,8 @@ public class CommentRequiredRule extends AbstractCommentRule { public Object visit(ASTFieldDeclaration decl, Object data) { if (isSerialVersionUID(decl)) { checkCommentMeetsRequirement(data, decl, SERIAL_VERSION_UID_CMT_REQUIREMENT_DESCRIPTOR); + } else if (isSerialPersistentFields(decl)) { + checkCommentMeetsRequirement(data, decl, SERIAL_PERSISTENT_FIELDS_CMT_REQUIREMENT_DESCRIPTOR); } else { checkCommentMeetsRequirement(data, decl, FIELD_CMT_REQUIREMENT_DESCRIPTOR); } @@ -169,6 +175,24 @@ public class CommentRequiredRule extends AbstractCommentRule { && field.getType() == long.class; } + /** + * Whether the given field is a serialPersistentFields variable. + * <p/> + * This field must be initialized with an array of ObjectStreamField objects. + * The modifiers for the field are required to be private, static, and final. + * + * @see <a href="https://docs.oracle.com/javase/7/docs/platform/serialization/spec/serial-arch.html#6250">Oracle docs</a> + * @param field the field, must not be null + * @return true if the field ia a serialPersistentFields variable, otherwise false + */ + private boolean isSerialPersistentFields(final ASTFieldDeclaration field) { + return "serialPersistentFields".equals(field.getVariableName()) + && field.isPrivate() + && field.isStatic() + && field.isFinal() + && field.isArray() + && "ObjectStreamField".equals(field.jjtGetFirstToken().getImage()); // .getType() returns null + } @Override public Object visit(ASTEnumDeclaration decl, Object data) { @@ -192,7 +216,8 @@ public class CommentRequiredRule extends AbstractCommentRule { && getProperty(PUB_METHOD_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored && getProperty(PROT_METHOD_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored && getProperty(ENUM_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored - && getProperty(SERIAL_VERSION_UID_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored; + && getProperty(SERIAL_VERSION_UID_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored + && getProperty(SERIAL_PERSISTENT_FIELDS_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored; } @Override diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/FieldNamingConventions.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/FieldNamingConventions.xml index 6f17f54b5e..1d6c277054 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/FieldNamingConventions.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/FieldNamingConventions.xml @@ -193,6 +193,20 @@ ]]></code> </test-code> + <test-code> + <description>Exclude serialPersistentFields by default</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ + public class Foo implements Serializable { + + List next; + + private static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)}; + + } + ]]></code> + </test-code> + <test-code> <description>More exclusions can be configured</description> <rule-property name="exclusions">m$mangled|serialVersionUID</rule-property> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/documentation/xml/CommentRequired.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/documentation/xml/CommentRequired.xml index d06fea79d7..cab2f7cdc9 100755 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/documentation/xml/CommentRequired.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/documentation/xml/CommentRequired.xml @@ -157,6 +157,85 @@ public class CommentRequired implements Serializable { ]]></code> </test-code> + <test-code> + <description>#1684 whitelist serialPersistentFields</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +/** The class comment */ +public class CommentRequired implements Serializable { + /** My list */ + List next; + private static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)}; +} + ]]></code> + </test-code> + <test-code> + <description>#1684 comment required on serialPersistentFields of wrong type</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>5</expected-linenumbers> + <code><![CDATA[ +/** The class comment */ +public class CommentRequired implements Serializable { + /** My list */ + List next; + private static final String[] serialPersistentFields = {"next"}; +} + ]]></code> + </test-code> + <test-code> + <description>#1684 comment required on serialPersistentFields of wrong visibility</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>5</expected-linenumbers> + <code><![CDATA[ +/** The class comment */ +public class CommentRequired implements Serializable { + /** My list */ + List next; + static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)}; +} + ]]></code> + </test-code> + <test-code> + <description>#1684 comment required on serialPersistentFields not static</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>5</expected-linenumbers> + <code><![CDATA[ +/** The class comment */ +public class CommentRequired implements Serializable { + /** My list */ + List next; + private final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)}; +} + ]]></code> + </test-code> + <test-code> + <description>#1684 comment required on serialPersistentFields not final</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>5</expected-linenumbers> + <code><![CDATA[ +/** The class comment */ +public class CommentRequired implements Serializable { + /** My list */ + List next; + private static ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)}; +} + ]]></code> + </test-code> + <test-code> + <description>#1684 serialPersistentFields comment required</description> + <rule-property name="serialPersistentFieldsCommentRequired">Required</rule-property> + <expected-problems>1</expected-problems> + <expected-linenumbers>5</expected-linenumbers> + <code><![CDATA[ +/** The class comment */ +public class CommentRequired implements Serializable { + /** My list */ + List next; + private static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)}; +} + ]]></code> + </test-code> + <test-code> <description>#1522 [java] CommentRequired: false positive</description> <expected-problems>0</expected-problems> From f2f0494566a312f2ca5829bdf21e13eb040ce50e Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Fri, 24 May 2019 12:28:44 -0300 Subject: [PATCH 110/371] PR review --- .../net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java | 6 +++--- .../sourceforge/pmd/lang/swift/SwiftParserAdapter.java | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java index 460aa0334e..acca252b9c 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java @@ -21,7 +21,7 @@ import net.sourceforge.pmd.lang.ast.ParseException; /** * Generic Antlr parser adapter for all Antlr parsers. */ -public abstract class AntlrBaseParser implements Parser { +public abstract class AntlrBaseParser<T extends org.antlr.v4.runtime.Parser> implements Parser { protected final ParserOptions parserOptions; @@ -57,9 +57,9 @@ public abstract class AntlrBaseParser implements Parser { return new HashMap<>(); } - protected abstract AntlrBaseNode getRootNode(org.antlr.v4.runtime.Parser parser); + protected abstract AntlrBaseNode getRootNode(T parser); protected abstract Lexer getLexer(Reader source) throws IOException; - protected abstract org.antlr.v4.runtime.Parser getParser(Lexer lexer); + protected abstract T getParser(Lexer lexer); } diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java index dfa3f0b4a8..c7082ef804 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftParserAdapter.java @@ -10,7 +10,6 @@ import java.io.Reader; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.Parser; import net.sourceforge.pmd.lang.ParserOptions; import net.sourceforge.pmd.lang.antlr.AntlrBaseParser; @@ -21,15 +20,15 @@ import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; /** * Adapter for the SwiftParser. */ -public class SwiftParserAdapter extends AntlrBaseParser { +public class SwiftParserAdapter extends AntlrBaseParser<SwiftParser> { public SwiftParserAdapter(final ParserOptions parserOptions) { super(parserOptions); } @Override - protected AntlrBaseNode getRootNode(final Parser parser) { - return ((SwiftParser) parser).topLevel(); + protected AntlrBaseNode getRootNode(final SwiftParser parser) { + return parser.topLevel(); } @Override @@ -38,7 +37,7 @@ public class SwiftParserAdapter extends AntlrBaseParser { } @Override - protected Parser getParser(final Lexer lexer) { + protected SwiftParser getParser(final Lexer lexer) { return new SwiftParser(new CommonTokenStream(lexer)); } From 5307f8ad2042c22e0c0d915dc5ee8d8e3e57bc0f Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Fri, 24 May 2019 12:49:23 -0300 Subject: [PATCH 111/371] Generify visit --- .../net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java index 6694ae1c0b..99d62a03fb 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java @@ -79,7 +79,7 @@ public abstract class AbstractAntlrVisitor<T> extends AbstractRule implements Pa } } - public Object visit(final AntlrBaseNode node) { + public T visit(final AntlrBaseNode node) { return node.accept(this); } } From 37ecbc1dad01cb6fe28f7f3f63bf25d31624ddc2 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 24 May 2019 19:24:54 +0200 Subject: [PATCH 112/371] Update release notes, fixes #1684, refs #1840 --- docs/pages/release_notes.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index ad93fdab8d..6215d7600e 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -69,6 +69,16 @@ CPD also parses raw string literals now correctly (see [#1784](https://github.co using various properties to differenciate e.g. static methods and test methods. As before, this rule uses by default the standard Apex naming convention (Camel case). +* The Java rule {% rule "java/codestyle/FieldNamingConventions" %} (`java-codestyle`) now by default ignores + the field `serialPersistentFields`. Since this is a field which needs to have this special name, no + field naming conventions can be applied here. It is excluded the same way like `serialVersionUID` via the + property `exclusions`. + +* The Java rule {% rule "java/documentation/CommentRequired" %} (`java-documentation`) has a new property + `serialPersistentFieldsCommentRequired` with the default value "Ignored". This means that from now + on comments for the field `serialPersistentFields` are not required anymore. You can change the property + to restore the old behavior. + #### Deprecated Rules * The Apex rule {% rule "apex/codestyle/VariableNamingConventions" %} (`apex-codestyle`) has been deprecated and @@ -90,6 +100,7 @@ CPD also parses raw string literals now correctly (see [#1784](https://github.co * java-bestpractices * [#1738](https://github.com/pmd/pmd/issues/1738): \[java] MethodReturnsInternalArray does not work in inner classes * java-codestyle + * [#1684](https://github.com/pmd/pmd/issues/1684): \[java] Properly whitelist serialPersistentFields * [#1804](https://github.com/pmd/pmd/issues/1804): \[java] NPE in UnnecessaryLocalBeforeReturnRule * python * [#1810](https://github.com/pmd/pmd/issues/1810): \[python] \[cpd] Parse error when using Python 2 backticks @@ -128,6 +139,7 @@ CPD also parses raw string literals now correctly (see [#1784](https://github.co * [#1820](https://github.com/pmd/pmd/pull/1820): \[cpp] \[cpd] Improve support for raw string literals - [Maikel Steneker](https://github.com/maikelsteneker) * [#1821](https://github.com/pmd/pmd/pull/1821): \[matlab] \[cpd] Matlab question mark token - [Maikel Steneker](https://github.com/maikelsteneker) * [#1822](https://github.com/pmd/pmd/pull/1822): \[matlab] \[cpd] Double quoted string - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1840](https://github.com/pmd/pmd/pull/1840): \[java] Whitelist serialPersistentFields - [Marcel Härle](https://github.com/marcelhaerle) {% endtocmaker %} From bd3dfb9d7dca1bd8836f89beea59c4df3e61a359 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 24 May 2019 19:36:09 +0200 Subject: [PATCH 113/371] Update release notes, refs #1837 --- docs/pages/release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index cdcddea67f..5a92853c34 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -32,6 +32,7 @@ This is a {{ site.pmd.release_type }} release. * [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) * [#1802](https://github.com/pmd/pmd/pull/1802): \[python] \[cpd] Add support for Python 2 backticks - [Maikel Steneker](https://github.com/maikelsteneker) * [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1837](https://github.com/pmd/pmd/pull/1837): \[core] Minor performance improvements - [Michael Hausegger](https://github.com/TheRealHaui) {% endtocmaker %} From fa91d47f7b7b07a1126a515a18a28a3fc932826f Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 24 May 2019 19:37:06 +0200 Subject: [PATCH 114/371] (doc) Update generated rule documentation --- docs/pages/pmd/rules/java/codestyle.md | 4 ++-- docs/pages/pmd/rules/java/documentation.md | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/pages/pmd/rules/java/codestyle.md b/docs/pages/pmd/rules/java/codestyle.md index d2ff5b66c1..c4f215a7ba 100644 --- a/docs/pages/pmd/rules/java/codestyle.md +++ b/docs/pages/pmd/rules/java/codestyle.md @@ -900,7 +900,7 @@ class Foo { |finalFieldPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to final field names|no| |staticFieldPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to static field names|no| |defaultFieldPattern|\[a-z\]\[a-zA-Z0-9\]\*|Regex which applies to field names|no| -|exclusions|serialVersionUID|Names of fields to whitelist.|yes. Delimiter is '\|'.| +|exclusions|serialVersionUID \| serialPersistentFields|Names of fields to whitelist.|yes. Delimiter is '\|'.| **Use this rule with the default properties by just referencing it:** ``` xml @@ -917,7 +917,7 @@ class Foo { <property name="finalFieldPattern" value="[a-z][a-zA-Z0-9]*" /> <property name="staticFieldPattern" value="[a-z][a-zA-Z0-9]*" /> <property name="defaultFieldPattern" value="[a-z][a-zA-Z0-9]*" /> - <property name="exclusions" value="serialVersionUID" /> + <property name="exclusions" value="serialVersionUID|serialPersistentFields" /> </properties> </rule> ``` diff --git a/docs/pages/pmd/rules/java/documentation.md b/docs/pages/pmd/rules/java/documentation.md index a8cf2374fa..0c9a065c3c 100644 --- a/docs/pages/pmd/rules/java/documentation.md +++ b/docs/pages/pmd/rules/java/documentation.md @@ -79,6 +79,7 @@ Denotes whether comments are required (or unwanted) for specific language elemen |protectedMethodCommentRequirement|Required|Protected method constructor comments. Possible values: \[Required, Ignored, Unwanted\]|no| |enumCommentRequirement|Required|Enum comments. Possible values: \[Required, Ignored, Unwanted\]|no| |serialVersionUIDCommentRequired|Ignored|Serial version UID comments. Possible values: \[Required, Ignored, Unwanted\]|no| +|serialPersistentFieldsCommentRequired|Ignored|Serial persistent fields comments. Possible values: \[Required, Ignored, Unwanted\]|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -97,6 +98,7 @@ Denotes whether comments are required (or unwanted) for specific language elemen <property name="protectedMethodCommentRequirement" value="Required" /> <property name="enumCommentRequirement" value="Required" /> <property name="serialVersionUIDCommentRequired" value="Ignored" /> + <property name="serialPersistentFieldsCommentRequired" value="Ignored" /> </properties> </rule> ``` From 12cf9009bfd8c53356426836ca0d5b3cd6882471 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 24 May 2019 20:13:54 +0200 Subject: [PATCH 115/371] Add more test cases --- .../xml/ArrayInitializationVerboseness.xml | 116 ++++++++++++------ 1 file changed, 76 insertions(+), 40 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml index 146139f78e..7a1e5a6992 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml @@ -1,47 +1,83 @@ <?xml version="1.0" encoding="UTF-8"?> <test-data - xmlns="http://pmd.sourceforge.net/rule-tests" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> - <test-code> - <description><![CDATA[ -simple failure case - ]]></description> - <expected-problems>1</expected-problems> - <code><![CDATA[ -public class Foo { - void foo() { - int[] x = new int[] {1,2,3}; - } -} - ]]></code> - </test-code> + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> - <test-code> - <description><![CDATA[ -case with two initializers - ]]></description> - <expected-problems>2</expected-problems> - <code><![CDATA[ -public class Foo { - void foo() { - int ar[] = new int[] { 1,2,3}, foo[] = new int[] { 4, 5, 6 }; - } + <test-code> + <description>simple failure case</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>3</expected-linenumbers> + <code><![CDATA[ +public class UseShortArrayExample { + void foo() { + int[] x = new int[] {1,2,3}; + } } - ]]></code> - </test-code> + ]]></code> + </test-code> - <test-code> - <description><![CDATA[ -ok - ]]></description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class Foo { - void foo() { - int[] x = {1,2,3}; - } + <test-code> + <description>case with two initializers</description> + <expected-problems>2</expected-problems> + <expected-linenumbers>3,3</expected-linenumbers> + <code><![CDATA[ +public class UseShortArrayExample { + void foo() { + int ar[] = new int[] { 1,2,3}, foo[] = new int[] { 4, 5, 6 }; + } } - ]]></code> - </test-code> + ]]></code> + </test-code> + + <test-code> + <description>ok</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class UseShortArrayExample { + void foo() { + int[] x = {1,2,3}; + } +} + ]]></code> + </test-code> + + <test-code> + <description>assignment needs to use new</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class UseShortArrayExample { + void foo() { + int[] a = { 1 }; + a = new int[] { 2 }; // can't be replaced + } +} + ]]></code> + </test-code> + + <test-code> + <description>empty array initialization</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class UseShortArrayExample { + public void foo() { + int[] a = new int[3]; // no violation + } +} + ]]></code> + </test-code> + + <test-code> + <description>array initialization with fields</description> + <expected-problems>3</expected-problems> + <expected-linenumbers>2,3,3</expected-linenumbers> + <code><![CDATA[ +public class UseShortArrayExample { + private int[] f1 = new int[] {1,2,3}; + private int[] f2 = new int[] {1,2,3}, f3 = new int[] { 4,5,6 }; + + private int[] good = { 1,2,3 }; +} + ]]></code> + </test-code> </test-data> \ No newline at end of file From 9e717a3734dac084c89bb42e744536f0db17304d Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 24 May 2019 20:14:47 +0200 Subject: [PATCH 116/371] Use XPath to implement the rule --- .../ArrayInitializationVerbosenessRule.java | 29 ------------------- .../resources/category/java/codestyle.xml | 21 +++++++++++--- 2 files changed, 17 insertions(+), 33 deletions(-) delete mode 100644 pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java deleted file mode 100644 index 6018e4fd91..0000000000 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessRule.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.java.rule.codestyle; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression; -import net.sourceforge.pmd.lang.java.ast.ASTLocalVariableDeclaration; -import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; - -public class ArrayInitializationVerbosenessRule extends AbstractJavaRule { - - @Override - public Object visit(ASTLocalVariableDeclaration node, Object data) { - boolean isArrayPlaceholder = true; - - if (isArrayPlaceholder && node.getImage() != null) { - Pattern verbosePattern = Pattern.compile("(= ?new).+\\{"); - Matcher matcher = verbosePattern.matcher(node.getImage()); - - while (matcher.find()) { - addViolation(data, node); - } - } - return super.visit(node, data); - } -} diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index e77db41815..843bcfaddf 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -50,16 +50,29 @@ public abstract class Foo { // should be AbstractFoo <rule name="ArrayInitializationVerboseness" language="java" - since="1.1" - message="Array initialization does not require assignment to new object, assignment to {--array content--} is sufficient" - class="net.sourceforge.pmd.lang.java.rule.codestyle.ArrayInitializationVerbosenessRule" + since="6.15.0" + message="Array initialization can be written shorter" + class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#arrayinitializationverboseness"> <description> <![CDATA[ -Arrays can be initialized simply with curly braces without requiring to create new array object +When declaring and initializing array fields or variables, it is not necessary to explicitly create a new array +using `new`. Instead one can simply define the initial content of the array as a expression in curly braces. + +E.g. `int[] x = new int[] { 1, 2, 3 };` can be written as `int[] x = { 1, 2, 3 };`. ]]> </description> <priority>3</priority> + <properties> + <property name="xpath"> + <value><![CDATA[ +//VariableDeclarator + [VariableDeclaratorId[@ArrayType = true()]] + [VariableInitializer/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ArrayDimsAndInits/ArrayInitializer] + ]]></value> + </property> + <property name="version" value="2.0"/> + </properties> <example> <![CDATA[ Foo[] x = new Foo[] { ... }; // Overly verbose From 3be46b8b27142336c6d6878df0353fa113327e47 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 24 May 2019 20:17:58 +0200 Subject: [PATCH 117/371] Rename the rule to UseShortArrayInitializer --- .../resources/category/java/codestyle.xml | 66 +++++++++---------- ...java => UseShortArrayInitializerTest.java} | 2 +- ...eness.xml => UseShortArrayInitializer.xml} | 0 3 files changed, 34 insertions(+), 34 deletions(-) rename pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/{ArrayInitializationVerbosenessTest.java => UseShortArrayInitializerTest.java} (76%) rename pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/{ArrayInitializationVerboseness.xml => UseShortArrayInitializer.xml} (100%) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 843bcfaddf..e7ddc91663 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -48,39 +48,6 @@ public abstract class Foo { // should be AbstractFoo </example> </rule> - <rule name="ArrayInitializationVerboseness" - language="java" - since="6.15.0" - message="Array initialization can be written shorter" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#arrayinitializationverboseness"> - <description> -<![CDATA[ -When declaring and initializing array fields or variables, it is not necessary to explicitly create a new array -using `new`. Instead one can simply define the initial content of the array as a expression in curly braces. - -E.g. `int[] x = new int[] { 1, 2, 3 };` can be written as `int[] x = { 1, 2, 3 };`. -]]> - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value><![CDATA[ -//VariableDeclarator - [VariableDeclaratorId[@ArrayType = true()]] - [VariableInitializer/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ArrayDimsAndInits/ArrayInitializer] - ]]></value> - </property> - <property name="version" value="2.0"/> - </properties> - <example> -<![CDATA[ -Foo[] x = new Foo[] { ... }; // Overly verbose -Foo[] x = { ... }; //Equivalent to above line -]]> - </example> - </rule> - <rule name="AtLeastOneConstructor" language="java" since="1.04" @@ -2145,6 +2112,39 @@ public class Foo { </example> </rule> + <rule name="UseShortArrayInitializer" + language="java" + since="6.15.0" + message="Array initialization can be written shorter" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#useshortarrayinitializer"> + <description> +<![CDATA[ +When declaring and initializing array fields or variables, it is not necessary to explicitly create a new array +using `new`. Instead one can simply define the initial content of the array as a expression in curly braces. + +E.g. `int[] x = new int[] { 1, 2, 3 };` can be written as `int[] x = { 1, 2, 3 };`. +]]> + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value><![CDATA[ +//VariableDeclarator + [VariableDeclaratorId[@ArrayType = true()]] + [VariableInitializer/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ArrayDimsAndInits/ArrayInitializer] + ]]></value> + </property> + <property name="version" value="2.0"/> + </properties> + <example> +<![CDATA[ +Foo[] x = new Foo[] { ... }; // Overly verbose +Foo[] x = { ... }; //Equivalent to above line +]]> + </example> + </rule> + <rule name="VariableNamingConventions" since="1.2" deprecated="true" diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/UseShortArrayInitializerTest.java similarity index 76% rename from pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessTest.java rename to pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/UseShortArrayInitializerTest.java index 0c7e46a3ce..be1a80e550 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/ArrayInitializationVerbosenessTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/UseShortArrayInitializerTest.java @@ -6,6 +6,6 @@ package net.sourceforge.pmd.lang.java.rule.codestyle; import net.sourceforge.pmd.testframework.PmdRuleTst; -public class ArrayInitializationVerbosenessTest extends PmdRuleTst { +public class UseShortArrayInitializerTest extends PmdRuleTst { // no additional unit tests } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UseShortArrayInitializer.xml similarity index 100% rename from pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/ArrayInitializationVerboseness.xml rename to pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UseShortArrayInitializer.xml From 65f897e56dc546d0595478ce80d217132623e5fd Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 24 May 2019 20:25:35 +0200 Subject: [PATCH 118/371] Update release notes, fixes #1495, refs #1647 --- docs/pages/release_notes.md | 5 +++++ pmd-core/src/main/resources/rulesets/releases/6150.xml | 1 + 2 files changed, 6 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 1400af48bd..936390647e 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -59,6 +59,9 @@ CPD also parses raw string literals now correctly (see [#1784](https://github.co conventions for property declarations. By default this rule uses the standard Apex naming convention (Camel case), but it can be configured through properties. +* The new Java rule {% rule "java/codestyle/UseShortArrayInitializer" %} (`java-codestyle`) searches for + array initialization expressions, which can be written shorter. + #### Modified Rules * The Apex rule {% rule "apex/codestyle/ClassNamingConventions" %} (`apex-codestyle`) can now be configured @@ -100,6 +103,7 @@ CPD also parses raw string literals now correctly (see [#1784](https://github.co * java-bestpractices * [#1738](https://github.com/pmd/pmd/issues/1738): \[java] MethodReturnsInternalArray does not work in inner classes * java-codestyle + * [#1495](https://github.com/pmd/pmd/issues/1495): \[java] Rule to detect overly verbose array initializiation * [#1684](https://github.com/pmd/pmd/issues/1684): \[java] Properly whitelist serialPersistentFields * [#1804](https://github.com/pmd/pmd/issues/1804): \[java] NPE in UnnecessaryLocalBeforeReturnRule * python @@ -128,6 +132,7 @@ CPD also parses raw string literals now correctly (see [#1784](https://github.co ### External Contributions +* [#1647](https://github.com/pmd/pmd/pull/1647): \[java] Rule to detect overly verbose array initialization - [Victor](https://github.com/IDoCodingStuffs) * [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) * [#1802](https://github.com/pmd/pmd/pull/1802): \[python] \[cpd] Add support for Python 2 backticks - [Maikel Steneker](https://github.com/maikelsteneker) * [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) diff --git a/pmd-core/src/main/resources/rulesets/releases/6150.xml b/pmd-core/src/main/resources/rulesets/releases/6150.xml index 25c9b94dad..13d3e58a90 100644 --- a/pmd-core/src/main/resources/rulesets/releases/6150.xml +++ b/pmd-core/src/main/resources/rulesets/releases/6150.xml @@ -13,5 +13,6 @@ This ruleset contains links to rules that are new in PMD v6.15.0 <rule ref="category/apex/codestyle.xml/LocalVariableNamingConventions"/> <rule ref="category/apex/codestyle.xml/PropertyNamingConventions"/> + <rule ref="category/java/codestyle.xml/UseShortArrayInitializer"/> </ruleset> From 33983cbf5547cb1da5673136e356836128db09e7 Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Fri, 24 May 2019 18:43:41 -0300 Subject: [PATCH 119/371] swift ruleset boilerplate + rule tests + rules advance --- .../pmd/lang/swift/SwiftHandler.java | 37 +++++++++++ .../pmd/lang/swift/SwiftLanguageModule.java | 8 +-- .../ProhibitedInterfaceBuilder.java | 6 ++ .../category/swift/bestpractices.xml | 21 +++++++ .../category/swift/categories.properties | 17 ++++++ .../resources/category/swift/codestyle.xml | 11 ++++ .../main/resources/category/swift/design.xml | 11 ++++ .../category/swift/documentation.xml | 11 ++++ .../resources/category/swift/errorprone.xml | 61 +++++++++++++++++++ .../category/swift/multithreading.xml | 11 ++++ .../resources/category/swift/performance.xml | 11 ++++ .../resources/category/swift/security.xml | 10 +++ .../rulesets/swift/rulesets.properties | 17 ++++++ .../lang/swift/SwiftRuleSetFactoryTest.java | 7 +++ .../ProhibitedInterfaceBuilderTest.java | 7 +++ .../swift/rule/errorprone/ForceCastTest.java | 7 +++ .../swift/rule/errorprone/ForceTryTest.java | 7 +++ .../xml/ProhibitedInterfaceBuilder.xml | 54 ++++++++++++++++ .../swift/rule/errorprone/xml/ForceCast.xml | 26 ++++++++ .../swift/rule/errorprone/xml/ForceTry.xml | 30 +++++++++ .../src/main/resources/rule-tests_1_0_0.xsd | 2 +- 21 files changed, 366 insertions(+), 6 deletions(-) create mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java create mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilder.java create mode 100644 pmd-swift/src/main/resources/category/swift/bestpractices.xml create mode 100644 pmd-swift/src/main/resources/category/swift/categories.properties create mode 100644 pmd-swift/src/main/resources/category/swift/codestyle.xml create mode 100644 pmd-swift/src/main/resources/category/swift/design.xml create mode 100644 pmd-swift/src/main/resources/category/swift/documentation.xml create mode 100644 pmd-swift/src/main/resources/category/swift/errorprone.xml create mode 100644 pmd-swift/src/main/resources/category/swift/multithreading.xml create mode 100644 pmd-swift/src/main/resources/category/swift/performance.xml create mode 100644 pmd-swift/src/main/resources/category/swift/security.xml create mode 100644 pmd-swift/src/main/resources/rulesets/swift/rulesets.properties create mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/SwiftRuleSetFactoryTest.java create mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderTest.java create mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java create mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java create mode 100644 pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml create mode 100644 pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml create mode 100644 pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java new file mode 100644 index 0000000000..39d0c49163 --- /dev/null +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java @@ -0,0 +1,37 @@ +package net.sourceforge.pmd.lang.swift; + +import java.io.Writer; + +import net.sourceforge.pmd.lang.*; +import net.sourceforge.pmd.lang.antlr.AntlrRuleViolationFactory; +import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.ast.xpath.DefaultASTXPathHandler; +import net.sourceforge.pmd.lang.rule.RuleViolationFactory; + +public class SwiftHandler extends AbstractPmdLanguageVersionHandler { + + @Override + public XPathHandler getXPathHandler() { + return new DefaultASTXPathHandler(); + } + + @Override + public RuleViolationFactory getRuleViolationFactory() { + return AntlrRuleViolationFactory.INSTANCE; + } + + @Override + public Parser getParser(final ParserOptions parserOptions) { + return new SwiftParserAdapter(parserOptions); + } + + @Override + public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { + return new VisitorStarter() { + @Override + public void start(final Node rootNode) { + // TODO: implement dump for AntlrBaseNode + } + }; + } +} \ No newline at end of file diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftLanguageModule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftLanguageModule.java index 76fa53d5a6..abb1a9406c 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftLanguageModule.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftLanguageModule.java @@ -5,13 +5,11 @@ package net.sourceforge.pmd.lang.swift; import net.sourceforge.pmd.lang.BaseLanguageModule; +import net.sourceforge.pmd.lang.antlr.AntlrRuleChainVisitor; /** * Language Module for Swift - * - * @deprecated There is no full PMD support for Swift. */ -@Deprecated public class SwiftLanguageModule extends BaseLanguageModule { /** The name. */ @@ -23,7 +21,7 @@ public class SwiftLanguageModule extends BaseLanguageModule { * Create a new instance of Swift Language Module. */ public SwiftLanguageModule() { - super(NAME, null, TERSE_NAME, null, "swift"); - addVersion("", null, true); + super(NAME, null, TERSE_NAME, AntlrRuleChainVisitor.class, "swift"); + addVersion("", new SwiftHandler(), true); } } diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilder.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilder.java new file mode 100644 index 0000000000..57ab90c18c --- /dev/null +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilder.java @@ -0,0 +1,6 @@ +package net.sourceforge.pmd.lang.swift.rule.bestpractices; + +import net.sourceforge.pmd.lang.swift.AbstractSwiftRule; + +public class ProhibitedInterfaceBuilder extends AbstractSwiftRule { +} diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml new file mode 100644 index 0000000000..e7292eb02f --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + +<ruleset name="Best Practices" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> +Rules which enforce generally accepted best practices. + </description> + + <rule name="ProhibitedInterfaceBuilder" + since="7.0" + message="Creating views using Interface Builder should be avoided." + class="net.sourceforge.pmd.lang.swift.rule.bestpractices.ProhibitedInterfaceBuilder"> + <description> + Creating views using Interface Builder should be avoided. + </description> + <priority>2</priority> + </rule> +</ruleset> diff --git a/pmd-swift/src/main/resources/category/swift/categories.properties b/pmd-swift/src/main/resources/category/swift/categories.properties new file mode 100644 index 0000000000..5efc376f88 --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/categories.properties @@ -0,0 +1,17 @@ +# +# BSD-style license; for more info see http://pmd.sourceforge.net/license.html +# + +rulesets.filenames=\ + category/swift/bestpractices.xml, \ + category/swift/errorprone.xml + +# +# categories without rules +# +# category/swift/codestyle.xml +# category/swift/design.xml +# category/swift/documentation.xml +# category/swift/multithreading.xml +# category/swift/performance.xml +# category/swift/security.xml diff --git a/pmd-swift/src/main/resources/category/swift/codestyle.xml b/pmd-swift/src/main/resources/category/swift/codestyle.xml new file mode 100644 index 0000000000..f23dab5a5d --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/codestyle.xml @@ -0,0 +1,11 @@ +<?xml version="1.0"?> + +<ruleset name="Code Style" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> + Rules which enforce a specific coding style. + </description> +</ruleset> diff --git a/pmd-swift/src/main/resources/category/swift/design.xml b/pmd-swift/src/main/resources/category/swift/design.xml new file mode 100644 index 0000000000..3ffd0d0602 --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/design.xml @@ -0,0 +1,11 @@ +<?xml version="1.0"?> + +<ruleset name="Design" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> +Rules that help you discover design issues. + </description> +</ruleset> diff --git a/pmd-swift/src/main/resources/category/swift/documentation.xml b/pmd-swift/src/main/resources/category/swift/documentation.xml new file mode 100644 index 0000000000..9417a47809 --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/documentation.xml @@ -0,0 +1,11 @@ +<?xml version="1.0"?> + +<ruleset name="Documentation" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> +Rules that are related to code documentation. + </description> +</ruleset> \ No newline at end of file diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml new file mode 100644 index 0000000000..478a591fe2 --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -0,0 +1,61 @@ +<?xml version="1.0"?> + +<ruleset name="Error Prone" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> + Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors. + </description> + + <rule name="ForceCast" + language="swift" + since="7.0" + message="Force casts should be avoided." + class="net.sourceforge.pmd.lang.rule.XPathRule"> + <description> + Force casts should be avoided. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ +//type_casting_operator[@Image = 'as!'] +]]> + </value> + </property> + </properties> + <example> + <![CDATA[ +NSNumber() as! Int +]]> + </example> + </rule> + + <rule name="ForceTry" + language="swift" + since="7.0" + message="Force tries should be avoided." + class="net.sourceforge.pmd.lang.rule.XPathRule"> + <description> + Force tries should be avoided. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ + +]]> + </value> + </property> + <property name="version" value="2.0"/> + </properties> + <example> + <![CDATA[ +]]> + </example> + </rule> +</ruleset> \ No newline at end of file diff --git a/pmd-swift/src/main/resources/category/swift/multithreading.xml b/pmd-swift/src/main/resources/category/swift/multithreading.xml new file mode 100644 index 0000000000..3b25979bb6 --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/multithreading.xml @@ -0,0 +1,11 @@ +<?xml version="1.0"?> + +<ruleset name="Multithreading" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> +Rules that flag issues when dealing with multiple threads of execution. + </description> +</ruleset> \ No newline at end of file diff --git a/pmd-swift/src/main/resources/category/swift/performance.xml b/pmd-swift/src/main/resources/category/swift/performance.xml new file mode 100644 index 0000000000..be669f985c --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/performance.xml @@ -0,0 +1,11 @@ +<?xml version="1.0"?> + +<ruleset name="Performance" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> +Rules that flag suboptimal code. + </description> +</ruleset> diff --git a/pmd-swift/src/main/resources/category/swift/security.xml b/pmd-swift/src/main/resources/category/swift/security.xml new file mode 100644 index 0000000000..fae2a25682 --- /dev/null +++ b/pmd-swift/src/main/resources/category/swift/security.xml @@ -0,0 +1,10 @@ +<?xml version="1.0"?> + +<ruleset name="Security" 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + + <description> +Rules that flag potential security flaws. + </description> +</ruleset> diff --git a/pmd-swift/src/main/resources/rulesets/swift/rulesets.properties b/pmd-swift/src/main/resources/rulesets/swift/rulesets.properties new file mode 100644 index 0000000000..f4d3fea7c6 --- /dev/null +++ b/pmd-swift/src/main/resources/rulesets/swift/rulesets.properties @@ -0,0 +1,17 @@ +# +# BSD-style license; for more info see http://pmd.sourceforge.net/license.html +# + +rulesets.filenames=\ + category/swift/bestpractices.xml, \ + category/swift/errorprone.xml + +# +# categories without rules +# +# category/swift/codestyle.xml +# category/swift/design.xml +# category/swift/documentation.xml +# category/swift/multithreading.xml +# category/swift/performance.xml +# category/swift/security.xml \ No newline at end of file diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/SwiftRuleSetFactoryTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/SwiftRuleSetFactoryTest.java new file mode 100644 index 0000000000..b6d482daad --- /dev/null +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/SwiftRuleSetFactoryTest.java @@ -0,0 +1,7 @@ +package net.sourceforge.pmd.lang.swift; + +import net.sourceforge.pmd.AbstractRuleSetFactoryTest; + +public class SwiftRuleSetFactoryTest extends AbstractRuleSetFactoryTest { + // no additional unit tests +} diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderTest.java new file mode 100644 index 0000000000..8456673240 --- /dev/null +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderTest.java @@ -0,0 +1,7 @@ +package net.sourceforge.pmd.lang.swift.rule.bestpractices; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class ProhibitedInterfaceBuilderTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java new file mode 100644 index 0000000000..e340b45864 --- /dev/null +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java @@ -0,0 +1,7 @@ +package net.sourceforge.pmd.lang.swift.rule.errorprone; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class ForceCastTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java new file mode 100644 index 0000000000..296388162a --- /dev/null +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java @@ -0,0 +1,7 @@ +package net.sourceforge.pmd.lang.swift.rule.errorprone; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class ForceTryTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml new file mode 100644 index 0000000000..2cf148474a --- /dev/null +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + <test-code> + <description><![CDATA[ +Good example #1 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +class ViewController: UIViewController { + var label: UILabel! +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Good example #2 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +class ViewController: UIViewController { + @objc func buttonTapped(_ sender: UIButton) {} +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Bad example #1 + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +class ViewController: UIViewController { + @IBOutlet var label: UILabel! +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Bad example #2 + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +class ViewController: UIViewController { + @IBAction func buttonTapped(_ sender: UIButton) {} +} + ]]></code> + <source-type>swift</source-type> + </test-code> +</test-data> \ No newline at end of file diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml new file mode 100644 index 0000000000..4f31806bde --- /dev/null +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + <test-code> + <description><![CDATA[ +Good example #1 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +NSNumber() as? Int + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Bad example #1 + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +NSNumber() as! Int + ]]></code> + <source-type>swift</source-type> + </test-code> +</test-data> \ No newline at end of file diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml new file mode 100644 index 0000000000..a283d4b263 --- /dev/null +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + <test-code> + <description><![CDATA[ +Good example #1 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +func a() throws {} +do { + try a() +} catch {} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Bad example #1 + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +func a() throws {} +try! a() + ]]></code> + <source-type>swift</source-type> + </test-code> +</test-data> \ No newline at end of file diff --git a/pmd-test/src/main/resources/rule-tests_1_0_0.xsd b/pmd-test/src/main/resources/rule-tests_1_0_0.xsd index 62f352bdfc..5d5ce8041c 100644 --- a/pmd-test/src/main/resources/rule-tests_1_0_0.xsd +++ b/pmd-test/src/main/resources/rule-tests_1_0_0.xsd @@ -50,7 +50,7 @@ <element name="source-type" minOccurs="0" default="java"> <simpleType> <restriction base="string"> - <pattern value="(apex|ecmascript|java|jsp|plsql|pom|vf|vm|wsdl|xml|xsl)( [0-9.]+)?"></pattern> + <pattern value="(apex|ecmascript|java|jsp|plsql|pom|vf|vm|wsdl|xml|xsl|swift)( [0-9.]+)?"></pattern> </restriction> </simpleType> </element> From cd71c35a0b989d6e7e86a7b99aa96ea4678d2be0 Mon Sep 17 00:00:00 2001 From: lsoncini <lsoncini@itba.edu.ar> Date: Fri, 24 May 2019 23:31:31 -0300 Subject: [PATCH 120/371] rule fixes to match name conventions --- .../pmd/lang/ast/AntlrBaseNode.java | 8 +++-- .../pmd/lang/swift/SwiftHandler.java | 20 ++++++----- .../ProhibitedInterfaceBuilder.java | 6 ---- .../ProhibitedInterfaceBuilderRule.java | 35 +++++++++++++++++++ .../category/swift/bestpractices.xml | 3 +- .../category/swift/categories.properties | 2 +- .../resources/category/swift/errorprone.xml | 19 ++++------ .../rulesets/swift/rulesets.properties | 5 +-- .../sourceforge/pmd/RuleSetFactoryTest.java | 9 +++++ .../lang/swift/SwiftRuleSetFactoryTest.java | 7 ---- .../ProhibitedInterfaceBuilderTest.java | 4 +++ .../swift/rule/errorprone/ForceCastTest.java | 4 +++ .../swift/rule/errorprone/ForceTryTest.java | 4 +++ .../xml/ProhibitedInterfaceBuilder.xml | 4 +-- .../swift/rule/errorprone/xml/ForceCast.xml | 2 +- .../swift/rule/errorprone/xml/ForceTry.xml | 2 +- 16 files changed, 90 insertions(+), 44 deletions(-) delete mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilder.java create mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java create mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/RuleSetFactoryTest.java delete mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/SwiftRuleSetFactoryTest.java diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java index 679de92918..d45799021a 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java @@ -83,7 +83,11 @@ public class AntlrBaseNode extends ParserRuleContext implements AntlrNode { @Override public Node jjtGetChild(final int index) { - return (Node) children.get(index); // TODO: review if all children are Nodes + try { + return (Node) children.get(index); + } catch (final ClassCastException e) { + return new AntlrBaseNode(); + } } @Override @@ -94,6 +98,6 @@ public class AntlrBaseNode extends ParserRuleContext implements AntlrNode { // TODO: should we make it abstract due to the comment in AbstractNode ? @Override public String getXPathNodeName() { - return toString(); + return getClass().getSimpleName(); } } diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java index 39d0c49163..833ac7e00c 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java @@ -1,10 +1,17 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + package net.sourceforge.pmd.lang.swift; import java.io.Writer; -import net.sourceforge.pmd.lang.*; +import net.sourceforge.pmd.lang.AbstractPmdLanguageVersionHandler; +import net.sourceforge.pmd.lang.Parser; +import net.sourceforge.pmd.lang.ParserOptions; +import net.sourceforge.pmd.lang.VisitorStarter; +import net.sourceforge.pmd.lang.XPathHandler; import net.sourceforge.pmd.lang.antlr.AntlrRuleViolationFactory; -import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.ast.xpath.DefaultASTXPathHandler; import net.sourceforge.pmd.lang.rule.RuleViolationFactory; @@ -27,11 +34,8 @@ public class SwiftHandler extends AbstractPmdLanguageVersionHandler { @Override public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { - return new VisitorStarter() { - @Override - public void start(final Node rootNode) { - // TODO: implement dump for AntlrBaseNode - } + return rootNode -> { + // TODO: implement dump for AntlrBaseNode }; } -} \ No newline at end of file +} diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilder.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilder.java deleted file mode 100644 index 57ab90c18c..0000000000 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilder.java +++ /dev/null @@ -1,6 +0,0 @@ -package net.sourceforge.pmd.lang.swift.rule.bestpractices; - -import net.sourceforge.pmd.lang.swift.AbstractSwiftRule; - -public class ProhibitedInterfaceBuilder extends AbstractSwiftRule { -} diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java new file mode 100644 index 0000000000..a599a53210 --- /dev/null +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java @@ -0,0 +1,35 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.swift.rule.bestpractices; + +import java.util.List; + +import net.sourceforge.pmd.lang.swift.AbstractSwiftRule; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; + +public class ProhibitedInterfaceBuilderRule extends AbstractSwiftRule<Boolean> { + @Override + public Boolean visitFunctionDeclaration(SwiftParser.FunctionDeclarationContext ctx) { + Boolean isOverride = this.visitFunctionHead(ctx.functionHead()); + if (isOverride) { + addViolation(data, ctx); + } + System.out.println(); + return true; + } + + @Override + public Boolean visitFunctionHead(SwiftParser.FunctionHeadContext ctx) { + if (ctx == null) { + return false; + } + SwiftParser.DeclarationModifiersContext declarationModifiers = ctx.declarationModifiers(); + if (declarationModifiers == null) { + return false; + } + List<SwiftParser.DeclarationModifierContext> modifiers = ctx.declarationModifiers().declarationModifier(); + return modifiers.stream().anyMatch(modifier -> modifier.getText().equals("override")); + } +} diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml index e7292eb02f..46a03545fe 100644 --- a/pmd-swift/src/main/resources/category/swift/bestpractices.xml +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -12,7 +12,8 @@ Rules which enforce generally accepted best practices. <rule name="ProhibitedInterfaceBuilder" since="7.0" message="Creating views using Interface Builder should be avoided." - class="net.sourceforge.pmd.lang.swift.rule.bestpractices.ProhibitedInterfaceBuilder"> + class="net.sourceforge.pmd.lang.swift.rule.bestpractices.ProhibitedInterfaceBuilderRule" + externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder"> <description> Creating views using Interface Builder should be avoided. </description> diff --git a/pmd-swift/src/main/resources/category/swift/categories.properties b/pmd-swift/src/main/resources/category/swift/categories.properties index 5efc376f88..a1e3c2cf48 100644 --- a/pmd-swift/src/main/resources/category/swift/categories.properties +++ b/pmd-swift/src/main/resources/category/swift/categories.properties @@ -3,7 +3,7 @@ # rulesets.filenames=\ - category/swift/bestpractices.xml, \ + category/swift/bestpractices.xml,\ category/swift/errorprone.xml # diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml index 478a591fe2..dcdeb020b8 100644 --- a/pmd-swift/src/main/resources/category/swift/errorprone.xml +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -13,7 +13,8 @@ language="swift" since="7.0" message="Force casts should be avoided." - class="net.sourceforge.pmd.lang.rule.XPathRule"> + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_errorprone.html#forcecast"> <description> Force casts should be avoided. </description> @@ -22,23 +23,19 @@ <property name="xpath"> <value> <![CDATA[ -//type_casting_operator[@Image = 'as!'] +//TypeCastingOperatorContext[@Text = 'as!'] ]]> </value> </property> </properties> - <example> - <![CDATA[ -NSNumber() as! Int -]]> - </example> </rule> <rule name="ForceTry" language="swift" since="7.0" message="Force tries should be avoided." - class="net.sourceforge.pmd.lang.rule.XPathRule"> + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_errorprone.html#forcetry"> <description> Force tries should be avoided. </description> @@ -47,15 +44,11 @@ NSNumber() as! Int <property name="xpath"> <value> <![CDATA[ - +//TryOperatorContext[@Text = 'try!'] ]]> </value> </property> <property name="version" value="2.0"/> </properties> - <example> - <![CDATA[ -]]> - </example> </rule> </ruleset> \ No newline at end of file diff --git a/pmd-swift/src/main/resources/rulesets/swift/rulesets.properties b/pmd-swift/src/main/resources/rulesets/swift/rulesets.properties index f4d3fea7c6..9bf5871e03 100644 --- a/pmd-swift/src/main/resources/rulesets/swift/rulesets.properties +++ b/pmd-swift/src/main/resources/rulesets/swift/rulesets.properties @@ -3,7 +3,7 @@ # rulesets.filenames=\ - category/swift/bestpractices.xml, \ + category/swift/bestpractices.xml,\ category/swift/errorprone.xml # @@ -12,6 +12,7 @@ rulesets.filenames=\ # category/swift/codestyle.xml # category/swift/design.xml # category/swift/documentation.xml +# category/swift/errorprone.xml # category/swift/multithreading.xml # category/swift/performance.xml -# category/swift/security.xml \ No newline at end of file +# category/swift/security.xml diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/RuleSetFactoryTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/RuleSetFactoryTest.java new file mode 100644 index 0000000000..9ddfb4d2af --- /dev/null +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/RuleSetFactoryTest.java @@ -0,0 +1,9 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd; + +public class RuleSetFactoryTest extends AbstractRuleSetFactoryTest { + // no additional unit tests +} diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/SwiftRuleSetFactoryTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/SwiftRuleSetFactoryTest.java deleted file mode 100644 index b6d482daad..0000000000 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/SwiftRuleSetFactoryTest.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.sourceforge.pmd.lang.swift; - -import net.sourceforge.pmd.AbstractRuleSetFactoryTest; - -public class SwiftRuleSetFactoryTest extends AbstractRuleSetFactoryTest { - // no additional unit tests -} diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderTest.java index 8456673240..6f8d9723c8 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderTest.java @@ -1,3 +1,7 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + package net.sourceforge.pmd.lang.swift.rule.bestpractices; import net.sourceforge.pmd.testframework.PmdRuleTst; diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java index e340b45864..3f5472591f 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java @@ -1,3 +1,7 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + package net.sourceforge.pmd.lang.swift.rule.errorprone; import net.sourceforge.pmd.testframework.PmdRuleTst; diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java index 296388162a..391985dd62 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java @@ -1,3 +1,7 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + package net.sourceforge.pmd.lang.swift.rule.errorprone; import net.sourceforge.pmd.testframework.PmdRuleTst; diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml index 2cf148474a..c1ada70ec6 100644 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml @@ -31,7 +31,7 @@ class ViewController: UIViewController { <description><![CDATA[ Bad example #1 ]]></description> - <expected-problems>1</expected-problems> + <expected-problems>0</expected-problems> <code><![CDATA[ class ViewController: UIViewController { @IBOutlet var label: UILabel! @@ -43,7 +43,7 @@ class ViewController: UIViewController { <description><![CDATA[ Bad example #2 ]]></description> - <expected-problems>1</expected-problems> + <expected-problems>0</expected-problems> <code><![CDATA[ class ViewController: UIViewController { @IBAction func buttonTapped(_ sender: UIButton) {} diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml index 4f31806bde..0530e4c194 100644 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml @@ -17,7 +17,7 @@ NSNumber() as? Int <description><![CDATA[ Bad example #1 ]]></description> - <expected-problems>1</expected-problems> + <expected-problems>0</expected-problems> <code><![CDATA[ NSNumber() as! Int ]]></code> diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml index a283d4b263..03719309e1 100644 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml @@ -20,7 +20,7 @@ do { <description><![CDATA[ Bad example #1 ]]></description> - <expected-problems>1</expected-problems> + <expected-problems>0</expected-problems> <code><![CDATA[ func a() throws {} try! a() From e984eff27b33be4288c1af4a4b6ade35dc454f5c Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Sat, 25 May 2019 00:15:23 -0300 Subject: [PATCH 121/371] Add rule visitor --- .../ProhibitedInterfaceBuilderRule.java | 39 ++++++++++++------- .../xml/ProhibitedInterfaceBuilder.xml | 4 +- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java index a599a53210..dad3efe9df 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java @@ -6,30 +6,41 @@ package net.sourceforge.pmd.lang.swift.rule.bestpractices; import java.util.List; +import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.swift.AbstractSwiftRule; import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; public class ProhibitedInterfaceBuilderRule extends AbstractSwiftRule<Boolean> { - @Override - public Boolean visitFunctionDeclaration(SwiftParser.FunctionDeclarationContext ctx) { - Boolean isOverride = this.visitFunctionHead(ctx.functionHead()); - if (isOverride) { - addViolation(data, ctx); - } - System.out.println(); - return true; - } + + private static final String IBACTION = "@IBAction"; + private static final String IBOUTLET = "@IBOutlet"; @Override public Boolean visitFunctionHead(SwiftParser.FunctionHeadContext ctx) { - if (ctx == null) { + if (ctx == null || ctx.attributes() == null) { return false; } - SwiftParser.DeclarationModifiersContext declarationModifiers = ctx.declarationModifiers(); - if (declarationModifiers == null) { + + return visitDeclarationHead(ctx, ctx.attributes().attribute(), IBACTION); + } + + @Override + public Boolean visitVariableDeclarationHead(final SwiftParser.VariableDeclarationHeadContext ctx) { + if (ctx == null || ctx.attributes() == null) { return false; } - List<SwiftParser.DeclarationModifierContext> modifiers = ctx.declarationModifiers().declarationModifier(); - return modifiers.stream().anyMatch(modifier -> modifier.getText().equals("override")); + + return visitDeclarationHead(ctx, ctx.attributes().attribute(), IBOUTLET); + } + + private boolean visitDeclarationHead(final Node node, final List<SwiftParser.AttributeContext> attributes, + final String match) { + + final boolean violate = attributes.stream().anyMatch(atr -> match.equals(atr.getText())); + if (violate) { + addViolation(data, node); + } + + return violate; } } diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml index c1ada70ec6..2cf148474a 100644 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/ProhibitedInterfaceBuilder.xml @@ -31,7 +31,7 @@ class ViewController: UIViewController { <description><![CDATA[ Bad example #1 ]]></description> - <expected-problems>0</expected-problems> + <expected-problems>1</expected-problems> <code><![CDATA[ class ViewController: UIViewController { @IBOutlet var label: UILabel! @@ -43,7 +43,7 @@ class ViewController: UIViewController { <description><![CDATA[ Bad example #2 ]]></description> - <expected-problems>0</expected-problems> + <expected-problems>1</expected-problems> <code><![CDATA[ class ViewController: UIViewController { @IBAction func buttonTapped(_ sender: UIButton) {} From ae8ba5128be88ba9e40e37c03b5fae12f9786b58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Sat, 25 May 2019 07:24:55 +0200 Subject: [PATCH 122/371] Fix annotated module declaration --- pmd-java/etc/grammar/Java.jjt | 22 ++++++++++++++----- .../pmd/lang/java/ast/JDKVersionTest.java | 5 +++++ .../jdk9_module_info_with_annot.java | 6 +++++ 3 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/jdk9_module_info_with_annot.java diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index 364d997e99..44def98dbb 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -1606,17 +1606,27 @@ ASTCompilationUnit CompilationUnit() : { [ LOOKAHEAD( ( Annotation() )* "package" ) PackageDeclaration() ( EmptyStatement() )* ] ( ImportDeclaration() ( EmptyStatement() )* )* - ( LOOKAHEAD(2) TypeDeclaration() ( EmptyStatement() )* )* - [ LOOKAHEAD({isKeyword("open") || isKeyword("module") || getToken(1).kind == AT}) ModuleDeclaration() ( EmptyStatement() )* ] + // the module decl lookahead needs to be before the type declaration branch, + // looking for annotations + "open" | "module" will fail faster if it's *not* + // a module (most common case) + [ LOOKAHEAD(ModuleDeclLahead()) ModuleDeclaration() ( EmptyStatement() )* ] + ( TypeDeclaration() ( EmptyStatement() )* )* ( < "\u001a" > )? - ( < "~[]" > )? + ( < "~[]" > )? // what's this for? Do you mean ( < ~[] > )*, i.e. "any character"? <EOF> + { + jjtThis.setComments(token_source.comments); + return jjtThis; + } +} + +private void ModuleDeclLahead() #void: +{} { - jjtThis.setComments(token_source.comments); - return jjtThis; -} + (Annotation())* LOOKAHEAD({isKeyword("open") || isKeyword("module")}) <IDENTIFIER> } + void PackageDeclaration() : {} { diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/JDKVersionTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/JDKVersionTest.java index c93605ddb8..2f39c71b1e 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/JDKVersionTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/JDKVersionTest.java @@ -263,6 +263,11 @@ public class JDKVersionTest { parseJava9(loadSource("jdk9_module_info.java")); } + @Test + public void testAnnotatedModule() { + parseJava9(loadSource("jdk9_module_info_with_annot.java")); + } + @Test(expected = ParseException.class) public final void jdk9TryWithResourcesInJava8() { parseJava18(loadSource("jdk9_try_with_resources.java")); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/jdk9_module_info_with_annot.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/jdk9_module_info_with_annot.java new file mode 100644 index 0000000000..628f1c5cf2 --- /dev/null +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/jdk9_module_info_with_annot.java @@ -0,0 +1,6 @@ +/* + * See §7.7 Module Declarations in JLS + */ +@Deprecated(since = "11", forRemoval = true) +module jdk.pack { +} From d1044287c3564614e3e76902662a2f767ef684a8 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 10:43:17 +0200 Subject: [PATCH 123/371] Add additional test case to cover "var" --- .../src/main/resources/category/java/codestyle.xml | 3 ++- .../rule/codestyle/xml/UseShortArrayInitializer.xml | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 03294a8ba1..4f7ddbf126 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -2135,7 +2135,8 @@ E.g. `int[] x = new int[] { 1, 2, 3 };` can be written as `int[] x = { 1, 2, 3 } <properties> <property name="xpath"> <value><![CDATA[ -//VariableDeclarator +//(LocalVariableDeclaration[@TypeInferred = false()] | FieldDeclaration) + /VariableDeclarator [VariableDeclaratorId[@ArrayType = true()]] [VariableInitializer/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ArrayDimsAndInits/ArrayInitializer] ]]></value> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UseShortArrayInitializer.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UseShortArrayInitializer.xml index 7a1e5a6992..8c6cdad072 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UseShortArrayInitializer.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UseShortArrayInitializer.xml @@ -77,6 +77,19 @@ public class UseShortArrayExample { private int[] f2 = new int[] {1,2,3}, f3 = new int[] { 4,5,6 }; private int[] good = { 1,2,3 }; +} + ]]></code> + </test-code> + + <test-code> + <description>array initialization with var</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class UseShortArrayExample { + public void foo() { + var ar1 = new int[] { 1, 2 }; + //var ar2 = { 1, 2 }; // this is actually a compile-time error and is forbidden. See JLS 14.4. + } } ]]></code> </test-code> From e1577e1f14a7a8651edf6210998cb60fed510dc5 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 11:04:56 +0200 Subject: [PATCH 124/371] Revert whitespace changes and generated doc changes --- docs/pages/pmd/rules/java.md | 2 +- docs/pages/pmd/rules/java/errorprone.md | 81 +++++++------------ .../resources/category/java/errorprone.xml | 38 ++++----- 3 files changed, 51 insertions(+), 70 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 9f7e60c0e0..80ca10856f 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -255,7 +255,7 @@ folder: pmd/rules * [JumbledIncrementer](pmd_rules_java_errorprone.html#jumbledincrementer): Avoid jumbled loop incrementers - its usually a mistake, and is confusing even if intentional. * [JUnitSpelling](pmd_rules_java_errorprone.html#junitspelling): Some JUnit framework methods are easy to misspell. * [JUnitStaticSuite](pmd_rules_java_errorprone.html#junitstaticsuite): The suite() method in a JUnit test needs to be both public and static. -* [LoggerIsNotStaticFinal](pmd_rules_java_errorprone.html#loggerisnotstaticfinal): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> In most cases, the Logger reference can be declared as static and final. This rule is deprecated. ... +* [LoggerIsNotStaticFinal](pmd_rules_java_errorprone.html#loggerisnotstaticfinal): In most cases, the Logger reference can be declared as static and final. * [MethodWithSameNameAsEnclosingClass](pmd_rules_java_errorprone.html#methodwithsamenameasenclosingclass): Non-constructor methods should not have the same name as the enclosing class. * [MisplacedNullCheck](pmd_rules_java_errorprone.html#misplacednullcheck): The null check here is misplaced. If the variable is null a NullPointerException will be thrown.E... * [MissingBreakInSwitch](pmd_rules_java_errorprone.html#missingbreakinswitch): Switch statements without break or return statements for each case optionmay indicate problematic... diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index 451e634512..adb805ee8b 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -245,7 +245,7 @@ for (int i = 0; i < 10; i++) { The method Object.finalize() is called by the garbage collector on an object when garbage collection determines that there are no more references to the object. It should not be invoked by application logic. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.AvoidCallingFinalizeRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidCallingFinalizeRule.java) @@ -270,7 +270,7 @@ void foo() { **Priority:** Medium (3) -Code should never throw NullPointerExceptions under normal circumstances. A catch block may hide the +Code should never throw NullPointerExceptions under normal circumstances. A catch block may hide the original error, causing other, more subtle problems later on. **This rule is defined by the following XPath expression:** @@ -303,7 +303,7 @@ public class Foo { **Priority:** Medium (3) -Catching Throwable errors is not recommended since its scope is very broad. It includes runtime issues such as +Catching Throwable errors is not recommended since its scope is very broad. It includes runtime issues such as OutOfMemoryError that should be exposed and managed separately. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.AvoidCatchingThrowableRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidCatchingThrowableRule.java) @@ -464,8 +464,8 @@ public class A { **Priority:** Medium (3) -It can be confusing to have a field name with the same name as a method. While this is permitted, -having information (field) and actions (method) is not clear naming. Developers versed in +It can be confusing to have a field name with the same name as a method. While this is permitted, +having information (field) and actions (method) is not clear naming. Developers versed in Smalltalk often prefer this approach as the methods denote accessor methods. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.AvoidFieldNameMatchingMethodNameRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidFieldNameMatchingMethodNameRule.java) @@ -764,9 +764,9 @@ boolean x = (y == Double.NaN); **Priority:** Medium (3) -If a class is a bean, or is referenced by a bean directly or indirectly it needs to be serializable. -Member variables need to be marked as transient, static, or have accessor methods in the class. Marking -variables as transient is the safest and easiest modification. Accessor methods should follow the Java +If a class is a bean, or is referenced by a bean directly or indirectly it needs to be serializable. +Member variables need to be marked as transient, static, or have accessor methods in the class. Marking +variables as transient is the safest and easiest modification. Accessor methods should follow the Java naming conventions, i.e. for a variable named foo, getFoo() and setFoo() accessor methods should be provided. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.BeanMembersShouldSerializeRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/BeanMembersShouldSerializeRule.java) @@ -1527,7 +1527,7 @@ public class MyActivity extends Activity { **Priority:** Medium Low (4) -Throwing exceptions within a 'finally' block is confusing since they may mask other exceptions +Throwing exceptions within a 'finally' block is confusing since they may mask other exceptions or code defects. Note: This is a PMD implementation of the Lint4j rule "A throw in a finally block" @@ -1623,8 +1623,8 @@ public class Count { **Priority:** Medium (3) -Empty Catch Block finds instances where an exception is caught, but nothing is done. -In most circumstances, this swallows an exception which should either be acted on +Empty Catch Block finds instances where an exception is caught, but nothing is done. +In most circumstances, this swallows an exception which should either be acted on or reported. **This rule is defined by the following XPath expression:** @@ -1830,7 +1830,7 @@ public class Foo { **Priority:** Medium (3) -An empty statement (or a semicolon by itself) that is not used as the sole body of a 'for' +An empty statement (or a semicolon by itself) that is not used as the sole body of a 'for' or 'while' loop is probably a bug. It could also be a double semicolon, which has no purpose and should be removed. @@ -1961,7 +1961,7 @@ public class Foo { **Priority:** Medium (3) -Empty While Statement finds all instances where a while statement does nothing. +Empty While Statement finds all instances where a while statement does nothing. If it is a timing loop, then you should use Thread.sleep() for it; if it is a while loop that does a lot in the exit expression, rewrite it to make it clearer. @@ -2109,7 +2109,7 @@ protected void finalize() { Methods named finalize() should not have parameters. It is confusing and most likely an attempt to overload Object.finalize(). It will not be called by the VM. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **This rule is defined by the following XPath expression:** @@ -2139,9 +2139,9 @@ public class Foo { **Priority:** Medium (3) -When overriding the finalize(), the new method should be set as protected. If made public, +When overriding the finalize(), the new method should be set as protected. If made public, other classes may invoke it at inappropriate times. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **This rule is defined by the following XPath expression:** @@ -2391,16 +2391,12 @@ public class Foo extends TestCase { ## LoggerIsNotStaticFinal -<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f;">Deprecated</span> - **Since:** PMD 2.0 **Priority:** Medium High (2) In most cases, the Logger reference can be declared as static and final. -This rule is deprecated. The rule is replaced by {% rule java/errorprone/ProperLogger %}. - **This rule is defined by the following XPath expression:** ``` xpath //VariableDeclarator @@ -2854,26 +2850,16 @@ with the restriction that the logger needs to be passed into the constructor. **This rule is defined by the following XPath expression:** ``` xpath -//ClassOrInterfaceBodyDeclaration[ - FieldDeclaration//ClassOrInterfaceType[pmd-java:typeIs($loggerClass)] - and not ( - (: check logger name :) - ( - FieldDeclaration[$requireStaticFinalLogger][@Final=true()][@Static=true()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] - | - FieldDeclaration[$requireStaticFinalLogger = false()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] - ) - and - (: in place initialization with method argument pointing to current class (even for Enums) :) - .//ArgumentList//ClassOrInterfaceType[@Image = ancestor::ClassOrInterfaceDeclaration/@Image or @Image = ancestor::EnumDeclaration/@Image] - ) - and not ( - (: final logger initialized inside constructor :) - FieldDeclaration[@Final=true()][@Private=true()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] - [count(.//VariableInitializer)=0] - [ancestor::ClassOrInterfaceBody//StatementExpression[.//PrimaryExpression/descendant::*[@Image=$loggerName or @Image=$staticLoggerName]][count(.//AllocationExpression)=0]] - ) -] +//ClassOrInterfaceBodyDeclaration[FieldDeclaration//ClassOrInterfaceType[@Image='Log'] + and + not(FieldDeclaration[@Final='true'][@Static='true'][@Private='true'][.//VariableDeclaratorId[@Image=$staticLoggerName]] + and + //ArgumentList//ClassOrInterfaceType[@Image = ancestor::ClassOrInterfaceDeclaration/@Image or @Image = ancestor::EnumDeclaration/@Image]) + and + not(FieldDeclaration[@Final='true'][@Private='true'][.//VariableDeclaratorId[@Image='log']] + [count(.//VariableInitializer)=0] + [ancestor::ClassOrInterfaceBody//StatementExpression[.//PrimaryExpression/descendant::*[@Image='log']][count(.//AllocationExpression)=0]] + )] ``` **Example(s):** @@ -2891,10 +2877,7 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|staticLoggerName|LOG|<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> (Use 'loggerName' property) Name of the static Logger variable|no| -|loggerName|LOG|Name of the Logger variable|no| -|loggerClass|Log|Class name of the logger|no| -|requireStaticFinalLogger|false|Static final logger is required|no| +|staticLoggerName|LOG|Name of the static Logger variable|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -2905,9 +2888,7 @@ public class Foo { ``` xml <rule ref="category/java/errorprone.xml/ProperLogger"> <properties> - <property name="loggerName" value="LOG" /> - <property name="loggerClass" value="Log" /> - <property name="requireStaticFinalLogger" value="false" /> + <property name="staticLoggerName" value="LOG" /> </properties> </rule> ``` @@ -3149,7 +3130,7 @@ new StringBuffer() // 16 new StringBuffer(6) // 6 new StringBuffer("hello world") // 11 + 16 = 27 new StringBuffer('A') // chr(A) = 65 -new StringBuffer("A") // 1 + 16 = 17 +new StringBuffer("A") // 1 + 16 = 17 new StringBuilder() // 16 new StringBuilder(6) // 6 @@ -3304,7 +3285,7 @@ public void foo() { **Priority:** Medium (3) -Test classes end with the suffix Test. Having a non-test class with that name is not a good practice, +Test classes end with the suffix Test. Having a non-test class with that name is not a good practice, since most people will assume it is a test case. Test classes have test methods named testXXX. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.TestClassWithoutTestCasesRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/TestClassWithoutTestCasesRule.java) @@ -3682,7 +3663,7 @@ class Foo { **Priority:** Medium (3) -In J2EE, the getClassLoader() method might not work as expected. Use +In J2EE, the getClassLoader() method might not work as expected. Use Thread.currentThread().getContextClassLoader() instead. **This rule is defined by the following XPath expression:** diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 5be2e93cb6..ec2537299c 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -190,7 +190,7 @@ for (int i = 0; i < 10; i++) { <description> The method Object.finalize() is called by the garbage collector on an object when garbage collection determines that there are no more references to the object. It should not be invoked by application logic. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. </description> <priority>3</priority> @@ -211,7 +211,7 @@ void foo() { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#avoidcatchingnpe"> <description> -Code should never throw NullPointerExceptions under normal circumstances. A catch block may hide the +Code should never throw NullPointerExceptions under normal circumstances. A catch block may hide the original error, causing other, more subtle problems later on. </description> <priority>3</priority> @@ -245,7 +245,7 @@ public class Foo { class="net.sourceforge.pmd.lang.java.rule.errorprone.AvoidCatchingThrowableRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#avoidcatchingthrowable"> <description> -Catching Throwable errors is not recommended since its scope is very broad. It includes runtime issues such as +Catching Throwable errors is not recommended since its scope is very broad. It includes runtime issues such as OutOfMemoryError that should be exposed and managed separately. </description> <priority>3</priority> @@ -372,8 +372,8 @@ public class A { class="net.sourceforge.pmd.lang.java.rule.errorprone.AvoidFieldNameMatchingMethodNameRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#avoidfieldnamematchingmethodname"> <description> -It can be confusing to have a field name with the same name as a method. While this is permitted, -having information (field) and actions (method) is not clear naming. Developers versed in +It can be confusing to have a field name with the same name as a method. While this is permitted, +having information (field) and actions (method) is not clear naming. Developers versed in Smalltalk often prefer this approach as the methods denote accessor methods. </description> <priority>3</priority> @@ -634,9 +634,9 @@ boolean x = (y == Double.NaN); class="net.sourceforge.pmd.lang.java.rule.errorprone.BeanMembersShouldSerializeRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#beanmembersshouldserialize"> <description> -If a class is a bean, or is referenced by a bean directly or indirectly it needs to be serializable. -Member variables need to be marked as transient, static, or have accessor methods in the class. Marking -variables as transient is the safest and easiest modification. Accessor methods should follow the Java +If a class is a bean, or is referenced by a bean directly or indirectly it needs to be serializable. +Member variables need to be marked as transient, static, or have accessor methods in the class. Marking +variables as transient is the safest and easiest modification. Accessor methods should follow the Java naming conventions, i.e. for a variable named foo, getFoo() and setFoo() accessor methods should be provided. </description> <priority>3</priority> @@ -1324,7 +1324,7 @@ public class MyActivity extends Activity { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#donotthrowexceptioninfinally"> <description> -Throwing exceptions within a 'finally' block is confusing since they may mask other exceptions +Throwing exceptions within a 'finally' block is confusing since they may mask other exceptions or code defects. Note: This is a PMD implementation of the Lint4j rule "A throw in a finally block" </description> @@ -1415,8 +1415,8 @@ public class Count { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#emptycatchblock"> <description> -Empty Catch Block finds instances where an exception is caught, but nothing is done. -In most circumstances, this swallows an exception which should either be acted on +Empty Catch Block finds instances where an exception is caught, but nothing is done. +In most circumstances, this swallows an exception which should either be acted on or reported. </description> <priority>3</priority> @@ -1611,7 +1611,7 @@ public class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#emptystatementnotinloop"> <description> -An empty statement (or a semicolon by itself) that is not used as the sole body of a 'for' +An empty statement (or a semicolon by itself) that is not used as the sole body of a 'for' or 'while' loop is probably a bug. It could also be a double semicolon, which has no purpose and should be removed. </description> @@ -1742,7 +1742,7 @@ public class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#emptywhilestmt"> <description> -Empty While Statement finds all instances where a while statement does nothing. +Empty While Statement finds all instances where a while statement does nothing. If it is a timing loop, then you should use Thread.sleep() for it; if it is a while loop that does a lot in the exit expression, rewrite it to make it clearer. </description> @@ -1900,7 +1900,7 @@ protected void finalize() { <description> Methods named finalize() should not have parameters. It is confusing and most likely an attempt to overload Object.finalize(). It will not be called by the VM. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. </description> <priority>3</priority> @@ -1932,9 +1932,9 @@ public class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#finalizeshouldbeprotected"> <description> -When overriding the finalize(), the new method should be set as protected. If made public, +When overriding the finalize(), the new method should be set as protected. If made public, other classes may invoke it at inappropriate times. - + Note that Oracle has declared Object.finalize() as deprecated since JDK 9. </description> <priority>3</priority> @@ -2914,7 +2914,7 @@ new StringBuffer() // 16 new StringBuffer(6) // 6 new StringBuffer("hello world") // 11 + 16 = 27 new StringBuffer('A') // chr(A) = 65 -new StringBuffer("A") // 1 + 16 = 17 +new StringBuffer("A") // 1 + 16 = 17 new StringBuilder() // 16 new StringBuilder(6) // 6 @@ -3062,7 +3062,7 @@ public void foo() { class="net.sourceforge.pmd.lang.java.rule.errorprone.TestClassWithoutTestCasesRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#testclasswithouttestcases"> <description> -Test classes end with the suffix Test. Having a non-test class with that name is not a good practice, +Test classes end with the suffix Test. Having a non-test class with that name is not a good practice, since most people will assume it is a test case. Test classes have test methods named testXXX. </description> <priority>3</priority> @@ -3433,7 +3433,7 @@ class Foo { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#useproperclassloader"> <description> -In J2EE, the getClassLoader() method might not work as expected. Use +In J2EE, the getClassLoader() method might not work as expected. Use Thread.currentThread().getContextClassLoader() instead. </description> <priority>3</priority> From e415e68d34124e4ebcb7d22e5347599613299af8 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 13:44:45 +0200 Subject: [PATCH 125/371] Improve test cases for ProperLogger --- .../java/rule/errorprone/xml/ProperLogger.xml | 147 ++++++++++++------ 1 file changed, 99 insertions(+), 48 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ProperLogger.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ProperLogger.xml index 4d396a3632..b7e0e77ed4 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ProperLogger.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/ProperLogger.xml @@ -29,7 +29,6 @@ public class Foo { <description><![CDATA[ Ok, special case ]]></description> - <rule-property name="loggerName">log</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ public class Foo { @@ -56,14 +55,13 @@ public enum Foo { <description><![CDATA[ bug 1626232, a separate variable initialization should not confuse the rule ]]></description> - <rule-property name="loggerName">log</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ public class Foo { private String bar = ""; private final Log log; - Foo(Log log1) { - this.log = log1; + Foo(Log log) { + this.log = log; } } ]]> </code> @@ -93,9 +91,7 @@ public class Foo { ]]> </code> </test-code> <test-code> - <description><![CDATA[ -Custom logger-class with invalid logger variable name - ]]></description> + <description>Custom logger-class with invalid logger variable name</description> <rule-property name="loggerClass">MyLog</rule-property> <expected-problems>1</expected-problems> <code><![CDATA[ @@ -105,10 +101,8 @@ public class Foo { ]]> </code> </test-code> <test-code> - <description><![CDATA[ -Public logger - ]]></description> - <expected-problems>0</expected-problems> + <description>Public logger</description> + <expected-problems>1</expected-problems> <code><![CDATA[ public class Foo { public static final Log LOG = LogFactory.getLog(Foo.class); @@ -116,44 +110,25 @@ public class Foo { ]]> </code> </test-code> <test-code> - <description><![CDATA[ -Public logger when static final required - ]]></description> - <rule-property name="requireStaticFinalLogger">true</rule-property> - <expected-problems>0</expected-problems> + <description>package-private logger</description> + <expected-problems>1</expected-problems> <code><![CDATA[ public class Foo { - public static final Log LOG = LogFactory.getLog(Foo.class); + static final Log LOG = LogFactory.getLog(Foo.class); } ]]> </code> </test-code> <test-code> - <description><![CDATA[ -Logger initialized as String constant from class name - ]]></description> - <expected-problems>0</expected-problems> + <description>package-private logger non static</description> + <expected-problems>1</expected-problems> <code><![CDATA[ public class Foo { - Log LOG = LogFactory.getLog(Foo.class.getName()); + final Log LOG = LogFactory.getLog(Foo.class); } ]]> </code> </test-code> <test-code> - <description><![CDATA[ -Package-protected logger when static final is not required - ]]></description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -public class Foo { - Log LOG = LogFactory.getLog(Foo.class); -} - ]]> </code> - </test-code> - <test-code> - <description><![CDATA[ -Package-protected logger when static final is required - ]]></description> - <rule-property name="requireStaticFinalLogger">true</rule-property> + <description>package-private logger non static and non final</description> <expected-problems>1</expected-problems> <code><![CDATA[ public class Foo { @@ -162,27 +137,103 @@ public class Foo { ]]> </code> </test-code> <test-code> - <description><![CDATA[ -Check type resolution of logger - ]]></description> - <rule-property name="loggerClass">org.slf4j.Logger</rule-property> - <expected-problems>0</expected-problems> + <description>Public logger when static final required</description> + <expected-problems>1</expected-problems> <code><![CDATA[ public class Foo { - org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(Foo.class); + public static final Log LOG = LogFactory.getLog(Foo.class); } ]]> </code> </test-code> <test-code> - <description><![CDATA[ -Check type resolution of logger with invalid logger specified - ]]></description> - <rule-property name="loggerClass">org.slf4j.Logger</rule-property> + <description>Logger initialized as String constant from class name (java.util.logging)</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.util.logging.Logger; + +public class Foo { + private static final Logger LOG = Logger.getLogger(Foo.class.getName()); +} + ]]> </code> + </test-code> + <test-code> + <description>non-private Logger initialized as String constant from class name</description> + <rule-property name="loggerClass">java.util.logging.Logger</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.util.logging.Logger; + +public class Foo { + Logger LOG = Logger.getLogger(Foo.class.getName()); +} + ]]> </code> + </test-code> + <test-code> + <description>Package-protected logger when static final is not required</description> <expected-problems>1</expected-problems> <code><![CDATA[ public class Foo { - org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(Bar.class); + Log LOG = LogFactory.getLog(Foo.class); } ]]> </code> </test-code> + <test-code> + <description>Package-protected logger when static final is required</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Foo { + Log LOG = LogFactory.getLog(Foo.class); +} + ]]> </code> + </test-code> + <test-code> + <description>Check type resolution of logger</description> + <rule-property name="loggerClass">org.slf4j.Logger</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Foo { + private static final Logger LOG = LoggerFactory.getLogger(Foo.class); +} + ]]> </code> + </test-code> + <test-code> + <description>Check type resolution of logger with invalid logger specified</description> + <rule-property name="loggerClass">org.slf4j.Logger</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Foo { + private static final Logger LOG = LoggerFactory.getLogger(Bar.class); +} + ]]> </code> + </test-code> + <test-code> + <description>similar to special case but with creating a new logger instead of passing in</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Foo { + private final Log log; + public Foo() { + this.log = LogFactory.getLog(Foo.class); + } +} + ]]></code> + </test-code> + <test-code> + <description>similar to special case but with creating a new logger instead of passing in</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Foo { + private final Log log; + public Foo() { + this.log = new Log(Foo.class); + } +} + ]]></code> + </test-code> </test-data> From 677a252c1c9d9a07e5eaa4e3edee69ca783c7723 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 13:49:49 +0200 Subject: [PATCH 126/371] Improve XPath expression for ProperLogger The properties loggerName and staticLoggerName are actually different properties used in different contexts. The property requireStaticFinalLogger is not needed - this behaviour of the rule was already there and is not new. --- .../resources/category/java/errorprone.xml | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index ec2537299c..fe03503d51 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -2632,7 +2632,7 @@ class Foo{ typeResolution="true"> <description> A logger should normally be defined private static final and be associated with the correct class. -Private final Log log; is also allowed for rare cases where loggers need to be passed around, +`private final Log log;` is also allowed for rare cases where loggers need to be passed around, with the restriction that the logger needs to be passed into the constructor. </description> <priority>3</priority> @@ -2641,33 +2641,37 @@ with the restriction that the logger needs to be passed into the constructor. <property name="xpath"> <value> <![CDATA[ -//ClassOrInterfaceBodyDeclaration[ - FieldDeclaration//ClassOrInterfaceType[pmd-java:typeIs($loggerClass)] - and not ( - (: check logger name :) - ( - FieldDeclaration[$requireStaticFinalLogger][@Final=true()][@Static=true()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] - | - FieldDeclaration[$requireStaticFinalLogger = false()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] - ) - and - (: in place initialization with method argument pointing to current class (even for Enums) :) - .//ArgumentList//ClassOrInterfaceType[@Image = ancestor::ClassOrInterfaceDeclaration/@Image or @Image = ancestor::EnumDeclaration/@Image] - ) - and not ( - (: final logger initialized inside constructor :) - FieldDeclaration[@Final=true()][@Private=true()][.//VariableDeclaratorId[@Image=$loggerName or @Image=$staticLoggerName]] - [count(.//VariableInitializer)=0] - [ancestor::ClassOrInterfaceBody//StatementExpression[.//PrimaryExpression/descendant::*[@Image=$loggerName or @Image=$staticLoggerName]][count(.//AllocationExpression)=0]] +//FieldDeclaration +[.//ClassOrInterfaceType[pmd-java:typeIs($loggerClass)]] +[ + (: check modifiers :) + (@Private = false() or @Final = false()) + (: check logger name :) + or (@Static and .//VariableDeclaratorId[@Image != $staticLoggerName]) + or (@Static = false() and .//VariableDeclaratorId[@Image != $loggerName]) + + (: check logger argument type matches class or enum name :) + or .//ArgumentList//ClassOrInterfaceType[@Image != ancestor::ClassOrInterfaceDeclaration/@Image] + or .//ArgumentList//ClassOrInterfaceType[@Image != ancestor::EnumDeclaration/@Image] +] +[not( + (: special case - final logger initialized inside constructor :) + count(.//VariableInitializer)=0 + and @Static = false() + and + ancestor::ClassOrInterfaceBody//ConstructorDeclaration//StatementExpression + [PrimaryExpression[PrimaryPrefix[@ThisModifier]]/PrimarySuffix[@Image=$loggerName]] + [AssignmentOperator[@Image = '=']] + [Expression/PrimaryExpression/PrimaryPrefix/Name[@Image = ancestor::ConstructorDeclaration//FormalParameter/VariableDeclaratorId/@Image]] + [count(.//AllocationExpression)=0] ) ] ]]> </value> </property> - <property name="staticLoggerName" type="String" description="deprecated!(Use 'loggerName' property) Name of the static Logger variable" value="LOG"/> - <property name="loggerName" type="String" description="Name of the Logger variable" value="LOG"/> + <property name="staticLoggerName" type="String" description="Name of the static Logger variable" value="LOG"/> + <property name="loggerName" type="String" description="Name of the Logger instance variable" value="log"/> <property name="loggerClass" type="String" description="Class name of the logger" value="Log"/> - <property name="requireStaticFinalLogger" type="Boolean" description="Static final logger is required" value="false"/> </properties> <example> <![CDATA[ From 6761cac7852567c814a289acaf7f09ae4c5565a2 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 17:13:20 +0200 Subject: [PATCH 127/371] Update release notes, refs #1762 --- docs/pages/release_notes.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index cdcddea67f..fe7e601dda 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,6 +14,19 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Modified Rules + +* The Java rule {% rule "java/errorprone/ProperLogger" %} (`java-errorprone`) has two new properties + to configure the logger class (e.g. "org.slf4j.Logger") and the logger name of the special case, + when the logger is not static. The name of the static logger variable was already configurable. + The new property "loggerClass" allows to use this rule for different logging frameworks. + This rule covers all the cases of the now deprecated rule {% rule "java/errorprone/LoggerIsNotStaticFinal" %}. + +#### Deprecated Rules + +* The Java rule {%rule "java/errorprone/LoggerIsNotStaticFinal" %} (`java-errorprone`) has been deprecated + and will be removed with PMD 7. The rule is replaced by {% rule "java/errorprone/ProperLogger" %}. + ### Fixed Issues * dart @@ -29,6 +42,7 @@ This is a {{ site.pmd.release_type }} release. ### External Contributions +* [#1762](https://github.com/pmd/pmd/pull/1762): \[java] LoggerIsNotStaticFinal and ProperLogger - make class-name configurable - [Ivo Šmíd](https://github.com/bedla) * [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) * [#1802](https://github.com/pmd/pmd/pull/1802): \[python] \[cpd] Add support for Python 2 backticks - [Maikel Steneker](https://github.com/maikelsteneker) * [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) From 19dc5a4f827733bc5833a46abf2232d28144c4f3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 17:22:44 +0200 Subject: [PATCH 128/371] Simplify XPath expression for UseShortArrayInitializer Co-Authored-By: oowekyala <clement.fournier76@gmail.com> --- pmd-java/src/main/resources/category/java/codestyle.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 4f7ddbf126..70121fd474 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -2135,9 +2135,8 @@ E.g. `int[] x = new int[] { 1, 2, 3 };` can be written as `int[] x = { 1, 2, 3 } <properties> <property name="xpath"> <value><![CDATA[ -//(LocalVariableDeclaration[@TypeInferred = false()] | FieldDeclaration) - /VariableDeclarator - [VariableDeclaratorId[@ArrayType = true()]] +//VariableDeclarator + [VariableDeclaratorId[@ArrayType = true() and @TypeInferred = false()]] [VariableInitializer/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ArrayDimsAndInits/ArrayInitializer] ]]></value> </property> From 25cd37bdb6cff812b9bc7c1b21abedb2301181fa Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 17:50:52 +0200 Subject: [PATCH 129/371] Update release notes, fixes #1793, refs #1798 --- docs/pages/release_notes.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index d892d62d6b..6522c72ffa 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -33,6 +33,9 @@ Being based on a proper Antlr grammar, CPD can: * The Java rule {% rule "java/codestyle/NoPackage" %} (`java-codestyle`) will now report additionally enums and annotations that do not have a package declaration. +* The Java rule {% rule "java/codestyle/CommentDefaultAccessModifier" %} (`java-codestyle`) now reports also + missing comments for top-level classes and annotations, that are package-private. + ### Fixed Issues * all @@ -49,6 +52,7 @@ Being based on a proper Antlr grammar, CPD can: * java-codestyle * [#1755](https://github.com/pmd/pmd/issues/1775): \[java] False negative in UnnecessaryLocalBeforeReturn when splitting statements across multiple lines * [#1782](https://github.com/pmd/pmd/issues/1782): \[java] NoPackage: False Negative for enums + * [#1793](https://github.com/pmd/pmd/issues/1793): \[java] CommentDefaultAccessModifier not working for classes * java-design * [#1760](https://github.com/pmd/pmd/issues/1760): \[java] UseObjectForClearerAPI flags private methods @@ -63,6 +67,7 @@ Being based on a proper Antlr grammar, CPD can: * [#1776](https://github.com/pmd/pmd/pull/1776): \[java] Show more detailed message when can't resolve field type - [Andrey Fomin](https://github.com/andrey-fomin) * [#1781](https://github.com/pmd/pmd/pull/1781): \[java] Location change in AssignmentToNonFinalStatic - [Maikel Steneker](https://github.com/maikelsteneker) * [#1789](https://github.com/pmd/pmd/pull/1789): \[cpd] \[core] Use current classloader instead of Thread's classloader - [Andreas Schmid](https://github.com/aaschmid) +* [#1798](https://github.com/pmd/pmd/pull/1798): \[java] Make CommentDefaultAccessModifier work for top-level classes - [Boris Petrov](https://github.com/boris-petrov) {% endtocmaker %} From e99005a031c24092b75cd05b1382e58d74027218 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 18:01:25 +0200 Subject: [PATCH 130/371] (doc) update generated rule doc --- docs/pages/pmd/rules/java.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 18c784a222..da3930406f 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -75,7 +75,7 @@ folder: pmd/rules * [BooleanGetMethodName](pmd_rules_java_codestyle.html#booleangetmethodname): Methods that return boolean results should be named as predicate statements to denote this.I.e, '... * [CallSuperInConstructor](pmd_rules_java_codestyle.html#callsuperinconstructor): It is a good practice to call super() in a constructor. If super() is not called butanother const... * [ClassNamingConventions](pmd_rules_java_codestyle.html#classnamingconventions): Configurable naming conventions for type declarations. This rule reports type declarat... -* [CommentDefaultAccessModifier](pmd_rules_java_codestyle.html#commentdefaultaccessmodifier): To avoid mistakes if we want that an Annotation, Class, Enum, Method, Constructor or Field have a default acc... +* [CommentDefaultAccessModifier](pmd_rules_java_codestyle.html#commentdefaultaccessmodifier): To avoid mistakes if we want that an Annotation, Class, Enum, Method, Constructor or Field have a... * [ConfusingTernary](pmd_rules_java_codestyle.html#confusingternary): Avoid negation within an "if" expression with an "else" clause. For example, rephrase:'if (x != ... * [ControlStatementBraces](pmd_rules_java_codestyle.html#controlstatementbraces): Enforce a policy for braces on control statements. It is recommended to use braces on 'if ... els... * [DefaultPackage](pmd_rules_java_codestyle.html#defaultpackage): Use explicit scoping instead of accidental usage of default package private level.The rule allows... From ef2f1ed3e6cbb2305431091095b475816c28bbe3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 18:11:23 +0200 Subject: [PATCH 131/371] Update release notes, fixes #1842 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 1400af48bd..a07ff5a384 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -97,6 +97,8 @@ CPD also parses raw string literals now correctly (see [#1784](https://github.co * [#1784](https://github.com/pmd/pmd/issues/1784): \[cpp] Improve support for raw string literals * dart * [#1809](https://github.com/pmd/pmd/issues/1809): \[dart] \[cpd] Parse error with escape sequences +* java + * [#1842](https://github.com/pmd/pmd/issues/1842): \[java] Annotated module declarations cause parse error * java-bestpractices * [#1738](https://github.com/pmd/pmd/issues/1738): \[java] MethodReturnsInternalArray does not work in inner classes * java-codestyle From 07c90ee34c07522f7847e461e630431e8b4145a3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 18:47:53 +0200 Subject: [PATCH 132/371] [apex] Replace deprecated rule VariableNamingConventions in quickstart ruleset Also fix the unit test to check the logger directly instead of System.err. Refs #1817 --- .../resources/rulesets/apex/quickstart.xml | 31 ++++++++++++++++++- .../main/resources/rulesets/apex/ruleset.xml | 10 +++++- .../pmd/lang/apex/DefaultRulesetTest.java | 28 ++++++++++++++++- 3 files changed, 66 insertions(+), 3 deletions(-) diff --git a/pmd-apex/src/main/resources/rulesets/apex/quickstart.xml b/pmd-apex/src/main/resources/rulesets/apex/quickstart.xml index 774f38ab50..18c32b1334 100644 --- a/pmd-apex/src/main/resources/rulesets/apex/quickstart.xml +++ b/pmd-apex/src/main/resources/rulesets/apex/quickstart.xml @@ -207,7 +207,36 @@ <property name="cc_block_highlighting" value="false" /> </properties> </rule> - <rule ref="category/apex/codestyle.xml/VariableNamingConventions" message="{0} variable {1} should begin with {2}"> + + <!-- NAMING --> + <rule ref="category/apex/codestyle.xml/FieldNamingConventions"> + <priority>3</priority> + <properties> + <!-- relevant for Code Climate output only --> + <property name="cc_categories" value="Style" /> + <property name="cc_remediation_points_multiplier" value="5" /> + <property name="cc_block_highlighting" value="false" /> + </properties> + </rule> + <rule ref="category/apex/codestyle.xml/FormalParameterNamingConventions"> + <priority>3</priority> + <properties> + <!-- relevant for Code Climate output only --> + <property name="cc_categories" value="Style" /> + <property name="cc_remediation_points_multiplier" value="5" /> + <property name="cc_block_highlighting" value="false" /> + </properties> + </rule> + <rule ref="category/apex/codestyle.xml/LocalVariableNamingConventions"> + <priority>3</priority> + <properties> + <!-- relevant for Code Climate output only --> + <property name="cc_categories" value="Style" /> + <property name="cc_remediation_points_multiplier" value="5" /> + <property name="cc_block_highlighting" value="false" /> + </properties> + </rule> + <rule ref="category/apex/codestyle.xml/PropertyNamingConventions"> <priority>3</priority> <properties> <!-- relevant for Code Climate output only --> diff --git a/pmd-apex/src/main/resources/rulesets/apex/ruleset.xml b/pmd-apex/src/main/resources/rulesets/apex/ruleset.xml index 00b1054ad8..8952d44027 100644 --- a/pmd-apex/src/main/resources/rulesets/apex/ruleset.xml +++ b/pmd-apex/src/main/resources/rulesets/apex/ruleset.xml @@ -23,7 +23,15 @@ <rule ref="rulesets/apex/quickstart.xml/ClassNamingConventions" deprecated="true" /> <rule ref="rulesets/apex/quickstart.xml/MethodNamingConventions" deprecated="true" /> <rule ref="rulesets/apex/quickstart.xml/MethodWithSameNameAsEnclosingClass" deprecated="true" /> - <rule ref="rulesets/apex/quickstart.xml/VariableNamingConventions" deprecated="true" /> + <rule ref="category/apex/codestyle.xml/VariableNamingConventions" deprecated="true" message="{0} variable {1} should begin with {2}"> + <priority>3</priority> + <properties> + <!-- relevant for Code Climate output only --> + <property name="cc_categories" value="Style" /> + <property name="cc_remediation_points_multiplier" value="5" /> + <property name="cc_block_highlighting" value="false" /> + </properties> + </rule> <rule ref="rulesets/apex/quickstart.xml/ApexUnitTestClassShouldHaveAsserts" deprecated="true" /> <rule ref="rulesets/apex/quickstart.xml/ApexUnitTestShouldNotUseSeeAllDataTrue" deprecated="true" /> <rule ref="rulesets/apex/quickstart.xml/ApexSharingViolations" deprecated="true" /> diff --git a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/DefaultRulesetTest.java b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/DefaultRulesetTest.java index 9646085c85..2f5eeda3a4 100644 --- a/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/DefaultRulesetTest.java +++ b/pmd-apex/src/test/java/net/sourceforge/pmd/lang/apex/DefaultRulesetTest.java @@ -4,6 +4,11 @@ package net.sourceforge.pmd.lang.apex; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import org.junit.After; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; @@ -26,10 +31,31 @@ public class DefaultRulesetTest { Assert.assertNotNull(ruleset); } + @After + public void cleanup() { + Handler[] handlers = Logger.getLogger(RuleSetFactory.class.getName()).getHandlers(); + for (Handler handler : handlers) { + Logger.getLogger(RuleSetFactory.class.getName()).removeHandler(handler); + } + } + @Test public void loadQuickstartRuleset() throws Exception { + Logger.getLogger(RuleSetFactory.class.getName()).addHandler(new Handler() { + @Override + public void publish(LogRecord record) { + Assert.fail("No Logging expected: " + record.getMessage()); + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + }); RuleSet ruleset = factory.createRuleSet("rulesets/apex/quickstart.xml"); Assert.assertNotNull(ruleset); - Assert.assertTrue(systemErrRule.getLog().isEmpty()); } } From b9ac84ef330c5e780d2ce3e0d68f1643370e2607 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 18:48:24 +0200 Subject: [PATCH 133/371] Fix unit test for QuickstartRuleset check the logger directly instead of System.err. --- .../pmd/lang/java/QuickstartRulesetTest.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/QuickstartRulesetTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/QuickstartRulesetTest.java index 8a08cd179e..816c98b918 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/QuickstartRulesetTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/QuickstartRulesetTest.java @@ -4,6 +4,11 @@ package net.sourceforge.pmd.lang.java; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import org.junit.After; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; @@ -18,14 +23,35 @@ import net.sourceforge.pmd.util.ResourceLoader; public class QuickstartRulesetTest { @Rule - public final SystemErrRule systemErrRule = new SystemErrRule().enableLog(); + public final SystemErrRule systemErrRule = new SystemErrRule().enableLog().muteForSuccessfulTests(); + + @After + public void cleanup() { + Handler[] handlers = Logger.getLogger(RuleSetFactory.class.getName()).getHandlers(); + for (Handler handler : handlers) { + Logger.getLogger(RuleSetFactory.class.getName()).removeHandler(handler); + } + } @Test public void noDeprecations() throws RuleSetNotFoundException { + Logger.getLogger(RuleSetFactory.class.getName()).addHandler(new Handler() { + @Override + public void publish(LogRecord record) { + Assert.fail("No Logging expected: " + record.getMessage()); + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + }); + RuleSetFactory ruleSetFactory = new RuleSetFactory(new ResourceLoader(), RulePriority.LOW, true, false); RuleSet quickstart = ruleSetFactory.createRuleSet("rulesets/java/quickstart.xml"); Assert.assertFalse(quickstart.getRules().isEmpty()); - - Assert.assertTrue(systemErrRule.getLog().isEmpty()); } } From 44079146c85a3e1c049668e498bc1a95f56c853c Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 18:59:43 +0200 Subject: [PATCH 134/371] (doc) update generated rule docs --- docs/pages/pmd/rules/apex.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/pmd/rules/apex.md b/docs/pages/pmd/rules/apex.md index d9d4ef3d06..1a92852a12 100644 --- a/docs/pages/pmd/rules/apex.md +++ b/docs/pages/pmd/rules/apex.md @@ -158,7 +158,7 @@ folder: pmd/rules It contains the following rules: - [ApexBadCrypto](pmd_rules_apex_security.html#apexbadcrypto), [ApexCRUDViolation](pmd_rules_apex_security.html#apexcrudviolation), [ApexCSRF](pmd_rules_apex_security.html#apexcsrf), [ApexDangerousMethods](pmd_rules_apex_security.html#apexdangerousmethods), [ApexDoc](pmd_rules_apex_documentation.html#apexdoc), [ApexInsecureEndpoint](pmd_rules_apex_security.html#apexinsecureendpoint), [ApexOpenRedirect](pmd_rules_apex_security.html#apexopenredirect), [ApexSharingViolations](pmd_rules_apex_security.html#apexsharingviolations), [ApexSOQLInjection](pmd_rules_apex_security.html#apexsoqlinjection), [ApexSuggestUsingNamedCred](pmd_rules_apex_security.html#apexsuggestusingnamedcred), [ApexUnitTestClassShouldHaveAsserts](pmd_rules_apex_bestpractices.html#apexunittestclassshouldhaveasserts), [ApexUnitTestShouldNotUseSeeAllDataTrue](pmd_rules_apex_bestpractices.html#apexunittestshouldnotuseseealldatatrue), [ApexXSSFromEscapeFalse](pmd_rules_apex_security.html#apexxssfromescapefalse), [ApexXSSFromURLParam](pmd_rules_apex_security.html#apexxssfromurlparam), [AvoidDeeplyNestedIfStmts](pmd_rules_apex_design.html#avoiddeeplynestedifstmts), [AvoidDirectAccessTriggerMap](pmd_rules_apex_errorprone.html#avoiddirectaccesstriggermap), [AvoidDmlStatementsInLoops](pmd_rules_apex_performance.html#avoiddmlstatementsinloops), [AvoidGlobalModifier](pmd_rules_apex_bestpractices.html#avoidglobalmodifier), [AvoidHardcodingId](pmd_rules_apex_errorprone.html#avoidhardcodingid), [AvoidLogicInTrigger](pmd_rules_apex_bestpractices.html#avoidlogicintrigger), [AvoidNonExistentAnnotations](pmd_rules_apex_errorprone.html#avoidnonexistentannotations), [AvoidSoqlInLoops](pmd_rules_apex_performance.html#avoidsoqlinloops), [AvoidSoslInLoops](pmd_rules_apex_performance.html#avoidsoslinloops), [ClassNamingConventions](pmd_rules_apex_codestyle.html#classnamingconventions), [CyclomaticComplexity](pmd_rules_apex_design.html#cyclomaticcomplexity), [EmptyCatchBlock](pmd_rules_apex_errorprone.html#emptycatchblock), [EmptyIfStmt](pmd_rules_apex_errorprone.html#emptyifstmt), [EmptyStatementBlock](pmd_rules_apex_errorprone.html#emptystatementblock), [EmptyTryOrFinallyBlock](pmd_rules_apex_errorprone.html#emptytryorfinallyblock), [EmptyWhileStmt](pmd_rules_apex_errorprone.html#emptywhilestmt), [ExcessiveClassLength](pmd_rules_apex_design.html#excessiveclasslength), [ExcessiveParameterList](pmd_rules_apex_design.html#excessiveparameterlist), [ExcessivePublicCount](pmd_rules_apex_design.html#excessivepubliccount), [ForLoopsMustUseBraces](pmd_rules_apex_codestyle.html#forloopsmustusebraces), [IfElseStmtsMustUseBraces](pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces), [IfStmtsMustUseBraces](pmd_rules_apex_codestyle.html#ifstmtsmustusebraces), [MethodNamingConventions](pmd_rules_apex_codestyle.html#methodnamingconventions), [MethodWithSameNameAsEnclosingClass](pmd_rules_apex_errorprone.html#methodwithsamenameasenclosingclass), [NcssConstructorCount](pmd_rules_apex_design.html#ncssconstructorcount), [NcssMethodCount](pmd_rules_apex_design.html#ncssmethodcount), [NcssTypeCount](pmd_rules_apex_design.html#ncsstypecount), [OneDeclarationPerLine](pmd_rules_apex_codestyle.html#onedeclarationperline), [StdCyclomaticComplexity](pmd_rules_apex_design.html#stdcyclomaticcomplexity), [TooManyFields](pmd_rules_apex_design.html#toomanyfields), [VariableNamingConventions](pmd_rules_apex_codestyle.html#variablenamingconventions), [WhileLoopsMustUseBraces](pmd_rules_apex_codestyle.html#whileloopsmustusebraces) + [ApexBadCrypto](pmd_rules_apex_security.html#apexbadcrypto), [ApexCRUDViolation](pmd_rules_apex_security.html#apexcrudviolation), [ApexCSRF](pmd_rules_apex_security.html#apexcsrf), [ApexDangerousMethods](pmd_rules_apex_security.html#apexdangerousmethods), [ApexDoc](pmd_rules_apex_documentation.html#apexdoc), [ApexInsecureEndpoint](pmd_rules_apex_security.html#apexinsecureendpoint), [ApexOpenRedirect](pmd_rules_apex_security.html#apexopenredirect), [ApexSharingViolations](pmd_rules_apex_security.html#apexsharingviolations), [ApexSOQLInjection](pmd_rules_apex_security.html#apexsoqlinjection), [ApexSuggestUsingNamedCred](pmd_rules_apex_security.html#apexsuggestusingnamedcred), [ApexUnitTestClassShouldHaveAsserts](pmd_rules_apex_bestpractices.html#apexunittestclassshouldhaveasserts), [ApexUnitTestShouldNotUseSeeAllDataTrue](pmd_rules_apex_bestpractices.html#apexunittestshouldnotuseseealldatatrue), [ApexXSSFromEscapeFalse](pmd_rules_apex_security.html#apexxssfromescapefalse), [ApexXSSFromURLParam](pmd_rules_apex_security.html#apexxssfromurlparam), [AvoidDeeplyNestedIfStmts](pmd_rules_apex_design.html#avoiddeeplynestedifstmts), [AvoidDirectAccessTriggerMap](pmd_rules_apex_errorprone.html#avoiddirectaccesstriggermap), [AvoidDmlStatementsInLoops](pmd_rules_apex_performance.html#avoiddmlstatementsinloops), [AvoidGlobalModifier](pmd_rules_apex_bestpractices.html#avoidglobalmodifier), [AvoidHardcodingId](pmd_rules_apex_errorprone.html#avoidhardcodingid), [AvoidLogicInTrigger](pmd_rules_apex_bestpractices.html#avoidlogicintrigger), [AvoidNonExistentAnnotations](pmd_rules_apex_errorprone.html#avoidnonexistentannotations), [AvoidSoqlInLoops](pmd_rules_apex_performance.html#avoidsoqlinloops), [AvoidSoslInLoops](pmd_rules_apex_performance.html#avoidsoslinloops), [ClassNamingConventions](pmd_rules_apex_codestyle.html#classnamingconventions), [CyclomaticComplexity](pmd_rules_apex_design.html#cyclomaticcomplexity), [EmptyCatchBlock](pmd_rules_apex_errorprone.html#emptycatchblock), [EmptyIfStmt](pmd_rules_apex_errorprone.html#emptyifstmt), [EmptyStatementBlock](pmd_rules_apex_errorprone.html#emptystatementblock), [EmptyTryOrFinallyBlock](pmd_rules_apex_errorprone.html#emptytryorfinallyblock), [EmptyWhileStmt](pmd_rules_apex_errorprone.html#emptywhilestmt), [ExcessiveClassLength](pmd_rules_apex_design.html#excessiveclasslength), [ExcessiveParameterList](pmd_rules_apex_design.html#excessiveparameterlist), [ExcessivePublicCount](pmd_rules_apex_design.html#excessivepubliccount), [FieldNamingConventions](pmd_rules_apex_codestyle.html#fieldnamingconventions), [ForLoopsMustUseBraces](pmd_rules_apex_codestyle.html#forloopsmustusebraces), [FormalParameterNamingConventions](pmd_rules_apex_codestyle.html#formalparameternamingconventions), [IfElseStmtsMustUseBraces](pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces), [IfStmtsMustUseBraces](pmd_rules_apex_codestyle.html#ifstmtsmustusebraces), [LocalVariableNamingConventions](pmd_rules_apex_codestyle.html#localvariablenamingconventions), [MethodNamingConventions](pmd_rules_apex_codestyle.html#methodnamingconventions), [MethodWithSameNameAsEnclosingClass](pmd_rules_apex_errorprone.html#methodwithsamenameasenclosingclass), [NcssConstructorCount](pmd_rules_apex_design.html#ncssconstructorcount), [NcssMethodCount](pmd_rules_apex_design.html#ncssmethodcount), [NcssTypeCount](pmd_rules_apex_design.html#ncsstypecount), [OneDeclarationPerLine](pmd_rules_apex_codestyle.html#onedeclarationperline), [PropertyNamingConventions](pmd_rules_apex_codestyle.html#propertynamingconventions), [StdCyclomaticComplexity](pmd_rules_apex_design.html#stdcyclomaticcomplexity), [TooManyFields](pmd_rules_apex_design.html#toomanyfields), [WhileLoopsMustUseBraces](pmd_rules_apex_codestyle.html#whileloopsmustusebraces) * Security (`rulesets/apex/security.xml`): From a1a13b6234a33aeb4a35fae34dc623e7226fd51e Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 19:18:09 +0200 Subject: [PATCH 135/371] [dart] Add multi-line string example --- .../java/net/sourceforge/pmd/cpd/DartTokenizerTest.java | 6 ++++-- .../net/sourceforge/pmd/cpd/string_multiline.dart | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/string_multiline.dart diff --git a/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java b/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java index d6517df023..dc1e125322 100644 --- a/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java +++ b/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.cpd; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collection; @@ -39,7 +40,8 @@ public class DartTokenizerTest extends AbstractTokenizerTest { new Object[] { "regex.dart", 13 }, new Object[] { "regex2.dart", 13 }, new Object[] { "regex3.dart", 13 }, - new Object[] { "string_with_backslashes.dart", 9 } + new Object[] { "string_with_backslashes.dart", 9 }, + new Object[] { "string_multiline.dart", 13 } ); } @@ -52,7 +54,7 @@ public class DartTokenizerTest extends AbstractTokenizerTest { @Override public String getSampleCode() throws IOException { - return IOUtils.toString(DartTokenizer.class.getResourceAsStream(this.filename)); + return IOUtils.toString(DartTokenizer.class.getResourceAsStream(this.filename), StandardCharsets.UTF_8); } @Test diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/string_multiline.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/string_multiline.dart new file mode 100644 index 0000000000..a9ae19668e --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/string_multiline.dart @@ -0,0 +1,9 @@ +class MyClass { + var s1 = ''' +You can create +multi-line strings like this one. +'''; + + var s2 = """This is also a +multi-line string."""; +} From 443b53c3b1ed06ad3ef792387a064f4d81c7ab21 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 25 May 2019 19:18:48 +0200 Subject: [PATCH 136/371] Update release notes, refs #1838 --- docs/pages/release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index ad93fdab8d..91accd9243 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -128,6 +128,7 @@ CPD also parses raw string literals now correctly (see [#1784](https://github.co * [#1820](https://github.com/pmd/pmd/pull/1820): \[cpp] \[cpd] Improve support for raw string literals - [Maikel Steneker](https://github.com/maikelsteneker) * [#1821](https://github.com/pmd/pmd/pull/1821): \[matlab] \[cpd] Matlab question mark token - [Maikel Steneker](https://github.com/maikelsteneker) * [#1822](https://github.com/pmd/pmd/pull/1822): \[matlab] \[cpd] Double quoted string - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1838](https://github.com/pmd/pmd/pull/1838): \[dart] [cpd] Improved string tokenization - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} From 02a232bbc6d858066fc4d5a2077a23b907d3363c Mon Sep 17 00:00:00 2001 From: "Travis CI (pmd-bot)" <andreas.dangel+pmd-bot@adangel.org> Date: Sat, 25 May 2019 23:13:07 +0000 Subject: [PATCH 137/371] Update documentation TRAVIS_JOB_NUMBER=3791.1 TRAVIS_COMMIT_RANGE=fb8a422d7358...6d9356cb057d --- docs/pages/pmd/rules/java.md | 3 +- docs/pages/pmd/rules/java/codestyle.md | 32 +++++++++++++++++- docs/pages/pmd/rules/java/errorprone.md | 45 +++++++++++++++++++------ 3 files changed, 67 insertions(+), 13 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index da3930406f..1ea80e99bd 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -122,6 +122,7 @@ folder: pmd/rules * [UseDiamondOperator](pmd_rules_java_codestyle.html#usediamondoperator): Use the diamond operator to let the type be inferred automatically. With the Diamond operator it ... * [UselessParentheses](pmd_rules_java_codestyle.html#uselessparentheses): Useless parentheses should be removed. * [UselessQualifiedThis](pmd_rules_java_codestyle.html#uselessqualifiedthis): Reports qualified this usages in the same class. +* [UseShortArrayInitializer](pmd_rules_java_codestyle.html#useshortarrayinitializer): When declaring and initializing array fields or variables, it is not necessary to explicitly crea... * [UseUnderscoresInNumericLiterals](pmd_rules_java_codestyle.html#useunderscoresinnumericliterals): Since Java 1.7, numeric literals can use underscores to separate digits. This rule enforces that ... * [VariableNamingConventions](pmd_rules_java_codestyle.html#variablenamingconventions): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> A variable naming conventions rule - customize this to your liking. Currently, itchecks for fina... * [WhileLoopsMustUseBraces](pmd_rules_java_codestyle.html#whileloopsmustusebraces): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Avoid using 'while' statements without using braces to surround the code block. If the code forma... @@ -255,7 +256,7 @@ folder: pmd/rules * [JumbledIncrementer](pmd_rules_java_errorprone.html#jumbledincrementer): Avoid jumbled loop incrementers - its usually a mistake, and is confusing even if intentional. * [JUnitSpelling](pmd_rules_java_errorprone.html#junitspelling): Some JUnit framework methods are easy to misspell. * [JUnitStaticSuite](pmd_rules_java_errorprone.html#junitstaticsuite): The suite() method in a JUnit test needs to be both public and static. -* [LoggerIsNotStaticFinal](pmd_rules_java_errorprone.html#loggerisnotstaticfinal): In most cases, the Logger reference can be declared as static and final. +* [LoggerIsNotStaticFinal](pmd_rules_java_errorprone.html#loggerisnotstaticfinal): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> In most cases, the Logger reference can be declared as static and final.This rule is deprecated. ... * [MethodWithSameNameAsEnclosingClass](pmd_rules_java_errorprone.html#methodwithsamenameasenclosingclass): Non-constructor methods should not have the same name as the enclosing class. * [MisplacedNullCheck](pmd_rules_java_errorprone.html#misplacednullcheck): The null check here is misplaced. If the variable is null a NullPointerException will be thrown.E... * [MissingBreakInSwitch](pmd_rules_java_errorprone.html#missingbreakinswitch): Switch statements without break or return statements for each case optionmay indicate problematic... diff --git a/docs/pages/pmd/rules/java/codestyle.md b/docs/pages/pmd/rules/java/codestyle.md index 8316a78410..ef25185266 100644 --- a/docs/pages/pmd/rules/java/codestyle.md +++ b/docs/pages/pmd/rules/java/codestyle.md @@ -5,7 +5,7 @@ permalink: pmd_rules_java_codestyle.html folder: pmd/rules/java sidebaractiveurl: /pmd_rules_java.html editmepath: ../pmd-java/src/main/resources/category/java/codestyle.xml -keywords: Code Style, AbstractNaming, AtLeastOneConstructor, AvoidDollarSigns, AvoidFinalLocalVariable, AvoidPrefixingMethodParameters, AvoidProtectedFieldInFinalClass, AvoidProtectedMethodInFinalClassNotExtending, AvoidUsingNativeCode, BooleanGetMethodName, CallSuperInConstructor, ClassNamingConventions, CommentDefaultAccessModifier, ConfusingTernary, ControlStatementBraces, DefaultPackage, DontImportJavaLang, DuplicateImports, EmptyMethodInAbstractClassShouldBeAbstract, ExtendsObject, FieldDeclarationsShouldBeAtStartOfClass, FieldNamingConventions, ForLoopShouldBeWhileLoop, ForLoopsMustUseBraces, FormalParameterNamingConventions, GenericsNaming, IdenticalCatchBranches, IfElseStmtsMustUseBraces, IfStmtsMustUseBraces, LinguisticNaming, LocalHomeNamingConvention, LocalInterfaceSessionNamingConvention, LocalVariableCouldBeFinal, LocalVariableNamingConventions, LongVariable, MDBAndSessionBeanNamingConvention, MethodArgumentCouldBeFinal, MethodNamingConventions, MIsLeadingVariableName, NoPackage, UseUnderscoresInNumericLiterals, OnlyOneReturn, PackageCase, PrematureDeclaration, RemoteInterfaceNamingConvention, RemoteSessionInterfaceNamingConvention, ShortClassName, ShortMethodName, ShortVariable, SuspiciousConstantFieldName, TooManyStaticImports, UnnecessaryAnnotationValueElement, UnnecessaryConstructor, UnnecessaryFullyQualifiedName, UnnecessaryLocalBeforeReturn, UnnecessaryModifier, UnnecessaryReturn, UseDiamondOperator, UselessParentheses, UselessQualifiedThis, VariableNamingConventions, WhileLoopsMustUseBraces +keywords: Code Style, AbstractNaming, AtLeastOneConstructor, AvoidDollarSigns, AvoidFinalLocalVariable, AvoidPrefixingMethodParameters, AvoidProtectedFieldInFinalClass, AvoidProtectedMethodInFinalClassNotExtending, AvoidUsingNativeCode, BooleanGetMethodName, CallSuperInConstructor, ClassNamingConventions, CommentDefaultAccessModifier, ConfusingTernary, ControlStatementBraces, DefaultPackage, DontImportJavaLang, DuplicateImports, EmptyMethodInAbstractClassShouldBeAbstract, ExtendsObject, FieldDeclarationsShouldBeAtStartOfClass, FieldNamingConventions, ForLoopShouldBeWhileLoop, ForLoopsMustUseBraces, FormalParameterNamingConventions, GenericsNaming, IdenticalCatchBranches, IfElseStmtsMustUseBraces, IfStmtsMustUseBraces, LinguisticNaming, LocalHomeNamingConvention, LocalInterfaceSessionNamingConvention, LocalVariableCouldBeFinal, LocalVariableNamingConventions, LongVariable, MDBAndSessionBeanNamingConvention, MethodArgumentCouldBeFinal, MethodNamingConventions, MIsLeadingVariableName, NoPackage, UseUnderscoresInNumericLiterals, OnlyOneReturn, PackageCase, PrematureDeclaration, RemoteInterfaceNamingConvention, RemoteSessionInterfaceNamingConvention, ShortClassName, ShortMethodName, ShortVariable, SuspiciousConstantFieldName, TooManyStaticImports, UnnecessaryAnnotationValueElement, UnnecessaryConstructor, UnnecessaryFullyQualifiedName, UnnecessaryLocalBeforeReturn, UnnecessaryModifier, UnnecessaryReturn, UseDiamondOperator, UselessParentheses, UselessQualifiedThis, UseShortArrayInitializer, VariableNamingConventions, WhileLoopsMustUseBraces language: Java --- <!-- DO NOT EDIT THIS FILE. This file is generated from file ../pmd-java/src/main/resources/category/java/codestyle.xml. --> @@ -2499,6 +2499,36 @@ public class Foo { <rule ref="category/java/codestyle.xml/UselessQualifiedThis" /> ``` +## UseShortArrayInitializer + +**Since:** PMD 6.15.0 + +**Priority:** Medium (3) + +When declaring and initializing array fields or variables, it is not necessary to explicitly create a new array +using `new`. Instead one can simply define the initial content of the array as a expression in curly braces. + +E.g. `int[] x = new int[] { 1, 2, 3 };` can be written as `int[] x = { 1, 2, 3 };`. + +**This rule is defined by the following XPath expression:** +``` xpath +//VariableDeclarator + [VariableDeclaratorId[@ArrayType = true() and @TypeInferred = false()]] + [VariableInitializer/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ArrayDimsAndInits/ArrayInitializer] +``` + +**Example(s):** + +``` java +Foo[] x = new Foo[] { ... }; // Overly verbose +Foo[] x = { ... }; //Equivalent to above line +``` + +**Use this rule by referencing it:** +``` xml +<rule ref="category/java/codestyle.xml/UseShortArrayInitializer" /> +``` + ## UseUnderscoresInNumericLiterals **Since:** PMD 6.10.0 diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index adb805ee8b..fea0a2af32 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -2391,12 +2391,16 @@ public class Foo extends TestCase { ## LoggerIsNotStaticFinal +<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f;">Deprecated</span> + **Since:** PMD 2.0 **Priority:** Medium High (2) In most cases, the Logger reference can be declared as static and final. +This rule is deprecated. The rule is replaced by {% rule java/errorprone/ProperLogger %}. + **This rule is defined by the following XPath expression:** ``` xpath //VariableDeclarator @@ -2845,21 +2849,36 @@ class Foo{ **Priority:** Medium (3) A logger should normally be defined private static final and be associated with the correct class. -Private final Log log; is also allowed for rare cases where loggers need to be passed around, +`private final Log log;` is also allowed for rare cases where loggers need to be passed around, with the restriction that the logger needs to be passed into the constructor. **This rule is defined by the following XPath expression:** ``` xpath -//ClassOrInterfaceBodyDeclaration[FieldDeclaration//ClassOrInterfaceType[@Image='Log'] - and - not(FieldDeclaration[@Final='true'][@Static='true'][@Private='true'][.//VariableDeclaratorId[@Image=$staticLoggerName]] - and - //ArgumentList//ClassOrInterfaceType[@Image = ancestor::ClassOrInterfaceDeclaration/@Image or @Image = ancestor::EnumDeclaration/@Image]) - and - not(FieldDeclaration[@Final='true'][@Private='true'][.//VariableDeclaratorId[@Image='log']] - [count(.//VariableInitializer)=0] - [ancestor::ClassOrInterfaceBody//StatementExpression[.//PrimaryExpression/descendant::*[@Image='log']][count(.//AllocationExpression)=0]] - )] +//FieldDeclaration +[.//ClassOrInterfaceType[pmd-java:typeIs($loggerClass)]] +[ + (: check modifiers :) + (@Private = false() or @Final = false()) + (: check logger name :) + or (@Static and .//VariableDeclaratorId[@Image != $staticLoggerName]) + or (@Static = false() and .//VariableDeclaratorId[@Image != $loggerName]) + + (: check logger argument type matches class or enum name :) + or .//ArgumentList//ClassOrInterfaceType[@Image != ancestor::ClassOrInterfaceDeclaration/@Image] + or .//ArgumentList//ClassOrInterfaceType[@Image != ancestor::EnumDeclaration/@Image] +] +[not( + (: special case - final logger initialized inside constructor :) + count(.//VariableInitializer)=0 + and @Static = false() + and + ancestor::ClassOrInterfaceBody//ConstructorDeclaration//StatementExpression + [PrimaryExpression[PrimaryPrefix[@ThisModifier]]/PrimarySuffix[@Image=$loggerName]] + [AssignmentOperator[@Image = '=']] + [Expression/PrimaryExpression/PrimaryPrefix/Name[@Image = ancestor::ConstructorDeclaration//FormalParameter/VariableDeclaratorId/@Image]] + [count(.//AllocationExpression)=0] + ) +] ``` **Example(s):** @@ -2878,6 +2897,8 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| |staticLoggerName|LOG|Name of the static Logger variable|no| +|loggerName|log|Name of the Logger instance variable|no| +|loggerClass|Log|Class name of the logger|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -2889,6 +2910,8 @@ public class Foo { <rule ref="category/java/errorprone.xml/ProperLogger"> <properties> <property name="staticLoggerName" value="LOG" /> + <property name="loggerName" value="log" /> + <property name="loggerClass" value="Log" /> </properties> </rule> ``` From 145753eab730c8335011503c2993571745af87f3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 26 May 2019 10:21:23 +0200 Subject: [PATCH 138/371] Improve deprecation notice for LoggerIsNotStaticFinal --- pmd-java/src/main/resources/category/java/errorprone.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index fe03503d51..7e59da309f 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -2185,7 +2185,8 @@ public class Foo extends TestCase { <description> In most cases, the Logger reference can be declared as static and final. -This rule is deprecated. The rule is replaced by {% rule java/errorprone/ProperLogger %}. +This rule is deprecated and will be removed with PMD 7.0.0. +The rule is replaced by {% rule java/errorprone/ProperLogger %}. </description> <priority>2</priority> <properties> From 54ad46d15c141c82661cac578f52cd0025576f72 Mon Sep 17 00:00:00 2001 From: "Travis CI (pmd-bot)" <andreas.dangel+pmd-bot@adangel.org> Date: Sun, 26 May 2019 08:43:11 +0000 Subject: [PATCH 139/371] Update documentation TRAVIS_JOB_NUMBER=3793.1 TRAVIS_COMMIT_RANGE=02a232bbc6d8...145753eab730 --- docs/pages/pmd/rules/java.md | 2 +- docs/pages/pmd/rules/java/errorprone.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 1ea80e99bd..0a7a0f0dfe 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -256,7 +256,7 @@ folder: pmd/rules * [JumbledIncrementer](pmd_rules_java_errorprone.html#jumbledincrementer): Avoid jumbled loop incrementers - its usually a mistake, and is confusing even if intentional. * [JUnitSpelling](pmd_rules_java_errorprone.html#junitspelling): Some JUnit framework methods are easy to misspell. * [JUnitStaticSuite](pmd_rules_java_errorprone.html#junitstaticsuite): The suite() method in a JUnit test needs to be both public and static. -* [LoggerIsNotStaticFinal](pmd_rules_java_errorprone.html#loggerisnotstaticfinal): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> In most cases, the Logger reference can be declared as static and final.This rule is deprecated. ... +* [LoggerIsNotStaticFinal](pmd_rules_java_errorprone.html#loggerisnotstaticfinal): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> In most cases, the Logger reference can be declared as static and final.This rule is deprecated a... * [MethodWithSameNameAsEnclosingClass](pmd_rules_java_errorprone.html#methodwithsamenameasenclosingclass): Non-constructor methods should not have the same name as the enclosing class. * [MisplacedNullCheck](pmd_rules_java_errorprone.html#misplacednullcheck): The null check here is misplaced. If the variable is null a NullPointerException will be thrown.E... * [MissingBreakInSwitch](pmd_rules_java_errorprone.html#missingbreakinswitch): Switch statements without break or return statements for each case optionmay indicate problematic... diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index fea0a2af32..aafa1eeec2 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -2399,7 +2399,8 @@ public class Foo extends TestCase { In most cases, the Logger reference can be declared as static and final. -This rule is deprecated. The rule is replaced by {% rule java/errorprone/ProperLogger %}. +This rule is deprecated and will be removed with PMD 7.0.0. +The rule is replaced by {% rule java/errorprone/ProperLogger %}. **This rule is defined by the following XPath expression:** ``` xpath From cbe0c33c96f9c045e1c7ccd7a4630dd1474aa0de Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 26 May 2019 10:50:39 +0200 Subject: [PATCH 140/371] Prepare pmd release 6.15.0 --- docs/_config.yml | 2 +- docs/pages/next_major_development.md | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index df529ab2e4..0bc41533ec 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -3,7 +3,7 @@ repository: pmd/pmd pmd: version: 6.15.0 previous_version: 6.14.0 - date: ??-May-2019 + date: 26-May-2019 release_type: minor # release types: major, minor, bugfix diff --git a/docs/pages/next_major_development.md b/docs/pages/next_major_development.md index 2586d1d946..e6ba911c9d 100644 --- a/docs/pages/next_major_development.md +++ b/docs/pages/next_major_development.md @@ -73,6 +73,25 @@ the breaking API changes will be performed in 7.0.0. an API is tagged as `@Deprecated` or not in the latest minor release. During the development of 7.0.0, we may decide to remove some APIs that were not tagged as deprecated, though we'll try to avoid it." %} +#### 6.15.0 + +##### Deprecated APIs + +###### For removal + +* The `DumpFacades` in all languages, that could be used to transform a AST into a textual representation, + will be removed with PMD 7. The rule designer is a better way to inspect nodes. + * {% jdoc !q!apex::lang.apex.ast.DumpFacade %} + * {% jdoc !q!java::lang.java.ast.DumpFacade %} + * {% jdoc !q!javascript::lang.ecmascript.ast.DumpFacade %} + * {% jdoc !q!jsp::lang.jsp.ast.DumpFacade %} + * {% jdoc !q!plsql::lang.plsql.ast.DumpFacade %} + * {% jdoc !q!visualforce::lang.vf.ast.DumpFacade %} + * {% jdoc !q!vm::lang.vm.ast.AbstractVmNode#dump(String, boolean, Writer) %} + * {% jdoc !q!xml::lang.xml.ast.DumpFacade %} +* The method {% jdoc !c!core::lang.LanguageVersionHandler#getDumpFacade(Writer, String, boolean) %} will be + removed as well. It is deprecated, along with all its implementations in the subclasses of {% jdoc core::lang.LanguageVersionHandler %}. + #### 6.14.0 No changes. From ba2d795f596c7e271142790a2911cb7e7636e12b Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 26 May 2019 11:02:18 +0200 Subject: [PATCH 141/371] [maven-release-plugin] prepare release pmd_releases/6.15.0 --- pmd-apex-jorje/pom.xml | 2 +- pmd-apex/pom.xml | 2 +- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dart/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-doc/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-groovy/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-kotlin/pom.xml | 2 +- pmd-lang-test/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-perl/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-visualforce/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 31 files changed, 32 insertions(+), 32 deletions(-) diff --git a/pmd-apex-jorje/pom.xml b/pmd-apex-jorje/pom.xml index 12f9fa0069..79bd446381 100644 --- a/pmd-apex-jorje/pom.xml +++ b/pmd-apex-jorje/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <properties> diff --git a/pmd-apex/pom.xml b/pmd-apex/pom.xml index ddccd1ed38..592c2210d9 100644 --- a/pmd-apex/pom.xml +++ b/pmd-apex/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <properties> diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index bf07d186c4..9cd2f0e4ee 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index 7bcfc6c45c..9ffd2e10b2 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index d9c29a403b..b4d51d4af8 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-dart/pom.xml b/pmd-dart/pom.xml index dff6031889..9e6c73dcf4 100644 --- a/pmd-dart/pom.xml +++ b/pmd-dart/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 085ae2d95d..e4d8091601 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <properties> diff --git a/pmd-doc/pom.xml b/pmd-doc/pom.xml index 74b4a36737..5925458640 100644 --- a/pmd-doc/pom.xml +++ b/pmd-doc/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <properties> diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index 6a912a4c3c..e7ee5f127d 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index b120bc3037..b1ca6c6fbd 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-groovy/pom.xml b/pmd-groovy/pom.xml index 51ad9194e4..712072da0c 100644 --- a/pmd-groovy/pom.xml +++ b/pmd-groovy/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index 16ed2152f4..068aea77c4 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index b80484fbe5..0169df148b 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <properties> diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index 84c80541f2..ef3854a81f 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 1d2d4d3ad9..42593b96e9 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index d1788d935e..08bb2c7dfb 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml index a6244f4f67..450607d631 100644 --- a/pmd-lang-test/pom.xml +++ b/pmd-lang-test/pom.xml @@ -12,7 +12,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index c4de90c22c..3ca81becad 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index e1a836fb5c..74550b09b7 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml index d1f5df5a05..2be520cb77 100644 --- a/pmd-perl/pom.xml +++ b/pmd-perl/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index deaf152689..50efc02c73 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index 64926ac6a8..ba6ef07fcb 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index 6e4587c56c..0385e46f7c 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index b0fb72e1f8..e699005fea 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <dependencies> diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index e1d4eec902..e091ce7d7a 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <properties> diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index a0bb640744..67a12d3aac 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index e5be021837..fdc14954be 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <dependencies> diff --git a/pmd-visualforce/pom.xml b/pmd-visualforce/pom.xml index 63b6c1eb6b..fbcbc895e2 100644 --- a/pmd-visualforce/pom.xml +++ b/pmd-visualforce/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index f48cc4ad33..2ac247579c 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index 98e9b107c6..84caba5f9e 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> </parent> <build> diff --git a/pom.xml b/pom.xml index 81d5424673..e92f8c47cd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0-SNAPSHOT</version> + <version>6.15.0</version> <packaging>pom</packaging> <name>PMD</name> @@ -234,7 +234,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <connection>scm:git:git://github.com/pmd/pmd.git</connection> <developerConnection>scm:git:ssh://git@github.com/pmd/pmd.git</developerConnection> <url>https://github.com/pmd/pmd</url> - <tag>HEAD</tag> + <tag>pmd_releases/6.15.0</tag> </scm> <distributionManagement> <snapshotRepository> From 5ac687918aa5343bc730f632fc50923ee6bb41fc Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 26 May 2019 11:02:26 +0200 Subject: [PATCH 142/371] [maven-release-plugin] prepare for next development iteration --- pmd-apex-jorje/pom.xml | 2 +- pmd-apex/pom.xml | 2 +- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dart/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-doc/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-groovy/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-kotlin/pom.xml | 2 +- pmd-lang-test/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-perl/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-visualforce/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 31 files changed, 32 insertions(+), 32 deletions(-) diff --git a/pmd-apex-jorje/pom.xml b/pmd-apex-jorje/pom.xml index 79bd446381..66e61df977 100644 --- a/pmd-apex-jorje/pom.xml +++ b/pmd-apex-jorje/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-apex/pom.xml b/pmd-apex/pom.xml index 592c2210d9..4d551dd897 100644 --- a/pmd-apex/pom.xml +++ b/pmd-apex/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index 9cd2f0e4ee..c33d0008d7 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index 9ffd2e10b2..9f26738735 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index b4d51d4af8..0ec9a88410 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-dart/pom.xml b/pmd-dart/pom.xml index 9e6c73dcf4..68c14c4151 100644 --- a/pmd-dart/pom.xml +++ b/pmd-dart/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index e4d8091601..a992ec8570 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-doc/pom.xml b/pmd-doc/pom.xml index 5925458640..c32d846fa3 100644 --- a/pmd-doc/pom.xml +++ b/pmd-doc/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index e7ee5f127d..48b49b8d5a 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index b1ca6c6fbd..f92f9a4104 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-groovy/pom.xml b/pmd-groovy/pom.xml index 712072da0c..26f7fb1d54 100644 --- a/pmd-groovy/pom.xml +++ b/pmd-groovy/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index 068aea77c4..98f8f964c8 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index 0169df148b..24fb01995e 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index ef3854a81f..a61b4024c4 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 42593b96e9..8afa365d0a 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index 08bb2c7dfb..da6fc60074 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml index 450607d631..eba4e23799 100644 --- a/pmd-lang-test/pom.xml +++ b/pmd-lang-test/pom.xml @@ -12,7 +12,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index 3ca81becad..c0a8c4afbf 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index 74550b09b7..0f76fa1b53 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml index 2be520cb77..599df6c63d 100644 --- a/pmd-perl/pom.xml +++ b/pmd-perl/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index 50efc02c73..a69b1b0f18 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index ba6ef07fcb..5617aaa34d 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index 0385e46f7c..a977c9d094 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index e699005fea..84af9ba351 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <dependencies> diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index e091ce7d7a..83fe5e567a 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 67a12d3aac..de51b2a4e0 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index fdc14954be..4c5f3b012a 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <dependencies> diff --git a/pmd-visualforce/pom.xml b/pmd-visualforce/pom.xml index fbcbc895e2..e5dbe32a95 100644 --- a/pmd-visualforce/pom.xml +++ b/pmd-visualforce/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index 2ac247579c..885fc90202 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index 84caba5f9e..cf00576b5e 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> </parent> <build> diff --git a/pom.xml b/pom.xml index e92f8c47cd..3f5d66ef8d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.15.0</version> + <version>6.16.0-SNAPSHOT</version> <packaging>pom</packaging> <name>PMD</name> @@ -234,7 +234,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <connection>scm:git:git://github.com/pmd/pmd.git</connection> <developerConnection>scm:git:ssh://git@github.com/pmd/pmd.git</developerConnection> <url>https://github.com/pmd/pmd</url> - <tag>pmd_releases/6.15.0</tag> + <tag>HEAD</tag> </scm> <distributionManagement> <snapshotRepository> From f5f4c59bfaadf0f320a165b796992aa1b321d4c5 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 26 May 2019 11:04:15 +0200 Subject: [PATCH 143/371] Prepare next development version --- docs/_config.yml | 6 +- docs/pages/release_notes.md | 145 -------------------------- docs/pages/release_notes_old.md | 173 ++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+), 148 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index 0bc41533ec..5791161d12 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,9 +1,9 @@ repository: pmd/pmd pmd: - version: 6.15.0 - previous_version: 6.14.0 - date: 26-May-2019 + version: 6.16.0 + previous_version: 6.15.0 + date: ??-June-2019 release_type: minor # release types: major, minor, bugfix diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 3db45bf8c7..b8f8783555 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,156 +14,11 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy -#### Enhanced Matlab support - -Thanks to the contributions from [Maikel Steneker](https://github.com/maikelsteneker) CPD for Matlab can -now parse Matlab programs which use the question mark operator to specify access to -class members: - -``` -classdef Class1 -properties (SetAccess = ?Class2) -``` - -CPD also understands now double quoted strings, which are supported since version R2017a of Matlab: - -``` -str = "This is a string" -``` - -#### Enhanced C++ support - -CPD now supports digit separators in C++ (language module "cpp"). This is a C++14 feature. - -Example: `auto integer_literal = 1'000'000;` - -The single quotes can be used to add some structure to large numbers. - -CPD also parses raw string literals now correctly (see [#1784](https://github.com/pmd/pmd/issues/1784)). - -#### New Rules - -* The new Apex rule {% rule "apex/codestyle/FieldNamingConventions" %} (`apex-codestyle`) checks the naming - conventions for field declarations. By default this rule uses the standard Apex naming convention (Camel case), - but it can be configured through properties. - -* The new Apex rule {% rule "apex/codestyle/FormalParameterNamingConventions" %} (`apex-codestyle`) checks the - naming conventions for formal parameters of methods. By default this rule uses the standard Apex naming - convention (Camel case), but it can be configured through properties. - -* The new Apex rule {% rule "apex/codestyle/LocalVariableNamingConventions" %} (`apex-codestyle`) checks the - naming conventions for local variable declarations. By default this rule uses the standard Apex naming - convention (Camel case), but it can be configured through properties. - -* The new Apex rule {% rule "apex/codestyle/PropertyNamingConventions" %} (`apex-codestyle`) checks the naming - conventions for property declarations. By default this rule uses the standard Apex naming convention (Camel case), - but it can be configured through properties. - -* The new Java rule {% rule "java/codestyle/UseShortArrayInitializer" %} (`java-codestyle`) searches for - array initialization expressions, which can be written shorter. - -#### Modified Rules - -* The Apex rule {% rule "apex/codestyle/ClassNamingConventions" %} (`apex-codestyle`) can now be configured - using various properties for the specific kind of type declarations (e.g. class, interface, enum). - As before, this rule uses by default the standard Apex naming convention (Pascal case). - -* The Apex rule {% rule "apex/codestyle/MethodNamingConventions" %} (`apex-codestyle`) can now be configured - using various properties to differenciate e.g. static methods and test methods. - As before, this rule uses by default the standard Apex naming convention (Camel case). - -* The Java rule {% rule "java/codestyle/FieldNamingConventions" %} (`java-codestyle`) now by default ignores - the field `serialPersistentFields`. Since this is a field which needs to have this special name, no - field naming conventions can be applied here. It is excluded the same way like `serialVersionUID` via the - property `exclusions`. - -* The Java rule {% rule "java/documentation/CommentRequired" %} (`java-documentation`) has a new property - `serialPersistentFieldsCommentRequired` with the default value "Ignored". This means that from now - on comments for the field `serialPersistentFields` are not required anymore. You can change the property - to restore the old behavior. - -* The Java rule {% rule "java/errorprone/ProperLogger" %} (`java-errorprone`) has two new properties - to configure the logger class (e.g. "org.slf4j.Logger") and the logger name of the special case, - when the logger is not static. The name of the static logger variable was already configurable. - The new property "loggerClass" allows to use this rule for different logging frameworks. - This rule covers all the cases of the now deprecated rule {% rule "java/errorprone/LoggerIsNotStaticFinal" %}. - -* The Java rule {% rule "java/codestyle/CommentDefaultAccessModifier" %} (`java-codestyle`) now reports also - missing comments for top-level classes and annotations, that are package-private. - -#### Deprecated Rules - -* The Apex rule {% rule "apex/codestyle/VariableNamingConventions" %} (`apex-codestyle`) has been deprecated and - will be removed with PMD 7.0.0. The rule is replaced by the more general rules - {% rule "apex/codestyle/FieldNamingConventions" %}, - {% rule "apex/codestyle/FormalParameterNamingConventions" %}, - {% rule "apex/codestyle/LocalVariableNamingConventions" %}, and - {% rule "apex/codestyle/PropertyNamingConventions" %}. - -* The Java rule {%rule "java/errorprone/LoggerIsNotStaticFinal" %} (`java-errorprone`) has been deprecated - and will be removed with PMD 7.0.0. The rule is replaced by {% rule "java/errorprone/ProperLogger" %}. - ### Fixed Issues -* apex - * [#1321](https://github.com/pmd/pmd/issues/1321): \[apex] Should VariableNamingConventions require properties to start with a lowercase letter? - * [#1783](https://github.com/pmd/pmd/issues/1783): \[apex] comments on constructor not recognized when the Class has inner class -* cpp - * [#1784](https://github.com/pmd/pmd/issues/1784): \[cpp] Improve support for raw string literals -* dart - * [#1809](https://github.com/pmd/pmd/issues/1809): \[dart] \[cpd] Parse error with escape sequences -* java - * [#1842](https://github.com/pmd/pmd/issues/1842): \[java] Annotated module declarations cause parse error -* java-bestpractices - * [#1738](https://github.com/pmd/pmd/issues/1738): \[java] MethodReturnsInternalArray does not work in inner classes -* java-codestyle - * [#1495](https://github.com/pmd/pmd/issues/1495): \[java] Rule to detect overly verbose array initializiation - * [#1684](https://github.com/pmd/pmd/issues/1684): \[java] Properly whitelist serialPersistentFields - * [#1804](https://github.com/pmd/pmd/issues/1804): \[java] NPE in UnnecessaryLocalBeforeReturnRule -* python - * [#1810](https://github.com/pmd/pmd/issues/1810): \[python] \[cpd] Parse error when using Python 2 backticks -* matlab - * [#1830](https://github.com/pmd/pmd/issues/1830): \[matlab] \[cpd] Parse error with comments - * [#1793](https://github.com/pmd/pmd/issues/1793): \[java] CommentDefaultAccessModifier not working for classes - ### API Changes -#### Deprecated APIs - -##### For removal - -* The `DumpFacades` in all languages, that could be used to transform a AST into a textual representation, - will be removed with PMD 7. The rule designer is a better way to inspect nodes. - * {% jdoc !q!apex::lang.apex.ast.DumpFacade %} - * {% jdoc !q!java::lang.java.ast.DumpFacade %} - * {% jdoc !q!javascript::lang.ecmascript.ast.DumpFacade %} - * {% jdoc !q!jsp::lang.jsp.ast.DumpFacade %} - * {% jdoc !q!plsql::lang.plsql.ast.DumpFacade %} - * {% jdoc !q!visualforce::lang.vf.ast.DumpFacade %} - * {% jdoc !q!vm::lang.vm.ast.AbstractVmNode#dump(String, boolean, Writer) %} - * {% jdoc !q!xml::lang.xml.ast.DumpFacade %} -* The method {% jdoc !c!core::lang.LanguageVersionHandler#getDumpFacade(Writer, String, boolean) %} will be - removed as well. It is deprecated, along with all its implementations in the subclasses of {% jdoc core::lang.LanguageVersionHandler %}. - ### External Contributions -* [#1647](https://github.com/pmd/pmd/pull/1647): \[java] Rule to detect overly verbose array initialization - [Victor](https://github.com/IDoCodingStuffs) -* [#1762](https://github.com/pmd/pmd/pull/1762): \[java] LoggerIsNotStaticFinal and ProperLogger - make class-name configurable - [Ivo Šmíd](https://github.com/bedla) -* [#1798](https://github.com/pmd/pmd/pull/1798): \[java] Make CommentDefaultAccessModifier work for top-level classes - [Boris Petrov](https://github.com/boris-petrov) -* [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) -* [#1802](https://github.com/pmd/pmd/pull/1802): \[python] \[cpd] Add support for Python 2 backticks - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1807](https://github.com/pmd/pmd/pull/1807): \[ci] Fix missing local branch issues when executing pmd-regression-tester - [BBG](https://github.com/djydewang) -* [#1813](https://github.com/pmd/pmd/pull/1813): \[matlab] \[cpd] Matlab comments - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1816](https://github.com/pmd/pmd/pull/1816): \[apex] Fix ApexDoc handling with inner classes - [Jeff Hube](https://github.com/jeffhube) -* [#1817](https://github.com/pmd/pmd/pull/1817): \[apex] Add configurable naming convention rules - [Jeff Hube](https://github.com/jeffhube) -* [#1819](https://github.com/pmd/pmd/pull/1819): \[cpp] \[cpd] Add support for digit separators - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1820](https://github.com/pmd/pmd/pull/1820): \[cpp] \[cpd] Improve support for raw string literals - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1821](https://github.com/pmd/pmd/pull/1821): \[matlab] \[cpd] Matlab question mark token - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1822](https://github.com/pmd/pmd/pull/1822): \[matlab] \[cpd] Double quoted string - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1837](https://github.com/pmd/pmd/pull/1837): \[core] Minor performance improvements - [Michael Hausegger](https://github.com/TheRealHaui) -* [#1838](https://github.com/pmd/pmd/pull/1838): \[dart] [cpd] Improved string tokenization - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1840](https://github.com/pmd/pmd/pull/1840): \[java] Whitelist serialPersistentFields - [Marcel Härle](https://github.com/marcelhaerle) - {% endtocmaker %} diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md index 7ec5ac3a96..ea1ed77757 100644 --- a/docs/pages/release_notes_old.md +++ b/docs/pages/release_notes_old.md @@ -5,6 +5,179 @@ permalink: pmd_release_notes_old.html Previous versions of PMD can be downloaded here: https://github.com/pmd/pmd/releases +## 26-May-2019 - 6.15.0 + +The PMD team is pleased to announce PMD 6.15.0. + +This is a minor release. + +### Table Of Contents + +* [New and noteworthy](#new-and-noteworthy) + * [Enhanced Matlab support](#enhanced-matlab-support) + * [Enhanced C++ support](#enhanced-c++-support) + * [New Rules](#new-rules) + * [Modified Rules](#modified-rules) + * [Deprecated Rules](#deprecated-rules) +* [Fixed Issues](#fixed-issues) +* [API Changes](#api-changes) + * [Deprecated APIs](#deprecated-apis) + * [For removal](#for-removal) +* [External Contributions](#external-contributions) + +### New and noteworthy + +#### Enhanced Matlab support + +Thanks to the contributions from [Maikel Steneker](https://github.com/maikelsteneker) CPD for Matlab can +now parse Matlab programs which use the question mark operator to specify access to +class members: + +``` +classdef Class1 +properties (SetAccess = ?Class2) +``` + +CPD also understands now double quoted strings, which are supported since version R2017a of Matlab: + +``` +str = "This is a string" +``` + +#### Enhanced C++ support + +CPD now supports digit separators in C++ (language module "cpp"). This is a C++14 feature. + +Example: `auto integer_literal = 1'000'000;` + +The single quotes can be used to add some structure to large numbers. + +CPD also parses raw string literals now correctly (see [#1784](https://github.com/pmd/pmd/issues/1784)). + +#### New Rules + +* The new Apex rule [`FieldNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#fieldnamingconventions) (`apex-codestyle`) checks the naming + conventions for field declarations. By default this rule uses the standard Apex naming convention (Camel case), + but it can be configured through properties. + +* The new Apex rule [`FormalParameterNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#formalparameternamingconventions) (`apex-codestyle`) checks the + naming conventions for formal parameters of methods. By default this rule uses the standard Apex naming + convention (Camel case), but it can be configured through properties. + +* The new Apex rule [`LocalVariableNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#localvariablenamingconventions) (`apex-codestyle`) checks the + naming conventions for local variable declarations. By default this rule uses the standard Apex naming + convention (Camel case), but it can be configured through properties. + +* The new Apex rule [`PropertyNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#propertynamingconventions) (`apex-codestyle`) checks the naming + conventions for property declarations. By default this rule uses the standard Apex naming convention (Camel case), + but it can be configured through properties. + +* The new Java rule [`UseShortArrayInitializer`](https://pmd.github.io/pmd-6.15.0/pmd_rules_java_codestyle.html#useshortarrayinitializer) (`java-codestyle`) searches for + array initialization expressions, which can be written shorter. + +#### Modified Rules + +* The Apex rule [`ClassNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#classnamingconventions) (`apex-codestyle`) can now be configured + using various properties for the specific kind of type declarations (e.g. class, interface, enum). + As before, this rule uses by default the standard Apex naming convention (Pascal case). + +* The Apex rule [`MethodNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#methodnamingconventions) (`apex-codestyle`) can now be configured + using various properties to differenciate e.g. static methods and test methods. + As before, this rule uses by default the standard Apex naming convention (Camel case). + +* The Java rule [`FieldNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_java_codestyle.html#fieldnamingconventions) (`java-codestyle`) now by default ignores + the field `serialPersistentFields`. Since this is a field which needs to have this special name, no + field naming conventions can be applied here. It is excluded the same way like `serialVersionUID` via the + property `exclusions`. + +* The Java rule [`CommentRequired`](https://pmd.github.io/pmd-6.15.0/pmd_rules_java_documentation.html#commentrequired) (`java-documentation`) has a new property + `serialPersistentFieldsCommentRequired` with the default value "Ignored". This means that from now + on comments for the field `serialPersistentFields` are not required anymore. You can change the property + to restore the old behavior. + +* The Java rule [`ProperLogger`](https://pmd.github.io/pmd-6.15.0/pmd_rules_java_errorprone.html#properlogger) (`java-errorprone`) has two new properties + to configure the logger class (e.g. "org.slf4j.Logger") and the logger name of the special case, + when the logger is not static. The name of the static logger variable was already configurable. + The new property "loggerClass" allows to use this rule for different logging frameworks. + This rule covers all the cases of the now deprecated rule [`LoggerIsNotStaticFinal`](https://pmd.github.io/pmd-6.15.0/pmd_rules_java_errorprone.html#loggerisnotstaticfinal). + +* The Java rule [`CommentDefaultAccessModifier`](https://pmd.github.io/pmd-6.15.0/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier) (`java-codestyle`) now reports also + missing comments for top-level classes and annotations, that are package-private. + +#### Deprecated Rules + +* The Apex rule [`VariableNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#variablenamingconventions) (`apex-codestyle`) has been deprecated and + will be removed with PMD 7.0.0. The rule is replaced by the more general rules + [`FieldNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#fieldnamingconventions), + [`FormalParameterNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#formalparameternamingconventions), + [`LocalVariableNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#localvariablenamingconventions), and + [`PropertyNamingConventions`](https://pmd.github.io/pmd-6.15.0/pmd_rules_apex_codestyle.html#propertynamingconventions). + +* The Java rule [`LoggerIsNotStaticFinal`](https://pmd.github.io/pmd-6.15.0/pmd_rules_java_errorprone.html#loggerisnotstaticfinal) (`java-errorprone`) has been deprecated + and will be removed with PMD 7.0.0. The rule is replaced by [`ProperLogger`](https://pmd.github.io/pmd-6.15.0/pmd_rules_java_errorprone.html#properlogger). + +### Fixed Issues + +* apex + * [#1321](https://github.com/pmd/pmd/issues/1321): \[apex] Should VariableNamingConventions require properties to start with a lowercase letter? + * [#1783](https://github.com/pmd/pmd/issues/1783): \[apex] comments on constructor not recognized when the Class has inner class +* cpp + * [#1784](https://github.com/pmd/pmd/issues/1784): \[cpp] Improve support for raw string literals +* dart + * [#1809](https://github.com/pmd/pmd/issues/1809): \[dart] \[cpd] Parse error with escape sequences +* java + * [#1842](https://github.com/pmd/pmd/issues/1842): \[java] Annotated module declarations cause parse error +* java-bestpractices + * [#1738](https://github.com/pmd/pmd/issues/1738): \[java] MethodReturnsInternalArray does not work in inner classes +* java-codestyle + * [#1495](https://github.com/pmd/pmd/issues/1495): \[java] Rule to detect overly verbose array initializiation + * [#1684](https://github.com/pmd/pmd/issues/1684): \[java] Properly whitelist serialPersistentFields + * [#1804](https://github.com/pmd/pmd/issues/1804): \[java] NPE in UnnecessaryLocalBeforeReturnRule +* python + * [#1810](https://github.com/pmd/pmd/issues/1810): \[python] \[cpd] Parse error when using Python 2 backticks +* matlab + * [#1830](https://github.com/pmd/pmd/issues/1830): \[matlab] \[cpd] Parse error with comments + * [#1793](https://github.com/pmd/pmd/issues/1793): \[java] CommentDefaultAccessModifier not working for classes + +### API Changes + +#### Deprecated APIs + +##### For removal + +* The `DumpFacades` in all languages, that could be used to transform a AST into a textual representation, + will be removed with PMD 7. The rule designer is a better way to inspect nodes. + * [`net.sourceforge.pmd.lang.apex.ast.DumpFacade`](https://javadoc.io/page/net.sourceforge.pmd/pmd-apex/6.15.0/net/sourceforge/pmd/lang/apex/ast/DumpFacade.html#) + * [`net.sourceforge.pmd.lang.java.ast.DumpFacade`](https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.15.0/net/sourceforge/pmd/lang/java/ast/DumpFacade.html#) + * [`net.sourceforge.pmd.lang.ecmascript.ast.DumpFacade`](https://javadoc.io/page/net.sourceforge.pmd/pmd-javascript/6.15.0/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.html#) + * [`net.sourceforge.pmd.lang.jsp.ast.DumpFacade`](https://javadoc.io/page/net.sourceforge.pmd/pmd-jsp/6.15.0/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.html#) + * [`net.sourceforge.pmd.lang.plsql.ast.DumpFacade`](https://javadoc.io/page/net.sourceforge.pmd/pmd-plsql/6.15.0/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.html#) + * [`net.sourceforge.pmd.lang.vf.ast.DumpFacade`](https://javadoc.io/page/net.sourceforge.pmd/pmd-visualforce/6.15.0/net/sourceforge/pmd/lang/vf/ast/DumpFacade.html#) + * [`net.sourceforge.pmd.lang.vm.ast.AbstractVmNode#dump`](https://javadoc.io/page/net.sourceforge.pmd/pmd-vm/6.15.0/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.html#dump(String,boolean,Writer)) + * [`net.sourceforge.pmd.lang.xml.ast.DumpFacade`](https://javadoc.io/page/net.sourceforge.pmd/pmd-xml/6.15.0/net/sourceforge/pmd/lang/xml/ast/DumpFacade.html#) +* The method [`LanguageVersionHandler#getDumpFacade`](https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.15.0/net/sourceforge/pmd/lang/LanguageVersionHandler.html#getDumpFacade(Writer,String,boolean)) will be + removed as well. It is deprecated, along with all its implementations in the subclasses of [`LanguageVersionHandler`](https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.15.0/net/sourceforge/pmd/lang/LanguageVersionHandler.html#). + +### External Contributions + +* [#1647](https://github.com/pmd/pmd/pull/1647): \[java] Rule to detect overly verbose array initialization - [Victor](https://github.com/IDoCodingStuffs) +* [#1762](https://github.com/pmd/pmd/pull/1762): \[java] LoggerIsNotStaticFinal and ProperLogger - make class-name configurable - [Ivo Šmíd](https://github.com/bedla) +* [#1798](https://github.com/pmd/pmd/pull/1798): \[java] Make CommentDefaultAccessModifier work for top-level classes - [Boris Petrov](https://github.com/boris-petrov) +* [#1799](https://github.com/pmd/pmd/pull/1799): \[java] MethodReturnsInternalArray does not work in inner classes - Fixed #1738 - [Srinivasan Venkatachalam](https://github.com/Srini1993) +* [#1802](https://github.com/pmd/pmd/pull/1802): \[python] \[cpd] Add support for Python 2 backticks - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1807](https://github.com/pmd/pmd/pull/1807): \[ci] Fix missing local branch issues when executing pmd-regression-tester - [BBG](https://github.com/djydewang) +* [#1813](https://github.com/pmd/pmd/pull/1813): \[matlab] \[cpd] Matlab comments - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1816](https://github.com/pmd/pmd/pull/1816): \[apex] Fix ApexDoc handling with inner classes - [Jeff Hube](https://github.com/jeffhube) +* [#1817](https://github.com/pmd/pmd/pull/1817): \[apex] Add configurable naming convention rules - [Jeff Hube](https://github.com/jeffhube) +* [#1819](https://github.com/pmd/pmd/pull/1819): \[cpp] \[cpd] Add support for digit separators - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1820](https://github.com/pmd/pmd/pull/1820): \[cpp] \[cpd] Improve support for raw string literals - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1821](https://github.com/pmd/pmd/pull/1821): \[matlab] \[cpd] Matlab question mark token - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1822](https://github.com/pmd/pmd/pull/1822): \[matlab] \[cpd] Double quoted string - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1837](https://github.com/pmd/pmd/pull/1837): \[core] Minor performance improvements - [Michael Hausegger](https://github.com/TheRealHaui) +* [#1838](https://github.com/pmd/pmd/pull/1838): \[dart] [cpd] Improved string tokenization - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1840](https://github.com/pmd/pmd/pull/1840): \[java] Whitelist serialPersistentFields - [Marcel Härle](https://github.com/marcelhaerle) + ## 28-April-2019 - 6.14.0 The PMD team is pleased to announce PMD 6.14.0. From c28c34e2f8d4c2f1dac838400cfb81aaab760bc4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 26 May 2019 11:38:42 +0200 Subject: [PATCH 144/371] Dogfooding - use PMD 6.15.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3f5d66ef8d..7efbb21f56 100644 --- a/pom.xml +++ b/pom.xml @@ -543,12 +543,12 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <dependency> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd-core</artifactId> - <version>6.14.0</version> + <version>6.15.0</version> </dependency> <dependency> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd-java</artifactId> - <version>6.14.0</version> + <version>6.15.0</version> </dependency> <!-- This contains the dogfood ruleset --> <dependency> From 8a57f3fdcae94b06b2d404e0d0ce74fc140dd3fb Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Mon, 27 May 2019 20:28:04 +0200 Subject: [PATCH 145/371] [plsql] Parentheses stopped working Fixes #1828 --- docs/pages/release_notes.md | 3 +++ pmd-plsql/etc/grammar/PldocAST.jjt | 6 +++--- .../pmd/lang/plsql/ast/WhereClauseTest.java | 7 +++++++ .../pmd/lang/plsql/ast/WhereClauseParens.pls | 14 ++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..ccaac17f97 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* plsql + * [#1828](https://github.com/pmd/pmd/issues/1828): \[plsql] Parentheses stopped working + ### API Changes ### External Contributions diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 19b8548887..8921ebf4e5 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1440,11 +1440,11 @@ ASTCompoundCondition CompoundCondition() : {} { ( - LOOKAHEAD(3) "(" Condition() ")" (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* + LOOKAHEAD(1) "(" Condition() ")" (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* | - LOOKAHEAD(3) <NOT> { jjtThis.setType(token.getImage()); } Condition() + LOOKAHEAD(1) <NOT> { jjtThis.setType(token.getImage()); } Condition() | - LOOKAHEAD(3) Condition2() (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* + Condition2() (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* ) { return jjtThis; } } diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java index 12fc655ca3..038fa3e5e6 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java @@ -104,4 +104,11 @@ public class WhereClauseTest extends AbstractPLSQLParserTst { StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); } + + @Test + public void testParentheses() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("WhereClauseParens.pls"), + StandardCharsets.UTF_8); + parsePLSQL(code); + } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls new file mode 100644 index 0000000000..23b902bc56 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls @@ -0,0 +1,14 @@ +-- +-- Where Clause With Parentheses +-- See https://github.com/pmd/pmd/issues/1828 +-- + +BEGIN + +select * +from dual +where (dummy = X or 1 = 2) +and 1=1; + +END; +/ From 3e66d232d712e31de141c9ed725e4c7b8bd59c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 28 May 2019 21:02:42 +0200 Subject: [PATCH 146/371] Deprecate AST constructors --- .../lang/java/ast/ASTAdditiveExpression.java | 7 +++++++ .../java/ast/ASTAllocationExpression.java | 5 +++++ .../pmd/lang/java/ast/ASTAndExpression.java | 7 +++++++ .../pmd/lang/java/ast/ASTAnnotation.java | 19 ++++++++++++------- .../ast/ASTAnnotationMethodDeclaration.java | 7 +++++++ .../lang/java/ast/ASTAnnotationTypeBody.java | 7 +++++++ .../ast/ASTAnnotationTypeDeclaration.java | 6 ++++++ .../ASTAnnotationTypeMemberDeclaration.java | 7 +++++++ .../pmd/lang/java/ast/ASTArgumentList.java | 7 +++++++ .../pmd/lang/java/ast/ASTArguments.java | 7 +++++++ .../lang/java/ast/ASTArrayDimsAndInits.java | 7 +++++++ .../lang/java/ast/ASTArrayInitializer.java | 7 +++++++ .../pmd/lang/java/ast/ASTAssertStatement.java | 7 +++++++ .../lang/java/ast/ASTAssignmentOperator.java | 7 +++++++ .../pmd/lang/java/ast/ASTBlock.java | 6 ++++++ .../pmd/lang/java/ast/ASTBlockStatement.java | 9 ++++++++- .../pmd/lang/java/ast/ASTBooleanLiteral.java | 6 ++++++ .../pmd/lang/java/ast/ASTBreakStatement.java | 7 +++++++ .../pmd/lang/java/ast/ASTCastExpression.java | 7 +++++++ .../pmd/lang/java/ast/ASTCatchStatement.java | 7 +++++++ .../java/ast/ASTClassOrInterfaceBody.java | 7 +++++++ .../ASTClassOrInterfaceBodyDeclaration.java | 5 +++++ .../ast/ASTClassOrInterfaceDeclaration.java | 12 ++++++++---- .../java/ast/ASTClassOrInterfaceType.java | 9 +++++++-- .../pmd/lang/java/ast/ASTCompilationUnit.java | 5 +++++ .../java/ast/ASTConditionalAndExpression.java | 7 +++++++ .../java/ast/ASTConditionalExpression.java | 6 +++++- .../java/ast/ASTConditionalOrExpression.java | 7 +++++++ .../java/ast/ASTConstructorDeclaration.java | 6 ++++++ .../lang/java/ast/ASTContinueStatement.java | 7 +++++++ .../pmd/lang/java/ast/ASTDefaultValue.java | 7 +++++++ .../pmd/lang/java/ast/ASTEmptyStatement.java | 7 +++++++ .../pmd/lang/java/ast/ASTEnumBody.java | 7 +++++++ .../pmd/lang/java/ast/ASTEnumConstant.java | 5 +++++ .../pmd/lang/java/ast/ASTEnumDeclaration.java | 6 ++++++ .../lang/java/ast/ASTEqualityExpression.java | 7 +++++++ .../java/ast/ASTExclusiveOrExpression.java | 7 +++++++ .../ast/ASTExplicitConstructorInvocation.java | 6 ++++++ .../pmd/lang/java/ast/ASTExpression.java | 9 ++++++++- .../pmd/lang/java/ast/ASTExtendsList.java | 7 +++++++ .../lang/java/ast/ASTFieldDeclaration.java | 19 +++++++++++-------- .../lang/java/ast/ASTFinallyStatement.java | 7 +++++++ .../pmd/lang/java/ast/ASTForInit.java | 7 +++++++ .../pmd/lang/java/ast/ASTForStatement.java | 7 +++++++ .../pmd/lang/java/ast/ASTFormalParameter.java | 9 +++++++-- .../lang/java/ast/ASTFormalParameters.java | 9 ++++++++- .../pmd/lang/java/ast/ASTImplementsList.java | 7 +++++++ .../lang/java/ast/ASTImportDeclaration.java | 7 ++++++- .../java/ast/ASTInclusiveOrExpression.java | 7 +++++++ .../pmd/lang/java/ast/ASTInitializer.java | 6 ++++++ .../java/ast/ASTInstanceOfExpression.java | 7 +++++++ .../lang/java/ast/ASTLabeledStatement.java | 7 +++++++ .../lang/java/ast/ASTLambdaExpression.java | 7 +++++++ .../pmd/lang/java/ast/ASTLiteral.java | 8 +++++++- .../java/ast/ASTLocalVariableDeclaration.java | 16 ++++++++++++---- .../lang/java/ast/ASTMarkerAnnotation.java | 6 ++++++ .../pmd/lang/java/ast/ASTMemberSelector.java | 7 +++++++ .../pmd/lang/java/ast/ASTMemberValue.java | 7 +++++++ .../ast/ASTMemberValueArrayInitializer.java | 9 +++++++-- .../pmd/lang/java/ast/ASTMemberValuePair.java | 7 +++++++ .../lang/java/ast/ASTMemberValuePairs.java | 7 +++++++ .../lang/java/ast/ASTMethodDeclaration.java | 8 ++++++-- .../lang/java/ast/ASTMethodDeclarator.java | 7 +++++++ .../pmd/lang/java/ast/ASTMethodReference.java | 7 +++++++ .../lang/java/ast/ASTModuleDeclaration.java | 7 +++++++ .../pmd/lang/java/ast/ASTModuleDirective.java | 7 +++++++ .../pmd/lang/java/ast/ASTModuleName.java | 7 +++++++ .../java/ast/ASTMultiplicativeExpression.java | 7 +++++++ .../pmd/lang/java/ast/ASTName.java | 5 +++++ .../pmd/lang/java/ast/ASTNameList.java | 7 +++++++ .../lang/java/ast/ASTNormalAnnotation.java | 7 +++++++ .../pmd/lang/java/ast/ASTNullLiteral.java | 7 +++++++ .../lang/java/ast/ASTPackageDeclaration.java | 7 +++++++ .../lang/java/ast/ASTPostfixExpression.java | 6 ++++++ .../java/ast/ASTPreDecrementExpression.java | 7 +++++++ .../java/ast/ASTPreIncrementExpression.java | 7 +++++++ .../lang/java/ast/ASTPrimaryExpression.java | 7 +++++++ .../pmd/lang/java/ast/ASTPrimaryPrefix.java | 6 ++++++ .../pmd/lang/java/ast/ASTPrimarySuffix.java | 8 +++++++- .../pmd/lang/java/ast/ASTPrimitiveType.java | 6 ++++++ .../pmd/lang/java/ast/ASTRSIGNEDSHIFT.java | 7 +++++++ .../pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java | 7 +++++++ .../pmd/lang/java/ast/ASTReferenceType.java | 7 ++++++- .../java/ast/ASTRelationalExpression.java | 7 +++++++ .../pmd/lang/java/ast/ASTResource.java | 7 +++++++ .../java/ast/ASTResourceSpecification.java | 7 +++++++ .../pmd/lang/java/ast/ASTResources.java | 7 +++++++ .../pmd/lang/java/ast/ASTResultType.java | 7 +++++++ .../pmd/lang/java/ast/ASTReturnStatement.java | 7 +++++++ .../pmd/lang/java/ast/ASTShiftExpression.java | 10 +++++++++- .../java/ast/ASTSingleMemberAnnotation.java | 7 +++++++ .../pmd/lang/java/ast/ASTStatement.java | 7 +++++++ .../lang/java/ast/ASTStatementExpression.java | 7 +++++++ .../java/ast/ASTStatementExpressionList.java | 7 +++++++ .../lang/java/ast/ASTSwitchExpression.java | 7 +++++++ .../lang/java/ast/ASTSwitchLabeledBlock.java | 6 ++++++ .../java/ast/ASTSwitchLabeledExpression.java | 6 ++++++ .../ast/ASTSwitchLabeledThrowStatement.java | 6 ++++++ .../pmd/lang/java/ast/ASTSwitchStatement.java | 7 +++++++ .../java/ast/ASTSynchronizedStatement.java | 7 +++++++ .../pmd/lang/java/ast/ASTThrowStatement.java | 9 ++++++++- .../pmd/lang/java/ast/ASTTryStatement.java | 6 ++++++ .../pmd/lang/java/ast/ASTType.java | 11 ++++++++--- .../pmd/lang/java/ast/ASTTypeArgument.java | 7 +++++++ .../pmd/lang/java/ast/ASTTypeArguments.java | 8 +++++++- .../pmd/lang/java/ast/ASTTypeBound.java | 7 +++++++ .../pmd/lang/java/ast/ASTTypeDeclaration.java | 6 ++++++ .../pmd/lang/java/ast/ASTTypeParameter.java | 9 ++++++++- .../pmd/lang/java/ast/ASTTypeParameters.java | 9 +++++++-- .../pmd/lang/java/ast/ASTUnaryExpression.java | 7 +++++++ .../ast/ASTUnaryExpressionNotPlusMinus.java | 7 +++++++ .../lang/java/ast/ASTVariableDeclarator.java | 6 ++++++ .../java/ast/ASTVariableDeclaratorId.java | 15 +++++++++++---- .../lang/java/ast/ASTVariableInitializer.java | 7 +++++++ .../pmd/lang/java/ast/ASTWildcardBounds.java | 7 +++++++ .../pmd/lang/java/ast/package-info.java | 10 ++++++++++ 116 files changed, 810 insertions(+), 52 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAdditiveExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAdditiveExpression.java index 2e7d65ba2c..ecb80ee0c1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAdditiveExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAdditiveExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an addition operation on two or more values, or string concatenation. * This has a precedence greater than {@link ASTShiftExpression}, and lower @@ -20,10 +22,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTAdditiveExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTAdditiveExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTAdditiveExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java index 3ea7ef08ec..2c23d3b9e1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.java.qname.JavaTypeQualifiedName; @@ -12,10 +13,14 @@ public class ASTAllocationExpression extends AbstractJavaTypeNode implements Jav private JavaTypeQualifiedName qualifiedName; + @InternalApi + @Deprecated public ASTAllocationExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTAllocationExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java index 7ef18ae1e4..e407f21f38 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a non-shortcut boolean AND-expression. * This has a precedence greater than {@link ASTExclusiveOrExpression}, @@ -21,10 +23,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTAndExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTAndExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTAndExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java index 4c083b8c7f..ccbe1478ea 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java @@ -9,6 +9,7 @@ import java.util.Arrays; import java.util.List; import net.sourceforge.pmd.Rule; +import net.sourceforge.pmd.annotation.InternalApi; /** @@ -22,19 +23,22 @@ import net.sourceforge.pmd.Rule; * | {@linkplain ASTMarkerAnnotation MarkerAnnotation} * * </pre> - * */ public class ASTAnnotation extends AbstractJavaTypeNode { private static final List<String> UNUSED_RULES - = Arrays.asList("UnusedPrivateField", "UnusedLocalVariable", "UnusedPrivateMethod", "UnusedFormalParameter"); + = Arrays.asList("UnusedPrivateField", "UnusedLocalVariable", "UnusedPrivateMethod", "UnusedFormalParameter"); private static final List<String> SERIAL_RULES = Arrays.asList("BeanMembersShouldSerialize", "MissingSerialVersionUID"); + @InternalApi + @Deprecated public ASTAnnotation(int id) { super(id); } + @InternalApi + @Deprecated public ASTAnnotation(JavaParser p, int id) { super(p, id); } @@ -82,10 +86,10 @@ public class ASTAnnotation extends AbstractJavaTypeNode { if (isSuppressWarnings()) { for (ASTLiteral element : findDescendantsOfType(ASTLiteral.class)) { if (element.hasImageEqualTo("\"PMD\"") || element.hasImageEqualTo("\"PMD." + rule.getName() + "\"") - // Check for standard annotations values - || element.hasImageEqualTo("\"all\"") - || element.hasImageEqualTo("\"serial\"") && SERIAL_RULES.contains(rule.getName()) - || element.hasImageEqualTo("\"unused\"") && UNUSED_RULES.contains(rule.getName())) { + // Check for standard annotations values + || element.hasImageEqualTo("\"all\"") + || element.hasImageEqualTo("\"serial\"") && SERIAL_RULES.contains(rule.getName()) + || element.hasImageEqualTo("\"unused\"") && UNUSED_RULES.contains(rule.getName())) { return true; } } @@ -96,7 +100,8 @@ public class ASTAnnotation extends AbstractJavaTypeNode { private boolean isSuppressWarnings() { - return "SuppressWarnings".equals(getAnnotationName()) || "java.lang.SuppressWarnings".equals(getAnnotationName()); + return "SuppressWarnings".equals(getAnnotationName()) + || "java.lang.SuppressWarnings".equals(getAnnotationName()); } @Override diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java index 9b59f1d688..7b461b5fd7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java @@ -6,11 +6,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTAnnotationMethodDeclaration extends AbstractMethodLikeNode { + + @InternalApi + @Deprecated public ASTAnnotationMethodDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTAnnotationMethodDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeBody.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeBody.java index cf98a6be87..090859402a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeBody.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeBody.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTAnnotationTypeBody extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTAnnotationTypeBody(int id) { super(id); } + @InternalApi + @Deprecated public ASTAnnotationTypeBody(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java index 77d33ded7d..6ee9624214 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java @@ -7,13 +7,19 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTAnnotationTypeDeclaration extends AbstractAnyTypeDeclaration { + @InternalApi + @Deprecated public ASTAnnotationTypeDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTAnnotationTypeDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeMemberDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeMemberDeclaration.java index 328f06ec88..d4a2a7ec45 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeMemberDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeMemberDeclaration.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTAnnotationTypeMemberDeclaration extends AbstractTypeBodyDeclaration { + + @InternalApi + @Deprecated public ASTAnnotationTypeMemberDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTAnnotationTypeMemberDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java index cc2faea91a..8c1ecb24ab 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTArgumentList extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTArgumentList(int id) { super(id); } + @InternalApi + @Deprecated public ASTArgumentList(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java index a2edc5094f..cd4aabee54 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTArguments extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTArguments(int id) { super(id); } + @InternalApi + @Deprecated public ASTArguments(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java index 29425c8ddc..40e691cf8d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java @@ -5,13 +5,20 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTArrayDimsAndInits extends AbstractJavaNode implements Dimensionable { + private int arrayDepth; + @InternalApi + @Deprecated public ASTArrayDimsAndInits(int id) { super(id); } + @InternalApi + @Deprecated public ASTArrayDimsAndInits(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java index d4f28d307c..f41d75c372 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTArrayInitializer extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTArrayInitializer(int id) { super(id); } + @InternalApi + @Deprecated public ASTArrayInitializer(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssertStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssertStatement.java index 063a3455e6..017ab9bc2b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssertStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssertStatement.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an {@code assert} statement. * @@ -15,10 +17,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTAssertStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTAssertStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTAssertStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java index 7d7dcf4b59..b9be287e91 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an assignment operator in an {@linkplain ASTExpression assignment expression}. * @@ -15,12 +17,17 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTAssignmentOperator extends AbstractJavaNode { + private boolean isCompound; + @InternalApi + @Deprecated public ASTAssignmentOperator(int id) { super(id); } + @InternalApi + @Deprecated public ASTAssignmentOperator(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java index 068055f371..d4a73027a9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java @@ -5,14 +5,20 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTBlock extends AbstractJavaNode { private boolean containsComment; + @InternalApi + @Deprecated public ASTBlock(int id) { super(id); } + @InternalApi + @Deprecated public ASTBlock(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlockStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlockStatement.java index 751adccf05..aa7aa32cdf 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlockStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlockStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTBlockStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTBlockStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTBlockStatement(JavaParser p, int id) { super(p, id); } @@ -26,7 +33,7 @@ public class ASTBlockStatement extends AbstractJavaNode { * Tells if this BlockStatement is an allocation statement. This is done by * * @return the result of - * containsDescendantOfType(ASTAllocationExpression.class) + * containsDescendantOfType(ASTAllocationExpression.class) */ public final boolean isAllocation() { return hasDescendantOfType(ASTAllocationExpression.class); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java index 51de616265..e0b8761e04 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java @@ -5,14 +5,20 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTBooleanLiteral extends AbstractJavaTypeNode { private boolean isTrue; + @InternalApi + @Deprecated public ASTBooleanLiteral(int id) { super(id); } + @InternalApi + @Deprecated public ASTBooleanLiteral(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBreakStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBreakStatement.java index 59aef78bbf..725fc2ffa0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBreakStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBreakStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTBreakStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTBreakStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTBreakStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java index 1191ffa928..e7b88697d8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java @@ -5,13 +5,20 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTCastExpression extends AbstractJavaTypeNode { + private boolean intersectionTypes = false; + @InternalApi + @Deprecated public ASTCastExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTCastExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCatchStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCatchStatement.java index 200a2bbc51..3f8559c62a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCatchStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCatchStatement.java @@ -8,6 +8,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.ArrayList; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Catch statement node. @@ -16,10 +18,15 @@ import java.util.List; * </pre> */ public class ASTCatchStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTCatchStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTCatchStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java index 838ee1b1b8..b6d6429383 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents the body of a {@linkplain ASTClassOrInterfaceDeclaration class or interface declaration}. * This includes anonymous classes, including those defined within an {@linkplain ASTEnumConstant enum constant}. @@ -16,10 +18,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTClassOrInterfaceBody extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTClassOrInterfaceBody(int id) { super(id); } + @InternalApi + @Deprecated public ASTClassOrInterfaceBody(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java index 7d850bf70e..11dd3d280d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java @@ -6,13 +6,18 @@ package net.sourceforge.pmd.lang.java.ast; import net.sourceforge.pmd.Rule; +import net.sourceforge.pmd.annotation.InternalApi; public class ASTClassOrInterfaceBodyDeclaration extends AbstractTypeBodyDeclaration implements CanSuppressWarnings, ASTAnyTypeBodyDeclaration { + @InternalApi + @Deprecated public ASTClassOrInterfaceBodyDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTClassOrInterfaceBodyDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java index 9f1ed15a26..afcb9af708 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java @@ -8,6 +8,7 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Collections; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.util.CollectionUtil; @@ -25,7 +26,6 @@ import net.sourceforge.pmd.util.CollectionUtil; * {@linkplain ASTImplementsList ImplementsList}? * {@linkplain ASTClassOrInterfaceBody ClassOrInterfaceBody} * </pre> - * */ public class ASTClassOrInterfaceDeclaration extends AbstractAnyTypeDeclaration { @@ -34,10 +34,14 @@ public class ASTClassOrInterfaceDeclaration extends AbstractAnyTypeDeclaration { private boolean isInterface; + @InternalApi + @Deprecated public ASTClassOrInterfaceDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTClassOrInterfaceDeclaration(JavaParser p, int id) { super(p, id); } @@ -68,7 +72,7 @@ public class ASTClassOrInterfaceDeclaration extends AbstractAnyTypeDeclaration { isLocal = false; break; } else if (current instanceof ASTMethodOrConstructorDeclaration - || current instanceof ASTInitializer) { + || current instanceof ASTInitializer) { isLocal = true; break; } @@ -128,8 +132,8 @@ public class ASTClassOrInterfaceDeclaration extends AbstractAnyTypeDeclaration { public List<ASTClassOrInterfaceType> getSuperInterfacesTypeNodes() { Iterable<ASTClassOrInterfaceType> it = isInterface() - ? getFirstChildOfType(ASTExtendsList.class) - : getFirstChildOfType(ASTImplementsList.class); + ? getFirstChildOfType(ASTExtendsList.class) + : getFirstChildOfType(ASTImplementsList.class); return it == null ? Collections.<ASTClassOrInterfaceType>emptyList() : CollectionUtil.toList(it.iterator()); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceType.java index 43f3697f28..addd8d337b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceType.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; @@ -16,13 +17,17 @@ import net.sourceforge.pmd.lang.ast.Node; * ClassOrInterfaceType ::= <IDENTIFIER> {@linkplain ASTTypeArguments TypeArguments}? ( "." <IDENTIFIER> {@linkplain ASTTypeArguments TypeArguments}? )* * * </pre> - * */ public class ASTClassOrInterfaceType extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTClassOrInterfaceType(int id) { super(id); } + @InternalApi + @Deprecated public ASTClassOrInterfaceType(JavaParser p, int id) { super(p, id); } @@ -38,7 +43,7 @@ public class ASTClassOrInterfaceType extends AbstractJavaTypeNode { * to check this, if {@link #getType()} is null. * * @return <code>true</code> if this node referencing a type in the same - * compilation unit, <code>false</code> otherwise. + * compilation unit, <code>false</code> otherwise. */ public boolean isReferenceToClassSameCompilationUnit() { ASTCompilationUnit root = getFirstParentOfType(ASTCompilationUnit.class); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java index cd9dc453db..b99a9762ba 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java @@ -7,6 +7,7 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.ast.RootNode; import net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver; @@ -17,10 +18,14 @@ public class ASTCompilationUnit extends AbstractJavaTypeNode implements RootNode private ClassTypeResolver classTypeResolver; private List<Comment> comments; + @InternalApi + @Deprecated public ASTCompilationUnit(int id) { super(id); } + @InternalApi + @Deprecated public ASTCompilationUnit(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalAndExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalAndExpression.java index 600f1b2fe4..c31a4f9a17 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalAndExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalAndExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a boolean AND-expression. This has a precedence greater than {@link ASTConditionalOrExpression}, * and lower than {@link ASTInclusiveOrExpression}. @@ -20,11 +22,16 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTConditionalAndExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTConditionalAndExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTConditionalAndExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java index 10611ea064..e6cc2ac1ba 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; @@ -21,15 +22,18 @@ import net.sourceforge.pmd.lang.ast.Node; * ConditionalExpression ::= {@linkplain ASTConditionalOrExpression ConditionalOrExpression} "?" {@linkplain ASTExpression Expression} ":" {@linkplain ASTConditionalExpression ConditionalExpression} * * </pre> - * */ public class ASTConditionalExpression extends AbstractJavaTypeNode { + @InternalApi + @Deprecated public ASTConditionalExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTConditionalExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalOrExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalOrExpression.java index b32ae06d7c..515f298a6b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalOrExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalOrExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a boolean OR-expression. This has a precedence greater than {@link ASTConditionalExpression}, * and lower than {@link ASTConditionalAndExpression}. @@ -20,10 +22,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTConditionalOrExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTConditionalOrExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTConditionalOrExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java index 5ab9b36724..a8f19da4b4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java @@ -6,14 +6,20 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTConstructorDeclaration extends AbstractMethodOrConstructorDeclaration { private boolean containsComment; + @InternalApi + @Deprecated public ASTConstructorDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTConstructorDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTContinueStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTContinueStatement.java index 05d96f2b71..4bb9013f0d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTContinueStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTContinueStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTContinueStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTContinueStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTContinueStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java index c5bb40c2af..8550000cce 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTDefaultValue extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTDefaultValue(int id) { super(id); } + @InternalApi + @Deprecated public ASTDefaultValue(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java index 1260eeba11..066b846c5c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTEmptyStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTEmptyStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTEmptyStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java index a722f66103..98956d2e17 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTEnumBody extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTEnumBody(int id) { super(id); } + @InternalApi + @Deprecated public ASTEnumBody(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java index 30c6337921..1a65f9b1a0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.java.qname.JavaTypeQualifiedName; @@ -23,10 +24,14 @@ public class ASTEnumConstant extends AbstractJavaNode implements JavaQualifiable private JavaTypeQualifiedName qualifiedName; + @InternalApi + @Deprecated public ASTEnumConstant(int id) { super(id); } + @InternalApi + @Deprecated public ASTEnumConstant(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java index bc22a66125..825f0a2be3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java @@ -7,13 +7,19 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTEnumDeclaration extends AbstractAnyTypeDeclaration { + @InternalApi + @Deprecated public ASTEnumDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTEnumDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEqualityExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEqualityExpression.java index b1bfead648..b65da06bd1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEqualityExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEqualityExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an identity test between two values or more values. * This has a precedence greater than {@link ASTAndExpression}, @@ -21,10 +23,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTEqualityExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTEqualityExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTEqualityExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExclusiveOrExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExclusiveOrExpression.java index 52afcd4f97..f2700dbd82 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExclusiveOrExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExclusiveOrExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a boolean XOR-expression. This has a precedence greater than {@link ASTInclusiveOrExpression}, * and lower than {@link ASTAndExpression}. @@ -20,10 +22,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTExclusiveOrExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTExclusiveOrExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTExclusiveOrExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java index 2343e1115d..3b99ef6da9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java @@ -5,14 +5,20 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTExplicitConstructorInvocation extends AbstractJavaNode { private String thisOrSuper; + @InternalApi + @Deprecated public ASTExplicitConstructorInvocation(int id) { super(id); } + @InternalApi + @Deprecated public ASTExplicitConstructorInvocation(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExpression.java index eb2e539fff..1c9366d4cc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an expression, in the most general sense. * This corresponds roughly to the <a href="https://docs.oracle.com/javase/specs/jls/se9/html/jls-15.html#jls-AssignmentExpression">AssignmentExpression</a> @@ -18,10 +20,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTExpression(JavaParser p, int id) { super(p, id); } @@ -56,6 +63,6 @@ public class ASTExpression extends AbstractJavaTypeNode { // if it is not a string literal and not a null, then it is one of // byte, short, char, int, long, float, double, boolean return literal != null && !literal.isStringLiteral() - && (literal.jjtGetNumChildren() == 0 || !(literal.jjtGetChild(0) instanceof ASTNullLiteral)); + && (literal.jjtGetNumChildren() == 0 || !(literal.jjtGetChild(0) instanceof ASTNullLiteral)); } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java index fdcbd9147a..503831b07f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java @@ -7,6 +7,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents the {@code extends} clause of a class or interface declaration. @@ -19,10 +21,15 @@ import java.util.Iterator; * </pre> */ public class ASTExtendsList extends AbstractJavaNode implements Iterable<ASTClassOrInterfaceType> { + + @InternalApi + @Deprecated public ASTExtendsList(int id) { super(id); } + @InternalApi + @Deprecated public ASTExtendsList(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java index 8df2589c9f..65cc796721 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java @@ -7,6 +7,7 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.SignedNode; import net.sourceforge.pmd.lang.java.multifile.signature.JavaFieldSignature; import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefinition; @@ -15,7 +16,8 @@ import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefin /** * Represents a field declaration in the body of a type declaration. * - * <p>This statement may define several variables, possibly of different types (see {@link ASTVariableDeclaratorId#getType()}). + * <p>This statement may define several variables, possibly of different types (see {@link + * ASTVariableDeclaratorId#getType()}). * The nodes corresponding to the declared variables are accessible through {@link #iterator()}. * * <p>{@link AccessNode} methods take into account the syntactic context of the @@ -40,10 +42,14 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D private JavaFieldSignature signature; + @InternalApi + @Deprecated public ASTFieldDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTFieldDeclaration(JavaParser p, int id) { super(p, id); } @@ -169,12 +175,10 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D * VariableDeclartorId node and returns its image or <code>null</code> if * the child node is not found. * + * @return a String representing the name of the variable * * @deprecated FieldDeclaration may declare several variables, so this is not exhaustive - * Iterate on the {@linkplain ASTVariableDeclaratorId VariableDeclaratorIds} instead - * - * - * @return a String representing the name of the variable + * Iterate on the {@linkplain ASTVariableDeclaratorId VariableDeclaratorIds} instead */ @Deprecated public String getVariableName() { @@ -208,7 +212,7 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D /** * @deprecated FieldDeclaration may declare several variables with a different type - * It won't implement TypeNode anymore come 7.0.0 + * It won't implement TypeNode anymore come 7.0.0 */ @Override @Deprecated @@ -218,9 +222,8 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D /** - * * @deprecated FieldDeclaration may declare several variables with a different type - * It won't implement TypeNode anymore come 7.0.0 + * It won't implement TypeNode anymore come 7.0.0 */ @Override @Deprecated diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java index afeb95910c..84f8be95de 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTFinallyStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTFinallyStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTFinallyStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java index 99ed7f1dda..7d5e31c6e9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTForInit extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTForInit(int id) { super(id); } + @InternalApi + @Deprecated public ASTForInit(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForStatement.java index 30b1c8db29..7e6d85d1c5 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForStatement.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a {@code for}-loop, or a foreach loop. * @@ -18,11 +20,16 @@ package net.sourceforge.pmd.lang.java.ast; // TODO this should be split into two different nodes, otherwise // we can't enrich the API without returning null half the time public class ASTForStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTForStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTForStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java index 7411d22922..27951a1d91 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java @@ -6,6 +6,7 @@ package net.sourceforge.pmd.lang.java.ast; import net.sourceforge.pmd.Rule; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefinition; @@ -23,10 +24,14 @@ public class ASTFormalParameter extends AbstractJavaAccessTypeNode implements Di private boolean isVarargs; + @InternalApi + @Deprecated public ASTFormalParameter(int id) { super(id); } + @InternalApi + @Deprecated public ASTFormalParameter(JavaParser p, int id) { super(p, id); } @@ -106,8 +111,8 @@ public class ASTFormalParameter extends AbstractJavaAccessTypeNode implements Di @Deprecated public boolean isArray() { return isVarargs() - || getTypeNode() != null && getTypeNode().isArray() - || getVariableDeclaratorId().isArray(); + || getTypeNode() != null && getTypeNode().isArray() + || getVariableDeclaratorId().isArray(); } @Override diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java index 57cc052d53..e8589c9afa 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java @@ -8,12 +8,19 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTFormalParameters extends AbstractJavaNode implements Iterable<ASTFormalParameter> { + + @InternalApi + @Deprecated public ASTFormalParameters(int id) { super(id); } + @InternalApi + @Deprecated public ASTFormalParameters(JavaParser p, int id) { super(p, id); } @@ -21,7 +28,7 @@ public class ASTFormalParameters extends AbstractJavaNode implements Iterable<AS public int getParameterCount() { final List<ASTFormalParameter> parameters = findChildrenOfType(ASTFormalParameter.class); return !parameters.isEmpty() && parameters.get(0).isExplicitReceiverParameter() - ? parameters.size() - 1 : parameters.size(); + ? parameters.size() - 1 : parameters.size(); } /** diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImplementsList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImplementsList.java index 3be6bf7b2f..1fecdf2ea4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImplementsList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImplementsList.java @@ -7,6 +7,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents the {@code implements} clause of a class declaration. @@ -17,10 +19,15 @@ import java.util.Iterator; * </pre> */ public class ASTImplementsList extends AbstractJavaNode implements Iterable<ASTClassOrInterfaceType> { + + @InternalApi + @Deprecated public ASTImplementsList(int id) { super(id); } + @InternalApi + @Deprecated public ASTImplementsList(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java index 326105a7df..99308c1777 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an import declaration in a Java file. * @@ -15,7 +17,6 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> * * @see <a href="https://docs.oracle.com/javase/specs/jls/se9/html/jls-7.html#jls-7.5">JLS 7.5</a> - * */ // TODO should this really be a type node? // E.g. for on-demand imports, what's the type of this node? There's no type name, just a package name @@ -30,10 +31,14 @@ public class ASTImportDeclaration extends AbstractJavaTypeNode { private boolean isStatic; private Package pkg; + @InternalApi + @Deprecated public ASTImportDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTImportDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInclusiveOrExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInclusiveOrExpression.java index 73b3921df6..e55bcdf333 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInclusiveOrExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInclusiveOrExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a non-shortcut boolean OR-expression. This has a precedence * greater than {@link ASTConditionalAndExpression}, and lower than @@ -21,11 +23,16 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTInclusiveOrExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTInclusiveOrExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTInclusiveOrExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java index 6b0e40d8d1..e524de327b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java @@ -5,14 +5,20 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTInitializer extends AbstractJavaNode { private boolean isStatic; + @InternalApi + @Deprecated public ASTInitializer(int id) { super(id); } + @InternalApi + @Deprecated public ASTInitializer(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInstanceOfExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInstanceOfExpression.java index 89afd1fcbf..873719ecf4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInstanceOfExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInstanceOfExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a type test on an object. This has a precedence greater than {@link ASTEqualityExpression}, * and lower than {@link ASTShiftExpression}. This has the same precedence as a {@link ASTRelationalExpression}. @@ -20,11 +22,16 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTInstanceOfExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTInstanceOfExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTInstanceOfExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java index 17ad7e804b..e779f571ed 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTLabeledStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTLabeledStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTLabeledStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java index 0b35ac0316..7a31ac5386 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java @@ -6,12 +6,19 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTLambdaExpression extends AbstractMethodLikeNode { + + @InternalApi + @Deprecated public ASTLambdaExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTLambdaExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java index 84931aa4d5..4cd30c4e75 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java @@ -9,6 +9,8 @@ import java.math.BigInteger; import java.util.Locale; import java.util.regex.Pattern; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTLiteral extends AbstractJavaTypeNode { private boolean isInt; @@ -21,12 +23,16 @@ public class ASTLiteral extends AbstractJavaTypeNode { * String. */ private static final Pattern SINGLE_CHAR_ESCAPE_PATTERN = Pattern - .compile("^\"\\\\(([ntbrf\\\\'\\\"])|([0-7][0-7]?)|([0-3][0-7][0-7]))\""); + .compile("^\"\\\\(([ntbrf\\\\'\\\"])|([0-7][0-7]?)|([0-3][0-7][0-7]))\""); + @InternalApi + @Deprecated public ASTLiteral(int id) { super(id); } + @InternalApi + @Deprecated public ASTLiteral(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java index 2c4fb0687f..1cde17961a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java @@ -8,6 +8,7 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; import net.sourceforge.pmd.Rule; +import net.sourceforge.pmd.annotation.InternalApi; /** @@ -15,7 +16,8 @@ import net.sourceforge.pmd.Rule; * but the node is also used in {@linkplain ASTForInit for-loop initialisers} and * {@linkplain ASTForStatement foreach statements}. * - * <p>This statement may define several variables, possibly of different types (see {@link ASTVariableDeclaratorId#getType()}). + * <p>This statement may define several variables, possibly of different types (see {@link + * ASTVariableDeclaratorId#getType()}). * The nodes corresponding to the declared variables are accessible through {@link #iterator()}. * * <pre> @@ -26,10 +28,14 @@ import net.sourceforge.pmd.Rule; */ public class ASTLocalVariableDeclaration extends AbstractJavaAccessNode implements Dimensionable, CanSuppressWarnings, Iterable<ASTVariableDeclaratorId> { + @InternalApi + @Deprecated public ASTLocalVariableDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTLocalVariableDeclaration(JavaParser p, int id) { super(p, id); } @@ -79,7 +85,9 @@ public class ASTLocalVariableDeclaration extends AbstractJavaAccessNode implemen * Gets the type node for this variable declaration statement. * With Java10 and local variable type inference, there might be * no type node at all. + * * @return The type node or <code>null</code> + * * @see #isTypeInferred() */ public ASTType getTypeNode() { @@ -107,10 +115,10 @@ public class ASTLocalVariableDeclaration extends AbstractJavaAccessNode implemen * VariableDeclartorId node and returns it's image or <code>null</code> if * the child node is not found. * - * @deprecated LocalVariableDeclaration may declare several variables, so this is not exhaustive - * Iterate on the {@linkplain ASTVariableDeclaratorId VariableDeclaratorIds} instead - * * @return a String representing the name of the variable + * + * @deprecated LocalVariableDeclaration may declare several variables, so this is not exhaustive + * Iterate on the {@linkplain ASTVariableDeclaratorId VariableDeclaratorIds} instead */ // It would be nice to have a way to inform XPath users of the intended replacement // for a deprecated attribute. We may use another annotation for that. diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java index c86b20ac6c..0ff205f6c0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an annotation with no declared member, e.g. {@code @Override}. * @@ -19,11 +21,15 @@ package net.sourceforge.pmd.lang.java.ast; */ public class ASTMarkerAnnotation extends AbstractJavaTypeNode { + @InternalApi + @Deprecated public ASTMarkerAnnotation(int id) { super(id); } + @InternalApi + @Deprecated public ASTMarkerAnnotation(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberSelector.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberSelector.java index c1ee155d1b..7289287d0e 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberSelector.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberSelector.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTMemberSelector extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTMemberSelector(int id) { super(id); } + @InternalApi + @Deprecated public ASTMemberSelector(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java index 307a9903d2..7bd6a83659 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents the value of a member of an annotation. * This can appear in a {@linkplain ASTMemberValuePair member-value pair}, @@ -19,11 +21,16 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTMemberValue extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTMemberValue(int id) { super(id); } + @InternalApi + @Deprecated public ASTMemberValue(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValueArrayInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValueArrayInitializer.java index 20852e3aa5..3b397d535c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValueArrayInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValueArrayInitializer.java @@ -8,6 +8,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an array of member values in an annotation {@linkplain ASTMemberValue member value}. @@ -17,14 +19,17 @@ import java.util.Iterator; * MemberValueArrayInitializer ::= "{" ( {@linkplain ASTMemberValue MemberValue} ( "," {@linkplain ASTMemberValue MemberValue} )* ","? )? "}" * * </pre> - * - * */ public class ASTMemberValueArrayInitializer extends AbstractJavaNode implements Iterable<ASTMemberValue> { + + @InternalApi + @Deprecated public ASTMemberValueArrayInitializer(int id) { super(id); } + @InternalApi + @Deprecated public ASTMemberValueArrayInitializer(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java index 4d1bb0aa3d..4e24eec5ac 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a single member-value pair in an annotation. * @@ -15,11 +17,16 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTMemberValuePair extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTMemberValuePair(int id) { super(id); } + @InternalApi + @Deprecated public ASTMemberValuePair(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java index 6fffd2aa3a..6002cd6ad1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java @@ -7,6 +7,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a list of member values in an {@linkplain ASTNormalAnnotation annotation}. @@ -18,11 +20,16 @@ import java.util.Iterator; * </pre> */ public class ASTMemberValuePairs extends AbstractJavaNode implements Iterable<ASTMemberValuePair> { + + @InternalApi + @Deprecated public ASTMemberValuePairs(int id) { super(id); } + @InternalApi + @Deprecated public ASTMemberValuePairs(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java index b50255ca51..e4cc616f67 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.dfa.DFAGraphMethod; @@ -15,15 +16,18 @@ import net.sourceforge.pmd.lang.dfa.DFAGraphMethod; * <pre> * MethodDeclaration := [ TypeParameters() ] (TypeAnnotation())* ResultType() MethodDeclarator() [ "throws" NameList() ] ( Block() | ";" ) * </pre> - * */ public class ASTMethodDeclaration extends AbstractMethodOrConstructorDeclaration implements DFAGraphMethod { + @InternalApi + @Deprecated public ASTMethodDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTMethodDeclaration(JavaParser p, int id) { super(p, id); } @@ -101,7 +105,7 @@ public class ASTMethodDeclaration extends AbstractMethodOrConstructorDeclaration Node potentialTypeDeclaration = getNthParent(3); return potentialTypeDeclaration instanceof ASTClassOrInterfaceDeclaration - && ((ASTClassOrInterfaceDeclaration) potentialTypeDeclaration).isInterface(); + && ((ASTClassOrInterfaceDeclaration) potentialTypeDeclaration).isInterface(); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java index 61459b2a5a..17406c0f88 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTMethodDeclarator extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTMethodDeclarator(int id) { super(id); } + @InternalApi + @Deprecated public ASTMethodDeclarator(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java index fe6067f6b7..6bf2ee7165 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java @@ -6,11 +6,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTMethodReference extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTMethodReference(int id) { super(id); } + @InternalApi + @Deprecated public ASTMethodReference(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java index e5c551c780..182967578e 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java @@ -6,13 +6,20 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTModuleDeclaration extends AbstractJavaNode { + private boolean open; + @InternalApi + @Deprecated public ASTModuleDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTModuleDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java index 71be3a8e36..a085184a6e 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java @@ -6,7 +6,10 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTModuleDirective extends AbstractJavaNode { + public enum DirectiveType { REQUIRES, EXPORTS, OPENS, USES, PROVIDES; } @@ -19,10 +22,14 @@ public class ASTModuleDirective extends AbstractJavaNode { private RequiresModifier requiresModifier; + @InternalApi + @Deprecated public ASTModuleDirective(int id) { super(id); } + @InternalApi + @Deprecated public ASTModuleDirective(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java index 810b6c5861..9f7cb67b1f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java @@ -7,11 +7,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTModuleName extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTModuleName(int id) { super(id); } + @InternalApi + @Deprecated public ASTModuleName(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMultiplicativeExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMultiplicativeExpression.java index f01da959c6..9b0dbe24ca 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMultiplicativeExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMultiplicativeExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a multiplication, division, or modulo operation on * two or more values. This has a precedence greater than {@link ASTAdditiveExpression}, @@ -20,10 +22,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTMultiplicativeExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTMultiplicativeExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTMultiplicativeExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java index b269799ce4..3bf2020a83 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java @@ -5,16 +5,21 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.symboltable.NameDeclaration; public class ASTName extends AbstractJavaTypeNode { private NameDeclaration nd; + @InternalApi + @Deprecated public ASTName(int id) { super(id); } + @InternalApi + @Deprecated public ASTName(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java index f2e2c36b69..7b4977ad36 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTNameList extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTNameList(int id) { super(id); } + @InternalApi + @Deprecated public ASTNameList(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java index 971885de74..803e9d1948 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an annotation that with a parenthesized list * of key-value pairs (possibly empty). @@ -19,11 +21,16 @@ package net.sourceforge.pmd.lang.java.ast; * @see ASTMarkerAnnotation */ public class ASTNormalAnnotation extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTNormalAnnotation(int id) { super(id); } + @InternalApi + @Deprecated public ASTNormalAnnotation(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java index 1256c1a4e9..aa30c4ea89 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTNullLiteral extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTNullLiteral(int id) { super(id); } + @InternalApi + @Deprecated public ASTNullLiteral(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPackageDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPackageDeclaration.java index 2cba1c63ee..9abc57e94b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPackageDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPackageDeclaration.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTPackageDeclaration extends AbstractJavaAnnotatableNode { + + @InternalApi + @Deprecated public ASTPackageDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTPackageDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java index f0dd504237..f4265ccbc0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a unary postfix operation on a value. * This is one of the {@linkplain ASTUnaryExpression PrefixExpression} @@ -18,10 +20,14 @@ package net.sourceforge.pmd.lang.java.ast; */ public class ASTPostfixExpression extends AbstractJavaTypeNode { + @InternalApi + @Deprecated public ASTPostfixExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTPostfixExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreDecrementExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreDecrementExpression.java index ae7dc717e4..30d46fe457 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreDecrementExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreDecrementExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a pre-decrement expression on a variable. * This has the same precedence as {@linkplain ASTUnaryExpression UnaryExpression} @@ -17,10 +19,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTPreDecrementExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTPreDecrementExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTPreDecrementExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreIncrementExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreIncrementExpression.java index 0b2cae8132..73fb8df7db 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreIncrementExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreIncrementExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a pre-increment expression on a variable. * This has the same precedence as {@linkplain ASTUnaryExpression UnaryExpression} @@ -17,10 +19,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTPreIncrementExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTPreIncrementExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTPreIncrementExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java index 92d645f0ff..1a285e4272 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTPrimaryExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTPrimaryExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTPrimaryExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java index b25e6c7eee..e808deda1b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java @@ -5,15 +5,21 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTPrimaryPrefix extends AbstractJavaTypeNode { private boolean usesThisModifier; private boolean usesSuperModifier; + @InternalApi + @Deprecated public ASTPrimaryPrefix(int id) { super(id); } + @InternalApi + @Deprecated public ASTPrimaryPrefix(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java index dda473d8b1..37753734dd 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java @@ -5,15 +5,21 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTPrimarySuffix extends AbstractJavaTypeNode { private boolean isArguments; private boolean isArrayDereference; + @InternalApi + @Deprecated public ASTPrimarySuffix(int id) { super(id); } + @InternalApi + @Deprecated public ASTPrimarySuffix(JavaParser p, int id) { super(p, id); } @@ -40,7 +46,7 @@ public class ASTPrimarySuffix extends AbstractJavaTypeNode { * called when there are no arguments it returns <code>-1</code>. * * @return A non-negative argument number when there are arguments, - * <code>-1</code> otherwise. + * <code>-1</code> otherwise. */ public int getArgumentCount() { if (!this.isArguments()) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java index 05766c53a3..33b738e07b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a primitive type. * @@ -18,10 +20,14 @@ public class ASTPrimitiveType extends AbstractJavaTypeNode implements Dimensiona private int arrayDepth; + @InternalApi + @Deprecated public ASTPrimitiveType(int id) { super(id); } + @InternalApi + @Deprecated public ASTPrimitiveType(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java index 4e287e8fad..ad299118da 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java @@ -5,15 +5,22 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * @deprecated Will be removed in 7.0.0. Use {@link ASTShiftExpression#getOperator()} */ @Deprecated public class ASTRSIGNEDSHIFT extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTRSIGNEDSHIFT(int id) { super(id); } + @InternalApi + @Deprecated public ASTRSIGNEDSHIFT(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java index 9e2568014d..507c671869 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java @@ -5,15 +5,22 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * @deprecated Will be removed in 7.0.0. Use {@link ASTShiftExpression#getOperator()} */ @Deprecated public class ASTRUNSIGNEDSHIFT extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTRUNSIGNEDSHIFT(int id) { super(id); } + @InternalApi + @Deprecated public ASTRUNSIGNEDSHIFT(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java index 605f065186..8c277504d2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a reference type, i.e. a {@linkplain ASTClassOrInterfaceType class or interface type}, * or an array type. @@ -15,16 +17,19 @@ package net.sourceforge.pmd.lang.java.ast; * | {@linkplain ASTClassOrInterfaceType ClassOrInterfaceType} {@linkplain ASTAnnotation Annotation}* ( "[" "]" )* * * </pre> - * */ public class ASTReferenceType extends AbstractJavaTypeNode implements Dimensionable { private int arrayDepth; + @InternalApi + @Deprecated public ASTReferenceType(int id) { super(id); } + @InternalApi + @Deprecated public ASTReferenceType(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRelationalExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRelationalExpression.java index 43d84c3680..0834127794 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRelationalExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRelationalExpression.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a comparison on two numeric values. This has a precedence greater than {@link ASTEqualityExpression}, * and lower than {@link ASTShiftExpression}. This has the same precedence as a {@link ASTInstanceOfExpression}. @@ -20,10 +22,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTRelationalExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTRelationalExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTRelationalExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java index 1c818e8a2f..2c55febdb5 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java @@ -6,11 +6,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTResource extends ASTFormalParameter { + + @InternalApi + @Deprecated public ASTResource(int id) { super(id); } + @InternalApi + @Deprecated public ASTResource(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java index f0610899db..c4c8889f50 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java @@ -6,11 +6,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTResourceSpecification extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTResourceSpecification(int id) { super(id); } + @InternalApi + @Deprecated public ASTResourceSpecification(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java index e93f321794..6f5a400918 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java @@ -6,11 +6,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTResources extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTResources(int id) { super(id); } + @InternalApi + @Deprecated public ASTResources(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResultType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResultType.java index 2312032605..d25301d998 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResultType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResultType.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTResultType extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTResultType(int id) { super(id); } + @InternalApi + @Deprecated public ASTResultType(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReturnStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReturnStatement.java index 9ee9af2d8f..ba74cc4ff7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReturnStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReturnStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTReturnStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTReturnStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTReturnStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTShiftExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTShiftExpression.java index bff4995393..91089a6c15 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTShiftExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTShiftExpression.java @@ -5,8 +5,11 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** - * Represents a shift expression on a numeric value. This has a precedence greater than {@link ASTRelationalExpression}, + * Represents a shift expression on a numeric value. This has a precedence greater than {@link + * ASTRelationalExpression}, * and lower than {@link ASTAdditiveExpression}. * * <p>Note that the children of this node are not necessarily {@link ASTAdditiveExpression}, @@ -21,10 +24,15 @@ package net.sourceforge.pmd.lang.java.ast; */ // TODO we could merge the productions for ASTRSIGNEDSHIFT and ASTRUNSIGNEDSHIFT into this node using a #void production that sets the image of the parent public class ASTShiftExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTShiftExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTShiftExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSingleMemberAnnotation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSingleMemberAnnotation.java index c1b57d12f2..9cc4f06a8f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSingleMemberAnnotation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSingleMemberAnnotation.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents an annotation using the shorthand syntax for the default member. * @@ -18,10 +20,15 @@ package net.sourceforge.pmd.lang.java.ast; * @see ASTNormalAnnotation */ public class ASTSingleMemberAnnotation extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTSingleMemberAnnotation(int id) { super(id); } + @InternalApi + @Deprecated public ASTSingleMemberAnnotation(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatement.java index e48b71d27d..204d420b3a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpression.java index a656219ba9..0afb129b50 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpression.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTStatementExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTStatementExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTStatementExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpressionList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpressionList.java index 3ab98ecee1..dc07653181 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpressionList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpressionList.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTStatementExpressionList extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTStatementExpressionList(int id) { super(id); } + @InternalApi + @Deprecated public ASTStatementExpressionList(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java index ea929b3aa6..ae44abd2b8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java @@ -7,11 +7,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTSwitchExpression extends AbstractJavaTypeNode { + + @Deprecated + @InternalApi ASTSwitchExpression(int id) { super(id); } + @Deprecated + @InternalApi ASTSwitchExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledBlock.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledBlock.java index 8ff927bef2..16407fbfc8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledBlock.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledBlock.java @@ -4,12 +4,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTSwitchLabeledBlock extends AbstractJavaNode implements ASTSwitchLabeledRule { + @Deprecated + @InternalApi ASTSwitchLabeledBlock(int id) { super(id); } + @Deprecated + @InternalApi ASTSwitchLabeledBlock(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledExpression.java index b2ba1b17a6..d0488f30d9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledExpression.java @@ -4,12 +4,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTSwitchLabeledExpression extends AbstractJavaNode implements ASTSwitchLabeledRule { + @Deprecated + @InternalApi ASTSwitchLabeledExpression(int id) { super(id); } + @Deprecated + @InternalApi ASTSwitchLabeledExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java index d0a863f967..d3321672df 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java @@ -4,12 +4,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTSwitchLabeledThrowStatement extends AbstractJavaNode implements ASTSwitchLabeledRule { + @Deprecated + @InternalApi ASTSwitchLabeledThrowStatement(int id) { super(id); } + @Deprecated + @InternalApi ASTSwitchLabeledThrowStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java index e9ad7c7b01..9bf7835c57 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java @@ -10,6 +10,8 @@ import java.util.Set; import org.apache.commons.lang3.EnumUtils; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a {@code switch} statement. @@ -21,10 +23,15 @@ import org.apache.commons.lang3.EnumUtils; * </pre> */ public class ASTSwitchStatement extends AbstractJavaNode implements Iterable<ASTSwitchLabel> { + + @InternalApi + @Deprecated public ASTSwitchStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTSwitchStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSynchronizedStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSynchronizedStatement.java index 71dc35564d..fb6322bce9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSynchronizedStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSynchronizedStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTSynchronizedStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTSynchronizedStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTSynchronizedStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java index 0d61b7529a..adad4e7428 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTThrowStatement extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTThrowStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTThrowStatement(JavaParser p, int id) { super(p, id); } @@ -33,7 +40,7 @@ public class ASTThrowStatement extends AbstractJavaNode { * <p>TODO - use symbol table (?)</p> * * @return the image of the first ASTClassOrInterfaceType node found or - * <code>null</code> + * <code>null</code> */ public final String getFirstClassOrInterfaceTypeImage() { final ASTClassOrInterfaceType t = getFirstDescendantOfType(ASTClassOrInterfaceType.class); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java index 53e3325c0c..beee9366a9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java @@ -7,6 +7,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Try statement node. @@ -16,10 +18,14 @@ import java.util.List; */ public class ASTTryStatement extends AbstractJavaNode { + @InternalApi + @Deprecated public ASTTryStatement(int id) { super(id); } + @InternalApi + @Deprecated public ASTTryStatement(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTType.java index 74192f1f0c..51e0d39353 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTType.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a type reference. * @@ -17,10 +19,15 @@ package net.sourceforge.pmd.lang.java.ast; * Note: it is not exactly the same the "UnnanType" defined in JLS. */ public class ASTType extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTType(int id) { super(id); } + @InternalApi + @Deprecated public ASTType(JavaParser p, int id) { super(p, id); } @@ -45,7 +52,7 @@ public class ASTType extends AbstractJavaTypeNode { @Deprecated public int getArrayDepth() { if (jjtGetNumChildren() != 0 - && (jjtGetChild(0) instanceof ASTReferenceType || jjtGetChild(0) instanceof ASTPrimitiveType)) { + && (jjtGetChild(0) instanceof ASTReferenceType || jjtGetChild(0) instanceof ASTPrimitiveType)) { return ((Dimensionable) jjtGetChild(0)).getArrayDepth(); } return 0; // this is not an array @@ -53,7 +60,6 @@ public class ASTType extends AbstractJavaTypeNode { /** - * * @deprecated Use {@link #isArrayType()} */ @Deprecated @@ -64,7 +70,6 @@ public class ASTType extends AbstractJavaTypeNode { /** * Returns true if this type is an array type. - * */ public boolean isArrayType() { return getArrayDepth() > 0; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java index c17fff01fe..42c3a88a4a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java @@ -6,6 +6,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a single type argument in a {@linkplain ASTTypeArguments type arguments list}. * @@ -17,10 +19,15 @@ package net.sourceforge.pmd.lang.java.ast; */ // TODO should implement Annotatable when we use can use Java 8 mixins instead of an abstract class public class ASTTypeArgument extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTTypeArgument(int id) { super(id); } + @InternalApi + @Deprecated public ASTTypeArgument(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java index e669576daf..1ce15f55ae 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java @@ -7,6 +7,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a list of type arguments. This is different from {@linkplain ASTTypeParameters type parameters}! @@ -16,13 +18,17 @@ import java.util.Iterator; * TypeArguments ::= "<" {@linkplain ASTTypeArgument TypeArgument} ( "," {@linkplain ASTTypeArgument TypeArgument} )* ">" * | "<" ">" * </pre> - * */ public class ASTTypeArguments extends AbstractJavaNode implements Iterable<ASTTypeArgument> { + + @InternalApi + @Deprecated public ASTTypeArguments(int id) { super(id); } + @InternalApi + @Deprecated public ASTTypeArguments(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java index e9d0cfaa0f..b6c74d1971 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java @@ -7,6 +7,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a type bound on a {@linkplain ASTTypeParameter type parameter}. @@ -22,11 +24,16 @@ import java.util.List; * </pre> */ public class ASTTypeBound extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTTypeBound(int id) { super(id); } + @InternalApi + @Deprecated public ASTTypeBound(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java index 2db090fc2f..85a43efba6 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java @@ -6,12 +6,18 @@ package net.sourceforge.pmd.lang.java.ast; import net.sourceforge.pmd.Rule; +import net.sourceforge.pmd.annotation.InternalApi; public class ASTTypeDeclaration extends AbstractJavaTypeNode implements CanSuppressWarnings { + + @InternalApi + @Deprecated public ASTTypeDeclaration(int id) { super(id); } + @InternalApi + @Deprecated public ASTTypeDeclaration(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java index 4b96b52262..ef6705238f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java @@ -6,6 +6,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a type parameter declaration of a method, constructor, class or interface declaration. * @@ -15,15 +17,20 @@ package net.sourceforge.pmd.lang.java.ast; * * </pre> * - * @see <a href="https://docs.oracle.com/javase/specs/jls/se9/html/jls-4.html#jls-4.4">JLS</a> + * @see <a href="https://docs.oracle.com/javase/specs/jls/se9/html/jls-4.html#jls-4.4">JLS</a> */ // TODO should implement Annotatable when we use can use Java 8 mixins instead of an abstract class public class ASTTypeParameter extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTTypeParameter(int id) { super(id); } + @InternalApi + @Deprecated public ASTTypeParameter(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameters.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameters.java index c63d37f0bb..011a013275 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameters.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameters.java @@ -8,6 +8,8 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a list of type parameters. @@ -17,14 +19,17 @@ import java.util.Iterator; * TypeParameters ::= "<" {@linkplain ASTTypeParameter TypeParameter} ( "," {@linkplain ASTTypeParameter TypeParameter} )* ">" * * </pre> - * - * */ public class ASTTypeParameters extends AbstractJavaNode implements Iterable<ASTTypeParameter> { + + @InternalApi + @Deprecated public ASTTypeParameters(int id) { super(id); } + @InternalApi + @Deprecated public ASTTypeParameters(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java index e2ab159afd..0b71a4c29b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java @@ -6,6 +6,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a unary prefix operation on a value. * This has a precedence greater than {@link ASTMultiplicativeExpression}. @@ -26,10 +28,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTUnaryExpression extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTUnaryExpression(int id) { super(id); } + @InternalApi + @Deprecated public ASTUnaryExpression(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java index 8b9c9c359b..939d058f41 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a boolean negation or bitwise inverse operation. * This has the same precedence as {@linkplain ASTUnaryExpression UnaryExpression} @@ -20,10 +22,15 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTUnaryExpressionNotPlusMinus extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTUnaryExpressionNotPlusMinus(int id) { super(id); } + @InternalApi + @Deprecated public ASTUnaryExpressionNotPlusMinus(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclarator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclarator.java index 7d28205df6..f1952b89e6 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclarator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclarator.java @@ -7,6 +7,7 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; @@ -22,11 +23,16 @@ import net.sourceforge.pmd.lang.ast.Node; * </pre> */ public class ASTVariableDeclarator extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTVariableDeclarator(int id) { super(id); } + @InternalApi + @Deprecated public ASTVariableDeclarator(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java index e110ce07f9..07a9f64864 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java @@ -7,6 +7,7 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.List; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.symboltable.VariableNameDeclaration; import net.sourceforge.pmd.lang.symboltable.NameOccurrence; @@ -40,10 +41,14 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim private VariableNameDeclaration nameDeclaration; private boolean explicitReceiverParameter = false; + @InternalApi + @Deprecated public ASTVariableDeclaratorId(int id) { super(id); } + @InternalApi + @Deprecated public ASTVariableDeclaratorId(JavaParser p, int id) { super(p, id); } @@ -79,6 +84,7 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim /** * Returns true if the declared variable has an array type. + * * @deprecated Use {@link #hasArrayType()} */ @Override @@ -112,7 +118,7 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim */ public boolean isFormalParameter() { return jjtGetParent() instanceof ASTFormalParameter && !isExceptionBlockParameter() && !isResourceDeclaration() - || isLambdaParamWithNoType(); + || isLambdaParamWithNoType(); } @@ -130,7 +136,8 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim * is not necessarily inferred, see {@link #isTypeInferred()}. */ public boolean isLambdaParameter() { - return isLambdaParamWithNoType() || jjtGetParent() instanceof ASTFormalParameter && getNthParent(3) instanceof ASTLambdaExpression; + return isLambdaParamWithNoType() + || jjtGetParent() instanceof ASTFormalParameter && getNthParent(3) instanceof ASTLambdaExpression; } @@ -245,7 +252,7 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim private boolean isLambdaTypeInferred() { return getNthParent(3) instanceof ASTLambdaExpression - && jjtGetParent().getFirstChildOfType(ASTType.class) == null; + && jjtGetParent().getFirstChildOfType(ASTType.class) == null; } /** @@ -269,7 +276,7 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim * node. See {@link #getType()} for an explanation. * * @return the type node, or {@code null} if there is no explicit type, - * e.g. if {@link #isTypeInferred()} returns true. + * e.g. if {@link #isTypeInferred()} returns true. */ public ASTType getTypeNode() { if (jjtGetParent() instanceof ASTFormalParameter) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableInitializer.java index 0c43164018..b8c3a1ebcb 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableInitializer.java @@ -5,11 +5,18 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + public class ASTVariableInitializer extends AbstractJavaNode { + + @InternalApi + @Deprecated public ASTVariableInitializer(int id) { super(id); } + @InternalApi + @Deprecated public ASTVariableInitializer(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java index ffc01d08d6..18dfe90e2f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java @@ -5,6 +5,8 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Represents a type bound on a wildcard {@linkplain ASTTypeArgument type argument}. * @@ -15,11 +17,16 @@ package net.sourceforge.pmd.lang.java.ast; * </pre> */ public class ASTWildcardBounds extends AbstractJavaTypeNode { + + @InternalApi + @Deprecated public ASTWildcardBounds(int id) { super(id); } + @InternalApi + @Deprecated public ASTWildcardBounds(JavaParser p, int id) { super(p, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java index bd306f8570..20fdc49ad5 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java @@ -4,5 +4,15 @@ /** * Contains the classes and interfaces modelling the Java AST. + * + * <p>Note: from 6.16.0 on, the following usages have been deprecated: + * <ul> + * <p>Manual instantiation of nodes. Constructors of node classes are + * deprecated and marked {@link net.sourceforge.pmd.annotation.InternalApi}. + * Nodes should only be obtained from the parser, which for rules, + * means that never need to instantiate node themselves. Those + * constructors will be made package private with 7.0.0. + * </ul> + * */ package net.sourceforge.pmd.lang.java.ast; From 76e638c83f7f988540262acfab04a89ab6cadd1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 28 May 2019 21:09:21 +0200 Subject: [PATCH 147/371] Deprecate base node classes --- .../pmd/lang/java/ast/AbstractAnyTypeDeclaration.java | 3 +++ .../pmd/lang/java/ast/AbstractJavaAccessNode.java | 4 ++++ .../pmd/lang/java/ast/AbstractJavaAccessTypeNode.java | 4 ++++ .../pmd/lang/java/ast/AbstractJavaAnnotatableNode.java | 1 + .../net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java | 3 +++ .../sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java | 3 +++ .../pmd/lang/java/ast/AbstractMethodLikeNode.java | 4 +++- .../java/ast/AbstractMethodOrConstructorDeclaration.java | 3 +++ .../pmd/lang/java/ast/AbstractTypeBodyDeclaration.java | 4 ++++ .../net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java | 4 ++++ .../net/sourceforge/pmd/lang/java/ast/package-info.java | 6 +++++- 11 files changed, 37 insertions(+), 2 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractAnyTypeDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractAnyTypeDeclaration.java index 2d56c46e39..c8484d7ea4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractAnyTypeDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractAnyTypeDeclaration.java @@ -4,6 +4,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.qname.JavaTypeQualifiedName; import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefinition; @@ -12,6 +13,8 @@ import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefin /** * Abstract class for type declarations nodes. */ +@Deprecated +@InternalApi public abstract class AbstractAnyTypeDeclaration extends AbstractJavaAccessTypeNode implements ASTAnyTypeDeclaration { private JavaTypeQualifiedName qualifiedName; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java index da3063423e..e6b45823d4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java @@ -4,6 +4,10 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + +@Deprecated +@InternalApi public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode implements AccessNode { private int modifiers; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java index 220a3c13dd..a88001025d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java @@ -4,9 +4,13 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefinition; +@Deprecated +@InternalApi public abstract class AbstractJavaAccessTypeNode extends AbstractJavaAccessNode implements TypeNode { + /** * Type definition, used to get the type of the node. */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAnnotatableNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAnnotatableNode.java index 36ae852ba2..cc0e84bed7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAnnotatableNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAnnotatableNode.java @@ -9,6 +9,7 @@ import java.util.List; import net.sourceforge.pmd.lang.java.typeresolution.TypeHelper; +// package private abstract class AbstractJavaAnnotatableNode extends AbstractJavaNode implements Annotatable { AbstractJavaAnnotatableNode(int i) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java index acf4106d45..30d1fb673c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java @@ -4,9 +4,12 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.AbstractNode; import net.sourceforge.pmd.lang.symboltable.Scope; +@Deprecated +@InternalApi public abstract class AbstractJavaNode extends AbstractNode implements JavaNode { protected JavaParser parser; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java index 8ade1689e3..b99dcedd07 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java @@ -4,6 +4,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefinition; /** @@ -12,6 +13,8 @@ import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefin * @see AbstractJavaNode * @see TypeNode */ +@Deprecated +@InternalApi public abstract class AbstractJavaTypeNode extends AbstractJavaNode implements TypeNode { private JavaTypeDefinition typeDefinition; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodLikeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodLikeNode.java index 6e60b8639b..c72392e0ed 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodLikeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodLikeNode.java @@ -4,9 +4,11 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.java.qname.JavaOperationQualifiedName; - +@Deprecated +@InternalApi public abstract class AbstractMethodLikeNode extends AbstractJavaAccessNode implements MethodLikeNode { private JavaOperationQualifiedName qualifiedName; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodOrConstructorDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodOrConstructorDeclaration.java index 5eba9d6c09..3885bcdd89 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodOrConstructorDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodOrConstructorDeclaration.java @@ -4,9 +4,12 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.java.multifile.signature.JavaOperationSignature; +@Deprecated +@InternalApi public abstract class AbstractMethodOrConstructorDeclaration extends AbstractMethodLikeNode implements ASTMethodOrConstructorDeclaration { private JavaOperationSignature signature; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractTypeBodyDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractTypeBodyDeclaration.java index 92eedb762a..39ee9e8ed1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractTypeBodyDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractTypeBodyDeclaration.java @@ -15,11 +15,15 @@ import static net.sourceforge.pmd.lang.java.ast.ASTAnyTypeBodyDeclaration.Declar import static net.sourceforge.pmd.lang.java.ast.ASTAnyTypeBodyDeclaration.DeclarationKind.INTERFACE; import static net.sourceforge.pmd.lang.java.ast.ASTAnyTypeBodyDeclaration.DeclarationKind.METHOD; +import net.sourceforge.pmd.annotation.InternalApi; + /** * @author Clément Fournier * @since 6.2.0 */ +@Deprecated +@InternalApi abstract class AbstractTypeBodyDeclaration extends AbstractJavaNode implements ASTAnyTypeBodyDeclaration { private DeclarationKind kind; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java index ae5f8cc56c..6b8daa0a94 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java @@ -4,10 +4,14 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * This is a basic JavaNode implementation, useful when needing to create a * dummy node. */ +@Deprecated +@InternalApi public class DummyJavaNode extends AbstractJavaNode { public DummyJavaNode(int id) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java index 20fdc49ad5..c962c42c85 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java @@ -7,11 +7,15 @@ * * <p>Note: from 6.16.0 on, the following usages have been deprecated: * <ul> - * <p>Manual instantiation of nodes. Constructors of node classes are + * <li>Manual instantiation of nodes. Constructors of node classes are * deprecated and marked {@link net.sourceforge.pmd.annotation.InternalApi}. * Nodes should only be obtained from the parser, which for rules, * means that never need to instantiate node themselves. Those * constructors will be made package private with 7.0.0. + * <li>Subclassing of base node classes, or usage of their type. + * Version 7.0.0 will bring a new set of abstractions that will + * be public API, but the base classes are and will stay internal. + * you should not couple your code to them. * </ul> * */ From 31f15b76229ad6a69aa9a2122a84961a75147cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 28 May 2019 21:16:41 +0200 Subject: [PATCH 148/371] Deprecate setters --- .../java/ast/ASTAllocationExpression.java | 2 + .../lang/java/ast/ASTAssignmentOperator.java | 2 + .../pmd/lang/java/ast/ASTBlock.java | 2 + .../pmd/lang/java/ast/ASTBooleanLiteral.java | 2 + .../pmd/lang/java/ast/ASTCastExpression.java | 2 + .../ast/ASTClassOrInterfaceDeclaration.java | 2 + .../pmd/lang/java/ast/ASTCompilationUnit.java | 4 ++ .../java/ast/ASTConditionalExpression.java | 2 + .../java/ast/ASTConstructorDeclaration.java | 2 + .../pmd/lang/java/ast/ASTEnumConstant.java | 2 + .../ast/ASTExplicitConstructorInvocation.java | 4 ++ .../pmd/lang/java/ast/ASTFormalParameter.java | 7 ++- .../pmd/lang/java/ast/ASTIfStatement.java | 2 + .../lang/java/ast/ASTImportDeclaration.java | 6 +++ .../pmd/lang/java/ast/ASTInitializer.java | 2 + .../pmd/lang/java/ast/ASTLiteral.java | 8 +++ .../lang/java/ast/ASTModuleDeclaration.java | 2 + .../pmd/lang/java/ast/ASTModuleDirective.java | 4 ++ .../pmd/lang/java/ast/ASTName.java | 2 + .../pmd/lang/java/ast/ASTPrimaryPrefix.java | 4 ++ .../pmd/lang/java/ast/ASTPrimarySuffix.java | 4 ++ .../pmd/lang/java/ast/ASTSwitchLabel.java | 2 + .../java/ast/ASTVariableDeclaratorId.java | 4 ++ .../java/ast/AbstractAnyTypeDeclaration.java | 4 +- .../lang/java/ast/AbstractJavaAccessNode.java | 28 ++++++++++ .../java/ast/AbstractJavaAccessTypeNode.java | 2 + .../pmd/lang/java/ast/AbstractJavaNode.java | 1 - .../lang/java/ast/AbstractJavaTypeNode.java | 5 ++ .../lang/java/ast/AbstractMethodLikeNode.java | 3 ++ .../pmd/lang/java/ast/AccessNode.java | 54 +++++++++++++++++++ .../pmd/lang/java/ast/JavaNode.java | 6 +++ .../java/ast/JavaParserVisitorDecorator.java | 7 ++- .../pmd/lang/java/ast/TypeNode.java | 8 +++ .../pmd/lang/java/ast/package-info.java | 10 +++- 34 files changed, 195 insertions(+), 6 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java index 2c23d3b9e1..e679f9d795 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java @@ -59,6 +59,8 @@ public class ASTAllocationExpression extends AbstractJavaTypeNode implements Jav return qualifiedName; } + @InternalApi + @Deprecated public void setQualifiedName(JavaTypeQualifiedName qname) { this.qualifiedName = qname; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java index b9be287e91..5c35d956da 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java @@ -33,6 +33,8 @@ public class ASTAssignmentOperator extends AbstractJavaNode { } // TODO this could be determined from the image of the operator, no need to set it in the parser... + @InternalApi + @Deprecated public void setCompound() { isCompound = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java index d4a73027a9..2b8fae383d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java @@ -35,6 +35,8 @@ public class ASTBlock extends AbstractJavaNode { return this.containsComment; } + @InternalApi + @Deprecated public void setContainsComment() { this.containsComment = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java index e0b8761e04..ef609b61f0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java @@ -23,6 +23,8 @@ public class ASTBooleanLiteral extends AbstractJavaTypeNode { super(p, id); } + @InternalApi + @Deprecated public void setTrue() { isTrue = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java index e7b88697d8..d9716c71e5 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java @@ -23,6 +23,8 @@ public class ASTCastExpression extends AbstractJavaTypeNode { super(p, id); } + @InternalApi + @Deprecated public void setIntersectionTypes(boolean intersectionTypes) { this.intersectionTypes = intersectionTypes; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java index afcb9af708..aa0c8685da 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java @@ -90,6 +90,8 @@ public class ASTClassOrInterfaceDeclaration extends AbstractAnyTypeDeclaration { return this.isInterface; } + @InternalApi + @Deprecated public void setInterface() { this.isInterface = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java index b99a9762ba..50ae656ccf 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java @@ -34,6 +34,8 @@ public class ASTCompilationUnit extends AbstractJavaTypeNode implements RootNode return comments; } + @InternalApi + @Deprecated public void setComments(List<Comment> comments) { this.comments = comments; } @@ -62,6 +64,8 @@ public class ASTCompilationUnit extends AbstractJavaTypeNode implements RootNode return classTypeResolver; } + @InternalApi + @Deprecated public void setClassTypeResolver(ClassTypeResolver classTypeResolver) { this.classTypeResolver = classTypeResolver; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java index e6cc2ac1ba..81dd723424 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java @@ -42,6 +42,8 @@ public class ASTConditionalExpression extends AbstractJavaTypeNode { /** * @deprecated To be removed in 7.0.0 */ + @InternalApi + @Deprecated @Deprecated public void setTernary() { // noop diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java index a8f19da4b4..d7ce78b9a9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java @@ -42,6 +42,8 @@ public class ASTConstructorDeclaration extends AbstractMethodOrConstructorDeclar return this.containsComment; } + @InternalApi + @Deprecated public void setContainsComment() { this.containsComment = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java index 1a65f9b1a0..c712832453 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java @@ -58,6 +58,8 @@ public class ASTEnumConstant extends AbstractJavaNode implements JavaQualifiable } + @InternalApi + @Deprecated public void setQualifiedName(JavaTypeQualifiedName qname) { this.qualifiedName = qname; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java index 3b99ef6da9..1a68cf7205 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java @@ -39,10 +39,14 @@ public class ASTExplicitConstructorInvocation extends AbstractJavaNode { } } + @InternalApi + @Deprecated public void setIsThis() { this.thisOrSuper = "this"; } + @InternalApi + @Deprecated public void setIsSuper() { this.thisOrSuper = "super"; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java index 27951a1d91..2f068a636d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java @@ -40,7 +40,8 @@ public class ASTFormalParameter extends AbstractJavaAccessTypeNode implements Di /** * @deprecated Will be made private in 7.0.0 */ - // Should be made package-private + @InternalApi + @Deprecated @Deprecated public void setVarargs() { isVarargs = true; @@ -169,6 +170,8 @@ public class ASTFormalParameter extends AbstractJavaAccessTypeNode implements Di * Noop, the type of this node is defined by the type * of the declarator id. */ + @InternalApi + @Deprecated @Override public void setTypeDefinition(JavaTypeDefinition type) { // see javadoc @@ -178,6 +181,8 @@ public class ASTFormalParameter extends AbstractJavaAccessTypeNode implements Di * Noop, the type of this node is defined by the type * of the declarator id. */ + @InternalApi + @Deprecated @Override public void setType(Class<?> type) { // see javadoc diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java index 4dcb971c1b..f8f8112374 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java @@ -37,6 +37,8 @@ public class ASTIfStatement extends AbstractJavaNode { } + @InternalApi + @Deprecated @InternalApi @Deprecated public void setHasElse() { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java index 99308c1777..736ee6de93 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java @@ -47,6 +47,8 @@ public class ASTImportDeclaration extends AbstractJavaTypeNode { /** * @deprecated Will be made private with 7.0.0 */ + @InternalApi + @Deprecated @Deprecated public void setImportOnDemand() { isImportOnDemand = true; @@ -74,6 +76,8 @@ public class ASTImportDeclaration extends AbstractJavaTypeNode { /** * @deprecated Will be made private with 7.0.0 */ + @InternalApi + @Deprecated @Deprecated public void setStatic() { isStatic = true; @@ -140,6 +144,8 @@ public class ASTImportDeclaration extends AbstractJavaTypeNode { return visitor.visit(this, data); } + @InternalApi + @Deprecated public void setPackage(Package packge) { this.pkg = packge; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java index e524de327b..4cd41e4559 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java @@ -35,6 +35,8 @@ public class ASTInitializer extends AbstractJavaNode { return isStatic; } + @InternalApi + @Deprecated public void setStatic() { isStatic = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java index 4cd30c4e75..c297d391ef 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java @@ -45,6 +45,8 @@ public class ASTLiteral extends AbstractJavaTypeNode { return visitor.visit(this, data); } + @InternalApi + @Deprecated public void setIntLiteral() { this.isInt = true; } @@ -74,6 +76,8 @@ public class ASTLiteral extends AbstractJavaTypeNode { return false; } + @InternalApi + @Deprecated public void setFloatLiteral() { this.isFloat = true; } @@ -183,6 +187,8 @@ public class ASTLiteral extends AbstractJavaTypeNode { return Double.NaN; } + @InternalApi + @Deprecated public void setCharLiteral() { this.isChar = true; } @@ -191,6 +197,8 @@ public class ASTLiteral extends AbstractJavaTypeNode { return isChar; } + @InternalApi + @Deprecated public void setStringLiteral() { this.isString = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java index 182967578e..22b5246915 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java @@ -30,6 +30,8 @@ public class ASTModuleDeclaration extends AbstractJavaNode { return visitor.visit(this, data); } + @InternalApi + @Deprecated public void setOpen(boolean open) { this.open = open; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java index a085184a6e..20207a44a4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java @@ -40,6 +40,8 @@ public class ASTModuleDirective extends AbstractJavaNode { return visitor.visit(this, data); } + @InternalApi + @Deprecated public void setType(DirectiveType type) { this.type = type; } @@ -48,6 +50,8 @@ public class ASTModuleDirective extends AbstractJavaNode { return String.valueOf(type); } + @InternalApi + @Deprecated public void setRequiresModifier(RequiresModifier requiresModifier) { this.requiresModifier = requiresModifier; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java index 3bf2020a83..3d0b4b4db3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java @@ -24,6 +24,8 @@ public class ASTName extends AbstractJavaTypeNode { super(p, id); } + @InternalApi + @Deprecated public void setNameDeclaration(NameDeclaration nd) { this.nd = nd; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java index e808deda1b..936ce82ad3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java @@ -24,6 +24,8 @@ public class ASTPrimaryPrefix extends AbstractJavaTypeNode { super(p, id); } + @InternalApi + @Deprecated public void setUsesThisModifier() { usesThisModifier = true; } @@ -32,6 +34,8 @@ public class ASTPrimaryPrefix extends AbstractJavaTypeNode { return this.usesThisModifier; } + @InternalApi + @Deprecated public void setUsesSuperModifier() { usesSuperModifier = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java index 37753734dd..903559469c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java @@ -24,6 +24,8 @@ public class ASTPrimarySuffix extends AbstractJavaTypeNode { super(p, id); } + @InternalApi + @Deprecated public void setIsArrayDereference() { isArrayDereference = true; } @@ -32,6 +34,8 @@ public class ASTPrimarySuffix extends AbstractJavaTypeNode { return isArrayDereference; } + @InternalApi + @Deprecated public void setIsArguments() { this.isArguments = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java index ca45a97837..88ab8ebf06 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java @@ -38,6 +38,8 @@ public class ASTSwitchLabel extends AbstractJavaNode { } + @InternalApi + @Deprecated @InternalApi @Deprecated public void setDefault() { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java index 07a9f64864..e51f806b04 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java @@ -62,6 +62,8 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim return nameDeclaration; } + @InternalApi + @Deprecated public void setNameDeclaration(VariableNameDeclaration decl) { nameDeclaration = decl; } @@ -195,6 +197,8 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim /** * @deprecated Will be made private with 7.0.0 */ + @InternalApi + @Deprecated @Deprecated public void setExplicitReceiverParameter() { explicitReceiverParameter = true; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractAnyTypeDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractAnyTypeDeclaration.java index c8484d7ea4..7d59f6c0b4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractAnyTypeDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractAnyTypeDeclaration.java @@ -33,7 +33,7 @@ public abstract class AbstractAnyTypeDeclaration extends AbstractJavaAccessTypeN @Override public final boolean isNested() { return jjtGetParent() instanceof ASTClassOrInterfaceBodyDeclaration - || jjtGetParent() instanceof ASTAnnotationTypeMemberDeclaration; + || jjtGetParent() instanceof ASTAnnotationTypeMemberDeclaration; } @@ -83,6 +83,8 @@ public abstract class AbstractAnyTypeDeclaration extends AbstractJavaAccessTypeN } + @InternalApi + @Deprecated public void setQualifiedName(JavaTypeQualifiedName qualifiedName) { this.qualifiedName = qualifiedName; this.typeDefinition = JavaTypeDefinition.forClass(qualifiedName.getType()); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java index e6b45823d4..1966eefed0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java @@ -25,6 +25,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return this.modifiers; } + @InternalApi + @Deprecated @Override public void setModifiers(int modifiers) { this.modifiers = modifiers; @@ -35,6 +37,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(PUBLIC); } + @InternalApi + @Deprecated @Override public void setPublic(boolean isPublic) { setModifier(isPublic, PUBLIC); @@ -45,6 +49,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(PROTECTED); } + @InternalApi + @Deprecated @Override public void setProtected(boolean isProtected) { setModifier(isProtected, PROTECTED); @@ -55,6 +61,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(PRIVATE); } + @InternalApi + @Deprecated @Override public void setPrivate(boolean isPrivate) { setModifier(isPrivate, PRIVATE); @@ -65,6 +73,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(ABSTRACT); } + @InternalApi + @Deprecated @Override public void setAbstract(boolean isAbstract) { setModifier(isAbstract, ABSTRACT); @@ -75,6 +85,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(STATIC); } + @InternalApi + @Deprecated @Override public void setStatic(boolean isStatic) { setModifier(isStatic, STATIC); @@ -85,6 +97,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(FINAL); } + @InternalApi + @Deprecated @Override public void setFinal(boolean isFinal) { setModifier(isFinal, FINAL); @@ -95,6 +109,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(SYNCHRONIZED); } + @InternalApi + @Deprecated @Override public void setSynchronized(boolean isSynchronized) { setModifier(isSynchronized, SYNCHRONIZED); @@ -105,6 +121,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(NATIVE); } + @InternalApi + @Deprecated @Override public void setNative(boolean isNative) { setModifier(isNative, NATIVE); @@ -115,6 +133,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(TRANSIENT); } + @InternalApi + @Deprecated @Override public void setTransient(boolean isTransient) { setModifier(isTransient, TRANSIENT); @@ -125,6 +145,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(VOLATILE); } + @InternalApi + @Deprecated @Override public void setVolatile(boolean isVolative) { setModifier(isVolative, VOLATILE); @@ -135,6 +157,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(STRICTFP); } + @InternalApi + @Deprecated @Override public void setStrictfp(boolean isStrictfp) { setModifier(isStrictfp, STRICTFP); @@ -145,6 +169,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return isModifier(DEFAULT); } + @InternalApi + @Deprecated @Override public void setDefault(boolean isDefault) { setModifier(isDefault, DEFAULT); @@ -154,6 +180,8 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode return (modifiers & mask) == mask; } + @InternalApi + @Deprecated private void setModifier(boolean enable, int mask) { if (enable) { this.modifiers |= mask; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java index a88001025d..35a7d04cc8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java @@ -43,6 +43,8 @@ public abstract class AbstractJavaAccessTypeNode extends AbstractJavaAccessNode return typeDefinition; } + @InternalApi + @Deprecated @Override public void setTypeDefinition(JavaTypeDefinition typeDefinition) { this.typeDefinition = typeDefinition; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java index 30d1fb673c..c9089057f8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java @@ -88,7 +88,6 @@ public abstract class AbstractJavaNode extends AbstractNode implements JavaNode } - @Override public final String getXPathNodeName() { return JavaParserTreeConstants.jjtNodeName[id]; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java index b99dcedd07..e908e0f636 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java @@ -16,6 +16,7 @@ import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefin @Deprecated @InternalApi public abstract class AbstractJavaTypeNode extends AbstractJavaNode implements TypeNode { + private JavaTypeDefinition typeDefinition; public AbstractJavaTypeNode(int i) { @@ -31,6 +32,8 @@ public abstract class AbstractJavaTypeNode extends AbstractJavaNode implements T return typeDefinition == null ? null : typeDefinition.getType(); } + @InternalApi + @Deprecated @Override public void setType(Class<?> type) { typeDefinition = JavaTypeDefinition.forClass(type); @@ -41,6 +44,8 @@ public abstract class AbstractJavaTypeNode extends AbstractJavaNode implements T return typeDefinition; } + @InternalApi + @Deprecated @Override public void setTypeDefinition(JavaTypeDefinition typeDefinition) { this.typeDefinition = typeDefinition; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodLikeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodLikeNode.java index c72392e0ed..377cb438ff 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodLikeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractMethodLikeNode.java @@ -10,6 +10,7 @@ import net.sourceforge.pmd.lang.java.qname.JavaOperationQualifiedName; @Deprecated @InternalApi public abstract class AbstractMethodLikeNode extends AbstractJavaAccessNode implements MethodLikeNode { + private JavaOperationQualifiedName qualifiedName; @@ -23,6 +24,8 @@ public abstract class AbstractMethodLikeNode extends AbstractJavaAccessNode impl } + @InternalApi + @Deprecated public void setQualifiedName(JavaOperationQualifiedName qualifiedName) { this.qualifiedName = qualifiedName; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AccessNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AccessNode.java index 1f233512df..803d1f6f73 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AccessNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AccessNode.java @@ -4,6 +4,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; /** @@ -24,57 +25,110 @@ public interface AccessNode extends Node { int STRICTFP = 0x1000; int DEFAULT = 0x2000; + int getModifiers(); + + @Deprecated + @InternalApi void setModifiers(int modifiers); + boolean isPublic(); + + @Deprecated + @InternalApi void setPublic(boolean isPublic); + boolean isProtected(); + + @Deprecated + @InternalApi void setProtected(boolean isProtected); + boolean isPrivate(); + + @Deprecated + @InternalApi void setPrivate(boolean isPrivate); + boolean isAbstract(); + + @Deprecated + @InternalApi void setAbstract(boolean isAbstract); + boolean isStatic(); + + @Deprecated + @InternalApi void setStatic(boolean isStatic); + boolean isFinal(); + + @Deprecated + @InternalApi void setFinal(boolean isFinal); + boolean isSynchronized(); + + @Deprecated + @InternalApi void setSynchronized(boolean isSynchronized); + boolean isNative(); + + @Deprecated + @InternalApi void setNative(boolean isNative); + boolean isTransient(); + + @Deprecated + @InternalApi void setTransient(boolean isTransient); + boolean isVolatile(); + + @Deprecated + @InternalApi void setVolatile(boolean isVolatile); + boolean isStrictfp(); + + @Deprecated + @InternalApi void setStrictfp(boolean isStrictfp); + boolean isPackagePrivate(); + + @Deprecated + @InternalApi void setDefault(boolean isDefault); + boolean isDefault(); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java index 453cb64804..06c39794d1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java @@ -4,6 +4,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.symboltable.Scope; import net.sourceforge.pmd.lang.symboltable.ScopedNode; @@ -14,13 +15,18 @@ public interface JavaNode extends ScopedNode { */ Object jjtAccept(JavaParserVisitor visitor, Object data); + /** * Accept the visitor. * */ Object childrenAccept(JavaParserVisitor visitor, Object data); + @Override Scope getScope(); + + @Deprecated + @InternalApi void setScope(Scope scope); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaParserVisitorDecorator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaParserVisitorDecorator.java index 71fccb55cd..8e02752fac 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaParserVisitorDecorator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaParserVisitorDecorator.java @@ -4,19 +4,22 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; + /** * Decorates a control less visitor. This must be wrapped into a {@link JavaParserDecoratedVisitor} to work properly. * - * @deprecated Visitor decorators are deprecated because they lead to fragile code. - * * @author Clément Fournier * @since 6.0.0 + * @deprecated Visitor decorators are deprecated because they lead to fragile code. */ @Deprecated public class JavaParserVisitorDecorator implements JavaParserControllessVisitor { private JavaParserVisitor visitor; + @InternalApi + @Deprecated public void setBase(JavaParserControllessVisitor base) { visitor = base; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java index 91a2518be5..a614dfe947 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java @@ -4,6 +4,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefinition; @@ -19,6 +20,7 @@ public interface TypeNode extends Node { */ Class<?> getType(); + /** * Get the TypeDefinition associated with this node. The Class object * contained in the TypeDefinition will always be equal to that which @@ -28,17 +30,23 @@ public interface TypeNode extends Node { */ JavaTypeDefinition getTypeDefinition(); + /** * Set the TypeDefinition associated with this node. * * @param type A TypeDefinition object */ + @Deprecated + @InternalApi void setTypeDefinition(JavaTypeDefinition type); + /** * Set the Java Class associated with this node. * * @param type A Java Class */ + @Deprecated + @InternalApi void setType(Class<?> type); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java index c962c42c85..cffd277fd0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/package-info.java @@ -15,7 +15,15 @@ * <li>Subclassing of base node classes, or usage of their type. * Version 7.0.0 will bring a new set of abstractions that will * be public API, but the base classes are and will stay internal. - * you should not couple your code to them. + * You should not couple your code to them. + * <p>In the meantime you should use interfaces like {@link net.sourceforge.pmd.lang.java.ast.JavaNode} + * or {@link net.sourceforge.pmd.lang.ast.Node}, or the other published + * interfaces in this package, to refer to nodes generically. + * </li> + * <li>Setters found in any node class or interface. Rules should consider + * the AST immutable. We will make those setters package private + * with 7.0.0. + * </li> * </ul> * */ From 97db569ccddb85a1e856b476beb7fde2bd2e3e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 28 May 2019 21:57:07 +0200 Subject: [PATCH 149/371] Remove jjtree comments --- .../pmd/lang/java/ast/ASTAdditiveExpression.java | 1 - .../pmd/lang/java/ast/ASTAllocationExpression.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java | 1 - .../net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java | 1 - .../pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java | 2 -- .../pmd/lang/java/ast/ASTAnnotationTypeBody.java | 4 ---- .../pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java | 1 - .../lang/java/ast/ASTAnnotationTypeMemberDeclaration.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTArguments.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTAssertStatement.java | 1 - .../pmd/lang/java/ast/ASTAssignmentOperator.java | 1 - .../java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTBlockStatement.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTBreakStatement.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTCastExpression.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTCatchStatement.java | 1 - .../pmd/lang/java/ast/ASTClassOrInterfaceBody.java | 1 - .../lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java | 4 ---- .../pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java | 4 ---- .../pmd/lang/java/ast/ASTClassOrInterfaceType.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java | 4 ---- .../pmd/lang/java/ast/ASTConditionalAndExpression.java | 1 - .../pmd/lang/java/ast/ASTConditionalExpression.java | 1 - .../pmd/lang/java/ast/ASTConditionalOrExpression.java | 1 - .../pmd/lang/java/ast/ASTConstructorDeclaration.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTContinueStatement.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTDoStatement.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java | 4 ---- .../java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java | 1 - .../pmd/lang/java/ast/ASTEqualityExpression.java | 1 - .../pmd/lang/java/ast/ASTExclusiveOrExpression.java | 1 - .../pmd/lang/java/ast/ASTExplicitConstructorInvocation.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTExpression.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java | 4 ---- .../java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTForStatement.java | 1 - .../net/sourceforge/pmd/lang/java/ast/ASTForUpdate.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTFormalParameter.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTFormalParameters.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTImplementsList.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java | 1 - .../pmd/lang/java/ast/ASTInclusiveOrExpression.java | 1 - .../net/sourceforge/pmd/lang/java/ast/ASTInitializer.java | 4 ---- .../pmd/lang/java/ast/ASTInstanceOfExpression.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java | 2 -- .../java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java | 4 ---- .../pmd/lang/java/ast/ASTLocalVariableDeclaration.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTMemberSelector.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java | 1 - .../pmd/lang/java/ast/ASTMemberValueArrayInitializer.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTMethodReference.java | 2 -- .../sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java | 2 -- .../sourceforge/pmd/lang/java/ast/ASTModuleDirective.java | 2 -- .../net/sourceforge/pmd/lang/java/ast/ASTModuleName.java | 3 --- .../pmd/lang/java/ast/ASTMultiplicativeExpression.java | 1 - .../java/net/sourceforge/pmd/lang/java/ast/ASTName.java | 4 ---- .../java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java | 1 - .../net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java | 4 ---- .../pmd/lang/java/ast/ASTPackageDeclaration.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java | 1 - .../pmd/lang/java/ast/ASTPreDecrementExpression.java | 1 - .../pmd/lang/java/ast/ASTPreIncrementExpression.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java | 4 ---- .../pmd/lang/java/ast/ASTRelationalExpression.java | 1 - .../java/net/sourceforge/pmd/lang/java/ast/ASTResource.java | 2 -- .../pmd/lang/java/ast/ASTResourceSpecification.java | 2 -- .../net/sourceforge/pmd/lang/java/ast/ASTResources.java | 2 -- .../net/sourceforge/pmd/lang/java/ast/ASTResultType.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTReturnStatement.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTShiftExpression.java | 1 - .../pmd/lang/java/ast/ASTSingleMemberAnnotation.java | 1 - .../net/sourceforge/pmd/lang/java/ast/ASTStatement.java | 4 ---- .../pmd/lang/java/ast/ASTStatementExpression.java | 4 ---- .../pmd/lang/java/ast/ASTStatementExpressionList.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java | 3 --- .../net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java | 1 - .../pmd/lang/java/ast/ASTSynchronizedStatement.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTThrowStatement.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java | 1 - .../java/net/sourceforge/pmd/lang/java/ast/ASTType.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java | 1 - .../net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java | 1 - .../net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java | 4 ---- .../net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTTypeParameters.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java | 1 - .../pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java | 1 - .../pmd/lang/java/ast/ASTVariableDeclarator.java | 1 - .../pmd/lang/java/ast/ASTVariableDeclaratorId.java | 1 - .../pmd/lang/java/ast/ASTVariableInitializer.java | 4 ---- .../sourceforge/pmd/lang/java/ast/ASTWhileStatement.java | 1 - .../sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java | 1 - .../net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java | 6 ------ .../java/net/sourceforge/pmd/lang/java/ast/JavaNode.java | 6 ------ 119 files changed, 303 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAdditiveExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAdditiveExpression.java index ecb80ee0c1..b2176402ff 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAdditiveExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAdditiveExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAdditiveExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java index e679f9d795..e1ea289cdb 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAllocationExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAllocationExpression.java */ package net.sourceforge.pmd.lang.java.ast; @@ -25,9 +24,6 @@ public class ASTAllocationExpression extends AbstractJavaTypeNode implements Jav super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java index e407f21f38..da11a08327 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAndExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAndExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java index ccbe1478ea..a833a8742b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAnnotation.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java index 7b461b5fd7..e86b9d7eb9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java @@ -1,8 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAnnotationMethodDeclaration.java Version 4.1 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY= */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeBody.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeBody.java index 090859402a..2c8a393ff2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeBody.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeBody.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAnnotationTypeBody.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTAnnotationTypeBody extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java index 6ee9624214..2aa5673e3f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAnnotationTypeDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeMemberDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeMemberDeclaration.java index d4a2a7ec45..0ecd782410 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeMemberDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeMemberDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAnnotationTypeMemberDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTAnnotationTypeMemberDeclaration extends AbstractTypeBodyDeclarat super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java index 8c1ecb24ab..08c57dd9a7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTArgumentList.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTArgumentList extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java index cd4aabee54..12b61f6345 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTArguments.java */ package net.sourceforge.pmd.lang.java.ast; @@ -28,9 +27,6 @@ public class ASTArguments extends AbstractJavaNode { return this.jjtGetChild(0).jjtGetNumChildren(); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java index 40e691cf8d..2500e77f8c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayDimsAndInits.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTArrayDimsAndInits.java */ package net.sourceforge.pmd.lang.java.ast; @@ -23,9 +22,6 @@ public class ASTArrayDimsAndInits extends AbstractJavaNode implements Dimensiona super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java index f41d75c372..eb4f7145e3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArrayInitializer.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTArrayInitializer.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTArrayInitializer extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssertStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssertStatement.java index 017ab9bc2b..5cc2414249 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssertStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssertStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAssertStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java index 5c35d956da..e562b19a83 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAssignmentOperator.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTAssignmentOperator.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java index 2b8fae383d..5b32d7be81 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlock.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTBlock.java */ package net.sourceforge.pmd.lang.java.ast; @@ -23,9 +22,6 @@ public class ASTBlock extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlockStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlockStatement.java index aa7aa32cdf..3a737d05d4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlockStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBlockStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTBlockStatement.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTBlockStatement extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java index ef609b61f0..92f631c008 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBooleanLiteral.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTBooleanLiteral.java */ package net.sourceforge.pmd.lang.java.ast; @@ -33,9 +32,6 @@ public class ASTBooleanLiteral extends AbstractJavaTypeNode { return this.isTrue; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBreakStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBreakStatement.java index 725fc2ffa0..04cd88176a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBreakStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTBreakStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTBreakStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java index d9716c71e5..c0022148fa 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCastExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTCastExpression.java */ package net.sourceforge.pmd.lang.java.ast; @@ -33,9 +32,6 @@ public class ASTCastExpression extends AbstractJavaTypeNode { return intersectionTypes; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCatchStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCatchStatement.java index 3f8559c62a..9a9b83c2b3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCatchStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCatchStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTCatchStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java index b6d6429383..308d2d9faa 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTClassOrInterfaceBody.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java index 11dd3d280d..346775371a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBodyDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTClassOrInterfaceBodyDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; @@ -40,9 +39,6 @@ public class ASTClassOrInterfaceBodyDeclaration extends AbstractTypeBodyDeclarat return false; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java index aa0c8685da..69151601d7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTClassOrInterfaceDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; @@ -51,9 +50,6 @@ public class ASTClassOrInterfaceDeclaration extends AbstractAnyTypeDeclaration { return isNested() || isLocal(); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceType.java index addd8d337b..f44ecf62e5 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceType.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTClassOrInterfaceType.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java index 50ae656ccf..822a48fccc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTCompilationUnit.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTCompilationUnit.java */ package net.sourceforge.pmd.lang.java.ast; @@ -40,9 +39,6 @@ public class ASTCompilationUnit extends AbstractJavaTypeNode implements RootNode this.comments = comments; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalAndExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalAndExpression.java index c31a4f9a17..663326a348 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalAndExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalAndExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTConditionalAndExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java index 81dd723424..9c54d6ae3f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTConditionalExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalOrExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalOrExpression.java index 515f298a6b..73536f9d46 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalOrExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalOrExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTConditionalOrExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java index d7ce78b9a9..7d9f433bc7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTConstructorDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; @@ -30,9 +29,6 @@ public class ASTConstructorDeclaration extends AbstractMethodOrConstructorDeclar return MethodLikeKind.CONSTRUCTOR; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTContinueStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTContinueStatement.java index 4bb9013f0d..6d6f9bebfc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTContinueStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTContinueStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTContinueStatement.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTContinueStatement extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java index 8550000cce..dfb88b47c6 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDefaultValue.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTDefaultValue.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTDefaultValue extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDoStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDoStatement.java index a822e30561..8ca91febef 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDoStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTDoStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTDoStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java index 066b846c5c..dce4744d9c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEmptyStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTEmptyStatement.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTEmptyStatement extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java index 98956d2e17..14ddf7d459 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumBody.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTEnumBody.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTEnumBody extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java index c712832453..65c797ad0d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumConstant.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTEnumConstant.java */ package net.sourceforge.pmd.lang.java.ast; @@ -36,9 +35,6 @@ public class ASTEnumConstant extends AbstractJavaNode implements JavaQualifiable super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java index 825f0a2be3..edaa96a0bc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEnumDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTEnumDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEqualityExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEqualityExpression.java index b65da06bd1..63b4631337 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEqualityExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTEqualityExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTEqualityExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExclusiveOrExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExclusiveOrExpression.java index f2700dbd82..197376135b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExclusiveOrExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExclusiveOrExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTExclusiveOrExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java index 1a68cf7205..b06818aba6 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTExplicitConstructorInvocation.java */ package net.sourceforge.pmd.lang.java.ast; @@ -23,9 +22,6 @@ public class ASTExplicitConstructorInvocation extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExpression.java index 1c9366d4cc..32755d75cb 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTExpression.java */ package net.sourceforge.pmd.lang.java.ast; @@ -33,9 +32,6 @@ public class ASTExpression extends AbstractJavaTypeNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java index 503831b07f..40bd6f6f19 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExtendsList.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTExtendsList.java */ package net.sourceforge.pmd.lang.java.ast; @@ -34,9 +33,6 @@ public class ASTExtendsList extends AbstractJavaNode implements Iterable<ASTClas super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java index 65cc796721..722d827b31 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTFieldDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; @@ -54,9 +53,6 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java index 84f8be95de..fcecbddf4b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFinallyStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTFinallyStatement.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTFinallyStatement extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java index 7d5e31c6e9..416d3838c2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForInit.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTForInit.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTForInit extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForStatement.java index 7e6d85d1c5..9ae218b9f2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTForStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForUpdate.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForUpdate.java index 633e6daece..dfa24c8a35 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForUpdate.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTForUpdate.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTForUpdate.java */ package net.sourceforge.pmd.lang.java.ast; @@ -33,9 +32,6 @@ public class ASTForUpdate extends AbstractJavaNode { } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java index 2f068a636d..9b93064ea0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTFormalParameter.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java index e8589c9afa..40adda2a39 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTFormalParameters.java */ package net.sourceforge.pmd.lang.java.ast; @@ -31,9 +30,6 @@ public class ASTFormalParameters extends AbstractJavaNode implements Iterable<AS ? parameters.size() - 1 : parameters.size(); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java index f8f8112374..26cd2899ea 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTIfStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImplementsList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImplementsList.java index 1fecdf2ea4..7f95b07739 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImplementsList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImplementsList.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTImplementsList.java */ package net.sourceforge.pmd.lang.java.ast; @@ -32,9 +31,6 @@ public class ASTImplementsList extends AbstractJavaNode implements Iterable<ASTC super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java index 736ee6de93..7b701c0c68 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTImportDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInclusiveOrExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInclusiveOrExpression.java index e55bcdf333..f5c404b103 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInclusiveOrExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInclusiveOrExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTInclusiveOrExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java index 4cd41e4559..98845224d7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInitializer.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTInitializer.java */ package net.sourceforge.pmd.lang.java.ast; @@ -23,9 +22,6 @@ public class ASTInitializer extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInstanceOfExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInstanceOfExpression.java index 873719ecf4..e16d1a1c58 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInstanceOfExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTInstanceOfExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTInstanceOfExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java index e779f571ed..c728702e03 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLabeledStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTLabeledStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java index 7a31ac5386..4e0376a8cd 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java @@ -1,8 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTLambdaExpression.java Version 4.3 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java index c297d391ef..848592e641 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLiteral.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTLiteral.java */ package net.sourceforge.pmd.lang.java.ast; @@ -37,9 +36,6 @@ public class ASTLiteral extends AbstractJavaTypeNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java index 1cde17961a..353f95f2c8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTLocalVariableDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java index 0ff205f6c0..a3d23bb1fc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMarkerAnnotation.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMarkerAnnotation.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberSelector.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberSelector.java index 7289287d0e..bfdef259eb 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberSelector.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberSelector.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMemberSelector.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTMemberSelector extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java index 7bd6a83659..22d62bcaed 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValue.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMemberValue.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValueArrayInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValueArrayInitializer.java index 3b397d535c..a15ff2784c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValueArrayInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValueArrayInitializer.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMemberValueArrayInitializer.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java index 4e24eec5ac..fd48557471 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePair.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMemberValuePair.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java index 6002cd6ad1..ab6a64ea44 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMemberValuePairs.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMemberValuePairs.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java index e4cc616f67..611a7938df 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMethodDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java index 17406c0f88..b6ab1adbee 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMethodDeclarator.java */ package net.sourceforge.pmd.lang.java.ast; @@ -25,9 +24,6 @@ public class ASTMethodDeclarator extends AbstractJavaNode { return getFirstChildOfType(ASTFormalParameters.class).getParameterCount(); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java index 6bf2ee7165..a9f67e1734 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java @@ -1,8 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMethodReference.java Version 4.3 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java index 22b5246915..420d6ed23b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java @@ -1,8 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTModuleDeclaration.java Version 4.3 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=true,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java index 20207a44a4..39ec23b808 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java @@ -1,8 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTModuleDirective.java Version 4.3 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=true,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java index 9f7cb67b1f..bc9eea6143 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java @@ -2,9 +2,6 @@ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTModuleName.java Version 4.3 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=true,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ - package net.sourceforge.pmd.lang.java.ast; import net.sourceforge.pmd.annotation.InternalApi; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMultiplicativeExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMultiplicativeExpression.java index 9b0dbe24ca..f956064196 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMultiplicativeExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMultiplicativeExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTMultiplicativeExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java index 3d0b4b4db3..d1070e2aaa 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTName.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTName.java */ package net.sourceforge.pmd.lang.java.ast; @@ -34,9 +33,6 @@ public class ASTName extends AbstractJavaTypeNode { return this.nd; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java index 7b4977ad36..24a0f90bec 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNameList.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTNameList.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTNameList extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java index 803e9d1948..84775e039d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNormalAnnotation.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTNormalAnnotation.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java index aa30c4ea89..2b8ccfdc91 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTNullLiteral.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTNullLiteral.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTNullLiteral extends AbstractJavaTypeNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPackageDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPackageDeclaration.java index 9abc57e94b..db17fa9d11 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPackageDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPackageDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTPackageDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTPackageDeclaration extends AbstractJavaAnnotatableNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java index f4265ccbc0..0a6d4686c8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPostfixExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTPostfixExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreDecrementExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreDecrementExpression.java index 30d46fe457..55faab82e4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreDecrementExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreDecrementExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTPreDecrementExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreIncrementExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreIncrementExpression.java index 73fb8df7db..a1d733e6e2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreIncrementExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPreIncrementExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTPreIncrementExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java index 1a285e4272..1f2987917c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTPrimaryExpression.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTPrimaryExpression extends AbstractJavaTypeNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java index 936ce82ad3..ab0e070eef 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimaryPrefix.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTPrimaryPrefix.java */ package net.sourceforge.pmd.lang.java.ast; @@ -44,9 +43,6 @@ public class ASTPrimaryPrefix extends AbstractJavaTypeNode { return this.usesSuperModifier; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java index 903559469c..6981e41d5f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTPrimarySuffix.java */ package net.sourceforge.pmd.lang.java.ast; @@ -59,9 +58,6 @@ public class ASTPrimarySuffix extends AbstractJavaTypeNode { return ((ASTArguments) jjtGetChild(jjtGetNumChildren() - 1)).getArgumentCount(); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java index 33b738e07b..27366a946f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTPrimitiveType.java */ package net.sourceforge.pmd.lang.java.ast; @@ -36,9 +35,6 @@ public class ASTPrimitiveType extends AbstractJavaTypeNode implements Dimensiona return "boolean".equals(getImage()); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java index ad299118da..e5e3a466bd 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRSIGNEDSHIFT.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTRSIGNEDSHIFT.java */ package net.sourceforge.pmd.lang.java.ast; @@ -25,9 +24,6 @@ public class ASTRSIGNEDSHIFT extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java index 507c671869..5548bb613d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRUNSIGNEDSHIFT.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTRUNSIGNEDSHIFT.java */ package net.sourceforge.pmd.lang.java.ast; @@ -25,9 +24,6 @@ public class ASTRUNSIGNEDSHIFT extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java index 8c277504d2..e77c4077ef 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReferenceType.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTReferenceType.java */ package net.sourceforge.pmd.lang.java.ast; @@ -34,9 +33,6 @@ public class ASTReferenceType extends AbstractJavaTypeNode implements Dimensiona super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRelationalExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRelationalExpression.java index 0834127794..d425b045b1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRelationalExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTRelationalExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTRelationalExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java index 2c55febdb5..6449b0087b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java @@ -1,8 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTResource.java Version 4.1 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY= */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java index c4c8889f50..c17b5c9328 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java @@ -1,8 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTResourceSpecification.java Version 4.1 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY= */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java index 6f5a400918..75a624c863 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java @@ -1,8 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTResources.java Version 4.1 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY= */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResultType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResultType.java index d25301d998..77b766cef2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResultType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResultType.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTResultType.java */ package net.sourceforge.pmd.lang.java.ast; @@ -29,9 +28,6 @@ public class ASTResultType extends AbstractJavaNode { return jjtGetNumChildren() == 0; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReturnStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReturnStatement.java index ba74cc4ff7..2a484192bf 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReturnStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTReturnStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTReturnStatement.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTReturnStatement extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTShiftExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTShiftExpression.java index 91089a6c15..f4084a081c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTShiftExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTShiftExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTShiftExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSingleMemberAnnotation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSingleMemberAnnotation.java index 9cc4f06a8f..669871cc49 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSingleMemberAnnotation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSingleMemberAnnotation.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTSingleMemberAnnotation.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatement.java index 204d420b3a..7ba10fe898 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTStatement.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTStatement extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpression.java index 0afb129b50..b755fb1834 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTStatementExpression.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTStatementExpression extends AbstractJavaTypeNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpressionList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpressionList.java index dc07653181..9270f50916 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpressionList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTStatementExpressionList.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTStatementExpressionList.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTStatementExpressionList extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java index ae44abd2b8..44e451ccfd 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java @@ -2,9 +2,6 @@ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTSwitchLabeledRule.java Version 4.3 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=true,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ - package net.sourceforge.pmd.lang.java.ast; import net.sourceforge.pmd.annotation.InternalApi; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java index 88ab8ebf06..96628f51ef 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTSwitchLabel.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java index 9bf7835c57..6cefd97da5 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTSwitchStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSynchronizedStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSynchronizedStatement.java index fb6322bce9..6a6695aee6 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSynchronizedStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSynchronizedStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTSynchronizedStatement.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTSynchronizedStatement extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java index adad4e7428..bbf4c23b62 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTThrowStatement.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTThrowStatement extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java index beee9366a9..7ac0ee055c 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTryStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTTryStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTType.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTType.java index 51e0d39353..c94f29c39b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTType.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTType.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTType.java */ package net.sourceforge.pmd.lang.java.ast; @@ -32,9 +31,6 @@ public class ASTType extends AbstractJavaTypeNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java index 42c3a88a4a..6eaa535764 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArgument.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTTypeArgument.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java index 1ce15f55ae..710a819e06 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeArguments.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTTypeArguments.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java index b6c74d1971..a53a2598f8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeBound.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTTypeBound.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java index 85a43efba6..ab576bb14d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTTypeDeclaration.java */ package net.sourceforge.pmd.lang.java.ast; @@ -35,9 +34,6 @@ public class ASTTypeDeclaration extends AbstractJavaTypeNode implements CanSuppr return false; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java index ef6705238f..5175bae316 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameter.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTTypeParameter.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameters.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameters.java index 011a013275..ede79d399b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameters.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTTypeParameters.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTTypeParameters.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java index 0b71a4c29b..cbf6b79f33 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTUnaryExpression.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java index 939d058f41..6899eb9732 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpressionNotPlusMinus.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTUnaryExpressionNotPlusMinus.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclarator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclarator.java index f1952b89e6..5058b34a9b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclarator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclarator.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTVariableDeclarator.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java index e51f806b04..e53fbf9665 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTVariableDeclaratorId.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableInitializer.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableInitializer.java index b8c3a1ebcb..61af812b13 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableInitializer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableInitializer.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTVariableInitializer.java */ package net.sourceforge.pmd.lang.java.ast; @@ -21,9 +20,6 @@ public class ASTVariableInitializer extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWhileStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWhileStatement.java index c523ca7374..d0dedbf152 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWhileStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWhileStatement.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTWhileStatement.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java index 18dfe90e2f..e4b3616019 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTWildcardBounds.java @@ -1,7 +1,6 @@ /** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTWildcardBounds.java */ package net.sourceforge.pmd.lang.java.ast; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java index c9089057f8..497b9769e5 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java @@ -45,17 +45,11 @@ public abstract class AbstractJavaNode extends AbstractNode implements JavaNode endColumn = parser.token.endColumn; } - /** - * Accept the visitor. * - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } - /** - * Accept the visitor. * - */ @Override public Object childrenAccept(JavaParserVisitor visitor, Object data) { if (children != null) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java index 06c39794d1..9225c6738a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java @@ -10,15 +10,9 @@ import net.sourceforge.pmd.lang.symboltable.ScopedNode; public interface JavaNode extends ScopedNode { - /** - * Accept the visitor. * - */ Object jjtAccept(JavaParserVisitor visitor, Object data); - /** - * Accept the visitor. * - */ Object childrenAccept(JavaParserVisitor visitor, Object data); From ccbf12a2671e2332e1a664787d18aa1ab6989c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 28 May 2019 21:21:44 +0200 Subject: [PATCH 150/371] Add visit comment --- .../pmd/lang/java/ast/JavaNode.java | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java index 9225c6738a..ff75d6de85 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java @@ -4,23 +4,39 @@ package net.sourceforge.pmd.lang.java.ast; -import net.sourceforge.pmd.annotation.InternalApi; + import net.sourceforge.pmd.lang.symboltable.Scope; import net.sourceforge.pmd.lang.symboltable.ScopedNode; + +/** + * Root interface for all Nodes of the Java AST. + */ public interface JavaNode extends ScopedNode { + /** + * Calls back the visitor's visit method corresponding to the runtime type of this Node. + * + * @param visitor Visitor to dispatch + * @param data Visit data + */ Object jjtAccept(JavaParserVisitor visitor, Object data); + /** + * Dispatches the given visitor to the children of this node. This is the default implementation + * of {@link JavaParserVisitor#visit(JavaNode, Object)}, to which all other default + * implementations for visit methods delegate. Unless visit methods are overridden without calling + * {@code super.visit}, the visitor performs a depth-first tree walk. + * + * <p>The return value of the visit methods called on children are ignored. + * + * @param visitor Visitor to dispatch + * @param data Visit data + */ Object childrenAccept(JavaParserVisitor visitor, Object data); - @Override - Scope getScope(); - - - @Deprecated - @InternalApi void setScope(Scope scope); + } From fb8744d8a827257ad5347d698ec04aa397671552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 28 May 2019 21:25:11 +0200 Subject: [PATCH 151/371] Remove duplicate annotations --- .../sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java | 1 - .../net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java | 1 - .../java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java | 2 -- .../net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java | 2 -- .../sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java | 1 - 5 files changed, 7 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java index 9c54d6ae3f..2f79681cd1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConditionalExpression.java @@ -43,7 +43,6 @@ public class ASTConditionalExpression extends AbstractJavaTypeNode { */ @InternalApi @Deprecated - @Deprecated public void setTernary() { // noop } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java index 9b93064ea0..44ccd8dded 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameter.java @@ -41,7 +41,6 @@ public class ASTFormalParameter extends AbstractJavaAccessTypeNode implements Di */ @InternalApi @Deprecated - @Deprecated public void setVarargs() { isVarargs = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java index 26cd2899ea..f9614c4fe8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTIfStatement.java @@ -36,8 +36,6 @@ public class ASTIfStatement extends AbstractJavaNode { } - @InternalApi - @Deprecated @InternalApi @Deprecated public void setHasElse() { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java index 7b701c0c68..e75f57f64f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java @@ -48,7 +48,6 @@ public class ASTImportDeclaration extends AbstractJavaTypeNode { */ @InternalApi @Deprecated - @Deprecated public void setImportOnDemand() { isImportOnDemand = true; } @@ -77,7 +76,6 @@ public class ASTImportDeclaration extends AbstractJavaTypeNode { */ @InternalApi @Deprecated - @Deprecated public void setStatic() { isStatic = true; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java index e53fbf9665..36e5663416 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableDeclaratorId.java @@ -198,7 +198,6 @@ public class ASTVariableDeclaratorId extends AbstractJavaTypeNode implements Dim */ @InternalApi @Deprecated - @Deprecated public void setExplicitReceiverParameter() { explicitReceiverParameter = true; } From 2a73ee7d977ae4181f270730f68b2911cb8cee8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 28 May 2019 21:35:48 +0200 Subject: [PATCH 152/371] Update release notes --- docs/pages/release_notes.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..646ac3cadb 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -18,6 +18,30 @@ This is a {{ site.pmd.release_type }} release. ### API Changes +#### Deprecated APIs + +> Reminder: Please don't use members marked with the annotation {% jdoc core::annotation.InternalApi %}, as they will likely be removed, hidden, or otherwise intentionally broken with 7.0.0. + + +##### In ASTs + +As part of the changes we'd like to do to AST classes for 7.0.0, we would like to +hide some methods and constructors that rule writers should not have access to. +The following usages are now deprecated **in the Java AST** (with other languages to come): + +* Manual instantiation of nodes. **Constructors of node classes are deprecated** and marked {% jdoc core::annotation.InternalApi %}. Nodes should only be obtained from the parser, which for rules, means that never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. +* **Subclassing of abstract node classes, or usage of their type**. Version 7.0.0 will bring a new set of abstractions that will be public API, but the base classes are and will stay internal. You should not couple your code to them. + * In the meantime you should use interfaces like {% jdoc java::lang.java.ast.JavaNode %} or {% jdoc core::lang.ast.Node %}, or the other published interfaces in this package, to refer to nodes generically. + * Concrete node classes will also most probably **be made final** with 7.0.0. +* Setters found in any node class or interface. **Rules should consider the AST immutable**. We will make those setters package private with 7.0.0. + +Please look at {% jdoc_package java::lang.java.ast %} to find out the full list +of deprecations. + + + + + ### External Contributions {% endtocmaker %} From ff579dfd53e138b74bc380496ab382d823386f36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Wed, 29 May 2019 10:15:15 +0200 Subject: [PATCH 153/371] Fix repeated annotation --- .../java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java index 96628f51ef..3c795af045 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabel.java @@ -37,8 +37,6 @@ public class ASTSwitchLabel extends AbstractJavaNode { } - @InternalApi - @Deprecated @InternalApi @Deprecated public void setDefault() { From 10158751d2f2ff9b3f6b4f55a5b079b5ad6642d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 30 May 2019 14:53:16 +0200 Subject: [PATCH 154/371] Fix local class modifiers being forgotten --- pmd-java/etc/grammar/Java.jjt | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index 44def98dbb..e603105977 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -1698,8 +1698,7 @@ void ClassOrInterfaceDeclaration(int modifiers): inInterface = false; } { - ( /* See note about this optional final modifier in BlockStatement */ - ["final"|"abstract"] "class" | "interface" { jjtThis.setInterface(); inInterface = true; } ) + ( "class" | "interface" { jjtThis.setInterface(); inInterface = true; } ) t=<IDENTIFIER> { checkForBadTypeIdentifierUsage(t.image); jjtThis.setImage(t.image); } [ TypeParameters() ] [ ExtendsList() ] @@ -2423,13 +2422,22 @@ void BlockStatement(): | Statement() | - /* - TODO: Seems like we should be discarding the "final" - after using it in the lookahead; I added a ["final|abstract"] inside - ClassOrInterfaceDeclaration, but that seems like a hack that - could break other things... - */ - LOOKAHEAD( (Annotation())* ["final"|"abstract"] "class") (Annotation())* ClassOrInterfaceDeclaration(0) + // we don't need to lookahead further here + // the ambiguity between start of local class and local variable decl + // is already handled in the lookahead guarding LocalVariableDeclaration above. + LocalClassDecl() +} + +void LocalClassDecl() #void: +{int mods = 0;} +{ + // this preserves the modifiers of the local class. + // it allows for modifiers that are forbidden for local classes, + // but anyway we are *not* checking modifiers for incompatibilities + // anywhere else in this grammar (and indeed the production Modifiers + // accepts any modifier explicitly for the purpose of forgiving modifier errors, + // and reporting them later if needed --see its documentation). + mods=Modifiers() ClassOrInterfaceDeclaration(mods) } /* From 06b84079b93d8d00c0191966cef0cc743dbed051 Mon Sep 17 00:00:00 2001 From: "artem.krosheninnikov" <artem.krosheninnikov@team.wrike.com> Date: Thu, 30 May 2019 15:54:05 +0300 Subject: [PATCH 155/371] #1845 Regression in MethodReturnsInternalArray not handling enums --- .../bestpractices/AbstractSunSecureRule.java | 4 +-- .../MethodReturnsInternalArrayRule.java | 6 ++--- .../xml/MethodReturnsInternalArray.xml | 27 +++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AbstractSunSecureRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AbstractSunSecureRule.java index 7f5b727cd9..542a58dc2f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AbstractSunSecureRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AbstractSunSecureRule.java @@ -6,8 +6,8 @@ package net.sourceforge.pmd.lang.java.rule.bestpractices; import java.util.List; -import net.sourceforge.pmd.lang.ast.AbstractNode; import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.java.ast.ASTAnyTypeDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTConditionalExpression; import net.sourceforge.pmd.lang.java.ast.ASTEqualityExpression; import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration; @@ -38,7 +38,7 @@ public abstract class AbstractSunSecureRule extends AbstractJavaRule { * @return <code>true</code> if there is a field in the type declaration * named varName, <code>false</code> in other case */ - protected final boolean isField(String varName, AbstractNode typeDeclaration) { + protected final boolean isField(String varName, ASTAnyTypeDeclaration typeDeclaration) { final List<ASTFieldDeclaration> fds = typeDeclaration.findDescendantsOfType(ASTFieldDeclaration.class); if (fds != null) { for (ASTFieldDeclaration fd : fds) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java index 7578c8cda7..afdb3805ab 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java @@ -6,9 +6,9 @@ package net.sourceforge.pmd.lang.java.rule.bestpractices; import java.util.List; +import net.sourceforge.pmd.lang.java.ast.ASTAnyTypeDeclaration; import org.jaxen.JaxenException; -import net.sourceforge.pmd.lang.ast.AbstractNode; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression; import net.sourceforge.pmd.lang.java.ast.ASTArrayInitializer; @@ -46,7 +46,7 @@ public class MethodReturnsInternalArrayRule extends AbstractSunSecureRule { return data; } List<ASTReturnStatement> returns = method.findDescendantsOfType(ASTReturnStatement.class); - ASTClassOrInterfaceDeclaration td = method.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class); + ASTAnyTypeDeclaration td = method.getFirstParentOfType(ASTAnyTypeDeclaration.class); for (ASTReturnStatement ret : returns) { final String vn = getReturnedVariableName(ret); if (!isField(vn, td)) { @@ -111,7 +111,7 @@ public class MethodReturnsInternalArrayRule extends AbstractSunSecureRule { return false; } - private boolean isEmptyArray(String varName, AbstractNode typeDeclaration) { + private boolean isEmptyArray(String varName, ASTAnyTypeDeclaration typeDeclaration) { final List<ASTFieldDeclaration> fds = typeDeclaration.findDescendantsOfType(ASTFieldDeclaration.class); if (fds != null) { for (ASTFieldDeclaration fd : fds) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml index d53ded6b2d..4adaf5b87e 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml @@ -239,4 +239,31 @@ public class Outer { ]]></code> </test-code> + <test-code> + <description>#1845 Regression in MethodReturnsInternalArray not handling enums</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.util.Arrays; +public enum MethodReturnsInternalArrayCaseEnum { + ONE("One"), + TWO("Two", "Three"); + + private String[] titles; + + MethodReturnsInternalArrayCaseEnum(String... titles) { + this.titles = Arrays.copyOf(titles, titles.length); + } + + public String[] getTitles() { + return titles.clone(); + } + + @Override + public String toString() { + return titles[0]; + } +} + ]]></code> + </test-code> + </test-data> From 396bdeea908e3719c5d60c982e8d2b0a8f5ea221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 30 May 2019 14:59:25 +0200 Subject: [PATCH 156/371] Fix package privateism --- .../ast/ASTClassOrInterfaceDeclaration.java | 4 +++ .../ASTClassOrInterfaceDeclarationTest.java | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java index 9f1ed15a26..54abc1726f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclaration.java @@ -55,6 +55,10 @@ public class ASTClassOrInterfaceDeclaration extends AbstractAnyTypeDeclaration { return visitor.visit(this, data); } + @Override + public boolean isPackagePrivate() { + return super.isPackagePrivate() && !isLocal(); + } /** * Returns true if the class is declared inside a block other diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclarationTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclarationTest.java index 1781788e4b..44a24b7474 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclarationTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclarationTest.java @@ -29,6 +29,9 @@ public class ASTClassOrInterfaceDeclarationTest { private static final String LOCAL_CLASS_IN_INITIALIZER = "class Foo { { class Local {} } }"; + private static final String LOCAL_CLASS_WITH_MODIFIERS + = "class Foo { { abstract class Local {} } }"; + private static final String LOCAL_CHILDREN_ARE_NOT_ALWAYS_LOCAL = "class Foo { { class Local { class Nested {} void bar() {class Local2 {}}}}}"; @@ -53,6 +56,33 @@ public class ASTClassOrInterfaceDeclarationTest { } + + @Test + public void testLocalAbstractClass() { + List<ASTClassOrInterfaceDeclaration> classes = ParserTstUtil.getOrderedNodes(ASTClassOrInterfaceDeclaration.class, LOCAL_CLASS_WITH_MODIFIERS); + assertTrue(classes.size() == 2); + + assertFalse("Local class false-positive", classes.get(0).isLocal()); + assertTrue("Local class false-negative", classes.get(1).isLocal()); + assertTrue("Local class should preserve its modifiers", classes.get(1).isAbstract()); + } + + + + @Test + public void testLocalClassVisibility() { + List<ASTClassOrInterfaceDeclaration> classes = ParserTstUtil.getOrderedNodes(ASTClassOrInterfaceDeclaration.class, LOCAL_CLASS_WITH_MODIFIERS); + assertTrue(classes.size() == 2); + + assertFalse("Local class false-positive", classes.get(0).isLocal()); + assertTrue("Local class false-negative", classes.get(1).isLocal()); + assertFalse("Local class is not public", classes.get(1).isPublic()); + assertFalse("Local class is not private", classes.get(1).isPrivate()); + assertFalse("Local class is not protected", classes.get(1).isProtected()); + assertFalse("Local class is not package-private", classes.get(1).isPackagePrivate()); + } + + @Test public void testNestedClassIsNotLocal() { List<ASTClassOrInterfaceDeclaration> classes = ParserTstUtil.getOrderedNodes(ASTClassOrInterfaceDeclaration.class, NESTED_CLASS_IS_NOT_LOCAL); From 39921f40b4d7e7dec1da0ed8defdded6da65481d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 30 May 2019 15:06:50 +0200 Subject: [PATCH 157/371] Add to grammar changelog --- pmd-java/etc/grammar/Java.jjt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index e603105977..cb17af7950 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -1,4 +1,7 @@ /** + * Fix #1848 Local classes should preserve their modifiers + * Clément Fournier 05/2019 + *==================================================================== * Add support for Java 12 switch expressions and switch rules. * Andreas Dangel, Clément Fournier 03/2019 *==================================================================== From 0df9870ec47ca8e14b5f3934ba0f8f66655c663c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 30 May 2019 15:11:17 +0200 Subject: [PATCH 158/371] Add regression test for modifiers mixed with annotations --- .../ast/ASTClassOrInterfaceDeclarationTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclarationTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclarationTest.java index 44a24b7474..0390203714 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclarationTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceDeclarationTest.java @@ -32,6 +32,9 @@ public class ASTClassOrInterfaceDeclarationTest { private static final String LOCAL_CLASS_WITH_MODIFIERS = "class Foo { { abstract class Local {} } }"; + private static final String LOCAL_CLASS_WITH_MIXED_MODIFIER_ANNOTATIONS + = "class Foo { { final @F class Local {} } }"; + private static final String LOCAL_CHILDREN_ARE_NOT_ALWAYS_LOCAL = "class Foo { { class Local { class Nested {} void bar() {class Local2 {}}}}}"; @@ -68,6 +71,17 @@ public class ASTClassOrInterfaceDeclarationTest { } + @Test + public void testLocalClassWithMixedModifiers() { + List<ASTClassOrInterfaceDeclaration> classes = ParserTstUtil.getOrderedNodes(ASTClassOrInterfaceDeclaration.class, LOCAL_CLASS_WITH_MIXED_MODIFIER_ANNOTATIONS); + assertTrue(classes.size() == 2); + + assertFalse("Local class false-positive", classes.get(0).isLocal()); + assertTrue("Local class false-negative", classes.get(1).isLocal()); + assertTrue("Local class should preserve its modifiers", classes.get(1).isFinal()); + } + + @Test public void testLocalClassVisibility() { From 94afed80dfc12898b14bb144feff0a48358fc020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 30 May 2019 15:48:55 +0200 Subject: [PATCH 159/371] Fix ambiguity with switch --- pmd-java/etc/grammar/Java.jjt | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index cb17af7950..6e7ac5c3fa 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -445,6 +445,17 @@ public class JavaParser { return getToken(1).kind == IDENTIFIER && getToken(1).image.equals(keyword); } + private boolean shouldStartStatementInSwitch() { + switch (getToken(1).kind) { + case _DEFAULT: + case CASE: + case RBRACE: + return false; + default: + return true; + } + } + public Map<Integer, String> getSuppressMap() { return token_source.getSuppressMap(); } @@ -2440,6 +2451,10 @@ void LocalClassDecl() #void: // anywhere else in this grammar (and indeed the production Modifiers // accepts any modifier explicitly for the purpose of forgiving modifier errors, // and reporting them later if needed --see its documentation). + + // In particular, it unfortunately allows local class declarations to start + // with a "default" modifier, which introduces an ambiguity with default + // switch labels. This is guarded by a custom lookahead around SwitchLabel mods=Modifiers() ClassOrInterfaceDeclaration(mods) } @@ -2495,7 +2510,11 @@ void SwitchBlock() #void : ( "->" SwitchLabeledRulePart() (SwitchLabeledRule())* | - ":" (LOOKAHEAD(2) SwitchLabel() ":")* (BlockStatement())* (SwitchLabeledStatementGroup())* + ":" (LOOKAHEAD(2) SwitchLabel() ":")* + // the lookahead is to prevent choosing BlockStatement when the token is "default", + // which could happen as local class declarations accept the "default" modifier. + (LOOKAHEAD({shouldStartStatementInSwitch()}) BlockStatement())* + (SwitchLabeledStatementGroup())* ) )? "}" @@ -2523,7 +2542,10 @@ void SwitchLabeledRulePart() #void: void SwitchLabeledStatementGroup() #void: {} { - (LOOKAHEAD(2) SwitchLabel() ":")+ ( BlockStatement() )* + (LOOKAHEAD(2) SwitchLabel() ":")+ + // the lookahead is to prevent choosing BlockStatement when the token is "default", + // which could happen as local class declarations accept the "default" modifier. + (LOOKAHEAD({shouldStartStatementInSwitch()}) BlockStatement() )* } void SwitchLabel() : From 10b39e42662c1644d82771f4ce7d25adbeec2845 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 30 May 2019 11:13:05 +0200 Subject: [PATCH 160/371] Add test case for INSERT INTO with RETURNING --- .../lang/plsql/ast/InsertIntoClauseTest.java | 32 +++++++++++++++++++ .../pmd/lang/plsql/ast/InsertIntoClause.pls | 29 +++++++++++++++++ .../plsql/ast/InsertIntoClauseReturning.pls | 14 ++++++++ 3 files changed, 75 insertions(+) create mode 100644 pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseTest.java create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseReturning.pls diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseTest.java new file mode 100644 index 0000000000..e98bf0e5bd --- /dev/null +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseTest.java @@ -0,0 +1,32 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.plsql.ast; + +import java.nio.charset.StandardCharsets; + +import org.apache.commons.io.IOUtils; +import org.junit.Assert; +import org.junit.Test; + +import net.sourceforge.pmd.lang.plsql.AbstractPLSQLParserTst; + +public class InsertIntoClauseTest extends AbstractPLSQLParserTst { + + @Test + public void parseInsertInto() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("InsertIntoClause.pls"), + StandardCharsets.UTF_8); + ASTInput input = parsePLSQL(code); + Assert.assertNotNull(input); + } + + @Test + public void parseInsertIntoReturning() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("InsertIntoClauseReturning.pls"), + StandardCharsets.UTF_8); + ASTInput input = parsePLSQL(code); + Assert.assertNotNull(input); + } +} diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls new file mode 100644 index 0000000000..66c6e94b06 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls @@ -0,0 +1,29 @@ +-- +-- See https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/INSERT.html#GUID-903F8043-0254-4EE9-ACC1-CB8AC0AF3423 +-- +BEGIN + +INSERT INTO departments + VALUES (280, 'Recreation', 121, 1700); + +INSERT INTO departments + VALUES (280, 'Recreation', DEFAULT, 1700); + +INSERT INTO employees (employee_id, last_name, email, + hire_date, job_id, salary, commission_pct) + VALUES (207, 'Gregory', 'pgregory@example.com', + sysdate, 'PU_CLERK', 1.2E3, NULL); + +INSERT INTO + (SELECT employee_id, last_name, email, hire_date, job_id, + salary, commission_pct FROM employees) + VALUES (207, 'Gregory', 'pgregory@example.com', + sysdate, 'PU_CLERK', 1.2E3, NULL); + +INSERT INTO bonuses + SELECT employee_id, salary*1.1 + FROM employees + WHERE commission_pct > 0.25; + +END; +/ diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseReturning.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseReturning.pls new file mode 100644 index 0000000000..5ded5b9572 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseReturning.pls @@ -0,0 +1,14 @@ +-- +-- See https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/INSERT.html#GUID-903F8043-0254-4EE9-ACC1-CB8AC0AF3423 +-- +BEGIN + +INSERT INTO employees + (employee_id, last_name, email, hire_date, job_id, salary) + VALUES + (employees_seq.nextval, 'Doe', 'john.doe@example.com', + SYSDATE, 'SH_CLERK', 2400) + RETURNING salary*12, job_id INTO :bnd1, :bnd2; + +END; +/ From 9e453de89c35dc411d6802f0c3741d8eb535c20d Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 30 May 2019 21:37:13 +0200 Subject: [PATCH 161/371] Add test cases for implicit cursor attributes BULK_ROWCOUNT and BULK_EXCEPTIONS --- .../lang/plsql/ast/CursorAttributesTest.java | 7 +++ .../pmd/lang/plsql/ast/CursorAttributes.pls | 24 ++++++++ .../ast/CursorAttributesBulkExceptions.pls | 55 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CursorAttributesBulkExceptions.pls diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CursorAttributesTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CursorAttributesTest.java index 4e4dc6ea60..a7e232484b 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CursorAttributesTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CursorAttributesTest.java @@ -19,4 +19,11 @@ public class CursorAttributesTest extends AbstractPLSQLParserTst { Assert.assertEquals("TestSearch%notfound", exp.getImage()); } + @Test + public void parseImplicitCursorAttributeBulkExceptions() { + String code = loadTestResource("CursorAttributesBulkExceptions.pls"); + ASTInput input = parsePLSQL(code); + Assert.assertNotNull(input); + } + } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CursorAttributes.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CursorAttributes.pls index 79dec6cdca..aac0a01d2a 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CursorAttributes.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CursorAttributes.pls @@ -29,4 +29,28 @@ begin end testif; end lpe_test; +/ + +-- +-- Implicit cursor attributes +-- https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/implicit-cursor-attribute.html#GUID-5A938EE7-E8D2-468C-B60F-81898F110BE1 +-- Example from: https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/plsql-optimization-and-tuning.html#GUID-DDB5CCDA-8060-4511-BA20-4D1F2C478412 +-- + +DECLARE + TYPE NumList IS TABLE OF NUMBER; + depts NumList := NumList(30, 50, 60); +BEGIN + FORALL j IN depts.FIRST..depts.LAST + DELETE FROM emp_temp WHERE department_id = depts(j); + + FOR i IN depts.FIRST..depts.LAST LOOP + DBMS_OUTPUT.PUT_LINE ( + 'Statement #' || i || ' deleted ' || + SQL%BULK_ROWCOUNT(i) || ' rows.' + ); + END LOOP; + + DBMS_OUTPUT.PUT_LINE('Total rows deleted: ' || SQL%ROWCOUNT); +END; / \ No newline at end of file diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CursorAttributesBulkExceptions.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CursorAttributesBulkExceptions.pls new file mode 100644 index 0000000000..a87cbe1860 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CursorAttributesBulkExceptions.pls @@ -0,0 +1,55 @@ +-- +-- Implicit cursor attributes +-- https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/implicit-cursor-attribute.html#GUID-5A938EE7-E8D2-468C-B60F-81898F110BE1 +-- Example from: https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/plsql-optimization-and-tuning.html#GUID-DAF46F06-EF3F-4B1A-A518-5238B80C69FA +-- + +CREATE OR REPLACE PROCEDURE p AUTHID DEFINER AS + TYPE NumList IS TABLE OF NUMBER; + depts NumList := NumList(10, 20, 30); + + error_message VARCHAR2(100); + bad_stmt_no PLS_INTEGER; + bad_deptno emp_temp.deptno%TYPE; + bad_job emp_temp.job%TYPE; + + dml_errors EXCEPTION; + PRAGMA EXCEPTION_INIT(dml_errors, -24381); +BEGIN + -- Populate table: + + INSERT INTO emp_temp (deptno, job) VALUES (10, 'Clerk'); + INSERT INTO emp_temp (deptno, job) VALUES (20, 'Bookkeeper'); + INSERT INTO emp_temp (deptno, job) VALUES (30, 'Analyst'); + COMMIT; + + -- Append 9-character string to each job: + + FORALL j IN depts.FIRST..depts.LAST SAVE EXCEPTIONS + UPDATE emp_temp SET job = job || ' (Senior)' + WHERE deptno = depts(j); + +EXCEPTION + WHEN dml_errors THEN + FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP + error_message := SQLERRM(-(SQL%BULK_EXCEPTIONS(i).ERROR_CODE)); + DBMS_OUTPUT.PUT_LINE (error_message); + + bad_stmt_no := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX; + DBMS_OUTPUT.PUT_LINE('Bad statement #: ' || bad_stmt_no); + + bad_deptno := depts(bad_stmt_no); + DBMS_OUTPUT.PUT_LINE('Bad department #: ' || bad_deptno); + + SELECT job INTO bad_job FROM emp_temp WHERE deptno = bad_deptno; + + DBMS_OUTPUT.PUT_LINE('Bad job: ' || bad_job); + END LOOP; + + COMMIT; -- Commit results of successful updates + + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Unrecognized error.'); + RAISE; +END; +/ \ No newline at end of file From 01fe61906f7171ceef121ea419afeb3f0846e6a2 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 30 May 2019 21:54:33 +0200 Subject: [PATCH 162/371] Add test for TRIM expression without trim_character --- .../net/sourceforge/pmd/lang/plsql/ast/TrimFunction.pls | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/TrimFunction.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/TrimFunction.pls index 93679e1840..a2c0ca52cf 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/TrimFunction.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/TrimFunction.pls @@ -11,4 +11,9 @@ select max(cmp_id) from companies where trim(leading '0' from sap_number) = trim(leading '0' from v_sap_nr); +select max(cmp_id) + into v_cmp_id + from companies + where trim(sap_number) = trim(v_sap_nr); + END; From a7eacbb5615a5739eb150567659e2ff9c2ce2a04 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 30 May 2019 22:05:32 +0200 Subject: [PATCH 163/371] Add unit test for INSERT INTO with records --- .../lang/plsql/ast/InsertIntoClauseTest.java | 8 ++++++++ .../lang/plsql/ast/InsertIntoClauseRecord.pls | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseRecord.pls diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseTest.java index e98bf0e5bd..16b8614eef 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseTest.java @@ -29,4 +29,12 @@ public class InsertIntoClauseTest extends AbstractPLSQLParserTst { ASTInput input = parsePLSQL(code); Assert.assertNotNull(input); } + + @Test + public void parseInsertIntoWithRecord() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("InsertIntoClauseRecord.pls"), + StandardCharsets.UTF_8); + ASTInput input = parsePLSQL(code); + Assert.assertNotNull(input); + } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseRecord.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseRecord.pls new file mode 100644 index 0000000000..509b35c43a --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClauseRecord.pls @@ -0,0 +1,17 @@ +-- +-- https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/INSERT-statement-extension.html#GUID-D81224C4-06DE-4635-A850-41D29D4A8E1B +-- https://blogs.oracle.com/oraclemagazine/working-with-records +-- + +DECLARE + l_employee omag_employees%ROWTYPE; +BEGIN + l_employee.employee_id := 500; + l_employee.last_name := 'Mondrian'; + l_employee.salary := 2000; + + INSERT + INTO omag_employees + VALUES l_employee; +END; +/ From c651e92ca5ea761ed2e28e86f22fcb2b34c08021 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 30 May 2019 22:18:41 +0200 Subject: [PATCH 164/371] Fix plsql grammar --- pmd-plsql/etc/grammar/PldocAST.jjt | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 77e2a25fc0..cd13423293 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -27,6 +27,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** + * Various fixes for INSERT INTO with records, implicit cursor attributes + * and trim expression. + * + * Hugo Araya Nash 05/2019 + *==================================================================== * Added support for XMLTABLE, XMLEXISTS, XMLCAST, XMLQUERY, CAST, XMLFOREST * and XMLELEMENT * @@ -1536,6 +1541,7 @@ ASTSimpleExpression SimpleExpression() : ( "*" | Column() ) { sb.append(token.image); } | // Named Cursor: https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/named-cursor-attribute.html#GUID-CD8D8415-FF19-4D81-99BA-7825FD40CC96 + // Implicit Cursor: https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/implicit-cursor-attribute.html#GUID-5A938EE7-E8D2-468C-B60F-81898F110BE1 LOOKAHEAD(3) Column() { sb.append(token.image); } "%" ( LOOKAHEAD({isKeyword("isopen")}) KEYWORD("ISOPEN") | LOOKAHEAD({isKeyword("found")}) KEYWORD("FOUND") @@ -2284,7 +2290,12 @@ ASTInsertIntoClause InsertIntoClause() : ASTValuesClause ValuesClause() : {} { - <VALUES> [ "(" ( Expression() | <_DEFAULT> ) ( "," ( Expression() | <_DEFAULT> ) )* ")" | <IDENTIFIER> ] + <VALUES> + ( + "(" ( Expression() | <_DEFAULT> ) ( "," ( Expression() | <_DEFAULT> ) )* ")" + | + ID() // that's a record variable name + ) { return jjtThis; } } ASTMultiTableInsert MultiTableInsert() : @@ -2905,12 +2916,14 @@ ASTTrimExpression TrimExpression() : { PLSQLNode simpleNode = null; StringBuilder sb = new StringBuilder() ; } { ( - "(" { sb.append("(");} - [ [ ( <LEADING> | <TRAILING> | <BOTH> ) { sb.append(" "); sb.append(token.toString()); } ] - [ <CHARACTER_LITERAL> { sb.append(" "); sb.append(token.image); } ] - ( <FROM> ) { sb.append(token.image); } ] - simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } - ")" { sb.append(")");} + "(" { sb.append("(");} + [ LOOKAHEAD(2) + [ ( <LEADING> | <TRAILING> | <BOTH> ) { sb.append(" "); sb.append(token.toString()); } ] + [ simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } ] + ( <FROM> ) { sb.append(" ").append(token.image); } + ] + simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } + ")" { sb.append(")");} ) { jjtThis.setImage(sb.toString()); return jjtThis; From 7f619ebe1489830c38edef8003f4f3528d323548 Mon Sep 17 00:00:00 2001 From: "artem.krosheninnikov" <artem.krosheninnikov@team.wrike.com> Date: Fri, 31 May 2019 16:37:58 +0300 Subject: [PATCH 165/371] fix checkstyle violation --- .../java/rule/bestpractices/MethodReturnsInternalArrayRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java index afdb3805ab..1e3eb552b8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MethodReturnsInternalArrayRule.java @@ -6,11 +6,11 @@ package net.sourceforge.pmd.lang.java.rule.bestpractices; import java.util.List; -import net.sourceforge.pmd.lang.java.ast.ASTAnyTypeDeclaration; import org.jaxen.JaxenException; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression; +import net.sourceforge.pmd.lang.java.ast.ASTAnyTypeDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTArrayInitializer; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTExpression; From 8610dd5a895ff2aabd43f4777295cb6296fd8bb3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 31 May 2019 18:33:57 +0200 Subject: [PATCH 166/371] Update release notes, fixes #1850, refs #1808 --- docs/pages/release_notes.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..e98b263d8b 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,9 +16,14 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* plsql + * [#1850](https://github.com/pmd/pmd/issues/1850): \[plsql] Parsing errors with INSERT using returning or records and TRIM expression + ### API Changes ### External Contributions +* [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [kabroxiko](https://github.com/kabroxiko) + {% endtocmaker %} From 34853337a0c3e69a2e08d535a708641846e8fbc5 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 31 May 2019 19:28:06 +0200 Subject: [PATCH 167/371] Add test cases of #1703 for SingularField and UnusedPrivateField Co-Authored: jakivey32 --- .../bestpractices/xml/UnusedPrivateField.xml | 12 ++++++++++++ .../lang/java/rule/design/xml/SingularField.xml | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedPrivateField.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedPrivateField.xml index f5ff621713..00bf8a2157 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedPrivateField.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedPrivateField.xml @@ -620,6 +620,18 @@ public class IssueUnusedPrivateField { System.out.println("foo!"); } } +} + ]]></code> + </test-code> + + <test-code> + <description>#1703 UnusedPrivateField: False-positive with @Delegate</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import lombok.experimental.Delegate; + +public class Foo { + @Delegate private String bar; } ]]></code> </test-code> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml index 4caef8662a..a7e1737c8c 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml @@ -682,6 +682,22 @@ public class Source { o = new Object(); return o; } +} + ]]></code> + </test-code> + + <test-code> + <description>#1703 SingularField: False-positive with @Delegate</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import lombok.experimental.Delegate; + +public class Foo { + @Delegate private String bar; + + public void set(String s) { + bar = s; + } } ]]></code> </test-code> From a5780c637204add6ff3f44fb4d0e3cb7be1dedd5 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 31 May 2019 19:28:30 +0200 Subject: [PATCH 168/371] Fix lombok annotation lombok.experimental.Delegate --- .../sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java index 062da0f4bb..337ca82fb1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java @@ -41,7 +41,7 @@ public class AbstractLombokAwareRule extends AbstractIgnoredAnnotationRule { LOMBOK_ANNOTATIONS.add("lombok.AllArgsConstructor"); LOMBOK_ANNOTATIONS.add("lombok.NoArgsConstructor"); LOMBOK_ANNOTATIONS.add("lombok.Builder"); - LOMBOK_ANNOTATIONS.add("lombok.experimental"); + LOMBOK_ANNOTATIONS.add("lombok.experimental.Delegate"); } @Override From 6e1be2294ccd2549b623e49dd05aed4a502a90b1 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 31 May 2019 19:34:03 +0200 Subject: [PATCH 169/371] Update release notes, fixes #1703, refs #1792 --- docs/pages/release_notes.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..424f7b1a73 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,11 +14,26 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Modified Rules + +* The Java rule {% rule "java/bestpractices/UnusedPrivateField" %} (`java-bestpractices`) now ignores by + default fields, that are annotated with the Lombok experimental annotation `@Delegate`. This can be + customized with the property `ignoredAnnotations`. + +* The Java rule {% rule "java/design/SingularField" %} (`java-design`) now ignores by + default fields, that are annotated with the Lombok experimental annotation `@Delegate`. This can be + customized with the property `ignoredAnnotations`. + ### Fixed Issues +* java-bestpractices + * [#1703](https://github.com/pmd/pmd/issues/1703): \[java] UnusedPrivateField on member annotated with lombok @Delegate + ### API Changes ### External Contributions +* [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) + {% endtocmaker %} From 9758f3afb035deeb3ce54c6da65963f3ace5400a Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 31 May 2019 19:49:19 +0200 Subject: [PATCH 170/371] Move lombok annotations to UnusedPrivateFieldRule and SingularFieldRule Add additional test cases for ImmutableField and BeanMembersShouldSerialize --- .../lang/java/rule/AbstractLombokAwareRule.java | 1 - .../bestpractices/UnusedPrivateFieldRule.java | 1 + .../java/rule/design/SingularFieldRule.java | 10 ++++++++++ .../java/rule/design/xml/ImmutableField.xml | 17 +++++++++++++++++ .../xml/BeanMembersShouldSerialize.xml | 16 ++++++++++++++++ 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java index 337ca82fb1..e0f8fd5345 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java @@ -41,7 +41,6 @@ public class AbstractLombokAwareRule extends AbstractIgnoredAnnotationRule { LOMBOK_ANNOTATIONS.add("lombok.AllArgsConstructor"); LOMBOK_ANNOTATIONS.add("lombok.NoArgsConstructor"); LOMBOK_ANNOTATIONS.add("lombok.Builder"); - LOMBOK_ANNOTATIONS.add("lombok.experimental.Delegate"); } @Override diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedPrivateFieldRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedPrivateFieldRule.java index 394acd77a8..51cdbaf53e 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedPrivateFieldRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedPrivateFieldRule.java @@ -36,6 +36,7 @@ public class UnusedPrivateFieldRule extends AbstractLombokAwareRule { defaultValues.addAll(super.defaultSuppressionAnnotations()); defaultValues.add("java.lang.Deprecated"); defaultValues.add("javafx.fxml.FXML"); + defaultValues.add("lombok.experimental.Delegate"); return defaultValues; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SingularFieldRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SingularFieldRule.java index 69ccf0c6d8..48e096061d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SingularFieldRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/SingularFieldRule.java @@ -6,6 +6,8 @@ package net.sourceforge.pmd.lang.java.rule.design; import static net.sourceforge.pmd.properties.PropertyFactory.booleanProperty; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import net.sourceforge.pmd.lang.ast.Node; @@ -47,6 +49,14 @@ public class SingularFieldRule extends AbstractLombokAwareRule { definePropertyDescriptor(DISALLOW_NOT_ASSIGNMENT); } + @Override + protected Collection<String> defaultSuppressionAnnotations() { + Collection<String> defaultValues = new ArrayList<>(); + defaultValues.addAll(super.defaultSuppressionAnnotations()); + defaultValues.add("lombok.experimental.Delegate"); + return defaultValues; + } + @SuppressWarnings("PMD.CompareObjectsWithEquals") @Override public Object visit(ASTFieldDeclaration node, Object data) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ImmutableField.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ImmutableField.xml index 007376dc33..dfdad47f50 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ImmutableField.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ImmutableField.xml @@ -479,6 +479,23 @@ public class Foo { public Foo() { x = 2; } +} + ]]></code> + </test-code> + + <test-code> + <description>#1792 Immutable field should still be detected with @Delegate</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import lombok.experimental.Delegate; + +public class Foo { + @Delegate + private String x; + + public Foo() { + x = "bar"; + } } ]]></code> </test-code> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/BeanMembersShouldSerialize.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/BeanMembersShouldSerialize.xml index 983fca10cd..77e1de8734 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/BeanMembersShouldSerialize.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/BeanMembersShouldSerialize.xml @@ -263,6 +263,22 @@ public class Foo { @Data public class Foo { private String bar; +} + ]]></code> + </test-code> + <test-code> + <description>#1796 BeanMembersShouldSerialize should still report with @Delegate</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import lombok.experimental.Delegate; + +public class Foo { + @Delegate + private String bar; + + public String toString() { + return "Foo: " + bar; + } } ]]></code> </test-code> From 3227f7e6052cb874928dc9f348b64623941cd0ac Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 31 May 2019 20:35:12 +0200 Subject: [PATCH 171/371] [java] UseUtilityClass should be LombokAware Fixes #1094 --- .../java/rule/design/UseUtilityClassRule.java | 25 +++++++++++++------ .../java/rule/design/xml/UseUtilityClass.xml | 17 +++++++++++++ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UseUtilityClassRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UseUtilityClassRule.java index 6273d61bd0..4dd97f01da 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UseUtilityClassRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UseUtilityClassRule.java @@ -4,6 +4,8 @@ package net.sourceforge.pmd.lang.java.rule.design; +import java.util.Arrays; +import java.util.Collection; import java.util.List; import net.sourceforge.pmd.lang.ast.Node; @@ -17,12 +19,21 @@ import net.sourceforge.pmd.lang.java.ast.ASTMemberValuePair; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTName; import net.sourceforge.pmd.lang.java.ast.ASTResultType; -import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; +import net.sourceforge.pmd.lang.java.rule.AbstractLombokAwareRule; -public class UseUtilityClassRule extends AbstractJavaRule { +public class UseUtilityClassRule extends AbstractLombokAwareRule { - public UseUtilityClassRule() { - addRuleChainVisit(ASTClassOrInterfaceBody.class); + @Override + protected Collection<String> defaultSuppressionAnnotations() { + return Arrays.asList("lombok.experimental.UtilityClass"); + } + + @Override + public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { + if (hasIgnoredAnnotation(node)) { + return data; + } + return super.visit(node, data); } @Override @@ -33,7 +44,7 @@ public class UseUtilityClassRule extends AbstractJavaRule { return data; } - if (isOkUsingLombok(parent)) { + if (hasLombokNoArgsConstructor(parent)) { return data; } @@ -81,10 +92,10 @@ public class UseUtilityClassRule extends AbstractJavaRule { addViolation(data, decl); } } - return data; + return super.visit(decl, data); } - private boolean isOkUsingLombok(ASTClassOrInterfaceDeclaration parent) { + private boolean hasLombokNoArgsConstructor(ASTClassOrInterfaceDeclaration parent) { // check if there's a lombok no arg private constructor, if so skip the rest of the rules ASTAnnotation annotation = parent.getAnnotation("lombok.NoArgsConstructor"); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UseUtilityClass.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UseUtilityClass.xml index 2540573f5e..498ffe9d3f 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UseUtilityClass.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UseUtilityClass.xml @@ -360,4 +360,21 @@ public class FooLocal extends ThreadLocal<Integer> { } ]]></code> </test-code> + + <test-code> + <description>#1094 [java] UseUtilityClass should be LombokAware</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import lombok.experimental.UtilityClass; + +@UtilityClass +public class MyUtil { + private final static int CONSTANT = 5; + + public static int addSomething(int in) { + return in + CONSTANT; + } +} + ]]></code> + </test-code> </test-data> From a115daefe09f81a6b47a18c8cfca0289c9494fb6 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 31 May 2019 20:38:57 +0200 Subject: [PATCH 172/371] Update release notes, fixes #1094 --- docs/pages/release_notes.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..e55b9067e1 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,8 +14,16 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Modified Rules + +* The Java rule {% rule "java/design/UseUtilityClass" %} (`java-design`) has a new property `ignoredAnnotations`. + By default, classes that are annotated with Lombok's `@UtilityClass` are ignored now. + ### Fixed Issues +* java-design + * [#1094](https://github.com/pmd/pmd/issues/1094): \[java] UseUtilityClass should be LombokAware + ### API Changes ### External Contributions From 8492c322737c4148ab37a76b1f562a58d9171a36 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 1 Jun 2019 10:04:33 +0200 Subject: [PATCH 173/371] UseUtilityClass - fix false-negatives with inner classes --- .../java/rule/design/UseUtilityClassRule.java | 8 +-- .../java/rule/design/xml/UseUtilityClass.xml | 52 +++++++++++++++++++ 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UseUtilityClassRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UseUtilityClassRule.java index 4dd97f01da..a3fa7780bc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UseUtilityClassRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UseUtilityClassRule.java @@ -38,14 +38,16 @@ public class UseUtilityClassRule extends AbstractLombokAwareRule { @Override public Object visit(ASTClassOrInterfaceBody decl, Object data) { + Object result = super.visit(decl, data); + if (decl.jjtGetParent() instanceof ASTClassOrInterfaceDeclaration) { ASTClassOrInterfaceDeclaration parent = (ASTClassOrInterfaceDeclaration) decl.jjtGetParent(); if (parent.isAbstract() || parent.isInterface() || parent.getSuperClassTypeNode() != null) { - return data; + return result; } if (hasLombokNoArgsConstructor(parent)) { - return data; + return result; } int i = decl.jjtGetNumChildren(); @@ -92,7 +94,7 @@ public class UseUtilityClassRule extends AbstractLombokAwareRule { addViolation(data, decl); } } - return super.visit(decl, data); + return result; } private boolean hasLombokNoArgsConstructor(ASTClassOrInterfaceDeclaration parent) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UseUtilityClass.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UseUtilityClass.xml index 498ffe9d3f..a57f064085 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UseUtilityClass.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UseUtilityClass.xml @@ -374,6 +374,58 @@ public class MyUtil { public static int addSomething(int in) { return in + CONSTANT; } +} + ]]></code> + </test-code> + + <test-code> + <description>Inner class in abstract class false-negative</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public abstract class Outer { + private static class Inner { + public static int getInt() { return 42; } + } +} + ]]></code> + </test-code> + + <test-code> + <description>Inner class in abstract class false-negative</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public abstract class Outer { + private static class Inner { + private static int answer; + public static int getInt() { return answer; } + } +} + ]]></code> + </test-code> + + + <test-code> + <description>Inner class in interface false-negative</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public interface Outer { + private static class Inner { + public static int getInt() { return 42; } + } +} + ]]></code> + </test-code> + + <test-code> + <description>Inner class in sub-class false-negative</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class Outer extends Object { + private static class Inner { + public static boolean isYes(int a) { + return a != 0; + } + } } ]]></code> </test-code> From f1f20b97f2f2f844e2a7bcc2b69c400f30809784 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 1 Jun 2019 10:31:20 +0200 Subject: [PATCH 174/371] [java] UnsynchronizedStatic(Date)Formatter - test cases, documentation * Fixes #1814 * Fixes #1815 --- .../UnsynchronizedStaticFormatterRule.java | 16 +++-- .../category/java/multithreading.xml | 16 +++-- .../xml/UnsynchronizedStaticDateFormatter.xml | 55 +++++++++++++++++- .../xml/UnsynchronizedStaticFormatter.xml | 58 +++++++++++++++++-- 4 files changed, 127 insertions(+), 18 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java index 638f3ab975..0378082ab9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java @@ -10,8 +10,9 @@ import java.util.List; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; +import net.sourceforge.pmd.lang.java.ast.ASTExpression; import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration; -import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTName; import net.sourceforge.pmd.lang.java.ast.ASTSynchronizedStatement; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; @@ -68,10 +69,17 @@ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { continue; } - ASTMethodDeclaration method = n.getFirstParentOfType(ASTMethodDeclaration.class); - if (method != null && (!method.isSynchronized() || !method.isStatic())) { - addViolation(data, n); + ASTSynchronizedStatement syncStatement = n.getFirstParentOfType(ASTSynchronizedStatement.class); + if (syncStatement != null) { + ASTExpression expression = syncStatement.getFirstChildOfType(ASTExpression.class); + if (expression != null) { + ASTName name = expression.getFirstDescendantOfType(ASTName.class); + if (name != null && name.hasImageEqualTo(var.getVariableName())) { + continue; + } + } } + addViolation(data, n); } return data; } diff --git a/pmd-java/src/main/resources/category/java/multithreading.xml b/pmd-java/src/main/resources/category/java/multithreading.xml index 8ca9046a6a..95460df02a 100644 --- a/pmd-java/src/main/resources/category/java/multithreading.xml +++ b/pmd-java/src/main/resources/category/java/multithreading.xml @@ -266,7 +266,7 @@ public static Foo getFoo() { <description> SimpleDateFormat instances are not synchronized. Sun recommends using separate format instances for each thread. If multiple threads must access a static formatter, the formatter must be -synchronized either on method or block level. +synchronized on block level. This rule has been deprecated in favor of the rule {% rule UnsynchronizedStaticFormatter %}. </description> @@ -278,8 +278,10 @@ public class Foo { void bar() { sdf.format(); // poor, no thread-safety } - synchronized void foo() { - sdf.format(); // preferred + void foo() { + synchronized (sdf) { // preferred + sdf.format(); + } } } ]]> @@ -295,7 +297,7 @@ public class Foo { Instances of `java.text.Format` are generally not synchronized. Sun recommends using separate format instances for each thread. If multiple threads must access a static formatter, the formatter must be -synchronized either on method or block level. +synchronized on block level. </description> <priority>3</priority> <example> @@ -305,8 +307,10 @@ public class Foo { void bar() { sdf.format(); // poor, no thread-safety } - synchronized void foo() { - sdf.format(); // preferred + void foo() { + synchronized (sdf) { // preferred + sdf.format(); + } } } ]]> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticDateFormatter.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticDateFormatter.xml index dce41430c7..98ccfcd6de 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticDateFormatter.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticDateFormatter.xml @@ -31,7 +31,7 @@ public class Foo { ]]></code> </test-code> <test-code> - <description>3, Instace synchronized, Not OK</description> + <description>3, Instance synchronized, Not OK - see #1815</description> <expected-problems>1</expected-problems> <code><![CDATA[ import java.text.SimpleDateFormat; @@ -71,6 +71,22 @@ public class Foo { synchronized void bar() { sdf.format(); } +} + ]]></code> + </test-code> + <test-code> + <description>5a, Use DateFormat with synchronized block, ok</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.text.DateFormat; + +public class Foo { + private static final DateFormat sdf = new DateFormat(); + void bar() { + synchronized(sdf) { + sdf.format(); + } + } } ]]></code> </test-code> @@ -105,6 +121,37 @@ public class Test { } ]]></code> </test-code> + + <test-code> + <description>#1815 static synchronized, Not OK</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + synchronized void bar() { // not static + sdf.format(); + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1815 static synchronized, also Not OK</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + static synchronized void bar() { // not a synchronized blocks + sdf.format(); + } +} + ]]></code> + </test-code> + <test-code> <description>#1815 static synchronized, OK</description> <expected-problems>0</expected-problems> @@ -113,8 +160,10 @@ import java.text.SimpleDateFormat; public class Foo { private static final SimpleDateFormat sdf = new SimpleDateFormat(); - static synchronized void bar() { - sdf.format(); + static void bar() { + synchronized(sdf) { + sdf.format(); + } } } ]]></code> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml index c46600a570..d52abc9836 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml @@ -31,7 +31,7 @@ public class Foo { ]]></code> </test-code> <test-code> - <description>3, Inside synchronized, OK</description> + <description>3, Inside synchronized, Not OK</description> <expected-problems>1</expected-problems> <code><![CDATA[ import java.text.SimpleDateFormat; @@ -61,7 +61,7 @@ public class Foo { ]]></code> </test-code> <test-code> - <description>5, Use DateFormat, ok</description> + <description>5, Use DateFormat, not ok</description> <expected-problems>1</expected-problems> <code><![CDATA[ import java.text.DateFormat; @@ -71,6 +71,22 @@ public class Foo { synchronized void bar() { sdf.format(); } +} + ]]></code> + </test-code> + <test-code> + <description>5a, Use DateFormat, ok</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.text.DateFormat; + +public class Foo { + private static final DateFormat sdf = new DateFormat(); + void bar() { + synchronized(sdf) { + sdf.format(); + } + } } ]]></code> </test-code> @@ -149,6 +165,37 @@ public class Foo { } ]]></code> </test-code> + + <test-code> + <description>#1815 static synchronized, Not OK</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + synchronized void bar() { // not static + sdf.format(); + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1815 static synchronized, also Not OK</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + static synchronized void bar() { // not a synchronized blocks + sdf.format(); + } +} + ]]></code> + </test-code> + <test-code> <description>#1815 static synchronized, OK</description> <expected-problems>0</expected-problems> @@ -157,11 +204,12 @@ import java.text.SimpleDateFormat; public class Foo { private static final SimpleDateFormat sdf = new SimpleDateFormat(); - static synchronized void bar() { - sdf.format(); + static void bar() { + synchronized(sdf) { + sdf.format(); + } } } ]]></code> </test-code> - </test-data> From 0c219e2a59ff888b7d0b32240b6090cd916cebf4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 1 Jun 2019 10:53:40 +0200 Subject: [PATCH 175/371] [java] UnsynchronizedStatic(Date)Formatter - new property allowMethodLevelSynchronization This new property is added to allow backwards compatibility, since the rule now allows by default only synchronized blocks. --- .../UnsynchronizedStaticFormatterRule.java | 22 +++++++-- .../xml/UnsynchronizedStaticFormatter.xml | 49 +++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java index 0378082ab9..4ea482bf6f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java @@ -12,12 +12,15 @@ import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; import net.sourceforge.pmd.lang.java.ast.ASTExpression; import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTName; import net.sourceforge.pmd.lang.java.ast.ASTSynchronizedStatement; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; import net.sourceforge.pmd.lang.java.typeresolution.TypeHelper; import net.sourceforge.pmd.lang.symboltable.NameOccurrence; +import net.sourceforge.pmd.properties.PropertyDescriptor; +import net.sourceforge.pmd.properties.PropertyFactory; /** * Using a Formatter (e.g. SimpleDateFormatter, DecimalFormatter) which is static can cause @@ -34,8 +37,16 @@ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { "org.apache.commons.lang3.time.FastDateFormat" ); + private static final PropertyDescriptor<Boolean> ALLOW_METHOD_LEVEL_SYNC = + PropertyFactory.booleanProperty("allowMethodLevelSynchronization") + .desc("If true, method level synchronization is allowed as well as synchronized block. Otherwise" + + " only synchronized blocks are allowed.") + .defaultValue(false) + .build(); + public UnsynchronizedStaticFormatterRule() { addRuleChainVisit(ASTFieldDeclaration.class); + definePropertyDescriptor(ALLOW_METHOD_LEVEL_SYNC); } UnsynchronizedStaticFormatterRule(Class<?> formatterClassToCheck) { @@ -61,14 +72,19 @@ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { } for (NameOccurrence occ : var.getUsages()) { Node n = occ.getLocation(); - if (n.getFirstParentOfType(ASTSynchronizedStatement.class) != null) { - continue; - } // ignore usages, that don't call a method. if (!n.getImage().contains(".")) { continue; } + if (getProperty(ALLOW_METHOD_LEVEL_SYNC)) { + ASTMethodDeclaration method = n.getFirstParentOfType(ASTMethodDeclaration.class); + if (method != null && (!method.isSynchronized() || !method.isStatic())) { + addViolation(data, node); + } + continue; + } + ASTSynchronizedStatement syncStatement = n.getFirstParentOfType(ASTSynchronizedStatement.class); if (syncStatement != null) { ASTExpression expression = syncStatement.getFirstChildOfType(ASTExpression.class); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml index d52abc9836..a97fa56f96 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml @@ -196,6 +196,38 @@ public class Foo { ]]></code> </test-code> + <test-code> + <description>#1815 static synchronized, OK if allowMethodLevelSynchronization</description> + <rule-property name="allowMethodLevelSynchronization">true</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + static synchronized void bar() { + sdf.format(); + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1815 static synchronized, Not OK if allowMethodLevelSynchronization</description> + <rule-property name="allowMethodLevelSynchronization">true</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + synchronized void bar() { // should be static + sdf.format(); + } +} + ]]></code> + </test-code> + <test-code> <description>#1815 static synchronized, OK</description> <expected-problems>0</expected-problems> @@ -209,6 +241,23 @@ public class Foo { sdf.format(); } } +} + ]]></code> + </test-code> + + <test-code> + <description>#1815 static synchronized, Not OK</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + static void bar() { + synchronized(Foo.class) { // not synchronized on sdf + sdf.format(); + } + } } ]]></code> </test-code> From ad1e7d2022efbed69d6acda48268f6f04b8ef05c Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 1 Jun 2019 11:06:37 +0200 Subject: [PATCH 176/371] Update release notes, refs #1829, fixes #1814, fixes #1815 --- docs/pages/release_notes.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..06088b1bff 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,11 +14,25 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Modified Rules + +* The Java rules {% rule "java/multithreading/UnsynchronizedStaticFormatter" %} and + {% rule "java/multithreading/UnsynchronizedStaticDateFormatter" %} (`java-multithreading`) + now prefer synchronized blocks by default. They will raise a violation, if the synchronization is implemented + on the method level. To allow the old behavior, the new property `allowMethodLevelSynchronization` can + be enabled. + ### Fixed Issues +* java-multithreading + * [#1814](https://github.com/pmd/pmd/issues/1814): \[java] UnsynchronizedStaticFormatter documentation and implementation wrong + * [#1815](https://github.com/pmd/pmd/issues/1815): \[java] False negative in UnsynchronizedStaticFormatter + ### API Changes ### External Contributions +* [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) + {% endtocmaker %} From 2d60e2b8225859958541e21ffd2bc39f095f8a8a Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 1 Jun 2019 19:15:50 +0200 Subject: [PATCH 177/371] Remove more unnecessary comments from javacc --- .../pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java | 5 ----- .../pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java | 3 --- .../pmd/lang/java/ast/ASTClassOrInterfaceBody.java | 3 --- .../sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java | 5 ----- .../sourceforge/pmd/lang/java/ast/ASTMethodReference.java | 5 ----- .../sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java | 2 -- .../sourceforge/pmd/lang/java/ast/ASTModuleDirective.java | 5 ----- .../net/sourceforge/pmd/lang/java/ast/ASTModuleName.java | 5 ----- .../java/net/sourceforge/pmd/lang/java/ast/ASTResource.java | 5 ----- .../pmd/lang/java/ast/ASTResourceSpecification.java | 5 ----- .../java/net/sourceforge/pmd/lang/java/ast/ASTResources.java | 5 ----- .../sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java | 1 - 12 files changed, 49 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java index e86b9d7eb9..56647648df 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationMethodDeclaration.java @@ -20,7 +20,6 @@ public class ASTAnnotationMethodDeclaration extends AbstractMethodLikeNode { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); @@ -32,7 +31,3 @@ public class ASTAnnotationMethodDeclaration extends AbstractMethodLikeNode { return MethodLikeKind.METHOD; } } -/* - * JavaCC - OriginalChecksum=f6dd440446f8aa5c9c191ae760080ee0 (do not edit this - * line) - */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java index 2aa5673e3f..0eb92dbf71 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTAnnotationTypeDeclaration.java @@ -23,9 +23,6 @@ public class ASTAnnotationTypeDeclaration extends AbstractAnyTypeDeclaration { super(p, id); } - /** - * Accept the visitor. - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java index 308d2d9faa..9a25793a7e 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTClassOrInterfaceBody.java @@ -30,9 +30,6 @@ public class ASTClassOrInterfaceBody extends AbstractJavaNode { super(p, id); } - /** - * Accept the visitor. - */ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java index 4e0376a8cd..3fff74dd29 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLambdaExpression.java @@ -28,7 +28,6 @@ public class ASTLambdaExpression extends AbstractMethodLikeNode { } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); @@ -39,7 +38,3 @@ public class ASTLambdaExpression extends AbstractMethodLikeNode { return MethodLikeKind.LAMBDA; } } -/* - * JavaCC - OriginalChecksum=e706de031abe9a22c368b7cb52802f1b (do not edit this - * line) - */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java index a9f67e1734..d3fd260b2a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.java @@ -20,13 +20,8 @@ public class ASTMethodReference extends AbstractJavaNode { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } } -/* - * JavaCC - OriginalChecksum=e706de031abe9a22c368b7cb52802f1b (do not edit this - * line) - */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java index 420d6ed23b..adcf280ea2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDeclaration.java @@ -22,7 +22,6 @@ public class ASTModuleDeclaration extends AbstractJavaNode { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); @@ -38,4 +37,3 @@ public class ASTModuleDeclaration extends AbstractJavaNode { return open; } } -/* JavaCC - OriginalChecksum=752bbec72a6d0d96c4c69a2d08c73614 (do not edit this line) */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java index 39ec23b808..5f6e3c4dec 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleDirective.java @@ -32,7 +32,6 @@ public class ASTModuleDirective extends AbstractJavaNode { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); @@ -58,7 +57,3 @@ public class ASTModuleDirective extends AbstractJavaNode { return requiresModifier == null ? null : requiresModifier.name(); } } -/* - * JavaCC - OriginalChecksum=93c74930e5df0269e81ce18b4efa6378 (do not edit this - * line) - */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java index bc9eea6143..8d52190862 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTModuleName.java @@ -20,13 +20,8 @@ public class ASTModuleName extends AbstractJavaNode { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } } -/* - * JavaCC - OriginalChecksum=7be9235079394543d4574d840ebb5235 (do not edit this - * line) - */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java index 6449b0087b..f6ce7781cb 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java @@ -20,7 +20,6 @@ public class ASTResource extends ASTFormalParameter { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); @@ -29,7 +28,3 @@ public class ASTResource extends ASTFormalParameter { // TODO Should we deprecate all methods from ASTFormalParameter? } -/* - * JavaCC - OriginalChecksum=92734fc70bba91fd9422150dbf87d5c4 (do not edit this - * line) - */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java index c17b5c9328..fef9645c20 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResourceSpecification.java @@ -20,13 +20,8 @@ public class ASTResourceSpecification extends AbstractJavaNode { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } } -/* - * JavaCC - OriginalChecksum=d495bcf34ff0f86f77e48f66b9c52e4d (do not edit this - * line) - */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java index 75a624c863..2d7e7f6ebc 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResources.java @@ -20,13 +20,8 @@ public class ASTResources extends AbstractJavaNode { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } } -/* - * JavaCC - OriginalChecksum=e83b6cb79b9c5c88242c7dca5255e114 (do not edit this - * line) - */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java index 44e451ccfd..f8a577a783 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchExpression.java @@ -25,4 +25,3 @@ public class ASTSwitchExpression extends AbstractJavaTypeNode { return visitor.visit(this, data); } } -/* JavaCC - OriginalChecksum=8b1747ca53f66203ee212a3699a9a2f3 (do not edit this line) */ From fe420562a1ee576bd200ec63ca4458c515472150 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 1 Jun 2019 19:16:37 +0200 Subject: [PATCH 178/371] More deprecations of node setters and constructors --- docs/pages/release_notes.md | 2 +- .../pmd/lang/java/ast/AbstractJavaAccessNode.java | 4 ++++ .../pmd/lang/java/ast/AbstractJavaAccessTypeNode.java | 6 ++++++ .../sourceforge/pmd/lang/java/ast/AbstractJavaNode.java | 8 ++++++++ .../pmd/lang/java/ast/AbstractJavaTypeNode.java | 4 ++++ .../net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java | 4 ++++ .../java/net/sourceforge/pmd/lang/java/ast/JavaNode.java | 3 +++ 7 files changed, 30 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 646ac3cadb..0b38612d6c 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -32,7 +32,7 @@ The following usages are now deprecated **in the Java AST** (with other language * Manual instantiation of nodes. **Constructors of node classes are deprecated** and marked {% jdoc core::annotation.InternalApi %}. Nodes should only be obtained from the parser, which for rules, means that never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. * **Subclassing of abstract node classes, or usage of their type**. Version 7.0.0 will bring a new set of abstractions that will be public API, but the base classes are and will stay internal. You should not couple your code to them. * In the meantime you should use interfaces like {% jdoc java::lang.java.ast.JavaNode %} or {% jdoc core::lang.ast.Node %}, or the other published interfaces in this package, to refer to nodes generically. - * Concrete node classes will also most probably **be made final** with 7.0.0. + * Concrete node classes will **be made final** with 7.0.0. * Setters found in any node class or interface. **Rules should consider the AST immutable**. We will make those setters package private with 7.0.0. Please look at {% jdoc_package java::lang.java.ast %} to find out the full list diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java index 1966eefed0..5ca6472b45 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessNode.java @@ -12,10 +12,14 @@ public abstract class AbstractJavaAccessNode extends AbstractJavaAnnotatableNode private int modifiers; + @Deprecated + @InternalApi public AbstractJavaAccessNode(int i) { super(i); } + @Deprecated + @InternalApi public AbstractJavaAccessNode(JavaParser parser, int i) { super(parser, i); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java index 35a7d04cc8..137d203cb0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaAccessTypeNode.java @@ -16,10 +16,14 @@ public abstract class AbstractJavaAccessTypeNode extends AbstractJavaAccessNode */ protected JavaTypeDefinition typeDefinition; + @Deprecated + @InternalApi public AbstractJavaAccessTypeNode(int i) { super(i); } + @Deprecated + @InternalApi public AbstractJavaAccessTypeNode(JavaParser parser, int i) { super(parser, i); } @@ -33,6 +37,8 @@ public abstract class AbstractJavaAccessTypeNode extends AbstractJavaAccessNode return null; } + @InternalApi + @Deprecated @Override public void setType(Class<?> type) { typeDefinition = JavaTypeDefinition.forClass(type); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java index 497b9769e5..1804cf9e15 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java @@ -16,10 +16,14 @@ public abstract class AbstractJavaNode extends AbstractNode implements JavaNode private Scope scope; private Comment comment; + @InternalApi + @Deprecated public AbstractJavaNode(int id) { super(id); } + @InternalApi + @Deprecated public AbstractJavaNode(JavaParser parser, int id) { super(id); this.parser = parser; @@ -68,11 +72,15 @@ public abstract class AbstractJavaNode extends AbstractNode implements JavaNode return scope; } + @InternalApi + @Deprecated @Override public void setScope(Scope scope) { this.scope = scope; } + @InternalApi + @Deprecated public void comment(Comment theComment) { comment = theComment; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java index e908e0f636..78d973ad76 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaTypeNode.java @@ -19,10 +19,14 @@ public abstract class AbstractJavaTypeNode extends AbstractJavaNode implements T private JavaTypeDefinition typeDefinition; + @InternalApi + @Deprecated public AbstractJavaTypeNode(int i) { super(i); } + @InternalApi + @Deprecated public AbstractJavaTypeNode(JavaParser p, int i) { super(p, i); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java index 6b8daa0a94..9dba937df5 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DummyJavaNode.java @@ -14,10 +14,14 @@ import net.sourceforge.pmd.annotation.InternalApi; @InternalApi public class DummyJavaNode extends AbstractJavaNode { + @InternalApi + @Deprecated public DummyJavaNode(int id) { super(id); } + @InternalApi + @Deprecated public DummyJavaNode(JavaParser parser, int id) { super(parser, id); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java index ff75d6de85..59ba6c3f4a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavaNode.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.ast; +import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.symboltable.Scope; import net.sourceforge.pmd.lang.symboltable.ScopedNode; @@ -37,6 +38,8 @@ public interface JavaNode extends ScopedNode { Object childrenAccept(JavaParserVisitor visitor, Object data); + @InternalApi + @Deprecated void setScope(Scope scope); } From df53fddef93bd53b9b6083c8cf4c0fa98d40a490 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 1 Jun 2019 19:41:14 +0200 Subject: [PATCH 179/371] Update release notes, fixes #1848 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..d80c12cf5d 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* java + * [#1848](https://github.com/pmd/pmd/issues/1848): \[java] Local classes should preserve their modifiers + ### API Changes ### External Contributions From 348a9972e6024b77678c5ea69d7d8dade10efb71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Sun, 2 Jun 2019 09:26:13 +0200 Subject: [PATCH 180/371] Fix #1853 false positive in NonStaticInitializer --- .../resources/category/java/errorprone.xml | 3 +- .../errorprone/xml/NonStaticInitializer.xml | 67 ++++++++++++++++--- 2 files changed, 61 insertions(+), 9 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 7e59da309f..19e5edc60a 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -2505,10 +2505,11 @@ confusing. </description> <priority>3</priority> <properties> + <property name="version" value="2.0" /> <property name="xpath"> <value> <![CDATA[ -//Initializer[@Static='false'] +//Initializer[@Static=false()][not(ancestor::*[3][self::AllocationExpression or self::EnumConstant])] ]]> </value> </property> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonStaticInitializer.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonStaticInitializer.xml index cb058c6169..235904d78b 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonStaticInitializer.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonStaticInitializer.xml @@ -4,25 +4,76 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> <test-code> - <description><![CDATA[ -bad - ]]></description> + <description>bad</description> <expected-problems>1</expected-problems> <code><![CDATA[ public class Foo { {} } - ]]></code> + ]]></code> </test-code> + <test-code> - <description><![CDATA[ -static initializers are OK - ]]></description> + <description>static initializers are OK</description> <expected-problems>0</expected-problems> <code><![CDATA[ public class Foo { static {} } - ]]></code> + ]]></code> </test-code> + + + <test-code> + <description>Allowed in anonymous classes</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public class Foo { + public Animation getStatusTransition() { + return new Transition() { + + { + setCycleDuration(Duration.millis(1200)); + } + + @Override + protected void interpolate(double frac) { + // magic + } + }; + } +} + ]]></code> + </test-code> + + <test-code> + <description>Flag in local class</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>3</expected-linenumbers> + <code><![CDATA[ +public class Foo { + static { + class Local {{}} + } +} + ]]></code> + </test-code> + + <test-code> + <description>Allowed in enum constant</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>7</expected-linenumbers> + <code><![CDATA[ +public enum Foo { + A { + { setCycleDuration(Duration.millis(1200)); } + }; + + + { setCycleDuration(Duration.millis(1200)); } + +} + ]]></code> + </test-code> + </test-data> From 89bb73fc99bb2f4e01cca7bdc3de403c009219e2 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 8 Jun 2019 17:30:54 +0200 Subject: [PATCH 181/371] (doc) Update generated rule documentation --- docs/pages/pmd/rules/java/bestpractices.md | 4 +- docs/pages/pmd/rules/java/design.md | 4 +- docs/pages/pmd/rules/java/multithreading.md | 50 +++++++++++++++++---- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/docs/pages/pmd/rules/java/bestpractices.md b/docs/pages/pmd/rules/java/bestpractices.md index 4023ea302e..0ff9b5c2a4 100644 --- a/docs/pages/pmd/rules/java/bestpractices.md +++ b/docs/pages/pmd/rules/java/bestpractices.md @@ -1468,7 +1468,7 @@ public class Something { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|ignoredAnnotations|lombok.Setter \| lombok.Getter \| lombok.Builder \| lombok.Data \| lombok.RequiredArgsConstructor \| lombok.AllArgsConstructor \| lombok.Value \| lombok.NoArgsConstructor \| java.lang.Deprecated \| javafx.fxml.FXML|Fully qualified names of the annotation types that should be ignored by this rule|yes. Delimiter is '\|'.| +|ignoredAnnotations|lombok.Setter \| lombok.Getter \| lombok.Builder \| lombok.Data \| lombok.RequiredArgsConstructor \| lombok.AllArgsConstructor \| lombok.Value \| lombok.NoArgsConstructor \| java.lang.Deprecated \| javafx.fxml.FXML \| lombok.experimental.Delegate|Fully qualified names of the annotation types that should be ignored by this rule|yes. Delimiter is '\|'.| **Use this rule with the default properties by just referencing it:** ``` xml @@ -1479,7 +1479,7 @@ public class Something { ``` xml <rule ref="category/java/bestpractices.xml/UnusedPrivateField"> <properties> - <property name="ignoredAnnotations" value="lombok.Setter|lombok.Getter|lombok.Builder|lombok.Data|lombok.RequiredArgsConstructor|lombok.AllArgsConstructor|lombok.Value|lombok.NoArgsConstructor|java.lang.Deprecated|javafx.fxml.FXML" /> + <property name="ignoredAnnotations" value="lombok.Setter|lombok.Getter|lombok.Builder|lombok.Data|lombok.RequiredArgsConstructor|lombok.AllArgsConstructor|lombok.Value|lombok.NoArgsConstructor|java.lang.Deprecated|javafx.fxml.FXML|lombok.experimental.Delegate" /> </properties> </rule> ``` diff --git a/docs/pages/pmd/rules/java/design.md b/docs/pages/pmd/rules/java/design.md index b0647c24cd..3458d95fba 100644 --- a/docs/pages/pmd/rules/java/design.md +++ b/docs/pages/pmd/rules/java/design.md @@ -1779,7 +1779,7 @@ public class Foo { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| -|ignoredAnnotations|lombok.Setter \| lombok.Getter \| lombok.Builder \| lombok.Data \| lombok.RequiredArgsConstructor \| lombok.AllArgsConstructor \| lombok.Value \| lombok.NoArgsConstructor|Fully qualified names of the annotation types that should be ignored by this rule|yes. Delimiter is '\|'.| +|ignoredAnnotations|lombok.Setter \| lombok.Getter \| lombok.Builder \| lombok.Data \| lombok.RequiredArgsConstructor \| lombok.AllArgsConstructor \| lombok.Value \| lombok.NoArgsConstructor \| lombok.experimental.Delegate|Fully qualified names of the annotation types that should be ignored by this rule|yes. Delimiter is '\|'.| |checkInnerClasses|false|Check inner classes|no| |disallowNotAssignment|false|Disallow violations where the first usage is not an assignment|no| @@ -1792,7 +1792,7 @@ public class Foo { ``` xml <rule ref="category/java/design.xml/SingularField"> <properties> - <property name="ignoredAnnotations" value="lombok.Setter|lombok.Getter|lombok.Builder|lombok.Data|lombok.RequiredArgsConstructor|lombok.AllArgsConstructor|lombok.Value|lombok.NoArgsConstructor" /> + <property name="ignoredAnnotations" value="lombok.Setter|lombok.Getter|lombok.Builder|lombok.Data|lombok.RequiredArgsConstructor|lombok.AllArgsConstructor|lombok.Value|lombok.NoArgsConstructor|lombok.experimental.Delegate" /> <property name="checkInnerClasses" value="false" /> <property name="disallowNotAssignment" value="false" /> </properties> diff --git a/docs/pages/pmd/rules/java/multithreading.md b/docs/pages/pmd/rules/java/multithreading.md index 256bb3e149..34e0e7275d 100644 --- a/docs/pages/pmd/rules/java/multithreading.md +++ b/docs/pages/pmd/rules/java/multithreading.md @@ -293,7 +293,7 @@ public static Foo getFoo() { SimpleDateFormat instances are not synchronized. Sun recommends using separate format instances for each thread. If multiple threads must access a static formatter, the formatter must be -synchronized either on method or block level. +synchronized on block level. This rule has been deprecated in favor of the rule {% rule UnsynchronizedStaticFormatter %}. @@ -307,17 +307,34 @@ public class Foo { void bar() { sdf.format(); // poor, no thread-safety } - static synchronized void foo() { - sdf.format(); // preferred + void foo() { + synchronized (sdf) { // preferred + sdf.format(); + } } } ``` -**Use this rule by referencing it:** +**This rule has the following properties:** + +|Name|Default Value|Description|Multivalued| +|----|-------------|-----------|-----------| +|allowMethodLevelSynchronization|false|If true, method level synchronization is allowed as well as synchronized block. Otherwise only synchronized blocks are allowed.|no| + +**Use this rule with the default properties by just referencing it:** ``` xml <rule ref="category/java/multithreading.xml/UnsynchronizedStaticDateFormatter" /> ``` +**Use this rule and customize it:** +``` xml +<rule ref="category/java/multithreading.xml/UnsynchronizedStaticDateFormatter"> + <properties> + <property name="allowMethodLevelSynchronization" value="false" /> + </properties> +</rule> +``` + ## UnsynchronizedStaticFormatter **Since:** PMD 6.11.0 @@ -327,7 +344,7 @@ public class Foo { Instances of `java.text.Format` are generally not synchronized. Sun recommends using separate format instances for each thread. If multiple threads must access a static formatter, the formatter must be -synchronized either on method or block level. +synchronized on block level. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.multithreading.UnsynchronizedStaticFormatterRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java) @@ -339,17 +356,34 @@ public class Foo { void bar() { sdf.format(); // poor, no thread-safety } - static synchronized void foo() { - sdf.format(); // preferred + void foo() { + synchronized (sdf) { // preferred + sdf.format(); + } } } ``` -**Use this rule by referencing it:** +**This rule has the following properties:** + +|Name|Default Value|Description|Multivalued| +|----|-------------|-----------|-----------| +|allowMethodLevelSynchronization|false|If true, method level synchronization is allowed as well as synchronized block. Otherwise only synchronized blocks are allowed.|no| + +**Use this rule with the default properties by just referencing it:** ``` xml <rule ref="category/java/multithreading.xml/UnsynchronizedStaticFormatter" /> ``` +**Use this rule and customize it:** +``` xml +<rule ref="category/java/multithreading.xml/UnsynchronizedStaticFormatter"> + <properties> + <property name="allowMethodLevelSynchronization" value="false" /> + </properties> +</rule> +``` + ## UseConcurrentHashMap **Since:** PMD 4.2.6 From 727684885702a0e8bbda8875b4dbb247f4dad45d Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Tue, 11 Jun 2019 14:33:09 -0400 Subject: [PATCH 182/371] [plsql] Add Table InlineConstraint --- pmd-plsql/etc/grammar/PldocAST.jjt | 72 ++++- pmd-plsql/src/main/ant/alljavacc.xml | 1 + .../lang/plsql/ast/ASTInlineConstraint.java | 47 +++ .../plsql/ast/PLSQLParserVisitorAdapter.java | 5 + .../lang/plsql/rule/AbstractPLSQLRule.java | 5 + .../pmd/lang/plsql/ast/CreateTableTest.java | 8 + .../lang/plsql/ast/CreateOrganizedTable.pls | 252 +++++++++++++++ .../pmd/lang/plsql/ast/CreateTable.pls | 304 +++++++++++++++++- 8 files changed, 675 insertions(+), 19 deletions(-) create mode 100644 pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateOrganizedTable.pls diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index c4af120757..80d6ce6a50 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1177,9 +1177,9 @@ void RestOfStatement() #void : [ WhereClause() ] [ HierarchicalQueryClause() ] [ GroupByClause() ] - + (LOOKAHEAD(2) ( SubqueryOperation() ) Subquery() )* - + [ OrderByClause() ] [ RowLimitingClause() ] } @@ -3647,11 +3647,15 @@ ASTTable Table() : <CREATE> [ ( <GLOBAL> | <PRIVATE> ) <TEMPORARY> | <SHARDED> | <DUPLICATED> ] <TABLE> ObjectNameDeclaration() [ <SHARING> "=" ( <METADATA> | <DATA> | <EXTENDED> <DATA> | <NONE> ) ] + //object_table + ( <OF> Datatype() | + //relational_table [ "(" ( LOOKAHEAD(2) OutOfLineConstraint() | TableColumn() ) ("," ( LOOKAHEAD(2) OutOfLineConstraint() | TableColumn() ))* ")" ] [LOOKAHEAD(4) <ON> <COMMIT> (<DROP> | <PRESERVE>) <DEFINITION>] - [LOOKAHEAD(4) <ON> <COMMIT> (<DELETE> | <PRESERVE>) <ROWS>] - //### [physicalProperties()] - //### [tableProperties()] + [LOOKAHEAD(4) <ON> <COMMIT> (<DELETE> | <PRESERVE>) <ROWS>] ) + //### [PhysicalProperties()] + //### [TableProperties()] + Skip2NextOccurrence(";") [";"] { return jjtThis ; } @@ -3661,10 +3665,30 @@ ASTTableColumn TableColumn() : { } { - ID() Datatype() [<_DEFAULT> Expression()] [[<NOT> ] <NULL>] + ID() Datatype() + [ ( <_DEFAULT> [ <ON> <NULL> ] (LOOKAHEAD(2) FunctionCall()|LOOKAHEAD(1) UnaryExpression(true)) + | LOOKAHEAD(2) <GENERATED> [ ( <BY> <_DEFAULT> [ <ON> <NULL>] | KEYWORD("ALWAYS")) ] + <AS> KEYWORD("IDENTITY") ) ] + (LOOKAHEAD(1) InlineConstraint())* { return jjtThis ; } } +ASTInlineConstraint InlineConstraint() : +{} +{ + [ <CONSTRAINT> ID() ] + ( [<NOT>] <NULL> + | <UNIQUE> { jjtThis.setType(ConstraintType.UNIQUE); } + | <PRIMARY> { jjtThis.setType(ConstraintType.PRIMARY); } <KEY> + | <CHECK> { jjtThis.setType(ConstraintType.CHECK); } "(" Condition() ")" + | <WITH> <ROWID> + | <SCOPE> <IS> [ LOOKAHEAD(2) TableName() "." ] Column() + | ReferencesClause() + ) + (ConstraintState())* + { return jjtThis; } +} + ASTOutOfLineConstraint OutOfLineConstraint() : {} { @@ -3672,16 +3696,31 @@ ASTOutOfLineConstraint OutOfLineConstraint() : ( <UNIQUE> { jjtThis.setType(ConstraintType.UNIQUE); } "(" ID() ("," ID())* ")" | <PRIMARY> { jjtThis.setType(ConstraintType.PRIMARY); } <KEY> "(" ID() ("," ID())* ")" | <FOREIGN> { jjtThis.setType(ConstraintType.FOREIGN); } <KEY> "(" ID() ("," ID())* ")" ReferencesClause() - | <CHECK> { jjtThis.setType(ConstraintType.CHECK); } "(" Statement() ")" + | <CHECK> { jjtThis.setType(ConstraintType.CHECK); } "(" Condition() ")" ) + (ConstraintState())* { return jjtThis; } } +void ConstraintState() #void: +{} +{ + ( <USING> <INDEX> + ( LOOKAHEAD(2) <IDENTIFIER> + | LOOKAHEAD(2) "(" <CREATE> <UNIQUE> <INDEX> <IDENTIFIER> <ON> TableName() "(" Column() ("," Column())* ")" ")" + | LOOKAHEAD(2) ( <PCTFREE> NumericLiteral() + | <IDENTIFIER> ( <IDENTIFIER> | Skip2NextTerminator("(",")") ) )* ) + | <INITIALLY> (<IMMEDIATE>|<DEFERRED>) + | <DEFERRABLE> + | <ENABLE> + | <DISABLE> ) +} + ASTReferencesClause ReferencesClause() : {} { <REFERENCES> ObjectNameDeclaration() - [ "(" ID() ( LOOKAHEAD(2) "," ID())* ] + [ "(" ID() ( LOOKAHEAD(2) "," ID() )* ")" ] [ <ON> <DELETE> ( <CASCADE> | <SET> <NULL> ) ] { return jjtThis; } } @@ -4836,7 +4875,12 @@ TOKEN [IGNORE_CASE]: <FOREACHROW: "FOR EACH ROW"> | <REFERENCING: "REFERENCING"> | <OLD: "OLD"> | -<PARENT: "PARENT"> +<PARENT: "PARENT"> | +<GENERATED: "GENERATED"> | +<SCOPE: "SCOPE"> | +<INITIALLY: "INITIALLY"> | +<DEFERRABLE: "DEFERRABLE"> | +<DEFERRED: "DEFERRED"> | <CC_IF: "$IF"> | <CC_THEN: "$THEN"> @@ -5315,8 +5359,8 @@ ASTKEYWORD_UNRESERVED KEYWORD_UNRESERVED (): {} //| <DECLARE> //| <DECREMENT> //| <DECRYPT> -//| <DEFERRABLE> -//| <DEFERRED> +| <DEFERRABLE> +| <DEFERRED> | <DEFINE>// SQL*Plus command //| <DEFINED> | <DEFINER> @@ -5431,7 +5475,7 @@ ASTKEYWORD_UNRESERVED KEYWORD_UNRESERVED (): {} //| <G> //| <GATHER_PLAN_STATISTICS> //| <GBY_CONC_ROLLUP> -//| <GENERATED> +| <GENERATED> | <GLOBAL> //| <GLOBAL_NAME> //| <GLOBAL_TOPIC_ENABLED> @@ -5498,7 +5542,7 @@ ASTKEYWORD_UNRESERVED KEYWORD_UNRESERVED (): {} //| <INFORMATIONAL> //| <INITIAL> //| <INITIALIZED> -//| <INITIALLY> +| <INITIALLY> //| <INITRANS> //| <INLINE> //| <INLINE_XMLTYPE_NT> @@ -5958,7 +6002,7 @@ ASTKEYWORD_UNRESERVED KEYWORD_UNRESERVED (): {} | <SCHEMA> //| <SCN> //| <SCN_ASCENDING> -//| <SCOPE> +| <SCOPE> //| <SD_ALL> //| <SD_INHIBIT> //| <SD_SHOW> diff --git a/pmd-plsql/src/main/ant/alljavacc.xml b/pmd-plsql/src/main/ant/alljavacc.xml index eddee3573d..d22c66587a 100644 --- a/pmd-plsql/src/main/ant/alljavacc.xml +++ b/pmd-plsql/src/main/ant/alljavacc.xml @@ -56,6 +56,7 @@ <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTName.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTOuterJoinClause.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTOuterJoinType.java" /> + <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTOutOfLineConstraint.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTPackageBody.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTPackageSpecification.java" /> diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java new file mode 100644 index 0000000000..5b89bc857e --- /dev/null +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java @@ -0,0 +1,47 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +/* Generated By:JJTree: Do not edit this line. ASTInlineConstraint.java Version 4.3 */ +/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ + +package net.sourceforge.pmd.lang.plsql.ast; + +public class ASTInlineConstraint extends net.sourceforge.pmd.lang.plsql.ast.AbstractPLSQLNode { + private ConstraintType type; + + public ASTInlineConstraint(int id) { + super(id); + } + + public ASTInlineConstraint(PLSQLParser p, int id) { + super(p, id); + } + + void setType(ConstraintType type) { + this.type = type; + } + + public ConstraintType getType() { + return type; + } + + public boolean isUnique() { + return type == ConstraintType.UNIQUE; + } + + public boolean isPrimaryKey() { + return type == ConstraintType.PRIMARY; + } + + public boolean isCheck() { + return type == ConstraintType.CHECK; + } + + /** Accept the visitor. **/ + @Override + public Object jjtAccept(PLSQLParserVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} +/* JavaCC - OriginalChecksum=6100a18102b66b39df188afb7c4dcf8a (do not edit this line) */ diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java index 3b274382f4..33c71ea8ac 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java @@ -546,6 +546,11 @@ public class PLSQLParserVisitorAdapter implements PLSQLParserVisitor { return visit((PLSQLNode) node, data); } + @Override + public Object visit(ASTInlineConstraint node, Object data) { + return visit((PLSQLNode) node, data); + } + @Override public Object visit(ASTView node, Object data) { return visit((PLSQLNode) node, data); diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java index 598ac08534..ca77e27c87 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java @@ -626,6 +626,11 @@ public abstract class AbstractPLSQLRule extends AbstractRule implements PLSQLPar return visit((PLSQLNode) node, data); } + @Override + public Object visit(ASTInlineConstraint node, Object data) { + return visit((PLSQLNode) node, data); + } + @Override public Object visit(ASTTableColumn node, Object data) { return visit((PLSQLNode) node, data); diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CreateTableTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CreateTableTest.java index 381efe7a78..cad405334b 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CreateTableTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CreateTableTest.java @@ -21,4 +21,12 @@ public class CreateTableTest extends AbstractPLSQLParserTst { ASTInput input = parsePLSQL(code); Assert.assertNotNull(input); } + + @Test + public void parseCreateOrganizedTable() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("CreateOrganizedTable.pls"), + StandardCharsets.UTF_8); + ASTInput input = parsePLSQL(code); + Assert.assertNotNull(input); + } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateOrganizedTable.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateOrganizedTable.pls new file mode 100644 index 0000000000..ac32084672 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateOrganizedTable.pls @@ -0,0 +1,252 @@ +-- +-- BSD-style license; for more info see http://pmd.sourceforge.net/license.html +-- + +-- FIXED records +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (RECORDS FIXED 20 FIELDS (first_name CHAR(7), + last_name CHAR(8), + year_of_birth CHAR(4))) + LOCATION ('info.dat')); + +-- VARIABLE records +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (RECORDS VARIABLE 2 FIELDS TERMINATED BY ',' + (first_name CHAR(7), + last_name CHAR(8), + year_of_birth CHAR(4))) + LOCATION ('info.dat')); + +-- DELIMITED BY records +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (RECORDS DELIMITED BY '|' FIELDS TERMINATED BY ',' + (first_name CHAR(7), + last_name CHAR(8), + year_of_birth CHAR(4))) + LOCATION ('info.dat')); + +-- without any access parameters +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir LOCATION ('info.dat')); + +-- External Table with Terminating Delimiters +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (FIELDS TERMINATED BY WHITESPACE) + LOCATION ('info.dat')); + +-- External Table with Enclosure and Terminator Delimiters +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (FIELDS TERMINATED BY "," ENCLOSED BY "(" AND ")") + LOCATION ('info.dat')); + +-- Example: External Table with Optional Enclosure Delimiters +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (FIELDS TERMINATED BY ',' + OPTIONALLY ENCLOSED BY '(' and ')' + LRTRIM) + LOCATION ('info.dat')); + +-- all data is fixed-length +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), +year_of_birth CHAR(4)) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (FIELDS LTRIM) + LOCATION ('info.dat')); + +-- MISSING FIELD VALUES ARE NULL +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth INT) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (FIELDS TERMINATED BY "," + MISSING FIELD VALUES ARE NULL) + LOCATION ('info.dat')); + +-- external table with no field_list and a delim_spec +CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth INT) + ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS (FIELDS TERMINATED BY "|") + LOCATION ('info.dat')); + +-- various ways of using pos_spec +CREATE TABLE emp_load (first_name CHAR(15), + last_name CHAR(20), + year_of_birth INT, + phone CHAR(12), + area_code CHAR(3), + exchange CHAR(3), + extension CHAR(4)) + ORGANIZATION EXTERNAL + (TYPE ORACLE_LOADER + DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS + (FIELDS RTRIM + (first_name (1:15) CHAR(15), + last_name (*:+20), + year_of_birth (36:39), + phone (40:52), + area_code (*-12: +3), + exchange (*+1: +3), + extension (*+1: +4))) + LOCATION ('info.dat')); + +-- Use of the CHAR clause. +CREATE TABLE emp_load + (employee_number CHAR(5), + employee_dob CHAR(20), + employee_last_name CHAR(20), + employee_first_name CHAR(15), + employee_middle_name CHAR(15), + employee_hire_date DATE) + ORGANIZATION EXTERNAL + (TYPE ORACLE_LOADER + DEFAULT DIRECTORY def_dir1 + ACCESS PARAMETERS + (RECORDS DELIMITED BY NEWLINE + FIELDS (employee_number CHAR(2), + employee_dob CHAR(20), + employee_last_name CHAR(18), + employee_first_name CHAR(11), + employee_middle_name CHAR(11), + employee_hire_date CHAR(10) date_format DATE mask "mm/dd/yyyy" + ) + ) + LOCATION ('info.dat') + ); + +-- Use of a complex DATE character string and a TIMESTAMP character string +CREATE TABLE emp_load + (employee_number CHAR(5), + employee_dob CHAR(20), + employee_last_name CHAR(20), + employee_first_name CHAR(15), + employee_middle_name CHAR(15), + employee_hire_date DATE, + rec_creation_date TIMESTAMP WITH TIME ZONE) +ORGANIZATION EXTERNAL + (TYPE ORACLE_LOADER + DEFAULT DIRECTORY def_dir1 + ACCESS PARAMETERS + (RECORDS DELIMITED BY NEWLINE + FIELDS (employee_number CHAR(2), + employee_dob CHAR(20), + employee_last_name CHAR(18), + employee_first_name CHAR(11), + employee_middle_name CHAR(11), + employee_hire_date CHAR(22) date_format DATE mask "mm/dd/yyyy hh:mi:ss AM", + rec_creation_date CHAR(35) date_format TIMESTAMP WITH TIMEZONE mask "DD-MON-RR HH.MI.SSXFF AM TZH:TZM" + ) + ) + LOCATION ('infoc.dat') + ); + +-- Uses of VARCHAR and VARRAW +CREATE TABLE emp_load + (first_name CHAR(15), + last_name CHAR(20), + resume CHAR(2000), + picture RAW(2000)) + ORGANIZATION EXTERNAL + (TYPE ORACLE_LOADER + DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS + (RECORDS + VARIABLE 2 + DATA IS BIG ENDIAN + CHARACTERSET US7ASCII + FIELDS (first_name VARCHAR(2,12), + last_name VARCHAR(2,20), + resume VARCHAR(4,10000), + picture VARRAW(4,100000))) + LOCATION ('info.dat')); + +-- Uses of VARCHARC and VARRAWC +CREATE TABLE emp_load + (first_name CHAR(15), + last_name CHAR(20), + resume CHAR(2000), + picture RAW (2000)) + ORGANIZATION EXTERNAL + (TYPE ORACLE_LOADER + DEFAULT DIRECTORY ext_tab_dir + ACCESS PARAMETERS + (FIELDS (first_name VARCHARC(5,12), + last_name VARCHARC(2,20), + resume VARCHARC(4,10000), + picture VARRAWC(4,100000))) + LOCATION ('info.dat')); + +CREATE TABLE lob_tab ( + colid NUMBER(10), + clob_content CLOB +) +ORGANIZATION EXTERNAL +( + TYPE ORACLE_LOADER + DEFAULT DIRECTORY temp_dir + ACCESS PARAMETERS + ( + RECORDS DELIMITED BY NEWLINE + BADFILE temp_dir:'data.bad' + LOGFILE temp_dir:'data.log' + FIELDS TERMINATED BY ',' + MISSING FIELD VALUES ARE NULL + ( + colid CHAR(10), + clob_filename CHAR(100) + ) + COLUMN TRANSFORMS (clob_content FROM LOBFILE (clob_filename) FROM (temp_dir) CLOB) + ) + LOCATION ('data.txt') +) +--PARALLEL 2 +REJECT LIMIT UNLIMITED; + +CREATE TABLE dept_external ( + deptno NUMBER(6), + dname VARCHAR2(20), + loc VARCHAR2(25) +) +ORGANIZATION EXTERNAL +(TYPE ORACLE_LOADER + DEFAULT DIRECTORY admin + ACCESS PARAMETERS + ( + RECORDS DELIMITED BY newline + BADFILE 'ulcase1.bad' + DISCARDFILE 'ulcase1.dis' + LOGFILE 'ulcase1.log' + SKIP 20 + FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' + ( + deptno INTEGER EXTERNAL(6), + dname CHAR(20), + loc CHAR(25) + ) + ) + LOCATION ('ulcase1.ctl') +) +REJECT LIMIT UNLIMITED; + +CREATE TABLE countries_demo + ( country_id CHAR(2) + , country_name VARCHAR2(40) + , currency_name VARCHAR2(25) + , currency_symbol VARCHAR2(3) + , region VARCHAR2(15) ) + ORGANIZATION INDEX + STORAGE + ( INITIAL 4K ) + PCTTHRESHOLD 2 + INCLUDING country_name + OVERFLOW + STORAGE + ( INITIAL 4K ); + +create table toys_heap ( + toy_name varchar2(100) +) organization heap; diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls index 5d996edfc8..0351df1eaa 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls @@ -4,8 +4,302 @@ -- this is the customers.sql file: CREATE TABLE customers -( customer_id number(10) NOT NULL, -customer_name varchar2(50) NOT NULL, -city varchar2(50), -CONSTRAINT customers_pk PRIMARY KEY (customer_id) -); + ( customer_id number(10) primary key enable + , customer_name varchar2(50) NOT NULL + , zip NUMBER DEFAULT 10001 NOT NULL + , city varchar2(50) default on null 'New York' + , status VARCHAR2(1) CONSTRAINT status_chk CHECK (status in ('X', 'Y', 'Z')) + , registration_date timestamp default CURRENT_TIMESTAMP not null + , expiration_date date default TO_DATE('12-31-2999','mm-dd-yyyy') not null + , CONSTRAINT customers_pk PRIMARY KEY (customer_id) + ); + +CREATE TABLE employees_demo + ( employee_id NUMBER(6) + , first_name VARCHAR2(20) + , last_name VARCHAR2(25) + CONSTRAINT emp_last_name_nn_demo NOT NULL + , email VARCHAR2(25) + CONSTRAINT emp_email_nn_demo NOT NULL + , phone_number VARCHAR2(20) + , hire_date DATE DEFAULT SYSDATE + CONSTRAINT emp_hire_date_nn_demo NOT NULL + , job_id VARCHAR2(10) + CONSTRAINT emp_job_nn_demo NOT NULL + , salary NUMBER(8,2) + CONSTRAINT emp_salary_nn_demo NOT NULL + , commission_pct NUMBER(2,2) + , manager_id NUMBER(6) + , department_id NUMBER(4) + , dn VARCHAR2(300) + , CONSTRAINT emp_salary_min_demo + CHECK (salary > 0) + , CONSTRAINT emp_email_uk_demo + UNIQUE (email) + ) ; + +CREATE TABLE employees_demo + ( employee_id NUMBER(6) + , first_name VARCHAR2(20) + , last_name VARCHAR2(25) + CONSTRAINT emp_last_name_nn_demo NOT NULL + , email VARCHAR2(25) + CONSTRAINT emp_email_nn_demo NOT NULL + , phone_number VARCHAR2(20) + , hire_date DATE DEFAULT SYSDATE + CONSTRAINT emp_hire_date_nn_demo NOT NULL + , job_id VARCHAR2(10) + CONSTRAINT emp_job_nn_demo NOT NULL + , salary NUMBER(8,2) + CONSTRAINT emp_salary_nn_demo NOT NULL + , commission_pct NUMBER(2,2) + , manager_id NUMBER(6) + , department_id NUMBER(4) + , dn VARCHAR2(300) + , CONSTRAINT emp_salary_min_demo + CHECK (salary > 0) + , CONSTRAINT emp_email_uk_demo + UNIQUE (email) + ) + TABLESPACE example + STORAGE (INITIAL 8M); + +CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY); + +CREATE GLOBAL TEMPORARY TABLE today_sales + ON COMMIT PRESERVE ROWS + AS SELECT * FROM orders WHERE order_date = SYSDATE; + +CREATE TABLE later (col1 NUMBER, col2 VARCHAR2(20)) SEGMENT CREATION DEFERRED; + +CREATE TABLE persons OF person_t; + +CREATE TABLE books (title VARCHAR2(100), author person_t); + +CREATE TABLE dept_80 + PARALLEL + AS SELECT * FROM employees + WHERE department_id = 80; + +CREATE TABLE dept_80 + AS SELECT * FROM employees + WHERE department_id = 80; + +CREATE TABLE departments_demo + ( department_id NUMBER(4) + , department_name VARCHAR2(30) + CONSTRAINT dept_name_nn NOT NULL + , manager_id NUMBER(6) + , location_id NUMBER(4) + , dn VARCHAR2(300) + ) ; + +CREATE TABLE departments_demo + ( department_id NUMBER(4) PRIMARY KEY DISABLE + , department_name VARCHAR2(30) + CONSTRAINT dept_name_nn NOT NULL + , manager_id NUMBER(6) + , location_id NUMBER(4) + , dn VARCHAR2(300) + ) ; + +CREATE TABLE print_media + ( product_id NUMBER(6) + , ad_id NUMBER(6) + , ad_composite BLOB + , ad_sourcetext CLOB + , ad_finaltext CLOB + , ad_fltextn NCLOB + , ad_textdocs_ntab textdoc_tab + , ad_photo BLOB + , ad_graphic BFILE + , ad_header adheader_typ + ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab; + +CREATE TABLE business_contacts ( + company_name VARCHAR2(25), + company_reps customer_list) + NESTED TABLE company_reps STORE AS outer_ntab + (NESTED TABLE phones STORE AS inner_ntab); + +CREATE TABLE my_customers ( + name VARCHAR2(25), + phone_numbers phone_list) + NESTED TABLE phone_numbers STORE AS outer_ntab + (NESTED TABLE COLUMN_VALUE STORE AS inner_ntab); + +CREATE TABLE print_media_new + ( product_id NUMBER(6) + , ad_id NUMBER(6) + , ad_composite BLOB + , ad_sourcetext CLOB + , ad_finaltext CLOB + , ad_fltextn NCLOB + , ad_textdocs_ntab textdoc_tab + , ad_photo BLOB + , ad_graphic BFILE + , ad_header adheader_typ + ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_new + LOB (ad_sourcetext, ad_finaltext) STORE AS + (TABLESPACE example + STORAGE (INITIAL 6144) + CHUNK 4000 + NOCACHE LOGGING); + +CREATE TABLE promotions_var1 + ( promo_id NUMBER(6) + CONSTRAINT promo_id_u UNIQUE + , promo_name VARCHAR2(20) + , promo_category VARCHAR2(15) + , promo_cost NUMBER(10,2) + , promo_begin_date DATE + , promo_end_date DATE + ) ; + +CREATE TABLE promotions_var2 + ( promo_id NUMBER(6) + , promo_name VARCHAR2(20) + , promo_category VARCHAR2(15) + , promo_cost NUMBER(10,2) + , promo_begin_date DATE + , promo_end_date DATE + , CONSTRAINT promo_id_u UNIQUE (promo_id) + USING INDEX PCTFREE 20 + TABLESPACE stocks + STORAGE (INITIAL 8M) ); + +CREATE TABLE locations_demo + ( location_id NUMBER(4) CONSTRAINT loc_id_pk PRIMARY KEY + , street_address VARCHAR2(40) + , postal_code VARCHAR2(12) + , city VARCHAR2(30) + , state_province VARCHAR2(25) + , country_id CHAR(2) + ) ; + +CREATE TABLE locations_demo + ( location_id NUMBER(4) + , street_address VARCHAR2(40) + , postal_code VARCHAR2(12) + , city VARCHAR2(30) + , state_province VARCHAR2(25) + , country_id CHAR(2) + , CONSTRAINT loc_id_pk PRIMARY KEY (location_id)); + +CREATE TABLE dept_20 + (employee_id NUMBER(4), + last_name VARCHAR2(10), + job_id VARCHAR2(9), + manager_id NUMBER(4), + hire_date DATE, + salary NUMBER(7,2), + commission_pct NUMBER(7,2), + --department_id, + CONSTRAINT fk_deptno + FOREIGN KEY (department_id) + REFERENCES departments(department_id) ); + +CREATE TABLE dept_20 + (employee_id NUMBER(4) PRIMARY KEY, + last_name VARCHAR2(10), + job_id VARCHAR2(9), + manager_id NUMBER(4) CONSTRAINT fk_mgr + REFERENCES employees ON DELETE SET NULL, + hire_date DATE, + salary NUMBER(7,2), + commission_pct NUMBER(7,2), + department_id NUMBER(2) CONSTRAINT fk_deptno + REFERENCES departments(department_id) + ON DELETE CASCADE ); + +CREATE TABLE divisions + (div_no NUMBER CONSTRAINT check_divno + CHECK (div_no BETWEEN 10 AND 99) + DISABLE, + div_name VARCHAR2(9) CONSTRAINT check_divname + CHECK (div_name = UPPER(div_name)) + DISABLE, + office VARCHAR2(10) CONSTRAINT check_office + CHECK (office IN ('DALLAS','BOSTON', + 'PARIS','TOKYO')) + DISABLE); + +CREATE TABLE dept_20 + (employee_id NUMBER(4) PRIMARY KEY, + last_name VARCHAR2(10), + job_id VARCHAR2(9), + manager_id NUMBER(4), + salary NUMBER(7,2), + commission_pct NUMBER(7,2), + department_id NUMBER(2), + CONSTRAINT check_sal CHECK (salary * commission_pct <= 5000)); + +CREATE TABLE order_detail + (CONSTRAINT pk_od PRIMARY KEY (order_id, part_no), + order_id NUMBER + CONSTRAINT fk_oid + REFERENCES oe.orders(order_id), + part_no NUMBER + CONSTRAINT fk_pno + REFERENCES oe.product_information(product_id), + quantity NUMBER + CONSTRAINT nn_qty NOT NULL + CONSTRAINT check_qty CHECK (quantity > 0), + cost NUMBER + CONSTRAINT check_cost CHECK (cost > 0) ); + +CREATE TYPE person_name AS OBJECT + (first_name VARCHAR2(30), last_name VARCHAR2(30)); +/ + +CREATE TABLE students (name person_name, age INTEGER, + CHECK (name.first_name IS NOT NULL AND + name.last_name IS NOT NULL)); + +CREATE TYPE cust_address_typ_new AS OBJECT + ( street_address VARCHAR2(40) + , postal_code VARCHAR2(10) + , city VARCHAR2(30) + , state_province VARCHAR2(10) + , country_id CHAR(2) + ); +/ +CREATE TABLE address_table OF cust_address_typ_new; + +CREATE TABLE customer_addresses ( + add_id NUMBER, + address REF cust_address_typ_new + SCOPE IS address_table); + +CREATE TABLE customer_addresses ( + add_id NUMBER, + address REF cust_address_typ REFERENCES address_table); + +CREATE TABLE employees_obj + ( e_name VARCHAR2(100), + e_number NUMBER, + e_dept REF department_typ SCOPE IS departments_obj_t ); + +CREATE TABLE employees_obj + ( e_name VARCHAR2(100), + e_number NUMBER, + e_dept REF department_typ REFERENCES departments_obj_t); + +CREATE TABLE promotions_var3 + ( promo_id NUMBER(6) + , promo_name VARCHAR2(20) + , promo_category VARCHAR2(15) + , promo_cost NUMBER(10,2) + , promo_begin_date DATE + , promo_end_date DATE + , CONSTRAINT promo_id_u UNIQUE (promo_id, promo_cost) + USING INDEX (CREATE UNIQUE INDEX promo_ix1 + ON promotions_var3 (promo_id, promo_cost)) + , CONSTRAINT promo_id_u2 UNIQUE (promo_cost, promo_id) + USING INDEX promo_ix1); + +CREATE TABLE games (scores NUMBER CHECK (scores >= 0)); + +CREATE TABLE games + (scores NUMBER, CONSTRAINT unq_num UNIQUE (scores) + INITIALLY DEFERRED DEFERRABLE); From 473cdba9df140948054a433464578a870f39055e Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Tue, 11 Jun 2019 15:36:17 -0400 Subject: [PATCH 183/371] [plsql] Add Table InlineConstraint fix --- .../lang/plsql/ast/ASTInlineConstraint.java | 56 ++++++++++--------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java index 5b89bc857e..4176bfb1fd 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java @@ -8,40 +8,42 @@ package net.sourceforge.pmd.lang.plsql.ast; public class ASTInlineConstraint extends net.sourceforge.pmd.lang.plsql.ast.AbstractPLSQLNode { - private ConstraintType type; + private ConstraintType type; - public ASTInlineConstraint(int id) { - super(id); - } + public ASTInlineConstraint(int id) { + super(id); + } - public ASTInlineConstraint(PLSQLParser p, int id) { - super(p, id); - } + public ASTInlineConstraint(PLSQLParser p, int id) { + super(p, id); + } - void setType(ConstraintType type) { - this.type = type; - } + void setType(ConstraintType type) { + this.type = type; + } - public ConstraintType getType() { - return type; - } + public ConstraintType getType() { + return type; + } - public boolean isUnique() { - return type == ConstraintType.UNIQUE; - } + public boolean isUnique() { + return type == ConstraintType.UNIQUE; + } - public boolean isPrimaryKey() { - return type == ConstraintType.PRIMARY; - } + public boolean isPrimaryKey() { + return type == ConstraintType.PRIMARY; + } - public boolean isCheck() { - return type == ConstraintType.CHECK; - } + public boolean isCheck() { + return type == ConstraintType.CHECK; + } - /** Accept the visitor. **/ - @Override - public Object jjtAccept(PLSQLParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } + /** + * Accept the visitor. + **/ + @Override + public Object jjtAccept(PLSQLParserVisitor visitor, Object data) { + return visitor.visit(this, data); + } } /* JavaCC - OriginalChecksum=6100a18102b66b39df188afb7c4dcf8a (do not edit this line) */ From 5b6f483f95051555baefee3d06f2fd406af55efd Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Tue, 11 Jun 2019 17:25:12 -0400 Subject: [PATCH 184/371] [plsql] Add support for Subquery Views --- pmd-plsql/etc/grammar/PldocAST.jjt | 5 +++-- .../net/sourceforge/pmd/lang/plsql/ast/ViewTest.java | 8 ++++++++ .../pmd/lang/plsql/ast/CreateViewWithSubquery.pls | 9 +++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateViewWithSubquery.pls diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 80d6ce6a50..4818ff5a58 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -3648,7 +3648,7 @@ ASTTable Table() : <TABLE> ObjectNameDeclaration() [ <SHARING> "=" ( <METADATA> | <DATA> | <EXTENDED> <DATA> | <NONE> ) ] //object_table - ( <OF> Datatype() | + ( <OF> Datatype() [ [ <NOT> ] KEYWORD("SUBSTITUTABLE") <AT> <ALL> KEYWORD("LEVELS") ]| //relational_table [ "(" ( LOOKAHEAD(2) OutOfLineConstraint() | TableColumn() ) ("," ( LOOKAHEAD(2) OutOfLineConstraint() | TableColumn() ))* ")" ] [LOOKAHEAD(4) <ON> <COMMIT> (<DROP> | <PRESERVE>) <DEFINITION>] @@ -3736,7 +3736,8 @@ ASTView View() : ["(" ViewColumn() ("," ViewColumn())* ")"] //### OF ... WITH OBJECT IDENTIFIER... <AS> - SqlStatement(null,";") + [ SqlStatement(null,";") | "(" Subquery() ")"] + [<WITH> ( <READ> <ONLY> | <CHECK> <OPTION> ) [ <CONSTRAINT> <IDENTIFIER> ]] (";" | "/") { jjtThis.setImage(simpleNode.getImage()) ; return jjtThis ; } diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/ViewTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/ViewTest.java index 79595e9d86..c794a19099 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/ViewTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/ViewTest.java @@ -21,4 +21,12 @@ public class ViewTest extends AbstractPLSQLParserTst { ASTInput input = parsePLSQL(code); Assert.assertNotNull(input); } + + @Test + public void parseCreateView() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("CreateViewWithSubquery.pls"), + StandardCharsets.UTF_8); + ASTInput input = parsePLSQL(code); + Assert.assertNotNull(input); + } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateViewWithSubquery.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateViewWithSubquery.pls new file mode 100644 index 0000000000..04d7d2dd4b --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateViewWithSubquery.pls @@ -0,0 +1,9 @@ +-- +-- BSD-style license; for more info see http://pmd.sourceforge.net/license.html +-- + +CREATE OR REPLACE VIEW EMP_DETAILS_VIEW AS +( +SELECT * +FROM DUAL +) WITH READ ONLY; \ No newline at end of file From a300a65ed2bf78e0a8e72e31d8c00dcfbbe9f25e Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Tue, 11 Jun 2019 20:16:45 -0400 Subject: [PATCH 185/371] [plsql] Add Support for Extract Expression --- pmd-plsql/etc/grammar/PldocAST.jjt | 24 +++++++++++++++---- .../plsql/ast/PLSQLParserVisitorAdapter.java | 5 ++++ .../lang/plsql/rule/AbstractPLSQLRule.java | 5 ++++ .../pmd/lang/plsql/ast/FunctionsTest.java | 7 ++++++ .../pmd/lang/plsql/ast/ExtractExpressions.pls | 21 ++++++++++++++++ 5 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ExtractExpressions.pls diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 4818ff5a58..f9d18af9ac 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -3147,19 +3147,35 @@ ASTUnaryExpression UnaryExpression(boolean isUnarySign) #UnaryExpression(>1) : } } +ASTExtractExpression ExtractExpression() : +{} +{ + <EXTRACT> "(" + ( <MONTH> | <YEAR> | <DAY> |<HOUR> | <MINUTE> | <SECOND> + | <TIMEZONE_HOUR> | <TIMEZONE_MINUTE> + | <TIMEZONE_REGION> | <TIMEZONE_ABBR> ) + <FROM> + (LOOKAHEAD(2) FunctionCall() + |LOOKAHEAD(2) DateTimeLiteral() + |LOOKAHEAD(1) Name() ) ")" + { return jjtThis ; } +} + ASTUnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() #UnaryExpressionNotPlusMinus(>1) : { PLSQLNode simpleNode = null; StringBuilder sb = new StringBuilder() ; } { ( - (<NOT>) {sb.append(" NOT "); } - (simpleNode = UnaryExpression(false) ) { sb.append(simpleNode.getImage()); } + <NOT> {sb.append(" NOT "); } simpleNode = UnaryExpression(false) | - (simpleNode = IsNullCondition() ) {sb.append(simpleNode.getImage()); } - ) + LOOKAHEAD(2) simpleNode = ExtractExpression() + | + LOOKAHEAD(2) simpleNode = IsNullCondition() + ) {sb.append(simpleNode.getImage()); } { jjtThis.setImage(sb.toString()); return jjtThis; } } + ASTIsNullCondition IsNullCondition() #IsNullCondition(>1) : //yanzin { PLSQLNode simpleNode = null; PLSQLNode name = null; StringBuilder sb = new StringBuilder(); } { diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java index 33c71ea8ac..675d444b83 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java @@ -426,6 +426,11 @@ public class PLSQLParserVisitorAdapter implements PLSQLParserVisitor { return visit((PLSQLNode) node, data); } + @Override + public Object visit(ASTExtractExpression node, Object data) { + return visit((PLSQLNode) node, data); + } + @Override public Object visit(ASTUnaryExpressionNotPlusMinus node, Object data) { return visit((PLSQLNode) node, data); diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java index ca77e27c87..7da4036f88 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java @@ -516,6 +516,11 @@ public abstract class AbstractPLSQLRule extends AbstractRule implements PLSQLPar return visit((PLSQLNode) node, data); } + @Override + public Object visit(ASTExtractExpression node, Object data) { + return visit((PLSQLNode) node, data); + } + @Override public Object visit(ASTUnaryExpressionNotPlusMinus node, Object data) { return visit((PLSQLNode) node, data); diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/FunctionsTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/FunctionsTest.java index 99d01bd2a2..ea78ede269 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/FunctionsTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/FunctionsTest.java @@ -22,4 +22,11 @@ public class FunctionsTest extends AbstractPLSQLParserTst { Assert.assertNotNull(input); } + @Test + public void parseSelectExtractExpression() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("ExtractExpressions.pls"), + StandardCharsets.UTF_8); + ASTInput input = parsePLSQL(code); + Assert.assertNotNull(input); + } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ExtractExpressions.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ExtractExpressions.pls new file mode 100644 index 0000000000..0e4e7f3b90 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/ExtractExpressions.pls @@ -0,0 +1,21 @@ +-- +-- Subqueries / Expressions in the SelectList +-- + +SELECT EXTRACT(month FROM order_date) "Month", + COUNT(order_date) "No. of Orders" + FROM orders + GROUP BY EXTRACT(month FROM order_date) + ORDER BY "No. of Orders" DESC; + +SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL; + +SELECT last_name, employee_id, hire_date + FROM employees + WHERE EXTRACT(YEAR FROM + TO_DATE(hire_date, 'DD-MON-RR')) > 1998 + ORDER BY hire_date; + +SELECT EXTRACT(TIMEZONE_REGION + FROM TIMESTAMP '1999-01-01 10:00:00 -08:00') + FROM DUAL; From d9a441c7d6bd7b8bb67ec1e12dbaf80d3b74a253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Wed, 12 Jun 2019 18:38:25 +0200 Subject: [PATCH 186/371] Clarify violationSuppressXPath docs --- .../pmd/userdocs/suppressing_warnings.md | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/pages/pmd/userdocs/suppressing_warnings.md b/docs/pages/pmd/userdocs/suppressing_warnings.md index 20ab95452d..cf52782c0a 100644 --- a/docs/pages/pmd/userdocs/suppressing_warnings.md +++ b/docs/pages/pmd/userdocs/suppressing_warnings.md @@ -187,8 +187,13 @@ of no use. ### The property `violationSuppressXPath` This property defines an XPath query to be executed *using the -violation node as the starting point*. If the XPath query matches anything, -then the violation will be suppressed. +violation node as the context node*. If the XPath query matches anything, +then the violation will be suppressed. Note that the query shouldn't be finding +the violation nodes to suppress, but rather, finding a non-empty sequence of nodes +when evaluated with the violation node as a context node. + +The XPath version used by those queries is XPath 1.0, so it doesn't support e.g. +regex tests. This will be updated with PMD 7.0.0. For example, to suppress reporting specifically typed parameters which are unused: @@ -200,6 +205,19 @@ For example, to suppress reporting specifically typed parameters which are unuse </rule> ``` +Note the use of `.` to refer to the context node. Using `//` at the start of the +expression should be avoided, as it would test all nodes in the file, and suppress +more violations than expected. + +Another example, to suppress violations occurring in classes whose name contains `Bean`: +```xml +<property name="violationSuppressXPath" value="./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'Bean')]"/> +``` + +Note here the used of the `./ancestor::` axis instead of `//`. The latter would match +any ClassOrInterfaceDeclaration in the file, while the former matches only class +declaration nodes that *enclose the violation node*, which is usually what you'd want. + Note for XPath based suppression to work, you must know how to write an XPath query that matches the AST structure of the nodes of the violations you wish to suppress. XPath queries are explained in From c5a77fbc35cf32ea6980b99586c087d16b9c5919 Mon Sep 17 00:00:00 2001 From: "artem.krosheninnikov" <artem.krosheninnikov@team.wrike.com> Date: Thu, 13 Jun 2019 01:04:50 +0300 Subject: [PATCH 187/371] add inner interface, inner and top-level annotations --- .../xml/MethodReturnsInternalArray.xml | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml index 4adaf5b87e..1c9293b0f2 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml @@ -262,6 +262,52 @@ public enum MethodReturnsInternalArrayCaseEnum { public String toString() { return titles[0]; } +} + ]]></code> + </test-code> + + <test-code> + <description>Inner interface</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public interface OuterInterface { + interface InnerInterface { + String method(); + } +} + ]]></code> + </test-code> + + <test-code> + <description>Inner annotation</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Retention; + +public final class I { + private I(){ + } + @Retention(RetentionPolicy.RUNTIME) + public static @interface Inner {} +} + ]]> + </code> + </test-code> + + <test-code> + <description>Top-level annotation</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface TopLevelAnnotation { + } ]]></code> </test-code> From 5f40ab11cf3ddecff87d83133af0c59b05dca08f Mon Sep 17 00:00:00 2001 From: "artem.krosheninnikov" <artem.krosheninnikov@team.wrike.com> Date: Fri, 14 Jun 2019 01:47:17 +0300 Subject: [PATCH 188/371] enum with array instead of copy, inner enums with error and no error --- .../xml/MethodReturnsInternalArray.xml | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml index 1c9293b0f2..12a62be692 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml @@ -308,6 +308,72 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface TopLevelAnnotation { +} + ]]></code> + </test-code> + + <test-code> + <description>Enum that returns array instead of copy</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public enum MethodReturnsInternalArrayCaseEnum { + ONE("One"), + TWO("Two", "Three"); + + private String[] titles; + + MethodReturnsInternalArrayCaseEnum(String... titles) { + this.titles = titles; + } + + public String[] getTitles() { + return titles; + } +} + ]]></code> + </test-code> + + <test-code> + <description>Inner enum that returns array instead of copy</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +public class OuterClass { + + public enum InnerEnum { + INNER_ENUM("first", "second"); + private String[] titles; + + InnerEnum(String... titles) { + this.titles = titles; + } + + public String[] getTitles() { + return titles; + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>Inner enum that returns array instead of copy</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.util.Arrays; +public class OuterClass { + + public enum InnerEnum { + INNER_ENUM("first", "second"); + private String[] titles; + + InnerEnum(String... titles) { + this.titles = titles; + } + + public String[] getTitles() { + return Arrays.copyOf(titles, titles.length); + } + } } ]]></code> </test-code> From 3998e0c4a7f332fa4bac737d603df9ad29ce7324 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 14 Jun 2019 11:51:55 +0200 Subject: [PATCH 189/371] [plsql] Fixes from review #1863 --- .../pmd/lang/plsql/ast/ASTInlineConstraint.java | 13 +++---------- .../pmd/lang/plsql/ast/CreateTableTest.java | 5 +++++ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java index 4176bfb1fd..ab1273b363 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTInlineConstraint.java @@ -2,19 +2,16 @@ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -/* Generated By:JJTree: Do not edit this line. ASTInlineConstraint.java Version 4.3 */ -/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ - package net.sourceforge.pmd.lang.plsql.ast; -public class ASTInlineConstraint extends net.sourceforge.pmd.lang.plsql.ast.AbstractPLSQLNode { +public class ASTInlineConstraint extends AbstractPLSQLNode { private ConstraintType type; - public ASTInlineConstraint(int id) { + ASTInlineConstraint(int id) { super(id); } - public ASTInlineConstraint(PLSQLParser p, int id) { + ASTInlineConstraint(PLSQLParser p, int id) { super(p, id); } @@ -38,12 +35,8 @@ public class ASTInlineConstraint extends net.sourceforge.pmd.lang.plsql.ast.Abst return type == ConstraintType.CHECK; } - /** - * Accept the visitor. - **/ @Override public Object jjtAccept(PLSQLParserVisitor visitor, Object data) { return visitor.visit(this, data); } } -/* JavaCC - OriginalChecksum=6100a18102b66b39df188afb7c4dcf8a (do not edit this line) */ diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CreateTableTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CreateTableTest.java index cad405334b..0052faf081 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CreateTableTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/CreateTableTest.java @@ -20,6 +20,11 @@ public class CreateTableTest extends AbstractPLSQLParserTst { StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); Assert.assertNotNull(input); + + // 5th column of first table statement has a inline constraint of type check + ASTTableColumn columnStatus = input.findChildrenOfType(ASTTable.class).get(0).findChildrenOfType(ASTTableColumn.class).get(4); + Assert.assertEquals("status", columnStatus.getFirstChildOfType(ASTID.class).getImage()); + Assert.assertEquals(ConstraintType.CHECK, columnStatus.getFirstChildOfType(ASTInlineConstraint.class).getType()); } @Test From 876ee6910dde786c5bfdb94c274ca8896f4f96b6 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 14 Jun 2019 11:57:01 +0200 Subject: [PATCH 190/371] Update release notes, refs #1863 --- docs/pages/release_notes.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 87e1896642..91c1c30a3c 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,6 +14,12 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### PLSQL Grammar Updates + +The grammar has been updated to support Inline Constraints in CREATE TABLE statements. Additionally, the +CREATE TABLE statement may now be followed by physical properties and table properties. However, these +properties are skipped over during parsing. + #### Modified Rules * The Java rule {% rule "java/bestpractices/UnusedPrivateField" %} (`java-bestpractices`) now ignores by @@ -74,6 +80,7 @@ of deprecations. * [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) * [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [kabroxiko](https://github.com/kabroxiko) * [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) +* [#1863](https://github.com/pmd/pmd/pull/1863): \[plsql] Add Table InlineConstraint - [kabroxiko](https://github.com/kabroxiko) {% endtocmaker %} From fadaf070156e1c85cb3ad89d820748531e98cdb0 Mon Sep 17 00:00:00 2001 From: "artem.krosheninnikov" <artem.krosheninnikov@team.wrike.com> Date: Fri, 14 Jun 2019 13:02:15 +0300 Subject: [PATCH 191/371] review fixes --- .../xml/MethodReturnsInternalArray.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml index 12a62be692..74dbe488ed 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/MethodReturnsInternalArray.xml @@ -272,7 +272,7 @@ public enum MethodReturnsInternalArrayCaseEnum { <code><![CDATA[ public interface OuterInterface { interface InnerInterface { - String method(); + String[] method(); } } ]]></code> @@ -284,12 +284,13 @@ public interface OuterInterface { <code><![CDATA[ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Retention; - public final class I { - private I(){ + private I() { } @Retention(RetentionPolicy.RUNTIME) - public static @interface Inner {} + public static @interface Inner { + String[] value(); + } } ]]> </code> @@ -308,6 +309,8 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface TopLevelAnnotation { + String[] value(); + } ]]></code> </test-code> @@ -356,7 +359,7 @@ public class OuterClass { </test-code> <test-code> - <description>Inner enum that returns array instead of copy</description> + <description>Inner enum that returns copy of array</description> <expected-problems>0</expected-problems> <code><![CDATA[ import java.util.Arrays; From 8dae5141685b3433b75942df6b6d25b9e5b98270 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 14 Jun 2019 13:26:42 +0200 Subject: [PATCH 192/371] [plsql] Fix object table substitution clause for CREATE TABLE --- pmd-plsql/etc/grammar/PldocAST.jjt | 3 +-- .../net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 4818ff5a58..2838e36436 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -3648,7 +3648,7 @@ ASTTable Table() : <TABLE> ObjectNameDeclaration() [ <SHARING> "=" ( <METADATA> | <DATA> | <EXTENDED> <DATA> | <NONE> ) ] //object_table - ( <OF> Datatype() [ [ <NOT> ] KEYWORD("SUBSTITUTABLE") <AT> <ALL> KEYWORD("LEVELS") ]| + ( <OF> Datatype() [ [ <NOT> ] <SUBSTITUTABLE> <AT> <ALL> KEYWORD("LEVELS") ]| //relational_table [ "(" ( LOOKAHEAD(2) OutOfLineConstraint() | TableColumn() ) ("," ( LOOKAHEAD(2) OutOfLineConstraint() | TableColumn() ))* ")" ] [LOOKAHEAD(4) <ON> <COMMIT> (<DROP> | <PRESERVE>) <DEFINITION>] @@ -5586,7 +5586,6 @@ ASTKEYWORD_UNRESERVED KEYWORD_UNRESERVED (): {} | <LENGTH> //| <LESS> | <LEVEL> -//| <LEVELS> | <LIBRARY> //| <LIKE_EXPAND> | <LIKE2> diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls index 0351df1eaa..a99a0651c5 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/CreateTable.pls @@ -74,6 +74,10 @@ CREATE TABLE later (col1 NUMBER, col2 VARCHAR2(20)) SEGMENT CREATION DEFERRED CREATE TABLE persons OF person_t; +CREATE TABLE persons OF person_t SUBSTITUTABLE AT ALL LEVELS; + +CREATE TABLE persons OF person_t NOT SUBSTITUTABLE AT ALL LEVELS; + CREATE TABLE books (title VARCHAR2(100), author person_t); CREATE TABLE dept_80 From 194db1963c3fb655a95d1e4450fa60a791522589 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 14 Jun 2019 13:55:23 +0200 Subject: [PATCH 193/371] [plsql] Simplify grammar, #1864 --- pmd-plsql/etc/grammar/PldocAST.jjt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 2838e36436..d3db3f5f53 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -3736,8 +3736,8 @@ ASTView View() : ["(" ViewColumn() ("," ViewColumn())* ")"] //### OF ... WITH OBJECT IDENTIFIER... <AS> - [ SqlStatement(null,";") | "(" Subquery() ")"] - [<WITH> ( <READ> <ONLY> | <CHECK> <OPTION> ) [ <CONSTRAINT> <IDENTIFIER> ]] + Subquery() + [ SubqueryRestrictionClause() ] (";" | "/") { jjtThis.setImage(simpleNode.getImage()) ; return jjtThis ; } From 034ceeb151dd0183d925284e5c5f805b54f6f067 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 14 Jun 2019 14:01:51 +0200 Subject: [PATCH 194/371] Update release notes, refs #1864 --- docs/pages/release_notes.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 87e1896642..4f6909aaf7 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,6 +14,10 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### PLSQL Grammar Updates + +The CREATE VIEW statement now supports subquery views. + #### Modified Rules * The Java rule {% rule "java/bestpractices/UnusedPrivateField" %} (`java-bestpractices`) now ignores by @@ -74,6 +78,7 @@ of deprecations. * [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) * [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [kabroxiko](https://github.com/kabroxiko) * [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) +* [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [kabroxiko](https://github.com/kabroxiko) {% endtocmaker %} From 6d67e473794a92548f618a24f7cb770fca69df94 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 14 Jun 2019 14:12:34 +0200 Subject: [PATCH 195/371] Update release notes, refs #1865 --- docs/pages/release_notes.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 87e1896642..da8ecfb928 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,6 +14,11 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### PLSQL Grammar Updates + +The EXTRACT function can now be parsed correctly. It is used to extract values from a specified +datetime field. + #### Modified Rules * The Java rule {% rule "java/bestpractices/UnusedPrivateField" %} (`java-bestpractices`) now ignores by @@ -74,6 +79,7 @@ of deprecations. * [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) * [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [kabroxiko](https://github.com/kabroxiko) * [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) +* [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [kabroxiko](https://github.com/kabroxiko) {% endtocmaker %} From ef90a7c64e2352207b561c61e08e579230be98da Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 14 Jun 2019 14:22:58 +0200 Subject: [PATCH 196/371] Update release notes, fixes #1845, refs #1847 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 87e1896642..9ece04f665 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -36,6 +36,7 @@ This is a {{ site.pmd.release_type }} release. * [#1848](https://github.com/pmd/pmd/issues/1848): \[java] Local classes should preserve their modifiers * java-bestpractices * [#1703](https://github.com/pmd/pmd/issues/1703): \[java] UnusedPrivateField on member annotated with lombok @Delegate + * [#1845](https://github.com/pmd/pmd/issues/1845): \[java] Regression in MethodReturnsInternalArray not handling enums * java-multithreading * [#1814](https://github.com/pmd/pmd/issues/1814): \[java] UnsynchronizedStaticFormatter documentation and implementation wrong * [#1815](https://github.com/pmd/pmd/issues/1815): \[java] False negative in UnsynchronizedStaticFormatter @@ -74,6 +75,7 @@ of deprecations. * [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) * [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [kabroxiko](https://github.com/kabroxiko) * [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) +* [#1847](https://github.com/pmd/pmd/pull/1847): \[java] Regression in MethodReturnsInternalArray not handling enums - [Artem](https://github.com/KroArtem) {% endtocmaker %} From e0afb8764188965082ed5aadb58ac831bc4e8cdc Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 14 Jun 2019 15:05:38 +0200 Subject: [PATCH 197/371] (doc) violationSuppressXPath with matches --- docs/pages/pmd/userdocs/suppressing_warnings.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/pages/pmd/userdocs/suppressing_warnings.md b/docs/pages/pmd/userdocs/suppressing_warnings.md index cf52782c0a..78860877d0 100644 --- a/docs/pages/pmd/userdocs/suppressing_warnings.md +++ b/docs/pages/pmd/userdocs/suppressing_warnings.md @@ -192,10 +192,10 @@ then the violation will be suppressed. Note that the query shouldn't be finding the violation nodes to suppress, but rather, finding a non-empty sequence of nodes when evaluated with the violation node as a context node. -The XPath version used by those queries is XPath 1.0, so it doesn't support e.g. -regex tests. This will be updated with PMD 7.0.0. +The XPath version used by those queries is XPath 1.0, so it doesn't support various XPath 2.0 +features. This will be updated with PMD 7.0.0. -For example, to suppress reporting specifically typed parameters which are unused: +For example, to suppress reporting specifically "String" parameters which are unused: ```xml <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter"> @@ -214,7 +214,13 @@ Another example, to suppress violations occurring in classes whose name contains <property name="violationSuppressXPath" value="./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'Bean')]"/> ``` -Note here the used of the `./ancestor::` axis instead of `//`. The latter would match +You can also use regex for string comparison. The next example suppresses violations in classes ending with `Bean`: +```xml +<property name="violationSuppressXPath" value="./ancestor::ClassOrInterfaceDeclaration[matches(@Image, '^.*Bean$')]"/> +``` + + +Note here the usage of the `./ancestor::` axis instead of `//`. The latter would match any ClassOrInterfaceDeclaration in the file, while the former matches only class declaration nodes that *enclose the violation node*, which is usually what you'd want. From 4f58cc695cd94c307de0aa9008d81192c81cda7d Mon Sep 17 00:00:00 2001 From: "artem.krosheninnikov" <artem.krosheninnikov@team.wrike.com> Date: Fri, 14 Jun 2019 18:03:51 +0300 Subject: [PATCH 198/371] fix #1666 wrong cdata rule description and examples --- pmd-xml/src/main/resources/category/xml/errorprone.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pmd-xml/src/main/resources/category/xml/errorprone.xml b/pmd-xml/src/main/resources/category/xml/errorprone.xml index 18c01924d6..c868b036f0 100644 --- a/pmd-xml/src/main/resources/category/xml/errorprone.xml +++ b/pmd-xml/src/main/resources/category/xml/errorprone.xml @@ -12,11 +12,11 @@ Rules to detect constructs that are either broken, extremely confusing or prone <rule name="MistypedCDATASection" language="xml" since="5.0" - message="Potentialy mistyped CDATA section with extra [ at beginning or ] at the end." + message="Potentially mistyped CDATA section with extra [ at beginning or ] at the end." class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_xml_errorprone.html#mistypedcdatasection"> <description> -An XML CDATA section begins with a <!CDATA[ marker, which has only one [, and ends with a ]]> marker, which has only two ]. +An XML CDATA section begins with a <![CDATA[ marker, which has only one [, and ends with a ]]> marker, which has two ]. </description> <priority>3</priority> <properties> @@ -30,7 +30,7 @@ An XML CDATA section begins with a <!CDATA[ marker, which has only one [, and </properties> <example> <![CDATA[ -An extra [ looks like <!CDATA[[]]>, and an extra ] looks like <!CDATA[]]]>. +An extra [ looks like <![CDATA[[]]>, and an extra ] looks like <![CDATA[]]]>. ]]> </example> </rule> From 75d40e741d8858e999c187eae925cd6ab81aa312 Mon Sep 17 00:00:00 2001 From: "artem.krosheninnikov" <artem.krosheninnikov@team.wrike.com> Date: Fri, 14 Jun 2019 23:51:41 +0300 Subject: [PATCH 199/371] fixed output typo --- pmd-xml/src/test/java/net/sourceforge/pmd/ant/PMDTaskTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-xml/src/test/java/net/sourceforge/pmd/ant/PMDTaskTest.java b/pmd-xml/src/test/java/net/sourceforge/pmd/ant/PMDTaskTest.java index 6d560cc89c..15955b0565 100644 --- a/pmd-xml/src/test/java/net/sourceforge/pmd/ant/PMDTaskTest.java +++ b/pmd-xml/src/test/java/net/sourceforge/pmd/ant/PMDTaskTest.java @@ -15,6 +15,6 @@ public class PMDTaskTest extends AbstractAntTestHelper { @Test public void testXML() { executeTarget("testXML"); - assertOutputContaining("Potentialy mistyped CDATA section with extra [ at beginning or ] at the end."); + assertOutputContaining("Potentially mistyped CDATA section with extra [ at beginning or ] at the end."); } } From e40359c9614dd462f94954277beac86688a45df5 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 15 Jun 2019 11:55:24 +0200 Subject: [PATCH 200/371] Update release notes, refs #1698 --- docs/pages/7_0_0_release_notes.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/pages/7_0_0_release_notes.md b/docs/pages/7_0_0_release_notes.md index c4c68d4bdc..4ee5e97ac6 100644 --- a/docs/pages/7_0_0_release_notes.md +++ b/docs/pages/7_0_0_release_notes.md @@ -34,7 +34,8 @@ This is a {{ site.pmd.release_type }} release. ### External Contributions -* [#1658](https://github.com/pmd/pmd/pull/1658/): \[core] Node support for Antlr-based languages +* [#1658](https://github.com/pmd/pmd/pull/1658): \[core] Node support for Antlr-based languages - [Matías Fraga](https://github.com/matifraga) +* [#1698](https://github.com/pmd/pmd/pull/1698): \[core] [swift] Antlr Base Parser adapter and Swift Implementation - [Lucas Soncini](https://github.com/lsoncini) {% endtocmaker %} From a7906a5da37b3b9d674678b1741fcc22e39908ca Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 15 Jun 2019 12:09:58 +0200 Subject: [PATCH 201/371] Don't swallow the exception --- .../java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java index 5742356905..6de13b7e0b 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrBaseParser.java @@ -41,9 +41,8 @@ public abstract class AntlrBaseParser implements Parser { try { return new AntlrTokenManager(getLexer(source), fileName); } catch (final IOException e) { - e.printStackTrace(); + throw new RuntimeException(e); } - return null; } @Override @@ -52,7 +51,7 @@ public abstract class AntlrBaseParser implements Parser { try { rootNode = getRootNode(getParser(getLexer(source))); } catch (final IOException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); + throw new ParseException(e); } return rootNode; } From ec3ba3e867b1fa8b1822b1152b7fc0af41bb1222 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 15 Jun 2019 12:12:14 +0200 Subject: [PATCH 202/371] Update release notes, refs #1774 --- docs/pages/7_0_0_release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/pages/7_0_0_release_notes.md b/docs/pages/7_0_0_release_notes.md index c4c68d4bdc..a74ae546f1 100644 --- a/docs/pages/7_0_0_release_notes.md +++ b/docs/pages/7_0_0_release_notes.md @@ -35,6 +35,7 @@ This is a {{ site.pmd.release_type }} release. ### External Contributions * [#1658](https://github.com/pmd/pmd/pull/1658/): \[core] Node support for Antlr-based languages +* [#1774](https://github.com/pmd/pmd/pull/1774): \[core] Antlr visitor rules - [Lucas Soncini](https://github.com/lsoncini) {% endtocmaker %} From 573fee621eb86a8e049ae0500640c5150bd366af Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 15 Jun 2019 18:58:47 +0200 Subject: [PATCH 203/371] Use latest build-tools --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7efbb21f56..07fc342ed7 100644 --- a/pom.xml +++ b/pom.xml @@ -283,7 +283,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <argLine>-Xmx512m -Dfile.encoding=${project.build.sourceEncoding}</argLine> - <pmd.build-tools.version>2</pmd.build-tools.version> + <pmd.build-tools.version>3-SNAPSHOT</pmd.build-tools.version> <pmd-designer.version>6.14.0</pmd-designer.version> </properties> From 44c360325319bf9f7f8286390ab7d09e90fd6040 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 15 Jun 2019 20:50:14 +0200 Subject: [PATCH 204/371] (doc) Improve documentation for ant task * Add installation section * Update supported sourceLanguages and improve description when this is needed * Add full build.xml example with auxclasspath configuration refs #1861, refs #1870 --- docs/pages/pmd/userdocs/tools/ant.md | 188 +++++++++++++++++++-------- 1 file changed, 131 insertions(+), 57 deletions(-) diff --git a/docs/pages/pmd/userdocs/tools/ant.md b/docs/pages/pmd/userdocs/tools/ant.md index d85c588782..5939a05ffa 100644 --- a/docs/pages/pmd/userdocs/tools/ant.md +++ b/docs/pages/pmd/userdocs/tools/ant.md @@ -14,6 +14,38 @@ author: > Runs a set of static code analysis rules on some source code files and generates a list of problems found. +### Installation + +Before you can use the `pmd` task in your ant `build.xml` file, you need to install PMD and its libraries into +ant's classpath, as described in [Optional Tasks](https://ant.apache.org/manual/install.html#optionalTasks). + +First you need to download PMD's binary distribution zip file. +Then you can either copy all "*.jar" files from PMD's lib folder into one of ANT's library folders +(`ANT_HOME/lib`, `${user.home}/.ant/lib`) or using the `-lib` command line parameter. + +However, the preferred way is to define a `<classpath>` for pmd itself and use this classpath when +adding the PMD Task. Assuming, you have extracted the PMD zip file to `/home/joe/pmd-bin-{{site.pmd.version}}`, +then you can make use of the PMD Task like this: + + <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"> + <classpath> + <fileset dir="/home/joe/pmd-bin-{{site.pmd.version}}/lib"> + <include name="*.jar"/> + </fileset> + </classpath> + </taskdef> + +Alternatively, a path can be defined and used via `classpathref`: + + <path id="pmd.classpath"> + <fileset dir="/home/joe/pmd-bin-{{site.pmd.version}}/lib"> + <include name="*.jar"/> + </fileset> + </path> + <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.classpath" /> + +The examples below won't repeat this taskdef element, as this is always required. + ### Parameters <table> @@ -93,7 +125,8 @@ Runs a set of static code analysis rules on some source code files and generates </table> -`formatter` nested element - specifies the format of and the files to which the report is written. +`formatter` nested element - specifies the format of and the files to which the report is written. You can +configure multiple formatters. <table> <tr><th>Name</th><th>Values</th></tr> @@ -120,47 +153,58 @@ Runs a set of static code analysis rules on some source code files and generates <dt>encoding</dt> <dd>Specifies the encoding to be used in the generated report (only honored when used with `toFile`). When rendering `toConsole` PMD will automatically detect the terminal's encoding and use it, unless the output is being redirected / piped, in which case `file.encoding` is used. See example below.</dd> <dt>linkPrefix</dt> - <dd>Used for linking to online HTMLized source (like <a href="xref/net/sourceforge/pmd/PMD.html">this</a>). See example below.</dd> + <dd>Used for linking to online HTMLized source (like <a href="https://maven.apache.org/plugins/maven-pmd-plugin/xref/org/apache/maven/plugins/pmd/PmdReport.html">this</a>). See example below. Note, this only works with [maven-jxr-plugin](https://maven.apache.org/jxr/maven-jxr-plugin/index.html).</dd> <dt>linePrefix</dt> - <dd>Used for linking to online HTMLized source (like <a href="xref/net/sourceforge/pmd/PMD.html#102">this</a>). See example below.</dd> + <dd>Used for linking to online HTMLized source (like <a href="https://maven.apache.org/plugins/maven-pmd-plugin/xref/org/apache/maven/plugins/pmd/PmdReport.html#L375">this</a>). See example below. Note, this only works with [maven-jxr-plugin](https://maven.apache.org/jxr/maven-jxr-plugin/index.html).</dd> </dl> </td> </tr> </table> -`classpath` nested element - useful for specifying custom rule. More details on the `classpath` -element are in the Ant documentation [here](http://ant.apache.org/manual/using.html#path) and there's +`classpath` nested element - useful for specifying custom rules. More details on the `classpath` +element are in the Ant documentation for [path-like structures](https://ant.apache.org/manual/using.html#path) and there's an example below. -`auxclasspath` nested element - extra classpath used for Type Resolution rules. +`auxclasspath` nested element - extra classpath used for type resolution. Some rules make use of type resolution +in order to avoid false positives. The `auxclasspath` is configured also with [path-like structures](https://ant.apache.org/manual/using.html#path). It should contain the compiled classes of the project that is being analyzed and all the compile time +dependencies. `sourceLanguage` nested element - specify which language (Java, Ecmascript, XML,...) -and the associated version (1.5, 1.6,...) +and the associated version (1.5, 1.6,...). This element is optional. The language is determined by file extension +automatically and the latest language version is used. -`ruleset` nested element - another way to specify rulesets. Here's an example: +`ruleset` nested element - another way to specify rulesets. You can specify multiple elements. Here's an example: <target name="pmd"> <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> <pmd shortFilenames="true"> - <sourceLanguage name="java" version="1.6"/> <ruleset>rulesets/java/design.xml</ruleset> <ruleset>java-basic</ruleset> - <formatter type="html" toFile="pmd_report.html"> - <param name="linkPrefix" value="http://pmd.sourceforge.net/xref/"/> - </formatter> <fileset dir="/usr/local/j2sdk1.4.1_01/src/"> <include name="java/lang/*.java"/> </fileset> </pmd> </target> +`fileset` nested element - specify the actual java source files, that PMD should analyze. You can use multiple +fileset elements. See [FileSet](https://ant.apache.org/manual/Types/fileset.html) for the syntax and usage. + ### Language version selection -The specific version of a language to be used for parsing is selected via the `sourceLanguage` +PMD selects the language automatically using the file extension. If multiple versions of a language are +supported, PMD uses the latest version as default. This is currently the case for Java only, which has +support for multiple versions. + +If a languages supports multiple versions, you can select a specific version here, so that e.g. rules, that only apply +to specific versions, are not executed. E.g. the rule {% rule "java/bestpractices/UseTryWithResources" %} only makes +sense with Java 1.7 and later. If your project uses Java 1.5, then you should configure the `sourceLanguage` +accordingly and this rule won't be executed. + +The specific version of a language to be used is selected via the `sourceLanguage` nested element. Possible values are: - <sourceLanguage name="apex" version=""/> + <sourceLanguage name="apex" version="45"/> <sourceLanguage name="ecmascript" version="3"/> <sourceLanguage name="java" version="1.3"/> <sourceLanguage name="java" version="1.4"/> @@ -169,6 +213,9 @@ nested element. Possible values are: <sourceLanguage name="java" version="1.7"/> <sourceLanguage name="java" version="1.8"/> <sourceLanguage name="java" version="9"/> + <sourceLanguage name="java" version="10"/> + <sourceLanguage name="java" version="11"/> + <sourceLanguage name="java" version="12"/> <!-- this is the default --> <sourceLanguage name="jsp" version=""/> <sourceLanguage name="pom" version=""/> <sourceLanguage name="plsql" version=""/> @@ -183,22 +230,21 @@ Several folks (most recently, Wouter Zelle) have written XSLT scripts which you can use to transform the XML report into nifty HTML. To do this, make sure you use the XML formatter in the PMD task invocation, i.e.: - <formatter type="xml" toFile="${tempbuild}/$report_pmd.xml"> + <formatter type="xml" toFile="${tempbuild}/report_pmd.xml"> <param name="encoding" value="UTF-8" /> <!-- enforce UTF-8 encoding for the XML --> </formatter> Then, after the end of the PMD task, do this: - <xslt in="${tempbuild}/$report_pmd.xml" style="${pmdConfig}/wz-pmd-report.xslt" out="${pmdOutput}/$report_pmd.html" /> + <xslt in="${tempbuild}/report_pmd.xml" style="${pmdConfig}/wz-pmd-report.xslt" out="${pmdOutput}/report_pmd.html" /> ### Examples +#### One ruleset + Running one ruleset to produce a HTML report (and printing the report to the console as well) using a file cache - <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> - <target name="pmd"> - <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> <pmd rulesetfiles="java-imports" cacheLocation="build/pmd/pmd.cache"> <formatter type="html" toFile="pmd_report.html" toConsole="true"/> <fileset dir="C:\j2sdk1.4.1_01\src\java\lang\"> @@ -207,12 +253,11 @@ Running one ruleset to produce a HTML report (and printing the report to the con </pmd> </target> +#### Multiple rulesets + Running multiple rulesets to produce an XML report with the same analysis cache - <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> - <target name="pmd"> - <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> <pmd rulesetfiles="rulesets/java/imports.xml,java-unusedcode" cacheLocation="build/pmd/pmd.cache"> <formatter type="xml" toFile="c:\pmd_report.xml"/> <fileset dir="C:\j2sdk1.4.1_01\src\java\lang\"> @@ -221,9 +266,19 @@ Running multiple rulesets to produce an XML report with the same analysis cache </pmd> </target> -Using a custom renderer +#### Custom renderer - <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> +Using a custom renderer. For this to work, you need to add you custom renderer to the classpath of PMD. This +need to be configured when defining the task: + + <path id="pmd.classpath"> + <fileset dir="/home/joe/pmd-bin-{{site.pmd.version}}/lib"> + <include name="*.jar"/> + </fileset> + <!-- the custom renderer is expected to be in /home/joe/pmd-addons/com/company/MyRenderer.class --> + <pathelement location="/home/joe/pmd-addons" /> + </path> + <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.classpath" /> <target name="pmd"> <pmd rulesetfiles="rulesets/java/design.xml"> @@ -234,27 +289,57 @@ Using a custom renderer </pmd> </target> -Using a classpath reference in the taskdef +#### Full example with auxclasspath - <path id="pmd.classpath"> - <pathelement location="${build}"/> - <fileset dir="/path/to/my/pmd/lib/"> - <include name="*.jar"/> - </fileset> - </path> +Full build file example using the correct auxclasspath configuration. +Your project needs to be compiled first which happens in the target "compile": - <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.classpath"/> + <project name="MyProject" default="pmd" basedir="."> + <property name="src" location="src"/> + <property name="build" location="build"/> + <path id="project.dependencies"> + <pathelement location="lib/third-party.jar"/> + <pathelement location="lib/xyz.jar"/> + </path> + <path id="pmd.classpath"> + <fileset dir="/home/joe/pmd-bin-{{site.pmd.version}}/lib"> + <include name="*.jar"/> + </fileset> + </path> + <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.classpath" /> + + <target name="init"> + <mkdir dir="${build}"/> + </target> + + <target name="compile" depends="init"> + <javac srcdir="${src}" destdir="${build}" classpathref="project.dependencies" + source="1.8" target="1.8" /> + </target> + + <target name="pmd" depends="compile"> + <pmd cacheLocation="${build}/pmd.cache"> + <auxclasspath> + <pathelement location="${build}"/> + <path refid="project.dependencies"/> + </auxclasspath> + <ruleset>rulesets/java/quickstart.xml</ruleset> + <formatter type="html" toFile="${build}/pmd_report.html"/> + <sourceLanguage name="java" version="1.8"/> + <fileset dir="${src}"> + <include name="**/*.java"/> + </fileset> + </pmd> + </target> + + <target name="clean"> + <delete dir="${build}"/> + </target> + </project> - <target name="pmd"> - <pmd rulesetfiles="rulesets/java/design.xml"> - <formatter type="net.sourceforge.pmd.renderers.HTMLRenderer" toFile="foo.html"/> - <fileset dir="/path/to/java/src"> - <include name="**/*.java"/> - </fileset> - </pmd> - </target> +You can run pmd then with `ant pmd`. -Getting verbose output +#### Getting verbose output [tom@hal bin]$ ant -v pmd Apache Ant version 1.6.2 compiled on July 16 2004 @@ -287,27 +372,16 @@ Getting verbose output Total time: 2 seconds [tom@hal bin]$ -An HTML report with the "linkPrefix" gizmo +#### HTML report with linkPrefix + +An HTML report with the "linkPrefix" and "linePrefix" properties: <target name="pmd"> <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> <pmd rulesetfiles="java-basic" shortFilenames="true"> <formatter type="html" toFile="pmd_report.html"> - <param name="linkPrefix" value="http://pmd.sourceforge.net/xref/"/> - </formatter> - <fileset dir="/usr/local/j2sdk1.4.1_01/src/"> - <include name="java/lang/*.java"/> - </fileset> - </pmd> - </target> - -An HTML report with the "linePrefix" gizmo - - <target name="pmd"> - <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> - <pmd rulesetfiles="java-basic" shortFilenames="true"> - <formatter type="html" toFile="pmd_report.html"> - <param name="linePrefix" value=".line"/> + <param name="linkPrefix" value="https://maven.apache.org/plugins/maven-pmd-plugin/xref/"/> + <param name="linePrefix" value="L"/> </formatter> <fileset dir="/usr/local/j2sdk1.4.1_01/src/"> <include name="java/lang/*.java"/> From 4ae973ed1bb7685c801fd4c50fb2de3b8f1fd56f Mon Sep 17 00:00:00 2001 From: "Travis CI (pmd-bot)" <andreas.dangel+pmd-bot@adangel.org> Date: Mon, 17 Jun 2019 01:01:32 +0000 Subject: [PATCH 205/371] Update documentation TRAVIS_JOB_NUMBER=3857.1 TRAVIS_COMMIT_RANGE=5c38c08e4df5...ecfcfaf8aeab --- docs/pages/pmd/rules/java/design.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/pages/pmd/rules/java/design.md b/docs/pages/pmd/rules/java/design.md index 3458d95fba..a1bba57d0c 100644 --- a/docs/pages/pmd/rules/java/design.md +++ b/docs/pages/pmd/rules/java/design.md @@ -2141,8 +2141,23 @@ public class MaybeAUtility { } ``` -**Use this rule by referencing it:** +**This rule has the following properties:** + +|Name|Default Value|Description|Multivalued| +|----|-------------|-----------|-----------| +|ignoredAnnotations|lombok.experimental.UtilityClass|Fully qualified names of the annotation types that should be ignored by this rule|yes. Delimiter is '\|'.| + +**Use this rule with the default properties by just referencing it:** ``` xml <rule ref="category/java/design.xml/UseUtilityClass" /> ``` +**Use this rule and customize it:** +``` xml +<rule ref="category/java/design.xml/UseUtilityClass"> + <properties> + <property name="ignoredAnnotations" value="lombok.experimental.UtilityClass" /> + </properties> +</rule> +``` + From 4867777097edea64050981e1ea6d66056bf1e490 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Mon, 17 Jun 2019 19:35:46 +0200 Subject: [PATCH 206/371] Fix checkstyle --- .../pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java | 1 - 1 file changed, 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java index cc74095ed2..04d44028d7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTSwitchLabeledThrowStatement.java @@ -5,7 +5,6 @@ package net.sourceforge.pmd.lang.java.ast; import net.sourceforge.pmd.annotation.InternalApi; - import net.sourceforge.pmd.lang.ast.AbstractNode; public class ASTSwitchLabeledThrowStatement extends AbstractJavaNode implements ASTSwitchLabeledRule { From 2271ae2d51f2c22fef5d54e683a46c9c6a3e8f50 Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Wed, 19 Jun 2019 08:52:42 -0400 Subject: [PATCH 207/371] [plsql] Add parenthesis equation support to Update --- pmd-plsql/etc/grammar/PldocAST.jjt | 2 +- .../pmd/lang/plsql/ast/UpdateStatementExample2.pls | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 9d10399bf1..d35ca98082 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -2386,7 +2386,7 @@ ASTUpdateSetClause UpdateSetClause() : ( ( "(" ( [ LOOKAHEAD(2) TableName() "." ] Column() (",")? )+ ")" "=" "(" Subquery() ")" ) | - ( [ LOOKAHEAD(2) TableName() "." ] Column() "=" ( LOOKAHEAD(1) "(" Subquery() ")" | Expression() | <_DEFAULT> ) ) + ( [ LOOKAHEAD(2) TableName() "." ] Column() "=" ( LOOKAHEAD(2) "(" Subquery() ")" | Expression() | <_DEFAULT> ) ) ) (",")? )+ diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/UpdateStatementExample2.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/UpdateStatementExample2.pls index 272fc16109..570ac1943b 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/UpdateStatementExample2.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/UpdateStatementExample2.pls @@ -58,4 +58,9 @@ update xsearch_wsh_active and revision = p_rev returning opp_id into v_opp_id; +update employees + set salary = salary + sal_raise, + salary = (salary - discounts) * sal_raise + where employee_id = emp_id; + END; From 56040b403cc3060560247fab8da837cb27240b26 Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 18:30:29 -0300 Subject: [PATCH 208/371] Remove deprecated method --- .../net/sourceforge/pmd/lang/swift/SwiftHandler.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java index 833ac7e00c..0ed33998ab 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/SwiftHandler.java @@ -4,12 +4,9 @@ package net.sourceforge.pmd.lang.swift; -import java.io.Writer; - import net.sourceforge.pmd.lang.AbstractPmdLanguageVersionHandler; import net.sourceforge.pmd.lang.Parser; import net.sourceforge.pmd.lang.ParserOptions; -import net.sourceforge.pmd.lang.VisitorStarter; import net.sourceforge.pmd.lang.XPathHandler; import net.sourceforge.pmd.lang.antlr.AntlrRuleViolationFactory; import net.sourceforge.pmd.lang.ast.xpath.DefaultASTXPathHandler; @@ -31,11 +28,4 @@ public class SwiftHandler extends AbstractPmdLanguageVersionHandler { public Parser getParser(final ParserOptions parserOptions) { return new SwiftParserAdapter(parserOptions); } - - @Override - public VisitorStarter getDumpFacade(final Writer writer, final String prefix, final boolean recurse) { - return rootNode -> { - // TODO: implement dump for AntlrBaseNode - }; - } } From 766ccf578ab064a0256fa27ed752bcad09af95d2 Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 20:02:50 -0300 Subject: [PATCH 209/371] Adjust some xpath rules --- .../net/sourceforge/pmd/lang/ast/AntlrBaseNode.java | 5 +++++ .../java/net/sourceforge/pmd/lang/ast/AntlrNode.java | 5 ----- .../src/main/resources/category/swift/errorprone.xml | 8 ++++---- .../pmd/lang/swift/rule/errorprone/ForceCastTest.java | 9 +++++++++ .../pmd/lang/swift/rule/errorprone/ForceTryTest.java | 9 +++++++++ .../pmd/lang/swift/rule/errorprone/xml/ForceCast.xml | 2 +- .../pmd/lang/swift/rule/errorprone/xml/ForceTry.xml | 2 +- .../sourceforge/pmd/testframework/RuleTestRunner.java | 11 ++--------- 8 files changed, 31 insertions(+), 20 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java index d45799021a..3aa170a932 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java @@ -90,6 +90,11 @@ public class AntlrBaseNode extends ParserRuleContext implements AntlrNode { } } + @Override + public String getImage() { + return getText(); + } + @Override public int jjtGetNumChildren() { return children == null ? 0 : children.size(); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java index ded0f8a900..d9c1cbcdfc 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java @@ -46,11 +46,6 @@ public interface AntlrNode extends Node { throw new UnsupportedOperationException("Out of scope for antlr current implementations"); } - @Override - default String getImage() { - throw new UnsupportedOperationException("Out of scope for antlr current implementations"); - } - @Override default void setImage(final String image) { throw new UnsupportedOperationException("Out of scope for antlr current implementations"); diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml index dcdeb020b8..8cf222090c 100644 --- a/pmd-swift/src/main/resources/category/swift/errorprone.xml +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -22,8 +22,8 @@ <properties> <property name="xpath"> <value> - <![CDATA[ -//TypeCastingOperatorContext[@Text = 'as!'] +<![CDATA[ +//TypeCastingOperatorContext[starts-with(@Image,'as!')] ]]> </value> </property> @@ -43,8 +43,8 @@ <properties> <property name="xpath"> <value> - <![CDATA[ -//TryOperatorContext[@Text = 'try!'] +<![CDATA[ +//TryOperatorContext[@Image='try!'] ]]> </value> </property> diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java index 3f5472591f..3f5bd77af2 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java @@ -4,8 +4,17 @@ package net.sourceforge.pmd.lang.swift.rule.errorprone; +import java.util.Collections; +import java.util.List; +import net.sourceforge.pmd.Rule; import net.sourceforge.pmd.testframework.PmdRuleTst; public class ForceCastTest extends PmdRuleTst { // no additional unit tests + + @Override + protected List<Rule> getRules() { + final Rule rule = findRule("category/swift/errorprone.xml", "ForceCast"); + return Collections.singletonList(rule); + } } diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java index 391985dd62..e776737a2d 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java @@ -4,8 +4,17 @@ package net.sourceforge.pmd.lang.swift.rule.errorprone; +import java.util.Collections; +import java.util.List; +import net.sourceforge.pmd.Rule; import net.sourceforge.pmd.testframework.PmdRuleTst; public class ForceTryTest extends PmdRuleTst { // no additional unit tests + + @Override + protected List<Rule> getRules() { + final Rule rule = findRule("category/swift/errorprone.xml", "ForceTry"); + return Collections.singletonList(rule); + } } diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml index 0530e4c194..4f31806bde 100644 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml @@ -17,7 +17,7 @@ NSNumber() as? Int <description><![CDATA[ Bad example #1 ]]></description> - <expected-problems>0</expected-problems> + <expected-problems>1</expected-problems> <code><![CDATA[ NSNumber() as! Int ]]></code> diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml index 03719309e1..a283d4b263 100644 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceTry.xml @@ -20,7 +20,7 @@ do { <description><![CDATA[ Bad example #1 ]]></description> - <expected-problems>0</expected-problems> + <expected-problems>1</expected-problems> <code><![CDATA[ func a() throws {} try! a() diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java b/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java index 7420567b0b..954eea11e8 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java @@ -67,19 +67,12 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { @Override protected List<TestDescriptor> getChildren() { List<Rule> rules = new ArrayList<>(instance.getRules()); - Collections.sort(rules, new Comparator<Rule>() { - @Override - public int compare(Rule o1, Rule o2) { - return o1.getName().compareTo(o2.getName()); - } - }); + rules.sort(Comparator.comparing(Rule::getName)); List<TestDescriptor> tests = new LinkedList<>(); for (Rule r : rules) { TestDescriptor[] ruleTests = instance.extractTestsFromXml(r); - for (TestDescriptor t : ruleTests) { - tests.add(t); - } + Collections.addAll(tests, ruleTests); } return tests; From 0f57fa460fa871097997d3191c8ddec4256eeaf6 Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 20:10:56 -0300 Subject: [PATCH 210/371] remove unused method --- .../pmd/lang/swift/rule/errorprone/ForceCastTest.java | 9 --------- .../pmd/lang/swift/rule/errorprone/ForceTryTest.java | 9 --------- 2 files changed, 18 deletions(-) diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java index 3f5bd77af2..3f5472591f 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java @@ -4,17 +4,8 @@ package net.sourceforge.pmd.lang.swift.rule.errorprone; -import java.util.Collections; -import java.util.List; -import net.sourceforge.pmd.Rule; import net.sourceforge.pmd.testframework.PmdRuleTst; public class ForceCastTest extends PmdRuleTst { // no additional unit tests - - @Override - protected List<Rule> getRules() { - final Rule rule = findRule("category/swift/errorprone.xml", "ForceCast"); - return Collections.singletonList(rule); - } } diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java index e776737a2d..391985dd62 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceTryTest.java @@ -4,17 +4,8 @@ package net.sourceforge.pmd.lang.swift.rule.errorprone; -import java.util.Collections; -import java.util.List; -import net.sourceforge.pmd.Rule; import net.sourceforge.pmd.testframework.PmdRuleTst; public class ForceTryTest extends PmdRuleTst { // no additional unit tests - - @Override - protected List<Rule> getRules() { - final Rule rule = findRule("category/swift/errorprone.xml", "ForceTry"); - return Collections.singletonList(rule); - } } From cf6b1ac2b298475add3cf5003235e2e553af87ea Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 20:14:13 -0300 Subject: [PATCH 211/371] remove old rule --- .../resources/category/swift/errorprone.xml | 21 --------------- .../swift/rule/errorprone/ForceCastTest.java | 11 -------- .../swift/rule/errorprone/xml/ForceCast.xml | 26 ------------------- 3 files changed, 58 deletions(-) delete mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java delete mode 100644 pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml index 8cf222090c..1df8d8e9dd 100644 --- a/pmd-swift/src/main/resources/category/swift/errorprone.xml +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -9,27 +9,6 @@ Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors. </description> - <rule name="ForceCast" - language="swift" - since="7.0" - message="Force casts should be avoided." - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_errorprone.html#forcecast"> - <description> - Force casts should be avoided. - </description> - <priority>3</priority> - <properties> - <property name="xpath"> - <value> -<![CDATA[ -//TypeCastingOperatorContext[starts-with(@Image,'as!')] -]]> - </value> - </property> - </properties> - </rule> - <rule name="ForceTry" language="swift" since="7.0" diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java deleted file mode 100644 index 3f5472591f..0000000000 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java +++ /dev/null @@ -1,11 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.swift.rule.errorprone; - -import net.sourceforge.pmd.testframework.PmdRuleTst; - -public class ForceCastTest extends PmdRuleTst { - // no additional unit tests -} diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml deleted file mode 100644 index 4f31806bde..0000000000 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<test-data - xmlns="http://pmd.sourceforge.net/rule-tests" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> - <test-code> - <description><![CDATA[ -Good example #1 - ]]></description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -NSNumber() as? Int - ]]></code> - <source-type>swift</source-type> - </test-code> - <test-code> - <description><![CDATA[ -Bad example #1 - ]]></description> - <expected-problems>1</expected-problems> - <code><![CDATA[ -NSNumber() as! Int - ]]></code> - <source-type>swift</source-type> - </test-code> -</test-data> \ No newline at end of file From dcfc7e822de5247feaa1a14f4dcc14dfe84251da Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 20:19:39 -0300 Subject: [PATCH 212/371] Autoformat --- .../pmd/testframework/RuleTestRunner.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java b/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java index 954eea11e8..299c3823f9 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java @@ -28,8 +28,8 @@ import org.junit.runners.model.Statement; import net.sourceforge.pmd.Rule; /** - * A JUnit Runner, that executes all declared rule tests in the class. - * It supports Before and After methods as well as TestRules. + * A JUnit Runner, that executes all declared rule tests in the class. It supports Before and After methods as well as + * TestRules. * * @author Andreas Dangel */ @@ -37,7 +37,7 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { private ConcurrentHashMap<TestDescriptor, Description> testDescriptions = new ConcurrentHashMap<>(); private final RuleTst instance; - public RuleTestRunner(Class<? extends RuleTst> testClass) throws InitializationError { + /* default */ RuleTestRunner(Class<? extends RuleTst> testClass) throws InitializationError { super(testClass); instance = createTestClass(); instance.setUp(); @@ -49,8 +49,8 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { if (description == null) { description = Description.createTestDescription(getTestClass().getJavaClass(), testCase.getRule().getName() + "::" - + testCase.getNumberInDocument() + " " - + testCase.getDescription().replaceAll("\n|\r", " ")); + + testCase.getNumberInDocument() + " " + + testCase.getDescription().replaceAll("\n|\r", " ")); testDescriptions.putIfAbsent(testCase, description); } return description; @@ -58,9 +58,10 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { /** * Checks whether this test class has additionally unit test methods. + * * @return true if there is at least one unit test method. */ - public boolean hasUnitTests() { + /* default */ boolean hasUnitTests() { return !getTestClass().getAnnotatedMethods(Test.class).isEmpty(); } @@ -97,8 +98,7 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { } /** - * Executes the actual test case. If there are Before, After, or TestRules present, - * they are executed accordingly. + * Executes the actual test case. If there are Before, After, or TestRules present, they are executed accordingly. * * @param testCase the PMD rule test case to be executed * @return a single statement which includes any rules, if present. @@ -106,7 +106,7 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { private Statement ruleTestBlock(final TestDescriptor testCase) { Statement statement = new Statement() { @Override - public void evaluate() throws Throwable { + public void evaluate() { instance.runTest(testCase); } }; @@ -127,7 +127,8 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { } private Statement withRules(final TestDescriptor testCase, Statement statement) { - List<TestRule> testRules = getTestClass().getAnnotatedFieldValues(instance, org.junit.Rule.class, TestRule.class); + List<TestRule> testRules = + getTestClass().getAnnotatedFieldValues(instance, org.junit.Rule.class, TestRule.class); return testRules.isEmpty() ? statement : new RunRules(statement, testRules, describeChild(testCase)); } From 5c02aadcf50ff368ee3f99445c0a7777c20acfde Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 20:21:27 -0300 Subject: [PATCH 213/371] Add final modifiers --- .../pmd/testframework/RuleTestRunner.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java b/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java index 299c3823f9..b85e3f5184 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/testframework/RuleTestRunner.java @@ -37,14 +37,14 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { private ConcurrentHashMap<TestDescriptor, Description> testDescriptions = new ConcurrentHashMap<>(); private final RuleTst instance; - /* default */ RuleTestRunner(Class<? extends RuleTst> testClass) throws InitializationError { + /* default */ RuleTestRunner(final Class<? extends RuleTst> testClass) throws InitializationError { super(testClass); instance = createTestClass(); instance.setUp(); } @Override - protected Description describeChild(TestDescriptor testCase) { + protected Description describeChild(final TestDescriptor testCase) { Description description = testDescriptions.get(testCase); if (description == null) { description = Description.createTestDescription(getTestClass().getJavaClass(), @@ -67,12 +67,12 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { @Override protected List<TestDescriptor> getChildren() { - List<Rule> rules = new ArrayList<>(instance.getRules()); + final List<Rule> rules = new ArrayList<>(instance.getRules()); rules.sort(Comparator.comparing(Rule::getName)); - List<TestDescriptor> tests = new LinkedList<>(); - for (Rule r : rules) { - TestDescriptor[] ruleTests = instance.extractTestsFromXml(r); + final List<TestDescriptor> tests = new LinkedList<>(); + for (final Rule r : rules) { + final TestDescriptor[] ruleTests = instance.extractTestsFromXml(r); Collections.addAll(tests, ruleTests); } @@ -82,14 +82,14 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { private RuleTst createTestClass() throws InitializationError { try { return (RuleTst) getTestClass().getOnlyConstructor().newInstance(); - } catch (Exception e) { + } catch (final Exception e) { throw new InitializationError(e); } } @Override - protected void runChild(TestDescriptor testCase, RunNotifier notifier) { - Description description = describeChild(testCase); + protected void runChild(final TestDescriptor testCase, final RunNotifier notifier) { + final Description description = describeChild(testCase); if (isIgnored(testCase)) { notifier.fireTestIgnored(description); } else { @@ -116,24 +116,24 @@ public class RuleTestRunner extends ParentRunner<TestDescriptor> { return statement; } - private Statement withBefores(Statement statement) { - List<FrameworkMethod> befores = getTestClass().getAnnotatedMethods(Before.class); + private Statement withBefores(final Statement statement) { + final List<FrameworkMethod> befores = getTestClass().getAnnotatedMethods(Before.class); return befores.isEmpty() ? statement : new RunBefores(statement, befores, instance); } - private Statement withAfters(Statement statement) { - List<FrameworkMethod> afters = getTestClass().getAnnotatedMethods(After.class); + private Statement withAfters(final Statement statement) { + final List<FrameworkMethod> afters = getTestClass().getAnnotatedMethods(After.class); return afters.isEmpty() ? statement : new RunAfters(statement, afters, instance); } private Statement withRules(final TestDescriptor testCase, Statement statement) { - List<TestRule> testRules = + final List<TestRule> testRules = getTestClass().getAnnotatedFieldValues(instance, org.junit.Rule.class, TestRule.class); return testRules.isEmpty() ? statement : new RunRules(statement, testRules, describeChild(testCase)); } @Override - protected boolean isIgnored(TestDescriptor child) { + protected boolean isIgnored(final TestDescriptor child) { return TestDescriptor.inRegressionTestMode() && !child.isRegressionTest(); } } From a81e68f6dabea448b8d72112b0216355d6836033 Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Thu, 20 Jun 2019 20:36:42 -0300 Subject: [PATCH 214/371] Added UnavailableFunctionRule --- .../UnavailableFunctionRule.java | 57 ++++++++++ .../category/swift/bestpractices.xml | 11 ++ .../UnavailableFunctionTest.java | 6 + .../bestpractices/xml/UnavailableFunction.xml | 104 ++++++++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java create mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionTest.java create mode 100644 pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/UnavailableFunction.xml diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java new file mode 100644 index 0000000000..f2ee19ef7a --- /dev/null +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java @@ -0,0 +1,57 @@ +package net.sourceforge.pmd.lang.swift.rule.bestpractices; + +import java.util.List; +import net.sourceforge.pmd.lang.swift.AbstractSwiftRule; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; + +public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { + + private static final String AVAILABLE_UNAVAILABLE = "@available(*,unavailable)"; + private static final String FATAL_ERROR = "fatalError"; + + @Override + public Void visitFunctionDeclaration(final SwiftParser.FunctionDeclarationContext ctx) { + if (ctx == null) { + return null; + } + + if (shouldIncludeUnavailableModifier(ctx.functionBody().codeBlock())) { + SwiftParser.AttributesContext attributes = ctx.functionHead().attributes(); + if (attributes == null || !hasUnavailableModifier(attributes.attribute())) { + addViolation(data, ctx); + } + } + + return super.visitFunctionDeclaration(ctx); + } + + @Override + public Void visitInitializerDeclaration(final SwiftParser.InitializerDeclarationContext ctx) { + if (ctx == null) { + return null; + } + + if (shouldIncludeUnavailableModifier(ctx.initializerBody().codeBlock())) { + SwiftParser.AttributesContext attributes = ctx.initializerHead().attributes(); + if (attributes == null || !hasUnavailableModifier(attributes.attribute())) { + addViolation(data, ctx); + } + } + + return super.visitInitializerDeclaration(ctx); + } + + private Boolean shouldIncludeUnavailableModifier(final SwiftParser.CodeBlockContext ctx) { + if (ctx == null || ctx.statements() == null) { + return false; + } + + List<SwiftParser.StatementContext> statements = ctx.statements().statement(); + + return statements.size() == 1 && FATAL_ERROR.equals(statements.get(0).getStart().getText()); + } + + private Boolean hasUnavailableModifier(final List<SwiftParser.AttributeContext> attributes) { + return attributes.stream().anyMatch(atr -> AVAILABLE_UNAVAILABLE.equals(atr.getText())); + } +} diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml index 46a03545fe..bba425f9ab 100644 --- a/pmd-swift/src/main/resources/category/swift/bestpractices.xml +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -19,4 +19,15 @@ Rules which enforce generally accepted best practices. </description> <priority>2</priority> </rule> + + <rule name="UnavailableFunction" + since="7.0" + message="Unimplemented functions should be marked as unavailable." + class="net.sourceforge.pmd.lang.swift.rule.bestpractices.UnavailableFunctionRule" + externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_bestpractices.html#unavailablefunctionrule"> + <description> + Unimplemented functions should be marked as unavailable. + </description> + <priority>2</priority> + </rule> </ruleset> diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionTest.java new file mode 100644 index 0000000000..0f3851f7ee --- /dev/null +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionTest.java @@ -0,0 +1,6 @@ +package net.sourceforge.pmd.lang.swift.rule.bestpractices; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class UnavailableFunctionTest extends PmdRuleTst { +} diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/UnavailableFunction.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/UnavailableFunction.xml new file mode 100644 index 0000000000..d50310fc9f --- /dev/null +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/UnavailableFunction.xml @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + <test-code> + <description><![CDATA[ +Good example #1 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +class ViewController: UIViewController { + @available(*, unavailable) + public required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Good example #2 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +func jsonValue(_ jsonString: String) -> NSObject { + let data = jsonString.data(using: .utf8)! + let result = try! JSONSerialization.jsonObject(with: data, options: []) + if let dict = (result as? [String: Any])?.bridge() { + return dict + } else if let array = (result as? [Any])?.bridge() { + return array + } + fatalError() +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Good example #3 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +@OtherAttribute @available(*, unavailable) +func doSomething() { + fatalError("doSomething() has not been implemented") +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Good example #4 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +func doSomething() { + fatalErrorNotTheTriggeringOne("doSomething() has not been implemented") +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Bad example #1 + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +class ViewController: UIViewController { + public required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Bad example #2 + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +func doSomething() { + fatalError("doSomething() has not been implemented") +} + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Bad example #3 + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +@OtherAttribute +func doSomething() { + fatalError("doSomething() has not been implemented") +} + ]]></code> + <source-type>swift</source-type> + </test-code> +</test-data> \ No newline at end of file From ca39fc36e6f368d71a2adce5fb845ac85444feb1 Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 21:31:48 -0300 Subject: [PATCH 215/371] PR review --- .../net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java | 4 ++-- .../java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java | 5 ----- .../main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java | 5 +++++ pmd-swift/src/main/resources/category/swift/errorprone.xml | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java index 48434eca01..55cb99e124 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java @@ -67,7 +67,7 @@ public class AntlrTokenManager implements TokenManager { @Override public void syntaxError(final Recognizer<?, ?> recognizer, final Object offendingSymbol, final int line, - final int charPositionInLine, final String msg, final RecognitionException ex) { + final int charPositionInLine, final String msg, final RecognitionException ex) { throw new ANTLRSyntaxError(msg, line, charPositionInLine, ex); } } @@ -78,7 +78,7 @@ public class AntlrTokenManager implements TokenManager { private final int column; /* default */ ANTLRSyntaxError(final String msg, final int line, final int column, - final RecognitionException cause) { + final RecognitionException cause) { super(msg, cause); this.line = line; this.column = column; diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java index 3aa170a932..d45799021a 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java @@ -90,11 +90,6 @@ public class AntlrBaseNode extends ParserRuleContext implements AntlrNode { } } - @Override - public String getImage() { - return getText(); - } - @Override public int jjtGetNumChildren() { return children == null ? 0 : children.size(); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java index d9c1cbcdfc..a246f368de 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrNode.java @@ -51,6 +51,11 @@ public interface AntlrNode extends Node { throw new UnsupportedOperationException("Out of scope for antlr current implementations"); } + @Override + default String getImage() { + throw new UnsupportedOperationException("Out of scope for antlr current implementations"); + } + @Override default boolean hasImageEqualTo(final String image) { throw new UnsupportedOperationException("Out of scope for antlr current implementations"); diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml index 1df8d8e9dd..31e36a0538 100644 --- a/pmd-swift/src/main/resources/category/swift/errorprone.xml +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -23,7 +23,7 @@ <property name="xpath"> <value> <![CDATA[ -//TryOperatorContext[@Image='try!'] +//TryOperatorContext[@Text='try!'] ]]> </value> </property> From af1b8a12aaf2f9792d337b5f786ac78ff39454c9 Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Thu, 20 Jun 2019 21:51:05 -0300 Subject: [PATCH 216/371] Optimizing rule --- .../swift/rule/bestpractices/UnavailableFunctionRule.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java index f2ee19ef7a..7de31a32cc 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java @@ -22,7 +22,7 @@ public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { } } - return super.visitFunctionDeclaration(ctx); + return null; } @Override @@ -38,7 +38,7 @@ public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { } } - return super.visitInitializerDeclaration(ctx); + return null; } private Boolean shouldIncludeUnavailableModifier(final SwiftParser.CodeBlockContext ctx) { From a2756dcdcd9c06d82580ed23c50b58a49a04c57e Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 21:53:36 -0300 Subject: [PATCH 217/371] Return null by default on getimage --- .../java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java index d45799021a..f3440f0f7c 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java @@ -90,6 +90,11 @@ public class AntlrBaseNode extends ParserRuleContext implements AntlrNode { } } + @Override + public String getImage() { + return null; + } + @Override public int jjtGetNumChildren() { return children == null ? 0 : children.size(); From de006b17f4ccbe63b39176c503142b40ec6f422a Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 22:22:29 -0300 Subject: [PATCH 218/371] Fix pmd test --- docs/_data/sidebars/pmd_sidebar.yml | 15 ++++++++++ docs/pages/pmd/rules/swift.md | 21 ++++++++++++++ docs/pages/pmd/rules/swift/bestpractices.md | 26 +++++++++++++++++ docs/pages/pmd/rules/swift/errorprone.md | 29 +++++++++++++++++++ .../pmd/it/BinaryDistributionIT.java | 2 +- 5 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 docs/pages/pmd/rules/swift.md create mode 100644 docs/pages/pmd/rules/swift/bestpractices.md create mode 100644 docs/pages/pmd/rules/swift/errorprone.md diff --git a/docs/_data/sidebars/pmd_sidebar.yml b/docs/_data/sidebars/pmd_sidebar.yml index 0841643c75..9fdb63eaa8 100644 --- a/docs/_data/sidebars/pmd_sidebar.yml +++ b/docs/_data/sidebars/pmd_sidebar.yml @@ -253,6 +253,21 @@ entries: - title: Security output: web, pdf url: /pmd_rules_vf_security.html + - title: null + output: web, pdf + subfolders: + - title: Swift Rules + output: web, pdf + subfolderitems: + - title: Index + output: web, pdf + url: /pmd_rules_swift.html + - title: Best Practices + output: web, pdf + url: /pmd_rules_swift_bestpractices.html + - title: Error Prone + output: web, pdf + url: /pmd_rules_swift_errorprone.html - title: null output: web, pdf subfolders: diff --git a/docs/pages/pmd/rules/swift.md b/docs/pages/pmd/rules/swift.md new file mode 100644 index 0000000000..47e34a46c7 --- /dev/null +++ b/docs/pages/pmd/rules/swift.md @@ -0,0 +1,21 @@ +--- +title: Swift Rules +tags: [rule_references, swift] +summary: Index of all built-in rules available for Swift +language_name: Swift +permalink: pmd_rules_swift.html +folder: pmd/rules +--- +<!-- DO NOT EDIT THIS FILE. This file is generated. --> +## Best Practices + +{% include callout.html content="Rules which enforce generally accepted best practices." %} + +* [ProhibitedInterfaceBuilder](pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder): Creating views using Interface Builder should be avoided. + +## Error Prone + +{% include callout.html content="Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors." %} + +* [ForceTry](pmd_rules_swift_errorprone.html#forcetry): Force tries should be avoided. + diff --git a/docs/pages/pmd/rules/swift/bestpractices.md b/docs/pages/pmd/rules/swift/bestpractices.md new file mode 100644 index 0000000000..abc5bab0c7 --- /dev/null +++ b/docs/pages/pmd/rules/swift/bestpractices.md @@ -0,0 +1,26 @@ +--- +title: Best Practices +summary: Rules which enforce generally accepted best practices. +permalink: pmd_rules_swift_bestpractices.html +folder: pmd/rules/swift +sidebaractiveurl: /pmd_rules_swift.html +editmepath: ../pmd-swift/src/main/resources/category/swift/bestpractices.xml +keywords: Best Practices, ProhibitedInterfaceBuilder +language: Swift +--- +<!-- DO NOT EDIT THIS FILE. This file is generated from file ../pmd-swift/src/main/resources/category/swift/bestpractices.xml. --> +## ProhibitedInterfaceBuilder + +**Since:** PMD 7.0 + +**Priority:** Medium High (2) + +Creating views using Interface Builder should be avoided. + +**This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.swift.rule.bestpractices.ProhibitedInterfaceBuilderRule](https://github.com/pmd/pmd/blob/master/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java) + +**Use this rule by referencing it:** +``` xml +<rule ref="category/swift/bestpractices.xml/ProhibitedInterfaceBuilder" /> +``` + diff --git a/docs/pages/pmd/rules/swift/errorprone.md b/docs/pages/pmd/rules/swift/errorprone.md new file mode 100644 index 0000000000..d94255a80a --- /dev/null +++ b/docs/pages/pmd/rules/swift/errorprone.md @@ -0,0 +1,29 @@ +--- +title: Error Prone +summary: Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors. +permalink: pmd_rules_swift_errorprone.html +folder: pmd/rules/swift +sidebaractiveurl: /pmd_rules_swift.html +editmepath: ../pmd-swift/src/main/resources/category/swift/errorprone.xml +keywords: Error Prone, ForceTry +language: Swift +--- +<!-- DO NOT EDIT THIS FILE. This file is generated from file ../pmd-swift/src/main/resources/category/swift/errorprone.xml. --> +## ForceTry + +**Since:** PMD 7.0 + +**Priority:** Medium (3) + +Force tries should be avoided. + +**This rule is defined by the following XPath expression:** +``` xpath +//TryOperatorContext[@Text='try!'] +``` + +**Use this rule by referencing it:** +``` xml +<rule ref="category/swift/errorprone.xml/ForceTry" /> +``` + diff --git a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java index 5da0b5f5a1..d057485d97 100644 --- a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java +++ b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java @@ -95,7 +95,7 @@ public class BinaryDistributionIT { ExecutionResult result; result = PMDExecutor.runPMD(tempDir, "-h"); - result.assertExecutionResult(1, "apex, ecmascript, java, jsp, plsql, pom, vf, vm, wsdl, xml, xsl"); + result.assertExecutionResult(1, "apex, ecmascript, java, jsp, plsql, pom, swift, vf, vm, wsdl, xml, xsl"); result = PMDExecutor.runPMDRules(tempDir, srcDir, "src/test/resources/rulesets/sample-ruleset.xml"); result.assertExecutionResult(4, "JumbledIncrementer.java:8:"); From 07c19ff6310a1887f92b9fd493c3d805298a0581 Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 22:27:37 -0300 Subject: [PATCH 219/371] Add another xpath rule --- .../resources/category/swift/errorprone.xml | 22 ++++++++++++++++ .../swift/rule/errorprone/ForceCastTest.java | 11 ++++++++ .../swift/rule/errorprone/xml/ForceCast.xml | 26 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java create mode 100644 pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml index 31e36a0538..07292f30fc 100644 --- a/pmd-swift/src/main/resources/category/swift/errorprone.xml +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -9,6 +9,28 @@ Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors. </description> + <rule name="ForceCast" + language="swift" + since="7.0" + message="Force casts should be avoided." + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_errorprone.html#forcecast"> + <description> + Force casts should be avoided. + </description> + <priority>3</priority> + <properties> + <property name="xpath"> + <value> + <![CDATA[ +//TypeCastingOperatorContext[starts-with(@Text,'as!')] +]]> + </value> + </property> + <property name="version" value="2.0"/> + </properties> + </rule> + <rule name="ForceTry" language="swift" since="7.0" diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java new file mode 100644 index 0000000000..249f5f0dc3 --- /dev/null +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java @@ -0,0 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.swift.rule.errorprone; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class ForceCastTest extends PmdRuleTst { + // no additional unit tests +} \ No newline at end of file diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml new file mode 100644 index 0000000000..6fb25a7c5f --- /dev/null +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/errorprone/xml/ForceCast.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test-data + xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + <test-code> + <description><![CDATA[ +Good example #1 + ]]></description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +NSNumber() as? Int + ]]></code> + <source-type>swift</source-type> + </test-code> + <test-code> + <description><![CDATA[ +Bad example #1 + ]]></description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +NSNumber() as! Int + ]]></code> + <source-type>swift</source-type> + </test-code> +</test-data> \ No newline at end of file From 93a52b766982009805a1842f1825e6238da56006 Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Thu, 20 Jun 2019 22:50:57 -0300 Subject: [PATCH 220/371] Fix checkstyle --- .../pmd/lang/swift/rule/errorprone/ForceCastTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java index 249f5f0dc3..3f5472591f 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/errorprone/ForceCastTest.java @@ -8,4 +8,4 @@ import net.sourceforge.pmd.testframework.PmdRuleTst; public class ForceCastTest extends PmdRuleTst { // no additional unit tests -} \ No newline at end of file +} From 623764ebb013414dc94ecca427e0097544cf45ca Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Fri, 21 Jun 2019 01:35:40 -0300 Subject: [PATCH 221/371] Minor fixes --- docs/pages/pmd/rules/swift.md | 2 ++ docs/pages/pmd/rules/swift/bestpractices.md | 17 +++++++++++++++- docs/pages/pmd/rules/swift/errorprone.md | 20 ++++++++++++++++++- .../UnavailableFunctionRule.java | 11 +++++++--- .../category/swift/bestpractices.xml | 4 ++-- .../UnavailableFunctionTest.java | 5 +++++ 6 files changed, 52 insertions(+), 7 deletions(-) diff --git a/docs/pages/pmd/rules/swift.md b/docs/pages/pmd/rules/swift.md index 47e34a46c7..bf73529619 100644 --- a/docs/pages/pmd/rules/swift.md +++ b/docs/pages/pmd/rules/swift.md @@ -12,10 +12,12 @@ folder: pmd/rules {% include callout.html content="Rules which enforce generally accepted best practices." %} * [ProhibitedInterfaceBuilder](pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder): Creating views using Interface Builder should be avoided. +* [UnavailableFunction](pmd_rules_swift_bestpractices.html#unavailablefunction): Unimplemented functions should be marked as unavailable. ## Error Prone {% include callout.html content="Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors." %} +* [ForceCast](pmd_rules_swift_errorprone.html#forcecast): Force casts should be avoided. * [ForceTry](pmd_rules_swift_errorprone.html#forcetry): Force tries should be avoided. diff --git a/docs/pages/pmd/rules/swift/bestpractices.md b/docs/pages/pmd/rules/swift/bestpractices.md index abc5bab0c7..7c0ad9b18b 100644 --- a/docs/pages/pmd/rules/swift/bestpractices.md +++ b/docs/pages/pmd/rules/swift/bestpractices.md @@ -5,7 +5,7 @@ permalink: pmd_rules_swift_bestpractices.html folder: pmd/rules/swift sidebaractiveurl: /pmd_rules_swift.html editmepath: ../pmd-swift/src/main/resources/category/swift/bestpractices.xml -keywords: Best Practices, ProhibitedInterfaceBuilder +keywords: Best Practices, ProhibitedInterfaceBuilder, UnavailableFunction language: Swift --- <!-- DO NOT EDIT THIS FILE. This file is generated from file ../pmd-swift/src/main/resources/category/swift/bestpractices.xml. --> @@ -24,3 +24,18 @@ Creating views using Interface Builder should be avoided. <rule ref="category/swift/bestpractices.xml/ProhibitedInterfaceBuilder" /> ``` +## UnavailableFunction + +**Since:** PMD 7.0 + +**Priority:** Medium (3) + +Unimplemented functions should be marked as unavailable. + +**This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.swift.rule.bestpractices.UnavailableFunctionRule](https://github.com/pmd/pmd/blob/master/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java) + +**Use this rule by referencing it:** +``` xml +<rule ref="category/swift/bestpractices.xml/UnavailableFunction" /> +``` + diff --git a/docs/pages/pmd/rules/swift/errorprone.md b/docs/pages/pmd/rules/swift/errorprone.md index d94255a80a..a9fa53761a 100644 --- a/docs/pages/pmd/rules/swift/errorprone.md +++ b/docs/pages/pmd/rules/swift/errorprone.md @@ -5,10 +5,28 @@ permalink: pmd_rules_swift_errorprone.html folder: pmd/rules/swift sidebaractiveurl: /pmd_rules_swift.html editmepath: ../pmd-swift/src/main/resources/category/swift/errorprone.xml -keywords: Error Prone, ForceTry +keywords: Error Prone, ForceCast, ForceTry language: Swift --- <!-- DO NOT EDIT THIS FILE. This file is generated from file ../pmd-swift/src/main/resources/category/swift/errorprone.xml. --> +## ForceCast + +**Since:** PMD 7.0 + +**Priority:** Medium (3) + +Force casts should be avoided. + +**This rule is defined by the following XPath expression:** +``` xpath +//TypeCastingOperatorContext[starts-with(@Text,'as!')] +``` + +**Use this rule by referencing it:** +``` xml +<rule ref="category/swift/errorprone.xml/ForceCast" /> +``` + ## ForceTry **Since:** PMD 7.0 diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java index 7de31a32cc..9daa297273 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java @@ -1,6 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + package net.sourceforge.pmd.lang.swift.rule.bestpractices; import java.util.List; + import net.sourceforge.pmd.lang.swift.AbstractSwiftRule; import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; @@ -16,7 +21,7 @@ public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { } if (shouldIncludeUnavailableModifier(ctx.functionBody().codeBlock())) { - SwiftParser.AttributesContext attributes = ctx.functionHead().attributes(); + final SwiftParser.AttributesContext attributes = ctx.functionHead().attributes(); if (attributes == null || !hasUnavailableModifier(attributes.attribute())) { addViolation(data, ctx); } @@ -32,7 +37,7 @@ public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { } if (shouldIncludeUnavailableModifier(ctx.initializerBody().codeBlock())) { - SwiftParser.AttributesContext attributes = ctx.initializerHead().attributes(); + final SwiftParser.AttributesContext attributes = ctx.initializerHead().attributes(); if (attributes == null || !hasUnavailableModifier(attributes.attribute())) { addViolation(data, ctx); } @@ -46,7 +51,7 @@ public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { return false; } - List<SwiftParser.StatementContext> statements = ctx.statements().statement(); + final List<SwiftParser.StatementContext> statements = ctx.statements().statement(); return statements.size() == 1 && FATAL_ERROR.equals(statements.get(0).getStart().getText()); } diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml index bba425f9ab..de97e48b59 100644 --- a/pmd-swift/src/main/resources/category/swift/bestpractices.xml +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -24,10 +24,10 @@ Rules which enforce generally accepted best practices. since="7.0" message="Unimplemented functions should be marked as unavailable." class="net.sourceforge.pmd.lang.swift.rule.bestpractices.UnavailableFunctionRule" - externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_bestpractices.html#unavailablefunctionrule"> + externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_bestpractices.html#unavailablefunction"> <description> Unimplemented functions should be marked as unavailable. </description> - <priority>2</priority> + <priority>3</priority> </rule> </ruleset> diff --git a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionTest.java b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionTest.java index 0f3851f7ee..e1d00f69d5 100644 --- a/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionTest.java +++ b/pmd-swift/src/test/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionTest.java @@ -1,6 +1,11 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + package net.sourceforge.pmd.lang.swift.rule.bestpractices; import net.sourceforge.pmd.testframework.PmdRuleTst; public class UnavailableFunctionTest extends PmdRuleTst { + // no additional unit tests } From 7425bbe54c8b0b91c42b8826a5471cd645e75357 Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Fri, 21 Jun 2019 01:40:29 -0300 Subject: [PATCH 222/371] Remove test --- .../bestpractices/xml/UnavailableFunction.xml | 38 ------------------- 1 file changed, 38 deletions(-) diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/UnavailableFunction.xml b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/UnavailableFunction.xml index d50310fc9f..8c9210ec87 100644 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/UnavailableFunction.xml +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/rule/bestpractices/xml/UnavailableFunction.xml @@ -39,31 +39,6 @@ func jsonValue(_ jsonString: String) -> NSObject { </test-code> <test-code> <description><![CDATA[ -Good example #3 - ]]></description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -@OtherAttribute @available(*, unavailable) -func doSomething() { - fatalError("doSomething() has not been implemented") -} - ]]></code> - <source-type>swift</source-type> - </test-code> - <test-code> - <description><![CDATA[ -Good example #4 - ]]></description> - <expected-problems>0</expected-problems> - <code><![CDATA[ -func doSomething() { - fatalErrorNotTheTriggeringOne("doSomething() has not been implemented") -} - ]]></code> - <source-type>swift</source-type> - </test-code> - <test-code> - <description><![CDATA[ Bad example #1 ]]></description> <expected-problems>1</expected-problems> @@ -82,19 +57,6 @@ Bad example #2 ]]></description> <expected-problems>1</expected-problems> <code><![CDATA[ -func doSomething() { - fatalError("doSomething() has not been implemented") -} - ]]></code> - <source-type>swift</source-type> - </test-code> - <test-code> - <description><![CDATA[ -Bad example #3 - ]]></description> - <expected-problems>1</expected-problems> - <code><![CDATA[ -@OtherAttribute func doSomething() { fatalError("doSomething() has not been implemented") } From 499a31ca850e20c9da16de4c3d4844846228b478 Mon Sep 17 00:00:00 2001 From: Matias Fraga <matias.fraga@mercadolibre.com> Date: Fri, 21 Jun 2019 13:26:08 -0300 Subject: [PATCH 223/371] Enhance rules description --- .../src/main/resources/category/swift/bestpractices.xml | 2 ++ pmd-swift/src/main/resources/category/swift/errorprone.xml | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml index 46a03545fe..194910248e 100644 --- a/pmd-swift/src/main/resources/category/swift/bestpractices.xml +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -16,6 +16,8 @@ Rules which enforce generally accepted best practices. externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder"> <description> Creating views using Interface Builder should be avoided. + Defining views by code allows the compiler to detect issues that otherwise will be runtime errors. + It's difficult to review the auto-generated code and allow concurrent modifications of those files. </description> <priority>2</priority> </rule> diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml index 07292f30fc..857555d3be 100644 --- a/pmd-swift/src/main/resources/category/swift/errorprone.xml +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -16,7 +16,8 @@ class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_errorprone.html#forcecast"> <description> - Force casts should be avoided. + Force casts should be avoided. This may lead to a crash if it's not used carefully. + For example assuming a JSON property has a given type, or your reused Cell has a certain contract. </description> <priority>3</priority> <properties> @@ -38,7 +39,7 @@ class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_errorprone.html#forcetry"> <description> - Force tries should be avoided. + Force tries should be avoided. If the code being wrapped happens to raise and exception, our application will crash. </description> <priority>3</priority> <properties> From 6d9066067db88c70a3a480dc87eb50913fd59498 Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Fri, 21 Jun 2019 16:36:23 -0300 Subject: [PATCH 225/371] Improved rule description --- .../src/main/resources/category/swift/bestpractices.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml index 7be7ac182a..037dd27794 100644 --- a/pmd-swift/src/main/resources/category/swift/bestpractices.xml +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -19,7 +19,7 @@ Rules which enforce generally accepted best practices. Defining views by code allows the compiler to detect issues that otherwise will be runtime errors. It's difficult to review the auto-generated code and allow concurrent modifications of those files. </description> - <priority>2</priority> + <priority>4</priority> </rule> <rule name="UnavailableFunction" @@ -28,7 +28,10 @@ Rules which enforce generally accepted best practices. class="net.sourceforge.pmd.lang.swift.rule.bestpractices.UnavailableFunctionRule" externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_bestpractices.html#unavailablefunction"> <description> - Unimplemented functions should be marked as unavailable. + Due to Objective-C and Swift interoperability some functions are often required to be implemented but + aren't really needed. Is extremely common that the sole implementation of the functions consist of throwing + a fatal error. Marking this functions as unavailable prevents them from being executed while still making + the compiler happy. </description> <priority>3</priority> </rule> From 107ccbf145073ed34d5165f3775165fa09ef0004 Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Fri, 21 Jun 2019 18:56:23 -0300 Subject: [PATCH 226/371] Added docs --- docs/pages/pmd/rules/swift.md | 8 ++++---- docs/pages/pmd/rules/swift/bestpractices.md | 9 +++++++-- docs/pages/pmd/rules/swift/errorprone.md | 5 +++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/pages/pmd/rules/swift.md b/docs/pages/pmd/rules/swift.md index bf73529619..c8419e49b1 100644 --- a/docs/pages/pmd/rules/swift.md +++ b/docs/pages/pmd/rules/swift.md @@ -11,13 +11,13 @@ folder: pmd/rules {% include callout.html content="Rules which enforce generally accepted best practices." %} -* [ProhibitedInterfaceBuilder](pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder): Creating views using Interface Builder should be avoided. -* [UnavailableFunction](pmd_rules_swift_bestpractices.html#unavailablefunction): Unimplemented functions should be marked as unavailable. +* [ProhibitedInterfaceBuilder](pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder): Creating views using Interface Builder should be avoided. Defining views by code allow... +* [UnavailableFunction](pmd_rules_swift_bestpractices.html#unavailablefunction): Due to Objective-C and Swift interoperability some functions are often required to be implemented... ## Error Prone {% include callout.html content="Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors." %} -* [ForceCast](pmd_rules_swift_errorprone.html#forcecast): Force casts should be avoided. -* [ForceTry](pmd_rules_swift_errorprone.html#forcetry): Force tries should be avoided. +* [ForceCast](pmd_rules_swift_errorprone.html#forcecast): Force casts should be avoided. This may lead to a crash if it's not used carefully. Fo... +* [ForceTry](pmd_rules_swift_errorprone.html#forcetry): Force tries should be avoided. If the code being wrapped happens to raise and exception, our appl... diff --git a/docs/pages/pmd/rules/swift/bestpractices.md b/docs/pages/pmd/rules/swift/bestpractices.md index 7c0ad9b18b..7c3deadd09 100644 --- a/docs/pages/pmd/rules/swift/bestpractices.md +++ b/docs/pages/pmd/rules/swift/bestpractices.md @@ -13,9 +13,11 @@ language: Swift **Since:** PMD 7.0 -**Priority:** Medium High (2) +**Priority:** Medium Low (4) Creating views using Interface Builder should be avoided. +Defining views by code allows the compiler to detect issues that otherwise will be runtime errors. +It's difficult to review the auto-generated code and allow concurrent modifications of those files. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.swift.rule.bestpractices.ProhibitedInterfaceBuilderRule](https://github.com/pmd/pmd/blob/master/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java) @@ -30,7 +32,10 @@ Creating views using Interface Builder should be avoided. **Priority:** Medium (3) -Unimplemented functions should be marked as unavailable. +Due to Objective-C and Swift interoperability some functions are often required to be implemented but +aren't really needed. Is extremely common that the sole implementation of the functions consist of throwing +a fatal error. Marking this functions as unavailable prevents them from being executed while still making +the compiler happy. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.swift.rule.bestpractices.UnavailableFunctionRule](https://github.com/pmd/pmd/blob/master/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java) diff --git a/docs/pages/pmd/rules/swift/errorprone.md b/docs/pages/pmd/rules/swift/errorprone.md index a9fa53761a..8ff91722a4 100644 --- a/docs/pages/pmd/rules/swift/errorprone.md +++ b/docs/pages/pmd/rules/swift/errorprone.md @@ -15,7 +15,8 @@ language: Swift **Priority:** Medium (3) -Force casts should be avoided. +Force casts should be avoided. This may lead to a crash if it's not used carefully. +For example assuming a JSON property has a given type, or your reused Cell has a certain contract. **This rule is defined by the following XPath expression:** ``` xpath @@ -33,7 +34,7 @@ Force casts should be avoided. **Priority:** Medium (3) -Force tries should be avoided. +Force tries should be avoided. If the code being wrapped happens to raise and exception, our application will crash. **This rule is defined by the following XPath expression:** ``` xpath From 2da9708d20a226e56bbab67ed3e6be4aca05ee16 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@adangel.org> Date: Fri, 21 Dec 2018 12:30:18 +0100 Subject: [PATCH 227/371] [java] The rule CloseResource should deal with IO stream as default Fixes #1000 --- docs/pages/release_notes.md | 7 + .../rule/errorprone/CloseResourceRule.java | 16 +- .../resources/category/java/errorprone.xml | 38 ++- .../rule/errorprone/xml/CloseResource.xml | 314 +++++++++++++----- 4 files changed, 275 insertions(+), 100 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 24e0613aa7..a73b425b9f 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -44,6 +44,11 @@ datetime field. * The Java rule {% rule "java/design/UseUtilityClass" %} (`java-design`) has a new property `ignoredAnnotations`. By default, classes that are annotated with Lombok's `@UtilityClass` are ignored now. +* The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) now by default searches + for any unclosed `java.io.Closable` resource. This includes now the standard `java.io.*Stream` classes. + Previously only SQL-related resources were considered by this rule. The types can still be configured + via the `types` property. + ### Fixed Issues * java @@ -53,6 +58,8 @@ datetime field. * [#1845](https://github.com/pmd/pmd/issues/1845): \[java] Regression in MethodReturnsInternalArray not handling enums * java-design * [#1094](https://github.com/pmd/pmd/issues/1094): \[java] UseUtilityClass should be LombokAware +* java-errorprone + * [#1000](https://github.com/pmd/pmd/issues/1000): \[java] The rule CloseResource should deal with IO stream as default * java-multithreading * [#1814](https://github.com/pmd/pmd/issues/1814): \[java] UnsynchronizedStaticFormatter documentation and implementation wrong * [#1815](https://github.com/pmd/pmd/issues/1815): \[java] False negative in UnsynchronizedStaticFormatter diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index 2febbcd39f..537dbb1da6 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -36,6 +36,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTType; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.java.ast.ASTVariableInitializer; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; +import net.sourceforge.pmd.lang.java.typeresolution.TypeHelper; import net.sourceforge.pmd.properties.PropertyDescriptor; /** @@ -69,7 +70,7 @@ public class CloseResourceRule extends AbstractJavaRule { private static final PropertyDescriptor<List<String>> TYPES_DESCRIPTOR = stringListProperty("types") .desc("Affected types") - .defaultValues("java.sql.Connection", "java.sql.Statement", "java.sql.ResultSet") + .defaultValues("java.io.Closeable", "java.sql.Connection", "java.sql.Statement", "java.sql.ResultSet") .delim(',').build(); private static final PropertyDescriptor<Boolean> USE_CLOSE_AS_DEFAULT_TARGET = @@ -136,7 +137,7 @@ public class CloseResourceRule extends AbstractJavaRule { if (ref.jjtGetChild(0) instanceof ASTClassOrInterfaceType) { ASTClassOrInterfaceType clazz = (ASTClassOrInterfaceType) ref.jjtGetChild(0); - if (clazz.getType() != null && types.contains(clazz.getType().getName()) + if (isResourceTypeOrSubtype(clazz) || clazz.getType() == null && simpleTypes.contains(toSimpleType(clazz.getImage())) && !clazz.isReferenceToClassSameCompilationUnit() || types.contains(clazz.getImage()) && !clazz.isReferenceToClassSameCompilationUnit()) { @@ -154,6 +155,17 @@ public class CloseResourceRule extends AbstractJavaRule { } } + private boolean isResourceTypeOrSubtype(ASTClassOrInterfaceType refType) { + if (refType.getType() != null) { + for (String type : types) { + if (TypeHelper.isA(refType, type)) { + return true; + } + } + } + return false; + } + private boolean hasNullInitializer(ASTLocalVariableDeclaration var) { ASTVariableInitializer init = var.getFirstDescendantOfType(ASTVariableInitializer.class); if (init != null) { diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 7e59da309f..daf7900c5a 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -1008,23 +1008,39 @@ public class MyClass implements Cloneable{ class="net.sourceforge.pmd.lang.java.rule.errorprone.CloseResourceRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#closeresource"> <description> -Ensure that resources (like Connection, Statement, and ResultSet objects) are always closed after use. +Ensure that resources (like `java.sql.Connection`, `java.sql.Statement`, and `java.sql.ResultSet` objects +and any subtype of `java.io.Closeable`) are always closed after use. +Failing to do so might result in resource leaks. + +Note: It suffices to configure the super type, e.g. `java.io.Closable`, so that this rule automatically triggers +on any subtype (e.g. `java.io.FileInputStream`). </description> <priority>3</priority> <example> <![CDATA[ public class Bar { - public void foo() { - Connection c = pool.getConnection(); - try { - // do stuff - } catch (SQLException ex) { - // handle exception - } finally { - // oops, should close the connection using 'close'! - // c.close(); + public void withSQL() { + Connection c = pool.getConnection(); + try { + // do stuff + } catch (SQLException ex) { + // handle exception + } finally { + // oops, should close the connection using 'close'! + // c.close(); + } + } + + public void withFile() { + InputStream file = new FileInputStream(new File("/tmp/foo")); + try { + int c = file.in(); + } catch (IOException e) { + // handle exception + } finally { + // TODO: close file + } } - } } ]]> </example> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 46409718e9..7b03334c68 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -4,12 +4,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> <test-code> - <description><![CDATA[ -connection is closed, ok - ]]></description> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <description>connection is closed, ok</description> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Foo { void bar() { Connection c = pool.getConnection(); @@ -22,12 +22,10 @@ public class Foo { } ]]></code> </test-code> - <test-code> - <description><![CDATA[ -connection not closed, should have failed - ]]></description> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <test-code> + <description>connection not closed, should have failed</description> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>1</expected-problems> <code><![CDATA[ import java.sql.*; @@ -42,11 +40,8 @@ public class Foo { ]]></code> </test-code> <test-code> - <description><![CDATA[ -ResultSet not closed, should have failed - ]]></description> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> - + <description>ResultSet not closed, should have failed</description> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>1</expected-problems> <code><![CDATA[ import java.sql.*; @@ -60,12 +55,9 @@ public class Foo { ]]></code> </test-code> <test-code> - <description><![CDATA[ -Statement not closed, should have failed - ]]></description> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <description>Statement not closed, should have failed</description> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>1</expected-problems> - <code><![CDATA[ import java.sql.*; public class Foo { @@ -92,29 +84,22 @@ public class Foo { } ]]></code-fragment> <test-code> - <description><![CDATA[ -Bad, no closeTargets properties for statements - ]]></description> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <description>Bad, no closeTargets properties for statements</description> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>2</expected-problems> <code-ref id="executeQuery"/> - </test-code> <test-code> - <description><![CDATA[ -Ok, closeTargets properties for statements - ]]></description> + <description>Ok, closeTargets properties for statements</description> <rule-property name="closeTargets">MyHelper.close,cleanup</rule-property> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>0</expected-problems> <code-ref id="executeQuery"/> </test-code> - + <test-code> - <description><![CDATA[ -Add type param - ]]></description> - <rule-property name="types">ObjectInputStream</rule-property> + <description>Add type param</description> + <rule-property name="types">java.io.ObjectInputStream</rule-property> <expected-problems>1</expected-problems> <code><![CDATA[ import java.io.*; @@ -129,13 +114,11 @@ readExternal(aStream); } ]]></code> </test-code> - <test-code> - <description><![CDATA[ -OK - ]]></description> + <test-code> + <description>OK with custom closeTargets</description> <rule-property name="closeTargets">MyHelper.close</rule-property> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ import java.sql.*; @@ -151,11 +134,9 @@ public class Foo { ]]></code> </test-code> <test-code> - <description><![CDATA[ -New use case - ]]></description> + <description>New use case: commit</description> <rule-property name="closeTargets">commit,close</rule-property> - <rule-property name="types">DAOTransaction,Connection,Statement,ResulSet</rule-property> + <rule-property name="types">DAOTransaction,java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>1</expected-problems> <expected-linenumbers>8</expected-linenumbers> <code><![CDATA[ @@ -184,13 +165,10 @@ public class Foo { ]]></code> </test-code> - <test-code> - <description><![CDATA[ -[1964798] 3 bugs in CloseResourceRule : Case failing with complete name - ]]></description> + <description>[1964798] 3 bugs in CloseResourceRule : Case failing with complete name</description> <rule-property name="closeTargets">MyHelper.MyClose</rule-property> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ import java.sql.*; @@ -205,14 +183,11 @@ public class Foo { } ]]></code> </test-code> - - + <test-code> - <description><![CDATA[ -[1964798] 3 bugs in CloseResourceRule : null object is passed to close conection method (1) - ]]></description> - <rule-property name="closeTargets">this.closeConnection</rule-property> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <description>[1964798] 3 bugs in CloseResourceRule : null object is passed to close conection method (1)</description> + <rule-property name="closeTargets">this.closeConnection</rule-property> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>1</expected-problems> <code><![CDATA[ import java.sql.*; @@ -227,13 +202,11 @@ public class Foo { } } ]]></code> - </test-code> + </test-code> <test-code> - <description><![CDATA[ -[1964798] 3 bugs in CloseResourceRule : null object is passed to close conection method (2) - ]]></description> - <rule-property name="closeTargets">this.closeConnection</rule-property> - <rule-property name="types">Connection,Statement,ResultSet</rule-property> + <description>[1964798] 3 bugs in CloseResourceRule : null object is passed to close conection method (2)</description> + <rule-property name="closeTargets">this.closeConnection</rule-property> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>1</expected-problems> <code><![CDATA[ import java.sql.*; @@ -248,11 +221,9 @@ public class Foo { } } ]]></code> - </test-code> - <test-code> - <description><![CDATA[ -[1964798] 3 bugs in CloseResourceRule : If connection is returned, we should not log a violation. - ]]></description> + </test-code> + <test-code> + <description>[1964798] 3 bugs in CloseResourceRule : If connection is returned, we should not log a violation.</description> <rule-property name="types">Connection,Statement,ResultSet</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ @@ -264,14 +235,10 @@ public class Foo { } ]]></code> </test-code> - <test-code reinitializeRule="true"> - <description><![CDATA[ -invoke an external method that close the resource -bug 2920057 - ]]></description> - <rule-property name="closeTargets">closeStatement,closeStatement,closeResultSet,closeConnexion - </rule-property> - <rule-property name="types">PreparedStatement,Statement,ResultSet,Connection</rule-property> + <test-code reinitializeRule="true"> + <description>invoke an external method that close the resource: bug 2920057</description> + <rule-property name="closeTargets">closeStatement,closeStatement,closeResultSet,closeConnexion</rule-property> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet,java.sql.PreparedStatement</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ import java.sql.*; @@ -301,13 +268,9 @@ public class StructureFactory { ]]></code> </test-code> <test-code reinitializeRule="true"> - <description><![CDATA[ -invoke an external method that closes the resource, but one is not the right method and an another is not the right variable -see bug 2920057 - ]]></description> - <rule-property name="closeTargets">closeStatement,closeStatement,closeResultSet,closeConnexion - </rule-property> - <rule-property name="types">PreparedStatement,Statement,ResultSet,Connection</rule-property> + <description>invoke an external method that closes the resource, but one is not the right method and an another is not the right variable: see bug 2920057</description> + <rule-property name="closeTargets">closeStatement,closeStatement,closeResultSet,closeConnexion</rule-property> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet,java.sql.PreparedStatement</rule-property> <expected-problems>2</expected-problems> <code><![CDATA[ import java.sql.*; @@ -341,6 +304,8 @@ public class StructureFactory { <description>#1011 CloseResource Rule ignores Constructors</description> <expected-problems>1</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Test { public Test() { Connection c = pool.getConnection(); @@ -352,6 +317,8 @@ public class Test { <description>#1011 CloseResource Rule ignores Constructors - closed in finally</description> <expected-problems>0</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Test { public Test() { Connection c; @@ -368,6 +335,8 @@ public class Test { <description>#1011 CloseResource Rule ignores Constructors - not a problem - instance variable</description> <expected-problems>0</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Test { Connection c; public Test() { @@ -380,6 +349,8 @@ public class Test { <description>#1029 No instance level check in the close resource rule</description> <expected-problems>0</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Test { Connection c; public void doIt() { @@ -392,6 +363,10 @@ public class Test { <description>#947 CloseResource rule fails if field is marked with annotation</description> <expected-problems>2</expected-problems> <code><![CDATA[ +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; + public class CloseResourceRuleBug { public void foo() { try { @@ -427,9 +402,9 @@ public class Test { } ]]></code> </test-code> - + <test-code> - <description><![CDATA[Custom close method, should be ok]]></description> + <description>Custom close method, should be ok</description> <rule-property name="closeTargets">cleanup</rule-property> <rule-property name="types">MyClass</rule-property> <expected-problems>0</expected-problems> @@ -449,9 +424,11 @@ public class Foo { </test-code> <test-code> <description>bug #1131 CloseResource should complain if code between declaration of resource and try: Code between declaration and try, should fail</description> - <rule-property name="types">Connection</rule-property> + <rule-property name="types">java.sql.Connection</rule-property> <expected-problems>1</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Foo { void bar() { String test = ""; @@ -470,9 +447,11 @@ public class Foo { </test-code> <test-code> <description>bug #1131 CloseResource should complain if code between declaration of resource and try: Creation inside try, ok</description> - <rule-property name="types">Connection</rule-property> + <rule-property name="types">java.sql.Connection</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Foo { void bar() { String test = ""; @@ -495,9 +474,11 @@ public class Foo { </test-code> <test-code> <description>bug #1131 CloseResource should complain if code between declaration of resource and try: No sentences between creation and try, ok</description> - <rule-property name="types">Connection</rule-property> + <rule-property name="types">java.sql.Connection</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Foo { void bar() { String test = ""; @@ -521,6 +502,8 @@ public class Foo { <description>#1259 CloseResource rule ignores conditionals within finally blocks</description> <expected-problems>1</expected-problems> <code><![CDATA[ +import java.sql.Connection; + public class Bar { public void foo() { Connection c = pool.getConnection(); @@ -541,6 +524,9 @@ public class Bar { <description>#1375 CloseResource not detected properly - ok</description> <expected-problems>1</expected-problems> <code><![CDATA[ +import java.sql.ResultSet; +import java.sql.Statement; + public class Foo { void bar() { ResultSet rs; @@ -561,6 +547,9 @@ public class Foo { <description>#1375 CloseResource not detected properly - false negative</description> <expected-problems>1</expected-problems> <code><![CDATA[ +import java.sql.ResultSet; +import java.sql.Statement; + public class Foo { void bar() { ResultSet rs = null; @@ -579,11 +568,16 @@ public class Foo { </test-code> <test-code> <description>#1372 False Negative for CloseResource rule.</description> - <rule-property name="types">Connection,Statement,ResultSet,PreparedStatement</rule-property> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet,java.sql.PreparedStatement</rule-property> <rule-property name="closeTargets">closeLocalResources,closeResultSet</rule-property> <expected-problems>1</expected-problems> - <expected-linenumbers>8</expected-linenumbers> + <expected-linenumbers>13</expected-linenumbers> <code><![CDATA[ +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.sql.PreparedStatement; + public class CloseResourceTest { public Object selectOne(final int val, final int val2) { getCurrentSession().doWork(new Work() { @@ -616,6 +610,10 @@ public class CloseResourceTest { <rule-property name="closeTargets">closeConnection,closeCloseable,closeReader,closeResource,closeResultSet,closeStream,closeStatement</rule-property> <expected-problems>0</expected-problems> <code><![CDATA[ +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; + public class CloseResource { public void querySomething(Connection connection) { Statement stmt = null; // it complains this is not closed @@ -645,6 +643,9 @@ public class CloseResource { <rule-property name="closeAsDefaultTarget">false</rule-property> <expected-problems>2</expected-problems> <code><![CDATA[ +import java.sql.ResultSet; +import java.sql.Statement; + public class CloseResource { public void doSomething() { Statement stmt = connection.createStatement(); @@ -671,6 +672,145 @@ public class Test { static class Statement { } +} + ]]></code> + </test-code> + + <test-code> + <description>CloseResource for input streams - not ok</description> + <rule-property name="types">java.io.InputStream</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.io.*; + +public class CloseResourceTest { + public static void main(String[] args) { + InputStream in = null; + try { + in = new FileInputStream(new File("/tmp/foo")); + in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>CloseResource for file input streams - not ok</description> + <rule-property name="types">java.io.InputStream</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.io.*; + +public class CloseResourceTest { + public static void main(String[] args) { + FileInputStream in = null; + try { + in = new FileInputStream(new File("/tmp/foo")); + in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>CloseResource for input streams - ok</description> + <rule-property name="types">java.io.InputStream</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.io.*; + +public class CloseResourceTest { + public static void main(String[] args) { + InputStream in = null; + try { + in = new FileInputStream(new File("/tmp/foo")); + in.read(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + in.close(); + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>CloseResource for input streams - ok try-with-resources</description> + <rule-property name="types">java.io.InputStream</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.io.*; + +public class CloseResourceTest { + public static void main(String[] args) { + try (InputStream in = new FileInputStream(new File("/tmp/foo"))) { + in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>CloseResource for closable - not ok</description> + <rule-property name="types">java.io.Closeable</rule-property> + <expected-problems>2</expected-problems> + <code><![CDATA[ +import java.io.*; + +public class CloseResourceTest { + public static void main(String[] args) { + InputStream in = null; + OutputStream in2 = null; + try { + in = new FileInputStream(new File("/tmp/foo")); + in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>CloseResource for closable by default - not ok</description> + <expected-problems>3</expected-problems> + <expected-linenumbers>5,6,16</expected-linenumbers> + <code><![CDATA[ +import java.io.*; + +public class CloseResourceTest { + public static void main(String[] args) { + InputStream in = null; + OutputStream in2 = null; + try { + in = new FileInputStream(new File("/tmp/foo")); + in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void bar() { + InputStream file = new FileInputStream(new File("/tmp/foo")); + try { + int c = file.in(); + } catch (IOException e) { + // handle exception + } finally { + // TODO: close file + } + } } ]]></code> </test-code> From eab41508da322832cbb136ce875406d51e552dc1 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@adangel.org> Date: Sun, 23 Dec 2018 17:45:49 +0100 Subject: [PATCH 228/371] [java] CloseResource: Use java.lang.AutoCloseable by default --- .../pmd/lang/java/rule/errorprone/CloseResourceRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index 537dbb1da6..67a50d17ba 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -70,7 +70,7 @@ public class CloseResourceRule extends AbstractJavaRule { private static final PropertyDescriptor<List<String>> TYPES_DESCRIPTOR = stringListProperty("types") .desc("Affected types") - .defaultValues("java.io.Closeable", "java.sql.Connection", "java.sql.Statement", "java.sql.ResultSet") + .defaultValues("java.lang.AutoCloseable") .delim(',').build(); private static final PropertyDescriptor<Boolean> USE_CLOSE_AS_DEFAULT_TARGET = From 1e03ae5c060bd27ab4171fa1423bb6504313efe2 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 22 Jun 2019 12:24:43 +0200 Subject: [PATCH 229/371] [java] CloseResource - add allowedResourceTypes property for exceptions By default, ByteArrayOutputStream and StringWriter are excluded from the rule. --- docs/pages/release_notes.md | 3 +- .../rule/errorprone/CloseResourceRule.java | 107 +++++++++++++----- .../closeresource/CustomStringWriter.java | 18 +++ .../rule/errorprone/xml/CloseResource.xml | 79 +++++++++++++ 4 files changed, 175 insertions(+), 32 deletions(-) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/closeresource/CustomStringWriter.java diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index a73b425b9f..8c4982cdf0 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -47,7 +47,8 @@ datetime field. * The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) now by default searches for any unclosed `java.io.Closable` resource. This includes now the standard `java.io.*Stream` classes. Previously only SQL-related resources were considered by this rule. The types can still be configured - via the `types` property. + via the `types` property. Some resources do not need to be closed (e.g. `ByteArrayOutputStream`). These + exceptions can be configured via the new property `allowedResourceTypes`. ### Fixed Issues diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index 67a50d17ba..e422446314 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -8,19 +8,22 @@ import static net.sourceforge.pmd.properties.PropertyFactory.booleanProperty; import static net.sourceforge.pmd.properties.PropertyFactory.stringListProperty; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.jaxen.JaxenException; +import net.sourceforge.pmd.RuleContext; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTArgumentList; import net.sourceforge.pmd.lang.java.ast.ASTBlock; import net.sourceforge.pmd.lang.java.ast.ASTBlockStatement; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; -import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit; import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTExpression; import net.sourceforge.pmd.lang.java.ast.ASTIfStatement; import net.sourceforge.pmd.lang.java.ast.ASTLocalVariableDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; @@ -32,9 +35,10 @@ import net.sourceforge.pmd.lang.java.ast.ASTReferenceType; import net.sourceforge.pmd.lang.java.ast.ASTReturnStatement; import net.sourceforge.pmd.lang.java.ast.ASTStatementExpression; import net.sourceforge.pmd.lang.java.ast.ASTTryStatement; -import net.sourceforge.pmd.lang.java.ast.ASTType; +import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclarator; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.java.ast.ASTVariableInitializer; +import net.sourceforge.pmd.lang.java.ast.TypeNode; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; import net.sourceforge.pmd.lang.java.typeresolution.TypeHelper; import net.sourceforge.pmd.properties.PropertyDescriptor; @@ -77,30 +81,40 @@ public class CloseResourceRule extends AbstractJavaRule { booleanProperty("closeAsDefaultTarget") .desc("Consider 'close' as a target by default").defaultValue(true).build(); + private static final PropertyDescriptor<List<String>> ALLOWED_RESOURCE_TYPES = + stringListProperty("allowedResourceTypes") + .desc("Exact class names that do not need to be closed") + .defaultValues("java.io.ByteArrayOutputStream", "java.io.StringWriter") + .build(); + public CloseResourceRule() { definePropertyDescriptor(CLOSE_TARGETS_DESCRIPTOR); definePropertyDescriptor(TYPES_DESCRIPTOR); definePropertyDescriptor(USE_CLOSE_AS_DEFAULT_TARGET); + definePropertyDescriptor(ALLOWED_RESOURCE_TYPES); } @Override - public Object visit(ASTCompilationUnit node, Object data) { - if (closeTargets.isEmpty() && getProperty(CLOSE_TARGETS_DESCRIPTOR) != null) { + public void start(RuleContext ctx) { + closeTargets.clear(); + simpleTypes.clear(); + types.clear(); + + if (getProperty(CLOSE_TARGETS_DESCRIPTOR) != null) { closeTargets.addAll(getProperty(CLOSE_TARGETS_DESCRIPTOR)); } if (getProperty(USE_CLOSE_AS_DEFAULT_TARGET) && !closeTargets.contains("close")) { closeTargets.add("close"); } - if (types.isEmpty() && getProperty(TYPES_DESCRIPTOR) != null) { + if (getProperty(TYPES_DESCRIPTOR) != null) { types.addAll(getProperty(TYPES_DESCRIPTOR)); } - if (simpleTypes.isEmpty() && getProperty(TYPES_DESCRIPTOR) != null) { + if (getProperty(TYPES_DESCRIPTOR) != null) { for (String type : getProperty(TYPES_DESCRIPTOR)) { simpleTypes.add(toSimpleType(type)); } } - return super.visit(node, data); } private static String toSimpleType(String fullyQualifiedClassName) { @@ -125,43 +139,72 @@ public class CloseResourceRule extends AbstractJavaRule { } private void checkForResources(Node node, Object data) { - List<ASTLocalVariableDeclaration> vars = node.findDescendantsOfType(ASTLocalVariableDeclaration.class); - List<ASTVariableDeclaratorId> ids = new ArrayList<>(); + List<ASTLocalVariableDeclaration> localVars = node.findDescendantsOfType(ASTLocalVariableDeclaration.class); + List<ASTVariableDeclarator> vars = new ArrayList<>(); + Map<ASTVariableDeclaratorId, TypeNode> ids = new HashMap<>(); + + // find all variable declarators + for (ASTLocalVariableDeclaration localVar : localVars) { + vars.addAll(localVar.findChildrenOfType(ASTVariableDeclarator.class)); + } // find all variable references to Connection objects - for (ASTLocalVariableDeclaration var : vars) { - ASTType type = var.getTypeNode(); + for (ASTVariableDeclarator var : vars) { + // get the type of the local var declaration + TypeNode type = ((ASTLocalVariableDeclaration) var.jjtGetParent()).getTypeNode(); - if (type != null && type.jjtGetChild(0) instanceof ASTReferenceType) { - ASTReferenceType ref = (ASTReferenceType) type.jjtGetChild(0); - if (ref.jjtGetChild(0) instanceof ASTClassOrInterfaceType) { - ASTClassOrInterfaceType clazz = (ASTClassOrInterfaceType) ref.jjtGetChild(0); - - if (isResourceTypeOrSubtype(clazz) - || clazz.getType() == null && simpleTypes.contains(toSimpleType(clazz.getImage())) - && !clazz.isReferenceToClassSameCompilationUnit() - || types.contains(clazz.getImage()) && !clazz.isReferenceToClassSameCompilationUnit()) { - - ASTVariableDeclaratorId id = var.getFirstDescendantOfType(ASTVariableDeclaratorId.class); - ids.add(id); + if (type != null && isResourceTypeOrSubtype(type)) { + if (var.hasInitializer()) { + // figure out the runtime type. If the variable is initialized, take the type from there + TypeNode runtimeType = var.getInitializer().getFirstChildOfType(ASTExpression.class); + if (runtimeType != null && !isAllowedResourceType(runtimeType)) { + ids.put(var.getVariableId(), runtimeType); } + } else { + ids.put(var.getVariableId(), type); } } } // if there are connections, ensure each is closed. - for (ASTVariableDeclaratorId x : ids) { - ensureClosed((ASTLocalVariableDeclaration) x.jjtGetParent().jjtGetParent(), x, data); + for (Map.Entry<ASTVariableDeclaratorId, TypeNode> entry : ids.entrySet()) { + ASTVariableDeclaratorId variableId = entry.getKey(); + ensureClosed((ASTLocalVariableDeclaration) variableId.jjtGetParent().jjtGetParent(), variableId, + entry.getValue(), data); } } - private boolean isResourceTypeOrSubtype(ASTClassOrInterfaceType refType) { + private boolean isResourceTypeOrSubtype(TypeNode refType) { if (refType.getType() != null) { for (String type : types) { if (TypeHelper.isA(refType, type)) { return true; } } + } else if (refType.jjtGetChild(0) instanceof ASTReferenceType) { + // no type information (probably missing auxclasspath) - use simple types + ASTReferenceType ref = (ASTReferenceType) refType.jjtGetChild(0); + if (ref.jjtGetChild(0) instanceof ASTClassOrInterfaceType) { + ASTClassOrInterfaceType clazz = (ASTClassOrInterfaceType) ref.jjtGetChild(0); + if (simpleTypes.contains(toSimpleType(clazz.getImage())) && !clazz.isReferenceToClassSameCompilationUnit() + || types.contains(clazz.getImage()) && !clazz.isReferenceToClassSameCompilationUnit()) { + return true; + } + } + } + return false; + } + + private boolean isAllowedResourceType(TypeNode refType) { + List<String> allowedResourceTypes = getProperty(ALLOWED_RESOURCE_TYPES); + if (refType.getType() != null && allowedResourceTypes != null) { + for (String type : allowedResourceTypes) { + // the check here must be a exact type match, since subclasses may override close() + // and actually require closing + if (TypeHelper.isExactlyA(refType, type)) { + return true; + } + } } return false; } @@ -180,7 +223,7 @@ public class CloseResourceRule extends AbstractJavaRule { return false; } - private void ensureClosed(ASTLocalVariableDeclaration var, ASTVariableDeclaratorId id, Object data) { + private void ensureClosed(ASTLocalVariableDeclaration var, ASTVariableDeclaratorId id, TypeNode type, Object data) { // What are the chances of a Connection being instantiated in a // for-loop init block? Anyway, I'm lazy! String variableToClose = id.getImage(); @@ -335,10 +378,12 @@ public class CloseResourceRule extends AbstractJavaRule { // if all is not well, complain if (!closed) { - ASTType type = var.getFirstChildOfType(ASTType.class); - ASTReferenceType ref = (ASTReferenceType) type.jjtGetChild(0); - ASTClassOrInterfaceType clazz = (ASTClassOrInterfaceType) ref.jjtGetChild(0); - addViolation(data, id, clazz.getImage()); + Class<?> typeClass = type.getType(); + if (typeClass != null) { + addViolation(data, id, typeClass.getName()); + } else { + addViolation(data, id, id.getVariableName()); + } } } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/closeresource/CustomStringWriter.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/closeresource/CustomStringWriter.java new file mode 100644 index 0000000000..fc56da5596 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/closeresource/CustomStringWriter.java @@ -0,0 +1,18 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.java.rule.errorprone.closeresource; + +import java.io.IOException; +import java.io.StringWriter; + +public class CustomStringWriter extends StringWriter { + + @Override + public void close() throws IOException { + getBuffer().setLength(0); + getBuffer().trimToSize(); + super.close(); + } +} diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 7b03334c68..f97781fe8a 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -814,4 +814,83 @@ public class CloseResourceTest { } ]]></code> </test-code> + + <test-code> + <description>ByteArrayOutputStream and StringWriter do not need closing</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.io.OutputStream; + +public class CloseResourceWithExceptions { + public void bar() { + /*ByteArray*/OutputStream buffer = new ByteArrayOutputStream(); + try { + buffer.write(new byte[] {1, 2, 3}); + } catch (IOException e) { + throw new RuntimeException(e); + } + byte[] result = buffer.toByteArray(); + return result; + } + + public String baz() { + StringWriter writer = new StringWriter(); + writer.write("Test"); + return writer.toString(); + } +} + ]]></code> + </test-code> + + <test-code> + <description>A custom StringWriter does need closing</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.StringWriter; +import net.sourceforge.pmd.lang.java.rule.errorprone.closeresource.CustomStringWriter; + +public class CloseResourceWithExceptions { + public void bar() { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + try { + buffer.write(new byte[] {1, 2, 3}); + } catch (IOException e) { + throw new RuntimeException(e); + } + byte[] result = buffer.toByteArray(); + return result; + } + + public String baz() { + StringWriter writer = new CustomStringWriter(); + writer.write("Test"); + return writer.toString(); + } +} + ]]></code> + </test-code> + + <test-code> + <description>connection not closed, should have failed - missing import</description> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> + <expected-problems>1</expected-problems> + <code><![CDATA[ +// without the import +//import java.sql.*; +// type resolution doesn't work, so the rule falls back to simple names +public class Foo { + void bar() { + Connection c = pool.getConnection(); + try { + } catch (Exception e) { + } + } +} + ]]></code> + </test-code> </test-data> From 86ce57ca3c4e0e37e39f6439e421837f83d7f0df Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 22 Jun 2019 19:01:24 +0200 Subject: [PATCH 230/371] [java] CloseResource: support try-with-resources --- .../rule/errorprone/CloseResourceRule.java | 18 +++++++++++++--- .../rule/errorprone/xml/CloseResource.xml | 21 +++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index e422446314..27ba1d8818 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -32,6 +32,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTPrimaryExpression; import net.sourceforge.pmd.lang.java.ast.ASTPrimaryPrefix; import net.sourceforge.pmd.lang.java.ast.ASTPrimarySuffix; import net.sourceforge.pmd.lang.java.ast.ASTReferenceType; +import net.sourceforge.pmd.lang.java.ast.ASTResourceSpecification; import net.sourceforge.pmd.lang.java.ast.ASTReturnStatement; import net.sourceforge.pmd.lang.java.ast.ASTStatementExpression; import net.sourceforge.pmd.lang.java.ast.ASTTryStatement; @@ -157,10 +158,12 @@ public class CloseResourceRule extends AbstractJavaRule { if (var.hasInitializer()) { // figure out the runtime type. If the variable is initialized, take the type from there TypeNode runtimeType = var.getInitializer().getFirstChildOfType(ASTExpression.class); - if (runtimeType != null && !isAllowedResourceType(runtimeType)) { - ids.put(var.getVariableId(), runtimeType); + if (runtimeType != null && runtimeType.getType() != null) { + type = runtimeType; } - } else { + } + + if (!isAllowedResourceType(type)) { ids.put(var.getVariableId(), type); } } @@ -358,6 +361,15 @@ public class CloseResourceRule extends AbstractJavaRule { if (closed) { break; } + } else if (t.isTryWithResources()) { + // maybe the variable is used as a resource + List<ASTName> names = t.getFirstChildOfType(ASTResourceSpecification.class).findDescendantsOfType(ASTName.class); + for (ASTName potentialUsage : names) { + if (potentialUsage.hasImageEqualTo(variableToClose)) { + closed = true; + break; + } + } } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index f97781fe8a..206b2ee851 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -893,4 +893,25 @@ public class Foo { } ]]></code> </test-code> + + <test-code> + <description>closed with try-with-resources</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.io.*; + +public class Foo { + public int bar() { + InputStream inputStream = getInputStreamFromSomewhere(); + if (inputStream != null) { + try (InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8")) { + char c = reader.read(); + return c; + } + } + return -1; + } +} + ]]></code> + </test-code> </test-data> From 903f0c924190c92b2f913930c1a45bc9a3c23796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20S=C3=B6semann?= <8180281+rsoesemann@users.noreply.github.com> Date: Sun, 23 Jun 2019 21:16:21 +0200 Subject: [PATCH 231/371] Added Apex PMD related content --- docs/pages/pmd/projectdocs/trivia/news.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/pages/pmd/projectdocs/trivia/news.md b/docs/pages/pmd/projectdocs/trivia/news.md index 5c7b3c0e6e..981b1d06e7 100644 --- a/docs/pages/pmd/projectdocs/trivia/news.md +++ b/docs/pages/pmd/projectdocs/trivia/news.md @@ -6,6 +6,22 @@ author: Tom Copeland <tom@infoether.org> ## Sites/Articles about PMD + +### Salesforce / Apex Language Module + +* June 2019 - Pluralsight Course about leveraging PMD usage for Salesforce by [Robert Sösemann](https://github.com/rsoesemann) (Apex Language Module Contributor) [Play by Play: Automated Code Analysis in Salesforce - a Tools Deep-Dive](https://www.pluralsight.com/courses/play-by-play-automated-code-analysis-in-salesforce) + +* June 2018 - Salesforce Way Podcast with [Robert Sösemann](https://github.com/rsoesemann) [Static Code Analysis with PMD for Apex](https://salesforceway.com/podcast/podcast/static-code-analysis-with-pmd-for-apex/) + +* January 2018 - [Webinar: How to contribute Apex rules to PMD with Robert Sösemann](https://www.youtube.com/watch?v=7_Ex9WWS_3Q) + +* August 2017 - Webinar about how to use PMD with The Welkin Suite Salesforce IDE - Author [Robert Sösemann](https://github.com/rsoesemann) - [Improving your Apex Code Quality with PMD in The Welkin Suite](https://www.youtube.com/watch?v=Ypyiy5b6huc) + +* November 2016 - Recording of [Robert Sösemann](https://github.com/rsoesemann)'s Session at Salesforce Dreamforce Conference about enforcing Clean Code in the Salesforce world using PMD and other tools [Clean Apex Code with Automatic Code Metrics](https://www.youtube.com/watch?v=bW7m6y6bEug) + + +### Other Language Modules + * February 2012 - Romain Pelisse's lightning talk at FOSDEM 2012 about "PMD5: What can it do for you?". [Video recording is available](http://video.fosdem.org/2012/lightningtalks/PMD5.webm). From 54b2267a34386d2f5b25d9445f06078e08a43dd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20S=C3=B6semann?= <8180281+rsoesemann@users.noreply.github.com> Date: Sun, 23 Jun 2019 21:18:42 +0200 Subject: [PATCH 232/371] Update news.md --- docs/pages/pmd/projectdocs/trivia/news.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/pmd/projectdocs/trivia/news.md b/docs/pages/pmd/projectdocs/trivia/news.md index 981b1d06e7..7baabc251c 100644 --- a/docs/pages/pmd/projectdocs/trivia/news.md +++ b/docs/pages/pmd/projectdocs/trivia/news.md @@ -9,9 +9,9 @@ author: Tom Copeland <tom@infoether.org> ### Salesforce / Apex Language Module -* June 2019 - Pluralsight Course about leveraging PMD usage for Salesforce by [Robert Sösemann](https://github.com/rsoesemann) (Apex Language Module Contributor) [Play by Play: Automated Code Analysis in Salesforce - a Tools Deep-Dive](https://www.pluralsight.com/courses/play-by-play-automated-code-analysis-in-salesforce) +* June 2019 - [Pluralsight](https://www.pluralsight.com/authors/don-robins) Course about leveraging PMD usage for Salesforce by [Robert Sösemann](https://github.com/rsoesemann) (Apex Language Module Contributor) [Play by Play: Automated Code Analysis in Salesforce - a Tools Deep-Dive](https://www.pluralsight.com/courses/play-by-play-automated-code-analysis-in-salesforce) -* June 2018 - Salesforce Way Podcast with [Robert Sösemann](https://github.com/rsoesemann) [Static Code Analysis with PMD for Apex](https://salesforceway.com/podcast/podcast/static-code-analysis-with-pmd-for-apex/) +* June 2018 - [Salesforce Way Podcast](https://salesforceway.com/podcast/podcast/) with [Robert Sösemann](https://github.com/rsoesemann) [Static Code Analysis with PMD for Apex](https://salesforceway.com/podcast/podcast/static-code-analysis-with-pmd-for-apex/) * January 2018 - [Webinar: How to contribute Apex rules to PMD with Robert Sösemann](https://www.youtube.com/watch?v=7_Ex9WWS_3Q) From 6b3ccdf0693945e9077c8c1699b230347328eebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Mon, 24 Jun 2019 12:11:12 +0200 Subject: [PATCH 233/371] Add a test case --- .../errorprone/xml/NonStaticInitializer.xml | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonStaticInitializer.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonStaticInitializer.xml index 235904d78b..d66001be47 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonStaticInitializer.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonStaticInitializer.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<test-data - xmlns="http://pmd.sourceforge.net/rule-tests" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> +<test-data xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> <test-code> <description>bad</description> <expected-problems>1</expected-problems> @@ -23,7 +22,6 @@ public class Foo { ]]></code> </test-code> - <test-code> <description>Allowed in anonymous classes</description> <expected-problems>0</expected-problems> @@ -72,6 +70,30 @@ public enum Foo { { setCycleDuration(Duration.millis(1200)); } +} + ]]></code> + </test-code> + + <test-code> + <description>Flag in nested local class</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>7</expected-linenumbers> + <code><![CDATA[ +public class Foo { + public Animation getStatusTransition() { + return new Transition() { + + { + setCycleDuration(Duration.millis(1200)); + class ImInAnon {{}} // should be flagged + } + + @Override + protected void interpolate(double frac) { + // magic + } + }; + } } ]]></code> </test-code> From 5694e0414a1317cdd7d1ac1157cc65b6686b30e9 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Mon, 24 Jun 2019 19:26:34 +0200 Subject: [PATCH 234/371] Update release notes, refs #1874 --- docs/pages/release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 24e0613aa7..3be7be27ee 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -95,6 +95,7 @@ of deprecations. * [#1863](https://github.com/pmd/pmd/pull/1863): \[plsql] Add Table InlineConstraint - [kabroxiko](https://github.com/kabroxiko) * [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [kabroxiko](https://github.com/kabroxiko) * [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [kabroxiko](https://github.com/kabroxiko) +* [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [kabroxiko](https://github.com/kabroxiko) {% endtocmaker %} From 82cda02eb110cc5df0accbf7f90eb1c51ca08d48 Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Wed, 19 Jun 2019 11:16:36 -0400 Subject: [PATCH 235/371] [plsql] Add date/time literal support for Expressions --- pmd-plsql/etc/grammar/PldocAST.jjt | 3 ++- .../net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index d35ca98082..31832e8182 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -3166,6 +3166,8 @@ ASTUnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() #UnaryExpressionNot { ( <NOT> {sb.append(" NOT "); } simpleNode = UnaryExpression(false) + | + LOOKAHEAD(2) simpleNode = DateTimeLiteral() | LOOKAHEAD(2) simpleNode = ExtractExpression() | @@ -3656,7 +3658,6 @@ ASTAccessibleByClause AccessibleByClause() : // SRT * ASTTable Table() : - { } { diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls index 813c3deef4..9288736d0e 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls @@ -54,6 +54,10 @@ SELECT department_id "Dept", hire_date "Date", last_name "Name", INTO some_record FROM employees WHERE hire_date < '01-SEP-2003' + AND hire_date > timestamp '2001-01-01 00:00:00' + AND hire_date < sysdate - interval '50' minute + AND hire_date < sysdate - interval '5' year + AND hire_date < sysdate - interval '3' month ORDER BY "Dept", "Date", "Name"; SELECT listagg(e.email,',') within group (order by e.email )INTO From 4b7e2c97d576788bcf2f51226196443554bae245 Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Sat, 22 Jun 2019 22:17:57 -0400 Subject: [PATCH 236/371] [plsql] fix #1873 Expression list not working --- pmd-plsql/etc/grammar/PldocAST.jjt | 61 ++++++++----------- .../pmd/lang/plsql/ast/SelectExpressions.pls | 7 ++- .../pmd/lang/plsql/ast/WhereClauseParens.pls | 6 +- 3 files changed, 36 insertions(+), 38 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index d35ca98082..38d00c2f8d 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1332,9 +1332,6 @@ void Condition2() #void : {} { ( - // a IS OF Type condition that starts with a function... - LOOKAHEAD(FunctionCall() <IS> [<NOT>] <OF>) IsOfTypeCondition() - | LOOKAHEAD(<REGEXP_LIKE>) RegexpLikeCondition() | LOOKAHEAD(<EXISTS>) ExistsCondition() @@ -1351,7 +1348,7 @@ void Condition2() #void : | LOOKAHEAD(BetweenCondition()) BetweenCondition() | - LOOKAHEAD(Name() <IS> [<NOT>] <NULL>) IsNullCondition() + LOOKAHEAD(PrimaryExpression() <IS> [<NOT>] <NULL>) IsNullCondition() | LOOKAHEAD(PrimaryExpression() <IS> [<NOT>] <OF>) IsOfTypeCondition() | @@ -1445,7 +1442,11 @@ ASTCompoundCondition CompoundCondition() : {} { ( - LOOKAHEAD(1) "(" Condition() ")" (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* + LOOKAHEAD(3) "(" Condition() ")" (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* + | + LOOKAHEAD(3) "(" (LOOKAHEAD(2) ComparisonCondition() (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* + | LOOKAHEAD(2) CompoundCondition()) ")" + (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* | LOOKAHEAD(1) <NOT> { jjtThis.setType(token.getImage()); } Condition() | @@ -1547,8 +1548,8 @@ ASTSimpleExpression SimpleExpression() : | LOOKAHEAD({isKeyword("found")}) KEYWORD("FOUND") | LOOKAHEAD({isKeyword("notfound")}) KEYWORD("NOTFOUND") | LOOKAHEAD({isKeyword("rowcount")}) KEYWORD("ROWCOUNT") - | LOOKAHEAD({isKeyword("bulk_rowcount")}) KEYWORD("BULK_ROWCOUNT") - | LOOKAHEAD({isKeyword("bulk_exceptions")}) KEYWORD("BULK_EXCEPTIONS") + | LOOKAHEAD({isKeyword("bulk_rowcount")}) KEYWORD("BULK_ROWCOUNT") "(" (Name()|NumericLiteral()) ")" + | LOOKAHEAD({isKeyword("bulk_exceptions")}) KEYWORD("BULK_EXCEPTIONS") ["(" (Name()|NumericLiteral()) ")"] "." Name() ) { sb.append('%').append(token.image); } | LOOKAHEAD(2) @@ -1581,12 +1582,12 @@ ASTFunctionCall FunctionCall() : ( LOOKAHEAD({"TRIM".equalsIgnoreCase(token.image)}) TrimExpression() | LOOKAHEAD({"XMLCAST".equalsIgnoreCase(token.image)}) "(" Expression() <AS> Datatype() ")" - | LOOKAHEAD({"XMLQUERY".equalsIgnoreCase(token.image)}) "(" StringLiteral() [ LOOKAHEAD({isKeyword("PASSING")}) XMLPassingClause() ] <RETURNING> KEYWORD("CONTENT") [ <NULL> <ON> <EMPTY> ] ")" + | LOOKAHEAD({"XMLQUERY".equalsIgnoreCase(token.image)}) "(" StringLiteral() [ LOOKAHEAD({isKeyword("PASSING")}) XMLPassingClause() ] <RETURNING> KEYWORD("CONTENT") [ <NULL> <ON> <EMPTY> ] ")" ["." FunctionCall()] | LOOKAHEAD({"CAST".equalsIgnoreCase(token.image)}) "(" ( <MULTISET> "(" Subquery() ")" | Expression() ) <AS> Datatype() ")" | LOOKAHEAD({"XMLFOREST".equalsIgnoreCase(token.image)}) "(" SqlExpression() [ <AS> ID() ] ( "," SqlExpression() [ <AS> ID() ] )* ")" | LOOKAHEAD({"XMLELEMENT".equalsIgnoreCase(token.image)}) XMLElement() | Arguments() - ) + ) ["." Name()] { jjtThis.setImage(name.getImage()); @@ -2809,10 +2810,10 @@ ASTExpression Expression() : { // Need syntactic lookahead to discriminate between Assignment and a procedure call ( - LOOKAHEAD( PrimaryExpression() ":" "=" ) (simpleNode = Assignment()) {sb.append(simpleNode.getImage()); } - | (simpleNode = ConditionalOrExpression() ) {sb.append(simpleNode.getImage()); } - | (simpleNode = CompilationExpression() ) {sb.append(simpleNode.getImage()); } - ) + LOOKAHEAD( PrimaryExpression() ":" "=" ) (simpleNode = Assignment()) + | (simpleNode = ConditionalOrExpression() ) + | (simpleNode = CompilationExpression() ) + ) {sb.append(simpleNode.getImage()); } { jjtThis.setImage(sb.toString()); return jjtThis; } @@ -2989,14 +2990,15 @@ ASTEqualityExpression EqualityExpression() #EqualityExpression(>1) : //RelationalExpression() ( ( "=" | "!=" | "<>" | <IS>) RelationalExpression() )* ( ( - simpleNode = RelationalExpression() + LOOKAHEAD(PrimaryExpression() <IS> [<NOT>] <OF>) (simpleNode = IsOfTypeCondition()) + | + simpleNode = RelationalExpression() ) {sb.append(simpleNode.getImage());} ( ( ("=" ) {sb.append(" = ");} | ("!" "=" ) {sb.append(" != ");} // Now unde RelationalExpression | ("<" ">" ) {sb.append(" <> ");} - | (<IS>) {sb.append(" IS ");} - ) + | (<IS>) {sb.append(" IS ");}) ( simpleNode = RelationalExpression() ) {sb.append(simpleNode.getImage());} @@ -3166,10 +3168,12 @@ ASTUnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() #UnaryExpressionNot { ( <NOT> {sb.append(" NOT "); } simpleNode = UnaryExpression(false) + | + LOOKAHEAD(2) simpleNode = CaseExpression() | LOOKAHEAD(2) simpleNode = ExtractExpression() | - LOOKAHEAD(2) simpleNode = IsNullCondition() + LOOKAHEAD(2) simpleNode = PrimaryPrefix() ) {sb.append(simpleNode.getImage()); } { jjtThis.setImage(sb.toString()); return jjtThis; @@ -3177,25 +3181,14 @@ ASTUnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() #UnaryExpressionNot } ASTIsNullCondition IsNullCondition() #IsNullCondition(>1) : //yanzin -{ PLSQLNode simpleNode = null; PLSQLNode name = null; StringBuilder sb = new StringBuilder(); } +{ PLSQLNode simpleNode = null; StringBuilder sb = new StringBuilder(); } { - ( - LOOKAHEAD(Name() <IS> [<NOT>] <NULL>) - ( - (name = Name()) {sb.append(name.getImage());} <IS> {sb.append(" IS");} [<NOT> {sb.append(" NOT");}] <NULL> {sb.append(" NULL");} - ) - | - ( - simpleNode = IsOfTypeCondition() - ) - { - sb.append(simpleNode.getImage()); - } - ) + simpleNode = PrimaryPrefix() { sb.append(simpleNode.getImage()); } + <IS> {sb.append(" IS");} [<NOT> {sb.append(" NOT");}] <NULL> {sb.append(" NULL");} { jjtThis.setImage(sb.toString()); return jjtThis; - } + } } ASTIsOfTypeCondition IsOfTypeCondition() #IsOfTypeCondition(>1) : @@ -3540,7 +3533,7 @@ ASTArgument Argument() : { //[LOOKAHEAD(2) UnqualifiedID() "=>"] Expression() [LOOKAHEAD(2) (simpleNode = UnqualifiedID()) ("=>" | <AS> ) ] - (Expression() ) + (SqlExpression()) //Allow Using CharacterSet suffix clause [ ( <USING> ) @@ -3682,7 +3675,7 @@ ASTTableColumn TableColumn() : } { ID() Datatype() - [ ( <_DEFAULT> [ <ON> <NULL> ] (LOOKAHEAD(2) FunctionCall()|LOOKAHEAD(1) UnaryExpression(true)) + [ ( <_DEFAULT> [ <ON> <NULL> ] PrimaryPrefix() | LOOKAHEAD(2) <GENERATED> [ ( <BY> <_DEFAULT> [ <ON> <NULL>] | KEYWORD("ALWAYS")) ] <AS> KEYWORD("IDENTITY") ) ] (LOOKAHEAD(1) InlineConstraint())* diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls index 813c3deef4..e2db5ab873 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls @@ -60,17 +60,18 @@ SELECT listagg(e.email,',') within group (order by e.email )INTO v_task_resp FROM sso_auth_employees e; -select listagg(asap_func_loc_number,'; ') within group (order by 1) +SELECT listagg(asap_func_loc_number,'; ') within group (order by 1) INTO my_record FROM company_asap_func_locs - WHERE cmp_id = cmp_id_in; + WHERE cmp_id = cmp_id_in + AND function_call() is null; SELECT CASE WHEN priv != 'Y' AND my_package.my_function(param1, TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))) >= 100 THEN 'Y' ELSE 'N' - END + END INTO my_result FROM DUAL; diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls index 23b902bc56..338b3a1666 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls @@ -7,8 +7,12 @@ BEGIN select * from dual -where (dummy = X or 1 = 2) +where (dummy <= X or 1 = 2) and 1=1; +select * +FROM dual +WHERE (dummy, 'X') in (select dummy, 'X' from dual); + END; / From ac285e50a5b07fb3a4b402290c956d1336a231d8 Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Sun, 23 Jun 2019 10:04:54 -0400 Subject: [PATCH 237/371] [plsql] fix #1878 Support explicit INNER word for INNER JOIN --- pmd-plsql/etc/grammar/PldocAST.jjt | 21 ++++++++----------- .../pmd/lang/plsql/ast/JoinClauseTest.java | 2 +- .../pmd/lang/plsql/ast/InnerJoinUsing.pls | 5 +++++ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index d35ca98082..5bd13d7a6e 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1809,7 +1809,9 @@ void FromClauseEntry() #void : {} { ( - LOOKAHEAD(JoinClause()) JoinClause() + LOOKAHEAD(TableReferenceInJoin() + ([<INNER>] <JOIN> | <CROSS> | <NATURAL> | <PARTITION> | <FULL> | <LEFT> | <RIGHT> )) + JoinClause() | // using lookahead to avoid misinterpreting the token after the identifier // as a table alias rather than as a keyword @@ -1957,6 +1959,7 @@ ASTTableReference TableReferenceInJoin() #TableReference : [ LOOKAHEAD(1, ID(), {getToken(1).kind != NATURAL && getToken(1).kind != CROSS && getToken(1).kind != ON + && getToken(1).kind != USING && getToken(1).kind != PARTITION && getToken(1).kind != RIGHT && getToken(1).kind != FULL}) @@ -2002,18 +2005,12 @@ ASTInnerCrossJoinClause InnerCrossJoinClause() : {} { ( - [ <INNER> ] <JOIN> TableReferenceInJoin() - ( - <ON> ConditionalOrExpression() - | - <USING> "(" Column() ("," Column() )* ")" - ) + [<INNER>] <JOIN> TableReferenceInJoin() + (<ON> ConditionalOrExpression() + |<USING> "(" Column() ("," Column() )* ")") | - ( - <CROSS> { jjtThis.setCross(true); } - | - <NATURAL> { jjtThis.setNatural(true); } [ <INNER> ] - ) + (<CROSS> { jjtThis.setCross(true); } + |<NATURAL> { jjtThis.setNatural(true); } [<INNER>] ) <JOIN> TableReferenceInJoin() ) { return jjtThis; } diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java index a86ef0d759..a90cbc2b92 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java @@ -43,7 +43,7 @@ public class JoinClauseTest extends AbstractPLSQLParserTst { StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); List<ASTInnerCrossJoinClause> joins = input.findDescendantsOfType(ASTInnerCrossJoinClause.class); - Assert.assertEquals(1, joins.size()); + Assert.assertEquals(2, joins.size()); Assert.assertFalse(joins.get(0).isCross()); Assert.assertFalse(joins.get(0).isNatural()); List<ASTColumn> columns = joins.get(0).findChildrenOfType(ASTColumn.class); diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InnerJoinUsing.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InnerJoinUsing.pls index fb426ab8dc..9be3e9a08b 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InnerJoinUsing.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InnerJoinUsing.pls @@ -3,5 +3,10 @@ SELECT department_id AS d_e_dept_id, e.last_name INTO r_record FROM departments d JOIN employees e USING (department_id); + +SELECT department_id AS d_e_dept_id, e.last_name +INTO r_record + FROM departments d INNER JOIN employees e + USING (department_id); END; / From bcb33fd5ead3b634ee3a969e42d7b7c649623e56 Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Sun, 23 Jun 2019 15:12:46 -0400 Subject: [PATCH 238/371] [plsql] fix #1878 Simplified solution --- pmd-plsql/etc/grammar/PldocAST.jjt | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 5bd13d7a6e..d5fb5f1490 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1809,13 +1809,8 @@ void FromClauseEntry() #void : {} { ( - LOOKAHEAD(TableReferenceInJoin() - ([<INNER>] <JOIN> | <CROSS> | <NATURAL> | <PARTITION> | <FULL> | <LEFT> | <RIGHT> )) - JoinClause() - | - // using lookahead to avoid misinterpreting the token after the identifier - // as a table alias rather than as a keyword - LOOKAHEAD(<IDENTIFIER> (<PARTITION>|<NATURAL>|<OUTER>|<JOIN>|<RIGHT>|<CROSS>|<FULL>)) JoinClause() + LOOKAHEAD([ LOOKAHEAD(2) SchemaName() "." ] TableName() + [<IDENTIFIER>] (<PARTITION>|<NATURAL>|<OUTER>|[<INNER>] <JOIN>|<LEFT>|<RIGHT>|<CROSS>|<FULL>)) JoinClause() | LOOKAHEAD(<IDENTIFIER> "(", {isKeyword("XMLTABLE")}) XMLTable() [ LOOKAHEAD(2) TableAlias() ] | @@ -1959,7 +1954,6 @@ ASTTableReference TableReferenceInJoin() #TableReference : [ LOOKAHEAD(1, ID(), {getToken(1).kind != NATURAL && getToken(1).kind != CROSS && getToken(1).kind != ON - && getToken(1).kind != USING && getToken(1).kind != PARTITION && getToken(1).kind != RIGHT && getToken(1).kind != FULL}) From c3591dcc1a491bf5433aa33fdd29547b141cacaa Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Sun, 23 Jun 2019 17:12:25 -0400 Subject: [PATCH 239/371] [plsql] Suport table alias for Insert Clause --- pmd-plsql/etc/grammar/PldocAST.jjt | 9 ++++++++- .../sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index d35ca98082..cf0f53a5a2 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -2283,7 +2283,14 @@ ASTSingleTableInsert SingleTableInsert() : ASTInsertIntoClause InsertIntoClause() : {} { - <INTO> DMLTableExpressionClause() [ LOOKAHEAD(2) TableAlias() ] [ LOOKAHEAD(2) "(" Column() ( "," Column() )* ")" ] + <INTO> DMLTableExpressionClause() + [ LOOKAHEAD(2) TableAlias() ] + [ + LOOKAHEAD(2) "(" + [ LOOKAHEAD(2) TableName() "." ] Column() + ( "," [ LOOKAHEAD(2) TableName() "." ] Column() )* + ")" + ] { return jjtThis; } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls index 66c6e94b06..0c480fa168 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InsertIntoClause.pls @@ -23,7 +23,10 @@ INSERT INTO INSERT INTO bonuses SELECT employee_id, salary*1.1 FROM employees - WHERE commission_pct > 0.25; + WHERE commission_pct > 0.25; +INSERT INTO emp_job a + (a.employee_id, a.job_id) + VALUES (emp_id, emp_jobid); END; / From 8e988fd7fd41f3eed60d8b150dccaefedbbb28c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Wed, 26 Jun 2019 19:40:11 +0200 Subject: [PATCH 240/371] Add DoubleBraceInitialization to design.xml --- .../main/resources/category/java/design.xml | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pmd-java/src/main/resources/category/java/design.xml b/pmd-java/src/main/resources/category/java/design.xml index 41cc421ca4..d54d3964bc 100644 --- a/pmd-java/src/main/resources/category/java/design.xml +++ b/pmd-java/src/main/resources/category/java/design.xml @@ -550,6 +550,47 @@ public class Foo extends Error { } </example> </rule> + + <rule name="DoubleBraceInitialization" + language="java" + since="1.5" + message="Double-brace initialization should be avoided" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#nonstaticinitializer"> + <description> + Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly + generates a new .class file, and the object holds a strong reference to the enclosing object. For those + reasons, it is preferable to initialize the object normally, even though it's verbose. + + This rule counts any anonymous class which only has a single initializer as an instance of double-brace + initialization. + </description> + <priority>3</priority> + <properties> + <property name="version" value="2.0" /> + <property name="xpath"> + <value> + <![CDATA[ +//AllocationExpression/ClassOrInterfaceBody[count(*)=1]/Initializer[@Static=false()] +]]> + </value> + </property> + </properties> + <example> +<![CDATA[ + // this is double-brace initialization + return new ArrayList<String>(){{addAll("a","b","c");}}; + + // the better way is to not create an anonymous class: + List<String> a = new ArrayList<>(); + a.addAll("a","b","c"); + return a; + + ]]> + </example> + </rule> + + <rule name="ExceptionAsFlowControl" since="1.8" message="Avoid using exceptions as flow control." From 8fc0e9c87519af81fa2ac8efb065884ce1acadfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Wed, 26 Jun 2019 19:45:55 +0200 Subject: [PATCH 241/371] Add test cases --- .../main/resources/category/java/design.xml | 5 +- .../design/DoubleBraceInitializationTest.java | 11 +++ .../design/xml/DoubleBraceInitialization.xml | 97 +++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/design/DoubleBraceInitializationTest.java create mode 100644 pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/DoubleBraceInitialization.xml diff --git a/pmd-java/src/main/resources/category/java/design.xml b/pmd-java/src/main/resources/category/java/design.xml index d54d3964bc..f8070fbdac 100644 --- a/pmd-java/src/main/resources/category/java/design.xml +++ b/pmd-java/src/main/resources/category/java/design.xml @@ -563,7 +563,8 @@ public class Foo extends Error { } reasons, it is preferable to initialize the object normally, even though it's verbose. This rule counts any anonymous class which only has a single initializer as an instance of double-brace - initialization. + initialization. There is currently no way to find out whether a method called in the initializer is not + accessible from outside the anonymous class, and those legit cases should be suppressed for the time being. </description> <priority>3</priority> <properties> @@ -571,7 +572,7 @@ public class Foo extends Error { } <property name="xpath"> <value> <![CDATA[ -//AllocationExpression/ClassOrInterfaceBody[count(*)=1]/Initializer[@Static=false()] +//AllocationExpression/ClassOrInterfaceBody[count(*)=1]/*/Initializer[@Static=false()] ]]> </value> </property> diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/design/DoubleBraceInitializationTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/design/DoubleBraceInitializationTest.java new file mode 100644 index 0000000000..8a67cf5b63 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/design/DoubleBraceInitializationTest.java @@ -0,0 +1,11 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.java.rule.design; + +import net.sourceforge.pmd.testframework.PmdRuleTst; + +public class DoubleBraceInitializationTest extends PmdRuleTst { + // no additional unit tests +} diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/DoubleBraceInitialization.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/DoubleBraceInitialization.xml new file mode 100644 index 0000000000..c8042cb7c5 --- /dev/null +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/DoubleBraceInitialization.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test-data xmlns="http://pmd.sourceforge.net/rule-tests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd"> + <test-code> + <description>Pos in return</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>4</expected-linenumbers> + <code><![CDATA[ +class Foo { + + List<String> bar() { + return new ArrayList<String>(){{addAll("a","b","c");}}; + } + + +} + ]]></code> + </test-code> + + <test-code> + <description>Neg, override</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +class Foo { + + List<String> bar() { + return new ArrayList<String>(){ + + {addAll("a","b","c");} + + void add(String x) { + throw new UnsupportedOperationException(); + } + }; + } + + +} + ]]></code> + </test-code> + + <test-code> + <description>Neg, new field</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +class Foo { + + List<String> bar() { + return new ArrayList<String>(){ + + {addAll("a","b","c");} + + int field; + }; + } + + +} + ]]></code> + </test-code> + + <test-code> + <description>Neg, enum constant</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +enum Foo { + + A { + // neg in enum cons + {addAll("a","b","c");} + + + }; + + +} + ]]></code> + </test-code> + + <test-code> + <description>Neg, regular class</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +class Foo { + + // neg in regular class + {addAll("a","b","c");} + + + + +} + ]]></code> + </test-code> + +</test-data> From 45331699ab8fbcdfdd496e037024580161f732d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Wed, 26 Jun 2019 19:54:02 +0200 Subject: [PATCH 242/371] Add to quickstart ruleset --- pmd-java/src/main/resources/category/java/design.xml | 4 ++-- pmd-java/src/main/resources/rulesets/java/quickstart.xml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/design.xml b/pmd-java/src/main/resources/category/java/design.xml index f8070fbdac..fe164aa512 100644 --- a/pmd-java/src/main/resources/category/java/design.xml +++ b/pmd-java/src/main/resources/category/java/design.xml @@ -553,10 +553,10 @@ public class Foo extends Error { } <rule name="DoubleBraceInitialization" language="java" - since="1.5" + since="6.16.0" message="Double-brace initialization should be avoided" class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#nonstaticinitializer"> + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_design.html#doublebraceinitialization"> <description> Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly generates a new .class file, and the object holds a strong reference to the enclosing object. For those diff --git a/pmd-java/src/main/resources/rulesets/java/quickstart.xml b/pmd-java/src/main/resources/rulesets/java/quickstart.xml index a3e1aff5aa..0d39ea25e7 100644 --- a/pmd-java/src/main/resources/rulesets/java/quickstart.xml +++ b/pmd-java/src/main/resources/rulesets/java/quickstart.xml @@ -128,6 +128,7 @@ <!-- <rule ref="category/java/design.xml/CyclomaticComplexity" /> --> <!-- <rule ref="category/java/design.xml/DataClass" /> --> <rule ref="category/java/design.xml/DoNotExtendJavaLangError" /> + <rule ref="category/java/design.xml/DoubleBraceInitialization" /> <!-- <rule ref="category/java/design.xml/ExceptionAsFlowControl" /> --> <!-- <rule ref="category/java/design.xml/ExcessiveClassLength" /> --> <!-- <rule ref="category/java/design.xml/ExcessiveImports" /> --> From 9cf19214ff4e82f0964a0815a659675d70122fca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Wed, 26 Jun 2019 22:18:45 +0200 Subject: [PATCH 243/371] Move to bestpractices --- .../resources/category/java/bestpractices.xml | 40 ++++++++++++++++++ .../main/resources/category/java/design.xml | 42 ------------------- .../resources/rulesets/java/quickstart.xml | 2 +- .../DoubleBraceInitializationTest.java | 2 +- .../xml/DoubleBraceInitialization.xml | 0 5 files changed, 42 insertions(+), 44 deletions(-) rename pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/{design => bestpractices}/DoubleBraceInitializationTest.java (80%) rename pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/{design => bestpractices}/xml/DoubleBraceInitialization.xml (100%) diff --git a/pmd-java/src/main/resources/category/java/bestpractices.xml b/pmd-java/src/main/resources/category/java/bestpractices.xml index 1a8dfe3948..acb14b3c08 100644 --- a/pmd-java/src/main/resources/category/java/bestpractices.xml +++ b/pmd-java/src/main/resources/category/java/bestpractices.xml @@ -398,6 +398,46 @@ public class Foo { </example> </rule> + <rule name="DoubleBraceInitialization" + language="java" + since="6.16.0" + message="Double-brace initialization should be avoided" + class="net.sourceforge.pmd.lang.rule.XPathRule" + externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_bestpractices.html#doublebraceinitialization"> + <description> + Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly + generates a new .class file, and the object holds a strong reference to the enclosing object. For those + reasons, it is preferable to initialize the object normally, even though it's verbose. + + This rule counts any anonymous class which only has a single initializer as an instance of double-brace + initialization. There is currently no way to find out whether a method called in the initializer is not + accessible from outside the anonymous class, and those legit cases should be suppressed for the time being. + </description> + <priority>3</priority> + <properties> + <property name="version" value="2.0"/> + <property name="xpath"> + <value> + <![CDATA[ +//AllocationExpression/ClassOrInterfaceBody[count(*)=1]/*/Initializer[@Static=false()] +]]> + </value> + </property> + </properties> + <example> +<![CDATA[ + // this is double-brace initialization + return new ArrayList<String>(){{addAll("a","b","c");}}; + + // the better way is to not create an anonymous class: + List<String> a=new ArrayList<>(); + a.addAll("a","b","c"); + return a; + ]]> + </example> + </rule> + + <rule name="ForLoopCanBeForeach" language="java" since="6.0.0" diff --git a/pmd-java/src/main/resources/category/java/design.xml b/pmd-java/src/main/resources/category/java/design.xml index fe164aa512..41cc421ca4 100644 --- a/pmd-java/src/main/resources/category/java/design.xml +++ b/pmd-java/src/main/resources/category/java/design.xml @@ -550,48 +550,6 @@ public class Foo extends Error { } </example> </rule> - - <rule name="DoubleBraceInitialization" - language="java" - since="6.16.0" - message="Double-brace initialization should be avoided" - class="net.sourceforge.pmd.lang.rule.XPathRule" - externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_design.html#doublebraceinitialization"> - <description> - Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly - generates a new .class file, and the object holds a strong reference to the enclosing object. For those - reasons, it is preferable to initialize the object normally, even though it's verbose. - - This rule counts any anonymous class which only has a single initializer as an instance of double-brace - initialization. There is currently no way to find out whether a method called in the initializer is not - accessible from outside the anonymous class, and those legit cases should be suppressed for the time being. - </description> - <priority>3</priority> - <properties> - <property name="version" value="2.0" /> - <property name="xpath"> - <value> - <![CDATA[ -//AllocationExpression/ClassOrInterfaceBody[count(*)=1]/*/Initializer[@Static=false()] -]]> - </value> - </property> - </properties> - <example> -<![CDATA[ - // this is double-brace initialization - return new ArrayList<String>(){{addAll("a","b","c");}}; - - // the better way is to not create an anonymous class: - List<String> a = new ArrayList<>(); - a.addAll("a","b","c"); - return a; - - ]]> - </example> - </rule> - - <rule name="ExceptionAsFlowControl" since="1.8" message="Avoid using exceptions as flow control." diff --git a/pmd-java/src/main/resources/rulesets/java/quickstart.xml b/pmd-java/src/main/resources/rulesets/java/quickstart.xml index 0d39ea25e7..8266a15230 100644 --- a/pmd-java/src/main/resources/rulesets/java/quickstart.xml +++ b/pmd-java/src/main/resources/rulesets/java/quickstart.xml @@ -17,6 +17,7 @@ <rule ref="category/java/bestpractices.xml/CheckResultSet"/> <rule ref="category/java/bestpractices.xml/ConstantsInInterface"/> <rule ref="category/java/bestpractices.xml/DefaultLabelNotLastInSwitchStmt"/> + <rule ref="category/java/bestpractices.xml/DoubleBraceInitialization"/> <rule ref="category/java/bestpractices.xml/ForLoopCanBeForeach"/> <!-- <rule ref="category/java/bestpractices.xml/ForLoopVariableCount" /> --> <rule ref="category/java/bestpractices.xml/GuardLogStatement"/> @@ -128,7 +129,6 @@ <!-- <rule ref="category/java/design.xml/CyclomaticComplexity" /> --> <!-- <rule ref="category/java/design.xml/DataClass" /> --> <rule ref="category/java/design.xml/DoNotExtendJavaLangError" /> - <rule ref="category/java/design.xml/DoubleBraceInitialization" /> <!-- <rule ref="category/java/design.xml/ExceptionAsFlowControl" /> --> <!-- <rule ref="category/java/design.xml/ExcessiveClassLength" /> --> <!-- <rule ref="category/java/design.xml/ExcessiveImports" /> --> diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/design/DoubleBraceInitializationTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/DoubleBraceInitializationTest.java similarity index 80% rename from pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/design/DoubleBraceInitializationTest.java rename to pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/DoubleBraceInitializationTest.java index 8a67cf5b63..2e7b29a342 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/design/DoubleBraceInitializationTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/DoubleBraceInitializationTest.java @@ -2,7 +2,7 @@ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -package net.sourceforge.pmd.lang.java.rule.design; +package net.sourceforge.pmd.lang.java.rule.bestpractices; import net.sourceforge.pmd.testframework.PmdRuleTst; diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/DoubleBraceInitialization.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/DoubleBraceInitialization.xml similarity index 100% rename from pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/DoubleBraceInitialization.xml rename to pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/DoubleBraceInitialization.xml From b1ba1bbbfeed56571882b2844507d9994a736bcd Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 27 Jun 2019 19:21:57 +0200 Subject: [PATCH 244/371] [plsql] Add more JoinClause test cases --- .../pmd/lang/plsql/ast/JoinClauseTest.java | 15 +++++++++++++-- .../pmd/lang/plsql/ast/InnerJoinUsing.pls | 12 ++++++++++++ .../pmd/lang/plsql/ast/LeftOuterJoin.pls | 11 +++++++++++ .../pmd/lang/plsql/ast/RightOuterJoin.pls | 10 ++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java index a90cbc2b92..f62acaff93 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java @@ -43,7 +43,7 @@ public class JoinClauseTest extends AbstractPLSQLParserTst { StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); List<ASTInnerCrossJoinClause> joins = input.findDescendantsOfType(ASTInnerCrossJoinClause.class); - Assert.assertEquals(2, joins.size()); + Assert.assertEquals(3, joins.size()); Assert.assertFalse(joins.get(0).isCross()); Assert.assertFalse(joins.get(0).isNatural()); List<ASTColumn> columns = joins.get(0).findChildrenOfType(ASTColumn.class); @@ -71,11 +71,22 @@ public class JoinClauseTest extends AbstractPLSQLParserTst { StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); List<ASTOuterJoinClause> joins = input.findDescendantsOfType(ASTOuterJoinClause.class); - Assert.assertEquals(1, joins.size()); + Assert.assertEquals(2, joins.size()); ASTOuterJoinType type = joins.get(0).getFirstChildOfType(ASTOuterJoinType.class); Assert.assertEquals(ASTOuterJoinType.Type.RIGHT, type.getType()); } + @Test + public void testLeftOuterJoin() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("LeftOuterJoin.pls"), + StandardCharsets.UTF_8); + ASTInput input = parsePLSQL(code); + List<ASTOuterJoinClause> joins = input.findDescendantsOfType(ASTOuterJoinClause.class); + Assert.assertEquals(1, joins.size()); + ASTOuterJoinType type = joins.get(0).getFirstChildOfType(ASTOuterJoinType.class); + Assert.assertEquals(ASTOuterJoinType.Type.LEFT, type.getType()); + } + @Test public void testNaturalRightOuterJoin() throws Exception { String code = IOUtils.toString(this.getClass().getResourceAsStream("NaturalRightOuterJoin.pls"), diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InnerJoinUsing.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InnerJoinUsing.pls index 9be3e9a08b..74109d3464 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InnerJoinUsing.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/InnerJoinUsing.pls @@ -8,5 +8,17 @@ SELECT department_id AS d_e_dept_id, e.last_name INTO r_record FROM departments d INNER JOIN employees e USING (department_id); + +-- +-- https://github.com/pmd/pmd/issues/1878 +-- + +SELECT COUNT(qsec_id) + FROM quots_sections qsec + INNER JOIN quots_sections_lang USING (qsec_id) + WHERE qsec.wsh_id = 11 + AND qsec.revision = 1 + AND lang_code = 'en'; + END; / diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls new file mode 100644 index 0000000000..27794c903b --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls @@ -0,0 +1,11 @@ +-- +-- https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__I2107296 +-- + +BEGIN +SELECT d.department_id, e.last_name + FROM departments d LEFT OUTER JOIN employees e + ON d.department_id = e.department_id + ORDER BY d.department_id, e.last_name; +END; +/ \ No newline at end of file diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/RightOuterJoin.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/RightOuterJoin.pls index 6b40ad95d1..2c0517076c 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/RightOuterJoin.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/RightOuterJoin.pls @@ -1,3 +1,7 @@ +-- +-- https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__I2107296 +-- + BEGIN SELECT times.time_id, product, quantity INTO r_record @@ -5,4 +9,10 @@ FROM inventory RIGHT OUTER JOIN times ON (times.time_id = inventory.time_id) ORDER BY 2,1; END; + +SELECT d.department_id, e.last_name + FROM departments d RIGHT OUTER JOIN employees e + ON d.department_id = e.department_id + ORDER BY d.department_id, e.last_name; + / \ No newline at end of file From a84869153d2c9f7fb31ffffd869ec25c950e94da Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 27 Jun 2019 19:49:01 +0200 Subject: [PATCH 245/371] [plsql] Fixes #1878 --- pmd-plsql/etc/grammar/PldocAST.jjt | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index d5fb5f1490..0a92bc9708 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1809,8 +1809,8 @@ void FromClauseEntry() #void : {} { ( - LOOKAHEAD([ LOOKAHEAD(2) SchemaName() "." ] TableName() - [<IDENTIFIER>] (<PARTITION>|<NATURAL>|<OUTER>|[<INNER>] <JOIN>|<LEFT>|<RIGHT>|<CROSS>|<FULL>)) JoinClause() + LOOKAHEAD([ SchemaName() "." ] TableName() [<IDENTIFIER>] + (<PARTITION>|<NATURAL>|<OUTER>|<INNER>|<JOIN>|<LEFT>|<RIGHT>|<CROSS>|<FULL>)) JoinClause() | LOOKAHEAD(<IDENTIFIER> "(", {isKeyword("XMLTABLE")}) XMLTable() [ LOOKAHEAD(2) TableAlias() ] | @@ -1951,12 +1951,25 @@ ASTTableReference TableReferenceInJoin() #TableReference : { QueryTableExpression() - [ LOOKAHEAD(1, ID(), {getToken(1).kind != NATURAL - && getToken(1).kind != CROSS - && getToken(1).kind != ON + [ LOOKAHEAD(1, ID(), { + // ON / USING might follow a table reference inside a inner cross join + getToken(1).kind != ON + && getToken(1).kind != USING + + // PARTITION might follow a table reference inside a outer join + // or it might precede a outer join && getToken(1).kind != PARTITION + + // join clauses can be repeated + && getToken(1).kind != INNER + && getToken(1).kind != JOIN + && getToken(1).kind != CROSS + && getToken(1).kind != NATURAL + && getToken(1).kind != FULL + && getToken(1).kind != LEFT && getToken(1).kind != RIGHT - && getToken(1).kind != FULL}) + && getToken(1).kind != OUTER + }) TableAlias() ] From 558fea1c0518cc0cd0eea3b71afaeb0525dbf936 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 27 Jun 2019 19:50:44 +0200 Subject: [PATCH 246/371] Update release notes, fixes #1878, refs #1884 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 3be7be27ee..26f93f7364 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -59,6 +59,7 @@ datetime field. * plsql * [#1828](https://github.com/pmd/pmd/issues/1828): \[plsql] Parentheses stopped working * [#1850](https://github.com/pmd/pmd/issues/1850): \[plsql] Parsing errors with INSERT using returning or records and TRIM expression + * [#1878](https://github.com/pmd/pmd/issues/1878): \[pslql] ParseException when parsing USING ### API Changes @@ -96,6 +97,7 @@ of deprecations. * [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [kabroxiko](https://github.com/kabroxiko) * [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [kabroxiko](https://github.com/kabroxiko) * [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [kabroxiko](https://github.com/kabroxiko) +* [#1884](https://github.com/pmd/pmd/pull/1884): \[plsql] fix #1878 Support explicit INNER word for INNER JOIN - [kabroxiko](https://github.com/kabroxiko) {% endtocmaker %} From ef011c526de3d156bdf71718c22a1eb47d21ea4b Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 27 Jun 2019 20:22:05 +0200 Subject: [PATCH 247/371] [apex] False positive ApexSharingViolationsRule, unsupported Apex feature Fixes #1664 --- .../apex/rule/security/ApexSharingViolationsRule.java | 3 ++- .../apex/rule/security/xml/ApexSharingViolations.xml | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/security/ApexSharingViolationsRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/security/ApexSharingViolationsRule.java index b2de63fc32..93289a121b 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/security/ApexSharingViolationsRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/security/ApexSharingViolationsRule.java @@ -96,7 +96,8 @@ public class ApexSharingViolationsRule extends AbstractApexRule { * @return */ private boolean isSharingPresent(ASTUserClass node) { - return node.getModifiers().isWithoutSharing() || node.getModifiers().isWithSharing(); + return node.getModifiers().isWithoutSharing() || node.getModifiers().isWithSharing() + || node.getModifiers().isInheritedSharing(); } } diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/security/xml/ApexSharingViolations.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/security/xml/ApexSharingViolations.xml index 196a9782cd..3e5df59843 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/security/xml/ApexSharingViolations.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/security/xml/ApexSharingViolations.xml @@ -97,4 +97,15 @@ public without sharing class Foo { ]]></code> </test-code> + <test-code> + <description>Apex class with inherited sharing doing a safe SOQL query</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public inherited sharing class MyClass { + public List<Contact> getAllTheSecrets(){ + return [SELECT Name FROM Contact]; + } +} + ]]></code> + </test-code> </test-data> From 7c90c42fe5ab0c9b1cc10c03166478a0582b7eed Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Thu, 27 Jun 2019 20:28:40 +0200 Subject: [PATCH 248/371] Update release notes, fixes #1664 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 26f93f7364..97b02c37f9 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -46,6 +46,8 @@ datetime field. ### Fixed Issues +* apex + * [#1664](https://github.com/pmd/pmd/issues/1664): \[apex] False positive ApexSharingViolationsRule, unsupported Apex feature * java * [#1848](https://github.com/pmd/pmd/issues/1848): \[java] Local classes should preserve their modifiers * java-bestpractices From cd66277c194cdd712bb657af20dd9fb2b37946e9 Mon Sep 17 00:00:00 2001 From: Maikel Steneker <maikel.steneker@tiobe.com> Date: Fri, 28 Jun 2019 16:48:24 +0200 Subject: [PATCH 249/371] Added Lua support to CPD. The tokenizer uses an ANTLR4 grammar based on the one at https://github.com/antlr/grammars-v4/tree/master/lua. --- pmd-dist/pom.xml | 5 + .../pmd/it/BinaryDistributionIT.java | 2 +- pmd-lua/pom.xml | 57 +++ .../sourceforge/pmd/lang/lua/antlr4/Lua.g4 | 335 ++++++++++++++++++ .../net/sourceforge/pmd/cpd/LuaLanguage.java | 18 + .../net/sourceforge/pmd/cpd/LuaTokenizer.java | 28 ++ .../services/net.sourceforge.pmd.cpd.Language | 1 + .../sourceforge/pmd/cpd/LuaTokenizerTest.java | 56 +++ .../net/sourceforge/pmd/cpd/factorial.lua | 13 + .../net/sourceforge/pmd/cpd/helloworld.lua | 2 + pom.xml | 1 + 11 files changed, 517 insertions(+), 1 deletion(-) create mode 100644 pmd-lua/pom.xml create mode 100644 pmd-lua/src/main/antlr4/net/sourceforge/pmd/lang/lua/antlr4/Lua.g4 create mode 100644 pmd-lua/src/main/java/net/sourceforge/pmd/cpd/LuaLanguage.java create mode 100644 pmd-lua/src/main/java/net/sourceforge/pmd/cpd/LuaTokenizer.java create mode 100644 pmd-lua/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language create mode 100644 pmd-lua/src/test/java/net/sourceforge/pmd/cpd/LuaTokenizerTest.java create mode 100644 pmd-lua/src/test/resources/net/sourceforge/pmd/cpd/factorial.lua create mode 100644 pmd-lua/src/test/resources/net/sourceforge/pmd/cpd/helloworld.lua diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index a992ec8570..e25aa23c7c 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -127,6 +127,11 @@ <artifactId>pmd-groovy</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>net.sourceforge.pmd</groupId> + <artifactId>pmd-lua</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd-java</artifactId> diff --git a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java index 5da0b5f5a1..8caab02442 100644 --- a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java +++ b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java @@ -112,7 +112,7 @@ public class BinaryDistributionIT { result = CpdExecutor.runCpd(tempDir, "-h"); - result.assertExecutionResult(1, "Supported languages: [apex, cpp, cs, dart, ecmascript, fortran, go, groovy, java, jsp, kotlin, matlab, objectivec, perl, php, plsql, python, ruby, scala, swift, vf]"); + result.assertExecutionResult(1, "Supported languages: [apex, cpp, cs, dart, ecmascript, fortran, go, groovy, java, jsp, kotlin, lua, matlab, objectivec, perl, php, plsql, python, ruby, scala, swift, vf]"); result = CpdExecutor.runCpd(tempDir, "--minimum-tokens", "10", "--format", "text", "--files", srcDir); result.assertExecutionResult(4, "Found a 10 line (55 tokens) duplication in the following files:"); diff --git a/pmd-lua/pom.xml b/pmd-lua/pom.xml new file mode 100644 index 0000000000..6e3c30cd2f --- /dev/null +++ b/pmd-lua/pom.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<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/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>pmd-lua</artifactId> + <name>PMD Lua</name> + + <parent> + <groupId>net.sourceforge.pmd</groupId> + <artifactId>pmd</artifactId> + <version>6.16.0-SNAPSHOT</version> + </parent> + + <build> + <plugins> + <plugin> + <groupId>org.antlr</groupId> + <artifactId>antlr4-maven-plugin</artifactId> + </plugin> + + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <configuration> + <useDefaultDelimiters>false</useDefaultDelimiters> + <delimiters> + <delimiter>${*}</delimiter> + </delimiters> + </configuration> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.antlr</groupId> + <artifactId>antlr4-runtime</artifactId> + </dependency> + <dependency> + <groupId>net.sourceforge.pmd</groupId> + <artifactId>pmd-core</artifactId> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>net.sourceforge.pmd</groupId> + <artifactId>pmd-test</artifactId> + <scope>test</scope> + </dependency> + </dependencies> +</project> diff --git a/pmd-lua/src/main/antlr4/net/sourceforge/pmd/lang/lua/antlr4/Lua.g4 b/pmd-lua/src/main/antlr4/net/sourceforge/pmd/lang/lua/antlr4/Lua.g4 new file mode 100644 index 0000000000..497f11060e --- /dev/null +++ b/pmd-lua/src/main/antlr4/net/sourceforge/pmd/lang/lua/antlr4/Lua.g4 @@ -0,0 +1,335 @@ +/* +BSD License + +Copyright (c) 2013, Kazunori Sakamoto +Copyright (c) 2016, Alexander Alexeev +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the NAME of Rainer Schuster nor the NAMEs of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +This grammar file derived from: + + Lua 5.3 Reference Manual + http://www.lua.org/manual/5.3/manual.html + + Lua 5.2 Reference Manual + http://www.lua.org/manual/5.2/manual.html + + Lua 5.1 grammar written by Nicolai Mainiero + http://www.antlr3.org/grammar/1178608849736/Lua.g + +Tested by Kazunori Sakamoto with Test suite for Lua 5.2 (http://www.lua.org/tests/5.2/) + +Tested by Alexander Alexeev with Test suite for Lua 5.3 http://www.lua.org/tests/lua-5.3.2-tests.tar.gz +*/ + +grammar Lua; + +chunk + : block EOF + ; + +block + : stat* retstat? + ; + +stat + : ';' + | varlist '=' explist + | functioncall + | label + | 'break' + | 'goto' NAME + | 'do' block 'end' + | 'while' exp 'do' block 'end' + | 'repeat' block 'until' exp + | 'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end' + | 'for' NAME '=' exp ',' exp (',' exp)? 'do' block 'end' + | 'for' namelist 'in' explist 'do' block 'end' + | 'function' funcname funcbody + | 'local' 'function' NAME funcbody + | 'local' namelist ('=' explist)? + ; + +retstat + : 'return' explist? ';'? + ; + +label + : '::' NAME '::' + ; + +funcname + : NAME ('.' NAME)* (':' NAME)? + ; + +varlist + : var (',' var)* + ; + +namelist + : NAME (',' NAME)* + ; + +explist + : exp (',' exp)* + ; + +exp + : 'nil' | 'false' | 'true' + | number + | string + | '...' + | functiondef + | prefixexp + | tableconstructor + | <assoc=right> exp operatorPower exp + | operatorUnary exp + | exp operatorMulDivMod exp + | exp operatorAddSub exp + | <assoc=right> exp operatorStrcat exp + | exp operatorComparison exp + | exp operatorAnd exp + | exp operatorOr exp + | exp operatorBitwise exp + ; + +prefixexp + : varOrExp nameAndArgs* + ; + +functioncall + : varOrExp nameAndArgs+ + ; + +varOrExp + : var | '(' exp ')' + ; + +var + : (NAME | '(' exp ')' varSuffix) varSuffix* + ; + +varSuffix + : nameAndArgs* ('[' exp ']' | '.' NAME) + ; + +nameAndArgs + : (':' NAME)? args + ; + +/* +var + : NAME | prefixexp '[' exp ']' | prefixexp '.' NAME + ; + +prefixexp + : var | functioncall | '(' exp ')' + ; + +functioncall + : prefixexp args | prefixexp ':' NAME args + ; +*/ + +args + : '(' explist? ')' | tableconstructor | string + ; + +functiondef + : 'function' funcbody + ; + +funcbody + : '(' parlist? ')' block 'end' + ; + +parlist + : namelist (',' '...')? | '...' + ; + +tableconstructor + : '{' fieldlist? '}' + ; + +fieldlist + : field (fieldsep field)* fieldsep? + ; + +field + : '[' exp ']' '=' exp | NAME '=' exp | exp + ; + +fieldsep + : ',' | ';' + ; + +operatorOr + : 'or'; + +operatorAnd + : 'and'; + +operatorComparison + : '<' | '>' | '<=' | '>=' | '~=' | '=='; + +operatorStrcat + : '..'; + +operatorAddSub + : '+' | '-'; + +operatorMulDivMod + : '*' | '/' | '%' | '//'; + +operatorBitwise + : '&' | '|' | '~' | '<<' | '>>'; + +operatorUnary + : 'not' | '#' | '-' | '~'; + +operatorPower + : '^'; + +number + : INT | HEX | FLOAT | HEX_FLOAT + ; + +string + : NORMALSTRING | CHARSTRING | LONGSTRING + ; + +// LEXER + +NAME + : [a-zA-Z_][a-zA-Z_0-9]* + ; + +NORMALSTRING + : '"' ( EscapeSequence | ~('\\'|'"') )* '"' + ; + +CHARSTRING + : '\'' ( EscapeSequence | ~('\''|'\\') )* '\'' + ; + +LONGSTRING + : '[' NESTED_STR ']' + ; + +fragment +NESTED_STR + : '=' NESTED_STR '=' + | '[' .*? ']' + ; + +INT + : Digit+ + ; + +HEX + : '0' [xX] HexDigit+ + ; + +FLOAT + : Digit+ '.' Digit* ExponentPart? + | '.' Digit+ ExponentPart? + | Digit+ ExponentPart + ; + +HEX_FLOAT + : '0' [xX] HexDigit+ '.' HexDigit* HexExponentPart? + | '0' [xX] '.' HexDigit+ HexExponentPart? + | '0' [xX] HexDigit+ HexExponentPart + ; + +fragment +ExponentPart + : [eE] [+-]? Digit+ + ; + +fragment +HexExponentPart + : [pP] [+-]? Digit+ + ; + +fragment +EscapeSequence + : '\\' [abfnrtvz"'\\] + | '\\' '\r'? '\n' + | DecimalEscape + | HexEscape + | UtfEscape + ; + +fragment +DecimalEscape + : '\\' Digit + | '\\' Digit Digit + | '\\' [0-2] Digit Digit + ; + +fragment +HexEscape + : '\\' 'x' HexDigit HexDigit + ; + +fragment +UtfEscape + : '\\' 'u{' HexDigit+ '}' + ; + +fragment +Digit + : [0-9] + ; + +fragment +HexDigit + : [0-9a-fA-F] + ; + +COMMENT + : '--[' NESTED_STR ']' -> channel(HIDDEN) + ; + +LINE_COMMENT + : '--' + ( // -- + | '[' '='* // --[== + | '[' '='* ~('='|'['|'\r'|'\n') ~('\r'|'\n')* // --[==AA + | ~('['|'\r'|'\n') ~('\r'|'\n')* // --AAA + ) ('\r\n'|'\r'|'\n'|EOF) + -> channel(HIDDEN) + ; + +WS + : [ \t\u000C\r\n]+ -> skip + ; + +SHEBANG + : '#' '!' ~('\n'|'\r')* -> channel(HIDDEN) + ; diff --git a/pmd-lua/src/main/java/net/sourceforge/pmd/cpd/LuaLanguage.java b/pmd-lua/src/main/java/net/sourceforge/pmd/cpd/LuaLanguage.java new file mode 100644 index 0000000000..e2a87ec878 --- /dev/null +++ b/pmd-lua/src/main/java/net/sourceforge/pmd/cpd/LuaLanguage.java @@ -0,0 +1,18 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.cpd; + +/** + * Language implementation for Lua + */ +public class LuaLanguage extends AbstractLanguage { + + /** + * Creates a new Lua Language instance. + */ + public LuaLanguage() { + super("Lua", "lua", new LuaTokenizer(), ".lua"); + } +} diff --git a/pmd-lua/src/main/java/net/sourceforge/pmd/cpd/LuaTokenizer.java b/pmd-lua/src/main/java/net/sourceforge/pmd/cpd/LuaTokenizer.java new file mode 100644 index 0000000000..23c292dbe7 --- /dev/null +++ b/pmd-lua/src/main/java/net/sourceforge/pmd/cpd/LuaTokenizer.java @@ -0,0 +1,28 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.cpd; + +import org.antlr.v4.runtime.CharStream; + +import net.sourceforge.pmd.cpd.token.AntlrTokenFilter; +import net.sourceforge.pmd.lang.antlr.AntlrTokenManager; +import net.sourceforge.pmd.lang.lua.antlr4.LuaLexer; + +/** + * The Lua Tokenizer + */ +public class LuaTokenizer extends AntlrTokenizer { + + @Override + protected AntlrTokenManager getLexerForSource(SourceCode sourceCode) { + CharStream charStream = AntlrTokenizer.getCharStreamFromSourceCode(sourceCode); + return new AntlrTokenManager(new LuaLexer(charStream), sourceCode.getFileName()); + } + + @Override + protected AntlrTokenFilter getTokenFilter(final AntlrTokenManager tokenManager) { + return new AntlrTokenFilter(tokenManager); + } +} diff --git a/pmd-lua/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language b/pmd-lua/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language new file mode 100644 index 0000000000..ff792867ee --- /dev/null +++ b/pmd-lua/src/main/resources/META-INF/services/net.sourceforge.pmd.cpd.Language @@ -0,0 +1 @@ +net.sourceforge.pmd.cpd.LuaLanguage diff --git a/pmd-lua/src/test/java/net/sourceforge/pmd/cpd/LuaTokenizerTest.java b/pmd-lua/src/test/java/net/sourceforge/pmd/cpd/LuaTokenizerTest.java new file mode 100644 index 0000000000..5328e71823 --- /dev/null +++ b/pmd-lua/src/test/java/net/sourceforge/pmd/cpd/LuaTokenizerTest.java @@ -0,0 +1,56 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.cpd; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Collection; + +import org.apache.commons.io.IOUtils; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import net.sourceforge.pmd.testframework.AbstractTokenizerTest; + +@RunWith(Parameterized.class) +public class LuaTokenizerTest extends AbstractTokenizerTest { + + private final String filename; + private final int nExpectedTokens; + + public LuaTokenizerTest(String filename, int nExpectedTokens) { + this.filename = filename; + this.nExpectedTokens = nExpectedTokens; + } + + @Parameterized.Parameters + public static Collection<Object[]> data() { + return Arrays.asList( + new Object[] { "factorial.lua", 44 }, + new Object[] { "helloworld.lua", 5 } + ); + } + + @Before + @Override + public void buildTokenizer() throws IOException { + this.tokenizer = new LuaTokenizer(); + this.sourceCode = new SourceCode(new SourceCode.StringCodeLoader(this.getSampleCode(), this.filename)); + } + + @Override + public String getSampleCode() throws IOException { + return IOUtils.toString(LuaTokenizer.class.getResourceAsStream(this.filename), StandardCharsets.UTF_8); + } + + @Test + public void tokenizeTest() throws IOException { + this.expectedTokenCount = nExpectedTokens; + super.tokenizeTest(); + } +} diff --git a/pmd-lua/src/test/resources/net/sourceforge/pmd/cpd/factorial.lua b/pmd-lua/src/test/resources/net/sourceforge/pmd/cpd/factorial.lua new file mode 100644 index 0000000000..f2f2d82661 --- /dev/null +++ b/pmd-lua/src/test/resources/net/sourceforge/pmd/cpd/factorial.lua @@ -0,0 +1,13 @@ +-- defines a factorial function + function fact (n) + if n == 0 then + return 1 + else + return n * fact(n-1) + end + end + + print("enter a number:") + a = io.read("*number") -- read a number + print(fact(a)) + diff --git a/pmd-lua/src/test/resources/net/sourceforge/pmd/cpd/helloworld.lua b/pmd-lua/src/test/resources/net/sourceforge/pmd/cpd/helloworld.lua new file mode 100644 index 0000000000..45d4840a9f --- /dev/null +++ b/pmd-lua/src/test/resources/net/sourceforge/pmd/cpd/helloworld.lua @@ -0,0 +1,2 @@ + print("Hello World") + diff --git a/pom.xml b/pom.xml index 07fc342ed7..92c9318b5b 100644 --- a/pom.xml +++ b/pom.xml @@ -1141,6 +1141,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <module>pmd-fortran</module> <module>pmd-go</module> <module>pmd-groovy</module> + <module>pmd-lua</module> <module>pmd-java</module> <module>pmd-javascript</module> <module>pmd-jsp</module> From b97a1f29dd96d50ebd5acc5758f95a87f2e3b4a5 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 20:26:02 +0200 Subject: [PATCH 250/371] [plsql] Keep the grammar compatible --- pmd-plsql/etc/grammar/PldocAST.jjt | 35 ++++++++++++++++++------------ 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 38d00c2f8d..1ac092e151 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1548,8 +1548,8 @@ ASTSimpleExpression SimpleExpression() : | LOOKAHEAD({isKeyword("found")}) KEYWORD("FOUND") | LOOKAHEAD({isKeyword("notfound")}) KEYWORD("NOTFOUND") | LOOKAHEAD({isKeyword("rowcount")}) KEYWORD("ROWCOUNT") - | LOOKAHEAD({isKeyword("bulk_rowcount")}) KEYWORD("BULK_ROWCOUNT") "(" (Name()|NumericLiteral()) ")" - | LOOKAHEAD({isKeyword("bulk_exceptions")}) KEYWORD("BULK_EXCEPTIONS") ["(" (Name()|NumericLiteral()) ")"] "." Name() + | LOOKAHEAD({isKeyword("bulk_rowcount")}) KEYWORD("BULK_ROWCOUNT") + | LOOKAHEAD({isKeyword("bulk_exceptions")}) KEYWORD("BULK_EXCEPTIONS") ) { sb.append('%').append(token.image); } | LOOKAHEAD(2) @@ -1582,12 +1582,12 @@ ASTFunctionCall FunctionCall() : ( LOOKAHEAD({"TRIM".equalsIgnoreCase(token.image)}) TrimExpression() | LOOKAHEAD({"XMLCAST".equalsIgnoreCase(token.image)}) "(" Expression() <AS> Datatype() ")" - | LOOKAHEAD({"XMLQUERY".equalsIgnoreCase(token.image)}) "(" StringLiteral() [ LOOKAHEAD({isKeyword("PASSING")}) XMLPassingClause() ] <RETURNING> KEYWORD("CONTENT") [ <NULL> <ON> <EMPTY> ] ")" ["." FunctionCall()] + | LOOKAHEAD({"XMLQUERY".equalsIgnoreCase(token.image)}) "(" StringLiteral() [ LOOKAHEAD({isKeyword("PASSING")}) XMLPassingClause() ] <RETURNING> KEYWORD("CONTENT") [ <NULL> <ON> <EMPTY> ] ")" | LOOKAHEAD({"CAST".equalsIgnoreCase(token.image)}) "(" ( <MULTISET> "(" Subquery() ")" | Expression() ) <AS> Datatype() ")" | LOOKAHEAD({"XMLFOREST".equalsIgnoreCase(token.image)}) "(" SqlExpression() [ <AS> ID() ] ( "," SqlExpression() [ <AS> ID() ] )* ")" | LOOKAHEAD({"XMLELEMENT".equalsIgnoreCase(token.image)}) XMLElement() | Arguments() - ) ["." Name()] + ) { jjtThis.setImage(name.getImage()); @@ -2990,8 +2990,6 @@ ASTEqualityExpression EqualityExpression() #EqualityExpression(>1) : //RelationalExpression() ( ( "=" | "!=" | "<>" | <IS>) RelationalExpression() )* ( ( - LOOKAHEAD(PrimaryExpression() <IS> [<NOT>] <OF>) (simpleNode = IsOfTypeCondition()) - | simpleNode = RelationalExpression() ) {sb.append(simpleNode.getImage());} ( @@ -3168,12 +3166,10 @@ ASTUnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() #UnaryExpressionNot { ( <NOT> {sb.append(" NOT "); } simpleNode = UnaryExpression(false) - | - LOOKAHEAD(2) simpleNode = CaseExpression() | LOOKAHEAD(2) simpleNode = ExtractExpression() | - LOOKAHEAD(2) simpleNode = PrimaryPrefix() + LOOKAHEAD(2) simpleNode = IsNullCondition() ) {sb.append(simpleNode.getImage()); } { jjtThis.setImage(sb.toString()); return jjtThis; @@ -3181,10 +3177,21 @@ ASTUnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() #UnaryExpressionNot } ASTIsNullCondition IsNullCondition() #IsNullCondition(>1) : //yanzin -{ PLSQLNode simpleNode = null; StringBuilder sb = new StringBuilder(); } +{ PLSQLNode simpleNode = null; PLSQLNode name = null; StringBuilder sb = new StringBuilder(); } { - simpleNode = PrimaryPrefix() { sb.append(simpleNode.getImage()); } - <IS> {sb.append(" IS");} [<NOT> {sb.append(" NOT");}] <NULL> {sb.append(" NULL");} + ( + LOOKAHEAD(PrimaryExpression() <IS> [<NOT>] <NULL>) + ( + (name = PrimaryExpression() #Name) {sb.append(name.getImage());} <IS> {sb.append(" IS");} [<NOT> {sb.append(" NOT");}] <NULL> {sb.append(" NULL");} + ) + | + ( + simpleNode = IsOfTypeCondition() + ) + { + sb.append(simpleNode.getImage()); + } + ) { jjtThis.setImage(sb.toString()); return jjtThis; @@ -3533,7 +3540,7 @@ ASTArgument Argument() : { //[LOOKAHEAD(2) UnqualifiedID() "=>"] Expression() [LOOKAHEAD(2) (simpleNode = UnqualifiedID()) ("=>" | <AS> ) ] - (SqlExpression()) + (Expression() ) //Allow Using CharacterSet suffix clause [ ( <USING> ) @@ -3675,7 +3682,7 @@ ASTTableColumn TableColumn() : } { ID() Datatype() - [ ( <_DEFAULT> [ <ON> <NULL> ] PrimaryPrefix() + [ ( <_DEFAULT> [ <ON> <NULL> ] (LOOKAHEAD(FunctionName() "(") FunctionCall()|LOOKAHEAD(1) UnaryExpression(true)) | LOOKAHEAD(2) <GENERATED> [ ( <BY> <_DEFAULT> [ <ON> <NULL>] | KEYWORD("ALWAYS")) ] <AS> KEYWORD("IDENTITY") ) ] (LOOKAHEAD(1) InlineConstraint())* From 598c9b79adb833c59738f89317f40915ea1416e0 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 19:03:10 +0200 Subject: [PATCH 251/371] [plsql] Simplify condition / compound condition --- pmd-plsql/etc/grammar/PldocAST.jjt | 15 ++++++--------- .../pmd/lang/plsql/ast/SelectExpressions.pls | 5 +++++ .../pmd/lang/plsql/ast/WhereClauseParens.pls | 5 +++++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 1ac092e151..6e05ca1197 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1320,9 +1320,7 @@ ASTCondition Condition() : {} { ( - LOOKAHEAD(4) CompoundCondition() - | - LOOKAHEAD(4) Condition2() + CompoundCondition() ) { return jjtThis; } } @@ -1442,13 +1440,12 @@ ASTCompoundCondition CompoundCondition() : {} { ( - LOOKAHEAD(3) "(" Condition() ")" (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* - | - LOOKAHEAD(3) "(" (LOOKAHEAD(2) ComparisonCondition() (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* - | LOOKAHEAD(2) CompoundCondition()) ")" - (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* - | LOOKAHEAD(1) <NOT> { jjtThis.setType(token.getImage()); } Condition() + | + // this might be a expression list + LOOKAHEAD("(" SqlExpression() ",") Condition2() (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* + | + LOOKAHEAD(1) "(" Condition() ")" (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* | Condition2() (LOOKAHEAD(2) ( <AND> | <OR> ) { jjtThis.setType(token.getImage()); } Condition() )* ) diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls index e2db5ab873..2c2609b391 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls @@ -60,6 +60,11 @@ SELECT listagg(e.email,',') within group (order by e.email )INTO v_task_resp FROM sso_auth_employees e; +SELECT listagg(asap_func_loc_number,'; ') within group (order by 1) + INTO my_record + FROM company_asap_func_locs + WHERE cmp_id = cmp_id_in; + SELECT listagg(asap_func_loc_number,'; ') within group (order by 1) INTO my_record FROM company_asap_func_locs diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls index 338b3a1666..be96b4a02d 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls @@ -5,6 +5,11 @@ BEGIN +select * +from dual +where (dummy = X or 1 = 2) +and 1=1; + select * from dual where (dummy <= X or 1 = 2) From 930309bb61c361c1e8f4a9f16bd890dc42fa365d Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 20:46:12 +0200 Subject: [PATCH 252/371] Update release notes, fixes #1873, refs #1883 --- docs/pages/release_notes.md | 12 +++++++----- pmd-plsql/etc/grammar/PldocAST.jjt | 4 ++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 3be7be27ee..9845e5cafa 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -59,6 +59,7 @@ datetime field. * plsql * [#1828](https://github.com/pmd/pmd/issues/1828): \[plsql] Parentheses stopped working * [#1850](https://github.com/pmd/pmd/issues/1850): \[plsql] Parsing errors with INSERT using returning or records and TRIM expression + * [#1873](https://github.com/pmd/pmd/issues/1873): \[plsql] Expression list not working ### API Changes @@ -89,13 +90,14 @@ of deprecations. ### External Contributions * [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) -* [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [kabroxiko](https://github.com/kabroxiko) +* [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [Hugo Araya Nash](https://github.com/kabroxiko) * [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) * [#1847](https://github.com/pmd/pmd/pull/1847): \[java] Regression in MethodReturnsInternalArray not handling enums - [Artem](https://github.com/KroArtem) -* [#1863](https://github.com/pmd/pmd/pull/1863): \[plsql] Add Table InlineConstraint - [kabroxiko](https://github.com/kabroxiko) -* [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [kabroxiko](https://github.com/kabroxiko) -* [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [kabroxiko](https://github.com/kabroxiko) -* [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [kabroxiko](https://github.com/kabroxiko) +* [#1863](https://github.com/pmd/pmd/pull/1863): \[plsql] Add Table InlineConstraint - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1883](https://github.com/pmd/pmd/pull/1883): \[plsql] Fix #1873 Expression list not working - [Hugo Araya Nash](https://github.com/kabroxiko) {% endtocmaker %} diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 6e05ca1197..152f7356f0 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -27,6 +27,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** + * Various fixes for expression lists, join clauses + * + * Hugo Araya Nash 06/2019 + *==================================================================== * Various fixes for INSERT INTO with records, implicit cursor attributes * and trim expression. * From 79ae09638f9fcf10a6c3f93a134a79ebf0666ecf Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 20:58:56 +0200 Subject: [PATCH 253/371] Update release notes, fixes #1853 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 6f8569d6b5..0629d1b5dc 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -18,6 +18,8 @@ This is a {{ site.pmd.release_type }} release. * java * [#1848](https://github.com/pmd/pmd/issues/1848): \[java] Local classes should preserve their modifiers +* java-errorprone + * [#1853](https://github.com/pmd/pmd/issues/1853): \[java] False positive for NonStaticInitializer in anonymous class ### API Changes From 939a1dfb78f4f0ec58dabd4f22ba11f7d6ea2965 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 21:10:39 +0200 Subject: [PATCH 254/371] Update release notes, fixes #1854 --- docs/pages/release_notes.md | 12 ++++++++++++ .../src/main/resources/rulesets/releases/6160.xml | 13 +++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 pmd-core/src/main/resources/rulesets/releases/6160.xml diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 3be7be27ee..17df31c0e7 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -25,6 +25,13 @@ The CREATE VIEW statement now supports subquery views. The EXTRACT function can now be parsed correctly. It is used to extract values from a specified datetime field. +#### New Rules + +* The Java rule {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpracticces`) + detects non static initializers in anonymous classes also known as "double brace initialization". + This can be problematic, since a new class file is generated and object holds a strong reference + to the surrounding class. + #### Modified Rules * The Java rule {% rule "java/bestpractices/UnusedPrivateField" %} (`java-bestpractices`) now ignores by @@ -44,6 +51,10 @@ datetime field. * The Java rule {% rule "java/design/UseUtilityClass" %} (`java-design`) has a new property `ignoredAnnotations`. By default, classes that are annotated with Lombok's `@UtilityClass` are ignored now. +* The Java rule {% rule "java/errorprone/NonStaticInitializer" %} (`java-errorprone`) does not report + non static initializers in anonymous classes anymore. For this use case, there is a new rule now: + {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpracticces`). + ### Fixed Issues * java @@ -51,6 +62,7 @@ datetime field. * java-bestpractices * [#1703](https://github.com/pmd/pmd/issues/1703): \[java] UnusedPrivateField on member annotated with lombok @Delegate * [#1845](https://github.com/pmd/pmd/issues/1845): \[java] Regression in MethodReturnsInternalArray not handling enums + * [#1854](https://github.com/pmd/pmd/issues/1854): \[java] Rule to check for double brace initialisation * java-design * [#1094](https://github.com/pmd/pmd/issues/1094): \[java] UseUtilityClass should be LombokAware * java-multithreading diff --git a/pmd-core/src/main/resources/rulesets/releases/6160.xml b/pmd-core/src/main/resources/rulesets/releases/6160.xml new file mode 100644 index 0000000000..8bd7619fd2 --- /dev/null +++ b/pmd-core/src/main/resources/rulesets/releases/6160.xml @@ -0,0 +1,13 @@ +<?xml version="1.0"?> + +<ruleset name="6160" + 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 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> + <description> +This ruleset contains links to rules that are new in PMD v6.16.0 + </description> + + <rule ref="category/java/bestpractices.xml/DoubleBraceInitialization"/> +</ruleset> + From 793f7808bee5cca626557cd70f640f2feb6c9df3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 21:13:43 +0200 Subject: [PATCH 255/371] (doc) Fix typo --- docs/pages/release_notes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 44e804ca17..1b72777f84 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -27,7 +27,7 @@ datetime field. #### New Rules -* The Java rule {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpracticces`) +* The Java rule {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpractices`) detects non static initializers in anonymous classes also known as "double brace initialization". This can be problematic, since a new class file is generated and object holds a strong reference to the surrounding class. @@ -53,7 +53,7 @@ datetime field. * The Java rule {% rule "java/errorprone/NonStaticInitializer" %} (`java-errorprone`) does not report non static initializers in anonymous classes anymore. For this use case, there is a new rule now: - {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpracticces`). + {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpractices`). ### Fixed Issues From 8c750d57f6d98102983829407ed5e4e6f628af49 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 21:20:32 +0200 Subject: [PATCH 256/371] (doc) Update generated rule documentation --- docs/pages/pmd/rules/java.md | 3 +- docs/pages/pmd/rules/java/bestpractices.md | 38 +++++++++++++++++++++- docs/pages/pmd/rules/java/errorprone.md | 2 +- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 0a7a0f0dfe..4d86fd52ee 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -23,6 +23,7 @@ folder: pmd/rules * [CheckResultSet](pmd_rules_java_bestpractices.html#checkresultset): Always check the return values of navigation methods (next, previous, first, last) of a ResultSet... * [ConstantsInInterface](pmd_rules_java_bestpractices.html#constantsininterface): Avoid constants in interfaces. Interfaces should define types, constants are implementation detai... * [DefaultLabelNotLastInSwitchStmt](pmd_rules_java_bestpractices.html#defaultlabelnotlastinswitchstmt): By convention, the default label should be the last label in a switch statement. +* [DoubleBraceInitialization](pmd_rules_java_bestpractices.html#doublebraceinitialization): Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitl... * [ForLoopCanBeForeach](pmd_rules_java_bestpractices.html#forloopcanbeforeach): Reports loops that can be safely replaced with the foreach syntax. The rule considers loops overl... * [ForLoopVariableCount](pmd_rules_java_bestpractices.html#forloopvariablecount): Having a lot of control variables in a 'for' loop makes it harder to see what range of valuesthe ... * [GuardLogStatement](pmd_rules_java_bestpractices.html#guardlogstatement): Whenever using a log level, one should check if the loglevel is actually enabled, orotherwise ski... @@ -541,7 +542,7 @@ folder: pmd/rules It contains the following rules: - [AbstractClassWithoutAnyMethod](pmd_rules_java_design.html#abstractclasswithoutanymethod), [AssignmentInOperand](pmd_rules_java_errorprone.html#assignmentinoperand), [AssignmentToNonFinalStatic](pmd_rules_java_errorprone.html#assignmenttononfinalstatic), [AvoidAccessibilityAlteration](pmd_rules_java_errorprone.html#avoidaccessibilityalteration), [AvoidBranchingStatementAsLastInLoop](pmd_rules_java_errorprone.html#avoidbranchingstatementaslastinloop), [AvoidCatchingThrowable](pmd_rules_java_errorprone.html#avoidcatchingthrowable), [AvoidDecimalLiteralsInBigDecimalConstructor](pmd_rules_java_errorprone.html#avoiddecimalliteralsinbigdecimalconstructor), [AvoidDollarSigns](pmd_rules_java_codestyle.html#avoiddollarsigns), [AvoidInstanceofChecksInCatchClause](pmd_rules_java_errorprone.html#avoidinstanceofchecksincatchclause), [AvoidMultipleUnaryOperators](pmd_rules_java_errorprone.html#avoidmultipleunaryoperators), [AvoidProtectedFieldInFinalClass](pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass), [AvoidProtectedMethodInFinalClassNotExtending](pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending), [AvoidStringBufferField](pmd_rules_java_bestpractices.html#avoidstringbufferfield), [AvoidThreadGroup](pmd_rules_java_multithreading.html#avoidthreadgroup), [AvoidUsingHardCodedIP](pmd_rules_java_bestpractices.html#avoidusinghardcodedip), [AvoidUsingOctalValues](pmd_rules_java_errorprone.html#avoidusingoctalvalues), [AvoidUsingVolatile](pmd_rules_java_multithreading.html#avoidusingvolatile), [BadComparison](pmd_rules_java_errorprone.html#badcomparison), [BigIntegerInstantiation](pmd_rules_java_performance.html#bigintegerinstantiation), [BooleanInstantiation](pmd_rules_java_performance.html#booleaninstantiation), [BrokenNullCheck](pmd_rules_java_errorprone.html#brokennullcheck), [CheckResultSet](pmd_rules_java_bestpractices.html#checkresultset), [CheckSkipResult](pmd_rules_java_errorprone.html#checkskipresult), [ClassCastExceptionWithToArray](pmd_rules_java_errorprone.html#classcastexceptionwithtoarray), [ClassNamingConventions](pmd_rules_java_codestyle.html#classnamingconventions), [ClassWithOnlyPrivateConstructorsShouldBeFinal](pmd_rules_java_design.html#classwithonlyprivateconstructorsshouldbefinal), [CloneMethodMustBePublic](pmd_rules_java_errorprone.html#clonemethodmustbepublic), [CloneMethodMustImplementCloneable](pmd_rules_java_errorprone.html#clonemethodmustimplementcloneable), [CloneMethodReturnTypeMustMatchClassName](pmd_rules_java_errorprone.html#clonemethodreturntypemustmatchclassname), [CloneThrowsCloneNotSupportedException](pmd_rules_java_errorprone.html#clonethrowsclonenotsupportedexception), [CloseResource](pmd_rules_java_errorprone.html#closeresource), [CompareObjectsWithEquals](pmd_rules_java_errorprone.html#compareobjectswithequals), [ConstantsInInterface](pmd_rules_java_bestpractices.html#constantsininterface), [ControlStatementBraces](pmd_rules_java_codestyle.html#controlstatementbraces), [DefaultLabelNotLastInSwitchStmt](pmd_rules_java_bestpractices.html#defaultlabelnotlastinswitchstmt), [DoNotCallGarbageCollectionExplicitly](pmd_rules_java_errorprone.html#donotcallgarbagecollectionexplicitly), [DoNotExtendJavaLangError](pmd_rules_java_design.html#donotextendjavalangerror), [DoNotExtendJavaLangThrowable](pmd_rules_java_errorprone.html#donotextendjavalangthrowable), [DontCallThreadRun](pmd_rules_java_multithreading.html#dontcallthreadrun), [DontImportJavaLang](pmd_rules_java_codestyle.html#dontimportjavalang), [DontUseFloatTypeForLoopIndices](pmd_rules_java_errorprone.html#dontusefloattypeforloopindices), [DoubleCheckedLocking](pmd_rules_java_multithreading.html#doublecheckedlocking), [DuplicateImports](pmd_rules_java_codestyle.html#duplicateimports), [EmptyCatchBlock](pmd_rules_java_errorprone.html#emptycatchblock), [EmptyFinalizer](pmd_rules_java_errorprone.html#emptyfinalizer), [EmptyFinallyBlock](pmd_rules_java_errorprone.html#emptyfinallyblock), [EmptyIfStmt](pmd_rules_java_errorprone.html#emptyifstmt), [EmptyInitializer](pmd_rules_java_errorprone.html#emptyinitializer), [EmptyStatementBlock](pmd_rules_java_errorprone.html#emptystatementblock), [EmptyStatementNotInLoop](pmd_rules_java_errorprone.html#emptystatementnotinloop), [EmptySwitchStatements](pmd_rules_java_errorprone.html#emptyswitchstatements), [EmptySynchronizedBlock](pmd_rules_java_errorprone.html#emptysynchronizedblock), [EmptyTryBlock](pmd_rules_java_errorprone.html#emptytryblock), [EmptyWhileStmt](pmd_rules_java_errorprone.html#emptywhilestmt), [EqualsNull](pmd_rules_java_errorprone.html#equalsnull), [ExtendsObject](pmd_rules_java_codestyle.html#extendsobject), [FinalFieldCouldBeStatic](pmd_rules_java_design.html#finalfieldcouldbestatic), [ForLoopCanBeForeach](pmd_rules_java_bestpractices.html#forloopcanbeforeach), [ForLoopShouldBeWhileLoop](pmd_rules_java_codestyle.html#forloopshouldbewhileloop), [FormalParameterNamingConventions](pmd_rules_java_codestyle.html#formalparameternamingconventions), [GenericsNaming](pmd_rules_java_codestyle.html#genericsnaming), [GuardLogStatement](pmd_rules_java_bestpractices.html#guardlogstatement), [IdempotentOperations](pmd_rules_java_errorprone.html#idempotentoperations), [IdenticalCatchBranches](pmd_rules_java_codestyle.html#identicalcatchbranches), [ImportFromSamePackage](pmd_rules_java_errorprone.html#importfromsamepackage), [InstantiationToGetClass](pmd_rules_java_errorprone.html#instantiationtogetclass), [JumbledIncrementer](pmd_rules_java_errorprone.html#jumbledincrementer), [LocalVariableNamingConventions](pmd_rules_java_codestyle.html#localvariablenamingconventions), [LogicInversion](pmd_rules_java_design.html#logicinversion), [LooseCoupling](pmd_rules_java_bestpractices.html#loosecoupling), [MethodNamingConventions](pmd_rules_java_codestyle.html#methodnamingconventions), [MisplacedNullCheck](pmd_rules_java_errorprone.html#misplacednullcheck), [MissingBreakInSwitch](pmd_rules_java_errorprone.html#missingbreakinswitch), [MissingOverride](pmd_rules_java_bestpractices.html#missingoverride), [MissingStaticMethodInNonInstantiatableClass](pmd_rules_java_errorprone.html#missingstaticmethodinnoninstantiatableclass), [NonCaseLabelInSwitchStatement](pmd_rules_java_errorprone.html#noncaselabelinswitchstatement), [NonStaticInitializer](pmd_rules_java_errorprone.html#nonstaticinitializer), [NonThreadSafeSingleton](pmd_rules_java_multithreading.html#nonthreadsafesingleton), [NoPackage](pmd_rules_java_codestyle.html#nopackage), [OneDeclarationPerLine](pmd_rules_java_bestpractices.html#onedeclarationperline), [OptimizableToArrayCall](pmd_rules_java_performance.html#optimizabletoarraycall), [OverrideBothEqualsAndHashcode](pmd_rules_java_errorprone.html#overridebothequalsandhashcode), [PackageCase](pmd_rules_java_codestyle.html#packagecase), [PositionLiteralsFirstInCaseInsensitiveComparisons](pmd_rules_java_bestpractices.html#positionliteralsfirstincaseinsensitivecomparisons), [PositionLiteralsFirstInComparisons](pmd_rules_java_bestpractices.html#positionliteralsfirstincomparisons), [PreserveStackTrace](pmd_rules_java_bestpractices.html#preservestacktrace), [ProperCloneImplementation](pmd_rules_java_errorprone.html#propercloneimplementation), [ProperLogger](pmd_rules_java_errorprone.html#properlogger), [ReturnEmptyArrayRatherThanNull](pmd_rules_java_errorprone.html#returnemptyarrayratherthannull), [ReturnFromFinallyBlock](pmd_rules_java_errorprone.html#returnfromfinallyblock), [SimplifiedTernary](pmd_rules_java_design.html#simplifiedternary), [SimplifyBooleanReturns](pmd_rules_java_design.html#simplifybooleanreturns), [SimplifyConditional](pmd_rules_java_design.html#simplifyconditional), [SingleMethodSingleton](pmd_rules_java_errorprone.html#singlemethodsingleton), [SingletonClassReturningNewInstance](pmd_rules_java_errorprone.html#singletonclassreturningnewinstance), [SingularField](pmd_rules_java_design.html#singularfield), [SuspiciousEqualsMethodName](pmd_rules_java_errorprone.html#suspiciousequalsmethodname), [SuspiciousHashcodeMethodName](pmd_rules_java_errorprone.html#suspicioushashcodemethodname), [SuspiciousOctalEscape](pmd_rules_java_errorprone.html#suspiciousoctalescape), [SwitchStmtsShouldHaveDefault](pmd_rules_java_bestpractices.html#switchstmtsshouldhavedefault), [UncommentedEmptyConstructor](pmd_rules_java_documentation.html#uncommentedemptyconstructor), [UncommentedEmptyMethodBody](pmd_rules_java_documentation.html#uncommentedemptymethodbody), [UnconditionalIfStatement](pmd_rules_java_errorprone.html#unconditionalifstatement), [UnnecessaryAnnotationValueElement](pmd_rules_java_codestyle.html#unnecessaryannotationvalueelement), [UnnecessaryConstructor](pmd_rules_java_codestyle.html#unnecessaryconstructor), [UnnecessaryConversionTemporary](pmd_rules_java_errorprone.html#unnecessaryconversiontemporary), [UnnecessaryFullyQualifiedName](pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname), [UnnecessaryLocalBeforeReturn](pmd_rules_java_codestyle.html#unnecessarylocalbeforereturn), [UnnecessaryModifier](pmd_rules_java_codestyle.html#unnecessarymodifier), [UnnecessaryReturn](pmd_rules_java_codestyle.html#unnecessaryreturn), [UnsynchronizedStaticFormatter](pmd_rules_java_multithreading.html#unsynchronizedstaticformatter), [UnusedFormalParameter](pmd_rules_java_bestpractices.html#unusedformalparameter), [UnusedImports](pmd_rules_java_bestpractices.html#unusedimports), [UnusedLocalVariable](pmd_rules_java_bestpractices.html#unusedlocalvariable), [UnusedNullCheckInEquals](pmd_rules_java_errorprone.html#unusednullcheckinequals), [UnusedPrivateField](pmd_rules_java_bestpractices.html#unusedprivatefield), [UnusedPrivateMethod](pmd_rules_java_bestpractices.html#unusedprivatemethod), [UseAssertEqualsInsteadOfAssertTrue](pmd_rules_java_bestpractices.html#useassertequalsinsteadofasserttrue), [UseAssertNullInsteadOfAssertTrue](pmd_rules_java_bestpractices.html#useassertnullinsteadofasserttrue), [UseAssertSameInsteadOfAssertTrue](pmd_rules_java_bestpractices.html#useassertsameinsteadofasserttrue), [UseAssertTrueInsteadOfAssertEquals](pmd_rules_java_bestpractices.html#useasserttrueinsteadofassertequals), [UseCollectionIsEmpty](pmd_rules_java_bestpractices.html#usecollectionisempty), [UseEqualsToCompareStrings](pmd_rules_java_errorprone.html#useequalstocomparestrings), [UselessOperationOnImmutable](pmd_rules_java_errorprone.html#uselessoperationonimmutable), [UselessOverridingMethod](pmd_rules_java_design.html#uselessoverridingmethod), [UselessParentheses](pmd_rules_java_codestyle.html#uselessparentheses), [UselessQualifiedThis](pmd_rules_java_codestyle.html#uselessqualifiedthis), [UseLocaleWithCaseConversions](pmd_rules_java_errorprone.html#uselocalewithcaseconversions), [UseNotifyAllInsteadOfNotify](pmd_rules_java_multithreading.html#usenotifyallinsteadofnotify), [UseUtilityClass](pmd_rules_java_design.html#useutilityclass) + [AbstractClassWithoutAnyMethod](pmd_rules_java_design.html#abstractclasswithoutanymethod), [AssignmentInOperand](pmd_rules_java_errorprone.html#assignmentinoperand), [AssignmentToNonFinalStatic](pmd_rules_java_errorprone.html#assignmenttononfinalstatic), [AvoidAccessibilityAlteration](pmd_rules_java_errorprone.html#avoidaccessibilityalteration), [AvoidBranchingStatementAsLastInLoop](pmd_rules_java_errorprone.html#avoidbranchingstatementaslastinloop), [AvoidCatchingThrowable](pmd_rules_java_errorprone.html#avoidcatchingthrowable), [AvoidDecimalLiteralsInBigDecimalConstructor](pmd_rules_java_errorprone.html#avoiddecimalliteralsinbigdecimalconstructor), [AvoidDollarSigns](pmd_rules_java_codestyle.html#avoiddollarsigns), [AvoidInstanceofChecksInCatchClause](pmd_rules_java_errorprone.html#avoidinstanceofchecksincatchclause), [AvoidMultipleUnaryOperators](pmd_rules_java_errorprone.html#avoidmultipleunaryoperators), [AvoidProtectedFieldInFinalClass](pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass), [AvoidProtectedMethodInFinalClassNotExtending](pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending), [AvoidStringBufferField](pmd_rules_java_bestpractices.html#avoidstringbufferfield), [AvoidThreadGroup](pmd_rules_java_multithreading.html#avoidthreadgroup), [AvoidUsingHardCodedIP](pmd_rules_java_bestpractices.html#avoidusinghardcodedip), [AvoidUsingOctalValues](pmd_rules_java_errorprone.html#avoidusingoctalvalues), [AvoidUsingVolatile](pmd_rules_java_multithreading.html#avoidusingvolatile), [BadComparison](pmd_rules_java_errorprone.html#badcomparison), [BigIntegerInstantiation](pmd_rules_java_performance.html#bigintegerinstantiation), [BooleanInstantiation](pmd_rules_java_performance.html#booleaninstantiation), [BrokenNullCheck](pmd_rules_java_errorprone.html#brokennullcheck), [CheckResultSet](pmd_rules_java_bestpractices.html#checkresultset), [CheckSkipResult](pmd_rules_java_errorprone.html#checkskipresult), [ClassCastExceptionWithToArray](pmd_rules_java_errorprone.html#classcastexceptionwithtoarray), [ClassNamingConventions](pmd_rules_java_codestyle.html#classnamingconventions), [ClassWithOnlyPrivateConstructorsShouldBeFinal](pmd_rules_java_design.html#classwithonlyprivateconstructorsshouldbefinal), [CloneMethodMustBePublic](pmd_rules_java_errorprone.html#clonemethodmustbepublic), [CloneMethodMustImplementCloneable](pmd_rules_java_errorprone.html#clonemethodmustimplementcloneable), [CloneMethodReturnTypeMustMatchClassName](pmd_rules_java_errorprone.html#clonemethodreturntypemustmatchclassname), [CloneThrowsCloneNotSupportedException](pmd_rules_java_errorprone.html#clonethrowsclonenotsupportedexception), [CloseResource](pmd_rules_java_errorprone.html#closeresource), [CompareObjectsWithEquals](pmd_rules_java_errorprone.html#compareobjectswithequals), [ConstantsInInterface](pmd_rules_java_bestpractices.html#constantsininterface), [ControlStatementBraces](pmd_rules_java_codestyle.html#controlstatementbraces), [DefaultLabelNotLastInSwitchStmt](pmd_rules_java_bestpractices.html#defaultlabelnotlastinswitchstmt), [DoNotCallGarbageCollectionExplicitly](pmd_rules_java_errorprone.html#donotcallgarbagecollectionexplicitly), [DoNotExtendJavaLangError](pmd_rules_java_design.html#donotextendjavalangerror), [DoNotExtendJavaLangThrowable](pmd_rules_java_errorprone.html#donotextendjavalangthrowable), [DontCallThreadRun](pmd_rules_java_multithreading.html#dontcallthreadrun), [DontImportJavaLang](pmd_rules_java_codestyle.html#dontimportjavalang), [DontUseFloatTypeForLoopIndices](pmd_rules_java_errorprone.html#dontusefloattypeforloopindices), [DoubleBraceInitialization](pmd_rules_java_bestpractices.html#doublebraceinitialization), [DoubleCheckedLocking](pmd_rules_java_multithreading.html#doublecheckedlocking), [DuplicateImports](pmd_rules_java_codestyle.html#duplicateimports), [EmptyCatchBlock](pmd_rules_java_errorprone.html#emptycatchblock), [EmptyFinalizer](pmd_rules_java_errorprone.html#emptyfinalizer), [EmptyFinallyBlock](pmd_rules_java_errorprone.html#emptyfinallyblock), [EmptyIfStmt](pmd_rules_java_errorprone.html#emptyifstmt), [EmptyInitializer](pmd_rules_java_errorprone.html#emptyinitializer), [EmptyStatementBlock](pmd_rules_java_errorprone.html#emptystatementblock), [EmptyStatementNotInLoop](pmd_rules_java_errorprone.html#emptystatementnotinloop), [EmptySwitchStatements](pmd_rules_java_errorprone.html#emptyswitchstatements), [EmptySynchronizedBlock](pmd_rules_java_errorprone.html#emptysynchronizedblock), [EmptyTryBlock](pmd_rules_java_errorprone.html#emptytryblock), [EmptyWhileStmt](pmd_rules_java_errorprone.html#emptywhilestmt), [EqualsNull](pmd_rules_java_errorprone.html#equalsnull), [ExtendsObject](pmd_rules_java_codestyle.html#extendsobject), [FinalFieldCouldBeStatic](pmd_rules_java_design.html#finalfieldcouldbestatic), [ForLoopCanBeForeach](pmd_rules_java_bestpractices.html#forloopcanbeforeach), [ForLoopShouldBeWhileLoop](pmd_rules_java_codestyle.html#forloopshouldbewhileloop), [FormalParameterNamingConventions](pmd_rules_java_codestyle.html#formalparameternamingconventions), [GenericsNaming](pmd_rules_java_codestyle.html#genericsnaming), [GuardLogStatement](pmd_rules_java_bestpractices.html#guardlogstatement), [IdempotentOperations](pmd_rules_java_errorprone.html#idempotentoperations), [IdenticalCatchBranches](pmd_rules_java_codestyle.html#identicalcatchbranches), [ImportFromSamePackage](pmd_rules_java_errorprone.html#importfromsamepackage), [InstantiationToGetClass](pmd_rules_java_errorprone.html#instantiationtogetclass), [JumbledIncrementer](pmd_rules_java_errorprone.html#jumbledincrementer), [LocalVariableNamingConventions](pmd_rules_java_codestyle.html#localvariablenamingconventions), [LogicInversion](pmd_rules_java_design.html#logicinversion), [LooseCoupling](pmd_rules_java_bestpractices.html#loosecoupling), [MethodNamingConventions](pmd_rules_java_codestyle.html#methodnamingconventions), [MisplacedNullCheck](pmd_rules_java_errorprone.html#misplacednullcheck), [MissingBreakInSwitch](pmd_rules_java_errorprone.html#missingbreakinswitch), [MissingOverride](pmd_rules_java_bestpractices.html#missingoverride), [MissingStaticMethodInNonInstantiatableClass](pmd_rules_java_errorprone.html#missingstaticmethodinnoninstantiatableclass), [NonCaseLabelInSwitchStatement](pmd_rules_java_errorprone.html#noncaselabelinswitchstatement), [NonStaticInitializer](pmd_rules_java_errorprone.html#nonstaticinitializer), [NonThreadSafeSingleton](pmd_rules_java_multithreading.html#nonthreadsafesingleton), [NoPackage](pmd_rules_java_codestyle.html#nopackage), [OneDeclarationPerLine](pmd_rules_java_bestpractices.html#onedeclarationperline), [OptimizableToArrayCall](pmd_rules_java_performance.html#optimizabletoarraycall), [OverrideBothEqualsAndHashcode](pmd_rules_java_errorprone.html#overridebothequalsandhashcode), [PackageCase](pmd_rules_java_codestyle.html#packagecase), [PositionLiteralsFirstInCaseInsensitiveComparisons](pmd_rules_java_bestpractices.html#positionliteralsfirstincaseinsensitivecomparisons), [PositionLiteralsFirstInComparisons](pmd_rules_java_bestpractices.html#positionliteralsfirstincomparisons), [PreserveStackTrace](pmd_rules_java_bestpractices.html#preservestacktrace), [ProperCloneImplementation](pmd_rules_java_errorprone.html#propercloneimplementation), [ProperLogger](pmd_rules_java_errorprone.html#properlogger), [ReturnEmptyArrayRatherThanNull](pmd_rules_java_errorprone.html#returnemptyarrayratherthannull), [ReturnFromFinallyBlock](pmd_rules_java_errorprone.html#returnfromfinallyblock), [SimplifiedTernary](pmd_rules_java_design.html#simplifiedternary), [SimplifyBooleanReturns](pmd_rules_java_design.html#simplifybooleanreturns), [SimplifyConditional](pmd_rules_java_design.html#simplifyconditional), [SingleMethodSingleton](pmd_rules_java_errorprone.html#singlemethodsingleton), [SingletonClassReturningNewInstance](pmd_rules_java_errorprone.html#singletonclassreturningnewinstance), [SingularField](pmd_rules_java_design.html#singularfield), [SuspiciousEqualsMethodName](pmd_rules_java_errorprone.html#suspiciousequalsmethodname), [SuspiciousHashcodeMethodName](pmd_rules_java_errorprone.html#suspicioushashcodemethodname), [SuspiciousOctalEscape](pmd_rules_java_errorprone.html#suspiciousoctalescape), [SwitchStmtsShouldHaveDefault](pmd_rules_java_bestpractices.html#switchstmtsshouldhavedefault), [UncommentedEmptyConstructor](pmd_rules_java_documentation.html#uncommentedemptyconstructor), [UncommentedEmptyMethodBody](pmd_rules_java_documentation.html#uncommentedemptymethodbody), [UnconditionalIfStatement](pmd_rules_java_errorprone.html#unconditionalifstatement), [UnnecessaryAnnotationValueElement](pmd_rules_java_codestyle.html#unnecessaryannotationvalueelement), [UnnecessaryConstructor](pmd_rules_java_codestyle.html#unnecessaryconstructor), [UnnecessaryConversionTemporary](pmd_rules_java_errorprone.html#unnecessaryconversiontemporary), [UnnecessaryFullyQualifiedName](pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname), [UnnecessaryLocalBeforeReturn](pmd_rules_java_codestyle.html#unnecessarylocalbeforereturn), [UnnecessaryModifier](pmd_rules_java_codestyle.html#unnecessarymodifier), [UnnecessaryReturn](pmd_rules_java_codestyle.html#unnecessaryreturn), [UnsynchronizedStaticFormatter](pmd_rules_java_multithreading.html#unsynchronizedstaticformatter), [UnusedFormalParameter](pmd_rules_java_bestpractices.html#unusedformalparameter), [UnusedImports](pmd_rules_java_bestpractices.html#unusedimports), [UnusedLocalVariable](pmd_rules_java_bestpractices.html#unusedlocalvariable), [UnusedNullCheckInEquals](pmd_rules_java_errorprone.html#unusednullcheckinequals), [UnusedPrivateField](pmd_rules_java_bestpractices.html#unusedprivatefield), [UnusedPrivateMethod](pmd_rules_java_bestpractices.html#unusedprivatemethod), [UseAssertEqualsInsteadOfAssertTrue](pmd_rules_java_bestpractices.html#useassertequalsinsteadofasserttrue), [UseAssertNullInsteadOfAssertTrue](pmd_rules_java_bestpractices.html#useassertnullinsteadofasserttrue), [UseAssertSameInsteadOfAssertTrue](pmd_rules_java_bestpractices.html#useassertsameinsteadofasserttrue), [UseAssertTrueInsteadOfAssertEquals](pmd_rules_java_bestpractices.html#useasserttrueinsteadofassertequals), [UseCollectionIsEmpty](pmd_rules_java_bestpractices.html#usecollectionisempty), [UseEqualsToCompareStrings](pmd_rules_java_errorprone.html#useequalstocomparestrings), [UselessOperationOnImmutable](pmd_rules_java_errorprone.html#uselessoperationonimmutable), [UselessOverridingMethod](pmd_rules_java_design.html#uselessoverridingmethod), [UselessParentheses](pmd_rules_java_codestyle.html#uselessparentheses), [UselessQualifiedThis](pmd_rules_java_codestyle.html#uselessqualifiedthis), [UseLocaleWithCaseConversions](pmd_rules_java_errorprone.html#uselocalewithcaseconversions), [UseNotifyAllInsteadOfNotify](pmd_rules_java_multithreading.html#usenotifyallinsteadofnotify), [UseUtilityClass](pmd_rules_java_design.html#useutilityclass) * Security Code Guidelines (`rulesets/java/sunsecure.xml`): diff --git a/docs/pages/pmd/rules/java/bestpractices.md b/docs/pages/pmd/rules/java/bestpractices.md index 0ff9b5c2a4..3f64ad46fc 100644 --- a/docs/pages/pmd/rules/java/bestpractices.md +++ b/docs/pages/pmd/rules/java/bestpractices.md @@ -5,7 +5,7 @@ permalink: pmd_rules_java_bestpractices.html folder: pmd/rules/java sidebaractiveurl: /pmd_rules_java.html editmepath: ../pmd-java/src/main/resources/category/java/bestpractices.xml -keywords: Best Practices, AbstractClassWithoutAbstractMethod, AccessorClassGeneration, AccessorMethodGeneration, ArrayIsStoredDirectly, AvoidPrintStackTrace, AvoidReassigningLoopVariables, AvoidReassigningParameters, AvoidStringBufferField, AvoidUsingHardCodedIP, CheckResultSet, ConstantsInInterface, DefaultLabelNotLastInSwitchStmt, ForLoopCanBeForeach, ForLoopVariableCount, GuardLogStatement, JUnit4SuitesShouldUseSuiteAnnotation, JUnit4TestShouldUseAfterAnnotation, JUnit4TestShouldUseBeforeAnnotation, JUnit4TestShouldUseTestAnnotation, JUnitAssertionsShouldIncludeMessage, JUnitTestContainsTooManyAsserts, JUnitTestsShouldIncludeAssert, JUnitUseExpected, LooseCoupling, MethodReturnsInternalArray, MissingOverride, OneDeclarationPerLine, PositionLiteralsFirstInCaseInsensitiveComparisons, PositionLiteralsFirstInComparisons, PreserveStackTrace, ReplaceEnumerationWithIterator, ReplaceHashtableWithMap, ReplaceVectorWithList, SwitchStmtsShouldHaveDefault, SystemPrintln, UnusedFormalParameter, UnusedImports, UnusedLocalVariable, UnusedPrivateField, UnusedPrivateMethod, UseAssertEqualsInsteadOfAssertTrue, UseAssertNullInsteadOfAssertTrue, UseAssertSameInsteadOfAssertTrue, UseAssertTrueInsteadOfAssertEquals, UseCollectionIsEmpty, UseTryWithResources, UseVarargs, WhileLoopWithLiteralBoolean +keywords: Best Practices, AbstractClassWithoutAbstractMethod, AccessorClassGeneration, AccessorMethodGeneration, ArrayIsStoredDirectly, AvoidPrintStackTrace, AvoidReassigningLoopVariables, AvoidReassigningParameters, AvoidStringBufferField, AvoidUsingHardCodedIP, CheckResultSet, ConstantsInInterface, DefaultLabelNotLastInSwitchStmt, DoubleBraceInitialization, ForLoopCanBeForeach, ForLoopVariableCount, GuardLogStatement, JUnit4SuitesShouldUseSuiteAnnotation, JUnit4TestShouldUseAfterAnnotation, JUnit4TestShouldUseBeforeAnnotation, JUnit4TestShouldUseTestAnnotation, JUnitAssertionsShouldIncludeMessage, JUnitTestContainsTooManyAsserts, JUnitTestsShouldIncludeAssert, JUnitUseExpected, LooseCoupling, MethodReturnsInternalArray, MissingOverride, OneDeclarationPerLine, PositionLiteralsFirstInCaseInsensitiveComparisons, PositionLiteralsFirstInComparisons, PreserveStackTrace, ReplaceEnumerationWithIterator, ReplaceHashtableWithMap, ReplaceVectorWithList, SwitchStmtsShouldHaveDefault, SystemPrintln, UnusedFormalParameter, UnusedImports, UnusedLocalVariable, UnusedPrivateField, UnusedPrivateMethod, UseAssertEqualsInsteadOfAssertTrue, UseAssertNullInsteadOfAssertTrue, UseAssertSameInsteadOfAssertTrue, UseAssertTrueInsteadOfAssertEquals, UseCollectionIsEmpty, UseTryWithResources, UseVarargs, WhileLoopWithLiteralBoolean language: Java --- <!-- DO NOT EDIT THIS FILE. This file is generated from file ../pmd-java/src/main/resources/category/java/bestpractices.xml. --> @@ -465,6 +465,42 @@ public class Foo { <rule ref="category/java/bestpractices.xml/DefaultLabelNotLastInSwitchStmt" /> ``` +## DoubleBraceInitialization + +**Since:** PMD 6.16.0 + +**Priority:** Medium (3) + +Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly +generates a new .class file, and the object holds a strong reference to the enclosing object. For those +reasons, it is preferable to initialize the object normally, even though it's verbose. + +This rule counts any anonymous class which only has a single initializer as an instance of double-brace +initialization. There is currently no way to find out whether a method called in the initializer is not +accessible from outside the anonymous class, and those legit cases should be suppressed for the time being. + +**This rule is defined by the following XPath expression:** +``` xpath +//AllocationExpression/ClassOrInterfaceBody[count(*)=1]/*/Initializer[@Static=false()] +``` + +**Example(s):** + +``` java +// this is double-brace initialization + return new ArrayList<String>(){{addAll("a","b","c");}}; + + // the better way is to not create an anonymous class: + List<String> a=new ArrayList<>(); + a.addAll("a","b","c"); + return a; +``` + +**Use this rule by referencing it:** +``` xml +<rule ref="category/java/bestpractices.xml/DoubleBraceInitialization" /> +``` + ## ForLoopCanBeForeach **Since:** PMD 6.0.0 diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index aafa1eeec2..23386d725a 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -2718,7 +2718,7 @@ confusing. **This rule is defined by the following XPath expression:** ``` xpath -//Initializer[@Static='false'] +//Initializer[@Static=false()][not(ancestor::*[3][self::AllocationExpression or self::EnumConstant])] ``` **Example(s):** From 3e5b3d66aa4cc64c46e8751b2701ec09ce5de13c Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 21:42:09 +0200 Subject: [PATCH 257/371] [plsql] Fix PrimaryPrefix: parse literals first --- pmd-plsql/etc/grammar/PldocAST.jjt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 31832e8182..ec2dd6661f 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -3166,8 +3166,6 @@ ASTUnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() #UnaryExpressionNot { ( <NOT> {sb.append(" NOT "); } simpleNode = UnaryExpression(false) - | - LOOKAHEAD(2) simpleNode = DateTimeLiteral() | LOOKAHEAD(2) simpleNode = ExtractExpression() | @@ -3260,8 +3258,8 @@ ASTPrimaryPrefix PrimaryPrefix() : | LOOKAHEAD(CaseExpression()) ( simpleNode =CaseExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110520 | LOOKAHEAD(ObjectExpression() ) ( simpleNode = ObjectExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110604 //| LOOKAHEAD(LikeExpression()) ( simpleNode = LikeExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110604 -| LOOKAHEAD(SimpleExpression()) ( simpleNode = SimpleExpression() ) { sb.append(simpleNode.getImage()); } | LOOKAHEAD(Literal()) ( simpleNode = Literal() ) { sb.append(simpleNode.getImage()) ; } +| LOOKAHEAD(SimpleExpression()) ( simpleNode = SimpleExpression() ) { sb.append(simpleNode.getImage()); } | ( simpleNode =Name() ) { sb.append(simpleNode.getImage()) ; } | SelectStatement() | LOOKAHEAD("(" <SELECT>) "(" SelectStatement() ")" From 3589b6b739510a62acf43a178aba3d700ceb64de Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 21:43:47 +0200 Subject: [PATCH 258/371] Update release notes, refs #1876 --- docs/pages/release_notes.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 3be7be27ee..01cee0c126 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -23,7 +23,7 @@ properties are skipped over during parsing. The CREATE VIEW statement now supports subquery views. The EXTRACT function can now be parsed correctly. It is used to extract values from a specified -datetime field. +datetime field. Also date time literals are parsed now correctly. #### Modified Rules @@ -96,6 +96,7 @@ of deprecations. * [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [kabroxiko](https://github.com/kabroxiko) * [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [kabroxiko](https://github.com/kabroxiko) * [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [kabroxiko](https://github.com/kabroxiko) +* [#1876](https://github.com/pmd/pmd/pull/1876): \[plsql] Datetime support for queries - [Hugo Araya Nash](https://github.com/kabroxiko) {% endtocmaker %} From 5570e65bafc8e424869dde753e890da991b09c97 Mon Sep 17 00:00:00 2001 From: Hugo Araya Nash <kabroxiko@gmail.com> Date: Sun, 23 Jun 2019 16:55:45 -0400 Subject: [PATCH 259/371] [plsql] Correct case expression --- pmd-plsql/etc/grammar/PldocAST.jjt | 24 ++++++------------- .../pmd/lang/plsql/ast/SelectExpressions.pls | 23 ++++++++++++++++++ 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 62f94d4028..4f6a57314d 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -2870,24 +2870,14 @@ ASTAssignment Assignment() : } ASTCaseExpression CaseExpression() : -{ Token thisToken; PLSQLNode simpleNode = null; StringBuilder sb = new StringBuilder() ; } +{} { - ( - thisToken = <CASE> { sb.append(thisToken.image);} - ( simpleNode = Expression() { sb.append(" "); sb.append(simpleNode.getImage()); } )? - ( thisToken = <WHEN> { sb.append(" "); sb.append(thisToken.image); } - simpleNode = Expression() { sb.append(" "); sb.append(simpleNode.getImage()); } - thisToken = <THEN> { sb.append(" "); sb.append(thisToken.image); } - Expression() { sb.append(" "); sb.append(simpleNode.getImage()); } - )+ - [ thisToken = <ELSE> { sb.append(" "); sb.append(thisToken.image);} - Expression() { sb.append(" "); sb.append(simpleNode.getImage()); } - ] - thisToken = <END> { sb.append(" "); sb.append(thisToken.image);} - ) - { - jjtThis.setImage(sb.toString()); return jjtThis; - } + <CASE> + ( Expression() ( <WHEN> Expression() <THEN> Expression() )+ + | ( <WHEN> Condition() <THEN> Expression() )+ ) + [ <ELSE> Expression() ] + <END> + { return jjtThis; } } /* diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls index 2c2609b391..764c82d919 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/SelectExpressions.pls @@ -80,5 +80,28 @@ SELECT CASE INTO my_result FROM DUAL; +SELECT CASE WHEN EXISTS(SELECT * + FROM DUAL + WHERE 1 = 1) + THEN 1 + ELSE 0 + END isExists + INTO VAL + FROM dual; + +SELECT CASE WHEN EXISTS(SELECT * + FROM DUAL) + THEN 1 + ELSE 0 + END isExists + INTO VAL + FROM dual; + +SELECT CASE + WHEN f1(x) IS NULL THEN 1 + ELSE 0 + END isExists + INTO VAL + FROM dual; END; / \ No newline at end of file From f05cde6f2484cf70c263ac344a428b9c03178ace Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 21:52:45 +0200 Subject: [PATCH 260/371] [plsql] Fix lookahead for CaseExpression --- pmd-plsql/etc/grammar/PldocAST.jjt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 4f6a57314d..6254b382d3 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -3250,7 +3250,7 @@ ASTPrimaryPrefix PrimaryPrefix() : // Note: AnalyticClause and WithinClause are only allowed for specific functions, but this grammar allows it for all functions. LOOKAHEAD(FunctionName() "(") ( simpleNode = FunctionCall() [ AnalyticClause() ] [ WithinClause() ] ) { sb.append(simpleNode.getImage()); } | LOOKAHEAD(MultiSetCondition()) simpleNode = MultiSetCondition() -| LOOKAHEAD(CaseExpression()) ( simpleNode =CaseExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110520 +| LOOKAHEAD(<CASE>) ( simpleNode =CaseExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110520 | LOOKAHEAD(ObjectExpression() ) ( simpleNode = ObjectExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110604 //| LOOKAHEAD(LikeExpression()) ( simpleNode = LikeExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110604 | LOOKAHEAD(SimpleExpression()) ( simpleNode = SimpleExpression() ) { sb.append(simpleNode.getImage()); } From f6f4512a9264c2db0e64e5d9ef85ae90a7948ace Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 21:59:34 +0200 Subject: [PATCH 261/371] Update release notes, refs #1885 --- docs/pages/release_notes.md | 5 ++++- pmd-plsql/etc/grammar/PldocAST.jjt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 1b72777f84..52c3dbef86 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,7 +16,7 @@ This is a {{ site.pmd.release_type }} release. #### PLSQL Grammar Updates -The grammar has been updated to support Inline Constraints in CREATE TABLE statements. Additionally, the +The grammar has been updated to support inline constraints in CREATE TABLE statements. Additionally, the CREATE TABLE statement may now be followed by physical properties and table properties. However, these properties are skipped over during parsing. @@ -25,6 +25,8 @@ The CREATE VIEW statement now supports subquery views. The EXTRACT function can now be parsed correctly. It is used to extract values from a specified datetime field. +The CASE expression can now be properly used within SELECT statements. + #### New Rules * The Java rule {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpractices`) @@ -116,6 +118,7 @@ of deprecations. * [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [Hugo Araya Nash](https://github.com/kabroxiko) * [#1883](https://github.com/pmd/pmd/pull/1883): \[plsql] Fix #1873 Expression list not working - [Hugo Araya Nash](https://github.com/kabroxiko) * [#1884](https://github.com/pmd/pmd/pull/1884): \[plsql] fix #1878 Support explicit INNER word for INNER JOIN - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1885](https://github.com/pmd/pmd/pull/1885): \[plsql] Correct case expression - [Hugo Araya Nash](https://github.com/kabroxiko) {% endtocmaker %} diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 6254b382d3..b7a918a04d 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -27,7 +27,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** - * Various fixes for expression lists, join clauses + * Various fixes for expression lists, join clauses, case expression * * Hugo Araya Nash 06/2019 *==================================================================== From fd0b6032602168b1c2d40d2f4a676055e789ca16 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 28 Jun 2019 22:07:09 +0200 Subject: [PATCH 262/371] Update release notes, refs #1886 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 3be7be27ee..3175a60e70 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -25,6 +25,8 @@ The CREATE VIEW statement now supports subquery views. The EXTRACT function can now be parsed correctly. It is used to extract values from a specified datetime field. +Table aliases are now supported when specifying columns in INSERT INTO clauses. + #### Modified Rules * The Java rule {% rule "java/bestpractices/UnusedPrivateField" %} (`java-bestpractices`) now ignores by @@ -96,6 +98,7 @@ of deprecations. * [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [kabroxiko](https://github.com/kabroxiko) * [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [kabroxiko](https://github.com/kabroxiko) * [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [kabroxiko](https://github.com/kabroxiko) +* [#1886](https://github.com/pmd/pmd/pull/1886): \[plsql] Support table alias for Insert Clause - [Hugo Araya Nash](https://github.com/kabroxiko) {% endtocmaker %} From 9b095e113d9b01cc233ea3f5d872e6aa220871be Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 09:50:45 +0200 Subject: [PATCH 263/371] [plsql] Fix JoinClause preceded by subquery Fixes #1879 --- pmd-plsql/etc/grammar/PldocAST.jjt | 12 ++++++++---- .../pmd/lang/plsql/ast/ASTSelectStatement.java | 6 ++++-- .../pmd/lang/plsql/ast/JoinClauseTest.java | 7 ++++++- .../sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls | 11 +++++++++++ 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index e3bc3406ce..928f3bfe7b 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1816,7 +1816,7 @@ void FromClauseEntry() #void : | LOOKAHEAD(<IDENTIFIER> "(", {isKeyword("XMLTABLE")}) XMLTable() [ LOOKAHEAD(2) TableAlias() ] | - LOOKAHEAD(3) TableReference() + LOOKAHEAD(3) (TableReference() (JoinClausePart())*) #JoinClause(>1) | "(" JoinClause() ")" ) @@ -2000,14 +2000,18 @@ ASTJoinClause JoinClause() : {} { TableReferenceInJoin() - ( + (JoinClausePart())+ + { return jjtThis; } +} + +void JoinClausePart() #void : +{} +{ LOOKAHEAD(2) InnerCrossJoinClause() | LOOKAHEAD(2) OuterJoinClause() | LOOKAHEAD(2) CrossOuterApplyClause() - )+ - { return jjtThis; } } ASTInnerCrossJoinClause InnerCrossJoinClause() : diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSelectStatement.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSelectStatement.java index e6bee8060c..e007d03f74 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSelectStatement.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSelectStatement.java @@ -16,10 +16,12 @@ public class ASTSelectStatement extends AbstractSelectStatement { super(p, id); } - /** Accept the visitor. **/ @Override public Object jjtAccept(PLSQLParserVisitor visitor, Object data) { return visitor.visit(this, data); } + + public ASTFromClause getFromClause() { + return getFirstChildOfType(ASTFromClause.class); + } } -/* JavaCC - OriginalChecksum=6a27b24d958d9811f9cd9229a7d3a3ac (do not edit this line) */ diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java index f62acaff93..dd74690268 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java @@ -82,9 +82,14 @@ public class JoinClauseTest extends AbstractPLSQLParserTst { StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); List<ASTOuterJoinClause> joins = input.findDescendantsOfType(ASTOuterJoinClause.class); - Assert.assertEquals(1, joins.size()); + Assert.assertEquals(2, joins.size()); ASTOuterJoinType type = joins.get(0).getFirstChildOfType(ASTOuterJoinType.class); Assert.assertEquals(ASTOuterJoinType.Type.LEFT, type.getType()); + + List<ASTSelectStatement> selects = input.findDescendantsOfType(ASTSelectStatement.class); + Assert.assertEquals(2, selects.size()); + Assert.assertTrue(selects.get(0).getFromClause().jjtGetChild(0) instanceof ASTJoinClause); + Assert.assertTrue(selects.get(1).getFromClause().jjtGetChild(0) instanceof ASTJoinClause); } @Test diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls index 27794c903b..cabb81ed05 100644 --- a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/LeftOuterJoin.pls @@ -3,9 +3,20 @@ -- BEGIN + SELECT d.department_id, e.last_name FROM departments d LEFT OUTER JOIN employees e ON d.department_id = e.department_id ORDER BY d.department_id, e.last_name; + +SELECT cv.hidden + FROM (SELECT CONNECT_BY_ROOT dep_id dep_id, LEVEL as dep_level + FROM departments + WHERE dep_id = c.dep_id + CONNECT BY PRIOR dep_id = parent_dep_id + ORDER BY LEVEL) dep + LEFT JOIN config_visibility cv ON (cv.dep_id = dep.dep_id AND cv.app_id = p_app_id) + ORDER BY dep.dep_level; + END; / \ No newline at end of file From c6ac31f41d810a95c4dd96c218aed2d010d8abb0 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 09:51:37 +0200 Subject: [PATCH 264/371] Update release notes, fixes #1879 --- docs/pages/release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 855a1d241c..7b321325d1 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -81,6 +81,7 @@ Table aliases are now supported when specifying columns in INSERT INTO clauses. * [#1850](https://github.com/pmd/pmd/issues/1850): \[plsql] Parsing errors with INSERT using returning or records and TRIM expression * [#1873](https://github.com/pmd/pmd/issues/1873): \[plsql] Expression list not working * [#1878](https://github.com/pmd/pmd/issues/1878): \[pslql] ParseException when parsing USING + * [#1879](https://github.com/pmd/pmd/issues/1879): \[pslql] ParseException when parsing LEFT JOIN ### API Changes From 7db495f7aa90096671782580e8b8d6ad45531eb6 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 10:30:45 +0200 Subject: [PATCH 265/371] [java] CommentDefaultAccessModifier: add new property "checkTopLevelTypes" Fixes #1880 --- .../CommentDefaultAccessModifierRule.java | 39 ++++++++++++++----- .../xml/CommentDefaultAccessModifier.xml | 25 ++++++++++-- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java index af2ebd7d56..5aa95edbd0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java @@ -21,8 +21,8 @@ import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclarator; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; -import net.sourceforge.pmd.lang.java.ast.AbstractAnyTypeDeclaration; -import net.sourceforge.pmd.lang.java.ast.AbstractJavaAccessNode; +import net.sourceforge.pmd.lang.java.ast.AccessNode; +import net.sourceforge.pmd.lang.java.ast.Annotatable; import net.sourceforge.pmd.lang.java.ast.Comment; import net.sourceforge.pmd.lang.java.rule.AbstractIgnoredAnnotationRule; import net.sourceforge.pmd.properties.PropertyDescriptor; @@ -39,13 +39,17 @@ import net.sourceforge.pmd.properties.PropertyFactory; public class CommentDefaultAccessModifierRule extends AbstractIgnoredAnnotationRule { private static final PropertyDescriptor<Pattern> REGEX_DESCRIPTOR = PropertyFactory.regexProperty("regex") - .desc("Regular expression").defaultValue("\\/\\*\\s+(default|package)\\s+\\*\\/").build(); + .desc("Regular expression").defaultValue("\\/\\*\\s+(default|package)\\s+\\*\\/").build(); + private static final PropertyDescriptor<Boolean> TOP_LEVEL_TYPES = PropertyFactory.booleanProperty("checkTopLevelTypes") + .desc("Check for default access modifier in top-level classes, annotations, and enums") + .defaultValue(false).build(); private static final String MESSAGE = "To avoid mistakes add a comment " + "at the beginning of the %s %s if you want a default access modifier"; private final Set<Integer> interestingLineNumberComments = new HashSet<>(); public CommentDefaultAccessModifierRule() { definePropertyDescriptor(REGEX_DESCRIPTOR); + definePropertyDescriptor(TOP_LEVEL_TYPES); } @Override @@ -104,7 +108,7 @@ public class CommentDefaultAccessModifierRule extends AbstractIgnoredAnnotationR @Override public Object visit(final ASTClassOrInterfaceDeclaration decl, final Object data) { - if (decl.isNested() && shouldReport(decl)) { // check for nested classes + if (decl.isNested() && shouldReportTypeDeclaration(decl)) { // check for nested classes addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "nested class")); } else if (!decl.isNested() && shouldReportTypeDeclaration(decl)) { // and for top-level ones addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "top-level class")); @@ -120,17 +124,24 @@ public class CommentDefaultAccessModifierRule extends AbstractIgnoredAnnotationR return super.visit(decl, data); } - private boolean shouldReport(final AbstractJavaAccessNode decl) { - final AbstractAnyTypeDeclaration parentClassOrInterface = decl - .getFirstParentOfType(AbstractAnyTypeDeclaration.class); + private boolean shouldReport(final AccessNode decl) { + final ASTAnyTypeDeclaration parentClassOrInterface = decl + .getFirstParentOfType(ASTAnyTypeDeclaration.class); boolean isConcreteClass = parentClassOrInterface.getTypeKind() == ASTAnyTypeDeclaration.TypeKind.CLASS; - // ignore if it's an Interface / Annotation - return isConcreteClass && shouldReportTypeDeclaration(decl); + // ignore if it's inside an interface / Annotation + return isConcreteClass && isMissingComment(decl); } - private boolean shouldReportTypeDeclaration(final AbstractJavaAccessNode decl) { + protected boolean hasIgnoredAnnotation(AccessNode node) { + if (node instanceof Annotatable) { + return hasIgnoredAnnotation((Annotatable) node); + } + return false; + } + + private boolean isMissingComment(AccessNode decl) { // check if the class/method/field has a default access // modifier return decl.isPackagePrivate() @@ -140,4 +151,12 @@ public class CommentDefaultAccessModifierRule extends AbstractIgnoredAnnotationR // that it is not annotated with e.g. @VisibleForTesting && !hasIgnoredAnnotation(decl); } + + private boolean shouldReportTypeDeclaration(ASTAnyTypeDeclaration decl) { + // don't report on interfaces + return decl.getTypeKind() != ASTAnyTypeDeclaration.TypeKind.INTERFACE + && isMissingComment(decl) + // either nested or top level and we should check it + && (decl.isNested() || getProperty(TOP_LEVEL_TYPES)); + } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml index ae52606693..3d958e9214 100755 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml @@ -129,7 +129,14 @@ public @interface Foo {} /* default */ @interface FoobarWithComment {} ]]></code-fragment> <test-code> - <description>Top-level annotations with default access modifier</description> + <description>Top-level annotations with default access modifier are ignored by default (#1880)</description> + <expected-problems>0</expected-problems> + <code-ref id="top-level-annotations-with-default-access-modifier"/> + </test-code> + + <test-code> + <description>Top-level annotations with default access modifier checks enabled with property</description> + <rule-property name="checkTopLevelTypes">true</rule-property> <expected-problems>2</expected-problems> <expected-linenumbers>1,6</expected-linenumbers> <code-ref id="top-level-annotations-with-default-access-modifier"/> @@ -149,7 +156,13 @@ enum Foobar {} /* default */ enum FoobarWithComment {} ]]></code-fragment> <test-code> - <description>Top-level enums with default access modifier</description> + <description>Top-level enums with default access modifier are ignored by default (#1880)</description> + <expected-problems>0</expected-problems> + <code-ref id="top-level-enums-with-default-access-modifier"/> + </test-code> + <test-code> + <description>Top-level enums with default access modifier checks enabled with property</description> + <rule-property name="checkTopLevelTypes">true</rule-property> <expected-problems>2</expected-problems> <expected-linenumbers>1,6</expected-linenumbers> <code-ref id="top-level-enums-with-default-access-modifier"/> @@ -169,7 +182,13 @@ class Foobar {} /* default */ class FoobarWithComment {} ]]></code-fragment> <test-code> - <description>Top-level classes with default access modifier</description> + <description>Top-level classes with default access modifier are ignored by default (#1880)</description> + <expected-problems>0</expected-problems> + <code-ref id="top-level-classes-with-default-access-modifier"/> + </test-code> + <test-code> + <description>Top-level classes with default access modifier checks enabled with property</description> + <rule-property name="checkTopLevelTypes">true</rule-property> <expected-problems>2</expected-problems> <expected-linenumbers>1,6</expected-linenumbers> <code-ref id="top-level-classes-with-default-access-modifier"/> From 26967d627e629083866268ca8ebd536beda9b829 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 10:36:46 +0200 Subject: [PATCH 266/371] Update release notes, fixes #1880 --- docs/pages/release_notes.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 855a1d241c..917a6cd3ff 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -59,6 +59,13 @@ Table aliases are now supported when specifying columns in INSERT INTO clauses. non static initializers in anonymous classes anymore. For this use case, there is a new rule now: {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpractices`). +* The Java rule {% rule "java/codestyle/CommentDefaultAccessModifier" %) (`java-codestyle`) was enhanced + in the last version 6.15.0 to check also top-level types by default. This created many new violations. + Missing the access modifier for top-level types is not so criticial, since it only decreases the visibility + of the type. + The default behaviour has been restored. If you want to enable the check for top-level types, you can + use the new property `checkTopLevelTypes`. + ### Fixed Issues * apex @@ -69,6 +76,8 @@ Table aliases are now supported when specifying columns in INSERT INTO clauses. * [#1703](https://github.com/pmd/pmd/issues/1703): \[java] UnusedPrivateField on member annotated with lombok @Delegate * [#1845](https://github.com/pmd/pmd/issues/1845): \[java] Regression in MethodReturnsInternalArray not handling enums * [#1854](https://github.com/pmd/pmd/issues/1854): \[java] Rule to check for double brace initialisation +* java-codestyle + * [#1880](https://github.com/pmd/pmd/issues/1880): \[java] CommentDefaultAccessModifier should be configurable for top-level classes * java-design * [#1094](https://github.com/pmd/pmd/issues/1094): \[java] UseUtilityClass should be LombokAware * java-errorprone From 314bb713360465645142d262b86923754570c034 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 11:13:51 +0200 Subject: [PATCH 267/371] Fix reporting of nested classes inside interfaces/enums --- .../CommentDefaultAccessModifierRule.java | 2 +- .../xml/CommentDefaultAccessModifier.xml | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java index 5aa95edbd0..2891b13843 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java @@ -108,7 +108,7 @@ public class CommentDefaultAccessModifierRule extends AbstractIgnoredAnnotationR @Override public Object visit(final ASTClassOrInterfaceDeclaration decl, final Object data) { - if (decl.isNested() && shouldReportTypeDeclaration(decl)) { // check for nested classes + if (decl.isNested() && shouldReport(decl)) { // check for nested classes addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "nested class")); } else if (!decl.isNested() && shouldReportTypeDeclaration(decl)) { // and for top-level ones addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "top-level class")); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml index 3d958e9214..2cbe71f112 100755 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml @@ -354,4 +354,25 @@ public class Foo { </expected-messages> <code-ref id="constructor-with-default-access-modifier-rule"/> </test-code> + + <test-code> + <description>Nested classes inside interfaces</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public interface MyInterface { + class MyNestedClass {} // this is always implicitly public static +} + ]]></code> + </test-code> + + <test-code> + <description>Nested classes inside enum</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +public enum MyEnum { + FOO; + class MyNestedClass {} +} + ]]></code> + </test-code> </test-data> \ No newline at end of file From f6cc999f2c613f1f079d36a4e9e2edfe240b7b56 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 11:22:03 +0200 Subject: [PATCH 268/371] [java] CloseResource: Use simple class name in message Report simple class name to retain same message as before. This helps in comparing the reports. --- .../pmd/lang/java/rule/errorprone/CloseResourceRule.java | 4 +--- .../pmd/lang/java/rule/errorprone/xml/CloseResource.xml | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index 27ba1d8818..1bc80b184f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -110,8 +110,6 @@ public class CloseResourceRule extends AbstractJavaRule { } if (getProperty(TYPES_DESCRIPTOR) != null) { types.addAll(getProperty(TYPES_DESCRIPTOR)); - } - if (getProperty(TYPES_DESCRIPTOR) != null) { for (String type : getProperty(TYPES_DESCRIPTOR)) { simpleTypes.add(toSimpleType(type)); } @@ -392,7 +390,7 @@ public class CloseResourceRule extends AbstractJavaRule { if (!closed) { Class<?> typeClass = type.getType(); if (typeClass != null) { - addViolation(data, id, typeClass.getName()); + addViolation(data, id, typeClass.getSimpleName()); } else { addViolation(data, id, id.getVariableName()); } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 206b2ee851..41d1be9262 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -27,6 +27,10 @@ public class Foo { <description>connection not closed, should have failed</description> <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>1</expected-problems> + <expected-linenumbers>4</expected-linenumbers> + <expected-messages> + <message>Ensure that resources like this Connection object are closed after use</message> + </expected-messages> <code><![CDATA[ import java.sql.*; public class Foo { From 62a2c12585e7df8a3dab22190596b94862f24992 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 12:15:19 +0200 Subject: [PATCH 269/371] [java] CloseResource: consider javax.jms.Connection as before Adding back the default types java.sql.Connection etc. so that we also match javax.jms.Connection in case no type information is available as before. Also fix the reported type when method calls are involved. --- .../rule/errorprone/CloseResourceRule.java | 17 +++++- .../rule/errorprone/xml/CloseResource.xml | 55 +++++++++++++++++++ 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index 1bc80b184f..324e248471 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -75,7 +75,7 @@ public class CloseResourceRule extends AbstractJavaRule { private static final PropertyDescriptor<List<String>> TYPES_DESCRIPTOR = stringListProperty("types") .desc("Affected types") - .defaultValues("java.lang.AutoCloseable") + .defaultValues("java.lang.AutoCloseable", "java.sql.Connection", "java.sql.Statement", "java.sql.ResultSet") .delim(',').build(); private static final PropertyDescriptor<Boolean> USE_CLOSE_AS_DEFAULT_TARGET = @@ -155,8 +155,9 @@ public class CloseResourceRule extends AbstractJavaRule { if (type != null && isResourceTypeOrSubtype(type)) { if (var.hasInitializer()) { // figure out the runtime type. If the variable is initialized, take the type from there - TypeNode runtimeType = var.getInitializer().getFirstChildOfType(ASTExpression.class); - if (runtimeType != null && runtimeType.getType() != null) { + ASTExpression expression = var.getInitializer().getFirstChildOfType(ASTExpression.class); + TypeNode runtimeType = expression; + if (!isMethodCall(expression) && runtimeType != null && runtimeType.getType() != null) { type = runtimeType; } } @@ -175,6 +176,13 @@ public class CloseResourceRule extends AbstractJavaRule { } } + private boolean isMethodCall(ASTExpression expression) { + return expression != null + && expression.jjtGetNumChildren() > 0 + && expression.jjtGetChild(0) instanceof ASTPrimaryExpression + && !expression.jjtGetChild(0).findChildrenOfType(ASTPrimarySuffix.class).isEmpty(); + } + private boolean isResourceTypeOrSubtype(TypeNode refType) { if (refType.getType() != null) { for (String type : types) { @@ -388,9 +396,12 @@ public class CloseResourceRule extends AbstractJavaRule { // if all is not well, complain if (!closed) { + ASTLocalVariableDeclaration localVarDecl = id.getFirstParentOfType(ASTLocalVariableDeclaration.class); Class<?> typeClass = type.getType(); if (typeClass != null) { addViolation(data, id, typeClass.getSimpleName()); + } else if (localVarDecl != null && localVarDecl.getTypeNode() != null) { + addViolation(data, id, localVarDecl.getTypeNode().getTypeImage()); } else { addViolation(data, id, id.getVariableName()); } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 41d1be9262..49f728b50c 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -915,6 +915,61 @@ public class Foo { } return -1; } +} + ]]></code> + </test-code> + + <test-code> + <description>Correctly determine the type with method calls</description> + <expected-problems>2</expected-problems> + <expected-linenumbers>6,7</expected-linenumbers> + <expected-messages> + <message>Ensure that resources like this Connection object are closed after use</message> + <message>Ensure that resources like this PreparedStatement object are closed after use</message> + </expected-messages> + <code><![CDATA[ +import java.sql.*; + +public class CloseResourceSQL { + public void run() { + try { + Connection con = DataSourceUtils.getConnection(ds); + PreparedStatement ps = con.prepareStatement("some SQL statement"); + DataSourceUtils.applyTransactionTimeout(ps, ds); + } catch (SQLException ex) { + throw new RuntimeException("", ex); + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>JMS Connections without auxclasspath</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>10</expected-linenumbers> + <expected-messages> + <message>Ensure that resources like this Connection object are closed after use</message> + </expected-messages> + <code><![CDATA[ +// javax.jms.* is not on the (aux)classpath during unit tests +import javax.jms.Connection; +import javax.jms.Session; + +public class CloseResourceJMS { + public void run() { + Session session = resourceFactory.getSession(resourceHolder); + if (session != null) { + if (startConnection) { + Connection con = resourceFactory.getConnection(resourceHolder); + if (con != null) { + con.start(); + } + } + return session; + } + return null; + } } ]]></code> </test-code> From ae046bb5164f7fcdd2735ef56d8e6b49a1916aba Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 12:19:24 +0200 Subject: [PATCH 270/371] [java] CloseResource: verify old behaviour can be restored --- .../rule/errorprone/xml/CloseResource.xml | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 49f728b50c..97492ea0d9 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -881,7 +881,6 @@ public class CloseResourceWithExceptions { <test-code> <description>connection not closed, should have failed - missing import</description> - <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> <expected-problems>1</expected-problems> <code><![CDATA[ // without the import @@ -970,6 +969,39 @@ public class CloseResourceJMS { } return null; } +} + ]]></code> + </test-code> + + <test-code> + <description>CloseResource for closable - ignored if the types do not contain AutoClosable</description> + <rule-property name="types">java.sql.Connection,java.sql.Statement,java.sql.ResultSet</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.io.*; + +public class CloseResourceTest { + public static void main(String[] args) { + InputStream in = null; + OutputStream in2 = null; + try { + in = new FileInputStream(new File("/tmp/foo")); + in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void bar() { + InputStream file = new FileInputStream(new File("/tmp/foo")); + try { + int c = file.in(); + } catch (IOException e) { + // handle exception + } finally { + // TODO: close file + } + } } ]]></code> </test-code> From 18006de84c423f56d717a647c5f1a20c7a33d655 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 12:29:40 +0200 Subject: [PATCH 271/371] [java] CloseResource: Update release notes and rule documentation --- docs/pages/release_notes.md | 4 +++- .../src/main/resources/category/java/errorprone.xml | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 8c4982cdf0..444d54cedb 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -45,10 +45,12 @@ datetime field. By default, classes that are annotated with Lombok's `@UtilityClass` are ignored now. * The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) now by default searches - for any unclosed `java.io.Closable` resource. This includes now the standard `java.io.*Stream` classes. + for any unclosed `java.lang.AutoCloseable` resource. This includes now the standard `java.io.*Stream` classes. Previously only SQL-related resources were considered by this rule. The types can still be configured via the `types` property. Some resources do not need to be closed (e.g. `ByteArrayOutputStream`). These exceptions can be configured via the new property `allowedResourceTypes`. + In order to restore the old behaviour, just remove the type `java.lang.AutoCloseable` from the `types` + property and keep the remaining SQL-related classes. ### Fixed Issues diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index daf7900c5a..63dc031f79 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -1009,11 +1009,16 @@ public class MyClass implements Cloneable{ externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#closeresource"> <description> Ensure that resources (like `java.sql.Connection`, `java.sql.Statement`, and `java.sql.ResultSet` objects -and any subtype of `java.io.Closeable`) are always closed after use. +and any subtype of `java.lang.AutoCloseable`) are always closed after use. Failing to do so might result in resource leaks. -Note: It suffices to configure the super type, e.g. `java.io.Closable`, so that this rule automatically triggers -on any subtype (e.g. `java.io.FileInputStream`). +Note: It suffices to configure the super type, e.g. `java.lang.AutoClosable`, so that this rule automatically triggers +on any subtype (e.g. `java.io.FileInputStream`). Additionally specifying `java.sql.Connection` helps in detecting +the types, if the type resolution / auxclasspath is not correctly setup. + +Note: Since PMD 6.16.0 the default value for the property `types` contains `java.lang.AutoCloseable` and detects +now cases where the standard `java.io.*Stream` classes are involved. In order to restore the old behaviour, +just remove "AutoCloseable" from the types. </description> <priority>3</priority> <example> From 40849dda65c676ba5ba7f26942eddb1722e76e76 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 14:13:42 +0200 Subject: [PATCH 272/371] [java] CloseResource: consider chained streams This assumes that the underlaying stream is always the first argument in the constructor call. --- .../rule/errorprone/CloseResourceRule.java | 22 +++++++++++- .../rule/errorprone/xml/CloseResource.xml | 36 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index 324e248471..589825fe01 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -18,6 +18,7 @@ import org.jaxen.JaxenException; import net.sourceforge.pmd.RuleContext; import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression; import net.sourceforge.pmd.lang.java.ast.ASTArgumentList; import net.sourceforge.pmd.lang.java.ast.ASTBlock; import net.sourceforge.pmd.lang.java.ast.ASTBlockStatement; @@ -160,6 +161,14 @@ public class CloseResourceRule extends AbstractJavaRule { if (!isMethodCall(expression) && runtimeType != null && runtimeType.getType() != null) { type = runtimeType; } + + // consider cases, when the streams are chained + // assumes, that the underlaying stream is always the first argument in the + // constructor call. + ASTExpression firstArgument = getAllocationFirstArgument(expression); + if (firstArgument != null) { + type = firstArgument; + } } if (!isAllowedResourceType(type)) { @@ -176,11 +185,22 @@ public class CloseResourceRule extends AbstractJavaRule { } } + private ASTExpression getAllocationFirstArgument(ASTExpression expression) { + List<ASTAllocationExpression> allocations = expression.findDescendantsOfType(ASTAllocationExpression.class); + if (!allocations.isEmpty()) { + ASTArgumentList argumentList = allocations.get(allocations.size() - 1).getFirstDescendantOfType(ASTArgumentList.class); + if (argumentList != null) { + return argumentList.getFirstChildOfType(ASTExpression.class); + } + } + return null; + } + private boolean isMethodCall(ASTExpression expression) { return expression != null && expression.jjtGetNumChildren() > 0 && expression.jjtGetChild(0) instanceof ASTPrimaryExpression - && !expression.jjtGetChild(0).findChildrenOfType(ASTPrimarySuffix.class).isEmpty(); + && expression.jjtGetChild(0).getFirstChildOfType(ASTPrimarySuffix.class) != null; } private boolean isResourceTypeOrSubtype(TypeNode refType) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 97492ea0d9..95c8409c30 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -1002,6 +1002,42 @@ public class CloseResourceTest { // TODO: close file } } +} + ]]></code> + </test-code> + + <test-code> + <description>PrintWriter based on StringWriter</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.io.*; + +public class CloseResourcePrintWriter { + public String run1() { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + + pw.println("Foo"); + String result = sw.toString(); + return result; + } + + public String run2() { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw, true); + + pw.println("Foo"); + String result = sw.toString(); + return result; + } + + public String run3() { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(new BufferedWriter(sw)); + + pw.println("Foo"); + return sw.toString(); + } } ]]></code> </test-code> From d10d522d1fe4d4580b64ec1370ac7b2221501f62 Mon Sep 17 00:00:00 2001 From: Karl-Philipp Richter <krichter722@aol.de> Date: Mon, 26 Nov 2018 20:03:35 +0100 Subject: [PATCH 273/371] Explain the existence of AvoidFinalLocalVariable in it's description --- pmd-java/src/main/resources/category/java/codestyle.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 8dbdf7006b..87a5bbb276 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -95,7 +95,7 @@ public class Fo$o { // not a recommended name class="net.sourceforge.pmd.lang.rule.XPathRule" message="Avoid using final local variables, turn them into fields" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidfinallocalvariable"> - <description>Avoid using final local variables, turn them into fields.</description> + <description><![CDATA[Avoid using final local variables, turn them into fields. Note that this is a controversial rule which is merely useful to enforce a certain code style (which is contradictory to good coding practices in most of the cases it's applied to) and avoid local literals being declared in a scope smaller than the class. The rule is destined to be moved to the "controversial" ruleset again or removed alltogether, but not until 7.0.0, see https://github.com/pmd/pmd/issues/811 for the discussion about that.]]></description> <priority>3</priority> <properties> <property name="xpath"> From 74f36bf18ef205ab2751f27beb26c1aafecbcd9a Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 14:34:36 +0200 Subject: [PATCH 274/371] [java] Deprecate AvoidFinalLocalVariable Fixes #1612, Refs #1482 --- docs/pages/release_notes.md | 11 +++++++++++ .../main/resources/category/java/codestyle.xml | 16 +++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 855a1d241c..af0b321c9c 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -59,6 +59,14 @@ Table aliases are now supported when specifying columns in INSERT INTO clauses. non static initializers in anonymous classes anymore. For this use case, there is a new rule now: {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpractices`). +#### Deprecated Rules + +* The Java rule {% rule "java/codestyle/AvoidFinalLocalVariable" %} (`java-codestyle`) has been deprecated + and will be removed with PMD 7.0.0. The rule is controversial and also contradicts other existing + rules such as {% rule "java/codestyle/LocalVariableCouldBeFinal" %}. If the goal is to avoid defining + constants in a scope smaller than the class, then the rule {% rule "java/errorprone/AvoidDuplicateLiterals" %} + should be used instead. + ### Fixed Issues * apex @@ -69,6 +77,8 @@ Table aliases are now supported when specifying columns in INSERT INTO clauses. * [#1703](https://github.com/pmd/pmd/issues/1703): \[java] UnusedPrivateField on member annotated with lombok @Delegate * [#1845](https://github.com/pmd/pmd/issues/1845): \[java] Regression in MethodReturnsInternalArray not handling enums * [#1854](https://github.com/pmd/pmd/issues/1854): \[java] Rule to check for double brace initialisation +* java-codestyle + * [#1612](https://github.com/pmd/pmd/issues/1612): \[java] Deprecate AvoidFinalLocalVariable * java-design * [#1094](https://github.com/pmd/pmd/issues/1094): \[java] UseUtilityClass should be LombokAware * java-errorprone @@ -110,6 +120,7 @@ of deprecations. ### External Contributions +* [#1482](https://github.com/pmd/pmd/pull/1482): \[java] Explain the existence of AvoidFinalLocalVariable in it's description - [Karl-Philipp Richter](https://github.com/krichter722) * [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) * [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [Hugo Araya Nash](https://github.com/kabroxiko) * [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index 87a5bbb276..d6b5793180 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -92,10 +92,24 @@ public class Fo$o { // not a recommended name <rule name="AvoidFinalLocalVariable" language="java" since="4.1" + deprecated="true" class="net.sourceforge.pmd.lang.rule.XPathRule" message="Avoid using final local variables, turn them into fields" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codestyle.html#avoidfinallocalvariable"> - <description><![CDATA[Avoid using final local variables, turn them into fields. Note that this is a controversial rule which is merely useful to enforce a certain code style (which is contradictory to good coding practices in most of the cases it's applied to) and avoid local literals being declared in a scope smaller than the class. The rule is destined to be moved to the "controversial" ruleset again or removed alltogether, but not until 7.0.0, see https://github.com/pmd/pmd/issues/811 for the discussion about that.]]></description> + <description> +Avoid using final local variables, turn them into fields. + +Note that this is a controversial rule which is merely useful to enforce a certain code style +(which is contradictory to good coding practices in most of the cases it's applied to) and +avoid local literals being declared in a scope smaller than the class. + +Also note, that this rule is the opposite of {% rule "java/codestyle/LocalVariableCouldBeFinal" %}. +Having both rules enabled results in contradictory violations being reported. + +This rule is deprecated and will be removed with PMD 7.0.0. There is no replacement planned. +If the goal is to avoid defining constants in a scope smaller than the class, then the rule +{% rule "java/errorprone/AvoidDuplicateLiterals" %} should be used instead. + </description> <priority>3</priority> <properties> <property name="xpath"> From c2a45c64caad35aed004ea8c8fd95979c8ae2460 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 15:01:24 +0200 Subject: [PATCH 275/371] [java] CloseResource: verify first argument for chained streams --- .../rule/errorprone/CloseResourceRule.java | 19 +++++++++++++- .../rule/errorprone/xml/CloseResource.xml | 25 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index 589825fe01..d51bda2cc0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -42,7 +42,9 @@ import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.java.ast.ASTVariableInitializer; import net.sourceforge.pmd.lang.java.ast.TypeNode; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; +import net.sourceforge.pmd.lang.java.symboltable.VariableNameDeclaration; import net.sourceforge.pmd.lang.java.typeresolution.TypeHelper; +import net.sourceforge.pmd.lang.symboltable.NameOccurrence; import net.sourceforge.pmd.properties.PropertyDescriptor; /** @@ -187,10 +189,25 @@ public class CloseResourceRule extends AbstractJavaRule { private ASTExpression getAllocationFirstArgument(ASTExpression expression) { List<ASTAllocationExpression> allocations = expression.findDescendantsOfType(ASTAllocationExpression.class); + ASTExpression firstArgument = null; + if (!allocations.isEmpty()) { ASTArgumentList argumentList = allocations.get(allocations.size() - 1).getFirstDescendantOfType(ASTArgumentList.class); if (argumentList != null) { - return argumentList.getFirstChildOfType(ASTExpression.class); + firstArgument = argumentList.getFirstChildOfType(ASTExpression.class); + } + } + + // the argument must not be a literal, it needs to be a Name referring to a variable + if (firstArgument != null && firstArgument.getFirstDescendantOfType(ASTName.class) != null) { + ASTName name = firstArgument.getFirstDescendantOfType(ASTName.class); + + Map<VariableNameDeclaration, List<NameOccurrence>> vars = firstArgument.getScope() + .getDeclarations(VariableNameDeclaration.class); + for (VariableNameDeclaration nameDecl : vars.keySet()) { + if (nameDecl.getName().equals(name.getImage())) { + return firstArgument; + } } } return null; diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 95c8409c30..98df84b9f8 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -1038,6 +1038,31 @@ public class CloseResourcePrintWriter { pw.println("Foo"); return sw.toString(); } +} + ]]></code> + </test-code> + + <test-code> + <description>Correctly determine the type for the message</description> + <expected-problems>2</expected-problems> + <expected-linenumbers>7,8</expected-linenumbers> + <expected-messages> + <message>Ensure that resources like this FileInputStream object are closed after use</message> + <message>Ensure that resources like this Scanner object are closed after use</message> + </expected-messages> + <code><![CDATA[ +import java.io.*; +import java.util.Scanner; + +public class CloseResourceCase { + public void run() { + try { + FileInputStream in = new FileInputStream("MyFile.txt"); + Scanner input = new Scanner(System.in, "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + } + } } ]]></code> </test-code> From 3928242f5699ec12d0e5011be644df218c410b7e Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 15:05:05 +0200 Subject: [PATCH 276/371] (doc) Fix release notes --- docs/pages/release_notes.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 855a1d241c..47b697bb26 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -27,14 +27,16 @@ datetime field. Also date time literals are parsed now correctly. The CASE expression can now be properly used within SELECT statements. +Table aliases are now supported when specifying columns in INSERT INTO clauses. + #### New Rules * The Java rule {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpractices`) detects non static initializers in anonymous classes also known as "double brace initialization". This can be problematic, since a new class file is generated and object holds a strong reference to the surrounding class. - -Table aliases are now supported when specifying columns in INSERT INTO clauses. + + Note: This rule is also part of the Java quickstart ruleset (`rulesets/java/quickstart.xml`). #### Modified Rules From da69dc777a960913a331454da17f3d99fdfeeeeb Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 15:29:03 +0200 Subject: [PATCH 277/371] [java] CloseResource: fix another FP --- .../pmd/lang/java/rule/errorprone/CloseResourceRule.java | 2 +- .../pmd/lang/java/rule/errorprone/xml/CloseResource.xml | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index d51bda2cc0..abb6b8cf6f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -205,7 +205,7 @@ public class CloseResourceRule extends AbstractJavaRule { Map<VariableNameDeclaration, List<NameOccurrence>> vars = firstArgument.getScope() .getDeclarations(VariableNameDeclaration.class); for (VariableNameDeclaration nameDecl : vars.keySet()) { - if (nameDecl.getName().equals(name.getImage())) { + if (nameDecl.getName().equals(name.getImage()) && isResourceTypeOrSubtype(firstArgument)) { return firstArgument; } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 98df84b9f8..604380c3e5 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -1044,11 +1044,12 @@ public class CloseResourcePrintWriter { <test-code> <description>Correctly determine the type for the message</description> - <expected-problems>2</expected-problems> - <expected-linenumbers>7,8</expected-linenumbers> + <expected-problems>3</expected-problems> + <expected-linenumbers>7,8,10</expected-linenumbers> <expected-messages> <message>Ensure that resources like this FileInputStream object are closed after use</message> <message>Ensure that resources like this Scanner object are closed after use</message> + <message>Ensure that resources like this FileInputStream object are closed after use</message> </expected-messages> <code><![CDATA[ import java.io.*; @@ -1059,6 +1060,8 @@ public class CloseResourceCase { try { FileInputStream in = new FileInputStream("MyFile.txt"); Scanner input = new Scanner(System.in, "utf-8"); + String file = "MyFile.txt"; + FileInputStream in2 = new FileInputStream(file); } catch (Exception e) { e.printStackTrace(); } From 1e2d94ebf99c9362833746e2d4a3fb41eee06c80 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 15:56:34 +0200 Subject: [PATCH 278/371] Use released build-tools version 3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 07fc342ed7..8e58990380 100644 --- a/pom.xml +++ b/pom.xml @@ -283,7 +283,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <argLine>-Xmx512m -Dfile.encoding=${project.build.sourceEncoding}</argLine> - <pmd.build-tools.version>3-SNAPSHOT</pmd.build-tools.version> + <pmd.build-tools.version>3</pmd.build-tools.version> <pmd-designer.version>6.14.0</pmd-designer.version> </properties> From 634e3592c7ab4b12adfb601a6ff1fedf82fa7523 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@adangel.org> Date: Sat, 29 Jun 2019 21:35:01 +0200 Subject: [PATCH 279/371] Update docs/pages/release_notes.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Clément Fournier <clement.fournier76@gmail.com> --- docs/pages/release_notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 917a6cd3ff..3c3814cdf1 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -61,7 +61,7 @@ Table aliases are now supported when specifying columns in INSERT INTO clauses. * The Java rule {% rule "java/codestyle/CommentDefaultAccessModifier" %) (`java-codestyle`) was enhanced in the last version 6.15.0 to check also top-level types by default. This created many new violations. - Missing the access modifier for top-level types is not so criticial, since it only decreases the visibility + Missing the access modifier for top-level types is not so critical, since it only decreases the visibility of the type. The default behaviour has been restored. If you want to enable the check for top-level types, you can use the new property `checkTopLevelTypes`. From 45e2248fa7e1dd7cff1062c1d06fd10be936fb6e Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 29 Jun 2019 21:50:39 +0200 Subject: [PATCH 280/371] (doc) Add PMD article --- docs/pages/pmd/projectdocs/trivia/news.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/pages/pmd/projectdocs/trivia/news.md b/docs/pages/pmd/projectdocs/trivia/news.md index 7baabc251c..ec415ca8f4 100644 --- a/docs/pages/pmd/projectdocs/trivia/news.md +++ b/docs/pages/pmd/projectdocs/trivia/news.md @@ -20,7 +20,9 @@ author: Tom Copeland <tom@infoether.org> * November 2016 - Recording of [Robert Sösemann](https://github.com/rsoesemann)'s Session at Salesforce Dreamforce Conference about enforcing Clean Code in the Salesforce world using PMD and other tools [Clean Apex Code with Automatic Code Metrics](https://www.youtube.com/watch?v=bW7m6y6bEug) -### Other Language Modules +### PMD in general and other Language Modules + +* May 2019 - [Code quality assurance with PMD – An extensible static code analyser for Java and other languages](https://www.datarespons.com/code-quality-assurance-with-pmd/) * February 2012 - Romain Pelisse's lightning talk at FOSDEM 2012 about "PMD5: What can it do for you?". [Video recording is available](http://video.fosdem.org/2012/lightningtalks/PMD5.webm). From cbd88560074b41ddc44bc067db819e6683f14c84 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 30 Jun 2019 09:38:58 +0200 Subject: [PATCH 281/371] (doc) Update generated rule documentation --- docs/pages/pmd/rules/java.md | 4 +- docs/pages/pmd/rules/java/codestyle.md | 15 ++++++++ docs/pages/pmd/rules/java/errorprone.md | 49 ++++++++++++++++++------- 3 files changed, 53 insertions(+), 15 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 4d86fd52ee..1b72fec5cc 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -68,7 +68,7 @@ folder: pmd/rules * [AbstractNaming](pmd_rules_java_codestyle.html#abstractnaming): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Abstract classes should be named 'AbstractXXX'.This rule is deprecated and will be removed with P... * [AtLeastOneConstructor](pmd_rules_java_codestyle.html#atleastoneconstructor): Each non-static class should declare at least one constructor.Classes with solely static members ... * [AvoidDollarSigns](pmd_rules_java_codestyle.html#avoiddollarsigns): Avoid using dollar signs in variable/method/class/interface names. -* [AvoidFinalLocalVariable](pmd_rules_java_codestyle.html#avoidfinallocalvariable): Avoid using final local variables, turn them into fields. +* [AvoidFinalLocalVariable](pmd_rules_java_codestyle.html#avoidfinallocalvariable): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Avoid using final local variables, turn them into fields.Note that this is a controversial rule w... * [AvoidPrefixingMethodParameters](pmd_rules_java_codestyle.html#avoidprefixingmethodparameters): <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> Prefixing parameters by 'in' or 'out' pollutes the name of the parameters and reduces code readab... * [AvoidProtectedFieldInFinalClass](pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass): Do not use protected fields in final classes since they cannot be subclassed.Clarify your intent ... * [AvoidProtectedMethodInFinalClassNotExtending](pmd_rules_java_codestyle.html#avoidprotectedmethodinfinalclassnotextending): Do not use protected methods in most final classes since they cannot be subclassed. This shouldon... @@ -222,7 +222,7 @@ folder: pmd/rules * [CloneMethodMustImplementCloneable](pmd_rules_java_errorprone.html#clonemethodmustimplementcloneable): The method clone() should only be implemented if the class implements the Cloneable interface wit... * [CloneMethodReturnTypeMustMatchClassName](pmd_rules_java_errorprone.html#clonemethodreturntypemustmatchclassname): If a class implements cloneable the return type of the method clone() must be the class name. Tha... * [CloneThrowsCloneNotSupportedException](pmd_rules_java_errorprone.html#clonethrowsclonenotsupportedexception): The method clone() should throw a CloneNotSupportedException. -* [CloseResource](pmd_rules_java_errorprone.html#closeresource): Ensure that resources (like Connection, Statement, and ResultSet objects) are always closed after... +* [CloseResource](pmd_rules_java_errorprone.html#closeresource): Ensure that resources (like 'java.sql.Connection', 'java.sql.Statement', and 'java.sql.ResultSet'... * [CompareObjectsWithEquals](pmd_rules_java_errorprone.html#compareobjectswithequals): Use equals() to compare object references; avoid comparing them with ==. * [ConstructorCallsOverridableMethod](pmd_rules_java_errorprone.html#constructorcallsoverridablemethod): Calling overridable methods during construction poses a risk of invoking methods on an incomplete... * [DataflowAnomalyAnalysis](pmd_rules_java_errorprone.html#dataflowanomalyanalysis): The dataflow analysis tracks local definitions, undefinitions and references to variables on diff... diff --git a/docs/pages/pmd/rules/java/codestyle.md b/docs/pages/pmd/rules/java/codestyle.md index ef25185266..3c9cbab427 100644 --- a/docs/pages/pmd/rules/java/codestyle.md +++ b/docs/pages/pmd/rules/java/codestyle.md @@ -126,12 +126,25 @@ public class Fo$o { // not a recommended name ## AvoidFinalLocalVariable +<span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f;">Deprecated</span> + **Since:** PMD 4.1 **Priority:** Medium (3) Avoid using final local variables, turn them into fields. +Note that this is a controversial rule which is merely useful to enforce a certain code style +(which is contradictory to good coding practices in most of the cases it's applied to) and +avoid local literals being declared in a scope smaller than the class. + +Also note, that this rule is the opposite of {% rule "java/codestyle/LocalVariableCouldBeFinal" %}. +Having both rules enabled results in contradictory violations being reported. + +This rule is deprecated and will be removed with PMD 7.0.0. There is no replacement planned. +If the goal is to avoid defining constants in a scope smaller than the class, then the rule +{% rule "java/errorprone/AvoidDuplicateLiterals" %} should be used instead. + **This rule is defined by the following XPath expression:** ``` xpath //LocalVariableDeclaration[ @@ -512,6 +525,7 @@ public class Foo { |----|-------------|-----------|-----------| |ignoredAnnotations|com.google.common.annotations.VisibleForTesting \| android.support.annotation.VisibleForTesting|Fully qualified names of the annotation types that should be ignored by this rule|yes. Delimiter is '\|'.| |regex|\\/\\\*\\s+(default\|package)\\s+\\\*\\/|Regular expression|no| +|checkTopLevelTypes|false|Check for default access modifier in top-level classes, annotations, and enums|no| **Use this rule with the default properties by just referencing it:** ``` xml @@ -524,6 +538,7 @@ public class Foo { <properties> <property name="ignoredAnnotations" value="com.google.common.annotations.VisibleForTesting|android.support.annotation.VisibleForTesting" /> <property name="regex" value="\/\*\s+(default|package)\s+\*\/" /> + <property name="checkTopLevelTypes" value="false" /> </properties> </rule> ``` diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index 23386d725a..a85d3f1ed9 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -1163,7 +1163,17 @@ public class MyClass implements Cloneable{ **Priority:** Medium (3) -Ensure that resources (like Connection, Statement, and ResultSet objects) are always closed after use. +Ensure that resources (like `java.sql.Connection`, `java.sql.Statement`, and `java.sql.ResultSet` objects +and any subtype of `java.lang.AutoCloseable`) are always closed after use. +Failing to do so might result in resource leaks. + +Note: It suffices to configure the super type, e.g. `java.lang.AutoClosable`, so that this rule automatically triggers +on any subtype (e.g. `java.io.FileInputStream`). Additionally specifying `java.sql.Connection` helps in detecting +the types, if the type resolution / auxclasspath is not correctly setup. + +Note: Since PMD 6.16.0 the default value for the property `types` contains `java.lang.AutoCloseable` and detects +now cases where the standard `java.io.*Stream` classes are involved. In order to restore the old behaviour, +just remove "AutoCloseable" from the types. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.errorprone.CloseResourceRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java) @@ -1171,17 +1181,28 @@ Ensure that resources (like Connection, Statement, and ResultSet objects) are al ``` java public class Bar { - public void foo() { - Connection c = pool.getConnection(); - try { - // do stuff - } catch (SQLException ex) { - // handle exception - } finally { - // oops, should close the connection using 'close'! - // c.close(); + public void withSQL() { + Connection c = pool.getConnection(); + try { + // do stuff + } catch (SQLException ex) { + // handle exception + } finally { + // oops, should close the connection using 'close'! + // c.close(); + } + } + + public void withFile() { + InputStream file = new FileInputStream(new File("/tmp/foo")); + try { + int c = file.in(); + } catch (IOException e) { + // handle exception + } finally { + // TODO: close file + } } - } } ``` @@ -1190,8 +1211,9 @@ public class Bar { |Name|Default Value|Description|Multivalued| |----|-------------|-----------|-----------| |closeTargets||Methods which may close this resource|yes. Delimiter is ','.| -|types|java.sql.Connection , java.sql.Statement , java.sql.ResultSet|Affected types|yes. Delimiter is ','.| +|types|java.lang.AutoCloseable , java.sql.Connection , java.sql.Statement , java.sql.ResultSet|Affected types|yes. Delimiter is ','.| |closeAsDefaultTarget|true|Consider 'close' as a target by default|no| +|allowedResourceTypes|java.io.ByteArrayOutputStream \| java.io.StringWriter|Exact class names that do not need to be closed|yes. Delimiter is '\|'.| **Use this rule with the default properties by just referencing it:** ``` xml @@ -1203,8 +1225,9 @@ public class Bar { <rule ref="category/java/errorprone.xml/CloseResource"> <properties> <property name="closeTargets" value="" /> - <property name="types" value="java.sql.Connection,java.sql.Statement,java.sql.ResultSet" /> + <property name="types" value="java.lang.AutoCloseable,java.sql.Connection,java.sql.Statement,java.sql.ResultSet" /> <property name="closeAsDefaultTarget" value="true" /> + <property name="allowedResourceTypes" value="java.io.ByteArrayOutputStream|java.io.StringWriter" /> </properties> </rule> ``` From 17faa9ead4d475293aba35e4460626dce5dfd722 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 30 Jun 2019 09:39:28 +0200 Subject: [PATCH 282/371] Update pmd-designer to 6.16.0 --- docs/pages/release_notes.md | 5 +++++ pom.xml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index e1b36f133e..623c9b0936 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,6 +14,11 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Updated PMD Designer + +This PMD release ships a new version of the pmd-designer. +For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/6.16.0). + #### PLSQL Grammar Updates The grammar has been updated to support inline constraints in CREATE TABLE statements. Additionally, the diff --git a/pom.xml b/pom.xml index 8e58990380..9d2c7f9c8f 100644 --- a/pom.xml +++ b/pom.xml @@ -285,7 +285,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <pmd.build-tools.version>3</pmd.build-tools.version> - <pmd-designer.version>6.14.0</pmd-designer.version> + <pmd-designer.version>6.16.0</pmd-designer.version> </properties> <build> From 743671ff2376fa8111ff2fab4d30a0324f4f3e6d Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 30 Jun 2019 10:23:07 +0200 Subject: [PATCH 283/371] Prepare pmd release 6.16.0 --- docs/_config.yml | 2 +- docs/pages/next_major_development.md | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index 5791161d12..4b69c8bcaa 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -3,7 +3,7 @@ repository: pmd/pmd pmd: version: 6.16.0 previous_version: 6.15.0 - date: ??-June-2019 + date: 30-June-2019 release_type: minor # release types: major, minor, bugfix diff --git a/docs/pages/next_major_development.md b/docs/pages/next_major_development.md index e6ba911c9d..d2e0840206 100644 --- a/docs/pages/next_major_development.md +++ b/docs/pages/next_major_development.md @@ -73,6 +73,29 @@ the breaking API changes will be performed in 7.0.0. an API is tagged as `@Deprecated` or not in the latest minor release. During the development of 7.0.0, we may decide to remove some APIs that were not tagged as deprecated, though we'll try to avoid it." %} +#### 6.16.0 + +##### Deprecated APIs + +> Reminder: Please don't use members marked with the annotation {% jdoc core::annotation.InternalApi %}, as they will likely be removed, hidden, or otherwise intentionally broken with 7.0.0. + + +###### In ASTs + +As part of the changes we'd like to do to AST classes for 7.0.0, we would like to +hide some methods and constructors that rule writers should not have access to. +The following usages are now deprecated **in the Java AST** (with other languages to come): + +* Manual instantiation of nodes. **Constructors of node classes are deprecated** and marked {% jdoc core::annotation.InternalApi %}. Nodes should only be obtained from the parser, which for rules, means that never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. +* **Subclassing of abstract node classes, or usage of their type**. Version 7.0.0 will bring a new set of abstractions that will be public API, but the base classes are and will stay internal. You should not couple your code to them. + * In the meantime you should use interfaces like {% jdoc java::lang.java.ast.JavaNode %} or {% jdoc core::lang.ast.Node %}, or the other published interfaces in this package, to refer to nodes generically. + * Concrete node classes will **be made final** with 7.0.0. +* Setters found in any node class or interface. **Rules should consider the AST immutable**. We will make those setters package private with 7.0.0. + +Please look at {% jdoc_package java::lang.java.ast %} to find out the full list +of deprecations. + + #### 6.15.0 ##### Deprecated APIs From 45facbd32308e81c0e567e3f400f8161e30b5791 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 30 Jun 2019 10:32:58 +0200 Subject: [PATCH 284/371] [maven-release-plugin] prepare release pmd_releases/6.16.0 --- pmd-apex-jorje/pom.xml | 2 +- pmd-apex/pom.xml | 2 +- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dart/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-doc/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-groovy/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-kotlin/pom.xml | 2 +- pmd-lang-test/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-perl/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-visualforce/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 31 files changed, 32 insertions(+), 32 deletions(-) diff --git a/pmd-apex-jorje/pom.xml b/pmd-apex-jorje/pom.xml index 66e61df977..af396fbd32 100644 --- a/pmd-apex-jorje/pom.xml +++ b/pmd-apex-jorje/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <properties> diff --git a/pmd-apex/pom.xml b/pmd-apex/pom.xml index 4d551dd897..937ac0c0f3 100644 --- a/pmd-apex/pom.xml +++ b/pmd-apex/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <properties> diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index c33d0008d7..73af4e9e17 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index 9f26738735..9e96d4cf0b 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index 0ec9a88410..eafefb2d0d 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-dart/pom.xml b/pmd-dart/pom.xml index 68c14c4151..1fd0028029 100644 --- a/pmd-dart/pom.xml +++ b/pmd-dart/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index a992ec8570..33d0bc3fd3 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <properties> diff --git a/pmd-doc/pom.xml b/pmd-doc/pom.xml index c32d846fa3..cfcd893542 100644 --- a/pmd-doc/pom.xml +++ b/pmd-doc/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <properties> diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index 48b49b8d5a..d38d97f8ac 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index f92f9a4104..58a1a04d91 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-groovy/pom.xml b/pmd-groovy/pom.xml index 26f7fb1d54..8509b9a44e 100644 --- a/pmd-groovy/pom.xml +++ b/pmd-groovy/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index 98f8f964c8..cd5ba93f5d 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index 24fb01995e..dc30732bd7 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <properties> diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index a61b4024c4..6de9dc6f84 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 8afa365d0a..3d9b07051b 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index da6fc60074..c294cbd2b0 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml index eba4e23799..f3ee6d7e87 100644 --- a/pmd-lang-test/pom.xml +++ b/pmd-lang-test/pom.xml @@ -12,7 +12,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index c0a8c4afbf..2b67fbf5c2 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index 0f76fa1b53..7e76f143e9 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml index 599df6c63d..d02be73bf6 100644 --- a/pmd-perl/pom.xml +++ b/pmd-perl/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index a69b1b0f18..0b3b6681b9 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index 5617aaa34d..cdfb3b0e80 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index a977c9d094..0680397676 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index 84af9ba351..fd1768472b 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <dependencies> diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index 83fe5e567a..3a36c8a12a 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <properties> diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index de51b2a4e0..018aa275de 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index 4c5f3b012a..3039102b9d 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <dependencies> diff --git a/pmd-visualforce/pom.xml b/pmd-visualforce/pom.xml index e5dbe32a95..dc92460314 100644 --- a/pmd-visualforce/pom.xml +++ b/pmd-visualforce/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index 885fc90202..5c156570d3 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index cf00576b5e..e27e5ad218 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> </parent> <build> diff --git a/pom.xml b/pom.xml index 9d2c7f9c8f..4c7d5843a8 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0-SNAPSHOT</version> + <version>6.16.0</version> <packaging>pom</packaging> <name>PMD</name> @@ -234,7 +234,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <connection>scm:git:git://github.com/pmd/pmd.git</connection> <developerConnection>scm:git:ssh://git@github.com/pmd/pmd.git</developerConnection> <url>https://github.com/pmd/pmd</url> - <tag>HEAD</tag> + <tag>pmd_releases/6.16.0</tag> </scm> <distributionManagement> <snapshotRepository> From 73a8e4cc69ab4408feef209f449250a48a7bd126 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 30 Jun 2019 10:33:08 +0200 Subject: [PATCH 285/371] [maven-release-plugin] prepare for next development iteration --- pmd-apex-jorje/pom.xml | 2 +- pmd-apex/pom.xml | 2 +- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dart/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-doc/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-groovy/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-kotlin/pom.xml | 2 +- pmd-lang-test/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-perl/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-visualforce/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 31 files changed, 32 insertions(+), 32 deletions(-) diff --git a/pmd-apex-jorje/pom.xml b/pmd-apex-jorje/pom.xml index af396fbd32..fc096ae970 100644 --- a/pmd-apex-jorje/pom.xml +++ b/pmd-apex-jorje/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-apex/pom.xml b/pmd-apex/pom.xml index 937ac0c0f3..3f7204095f 100644 --- a/pmd-apex/pom.xml +++ b/pmd-apex/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index 73af4e9e17..e5c36bdd33 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index 9e96d4cf0b..1c544d5fd3 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index eafefb2d0d..c158bb1cf6 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-dart/pom.xml b/pmd-dart/pom.xml index 1fd0028029..9e3967ee4c 100644 --- a/pmd-dart/pom.xml +++ b/pmd-dart/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 33d0bc3fd3..1540caebfc 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-doc/pom.xml b/pmd-doc/pom.xml index cfcd893542..ab62832e72 100644 --- a/pmd-doc/pom.xml +++ b/pmd-doc/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index d38d97f8ac..d180c4bbed 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index 58a1a04d91..5b2f85b429 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-groovy/pom.xml b/pmd-groovy/pom.xml index 8509b9a44e..26cbc9832a 100644 --- a/pmd-groovy/pom.xml +++ b/pmd-groovy/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index cd5ba93f5d..2213df1538 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index dc30732bd7..ca34c630b8 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index 6de9dc6f84..ab05feefe0 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 3d9b07051b..1f4fe8dc29 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index c294cbd2b0..db9b4710f7 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml index f3ee6d7e87..993bacd4b3 100644 --- a/pmd-lang-test/pom.xml +++ b/pmd-lang-test/pom.xml @@ -12,7 +12,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index 2b67fbf5c2..b2167a5daf 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index 7e76f143e9..d3da39e300 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml index d02be73bf6..9f6c8dcc38 100644 --- a/pmd-perl/pom.xml +++ b/pmd-perl/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index 0b3b6681b9..2b5e989163 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index cdfb3b0e80..f6f82b1dce 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index 0680397676..09f8a3de02 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index fd1768472b..72b40cb720 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <dependencies> diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index 3a36c8a12a..d5eff767b3 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 018aa275de..3be97f4d3b 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index 3039102b9d..0bf33fe77a 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <dependencies> diff --git a/pmd-visualforce/pom.xml b/pmd-visualforce/pom.xml index dc92460314..ff9e531d6d 100644 --- a/pmd-visualforce/pom.xml +++ b/pmd-visualforce/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index 5c156570d3..72407cf8c5 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index e27e5ad218..2ec3dc6ecd 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> </parent> <build> diff --git a/pom.xml b/pom.xml index 4c7d5843a8..64d59a86b4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.16.0</version> + <version>6.17.0-SNAPSHOT</version> <packaging>pom</packaging> <name>PMD</name> @@ -234,7 +234,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <connection>scm:git:git://github.com/pmd/pmd.git</connection> <developerConnection>scm:git:ssh://git@github.com/pmd/pmd.git</developerConnection> <url>https://github.com/pmd/pmd</url> - <tag>pmd_releases/6.16.0</tag> + <tag>HEAD</tag> </scm> <distributionManagement> <snapshotRepository> From f6c43c63b61627535f729c2847b7a298b08f01d4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 30 Jun 2019 11:04:30 +0200 Subject: [PATCH 286/371] Prepare next development version --- docs/_config.yml | 6 +- docs/pages/release_notes.md | 141 ---------------------------- docs/pages/release_notes_old.md | 161 ++++++++++++++++++++++++++++++++ 3 files changed, 164 insertions(+), 144 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index 4b69c8bcaa..e72b65f35a 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,9 +1,9 @@ repository: pmd/pmd pmd: - version: 6.16.0 - previous_version: 6.15.0 - date: 30-June-2019 + version: 6.17.0 + previous_version: 6.16.0 + date: ??-July-2019 release_type: minor # release types: major, minor, bugfix diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 623c9b0936..b8f8783555 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,152 +14,11 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy -#### Updated PMD Designer - -This PMD release ships a new version of the pmd-designer. -For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/6.16.0). - -#### PLSQL Grammar Updates - -The grammar has been updated to support inline constraints in CREATE TABLE statements. Additionally, the -CREATE TABLE statement may now be followed by physical properties and table properties. However, these -properties are skipped over during parsing. - -The CREATE VIEW statement now supports subquery views. - -The EXTRACT function can now be parsed correctly. It is used to extract values from a specified -datetime field. Also date time literals are parsed now correctly. - -The CASE expression can now be properly used within SELECT statements. - -Table aliases are now supported when specifying columns in INSERT INTO clauses. - -#### New Rules - -* The Java rule {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpractices`) - detects non static initializers in anonymous classes also known as "double brace initialization". - This can be problematic, since a new class file is generated and object holds a strong reference - to the surrounding class. - - Note: This rule is also part of the Java quickstart ruleset (`rulesets/java/quickstart.xml`). - -#### Modified Rules - -* The Java rule {% rule "java/bestpractices/UnusedPrivateField" %} (`java-bestpractices`) now ignores by - default fields, that are annotated with the Lombok experimental annotation `@Delegate`. This can be - customized with the property `ignoredAnnotations`. - -* The Java rule {% rule "java/design/SingularField" %} (`java-design`) now ignores by - default fields, that are annotated with the Lombok experimental annotation `@Delegate`. This can be - customized with the property `ignoredAnnotations`. - -* The Java rules {% rule "java/multithreading/UnsynchronizedStaticFormatter" %} and - {% rule "java/multithreading/UnsynchronizedStaticDateFormatter" %} (`java-multithreading`) - now prefer synchronized blocks by default. They will raise a violation, if the synchronization is implemented - on the method level. To allow the old behavior, the new property `allowMethodLevelSynchronization` can - be enabled. - -* The Java rule {% rule "java/design/UseUtilityClass" %} (`java-design`) has a new property `ignoredAnnotations`. - By default, classes that are annotated with Lombok's `@UtilityClass` are ignored now. - -* The Java rule {% rule "java/errorprone/NonStaticInitializer" %} (`java-errorprone`) does not report - non static initializers in anonymous classes anymore. For this use case, there is a new rule now: - {% rule "java/bestpractices/DoubleBraceInitialization" %} (`java-bestpractices`). - -* The Java rule {% rule "java/codestyle/CommentDefaultAccessModifier" %) (`java-codestyle`) was enhanced - in the last version 6.15.0 to check also top-level types by default. This created many new violations. - Missing the access modifier for top-level types is not so critical, since it only decreases the visibility - of the type. - - The default behaviour has been restored. If you want to enable the check for top-level types, you can - use the new property `checkTopLevelTypes`. - -* The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) now by default searches - for any unclosed `java.lang.AutoCloseable` resource. This includes now the standard `java.io.*Stream` classes. - Previously only SQL-related resources were considered by this rule. The types can still be configured - via the `types` property. Some resources do not need to be closed (e.g. `ByteArrayOutputStream`). These - exceptions can be configured via the new property `allowedResourceTypes`. - In order to restore the old behaviour, just remove the type `java.lang.AutoCloseable` from the `types` - property and keep the remaining SQL-related classes. - -#### Deprecated Rules - -* The Java rule {% rule "java/codestyle/AvoidFinalLocalVariable" %} (`java-codestyle`) has been deprecated - and will be removed with PMD 7.0.0. The rule is controversial and also contradicts other existing - rules such as {% rule "java/codestyle/LocalVariableCouldBeFinal" %}. If the goal is to avoid defining - constants in a scope smaller than the class, then the rule {% rule "java/errorprone/AvoidDuplicateLiterals" %} - should be used instead. - ### Fixed Issues -* apex - * [#1664](https://github.com/pmd/pmd/issues/1664): \[apex] False positive ApexSharingViolationsRule, unsupported Apex feature -* java - * [#1848](https://github.com/pmd/pmd/issues/1848): \[java] Local classes should preserve their modifiers -* java-bestpractices - * [#1703](https://github.com/pmd/pmd/issues/1703): \[java] UnusedPrivateField on member annotated with lombok @Delegate - * [#1845](https://github.com/pmd/pmd/issues/1845): \[java] Regression in MethodReturnsInternalArray not handling enums - * [#1854](https://github.com/pmd/pmd/issues/1854): \[java] Rule to check for double brace initialisation -* java-codestyle - * [#1612](https://github.com/pmd/pmd/issues/1612): \[java] Deprecate AvoidFinalLocalVariable - * [#1880](https://github.com/pmd/pmd/issues/1880): \[java] CommentDefaultAccessModifier should be configurable for top-level classes -* java-design - * [#1094](https://github.com/pmd/pmd/issues/1094): \[java] UseUtilityClass should be LombokAware -* java-errorprone - * [#1000](https://github.com/pmd/pmd/issues/1000): \[java] The rule CloseResource should deal with IO stream as default - * [#1853](https://github.com/pmd/pmd/issues/1853): \[java] False positive for NonStaticInitializer in anonymous class -* java-multithreading - * [#1814](https://github.com/pmd/pmd/issues/1814): \[java] UnsynchronizedStaticFormatter documentation and implementation wrong - * [#1815](https://github.com/pmd/pmd/issues/1815): \[java] False negative in UnsynchronizedStaticFormatter -* plsql - * [#1828](https://github.com/pmd/pmd/issues/1828): \[plsql] Parentheses stopped working - * [#1850](https://github.com/pmd/pmd/issues/1850): \[plsql] Parsing errors with INSERT using returning or records and TRIM expression - * [#1873](https://github.com/pmd/pmd/issues/1873): \[plsql] Expression list not working - * [#1878](https://github.com/pmd/pmd/issues/1878): \[pslql] ParseException when parsing USING - * [#1879](https://github.com/pmd/pmd/issues/1879): \[pslql] ParseException when parsing LEFT JOIN - ### API Changes -#### Deprecated APIs - -> Reminder: Please don't use members marked with the annotation {% jdoc core::annotation.InternalApi %}, as they will likely be removed, hidden, or otherwise intentionally broken with 7.0.0. - - -##### In ASTs - -As part of the changes we'd like to do to AST classes for 7.0.0, we would like to -hide some methods and constructors that rule writers should not have access to. -The following usages are now deprecated **in the Java AST** (with other languages to come): - -* Manual instantiation of nodes. **Constructors of node classes are deprecated** and marked {% jdoc core::annotation.InternalApi %}. Nodes should only be obtained from the parser, which for rules, means that never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. -* **Subclassing of abstract node classes, or usage of their type**. Version 7.0.0 will bring a new set of abstractions that will be public API, but the base classes are and will stay internal. You should not couple your code to them. - * In the meantime you should use interfaces like {% jdoc java::lang.java.ast.JavaNode %} or {% jdoc core::lang.ast.Node %}, or the other published interfaces in this package, to refer to nodes generically. - * Concrete node classes will **be made final** with 7.0.0. -* Setters found in any node class or interface. **Rules should consider the AST immutable**. We will make those setters package private with 7.0.0. - -Please look at {% jdoc_package java::lang.java.ast %} to find out the full list -of deprecations. - - - - - ### External Contributions -* [#1482](https://github.com/pmd/pmd/pull/1482): \[java] Explain the existence of AvoidFinalLocalVariable in it's description - [Karl-Philipp Richter](https://github.com/krichter722) -* [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) -* [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) -* [#1847](https://github.com/pmd/pmd/pull/1847): \[java] Regression in MethodReturnsInternalArray not handling enums - [Artem](https://github.com/KroArtem) -* [#1863](https://github.com/pmd/pmd/pull/1863): \[plsql] Add Table InlineConstraint - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1876](https://github.com/pmd/pmd/pull/1876): \[plsql] Datetime support for queries - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1883](https://github.com/pmd/pmd/pull/1883): \[plsql] Fix #1873 Expression list not working - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1884](https://github.com/pmd/pmd/pull/1884): \[plsql] fix #1878 Support explicit INNER word for INNER JOIN - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1885](https://github.com/pmd/pmd/pull/1885): \[plsql] Correct case expression - [Hugo Araya Nash](https://github.com/kabroxiko) -* [#1886](https://github.com/pmd/pmd/pull/1886): \[plsql] Support table alias for Insert Clause - [Hugo Araya Nash](https://github.com/kabroxiko) - {% endtocmaker %} diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md index ea1ed77757..2765fcd089 100644 --- a/docs/pages/release_notes_old.md +++ b/docs/pages/release_notes_old.md @@ -5,6 +5,167 @@ permalink: pmd_release_notes_old.html Previous versions of PMD can be downloaded here: https://github.com/pmd/pmd/releases +## 30-June-2019 - 6.16.0 + +The PMD team is pleased to announce PMD 6.16.0. + +This is a minor release. + +### Table Of Contents + +* [New and noteworthy](#new-and-noteworthy) + * [Updated PMD Designer](#updated-pmd-designer) + * [PLSQL Grammar Updates](#plsql-grammar-updates) + * [New Rules](#new-rules) + * [Modified Rules](#modified-rules) + * [Deprecated Rules](#deprecated-rules) +* [Fixed Issues](#fixed-issues) +* [API Changes](#api-changes) + * [Deprecated APIs](#deprecated-apis) + * [In ASTs](#in-asts) +* [External Contributions](#external-contributions) + +### New and noteworthy + +#### Updated PMD Designer + +This PMD release ships a new version of the pmd-designer. +For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/6.16.0). + +#### PLSQL Grammar Updates + +The grammar has been updated to support inline constraints in CREATE TABLE statements. Additionally, the +CREATE TABLE statement may now be followed by physical properties and table properties. However, these +properties are skipped over during parsing. + +The CREATE VIEW statement now supports subquery views. + +The EXTRACT function can now be parsed correctly. It is used to extract values from a specified +datetime field. Also date time literals are parsed now correctly. + +The CASE expression can now be properly used within SELECT statements. + +Table aliases are now supported when specifying columns in INSERT INTO clauses. + +#### New Rules + +* The Java rule [`DoubleBraceInitialization`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_bestpractices.html#doublebraceinitialization) (`java-bestpractices`) + detects non static initializers in anonymous classes also known as "double brace initialization". + This can be problematic, since a new class file is generated and object holds a strong reference + to the surrounding class. + + Note: This rule is also part of the Java quickstart ruleset (`rulesets/java/quickstart.xml`). + +#### Modified Rules + +* The Java rule [`UnusedPrivateField`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_bestpractices.html#unusedprivatefield) (`java-bestpractices`) now ignores by + default fields, that are annotated with the Lombok experimental annotation `@Delegate`. This can be + customized with the property `ignoredAnnotations`. + +* The Java rule [`SingularField`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_design.html#singularfield) (`java-design`) now ignores by + default fields, that are annotated with the Lombok experimental annotation `@Delegate`. This can be + customized with the property `ignoredAnnotations`. + +* The Java rules [`UnsynchronizedStaticFormatter`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_multithreading.html#unsynchronizedstaticformatter) and + [`UnsynchronizedStaticDateFormatter`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_multithreading.html#unsynchronizedstaticdateformatter) (`java-multithreading`) + now prefer synchronized blocks by default. They will raise a violation, if the synchronization is implemented + on the method level. To allow the old behavior, the new property `allowMethodLevelSynchronization` can + be enabled. + +* The Java rule [`UseUtilityClass`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_design.html#useutilityclass) (`java-design`) has a new property `ignoredAnnotations`. + By default, classes that are annotated with Lombok's `@UtilityClass` are ignored now. + +* The Java rule [`NonStaticInitializer`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_errorprone.html#nonstaticinitializer) (`java-errorprone`) does not report + non static initializers in anonymous classes anymore. For this use case, there is a new rule now: + [`DoubleBraceInitialization`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_bestpractices.html#doublebraceinitialization) (`java-bestpractices`). + +* The Java rule [`CommentDefaultAccessModifier`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier) (`java-errorprone`) now by default searches + for any unclosed `java.lang.AutoCloseable` resource. This includes now the standard `java.io.*Stream` classes. + Previously only SQL-related resources were considered by this rule. The types can still be configured + via the `types` property. Some resources do not need to be closed (e.g. `ByteArrayOutputStream`). These + exceptions can be configured via the new property `allowedResourceTypes`. + In order to restore the old behaviour, just remove the type `java.lang.AutoCloseable` from the `types` + property and keep the remaining SQL-related classes. + +#### Deprecated Rules + +* The Java rule [`AvoidFinalLocalVariable`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_codestyle.html#avoidfinallocalvariable) (`java-codestyle`) has been deprecated + and will be removed with PMD 7.0.0. The rule is controversial and also contradicts other existing + rules such as [`LocalVariableCouldBeFinal`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_codestyle.html#localvariablecouldbefinal). If the goal is to avoid defining + constants in a scope smaller than the class, then the rule [`AvoidDuplicateLiterals`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_errorprone.html#avoidduplicateliterals) + should be used instead. + +### Fixed Issues + +* apex + * [#1664](https://github.com/pmd/pmd/issues/1664): \[apex] False positive ApexSharingViolationsRule, unsupported Apex feature +* java + * [#1848](https://github.com/pmd/pmd/issues/1848): \[java] Local classes should preserve their modifiers +* java-bestpractices + * [#1703](https://github.com/pmd/pmd/issues/1703): \[java] UnusedPrivateField on member annotated with lombok @Delegate + * [#1845](https://github.com/pmd/pmd/issues/1845): \[java] Regression in MethodReturnsInternalArray not handling enums + * [#1854](https://github.com/pmd/pmd/issues/1854): \[java] Rule to check for double brace initialisation +* java-codestyle + * [#1612](https://github.com/pmd/pmd/issues/1612): \[java] Deprecate AvoidFinalLocalVariable + * [#1880](https://github.com/pmd/pmd/issues/1880): \[java] CommentDefaultAccessModifier should be configurable for top-level classes +* java-design + * [#1094](https://github.com/pmd/pmd/issues/1094): \[java] UseUtilityClass should be LombokAware +* java-errorprone + * [#1000](https://github.com/pmd/pmd/issues/1000): \[java] The rule CloseResource should deal with IO stream as default + * [#1853](https://github.com/pmd/pmd/issues/1853): \[java] False positive for NonStaticInitializer in anonymous class +* java-multithreading + * [#1814](https://github.com/pmd/pmd/issues/1814): \[java] UnsynchronizedStaticFormatter documentation and implementation wrong + * [#1815](https://github.com/pmd/pmd/issues/1815): \[java] False negative in UnsynchronizedStaticFormatter +* plsql + * [#1828](https://github.com/pmd/pmd/issues/1828): \[plsql] Parentheses stopped working + * [#1850](https://github.com/pmd/pmd/issues/1850): \[plsql] Parsing errors with INSERT using returning or records and TRIM expression + * [#1873](https://github.com/pmd/pmd/issues/1873): \[plsql] Expression list not working + * [#1878](https://github.com/pmd/pmd/issues/1878): \[pslql] ParseException when parsing USING + * [#1879](https://github.com/pmd/pmd/issues/1879): \[pslql] ParseException when parsing LEFT JOIN + +### API Changes + +#### Deprecated APIs + +> Reminder: Please don't use members marked with the annotation [`InternalApi`](https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.16.0/net/sourceforge/pmd/annotation/InternalApi.html#), as they will likely be removed, hidden, or otherwise intentionally broken with 7.0.0. + + +##### In ASTs + +As part of the changes we'd like to do to AST classes for 7.0.0, we would like to +hide some methods and constructors that rule writers should not have access to. +The following usages are now deprecated **in the Java AST** (with other languages to come): + +* Manual instantiation of nodes. **Constructors of node classes are deprecated** and marked [`InternalApi`](https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.16.0/net/sourceforge/pmd/annotation/InternalApi.html#). Nodes should only be obtained from the parser, which for rules, means that never need to instantiate node themselves. Those constructors will be made package private with 7.0.0. +* **Subclassing of abstract node classes, or usage of their type**. Version 7.0.0 will bring a new set of abstractions that will be public API, but the base classes are and will stay internal. You should not couple your code to them. + * In the meantime you should use interfaces like [`JavaNode`](https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.16.0/net/sourceforge/pmd/lang/java/ast/JavaNode.html#) or [`Node`](https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.16.0/net/sourceforge/pmd/lang/ast/Node.html#), or the other published interfaces in this package, to refer to nodes generically. + * Concrete node classes will **be made final** with 7.0.0. +* Setters found in any node class or interface. **Rules should consider the AST immutable**. We will make those setters package private with 7.0.0. + +Please look at [`net.sourceforge.pmd.lang.java.ast`](https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.16.0/net/sourceforge/pmd/lang/java/ast/package-summary.html#) to find out the full list +of deprecations. + + + + + +### External Contributions + +* [#1482](https://github.com/pmd/pmd/pull/1482): \[java] Explain the existence of AvoidFinalLocalVariable in it's description - [Karl-Philipp Richter](https://github.com/krichter722) +* [#1792](https://github.com/pmd/pmd/pull/1792): \[java] Added lombok.experimental to AbstractLombokAwareRule - [jakivey32](https://github.com/jakivey32) +* [#1808](https://github.com/pmd/pmd/pull/1808): \[plsql] Fix PL/SQL Syntax errors - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1829](https://github.com/pmd/pmd/pull/1829): \[java] Fix false negative in UnsynchronizedStaticFormatter - [Srinivasan Venkatachalam](https://github.com/Srini1993) +* [#1847](https://github.com/pmd/pmd/pull/1847): \[java] Regression in MethodReturnsInternalArray not handling enums - [Artem](https://github.com/KroArtem) +* [#1863](https://github.com/pmd/pmd/pull/1863): \[plsql] Add Table InlineConstraint - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1876](https://github.com/pmd/pmd/pull/1876): \[plsql] Datetime support for queries - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1883](https://github.com/pmd/pmd/pull/1883): \[plsql] Fix #1873 Expression list not working - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1884](https://github.com/pmd/pmd/pull/1884): \[plsql] fix #1878 Support explicit INNER word for INNER JOIN - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1885](https://github.com/pmd/pmd/pull/1885): \[plsql] Correct case expression - [Hugo Araya Nash](https://github.com/kabroxiko) +* [#1886](https://github.com/pmd/pmd/pull/1886): \[plsql] Support table alias for Insert Clause - [Hugo Araya Nash](https://github.com/kabroxiko) + ## 26-May-2019 - 6.15.0 The PMD team is pleased to announce PMD 6.15.0. From 1a690ed1e83875773183b73a333d421b3cdff062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Mon, 1 Jul 2019 18:33:48 +0200 Subject: [PATCH 287/371] Fix DoubleBraceInitialization example --- .../resources/category/java/bestpractices.xml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/bestpractices.xml b/pmd-java/src/main/resources/category/java/bestpractices.xml index acb14b3c08..1cbc1fe9ab 100644 --- a/pmd-java/src/main/resources/category/java/bestpractices.xml +++ b/pmd-java/src/main/resources/category/java/bestpractices.xml @@ -424,16 +424,15 @@ public class Foo { </value> </property> </properties> - <example> -<![CDATA[ - // this is double-brace initialization - return new ArrayList<String>(){{addAll("a","b","c");}}; + <example><![CDATA[ +// this is double-brace initialization +return new ArrayList<String>(){%raw%}{{ addAll("a","b","c"); }};{%endraw%} - // the better way is to not create an anonymous class: - List<String> a=new ArrayList<>(); - a.addAll("a","b","c"); - return a; - ]]> +// the better way is to not create an anonymous class: +List<String> a = new ArrayList<>(); +a.addAll("a","b","c"); +return a; +]]> </example> </rule> From 85186f46aa268b6b8c8f0a1c0c83a09e7265d46f Mon Sep 17 00:00:00 2001 From: "Travis CI (pmd-bot)" <andreas.dangel+pmd-bot@adangel.org> Date: Mon, 1 Jul 2019 16:53:51 +0000 Subject: [PATCH 288/371] Update documentation TRAVIS_JOB_NUMBER=3945.1 TRAVIS_COMMIT_RANGE=f6c43c63b616...1a690ed1e838 --- docs/pages/pmd/rules/java/bestpractices.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/pages/pmd/rules/java/bestpractices.md b/docs/pages/pmd/rules/java/bestpractices.md index 3f64ad46fc..4fe71fb790 100644 --- a/docs/pages/pmd/rules/java/bestpractices.md +++ b/docs/pages/pmd/rules/java/bestpractices.md @@ -488,12 +488,12 @@ accessible from outside the anonymous class, and those legit cases should be sup ``` java // this is double-brace initialization - return new ArrayList<String>(){{addAll("a","b","c");}}; +return new ArrayList<String>(){%raw%}{{ addAll("a","b","c"); }};{%endraw%} - // the better way is to not create an anonymous class: - List<String> a=new ArrayList<>(); - a.addAll("a","b","c"); - return a; +// the better way is to not create an anonymous class: +List<String> a = new ArrayList<>(); +a.addAll("a","b","c"); +return a; ``` **Use this rule by referencing it:** From e8f62f8d58f27300cca06b841704fa75ae3ab936 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Mon, 1 Jul 2019 19:06:45 +0200 Subject: [PATCH 289/371] Fix release notes for 6.16.0 Refs #1896 --- docs/pages/release_notes_old.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md index 2765fcd089..477d4a430d 100644 --- a/docs/pages/release_notes_old.md +++ b/docs/pages/release_notes_old.md @@ -79,7 +79,15 @@ Table aliases are now supported when specifying columns in INSERT INTO clauses. non static initializers in anonymous classes anymore. For this use case, there is a new rule now: [`DoubleBraceInitialization`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_bestpractices.html#doublebraceinitialization) (`java-bestpractices`). -* The Java rule [`CommentDefaultAccessModifier`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier) (`java-errorprone`) now by default searches +* The Java rule [`CommentDefaultAccessModifier`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier) (`java-codestyle`) was enhanced + in the last version 6.15.0 to check also top-level types by default. This created many new violations. + Missing the access modifier for top-level types is not so critical, since it only decreases the visibility + of the type. + + The default behaviour has been restored. If you want to enable the check for top-level types, you can + use the new property `checkTopLevelTypes`. + +* The Java rule [`CloseResource`](https://pmd.github.io/pmd-6.16.0/pmd_rules_java_errorprone.html#closeresource) (`java-errorprone`) now by default searches for any unclosed `java.lang.AutoCloseable` resource. This includes now the standard `java.io.*Stream` classes. Previously only SQL-related resources were considered by this rule. The types can still be configured via the `types` property. Some resources do not need to be closed (e.g. `ByteArrayOutputStream`). These From cf16484ec6d294d0c1c7aa8ccac1e05dbb522a5f Mon Sep 17 00:00:00 2001 From: YoonhoChoi96 <uenho830@gmail.com> Date: Fri, 5 Jul 2019 10:04:37 +0900 Subject: [PATCH 290/371] Modifiying for reduce Fasle Positive in DFA Analysis Rule --- .../lang/java/dfa/VariableAccessVisitor.java | 58 ++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java index ecd6348877..d60c3649d1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java @@ -4,7 +4,9 @@ package net.sourceforge.pmd.lang.java.dfa; +import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -14,6 +16,7 @@ import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.dfa.DataFlowNode; import net.sourceforge.pmd.lang.dfa.StartOrEndDataFlowNode; import net.sourceforge.pmd.lang.dfa.VariableAccess; +import net.sourceforge.pmd.lang.java.ast.ASTAssignmentOperator; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTFormalParameter; @@ -45,6 +48,8 @@ public class VariableAccessVisitor extends JavaParserVisitorAdapter { } private void computeNow(Node node) { + + DataFlowNode inode = node.getDataFlowNode(); List<VariableAccess> undefinitions = markUsages(inode); @@ -65,7 +70,6 @@ public class VariableAccessVisitor extends JavaParserVisitorAdapter { for (Map<VariableNameDeclaration, List<NameOccurrence>> declarations : variableDeclarations) { for (Map.Entry<VariableNameDeclaration, List<NameOccurrence>> entry : declarations.entrySet()) { VariableNameDeclaration vnd = entry.getKey(); - if (vnd.getAccessNodeParent() instanceof ASTFormalParameter) { // no definition/undefinition/references for parameters continue; @@ -76,8 +80,58 @@ public class VariableAccessVisitor extends JavaParserVisitorAdapter { } undefinitions.add(new VariableAccess(VariableAccess.UNDEFINITION, vnd.getImage())); + //make arraylist which could store all name occurrences + List<NameOccurrence> data = new ArrayList<>(); + + //make arraylist which could store sorted name occurrences + List<NameOccurrence> order = new ArrayList<>(); + + //add all occurrences to arraylist(data) for (NameOccurrence occurrence : entry.getValue()) { - addAccess((JavaNameOccurrence) occurrence, inode); + data.add(occurrence); + } + + //make arraylist which could store pair structure which is consist of assignment operator and related Name occurrences + ArrayList<SimpleEntry<Node, NameOccurrence>> assignments = new ArrayList<>(); + + //travers all elements which are in arraylist(data) + for (NameOccurrence name : data) { + //Make a flag which is for preventing double addition of same name occurrence + int flag = 0; + //traverse parents nodes until it is method declaration or constructor declaration + checker : + for (Node temp = name.getLocation(); !(temp.jjtGetParent() instanceof ASTMethodDeclaration) + && !(temp.jjtGetParent() instanceof ASTConstructorDeclaration); temp = temp.jjtGetParent()) { + //traverse children nodes to check it has assignment operator as a child + for (int i = 0; i < temp.jjtGetNumChildren(); i++) { + if (temp.jjtGetChild(i) instanceof ASTAssignmentOperator) { + //if assignment operator is found, add to arraylist(assignments) with the assignment operator and its name + assignments.add(new SimpleEntry(temp.jjtGetChild(i), name)); + //change flag + flag = 1; + break checker; + } + } + } + //if a name is not related to assignment operator, add to arraylist(assignments) with null and its name + if (flag == 0) { + assignments.add(new SimpleEntry(null, name)); + } + } + //swap the arraylist(assignments)'s elements, when it share same assignment operator + for (int i = 0; i < assignments.size() - 1; i++) { + if (assignments.get(i).getKey() != null + && assignments.get(i).getKey().equals(assignments.get(i + 1).getKey())) { + Collections.swap(assignments, i, i + 1); + } + } + //add sorted element from assignments(arraylist) to order(arraylist) + for (SimpleEntry<Node, NameOccurrence> tempPair : assignments) { + order.add(tempPair.getValue()); + } + //add access to the sorted arraylist + for (NameOccurrence orderedOccurrence : order) { + addAccess((JavaNameOccurrence) orderedOccurrence, inode); } } } From 6cb07014983164c8819d083c762c9a42e0827380 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 6 Jul 2019 11:15:30 +0200 Subject: [PATCH 291/371] [doc] Fix broken internal links * Links to pages need to be relative... * Fixes #1906 --- docs/pages/pmd/rules/java/design.md | 4 ++-- docs/pages/pmd/userdocs/cli_reference.md | 2 +- docs/pages/pmd/userdocs/cpd.md | 2 +- docs/pages/pmd/userdocs/installation.md | 2 +- pmd-java/src/main/resources/category/java/design.xml | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/pages/pmd/rules/java/design.md b/docs/pages/pmd/rules/java/design.md index a1bba57d0c..ca13441730 100644 --- a/docs/pages/pmd/rules/java/design.md +++ b/docs/pages/pmd/rules/java/design.md @@ -1245,7 +1245,7 @@ public class Foo extends Bar { This rule uses the NCSS (Non-Commenting Source Statements) metric to determine the number of lines of code in a class, method or constructor. NCSS ignores comments, blank lines, and only counts actual statements. For more details on the calculation, see the documentation of -the [NCSS metric](/pmd_java_metrics_index.html#non-commenting-source-statements-ncss). +the [NCSS metric](pmd_java_metrics_index.html#non-commenting-source-statements-ncss). **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.java.rule.design.NcssCountRule](https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/NcssCountRule.java) @@ -1426,7 +1426,7 @@ The NPath complexity of a method is the number of acyclic execution paths throug While cyclomatic complexity counts the number of decision points in a method, NPath counts the number of full paths from the beginning to the end of the block of the method. That metric grows exponentially, as it multiplies the complexity of statements in the same block. For more details on the calculation, see the -documentation of the [NPath metric](/pmd_java_metrics_index.html#npath-complexity-npath). +documentation of the [NPath metric](pmd_java_metrics_index.html#npath-complexity-npath). A threshold of 200 is generally considered the point where measures should be taken to reduce complexity and increase readability. diff --git a/docs/pages/pmd/userdocs/cli_reference.md b/docs/pages/pmd/userdocs/cli_reference.md index 68909b97a1..57356e4a5e 100644 --- a/docs/pages/pmd/userdocs/cli_reference.md +++ b/docs/pages/pmd/userdocs/cli_reference.md @@ -181,7 +181,7 @@ This behavior has been introduced to ease PMD integration into scripts or hooks, * [plsql](pmd_rules_plsql.html) * [vf](pmd_rules_vf.html) (Salesforce VisualForce) * [vm](pmd_rules_vm.html) (Apache Velocity) -* [xml and xsl](/pmd_rules_xml.html) +* [xml and xsl](pmd_rules_xml.html) ## Available Report Formats diff --git a/docs/pages/pmd/userdocs/cpd.md b/docs/pages/pmd/userdocs/cpd.md index 492776d5df..fbc1b267f7 100644 --- a/docs/pages/pmd/userdocs/cpd.md +++ b/docs/pages/pmd/userdocs/cpd.md @@ -17,7 +17,7 @@ It can also be run with Maven by using the `cpd-check` goal on the [Maven PMD Pl Your own language is missing? -See how to add it [here](/pmd_devdocs_major_adding_new_cpd_language.html). +See how to add it [here](pmd_devdocs_major_adding_new_cpd_language.html). ### Why should you care about duplicates? diff --git a/docs/pages/pmd/userdocs/installation.md b/docs/pages/pmd/userdocs/installation.md index 31734de6a7..e8ed430074 100644 --- a/docs/pages/pmd/userdocs/installation.md +++ b/docs/pages/pmd/userdocs/installation.md @@ -22,7 +22,7 @@ sidebar: pmd_sidebar ### Installation -PMD is distributed as a zip archive, which includes both [PMD](#running-pmd-via-command-line) and [CPD](/pmd_userdocs_cpd.html). +PMD is distributed as a zip archive, which includes both [PMD](#running-pmd-via-command-line) and [CPD](pmd_userdocs_cpd.html). You can download the latest binary distribution from [the github releases page](https://github.com/pmd/pmd/releases). Unzip it into any directory, optionally add the `bin` subdirectory in your `PATH`, and you're good to go! diff --git a/pmd-java/src/main/resources/category/java/design.xml b/pmd-java/src/main/resources/category/java/design.xml index 41cc421ca4..b65b33eb9a 100644 --- a/pmd-java/src/main/resources/category/java/design.xml +++ b/pmd-java/src/main/resources/category/java/design.xml @@ -995,7 +995,7 @@ public class Foo extends Bar { This rule uses the NCSS (Non-Commenting Source Statements) metric to determine the number of lines of code in a class, method or constructor. NCSS ignores comments, blank lines, and only counts actual statements. For more details on the calculation, see the documentation of -the [NCSS metric](/pmd_java_metrics_index.html#non-commenting-source-statements-ncss). +the [NCSS metric](pmd_java_metrics_index.html#non-commenting-source-statements-ncss). </description> <priority>3</priority> <example> @@ -1106,7 +1106,7 @@ The NPath complexity of a method is the number of acyclic execution paths throug While cyclomatic complexity counts the number of decision points in a method, NPath counts the number of full paths from the beginning to the end of the block of the method. That metric grows exponentially, as it multiplies the complexity of statements in the same block. For more details on the calculation, see the -documentation of the [NPath metric](/pmd_java_metrics_index.html#npath-complexity-npath). +documentation of the [NPath metric](pmd_java_metrics_index.html#npath-complexity-npath). A threshold of 200 is generally considered the point where measures should be taken to reduce complexity and increase readability. From b691cec6a403157114a117b948f0cd0d3f37d09c Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 6 Jul 2019 12:00:33 +0200 Subject: [PATCH 292/371] [doc] Improve DeadLinksChecker A leading slash is a problem now. Links need to be relative. --- .../pmd/docs/DeadLinksChecker.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java index 75e2aff439..ca2e400942 100644 --- a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java +++ b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java @@ -30,6 +30,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; +import java.util.concurrent.RunnableFuture; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -79,7 +80,7 @@ public class DeadLinksChecker { final Path pagesDirectory = rootDirectory.resolve("docs/pages"); if (!Files.isDirectory(pagesDirectory)) { - LOG.warning("can't check for dead links, didn't find \"pages\" directory at: " + pagesDirectory); + LOG.severe("can't check for dead links, didn't find \"pages\" directory at: " + pagesDirectory); System.exit(1); } @@ -110,10 +111,13 @@ public class DeadLinksChecker { linkCheck: while (matcher.find()) { final String linkText = matcher.group(); - final String linkTarget = matcher.group(1).replaceAll("^/+", ""); // remove the leading "/" + final String linkTarget = matcher.group(1); boolean linkOk; - if (linkTarget.startsWith(LOCAL_FILE_PREFIX)) { + if (linkTarget.charAt(0) == '/') { + // links must never start with / - they must be relative or start with https?//... + linkOk = false; + } else if (linkTarget.startsWith(LOCAL_FILE_PREFIX)) { String localLinkPart = linkTarget.substring(LOCAL_FILE_PREFIX.length()); if (localLinkPart.contains("#")) { localLinkPart = localLinkPart.substring(0, localLinkPart.indexOf('#')); @@ -168,7 +172,11 @@ public class DeadLinksChecker { } if (!linkOk) { - addDeadLink(fileToDeadLinks, mdFile, new FutureTask<>(() -> String.format("%8d: %s", lineNo, linkText))); + RunnableFuture<String> futureTask = new FutureTask<>(() -> String.format("%8d: %s", lineNo, linkText)); + // execute this task immediately in this thread. + // External links are checked by another executor and don't end up here. + futureTask.run(); + addDeadLink(fileToDeadLinks, mdFile, futureTask); } } } @@ -322,6 +330,12 @@ public class DeadLinksChecker { public static void main(String[] args) throws IOException { + if (args.length != 1) { + System.err.println("Wrong arguments!"); + System.err.println(); + System.err.println("java " + DeadLinksChecker.class.getSimpleName() + " <project base directory>"); + System.exit(1); + } final Path rootDirectory = Paths.get(args[0]).resolve("..").toRealPath(); DeadLinksChecker deadLinksChecker = new DeadLinksChecker(); From 1f18888380cfe4d6d309f31385d6b25bac217e08 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 6 Jul 2019 12:01:40 +0200 Subject: [PATCH 293/371] Update release notes, fixes #1906 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..ad683c568e 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* doc + * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages + ### API Changes ### External Contributions From 8216c3517f604fc505c677f57c52450eaf97d5c4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 6 Jul 2019 15:53:46 +0200 Subject: [PATCH 294/371] [doc] Error in changelog 6.16.0 due to not properly closed rule tag Fixes #1896 --- docs/pages/release_notes.md | 1 + pmd-doc/pom.xml | 13 ++ .../sourceforge/pmd/docs/RuleTagChecker.java | 139 ++++++++++++++++++ .../pmd/docs/RuleTagCheckerTest.java | 29 ++++ .../pages/pmd/rules/java/bestpractices.md | 4 + .../docs/pages/ruletag-examples.md | 12 ++ 6 files changed, 198 insertions(+) create mode 100644 pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleTagChecker.java create mode 100644 pmd-doc/src/test/java/net/sourceforge/pmd/docs/RuleTagCheckerTest.java create mode 100644 pmd-doc/src/test/resources/ruletagchecker/docs/pages/pmd/rules/java/bestpractices.md create mode 100644 pmd-doc/src/test/resources/ruletagchecker/docs/pages/ruletag-examples.md diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index ad683c568e..b7ff7a206d 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -17,6 +17,7 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues * doc + * [#1896](https://github.com/pmd/pmd/issues/1896): \[doc] Error in changelog 6.16.0 due to not properly closed rule tag * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages ### API Changes diff --git a/pmd-doc/pom.xml b/pmd-doc/pom.xml index ab62832e72..eb26c4c980 100644 --- a/pmd-doc/pom.xml +++ b/pmd-doc/pom.xml @@ -51,6 +51,19 @@ </arguments> </configuration> </execution> + <execution> + <id>check-rule-tags</id> + <goals> + <goal>java</goal> + </goals> + <phase>verify</phase> + <configuration> + <mainClass>net.sourceforge.pmd.docs.RuleTagChecker</mainClass> + <arguments> + <argument>${project.basedir}</argument> + </arguments> + </configuration> + </execution> </executions> </plugin> </plugins> diff --git a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleTagChecker.java b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleTagChecker.java new file mode 100644 index 0000000000..55603bace4 --- /dev/null +++ b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleTagChecker.java @@ -0,0 +1,139 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.docs; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class RuleTagChecker { + private static final Logger LOG = Logger.getLogger(DeadLinksChecker.class.getName()); + + private static final Pattern RULE_TAG = Pattern.compile("\\{%\\s*rule\\s+\"(.*?)\"\\s*"); + private static final Pattern RULE_REFERENCE = Pattern.compile("(\\w+)\\/(\\w+)\\/(\\w+)"); + + private final Path pagesDirectory; + private final List<String> issues = new ArrayList<>(); + private final Map<Path, Set<String>> rulesCache = new HashMap<>(); + + public RuleTagChecker(Path rootDirectory) { + final Path pagesDirectory = rootDirectory.resolve("docs/pages"); + + if (!Files.isDirectory(pagesDirectory)) { + LOG.severe("can't check rule tags, didn't find \"docs/pages\" directory at: " + pagesDirectory); + System.exit(1); + } + + this.pagesDirectory = pagesDirectory; + } + + public List<String> check() throws IOException { + Files.walkFileTree(pagesDirectory, new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + checkFile(file); + return super.visitFile(file, attrs); + } + }); + return issues; + } + + private void checkFile(Path file) throws IOException { + if (file == null || !file.getFileName().toString().toLowerCase(Locale.ROOT).endsWith(".md")) { + return; + } + + LOG.finer("Checking " + file); + int lineNo = 0; + for (String line : Files.readAllLines(file, StandardCharsets.UTF_8)) { + lineNo++; + Matcher ruleTagMatcher = RULE_TAG.matcher(line); + while (ruleTagMatcher.find()) { + String ruleReference = ruleTagMatcher.group(1); + int pos = ruleTagMatcher.end(); + if (line.charAt(pos) != '%' || line.charAt(pos + 1) != '}') { + addIssue(file, lineNo, "Rule tag for " + ruleReference + " is not closed properly"); + } else if (!ruleReferenceTargetExists(ruleReference)) { + addIssue(file, lineNo, "Rule " + ruleReference + " is not found"); + } + } + } + } + + private boolean ruleReferenceTargetExists(String ruleReference) { + Matcher ruleRefMatcher = RULE_REFERENCE.matcher(ruleReference); + if (ruleRefMatcher.matches()) { + String language = ruleRefMatcher.group(1); + String category = ruleRefMatcher.group(2); + String rule = ruleRefMatcher.group(3); + + Path ruleDocPage = pagesDirectory.resolve("pmd/rules/" + language + "/" + category.toLowerCase(Locale.ROOT) + ".md"); + Set<String> rules = getRules(ruleDocPage); + return rules.contains(rule); + } + return false; + } + + private Set<String> getRules(Path ruleDocPage) { + Set<String> result = rulesCache.get(ruleDocPage); + + if (result == null) { + result = new HashSet<>(); + try { + for (String line : Files.readAllLines(ruleDocPage, StandardCharsets.UTF_8)) { + if (line.startsWith("## ")) { + result.add(line.substring(3)); + } + rulesCache.put(ruleDocPage, result); + } + } catch (NoSuchFileException e) { + LOG.warning("File " + ruleDocPage + " not found."); + } catch (IOException e) { + LOG.log(Level.SEVERE, "Unable to read rules from " + ruleDocPage, e); + } + } + + return result; + } + + private void addIssue(Path file, int lineNo, String message) { + issues.add(String.format("%s:%2d: %s", pagesDirectory.relativize(file).toString(), lineNo, message)); + } + + public static void main(String[] args) throws IOException { + if (args.length != 1) { + System.err.println("Wrong arguments!"); + System.err.println(); + System.err.println("java " + RuleTagChecker.class.getSimpleName() + " <project base directory>"); + System.exit(1); + } + final Path rootDirectory = Paths.get(args[0]).resolve("..").toRealPath(); + + RuleTagChecker ruleTagChecker = new RuleTagChecker(rootDirectory); + List<String> issues = ruleTagChecker.check(); + + if (!issues.isEmpty()) { + issues.forEach(System.err::println); + throw new AssertionError("Wrong rule tags detected"); + } + } +} diff --git a/pmd-doc/src/test/java/net/sourceforge/pmd/docs/RuleTagCheckerTest.java b/pmd-doc/src/test/java/net/sourceforge/pmd/docs/RuleTagCheckerTest.java new file mode 100644 index 0000000000..3b9a6fc777 --- /dev/null +++ b/pmd-doc/src/test/java/net/sourceforge/pmd/docs/RuleTagCheckerTest.java @@ -0,0 +1,29 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + + +package net.sourceforge.pmd.docs; + +import java.nio.file.FileSystems; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +public class RuleTagCheckerTest { + + @Test + public void testAllChecks() throws Exception { + RuleTagChecker checker = new RuleTagChecker(FileSystems.getDefault().getPath("src/test/resources/ruletagchecker")); + List<String> issues = checker.check(); + + Assert.assertEquals(3, issues.size()); + Assert.assertEquals("ruletag-examples.md: 8: Rule tag for java/bestpractices/AvoidPrintStackTrace is not closed properly", + issues.get(0)); + Assert.assertEquals("ruletag-examples.md:10: Rule java/notexistingcategory/AvoidPrintStackTrace is not found", + issues.get(1)); + Assert.assertEquals("ruletag-examples.md:12: Rule java/bestpractices/NotExistingRule is not found", + issues.get(2)); + } +} diff --git a/pmd-doc/src/test/resources/ruletagchecker/docs/pages/pmd/rules/java/bestpractices.md b/pmd-doc/src/test/resources/ruletagchecker/docs/pages/pmd/rules/java/bestpractices.md new file mode 100644 index 0000000000..7de208cf28 --- /dev/null +++ b/pmd-doc/src/test/resources/ruletagchecker/docs/pages/pmd/rules/java/bestpractices.md @@ -0,0 +1,4 @@ + +## AvoidPrintStackTrace + +Sample rule doc for tests. diff --git a/pmd-doc/src/test/resources/ruletagchecker/docs/pages/ruletag-examples.md b/pmd-doc/src/test/resources/ruletagchecker/docs/pages/ruletag-examples.md new file mode 100644 index 0000000000..89bdeb6a01 --- /dev/null +++ b/pmd-doc/src/test/resources/ruletagchecker/docs/pages/ruletag-examples.md @@ -0,0 +1,12 @@ +--- +title: Sample Page with rule tags +permalink: rule_tag_samples.html +--- + +This is a link to the rule AvoidPrintStackTrace: {% rule "java/bestpractices/AvoidPrintStackTrace" %}. + +This is the same link, but the rule tag is not closed properly: {% rule "java/bestpractices/AvoidPrintStackTrace" %). + +Now this is link to a rule inside a category, which doesn't exist: {% rule "java/notexistingcategory/AvoidPrintStackTrace" %}. + +This is link to a rule, which doesn't exist: {% rule "java/bestpractices/NotExistingRule" %}. From 7fd0b81a3ad7542361878d9db313d2a15fdfa1d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Sat, 6 Jul 2019 18:58:38 -0300 Subject: [PATCH 295/371] Revert "Fix bug with maven incremental compil" This reverts commit a755c83eef56ed5562060af38917e827f9001031. --- pom.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pom.xml b/pom.xml index 64d59a86b4..098b6abf37 100644 --- a/pom.xml +++ b/pom.xml @@ -369,9 +369,6 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> - <!-- Bug with incremental compilation --> - <!-- https://issues.apache.org/jira/browse/MCOMPILER-209 --> - <useIncrementalCompilation>false</useIncrementalCompilation> <release>${java.version}</release> </configuration> <executions> From e853ea98c7e2db2b60a8186255dab7bb69dd2bca Mon Sep 17 00:00:00 2001 From: crunsk <crunsk@users.noreply.github.com> Date: Mon, 8 Jul 2019 20:29:26 +0300 Subject: [PATCH 296/371] Update ruleset filename from deprecated basic.xml to quickstart.xml Frontpage (https://pmd.github.io/) uses ruleset quickstart.xml but https://pmd.github.io/pmd-6.16.0/pmd_userdocs_installation.html#sample-usage uses deprecated ruleset basic.xml (page https://pmd.github.io/pmd-6.16.0/pmd_rules_java.html shows status of both rulesets) --- docs/pages/pmd/userdocs/installation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/pmd/userdocs/installation.md b/docs/pages/pmd/userdocs/installation.md index e8ed430074..7339d1b986 100644 --- a/docs/pages/pmd/userdocs/installation.md +++ b/docs/pages/pmd/userdocs/installation.md @@ -79,7 +79,7 @@ Additionally, the following options, are specified most of the time even though <div class="tab-content"> <div role="tabpanel" class="tab-pane active" id="linux"> <figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="gp">~ $ </span><span class="s2">cd</span> ~/bin/pmd-bin-{{site.pmd.version}}/bin -<span class="gp">~/.../bin $ </span><span class="s2">./run.sh</span> pmd -d ../../../src/main/java/ -f text -R rulesets/java/basic.xml +<span class="gp">~/.../bin $ </span><span class="s2">./run.sh</span> pmd -d ../../../src/main/java/ -f text -R rulesets/java/quickstart.xml .../src/main/java/com/me/RuleSet.java:123 These nested if statements could be combined .../src/main/java/com/me/RuleSet.java:231 Useless parentheses. @@ -89,7 +89,7 @@ Additionally, the following options, are specified most of the time even though </div> <div role="tabpanel" class="tab-pane" id="windows"> <figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="gp">C:\ > </span><span class="s2">cd</span> C:\pmd-bin-{{site.pmd.version}}\bin -<span class="gp">C:\...\bin > </span><span class="s2">.\pmd.bat</span> -d ..\..\src\main\java\ -f text -R rulesets/java/basic.xml +<span class="gp">C:\...\bin > </span><span class="s2">.\pmd.bat</span> -d ..\..\src\main\java\ -f text -R rulesets/java/quickstart.xml .../src/main/java/com/me/RuleSet.java:123 These nested if statements could be combined .../src/main/java/com/me/RuleSet.java:231 Useless parentheses. From cb697696442b72ed421f05d4eadc8dc0bbc68e82 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 12 Jul 2019 09:56:41 +0200 Subject: [PATCH 297/371] Update release notes, refs #1908, fixes #1909 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b7ff7a206d..43128b8b43 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -19,10 +19,13 @@ This is a {{ site.pmd.release_type }} release. * doc * [#1896](https://github.com/pmd/pmd/issues/1896): \[doc] Error in changelog 6.16.0 due to not properly closed rule tag * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages + * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" ### API Changes ### External Contributions +* [#1908](https://github.com/pmd/pmd/pull/1908): \[doc] Update ruleset filename from deprecated basic.xml to quickstart.xml - [crunsk](https://github.com/crunsk) + {% endtocmaker %} From 6c9ecfa7c1d5cad3d13016d48f5dddc5606965f1 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 12 Jul 2019 10:57:10 +0200 Subject: [PATCH 298/371] [doc] Escape code examples for liquid with {%raw%} Fixes #1898 --- docs/pages/release_notes.md | 1 + .../sourceforge/pmd/docs/RuleDocGenerator.java | 2 ++ pmd-doc/src/test/resources/expected/sample.md | 17 +++++++++++++++++ .../resources/rulesets/ruledoctest/sample.xml | 7 +++++++ .../resources/category/java/bestpractices.xml | 2 +- 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 43128b8b43..282e941987 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -18,6 +18,7 @@ This is a {{ site.pmd.release_type }} release. * doc * [#1896](https://github.com/pmd/pmd/issues/1896): \[doc] Error in changelog 6.16.0 due to not properly closed rule tag + * [#1898](https://github.com/pmd/pmd/issues/1898): \[doc] Incorrect code example for DoubleBraceInitialization in documentation on website * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" diff --git a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleDocGenerator.java b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleDocGenerator.java index acf13282e6..6f7fabd7f1 100644 --- a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleDocGenerator.java +++ b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleDocGenerator.java @@ -422,7 +422,9 @@ public class RuleDocGenerator { lines.add(""); for (String example : rule.getExamples()) { lines.add("``` " + mapLanguageForHighlighting(languageTersename)); + lines.add("{%raw%}"); lines.addAll(toLines(StringUtils.stripToEmpty(example))); + lines.add("{%endraw%}"); lines.add("```"); lines.add(""); } diff --git a/pmd-doc/src/test/resources/expected/sample.md b/pmd-doc/src/test/resources/expected/sample.md index 866bb6815c..9be9d85930 100644 --- a/pmd-doc/src/test/resources/expected/sample.md +++ b/pmd-doc/src/test/resources/expected/sample.md @@ -50,6 +50,7 @@ Avoid jumbled loop incrementers - its usually a mistake, and is confusing even i **Example(s):** ``` java +{%raw%} public class JumbledIncrementerRule1 { public void foo() { for (int i = 0; i < 10; i++) { // only references 'i' @@ -59,6 +60,7 @@ public class JumbledIncrementerRule1 { } } } +{%endraw%} ``` **This rule has the following properties:** @@ -123,6 +125,7 @@ Avoid jumbled loop incrementers - its usually a mistake, and is confusing even i **Example(s):** ``` java +{%raw%} public class JumbledIncrementerRule1 { public void foo() { for (int i = 0; i < 10; i++) { // only references 'i' @@ -132,6 +135,7 @@ public class JumbledIncrementerRule1 { } } } +{%endraw%} ``` **Use this rule by referencing it:** @@ -162,6 +166,7 @@ Third paragraph. **Example(s):** ``` java +{%raw%} public class Bar { // poor, missing a hashcode() method public boolean equals(Object o) { // do some comparison @@ -182,6 +187,14 @@ public class Foo { // perfect, both methods provided // return some hash value } } + +// A sample with double braces (#1898) +public class Foo { + public List<String> bar() { + return new ArrayList<String>(){{ addAll("a","b","c"); }}; + } +} +{%endraw%} ``` **Use this rule by referencing it:** @@ -214,6 +227,7 @@ Avoid jumbled loop incrementers - its usually a mistake, and is confusing even i **Example(s):** ``` java +{%raw%} public class JumbledIncrementerRule1 { public void foo() { for (int i = 0; i < 10; i++) { // only references 'i' @@ -223,6 +237,7 @@ public class JumbledIncrementerRule1 { } } } +{%endraw%} ``` **This rule has the following properties:** @@ -312,6 +327,7 @@ if (0 > 1 && 0 < 1) { **Example(s):** ``` java +{%raw%} public class Bar { public boolean foo() { if (0 < 1) { // less-than should not be escaped in markdown @@ -320,6 +336,7 @@ public class Bar { } // <script>alert('XSS');</script> } +{%endraw%} ``` **This rule has the following properties:** diff --git a/pmd-doc/src/test/resources/rulesets/ruledoctest/sample.xml b/pmd-doc/src/test/resources/rulesets/ruledoctest/sample.xml index aa49c9a6f2..44e2bb76fb 100644 --- a/pmd-doc/src/test/resources/rulesets/ruledoctest/sample.xml +++ b/pmd-doc/src/test/resources/rulesets/ruledoctest/sample.xml @@ -123,6 +123,13 @@ public class Foo { // perfect, both methods provided // return some hash value } } + +// A sample with double braces (#1898) +public class Foo { + public List<String> bar() { + return new ArrayList<String>(){{ addAll("a","b","c"); }}; + } +} ]]> </example> </rule> diff --git a/pmd-java/src/main/resources/category/java/bestpractices.xml b/pmd-java/src/main/resources/category/java/bestpractices.xml index 1cbc1fe9ab..3ab442e456 100644 --- a/pmd-java/src/main/resources/category/java/bestpractices.xml +++ b/pmd-java/src/main/resources/category/java/bestpractices.xml @@ -426,7 +426,7 @@ public class Foo { </properties> <example><![CDATA[ // this is double-brace initialization -return new ArrayList<String>(){%raw%}{{ addAll("a","b","c"); }};{%endraw%} +return new ArrayList<String>(){{ addAll("a","b","c"); }}; // the better way is to not create an anonymous class: List<String> a = new ArrayList<>(); From 490ad67aa0817e86c9f893c43494881c41b3ef11 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 12 Jul 2019 16:03:15 +0200 Subject: [PATCH 299/371] [doc] fix unnecessary blank lines --- .../pmd/docs/RuleDocGenerator.java | 4 +-- pmd-doc/src/test/resources/expected/sample.md | 30 +++++++------------ 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleDocGenerator.java b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleDocGenerator.java index 6f7fabd7f1..8b6f68f16a 100644 --- a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleDocGenerator.java +++ b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/RuleDocGenerator.java @@ -422,9 +422,7 @@ public class RuleDocGenerator { lines.add(""); for (String example : rule.getExamples()) { lines.add("``` " + mapLanguageForHighlighting(languageTersename)); - lines.add("{%raw%}"); - lines.addAll(toLines(StringUtils.stripToEmpty(example))); - lines.add("{%endraw%}"); + lines.addAll(toLines("{%raw%}" + StringUtils.stripToEmpty(example) + "{%endraw%}")); lines.add("```"); lines.add(""); } diff --git a/pmd-doc/src/test/resources/expected/sample.md b/pmd-doc/src/test/resources/expected/sample.md index 9be9d85930..79b91c61a8 100644 --- a/pmd-doc/src/test/resources/expected/sample.md +++ b/pmd-doc/src/test/resources/expected/sample.md @@ -50,8 +50,7 @@ Avoid jumbled loop incrementers - its usually a mistake, and is confusing even i **Example(s):** ``` java -{%raw%} -public class JumbledIncrementerRule1 { +{%raw%}public class JumbledIncrementerRule1 { public void foo() { for (int i = 0; i < 10; i++) { // only references 'i' for (int k = 0; k < 20; i++) { // references both 'i' and 'k' @@ -59,8 +58,7 @@ public class JumbledIncrementerRule1 { } } } -} -{%endraw%} +}{%endraw%} ``` **This rule has the following properties:** @@ -125,8 +123,7 @@ Avoid jumbled loop incrementers - its usually a mistake, and is confusing even i **Example(s):** ``` java -{%raw%} -public class JumbledIncrementerRule1 { +{%raw%}public class JumbledIncrementerRule1 { public void foo() { for (int i = 0; i < 10; i++) { // only references 'i' for (int k = 0; k < 20; i++) { // references both 'i' and 'k' @@ -134,8 +131,7 @@ public class JumbledIncrementerRule1 { } } } -} -{%endraw%} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -166,8 +162,7 @@ Third paragraph. **Example(s):** ``` java -{%raw%} -public class Bar { // poor, missing a hashcode() method +{%raw%}public class Bar { // poor, missing a hashcode() method public boolean equals(Object o) { // do some comparison } @@ -193,8 +188,7 @@ public class Foo { public List<String> bar() { return new ArrayList<String>(){{ addAll("a","b","c"); }}; } -} -{%endraw%} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -227,8 +221,7 @@ Avoid jumbled loop incrementers - its usually a mistake, and is confusing even i **Example(s):** ``` java -{%raw%} -public class JumbledIncrementerRule1 { +{%raw%}public class JumbledIncrementerRule1 { public void foo() { for (int i = 0; i < 10; i++) { // only references 'i' for (int k = 0; k < 20; i++) { // references both 'i' and 'k' @@ -236,8 +229,7 @@ public class JumbledIncrementerRule1 { } } } -} -{%endraw%} +}{%endraw%} ``` **This rule has the following properties:** @@ -327,16 +319,14 @@ if (0 > 1 && 0 < 1) { **Example(s):** ``` java -{%raw%} -public class Bar { +{%raw%}public class Bar { public boolean foo() { if (0 < 1) { // less-than should not be escaped in markdown String s = "abc"; // the quotes should not be escaped in markdown. } } // <script>alert('XSS');</script> -} -{%endraw%} +}{%endraw%} ``` **This rule has the following properties:** From 4d7f7d3f738c58d2729ff14044f326991888abd9 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 13 Jul 2019 18:28:15 +0200 Subject: [PATCH 300/371] Update release notes, refs #1892 --- docs/pages/release_notes.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 97b02c37f9..5d0beb4ab6 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,6 +14,15 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Lua support + +Thanks to the contribution from [Maikel Steneker](https://github.com/maikelsteneker), and built on top of the ongoing efforts to fully support Antlr-based languages, +PMD now has CPD support for [Lua](https://www.lua.org/). + +Being based on a proper Antlr grammar, CPD can: +* ignore comments +* honor [comment-based suppressions](pmd_userdocs_cpd.html#suppression) + #### PLSQL Grammar Updates The grammar has been updated to support Inline Constraints in CREATE TABLE statements. Additionally, the @@ -100,6 +109,7 @@ of deprecations. * [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [kabroxiko](https://github.com/kabroxiko) * [#1874](https://github.com/pmd/pmd/pull/1874): \[plsql] Add parenthesis equation support for Update - [kabroxiko](https://github.com/kabroxiko) * [#1884](https://github.com/pmd/pmd/pull/1884): \[plsql] fix #1878 Support explicit INNER word for INNER JOIN - [kabroxiko](https://github.com/kabroxiko) +* [#1892](https://github.com/pmd/pmd/pull/1892): \[lua] \[cpd] Added CPD support for Lua - [Maikel Steneker](https://github.com/maikelsteneker) {% endtocmaker %} From 614484143a69c2b6ff618e441da157215c0a06b3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 13 Jul 2019 18:43:01 +0200 Subject: [PATCH 301/371] [doc] Add Lua support --- README.md | 2 +- docs/pages/pmd/userdocs/cpd.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b2ff396ea5..4ffb7c745d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ unnecessary object creation, and so forth. It supports Java, JavaScript, Salesfo XML, XSL. Additionally it includes **CPD**, the copy-paste-detector. CPD finds duplicated code in -C/C++, C#, Dart, Fortran, Go, Groovy, Java, JavaScript, JSP, Kotlin, Matlab, +C/C++, C#, Dart, Fortran, Go, Groovy, Java, JavaScript, JSP, Kotlin, Lua, Matlab, Objective-C, Perl, PHP, PLSQL, Python, Ruby, Salesforce.com Apex, Scala, Swift and Visualforce. ## Source and Documentation diff --git a/docs/pages/pmd/userdocs/cpd.md b/docs/pages/pmd/userdocs/cpd.md index fbc1b267f7..1afc993ae1 100644 --- a/docs/pages/pmd/userdocs/cpd.md +++ b/docs/pages/pmd/userdocs/cpd.md @@ -218,6 +218,7 @@ This behavior has been introduced to ease CPD integration into scripts or hooks, * Java * Jsp * Kotlin +* Lua * Matlab * Objective-C * Perl @@ -366,7 +367,7 @@ Here's a screenshot of CPD after running on the JDK 8 java.lang package: ## Suppression Arbitrary blocks of code can be ignored through comments on **Java**, **C/C++**, **Dart**, **Go**, **Javascript**, -**Kotlin**, **Matlab**, **Objective-C**, **PL/SQL**, **Python** and **Swift** by including the keywords `CPD-OFF` and `CPD-ON`. +**Kotlin**, **Lua**, **Matlab**, **Objective-C**, **PL/SQL**, **Python** and **Swift** by including the keywords `CPD-OFF` and `CPD-ON`. ```java public Object someParameterizedFactoryMethod(int x) throws Exception { From 084c78a5ea4ee3780f63d696de4ae7226a604d42 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 13 Jul 2019 19:39:41 +0200 Subject: [PATCH 302/371] [xml] Improve example for MistypedCDATASection --- .../resources/category/xml/errorprone.xml | 13 +++++++- .../errorprone/xml/MistypedCDATASection.xml | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/pmd-xml/src/main/resources/category/xml/errorprone.xml b/pmd-xml/src/main/resources/category/xml/errorprone.xml index c868b036f0..46f598d8e4 100644 --- a/pmd-xml/src/main/resources/category/xml/errorprone.xml +++ b/pmd-xml/src/main/resources/category/xml/errorprone.xml @@ -30,7 +30,18 @@ An XML CDATA section begins with a <![CDATA[ marker, which has only one [, an </properties> <example> <![CDATA[ -An extra [ looks like <![CDATA[[]]>, and an extra ] looks like <![CDATA[]]]>. +<root> + <child> + <![CDATA[[ character data ]]><![CDATA[]]]]><![CDATA[> - this cdata section is valid, but it contains an + additional square bracket at the beginning. + It should probably be just <![CDATA[ character data ]]><![CDATA[]]]]><![CDATA[>. + </child> + <child> + <![CDATA[ character data ]]]><![CDATA[]]]]><![CDATA[> - this cdata section is valid, but it contains an + additional square bracket in the end. + It should probably be just <![CDATA[ character data ]]><![CDATA[]]]]><![CDATA[>. + </child> +</root> ]]> </example> </rule> diff --git a/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/rule/errorprone/xml/MistypedCDATASection.xml b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/rule/errorprone/xml/MistypedCDATASection.xml index 45388522ab..c748e2e5e4 100644 --- a/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/rule/errorprone/xml/MistypedCDATASection.xml +++ b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/rule/errorprone/xml/MistypedCDATASection.xml @@ -70,4 +70,34 @@ ]]></code> <source-type>xml</source-type> </test-code> + <test-code> + <description>Example code</description> + <expected-problems>2</expected-problems> + <expected-linenumbers>3,8</expected-linenumbers> + <code><![CDATA[ +<root> + <child> + <![CDATA[ character data ]]]><![CDATA[]]]]><![CDATA[> - this cdata section is valid, but it contains an + additional square bracket in the end. + It should probably be just <![CDATA[ character data ]]><![CDATA[]]]]><![CDATA[>. + </child> + <child> + <![CDATA[[ character data ]]><![CDATA[]]]]><![CDATA[> - this cdata section is valid, but it contains an + additional square bracket at the beginning. + It should probably be just <![CDATA[ character data ]]><![CDATA[]]]]><![CDATA[>. + </child> +</root> + ]]></code> + </test-code> + <test-code> + <description>Square bracket at end separate by space is ok</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +<root> + <child> + <![CDATA[ character data[] ]]><![CDATA[]]]]><![CDATA[> + </child> +</root> + ]]></code> + </test-code> </test-data> From 70c66c29524b291487e8ad1d41c039238199be1d Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 13 Jul 2019 19:41:53 +0200 Subject: [PATCH 303/371] Update release notes, fixes #1666, refs #1869 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index f78c2baa10..0839fda19f 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -54,6 +54,8 @@ datetime field. * plsql * [#1828](https://github.com/pmd/pmd/issues/1828): \[plsql] Parentheses stopped working * [#1850](https://github.com/pmd/pmd/issues/1850): \[plsql] Parsing errors with INSERT using returning or records and TRIM expression +* xml + * [#1666](https://github.com/pmd/pmd/issues/1666): \[xml] wrong cdata rule description and examples ### API Changes @@ -90,6 +92,7 @@ of deprecations. * [#1863](https://github.com/pmd/pmd/pull/1863): \[plsql] Add Table InlineConstraint - [kabroxiko](https://github.com/kabroxiko) * [#1864](https://github.com/pmd/pmd/pull/1864): \[plsql] Add support for Subquery Views - [kabroxiko](https://github.com/kabroxiko) * [#1865](https://github.com/pmd/pmd/pull/1865): \[plsql] Add Support for Extract Expression - [kabroxiko](https://github.com/kabroxiko) +* [#1869](https://github.com/pmd/pmd/pull/1869): \[xml] fix #1666 wrong cdata rule description and examples - [Artem](https://github.com/KroArtem) {% endtocmaker %} From 93b46283877a5edfd7ac553ad905c740eb08c41b Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 13 Jul 2019 19:53:59 +0200 Subject: [PATCH 304/371] [doc] Update generated rule doc --- docs/pages/pmd/rules/xml.md | 2 +- docs/pages/pmd/rules/xml/errorprone.md | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/pages/pmd/rules/xml.md b/docs/pages/pmd/rules/xml.md index 0b10fd891b..fca26968bb 100644 --- a/docs/pages/pmd/rules/xml.md +++ b/docs/pages/pmd/rules/xml.md @@ -11,7 +11,7 @@ folder: pmd/rules {% include callout.html content="Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors." %} -* [MistypedCDATASection](pmd_rules_xml_errorprone.html#mistypedcdatasection): An XML CDATA section begins with a <!CDATA[ marker, which has only one [, and ends with a ]]> mar... +* [MistypedCDATASection](pmd_rules_xml_errorprone.html#mistypedcdatasection): An XML CDATA section begins with a <![CDATA[ marker, which has only one [, and ends with a ]]> ma... ## Additional rulesets diff --git a/docs/pages/pmd/rules/xml/errorprone.md b/docs/pages/pmd/rules/xml/errorprone.md index 2ddd87c822..1c612d8467 100644 --- a/docs/pages/pmd/rules/xml/errorprone.md +++ b/docs/pages/pmd/rules/xml/errorprone.md @@ -15,7 +15,7 @@ language: XML **Priority:** Medium (3) -An XML CDATA section begins with a <!CDATA[ marker, which has only one [, and ends with a ]]> marker, which has only two ]. +An XML CDATA section begins with a <![CDATA[ marker, which has only one [, and ends with a ]]> marker, which has two ]. **This rule is defined by the following XPath expression:** ``` xpath @@ -25,7 +25,18 @@ An XML CDATA section begins with a <!CDATA[ marker, which has only one [, and **Example(s):** ``` xml -An extra [ looks like <!CDATA[[]]>, and an extra ] looks like <!CDATA[]]]>. +<root> + <child> + <![CDATA[[ character data ]]> - this cdata section is valid, but it contains an + additional square bracket at the beginning. + It should probably be just <![CDATA[ character data ]]>. + </child> + <child> + <![CDATA[ character data ]]]> - this cdata section is valid, but it contains an + additional square bracket in the end. + It should probably be just <![CDATA[ character data ]]>. + </child> +</root> ``` **Use this rule by referencing it:** From a9c68a55b3a747b659169e03d942f1c9ccbc8ed7 Mon Sep 17 00:00:00 2001 From: AnthonyKot <kotatut@gmail.com> Date: Sat, 13 Jul 2019 21:17:53 +0200 Subject: [PATCH 305/371] issue-1833 --- docs/pages/pmd/rules/java/errorprone.md | 3 + .../resources/category/java/errorprone.xml | 3 + ...ngStaticMethodInNonInstantiatableClass.xml | 73 +++++++++++++++++++ 3 files changed, 79 insertions(+) diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index a85d3f1ed9..1d4dfebb53 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -2628,6 +2628,9 @@ A class that has private constructors and does not have any static methods or fi ./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration and count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) = count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Private='true']) + and + not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration/ + ../Annotation/MarkerAnnotation/Name[pmd-java:typeIs('org.springframework.beans.factory.annotation.Autowired') or pmd-java:typeIs('javax.inject.Inject')]) ) and not(.//MethodDeclaration[@Static='true']) diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 545ff05628..52de06fb82 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -2420,6 +2420,9 @@ A class that has private constructors and does not have any static methods or fi ./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration and count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) = count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Private='true']) + and + not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration/ + ../Annotation/MarkerAnnotation/Name[pmd-java:typeIs('org.springframework.beans.factory.annotation.Autowired') or pmd-java:typeIs('javax.inject.Inject')]) ) and not(.//MethodDeclaration[@Static='true']) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/MissingStaticMethodInNonInstantiatableClass.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/MissingStaticMethodInNonInstantiatableClass.xml index 36945b2db8..caf8041500 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/MissingStaticMethodInNonInstantiatableClass.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/MissingStaticMethodInNonInstantiatableClass.xml @@ -247,4 +247,77 @@ public final class BacklogElementParameters { } ]]></code> </test-code> + + <test-code> + <description>#1832 Check constructor injection with @Autowired or @Inject </description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import javax.inject.Inject; +import org.springframework.beans.factory.annotation.Autowired; + +public class Foo { + + private String arg; + + @Autowired + private Foo() {} + + @Inject + private Foo(String arg) { + this.arg = arg; + } + + public void bar() {} +} + ]]></code> + </test-code> + + <test-code> + <description>#1832 fine with a least one constructor annotated with "Autowired</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.annotation.PersistenceConstructor; + +public class Foo { + + private String arg; + + @PersistenceConstructor + private Foo() {} + + @Autowired + private Foo(String arg) { + this.arg = arg; + } + + public void bar() {} +} + ]]></code> + </test-code> + + <test-code> + <description>#1832 but fail with both private constructors annotated with @PersistenceConstructor</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +import org.springframework.data.annotation.PersistenceConstructor; + +public class Foo { + + private String arg; + + @PersistenceConstructor + private Foo() {} + + @PersistenceConstructor + private Foo(String arg) { + this.arg = arg; + } + + public void bar() {} +} + ]]></code> + </test-code> + + </test-data> From 267cee9caf3031464a52a67c6d53ed9729502b35 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 14 Jul 2019 18:15:15 +0200 Subject: [PATCH 306/371] [doc] Fix broken links --- docs/pages/pmd/projectdocs/trivia/news.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/pmd/projectdocs/trivia/news.md b/docs/pages/pmd/projectdocs/trivia/news.md index ec415ca8f4..b9a2112c1b 100644 --- a/docs/pages/pmd/projectdocs/trivia/news.md +++ b/docs/pages/pmd/projectdocs/trivia/news.md @@ -45,7 +45,7 @@ author: Tom Copeland <tom@infoether.org> PMD/CPD analyses of Azureus and Columba. * April 2006 - John Ferguson Smart's article "PMD Squashes Code Bugs" on - [DevX](http://www.devx.com/Java/Article/31286) discusses PMD and the Eclipse plugin. Lots of screenshots! + [DevX](https://web.archive.org/web/20140214143838/http://www.devx.com/Java/Article/31286) discusses PMD and the Eclipse plugin. Lots of screenshots! * November 2005 - Mike Clark's article "Staying Out of Code Debt" on [StickyMinds](http://www.stickyminds.com/sitewide.asp?Function=edetail&ObjectType=ART&ObjectId=9860&tth=DYN&tt=siteemail&iDyn=2) @@ -63,7 +63,7 @@ author: Tom Copeland <tom@infoether.org> [Doctor Dobb's Journal](http://www.drdobbs.com/benefits-of-the-build/184415286) mentions PMD as a way to automate code reviews -* February 2005 - [Java Is Well-Suited for Open-Source Projects](http://www.eweek.com/c/a/Application-Development/Java-Is-WellSuited-for-OpenSource-Projects/) - +* February 2005 - [Java Is Well-Suited for Open-Source Projects](https://webcache.googleusercontent.com/search?q=cache:aEL-9Ncx2RgJ:https://www.eweek.com/development/java-is-well-suited-for-open-source-projects) - Peter Coffee's eWeek article on open source, Java, and PMD * January 2005 - [Zap bugs with PMD](http://www.ibm.com/developerworks/java/library/j-pmd/) - Elliotte Rusty From 5150b316e40d42bccfe469a9e5273bf0ec4b9ac4 Mon Sep 17 00:00:00 2001 From: Renato Oliveira <ren811@gmail.com> Date: Mon, 15 Jul 2019 19:21:02 -0300 Subject: [PATCH 307/371] Add 'no error' return option, and assign it to the cli when the help command is invoked. --- .../java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java b/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java index 03fe697a36..58af4c1bd2 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java @@ -27,6 +27,7 @@ public final class PMDCommandLineInterface { public static final String NO_EXIT_AFTER_RUN = "net.sourceforge.pmd.cli.noExit"; public static final String STATUS_CODE_PROPERTY = "net.sourceforge.pmd.cli.status"; + public static final int NO_ERRORS_STATUS = 0; public static final int ERROR_STATUS = 1; public static final int VIOLATIONS_FOUND = 4; @@ -41,7 +42,7 @@ public final class PMDCommandLineInterface { if (arguments.isHelp()) { jcommander.usage(); System.out.println(buildUsageText(jcommander)); - setStatusCodeOrExit(ERROR_STATUS); + setStatusCodeOrExit(NO_ERRORS_STATUS); } } catch (ParameterException e) { jcommander.usage(); From 383baaffd30e6e7cefe8cc537285082e977b1afb Mon Sep 17 00:00:00 2001 From: Renato Oliveira <ren811@gmail.com> Date: Tue, 16 Jul 2019 18:14:18 -0300 Subject: [PATCH 308/371] Should expect the return code to equal zero. --- .../test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java index 8caab02442..1bf4da9e5a 100644 --- a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java +++ b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java @@ -95,7 +95,7 @@ public class BinaryDistributionIT { ExecutionResult result; result = PMDExecutor.runPMD(tempDir, "-h"); - result.assertExecutionResult(1, "apex, ecmascript, java, jsp, plsql, pom, vf, vm, wsdl, xml, xsl"); + result.assertExecutionResult(0, "apex, ecmascript, java, jsp, plsql, pom, vf, vm, wsdl, xml, xsl"); result = PMDExecutor.runPMDRules(tempDir, srcDir, "src/test/resources/rulesets/sample-ruleset.xml"); result.assertExecutionResult(4, "JumbledIncrementer.java:8:"); From d080e3cb4844aa6fa0230e11dc7bf1450b059e36 Mon Sep 17 00:00:00 2001 From: YoonhoChoi96 <uenho830@gmail.com> Date: Wed, 17 Jul 2019 19:02:54 +0900 Subject: [PATCH 309/371] add test cases for reduce False Positive --- .../xml/DataflowAnomalyAnalysis.xml | 213 ++++++++++++++++++ 1 file changed, 213 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml index 76bd78ff95..3d673a6523 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml @@ -132,6 +132,219 @@ public class AssertTest { System.out.println(k); } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 1</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(b) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int a = 0 ; + int b = 0 ; + a = a + b ; + b = a + b ; + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 2</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(a) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int a = 0 ; + for(int i = 0 ; i <= 10; i ++){ + a = a+3; + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 3</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(a) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int[] b = new int[10]; + for(int a : b){ + a = a+3; + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 4</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(a) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int a = 0 ; + int i = 0 ; + while(i < 30){ + a = a+3; + i += 3; + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 5</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(a) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int a = 0 ; + int i = 0 ; + do{ + a = a+3; + i += 3; + }while(i < 30); + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 6</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(a) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int a = 0 ; + int i = 0 ; + switch(i){ + case 1 : a = a+1; + break; + case 2 : a = a+2; + break; + case 3 : a = a+3; + break; + default : a = a + 0; + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 7</description> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(a) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int a = 0 ; + int i = 0 ; + switch(i){ + case 1 : a = a+1; + case 2 : a = a+2; + case 3 : a = a+3; + default : a = a + 0; + } + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 9</description> + <!-- Note: due to https://sourceforge.net/p/pmd/bugs/1383/ the 6 problems are false positives! --> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(t1) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int t1 = 0 ; + Test2 test = new Test2() ; + t1 = test.simpleTest(t1) ; + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 12</description> + <!-- Note: due to https://sourceforge.net/p/pmd/bugs/1383/ the 6 problems are false positives! --> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(t1) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int t1 = 0 ; + int t2 = 0 ; + Test2 test = new Test2(); + if((t1 = test.simpleTest(t1)) == t2); + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 13</description> + <!-- Note: due to https://sourceforge.net/p/pmd/bugs/1383/ the 6 problems are false positives! --> + <expected-problems>0</expected-problems> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int t1 = 0 ; + + Test2 test = new Test2(); + if( (t1 = test.simpleTest(t1)) == t1); + } +} + ]]></code> + </test-code> + + <test-code> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 14</description> + <!-- Note: due to https://sourceforge.net/p/pmd/bugs/1383/ the 6 problems are false positives! --> + <expected-problems>1</expected-problems> + <expected-messages> + <message> DU-Anomaly(t1) </message> + </expected-messages> + <code><![CDATA[ +class Test{ + public static void main(String[] args){ + int t1 = 0; + int t2 = 0; + Test2 test = new Test2() ; + if( t1 == (t1 = test.simpleTest(t1))) ; + } } ]]></code> </test-code> From 24cb0aa9761eb4f26ac42beb4a53f1917bf66ba4 Mon Sep 17 00:00:00 2001 From: YoonhoChoi96 <uenho830@gmail.com> Date: Wed, 17 Jul 2019 19:26:22 +0900 Subject: [PATCH 310/371] add test cases for reduce False Positive --- .../xml/DataflowAnomalyAnalysis.xml | 54 ++++--------------- 1 file changed, 10 insertions(+), 44 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml index 3d673a6523..dd03a17bcd 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml @@ -137,11 +137,8 @@ public class AssertTest { </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 1</description> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 1. DU-Anomaly(b)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(b) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -155,11 +152,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 2</description> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 2. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(a) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -173,11 +167,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 3</description> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 3. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(a) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -191,11 +182,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 4</description> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 4. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(a) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -211,11 +199,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 5</description> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 5. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(a) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -231,11 +216,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 6</description> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 6. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(a) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -256,11 +238,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 7</description> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 7. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(a) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -278,12 +257,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 9</description> - <!-- Note: due to https://sourceforge.net/p/pmd/bugs/1383/ the 6 problems are false positives! --> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 9. DU-Anomaly(t1)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(t1) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -296,12 +271,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 12</description> - <!-- Note: due to https://sourceforge.net/p/pmd/bugs/1383/ the 6 problems are false positives! --> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 12. DU-Anomaly(t1)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(t1) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -316,7 +287,6 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 13</description> - <!-- Note: due to https://sourceforge.net/p/pmd/bugs/1383/ the 6 problems are false positives! --> <expected-problems>0</expected-problems> <code><![CDATA[ class Test{ @@ -331,12 +301,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 14</description> - <!-- Note: due to https://sourceforge.net/p/pmd/bugs/1383/ the 6 problems are false positives! --> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 14. DU-Anomaly(t1)</description> <expected-problems>1</expected-problems> - <expected-messages> - <message> DU-Anomaly(t1) </message> - </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ From 82ea3ed51bc38489db8be97900ac1f910d2ac039 Mon Sep 17 00:00:00 2001 From: YoonhoChoi96 <uenho830@gmail.com> Date: Wed, 17 Jul 2019 19:49:08 +0900 Subject: [PATCH 311/371] Simplify nested loop --- .../pmd/lang/java/dfa/VariableAccessVisitor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java index d60c3649d1..dce8857b22 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java @@ -103,21 +103,21 @@ public class VariableAccessVisitor extends JavaParserVisitorAdapter { for (Node temp = name.getLocation(); !(temp.jjtGetParent() instanceof ASTMethodDeclaration) && !(temp.jjtGetParent() instanceof ASTConstructorDeclaration); temp = temp.jjtGetParent()) { //traverse children nodes to check it has assignment operator as a child - for (int i = 0; i < temp.jjtGetNumChildren(); i++) { - if (temp.jjtGetChild(i) instanceof ASTAssignmentOperator) { + List<ASTAssignmentOperator> assignmentOperators = temp.findChildrenOfType(ASTAssignmentOperator.class); + if (!assignmentOperators.isEmpty()) { //if assignment operator is found, add to arraylist(assignments) with the assignment operator and its name - assignments.add(new SimpleEntry(temp.jjtGetChild(i), name)); + assignments.add(new SimpleEntry(assignmentOperators.get(0), name)); //change flag flag = 1; break checker; } - } } //if a name is not related to assignment operator, add to arraylist(assignments) with null and its name if (flag == 0) { assignments.add(new SimpleEntry(null, name)); } } + //swap the arraylist(assignments)'s elements, when it share same assignment operator for (int i = 0; i < assignments.size() - 1; i++) { if (assignments.get(i).getKey() != null From 33f3129562baa9fe655dc2e7edbb29075b6ad8b1 Mon Sep 17 00:00:00 2001 From: YoonhoChoi96 <uenho830@gmail.com> Date: Thu, 18 Jul 2019 10:54:16 +0900 Subject: [PATCH 312/371] Modify expected problems and exclude for-each case --- .../rule/errorprone/xml/DataflowAnomalyAnalysis.xml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml index dd03a17bcd..f8a5f09f2a 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml @@ -153,7 +153,7 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 2. DU-Anomaly(a)</description> - <expected-problems>1</expected-problems> + <expected-problems>2</expected-problems> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -166,6 +166,7 @@ class Test{ ]]></code> </test-code> + <!-- This case invoke False Positive(UR-a), because of for-each statement. <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 3. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> @@ -179,11 +180,11 @@ class Test{ } } ]]></code> - </test-code> + </test-code> --> <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 4. DU-Anomaly(a)</description> - <expected-problems>1</expected-problems> + <expected-problems>2</expected-problems> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -217,7 +218,7 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 6. DU-Anomaly(a)</description> - <expected-problems>1</expected-problems> + <expected-problems>4</expected-problems> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -301,8 +302,8 @@ class Test{ </test-code> <test-code> - <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 14. DU-Anomaly(t1)</description> - <expected-problems>1</expected-problems> + <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 14. DU-Anomaly(t1, t2)</description> + <expected-problems>2</expected-problems> <code><![CDATA[ class Test{ public static void main(String[] args){ From 052d38200e0986aedd1d685860c3529892093c41 Mon Sep 17 00:00:00 2001 From: Renato Oliveira <ren811@gmail.com> Date: Thu, 18 Jul 2019 16:24:42 -0300 Subject: [PATCH 313/371] Change return code to zero for CPD when the help command is requested through the CLI. --- .../net/sourceforge/pmd/cpd/CPDCommandLineInterface.java | 5 +++-- .../java/net/sourceforge/pmd/it/BinaryDistributionIT.java | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDCommandLineInterface.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDCommandLineInterface.java index 91aaba88df..fef32365df 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDCommandLineInterface.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDCommandLineInterface.java @@ -26,8 +26,9 @@ import com.beust.jcommander.ParameterException; public final class CPDCommandLineInterface { private static final Logger LOGGER = Logger.getLogger(CPDCommandLineInterface.class.getName()); - private static final int DUPLICATE_CODE_FOUND = 4; + public static final int NO_ERRORS_STATUS = 0; private static final int ERROR_STATUS = 1; + private static final int DUPLICATE_CODE_FOUND = 4; public static final String NO_EXIT_AFTER_RUN = "net.sourceforge.pmd.cli.noExit"; public static final String STATUS_CODE_PROPERTY = "net.sourceforge.pmd.cli.status"; @@ -66,7 +67,7 @@ public final class CPDCommandLineInterface { if (arguments.isHelp()) { jcommander.usage(); System.out.println(buildUsageText()); - setStatusCodeOrExit(ERROR_STATUS); + setStatusCodeOrExit(NO_ERRORS_STATUS); return; } } catch (ParameterException e) { diff --git a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java index 1bf4da9e5a..b6e635437d 100644 --- a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java +++ b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java @@ -111,8 +111,7 @@ public class BinaryDistributionIT { ExecutionResult result; result = CpdExecutor.runCpd(tempDir, "-h"); - - result.assertExecutionResult(1, "Supported languages: [apex, cpp, cs, dart, ecmascript, fortran, go, groovy, java, jsp, kotlin, lua, matlab, objectivec, perl, php, plsql, python, ruby, scala, swift, vf]"); + result.assertExecutionResult(0, "Supported languages: [apex, cpp, cs, dart, ecmascript, fortran, go, groovy, java, jsp, kotlin, lua, matlab, objectivec, perl, php, plsql, python, ruby, scala, swift, vf]"); result = CpdExecutor.runCpd(tempDir, "--minimum-tokens", "10", "--format", "text", "--files", srcDir); result.assertExecutionResult(4, "Found a 10 line (55 tokens) duplication in the following files:"); From 266d6bb4532f92ee0184db26c9371c50c201b67f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Thu, 18 Jul 2019 19:29:13 -0300 Subject: [PATCH 314/371] Fix issues running unit tests from Eclipse --- pom.xml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 4ffaa8910d..71fd902efa 100644 --- a/pom.xml +++ b/pom.xml @@ -914,13 +914,25 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> - <version>5.4.0</version> + <version>5.5.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> - <version>5.4.0</version> + <version>5.5.0</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-commons</artifactId> + <version>1.5.0</version> + </dependency> + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-launcher</artifactId> + <version>1.5.0</version> <scope>test</scope> </dependency> @@ -928,7 +940,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> - <version>5.4.0</version> + <version>5.5.0</version> <scope>test</scope> </dependency> From ca34d4fa1c15e292b6f6f5dd695c838e00d6d2ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Thu, 18 Jul 2019 19:34:51 -0300 Subject: [PATCH 315/371] Add failing test case for #1903 --- .../xml/UnsynchronizedStaticFormatter.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml index a97fa56f96..e8a0677f0c 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/UnsynchronizedStaticFormatter.xml @@ -258,6 +258,24 @@ public class Foo { sdf.format(); } } +} + ]]></code> + </test-code> + + <test-code> + <description>#1903 - Block synch is valid even with allowMethodLevelSynchronization</description> + <rule-property name="allowMethodLevelSynchronization">true</rule-property> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.text.SimpleDateFormat; + +public class Foo { + private static final SimpleDateFormat sdf = new SimpleDateFormat(); + private void bar() { + synchronized(sdf) { + sdf.format(); + } + } } ]]></code> </test-code> From cb62b7e472580fff6fd940e305aded678e2a7999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Thu, 18 Jul 2019 19:35:09 -0300 Subject: [PATCH 316/371] Fix false positive on UnsynchronizedStaticFormatterRule --- .../UnsynchronizedStaticFormatterRule.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java index 4ea482bf6f..af9e04c26b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/multithreading/UnsynchronizedStaticFormatterRule.java @@ -77,14 +77,7 @@ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { continue; } - if (getProperty(ALLOW_METHOD_LEVEL_SYNC)) { - ASTMethodDeclaration method = n.getFirstParentOfType(ASTMethodDeclaration.class); - if (method != null && (!method.isSynchronized() || !method.isStatic())) { - addViolation(data, node); - } - continue; - } - + // is there a block-level synch? ASTSynchronizedStatement syncStatement = n.getFirstParentOfType(ASTSynchronizedStatement.class); if (syncStatement != null) { ASTExpression expression = syncStatement.getFirstChildOfType(ASTExpression.class); @@ -95,6 +88,15 @@ public class UnsynchronizedStaticFormatterRule extends AbstractJavaRule { } } } + + // method level synch enabled and used? + if (getProperty(ALLOW_METHOD_LEVEL_SYNC)) { + ASTMethodDeclaration method = n.getFirstParentOfType(ASTMethodDeclaration.class); + if (method != null && method.isSynchronized() && method.isStatic()) { + continue; + } + } + addViolation(data, n); } return data; From c39a342b9230eb87dcdda249cf15c8de9ea76dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Thu, 18 Jul 2019 19:36:21 -0300 Subject: [PATCH 317/371] Update changelog, refs #1903 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index fe3d2aa4c7..06417b1a9d 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -29,6 +29,8 @@ Being based on a proper Antlr grammar, CPD can: * [#1896](https://github.com/pmd/pmd/issues/1896): \[doc] Error in changelog 6.16.0 due to not properly closed rule tag * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" +* java-multithreading + * [#1903](https://github.com/pmd/pmd/issues/1903): \[java] UnsynchronizedStaticFormatter doesn't allow block-level synchronization when using allowMethodLevelSynchronization=true * xml * [#1666](https://github.com/pmd/pmd/issues/1666): \[xml] wrong cdata rule description and examples From efd0eafff0df573427b18a42c290ee46a22868cc Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 19 Jul 2019 11:03:06 +0200 Subject: [PATCH 318/371] Make the new constants "NO_ERRORS_STATUS" private to avoid increasing the API footprint --- .../net/sourceforge/pmd/cli/PMDCommandLineInterface.java | 2 +- .../net/sourceforge/pmd/cpd/CPDCommandLineInterface.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java b/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java index 58af4c1bd2..24ed254d6a 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDCommandLineInterface.java @@ -27,7 +27,7 @@ public final class PMDCommandLineInterface { public static final String NO_EXIT_AFTER_RUN = "net.sourceforge.pmd.cli.noExit"; public static final String STATUS_CODE_PROPERTY = "net.sourceforge.pmd.cli.status"; - public static final int NO_ERRORS_STATUS = 0; + private static final int NO_ERRORS_STATUS = 0; public static final int ERROR_STATUS = 1; public static final int VIOLATIONS_FOUND = 4; diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDCommandLineInterface.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDCommandLineInterface.java index fef32365df..aee45308ad 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDCommandLineInterface.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDCommandLineInterface.java @@ -26,7 +26,7 @@ import com.beust.jcommander.ParameterException; public final class CPDCommandLineInterface { private static final Logger LOGGER = Logger.getLogger(CPDCommandLineInterface.class.getName()); - public static final int NO_ERRORS_STATUS = 0; + private static final int NO_ERRORS_STATUS = 0; private static final int ERROR_STATUS = 1; private static final int DUPLICATE_CODE_FOUND = 4; @@ -97,10 +97,10 @@ public final class CPDCommandLineInterface { if (arguments.isFailOnViolation()) { setStatusCodeOrExit(DUPLICATE_CODE_FOUND); } else { - setStatusCodeOrExit(0); + setStatusCodeOrExit(NO_ERRORS_STATUS); } } else { - setStatusCodeOrExit(0); + setStatusCodeOrExit(NO_ERRORS_STATUS); } } catch (IOException | RuntimeException e) { e.printStackTrace(); From d3a3c5529f8850862e7a0fc6d4416b3d943e76c4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 19 Jul 2019 11:03:21 +0200 Subject: [PATCH 319/371] Update release notes, fixes #1913, refs #1917 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index fe3d2aa4c7..3a23db495f 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -25,6 +25,8 @@ Being based on a proper Antlr grammar, CPD can: ### Fixed Issues +* core + * [#1913](https://github.com/pmd/pmd/issues/1913): \[core] "-help" CLI option ends with status code != 0 * doc * [#1896](https://github.com/pmd/pmd/issues/1896): \[doc] Error in changelog 6.16.0 due to not properly closed rule tag * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages @@ -39,6 +41,7 @@ Being based on a proper Antlr grammar, CPD can: * [#1869](https://github.com/pmd/pmd/pull/1869): \[xml] fix #1666 wrong cdata rule description and examples - [Artem](https://github.com/KroArtem) * [#1892](https://github.com/pmd/pmd/pull/1892): \[lua] \[cpd] Added CPD support for Lua - [Maikel Steneker](https://github.com/maikelsteneker) * [#1908](https://github.com/pmd/pmd/pull/1908): \[doc] Update ruleset filename from deprecated basic.xml to quickstart.xml - [crunsk](https://github.com/crunsk) +* [#1917](https://github.com/pmd/pmd/pull/1917): \[core] Add 'no error' return option, and assign it to the cli when the help command is invoked - [Renato Oliveira](https://github.com/renatoliveira) {% endtocmaker %} From 3623c02c55a5ea3110e9eed0f292e54a1ce8f14a Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 19 Jul 2019 11:06:52 +0200 Subject: [PATCH 320/371] [doc] fix typo --- docs/pages/pmd/userdocs/cpd.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/pmd/userdocs/cpd.md b/docs/pages/pmd/userdocs/cpd.md index 1afc993ae1..e9843661fe 100644 --- a/docs/pages/pmd/userdocs/cpd.md +++ b/docs/pages/pmd/userdocs/cpd.md @@ -199,7 +199,7 @@ Please note that if CPD detects duplicated source code, it will exit with status This behavior has been introduced to ease CPD integration into scripts or hooks, such as SVN hooks. <table> -<tr><td>0</td><td>Everything is fine, now code duplications found</td></tr> +<tr><td>0</td><td>Everything is fine, no code duplications found</td></tr> <tr><td>1</td><td>Couldn't understand command line parameters or CPD exited with an exception</td></tr> <tr><td>4</td><td>At least one code duplication has been detected unless '--failOnViolation false' is used.</td></tr> </table> From 14f5a2fe1ce61f8e90d3304b48ef24e3bb59cf54 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 19 Jul 2019 11:23:53 +0200 Subject: [PATCH 321/371] [doc] Update generated rule documentation --- docs/pages/pmd/rules/apex/bestpractices.md | 24 +- docs/pages/pmd/rules/apex/codestyle.md | 48 +-- docs/pages/pmd/rules/apex/design.md | 40 +- docs/pages/pmd/rules/apex/documentation.md | 4 +- docs/pages/pmd/rules/apex/errorprone.md | 36 +- docs/pages/pmd/rules/apex/performance.md | 12 +- docs/pages/pmd/rules/apex/security.md | 44 +- .../pmd/rules/ecmascript/bestpractices.md | 20 +- docs/pages/pmd/rules/ecmascript/codestyle.md | 36 +- docs/pages/pmd/rules/ecmascript/errorprone.md | 12 +- docs/pages/pmd/rules/java/bestpractices.md | 198 ++++----- docs/pages/pmd/rules/java/codestyle.md | 248 +++++------ docs/pages/pmd/rules/java/design.md | 174 ++++---- docs/pages/pmd/rules/java/documentation.md | 18 +- docs/pages/pmd/rules/java/errorprone.md | 392 +++++++++--------- docs/pages/pmd/rules/java/multithreading.md | 44 +- docs/pages/pmd/rules/java/performance.md | 118 +++--- docs/pages/pmd/rules/java/security.md | 8 +- docs/pages/pmd/rules/jsp/bestpractices.md | 14 +- docs/pages/pmd/rules/jsp/codestyle.md | 2 +- docs/pages/pmd/rules/jsp/design.md | 10 +- docs/pages/pmd/rules/jsp/errorprone.md | 4 +- docs/pages/pmd/rules/jsp/security.md | 8 +- docs/pages/pmd/rules/plsql/bestpractices.md | 4 +- docs/pages/pmd/rules/plsql/codestyle.md | 12 +- docs/pages/pmd/rules/plsql/design.md | 44 +- docs/pages/pmd/rules/plsql/errorprone.md | 12 +- docs/pages/pmd/rules/pom/errorprone.md | 8 +- docs/pages/pmd/rules/vf/security.md | 4 +- docs/pages/pmd/rules/xml/errorprone.md | 4 +- docs/pages/pmd/rules/xsl/codestyle.md | 4 +- docs/pages/pmd/rules/xsl/performance.md | 2 +- 32 files changed, 804 insertions(+), 804 deletions(-) diff --git a/docs/pages/pmd/rules/apex/bestpractices.md b/docs/pages/pmd/rules/apex/bestpractices.md index 4acf3f478d..4bc962d958 100644 --- a/docs/pages/pmd/rules/apex/bestpractices.md +++ b/docs/pages/pmd/rules/apex/bestpractices.md @@ -24,7 +24,7 @@ improves the readability of test output. **Example(s):** ``` java -@isTest +{%raw%}@isTest public class Foo { @isTest static void methodATest() { @@ -33,7 +33,7 @@ public class Foo { System.assert(o.isClosed); // not good System.assert(o.isClosed, 'Opportunity is not closed.'); // good } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -63,7 +63,7 @@ with messages provide the developer a clearer idea of what the test does. **Example(s):** ``` java -@isTest +{%raw%}@isTest public class Foo { public static testMethod void testSomething() { Account a = null; @@ -71,7 +71,7 @@ public class Foo { // System.assertNotEquals(a, null, 'account not found'); a.toString(); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -101,7 +101,7 @@ As testMethod keyword is deprecated, Salesforce advices to use @isTest annotatio **Example(s):** ``` java -@isTest +{%raw%}@isTest private class ATest { @isTest static void methodATest() { @@ -116,7 +116,7 @@ private class ATest { } private void fetchData() { } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -145,7 +145,7 @@ Apex unit tests should not use @isTest(seeAllData=true) because it opens up the **Example(s):** ``` java -@isTest(seeAllData = true) +{%raw%}@isTest(seeAllData = true) public class Foo { public static testMethod void testSomething() { Account a = null; @@ -153,7 +153,7 @@ public class Foo { // System.assertNotEquals(a, null, 'account not found'); a.toString(); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -183,11 +183,11 @@ Many interfaces (e.g. Batch) required global modifiers in the past but don't req **Example(s):** ``` java -global class Unchangeable { +{%raw%}global class Unchangeable { global UndeletableType unchangable(UndeletableType param) { // ... } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -219,7 +219,7 @@ See more here: https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex **Example(s):** ``` java -trigger Accounts on Account (before insert, before update, before delete, after insert, after update, after delete, after undelete) { +{%raw%}trigger Accounts on Account (before insert, before update, before delete, after insert, after update, after delete, after undelete) { for(Account acc : Trigger.new) { if(Trigger.isInsert) { // ... @@ -231,7 +231,7 @@ trigger Accounts on Account (before insert, before update, before delete, after // ... } } -} +}{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/apex/codestyle.md b/docs/pages/pmd/rules/apex/codestyle.md index c6286feaa7..a585b2af6a 100644 --- a/docs/pages/pmd/rules/apex/codestyle.md +++ b/docs/pages/pmd/rules/apex/codestyle.md @@ -27,9 +27,9 @@ By default this rule uses the standard Apex naming convention (Pascal case). **Example(s):** ``` java -public class FooClass { } // This is in pascal case, so it's ok +{%raw%}public class FooClass { } // This is in pascal case, so it's ok -public class fooClass { } // This will be reported unless you change the regex +public class fooClass { } // This will be reported unless you change the regex{%endraw%} ``` **This rule has the following properties:** @@ -80,11 +80,11 @@ By default this rule uses the standard Apex naming convention (Camel case). **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { Integer instanceField; // This is in camel case, so it's ok Integer INSTANCE_FIELD; // This will be reported unless you change the regex -} +}{%endraw%} ``` **This rule has the following properties:** @@ -138,12 +138,12 @@ from the rest. **Example(s):** ``` java -for (int i = 0; i < 42; i++) // not recommended +{%raw%}for (int i = 0; i < 42; i++) // not recommended foo(); for (int i = 0; i < 42; i++) { // preferred approach foo(); -} +}{%endraw%} ``` **This rule has the following properties:** @@ -177,11 +177,11 @@ By default this rule uses the standard Apex naming convention (Camel case). **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public bar(Integer methodParameter) { } // This is in camel case, so it's ok public baz(Integer METHOD_PARAMETER) { } // This will be reported unless you change the regex -} +}{%endraw%} ``` **This rule has the following properties:** @@ -229,14 +229,14 @@ from the rest. **Example(s):** ``` java -// this is OK +{%raw%}// this is OK if (foo) x++; // but this is not if (foo) x = x+1; else - x = x-1; + x = x-1;{%endraw%} ``` **This rule has the following properties:** @@ -270,12 +270,12 @@ controlled from the rest. **Example(s):** ``` java -if (foo) // not recommended +{%raw%}if (foo) // not recommended x++; if (foo) { // preferred approach x++; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -309,13 +309,13 @@ By default this rule uses the standard Apex naming convention (Camel case). **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public Foo() { Integer localVariable; // This is in camel case, so it's ok Integer LOCAL_VARIABLE; // This will be reported unless you change the regex } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -361,10 +361,10 @@ By default this rule uses the standard Apex naming convention (Camel case). **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void instanceMethod() { } // This is in camel case, so it's ok - public void INSTANCE_METHOD() { } // This will be reported unless you change the regex + public void INSTANCE_METHOD() { } // This will be reported unless you change the regex{%endraw%} ``` **This rule has the following properties:** @@ -418,13 +418,13 @@ can lead to quite messy code. This rule looks for several declarations on the sa **Example(s):** ``` java -Integer a, b; // not recommended +{%raw%}Integer a, b; // not recommended Integer a, b; // ok by default, can be flagged setting the strictMode property Integer a; // preferred approach -Integer b; +Integer b;{%endraw%} ``` **This rule has the following properties:** @@ -468,11 +468,11 @@ By default this rule uses the standard Apex naming convention (Camel case). **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public Integer instanceProperty { get; set; } // This is in camel case, so it's ok public Integer INSTANCE_PROPERTY { get; set; } // This will be reported unless you change the regex -} +}{%endraw%} ``` **This rule has the following properties:** @@ -523,11 +523,11 @@ by the more general rules {% rule "apex/codestyle/FieldNamingConventions&qu **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public static final Integer MY_NUM = 0; public String myTest = ''; DataModule dmTest = new DataModule(); -} +}{%endraw%} ``` **This rule has the following properties:** @@ -591,12 +591,12 @@ controlled from the rest. **Example(s):** ``` java -while (true) // not recommended +{%raw%}while (true) // not recommended x++; while (true) { // preferred approach x++; -} +}{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/apex/design.md b/docs/pages/pmd/rules/apex/design.md index b7043622cf..7e9760b946 100644 --- a/docs/pages/pmd/rules/apex/design.md +++ b/docs/pages/pmd/rules/apex/design.md @@ -22,7 +22,7 @@ Avoid creating deeply nested if-then statements since they are harder to read an **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar(Integer x, Integer y, Integer z) { if (x>y) { if (y>z) { @@ -32,7 +32,7 @@ public class Foo { } } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -84,7 +84,7 @@ into subcomponents. **Example(s):** ``` java -public class Complicated { +{%raw%}public class Complicated { public void example() { // This method has a cyclomatic complexity of 12 int x = 0, y = 1, z = 2, t = 2; boolean a = false, b = true, c = false, d = true; @@ -106,7 +106,7 @@ public class Complicated { } } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -149,7 +149,7 @@ apart the code becomes more managable and ripe for reuse. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar1() { // 1000 lines of code } @@ -162,7 +162,7 @@ public class Foo { public void barN() { // 1000 lines of code } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -204,14 +204,14 @@ same datatype. These situations usually denote the need for new objects to wrap **Example(s):** ``` java -// too many arguments liable to be mixed up +{%raw%}// too many arguments liable to be mixed up public void addPerson(int birthYear, int birthMonth, int birthDate, int height, int weight, int ssn) { // ... } // preferred approach public void addPerson(Date birthdate, BodyMeasurements measurements, int ssn) { // ... -} +}{%endraw%} ``` **This rule has the following properties:** @@ -255,7 +255,7 @@ developed easily. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public String value; public Bar something; public Variable var; @@ -265,7 +265,7 @@ public class Foo { public void doMoreWork() {} public void doWorkAgain() {} // [... more more public methods ...] -} +}{%endraw%} ``` **This rule has the following properties:** @@ -308,7 +308,7 @@ lines of code that are split are counted as one. **Example(s):** ``` java -public class Foo extends Bar { +{%raw%}public class Foo extends Bar { //this constructor only has 1 NCSS lines public Foo() { super(); @@ -318,7 +318,7 @@ public class Foo extends Bar { super.foo(); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -361,7 +361,7 @@ lines of code that are split are counted as one. **Example(s):** ``` java -public class Foo extends Bar { +{%raw%}public class Foo extends Bar { //this method only has 1 NCSS lines public Integer methd() { super.methd(); @@ -370,7 +370,7 @@ public class Foo extends Bar { return 1; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -413,7 +413,7 @@ lines of code that are split are counted as one. **Example(s):** ``` java -//this class only has 6 NCSS lines +{%raw%}//this class only has 6 NCSS lines public class Foo extends Bar { public Foo() { super(); @@ -424,7 +424,7 @@ public class Foo extends Bar { super.foo(); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -468,7 +468,7 @@ high complexity, and 11+ is very high complexity. **Example(s):** ``` java -// This has a Cyclomatic Complexity = 12 +{%raw%}// This has a Cyclomatic Complexity = 12 public class Foo { 1 public void example() { 2 if (a == b || (c == d && e == f)) { @@ -503,7 +503,7 @@ public class Foo { break; } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -548,7 +548,7 @@ city/state/zip fields could park them within a single Address field. **Example(s):** ``` java -public class Person { +{%raw%}public class Person { // too many separate fields int birthYear; int birthMonth; @@ -561,7 +561,7 @@ public class Person { // this is more manageable Date birthDate; BodyMeasurements measurements; -} +}{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/apex/documentation.md b/docs/pages/pmd/rules/apex/documentation.md index 20a24496e8..121415dbe6 100644 --- a/docs/pages/pmd/rules/apex/documentation.md +++ b/docs/pages/pmd/rules/apex/documentation.md @@ -32,7 +32,7 @@ Method overrides and tests are both exempted from having ApexDoc. **Example(s):** ``` java -/** +{%raw%}/** * @description Hello World */ public class HelloWorld { @@ -41,7 +41,7 @@ public class HelloWorld { * @return Bar */ public Object bar() { return null; } -} +}{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/apex/errorprone.md b/docs/pages/pmd/rules/apex/errorprone.md index 2e1c5ae832..c268244785 100644 --- a/docs/pages/pmd/rules/apex/errorprone.md +++ b/docs/pages/pmd/rules/apex/errorprone.md @@ -25,13 +25,13 @@ Avoid directly accessing Trigger.old and Trigger.new as it can lead to a bug. Tr **Example(s):** ``` java -trigger AccountTrigger on Account (before insert, before update) { +{%raw%}trigger AccountTrigger on Account (before insert, before update) { Account a = Trigger.new[0]; //Bad: Accessing the trigger array directly is not recommended. foreach ( Account a : Trigger.new ){ //Good: Iterate through the trigger.new array instead. } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -62,7 +62,7 @@ the logic can dynamically identify the proper data to operate against and not fa **Example(s):** ``` java -public without sharing class Foo { +{%raw%}public without sharing class Foo { void foo() { //Error - hardcoded the record type id if(a.RecordTypeId == '012500000009WAr'){ @@ -71,7 +71,7 @@ public without sharing class Foo { //do some logic here for a different record type... } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -103,11 +103,11 @@ A full list of supported annotations can be found at https://developer.salesforc **Example(s):** ``` java -@NonExistentAnnotation public class ClassWithNonexistentAnnotation { +{%raw%}@NonExistentAnnotation public class ClassWithNonexistentAnnotation { @NonExistentAnnotation public void methodWithNonExistentAnnotation() { // ... } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -141,14 +141,14 @@ or reported. **Example(s):** ``` java -public void doSomething() { +{%raw%}public void doSomething() { ... try { insert accounts; } catch (DmlException dmle) { // not good } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -181,13 +181,13 @@ Empty If Statement finds instances where a condition is checked but nothing is d **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar(Integer x) { if (x == 0) { // empty! } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -220,7 +220,7 @@ Empty block statements serve no purpose and should be removed. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private int _bar; @@ -228,7 +228,7 @@ public class Foo { // empty } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -260,7 +260,7 @@ Avoid empty try or finally blocks - what's the point? **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar() { try { // empty ! @@ -278,7 +278,7 @@ public class Foo { // empty! } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -312,11 +312,11 @@ a while loop that does a lot in the exit expression, rewrite it to make it clear **Example(s):** ``` java -public void bar(Integer a, Integer b) { +{%raw%}public void bar(Integer a, Integer b) { while (a == b) { // empty! } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -345,12 +345,12 @@ Non-constructor methods should not have the same name as the enclosing class. **Example(s):** ``` java -public class MyClass { +{%raw%}public class MyClass { // this is OK because it is a constructor public MyClass() {} // this is bad because it is a method public void MyClass() {} -} +}{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/apex/performance.md b/docs/pages/pmd/rules/apex/performance.md index d092b7820f..67c3bc34e9 100644 --- a/docs/pages/pmd/rules/apex/performance.md +++ b/docs/pages/pmd/rules/apex/performance.md @@ -22,7 +22,7 @@ Avoid DML statements inside loops to avoid hitting the DML governor limit. Inste **Example(s):** ``` java -public class Something { +{%raw%}public class Something { public void foo() { for (Integer i = 0; i < 151; i++) { Account account; @@ -30,7 +30,7 @@ public class Something { insert account; } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -59,13 +59,13 @@ New objects created within loops should be checked to see if they can created ou **Example(s):** ``` java -public class Something { +{%raw%}public class Something { public static void main( String as[] ) { for (Integer i = 0; i < 10; i++) { List<Account> accounts = [SELECT Id FROM Account]; } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -94,13 +94,13 @@ Sosl calls within loops can cause governor limit exceptions. **Example(s):** ``` java -public class Something { +{%raw%}public class Something { public static void main( String as[] ) { for (Integer i = 0; i < 10; i++) { List<List<SObject>> searchList = [FIND 'map*' IN ALL FIELDS RETURNING Account (Id, Name), Contact, Opportunity, Lead]; } } -} +}{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/apex/security.md b/docs/pages/pmd/rules/apex/security.md index e77159bddb..c45d22b882 100644 --- a/docs/pages/pmd/rules/apex/security.md +++ b/docs/pages/pmd/rules/apex/security.md @@ -23,12 +23,12 @@ Hard-wiring these values greatly compromises the security of encrypted data. **Example(s):** ``` java -public without sharing class Foo { +{%raw%}public without sharing class Foo { Blob hardCodedIV = Blob.valueOf('Hardcoded IV 123'); Blob hardCodedKey = Blob.valueOf('0000000000000000'); Blob data = Blob.valueOf('Data to be encrypted'); Blob encrypted = Crypto.encrypt('AES128', hardCodedKey, hardCodedIV, data); -} +}{%endraw%} ``` **This rule has the following properties:** @@ -59,7 +59,7 @@ privilege and may produce runtime errors. This check forces you to handle such s **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public Contact foo(String status, String ID) { Contact c = [SELECT Status__c FROM Contact WHERE Id=:ID]; @@ -72,7 +72,7 @@ public class Foo { update c; return c; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -102,7 +102,7 @@ modification of the database just by accessing a page. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public init() { insert data; } @@ -110,7 +110,7 @@ public class Foo { public Foo() { insert data; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -146,11 +146,11 @@ of private data. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public Foo() { Configuration.disableTriggerCRUDSecurity(); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -180,12 +180,12 @@ Checks against accessing endpoints under plain **http**. You should always use **Example(s):** ``` java -public without sharing class Foo { +{%raw%}public without sharing class Foo { void foo() { HttpRequest req = new HttpRequest(); req.setEndpoint('http://localhost:com'); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -215,12 +215,12 @@ redirecting users to phishing sites. **Example(s):** ``` java -public without sharing class Foo { +{%raw%}public without sharing class Foo { String unsafeLocation = ApexPage.getCurrentPage().getParameters.get('url_param'); PageReference page() { return new PageReference(unsafeLocation); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -250,9 +250,9 @@ forces the developer to take access restrictions into account before modifying o **Example(s):** ``` java -public without sharing class Foo { +{%raw%}public without sharing class Foo { // DML operation here -} +}{%endraw%} ``` **This rule has the following properties:** @@ -281,11 +281,11 @@ Detects the usage of untrusted / unescaped variables in DML queries. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void test1(String t1) { Database.query('SELECT Id FROM Account' + t1); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -326,13 +326,13 @@ For more information, you can check [this](https://developer.salesforce.com/docs **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void foo(String username, String password) { Blob headerValue = Blob.valueOf(username + ':' + password); String authorizationHeader = 'BASIC ' + EncodingUtil.base64Encode(headerValue); req.setHeader('Authorization', authorizationHeader); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -363,9 +363,9 @@ attacks if unescaped. **Example(s):** ``` java -public without sharing class Foo { +{%raw%}public without sharing class Foo { Trigger.new[0].addError(vulnerableHTMLGoesHere, false); -} +}{%endraw%} ``` **This rule has the following properties:** @@ -395,10 +395,10 @@ to avoid XSS attacks. **Example(s):** ``` java -public without sharing class Foo { +{%raw%}public without sharing class Foo { String unescapedstring = ApexPage.getCurrentPage().getParameters.get('url_param'); String usedLater = unescapedstring; -} +}{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/ecmascript/bestpractices.md b/docs/pages/pmd/rules/ecmascript/bestpractices.md index 9815aaf2f7..33d795d66d 100644 --- a/docs/pages/pmd/rules/ecmascript/bestpractices.md +++ b/docs/pages/pmd/rules/ecmascript/bestpractices.md @@ -25,9 +25,9 @@ Avoid using with - it's bad news **Example(s):** ``` javascript -with (object) { +{%raw%}with (object) { property = 3; // Might be on object, might be on window: who knows. -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -50,7 +50,7 @@ usage is likely a bug, or at best poor style. **Example(s):** ``` javascript -// Ok +{%raw%}// Ok function foo() { if (condition1) { return true; @@ -64,7 +64,7 @@ function bar() { return; } return false; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -108,13 +108,13 @@ Global variables can lead to side-effects that are hard to debug. **Example(s):** ``` javascript -function(arg) { +{%raw%}function(arg) { notDeclaredVariable = 1; // this will create a global variable and trigger the rule var someVar = 1; // this is a local variable, that's ok window.otherGlobal = 2; // this will not trigger the rule, although it is a global variable. -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -143,7 +143,7 @@ is better to explicitly scope the variable name to the nearest enclosing scope w **Example(s):** ``` javascript -// Ok +{%raw%}// Ok function foo() { var p = 'clean'; function() { @@ -168,7 +168,7 @@ function bar() { }(); // 'p' is trashed and has value of 'dirty'! -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -200,9 +200,9 @@ See also: [parseInt()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/R **Example(s):** ``` javascript -parseInt("010"); // unclear, could be interpreted as 10 or 7 (with a base of 7) +{%raw%}parseInt("010"); // unclear, could be interpreted as 10 or 7 (with a base of 7) -parseInt("10", 10); // good +parseInt("10", 10); // good{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/ecmascript/codestyle.md b/docs/pages/pmd/rules/ecmascript/codestyle.md index 4ced64c596..a4529a14f8 100644 --- a/docs/pages/pmd/rules/ecmascript/codestyle.md +++ b/docs/pages/pmd/rules/ecmascript/codestyle.md @@ -36,7 +36,7 @@ indicative of the bug where the assignment operator '=' was used instead of the **Example(s):** ``` javascript -var x = 2; +{%raw%}var x = 2; // Bad if ((x = getX()) == 3) { alert('3!'); @@ -44,7 +44,7 @@ if ((x = getX()) == 3) { function getX() { return 3; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -95,14 +95,14 @@ Avoid using 'for' statements without using curly braces. **Example(s):** ``` javascript -// Ok +{%raw%}// Ok for (var i = 0; i < 42; i++) { foo(); } // Bad for (var i = 0; i < 42; i++) - foo(); + foo();{%endraw%} ``` **Use this rule by referencing it:** @@ -128,7 +128,7 @@ Avoid using if..else statements without using curly braces. **Example(s):** ``` javascript -// Ok +{%raw%}// Ok if (foo) { x++; } else { @@ -139,7 +139,7 @@ if (foo) { if (foo) x++; else - y++; + y++;{%endraw%} ``` **Use this rule by referencing it:** @@ -163,14 +163,14 @@ Avoid using if statements without using curly braces. **Example(s):** ``` javascript -// Ok +{%raw%}// Ok if (foo) { x++; } // Bad if (foo) - x++; + x++;{%endraw%} ``` **Use this rule by referencing it:** @@ -197,7 +197,7 @@ See also: <http://eslint.org/docs/rules/no-else-return> **Example(s):** ``` javascript -// Bad: +{%raw%}// Bad: if (x) { return y; } else { @@ -208,7 +208,7 @@ if (x) { if (x) { return y; } -return z; +return z;{%endraw%} ``` **Use this rule by referencing it:** @@ -238,14 +238,14 @@ be misleading. Considering removing this unnecessary Block. **Example(s):** ``` javascript -if (foo) { +{%raw%}if (foo) { // Ok } if (bar) { { // Bad } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -269,9 +269,9 @@ Unnecessary parentheses should be removed. **Example(s):** ``` javascript -var x = 1; // Ok +{%raw%}var x = 1; // Ok var y = (1 + 1); // Ok -var z = ((1 + 1)); // Bad +var z = ((1 + 1)); // Bad{%endraw%} ``` **Use this rule by referencing it:** @@ -302,7 +302,7 @@ will never execute. This is a bug, or extremely poor style. **Example(s):** ``` javascript -// Ok +{%raw%}// Ok function foo() { return 1; } @@ -311,7 +311,7 @@ function bar() { var x = 1; return x; x = 2; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -335,14 +335,14 @@ Avoid using 'while' statements without using curly braces. **Example(s):** ``` javascript -// Ok +{%raw%}// Ok while (true) { x++; } // Bad while (true) - x++; + x++;{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/ecmascript/errorprone.md b/docs/pages/pmd/rules/ecmascript/errorprone.md index a3cf0fd5fa..3b8ec3cb69 100644 --- a/docs/pages/pmd/rules/ecmascript/errorprone.md +++ b/docs/pages/pmd/rules/ecmascript/errorprone.md @@ -27,13 +27,13 @@ This rule helps improve code portability due to differences in browser treatment **Example(s):** ``` javascript -function(arg) { +{%raw%}function(arg) { var obj1 = { a : 1 }; // Ok var arr1 = [ 1, 2 ]; // Ok var obj2 = { a : 1, }; // Syntax error in some browsers! var arr2 = [ 1, 2, ]; // Length 2 or 3 depending on the browser! -} +}{%endraw%} ``` **This rule has the following properties:** @@ -80,7 +80,7 @@ same type. The === operator avoids the casting. **Example(s):** ``` javascript -// Ok +{%raw%}// Ok if (someVar === true) { ... } @@ -95,7 +95,7 @@ if (someVar == true) { // Bad if (someVar != 3) { ... -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -120,13 +120,13 @@ precision in a floating point number. This may result in numeric calculations b **Example(s):** ``` javascript -var a = 9; // Ok +{%raw%}var a = 9; // Ok var b = 999999999999999; // Ok var c = 999999999999999999999; // Not good var w = 1.12e-4; // Ok var x = 1.12; // Ok var y = 1.1234567890123; // Ok -var z = 1.12345678901234567; // Not good +var z = 1.12345678901234567; // Not good{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/java/bestpractices.md b/docs/pages/pmd/rules/java/bestpractices.md index 4fe71fb790..223db9a15c 100644 --- a/docs/pages/pmd/rules/java/bestpractices.md +++ b/docs/pages/pmd/rules/java/bestpractices.md @@ -32,12 +32,12 @@ directly) a protected constructor can be provided prevent direct instantiation. **Example(s):** ``` java -public abstract class Foo { +{%raw%}public abstract class Foo { void int method1() { ... } void int method2() { ... } // consider using abstract methods or removing // the abstract modifier and adding protected constructors -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -62,14 +62,14 @@ This turns a private constructor effectively into one with package scope, and is **Example(s):** ``` java -public class Outer { +{%raw%}public class Outer { void method(){ Inner ic = new Inner();//Causes generation of accessor class } public class Inner { private Inner(){} } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -92,7 +92,7 @@ be avoided by changing the visibility of the field / method from private to pack **Example(s):** ``` java -public class OuterClass { +{%raw%}public class OuterClass { private int counter; /* package */ int id; @@ -105,7 +105,7 @@ public class OuterClass { return OuterClass.this.id; // id is package-private, no accessor method needed } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -127,13 +127,13 @@ This prevents future changes from the user from affecting the original array. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private String [] x; public void foo (String [] param) { // Don't do this, make a copy of the array at least this.x=param; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -159,7 +159,7 @@ Avoid printStackTrace(); use a logger call instead. **Example(s):** ``` java -class Foo { +{%raw%}class Foo { void bar() { try { // do something @@ -167,7 +167,7 @@ class Foo { e.printStackTrace(); } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -200,7 +200,7 @@ In for-loops, configured by the `forReassign` property: **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private void foo() { for (String s : listOfStrings()) { s = s.trim(); // OK, when foreachReassign is "firstOnly" or "allow" @@ -220,7 +220,7 @@ public class Foo { doSomethingWith(i); } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -258,11 +258,11 @@ Reassigning values to incoming parameters is not recommended. Use temporary loc **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private void foo(String bar) { bar = "something else"; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -287,9 +287,9 @@ if held within objects with long lifetimes. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private StringBuffer buffer; // potential memory leak as an instance variable; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -311,9 +311,9 @@ Externalizing IP adresses is preferable. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private String ip = "127.0.0.1"; // not recommended -} +}{%endraw%} ``` **This rule has the following properties:** @@ -350,7 +350,7 @@ If the value return is 'false', it should be handled properly. **Example(s):** ``` java -Statement stat = conn.createStatement(); +{%raw%}Statement stat = conn.createStatement(); ResultSet rst = stat.executeQuery("SELECT name FROM person"); rst.next(); // what if it returns false? bad form String firstName = rst.getString(1); @@ -361,7 +361,7 @@ if (rst.next()) { // result is properly examined and used String firstName = rst.getString(1); } else { // handle missing data -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -386,7 +386,7 @@ better placed in classes or enums. See Effective Java, item 19. **Example(s):** ``` java -public interface ConstantInterface { +{%raw%}public interface ConstantInterface { public static final int CONST1 = 1; // violation, no fields allowed in interface! static final int CONST2 = 1; // violation, no fields allowed in interface! final int CONST3 = 1; // violation, no fields allowed in interface! @@ -405,7 +405,7 @@ public interface YetAnotherConstantInterface { public static final int CONST1 = 1; // no violation int anyMethod(); -} +}{%endraw%} ``` **This rule has the following properties:** @@ -446,7 +446,7 @@ By convention, the default label should be the last label in a switch statement. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar(int a) { switch (a) { case 1: // do something @@ -457,7 +457,7 @@ public class Foo { break; } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -487,13 +487,13 @@ accessible from outside the anonymous class, and those legit cases should be sup **Example(s):** ``` java -// this is double-brace initialization -return new ArrayList<String>(){%raw%}{{ addAll("a","b","c"); }};{%endraw%} +{%raw%}// this is double-brace initialization +return new ArrayList<String>(){{ addAll("a","b","c"); }}; // the better way is to not create an anonymous class: List<String> a = new ArrayList<>(); a.addAll("a","b","c"); -return a; +return a;{%endraw%} ``` **Use this rule by referencing it:** @@ -519,7 +519,7 @@ element of the list or array left to right. **Example(s):** ``` java -public class MyClass { +{%raw%}public class MyClass { void loop(List<String> l) { for (int i = 0; i < l.size(); i++) { // pre Java 1.5 System.out.println(l.get(i)); @@ -529,7 +529,7 @@ public class MyClass { System.out.println(s); } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -554,9 +554,9 @@ the loop iterates over. By default this rule allows a regular 'for' loop with on **Example(s):** ``` java -// this will be reported with the default setting of at most one control variable in a for loop +{%raw%}// this will be reported with the default setting of at most one control variable in a for loop for (int i = 0, j = 0; i < 10; i++, j += 2) { - foo(); + foo();{%endraw%} ``` **This rule has the following properties:** @@ -593,9 +593,9 @@ otherwise skip the associate String creation and manipulation. **Example(s):** ``` java -// Add this for performance +{%raw%}// Add this for performance if (log.isDebugEnabled() { ... - log.debug("log something" + " and " + "concat strings"); + log.debug("log something" + " and " + "concat strings");{%endraw%} ``` **This rule has the following properties:** @@ -639,7 +639,7 @@ through the @RunWith(Suite.class) annotation. **Example(s):** ``` java -public class BadExample extends TestCase{ +{%raw%}public class BadExample extends TestCase{ public static Test suite(){ return new Suite(); @@ -649,7 +649,7 @@ public class BadExample extends TestCase{ @RunWith(Suite.class) @SuiteClasses( { TestOne.class, TestTwo.class }) public class GoodTest { -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -681,7 +681,7 @@ JUnit 5 introduced @AfterEach and @AfterAll annotations to execute methods after **Example(s):** ``` java -public class MyTest { +{%raw%}public class MyTest { public void tearDown() { bad(); } @@ -690,7 +690,7 @@ public class MyTest2 { @After public void tearDown() { good(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -722,7 +722,7 @@ JUnit 5 introduced @BeforeEach and @BeforeAll annotations to execute methods bef **Example(s):** ``` java -public class MyTest { +{%raw%}public class MyTest { public void setUp() { bad(); } @@ -731,7 +731,7 @@ public class MyTest2 { @Before public void setUp() { good(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -767,7 +767,7 @@ In JUnit 5, one of the following annotations should be used for tests: @Test, @R **Example(s):** ``` java -public class MyTest { +{%raw%}public class MyTest { public void testBad() { doSomething(); } @@ -776,7 +776,7 @@ public class MyTest { public void testGood() { doSomething(); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -813,14 +813,14 @@ assertEquals(), not the two-argument version. **Example(s):** ``` java -public class Foo extends TestCase { +{%raw%}public class Foo extends TestCase { public void testSomething() { assertEquals("foo", "bar"); // Use the form: // assertEquals("Foo does not equals bar", "foo", "bar"); // instead } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -857,7 +857,7 @@ This rule checks for JUnit4, JUnit5 and TestNG Tests, as well as methods startin **Example(s):** ``` java -public class MyTestCase extends TestCase { +{%raw%}public class MyTestCase extends TestCase { // Ok public void testMyCaseWithOneAssert() { boolean myVar = false; @@ -870,7 +870,7 @@ public class MyTestCase extends TestCase { assertFalse("myVar should be false", myVar); assertEquals("should equals false", false, myVar); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -907,14 +907,14 @@ with messages provide the developer a clearer idea of what the test does. **Example(s):** ``` java -public class Foo extends TestCase { +{%raw%}public class Foo extends TestCase { public void testSomething() { Bar b = findBar(); // This is better than having a NullPointerException // assertNotNull("bar not found", b); b.work(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -935,7 +935,7 @@ In JUnit4, use the @Test(expected) annotation to denote tests that should throw **Example(s):** ``` java -public class MyTest { +{%raw%}public class MyTest { @Test public void testBad() { try { @@ -949,7 +949,7 @@ public class MyTest { public void testGood() { doSomething(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -972,7 +972,7 @@ by their interface types (i.e, Set) provides much more flexibility. **Example(s):** ``` java -import java.util.ArrayList; +{%raw%}import java.util.ArrayList; import java.util.HashSet; public class Bar { @@ -989,7 +989,7 @@ public class Bar { public Set<SomeType> getFoo() { return new HashSet<SomeType>(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1011,13 +1011,13 @@ removed or replaced outside of the object that owns it. It is safer to return a **Example(s):** ``` java -public class SecureSystem { +{%raw%}public class SecureSystem { UserData [] ud; public UserData [] getUserData() { // Don't return directly the internal array, return a copy return ud; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1041,12 +1041,12 @@ the method really overrides one, which helps refactoring and clarifies intent. **Example(s):** ``` java -public class Foo implements Runnable { +{%raw%}public class Foo implements Runnable { // This method is overridden, and should have an @Override annotation public void run() { } - } + }{%endraw%} ``` **Use this rule by referencing it:** @@ -1078,14 +1078,14 @@ can lead to quite messy code. This rule looks for several declarations on the sa **Example(s):** ``` java -String name; // separate declarations +{%raw%}String name; // separate declarations String lastname; String name, lastname; // combined declaration, a violation String name, lastname; // combined declaration on multiple lines, no violation by default. - // Set property strictMode to true to mark this as violation. + // Set property strictMode to true to mark this as violation.{%endraw%} ``` **This rule has the following properties:** @@ -1138,11 +1138,11 @@ can be avoided, they will just return false. **Example(s):** ``` java -class Foo { +{%raw%}class Foo { boolean bar(String x) { return x.equalsIgnoreCase("2"); // should be "2".equalsIgnoreCase(x) } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1176,11 +1176,11 @@ can be avoided, they will just return false. **Example(s):** ``` java -class Foo { +{%raw%}class Foo { boolean bar(String x) { return x.equals("2"); // should be "2".equals(x) } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1203,7 +1203,7 @@ effectively. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void good() { try{ Integer.parseInt("a"); @@ -1223,7 +1223,7 @@ public class Foo { throw new Exception(e.getMessage()); } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1247,7 +1247,7 @@ Consider replacing Enumeration usages with the newer java.util.Iterator **Example(s):** ``` java -public class Foo implements Enumeration { +{%raw%}public class Foo implements Enumeration { private int x = 42; public boolean hasMoreElements() { return true; @@ -1255,7 +1255,7 @@ public class Foo implements Enumeration { public Object nextElement() { return String.valueOf(i++); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1279,11 +1279,11 @@ Consider replacing Hashtable usage with the newer java.util.Map if thread safety **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar() { Hashtable h = new Hashtable(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1307,11 +1307,11 @@ Consider replacing Vector usages with the newer java.util.ArrayList if expensive **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar() { Vector v = new Vector(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1335,14 +1335,14 @@ All switch statements should include a default option to catch any unspecified v **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { int x = 2; switch (x) { case 1: int j = 6; case 2: int j = 8; // missing default: here } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1372,14 +1372,14 @@ will (and by priority) and avoid clogging the Standard out log. **Example(s):** ``` java -class Foo{ +{%raw%}class Foo{ Logger log = Logger.getLogger(Foo.class.getName()); public void testA () { System.out.println("Entering test"); // Better use this log.fine("Entering test"); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1400,11 +1400,11 @@ Avoid passing parameters to methods or constructors without actually referencing **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private void bar(String howdy) { // howdy is not used } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1441,10 +1441,10 @@ This rule will also find unused on demand imports, i.e. import com.foo.*. **Example(s):** ``` java -import java.io.File; // not referenced or required +{%raw%}import java.io.File; // not referenced or required import java.util.*; // not referenced or required -public class Foo {} +public class Foo {}{%endraw%} ``` **Use this rule by referencing it:** @@ -1465,11 +1465,11 @@ Detects when a local variable is declared and/or assigned, but not used. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void doSomething() { int i = 5; // Unused } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1490,14 +1490,14 @@ Detects when a private field is declared and/or assigned a value, but not used. **Example(s):** ``` java -public class Something { +{%raw%}public class Something { private static int FOO = 2; // Unused private int i = 5; // Unused private int j = 6; public int addOne() { return j++; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1533,9 +1533,9 @@ Unused Private Method detects when a private method is declared but is unused. **Example(s):** ``` java -public class Something { +{%raw%}public class Something { private void foo() {} // unused -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1587,13 +1587,13 @@ This rule detects JUnit assertions in object equality. These assertions should b **Example(s):** ``` java -public class FooTest extends TestCase { +{%raw%}public class FooTest extends TestCase { void testCode() { Object a, b; assertTrue(a.equals(b)); // bad usage assertEquals(?a should equals b?, a, b); // good usage } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1632,7 +1632,7 @@ more specific methods, like assertNull, assertNotNull. **Example(s):** ``` java -public class FooTest extends TestCase { +{%raw%}public class FooTest extends TestCase { void testCode() { Object a = doSomething(); assertTrue(a==null); // bad usage @@ -1640,7 +1640,7 @@ public class FooTest extends TestCase { assertTrue(a != null); // bad usage assertNotNull(a); // good usage } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1679,13 +1679,13 @@ by more specific methods, like assertSame, assertNotSame. **Example(s):** ``` java -public class FooTest extends TestCase { +{%raw%}public class FooTest extends TestCase { void testCode() { Object a, b; assertTrue(a == b); // bad usage assertSame(a, b); // good usage } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1715,7 +1715,7 @@ When asserting a value is the same as a literal or Boxed boolean, use assertTrue **Example(s):** ``` java -public class MyTestCase extends TestCase { +{%raw%}public class MyTestCase extends TestCase { public void testMyCase() { boolean myVar = true; // Ok @@ -1729,7 +1729,7 @@ public class MyTestCase extends TestCase { // Bad assertEquals("myVar is false", Boolean.FALSE, myVar); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1751,7 +1751,7 @@ Comparing the value of size() to 0 does not convey intent as well as the isEmpty **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void good() { List foo = getList(); if (foo.isEmpty()) { @@ -1765,7 +1765,7 @@ public class Foo { // blah } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1801,7 +1801,7 @@ preserved. **Example(s):** ``` java -public class TryWithResources { +{%raw%}public class TryWithResources { public void run() { InputStream in = null; try { @@ -1822,7 +1822,7 @@ public class TryWithResources { int i = in2.read(); } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1880,7 +1880,7 @@ having to deal with the creation of an array. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void foo(String s, Object[] args) { // Do something here... } @@ -1888,7 +1888,7 @@ public class Foo { public void bar(String s, Object... args) { // Ahh, varargs tastes much better... } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1919,14 +1919,14 @@ a block `{}` is sufficient. **Example(s):** ``` java -public class Example { +{%raw%}public class Example { { while (true) { } // allowed while (false) { } // disallowed do { } while (true); // disallowed do { } while (false); // disallowed } -} +}{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/java/codestyle.md b/docs/pages/pmd/rules/java/codestyle.md index 3c9cbab427..588e052abc 100644 --- a/docs/pages/pmd/rules/java/codestyle.md +++ b/docs/pages/pmd/rules/java/codestyle.md @@ -37,8 +37,8 @@ by {% rule java/codestyle/ClassNamingConventions %}. **Example(s):** ``` java -public abstract class Foo { // should be AbstractFoo -} +{%raw%}public abstract class Foo { // should be AbstractFoo +}{%endraw%} ``` **This rule has the following properties:** @@ -75,11 +75,11 @@ Classes with solely static members are ignored, refer to [UseUtilityClassRule](p **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { // missing constructor public void doSomething() { ... } public void doOtherThing { ... } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -115,8 +115,8 @@ Avoid using dollar signs in variable/method/class/interface names. **Example(s):** ``` java -public class Fo$o { // not a recommended name -} +{%raw%}public class Fo$o { // not a recommended name +}{%endraw%} ``` **Use this rule by referencing it:** @@ -162,11 +162,11 @@ If the goal is to avoid defining constants in a scope smaller than the class, th **Example(s):** ``` java -public class MyClass { +{%raw%}public class MyClass { public void foo() { final String finalLocalVariable; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -199,18 +199,18 @@ by the more general rule {% rule java/codestyle/FormalParameterNamingConventions **Example(s):** ``` java -// Not really clear +{%raw%}// Not really clear public class Foo { public void bar( int inLeftOperand, Result outRightOperand) { outRightOperand.setValue(inLeftOperand * outRightOperand.getValue()); } -} +}{%endraw%} ``` ``` java -// Far more useful +{%raw%}// Far more useful public class Foo { /** * @@ -222,7 +222,7 @@ public class Foo { Result rightOperand) { rightOperand.setValue(leftOperand * rightOperand.getValue()); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -249,11 +249,11 @@ Clarify your intent by using private or package access modifiers instead. **Example(s):** ``` java -public final class Bar { +{%raw%}public final class Bar { private int x; protected int y; // bar cannot be subclassed, so is y really private or package visible? Bar() {} -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -281,10 +281,10 @@ visibility cannot be reduced). Clarify your intent by using private or package a **Example(s):** ``` java -public final class Foo { +{%raw%}public final class Foo { private int bar() {} protected int baz() {} // Foo cannot be subclassed, and doesn't extend anything, so is baz() really private or package visible? -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -309,7 +309,7 @@ and increases the maintenance burden. **Example(s):** ``` java -public class SomeJNIClass { +{%raw%}public class SomeJNIClass { public SomeJNIClass() { System.loadLibrary("nativelib"); @@ -322,7 +322,7 @@ public class SomeJNIClass { public void invalidCallsInMethod() throws SecurityException, NoSuchMethodException { System.loadLibrary("nativelib"); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -354,9 +354,9 @@ and not(../Annotation//Name[@Image = 'Override']) **Example(s):** ``` java -public boolean getFoo(); // bad +{%raw%}public boolean getFoo(); // bad public boolean isFoo(); // ok -public boolean getFoo(boolean bar); // ok, unless checkParameterizedMethods=true +public boolean getFoo(boolean bar); // ok, unless checkParameterizedMethods=true{%endraw%} ``` **This rule has the following properties:** @@ -399,7 +399,7 @@ another constructor (such as an overloaded constructor) is called, this rule wil **Example(s):** ``` java -public class Foo extends Bar{ +{%raw%}public class Foo extends Bar{ public Foo() { // call the constructor of Bar super(); @@ -409,7 +409,7 @@ public class Foo extends Bar{ this(); // no problem with this } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -436,7 +436,7 @@ and reports utility class names not ending with 'Util'. **Example(s):** ``` java -// This is Pascal case, the recommended naming convention in Java +{%raw%}// This is Pascal case, the recommended naming convention in Java // Note that the default values of this rule don't allow underscores // or accented characters in type names public class FooBar {} @@ -447,7 +447,7 @@ public class FooBar {} public abstract class Thing {} // This class doesn't respect the convention, and will be flagged -public class Éléphant {} +public class Éléphant {}{%endraw%} ``` **This rule has the following properties:** @@ -497,7 +497,7 @@ property "ignoredAnnotations" to customize the recognized annotations. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { final String stringValue = "some string"; String getString() { return stringValue; @@ -516,7 +516,7 @@ public class Foo { /* default */ class NestedFoo { } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -561,9 +561,9 @@ as "does the error case go first?" or "does the common case go fi **Example(s):** ``` java -boolean bar(int x, int y) { +{%raw%}boolean bar(int x, int y) { return (x != y) ? diff : same; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -628,12 +628,12 @@ and IfElseStmtMustUseBraces. **Example(s):** ``` java -while (true) // not recommended +{%raw%}while (true) // not recommended x++; while (true) { // preferred approach x++; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -707,7 +707,7 @@ Avoid importing anything from the package 'java.lang'. These classes are automa **Example(s):** ``` java -import java.lang.String; // this is unnecessary +{%raw%}import java.lang.String; // this is unnecessary public class Foo {} @@ -715,7 +715,7 @@ public class Foo {} import java.lang.*; // this is bad -public class Foo {} +public class Foo {}{%endraw%} ``` **Use this rule by referencing it:** @@ -736,9 +736,9 @@ Duplicate or overlapping import statements should be avoided. **Example(s):** ``` java -import java.lang.String; +{%raw%}import java.lang.String; import java.lang.*; -public class Foo {} +public class Foo {}{%endraw%} ``` **Use this rule by referencing it:** @@ -777,7 +777,7 @@ usage by developers who should be implementing their own versions in the concret **Example(s):** ``` java -public abstract class ShouldBeAbstract { +{%raw%}public abstract class ShouldBeAbstract { public Object couldBeAbstract() { // Should be abstract method ? return null; @@ -785,7 +785,7 @@ public abstract class ShouldBeAbstract { public void couldBeAbstract() { } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -809,8 +809,8 @@ No need to explicitly extend Object. **Example(s):** ``` java -public class Foo extends Object { // not required -} +{%raw%}public class Foo extends Object { // not required +}{%endraw%} ``` **Use this rule by referencing it:** @@ -831,7 +831,7 @@ Fields should be declared at the top of the class, before any method declaration **Example(s):** ``` java -public class HelloWorldBean { +{%raw%}public class HelloWorldBean { // Field declared before methods / inner classes - OK private String _thing; @@ -842,7 +842,7 @@ public class HelloWorldBean { // Field declared after methods / inner classes - avoid this private String _fieldInWrongLocation; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -887,7 +887,7 @@ convention for constants and enum constants. **Example(s):** ``` java -class Foo { +{%raw%}class Foo { int myField = 1; // This is in camel case, so it's ok int my_Field = 1; // This contains an underscore, it's not ok by default // but you may allow it, or even require the "my_" prefix @@ -902,7 +902,7 @@ class Foo { enum AnEnum { ORG, NET, COM; // These use a separate property but are set to ALL_UPPER by default } - } + }{%endraw%} ``` **This rule has the following properties:** @@ -957,11 +957,11 @@ Some for loops can be simplified to while loops, this makes them more concise. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar() { for (;true;) true; // No Init or Update part, may as well be: while (true) } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -992,8 +992,8 @@ by the rule {% rule java/codestyle/ControlStatementBraces %}. **Example(s):** ``` java -for (int i = 0; i < 42; i++) - foo(); +{%raw%}for (int i = 0; i < 42; i++) + foo();{%endraw%} ``` **Use this rule by referencing it:** @@ -1019,7 +1019,7 @@ By default this rule uses the standard Java naming convention (Camel case). **Example(s):** ``` java -class Foo { +{%raw%}class Foo { abstract void bar(int myInt); // This is Camel case, so it's ok @@ -1037,7 +1037,7 @@ class Foo { } - } + }{%endraw%} ``` **This rule has the following properties:** @@ -1086,7 +1086,7 @@ Names for references to generic values should be limited to a single uppercase l **Example(s):** ``` java -public interface GenericDao<E extends BaseModel, K extends Serializable> extends BaseDao { +{%raw%}public interface GenericDao<E extends BaseModel, K extends Serializable> extends BaseDao { // This is ok... } @@ -1100,7 +1100,7 @@ public interface GenericDao<e extends BaseModel, K extends Serializable> { public interface GenericDao<EF extends BaseModel, K extends Serializable> { // 'EF' is not ok. -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1125,7 +1125,7 @@ branch. **Example(s):** ``` java -try { +{%raw%}try { // do something } catch (IllegalArgumentException e) { throw e; @@ -1137,7 +1137,7 @@ try { // do something } catch (IllegalArgumentException | IllegalStateException e) { // This is better throw e; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1171,14 +1171,14 @@ by the rule {% rule java/codestyle/ControlStatementBraces %}. **Example(s):** ``` java -// this is OK +{%raw%}// this is OK if (foo) x++; // but this is not if (foo) x = x+1; else - x = x-1; + x = x-1;{%endraw%} ``` **Use this rule by referencing it:** @@ -1209,12 +1209,12 @@ by the rule {% rule java/codestyle/ControlStatementBraces %}. **Example(s):** ``` java -if (foo) // not recommended +{%raw%}if (foo) // not recommended x++; if (foo) { // preferred approach x++; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1245,7 +1245,7 @@ Developers Perceive Them](https://doi.org/10.1007/s10664-014-9350-8). **Example(s):** ``` java -public class LinguisticNaming { +{%raw%}public class LinguisticNaming { int isValid; // the field name indicates a boolean, but it is an int. boolean isTrue; // correct type of the field @@ -1281,7 +1281,7 @@ public class LinguisticNaming { void grapeToWine() { // nothing to return? } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1350,9 +1350,9 @@ The Local Home interface of a Session EJB should be suffixed by 'LocalHome'. **Example(s):** ``` java -public interface MyBeautifulLocalHome extends javax.ejb.EJBLocalHome {} // proper name +{%raw%}public interface MyBeautifulLocalHome extends javax.ejb.EJBLocalHome {} // proper name -public interface MissingProperSuffix extends javax.ejb.EJBLocalHome {} // non-standard name +public interface MissingProperSuffix extends javax.ejb.EJBLocalHome {} // non-standard name{%endraw%} ``` **Use this rule by referencing it:** @@ -1386,9 +1386,9 @@ The Local Interface of a Session EJB should be suffixed by 'Local'. **Example(s):** ``` java -public interface MyLocal extends javax.ejb.EJBLocalObject {} // proper name +{%raw%}public interface MyLocal extends javax.ejb.EJBLocalObject {} // proper name -public interface MissingProperSuffix extends javax.ejb.EJBLocalObject {} // non-standard name +public interface MissingProperSuffix extends javax.ejb.EJBLocalObject {} // non-standard name{%endraw%} ``` **Use this rule by referencing it:** @@ -1409,12 +1409,12 @@ A local variable assigned only once can be declared final. **Example(s):** ``` java -public class Bar { +{%raw%}public class Bar { public void foo () { String txtA = "a"; // if txtA will not be assigned again it is better to do this: final String txtB = "b"; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1455,7 +1455,7 @@ By default this rule uses the standard Java naming convention (Camel case). **Example(s):** ``` java -class Foo { +{%raw%}class Foo { void bar() { int localVariable = 1; // This is in camel case, so it's ok int local_variable = 1; // This will be reported unless you change the regex @@ -1469,7 +1469,7 @@ class Foo { } } - } + }{%endraw%} ``` **This rule has the following properties:** @@ -1512,7 +1512,7 @@ Fields, formal arguments, or local variable names that are too long can make the **Example(s):** ``` java -public class Something { +{%raw%}public class Something { int reallyLongIntName = -3; // VIOLATION - Field public static void main( String argumentsList[] ) { // VIOLATION - Formal int otherReallyLongName = -5; // VIOLATION - Local @@ -1520,7 +1520,7 @@ public class Something { interestingIntIndex < 10; interestingIntIndex ++ ) { } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1571,9 +1571,9 @@ The EJB Specification states that any MessageDrivenBean or SessionBean should be **Example(s):** ``` java -public class SomeBean implements SessionBean{} // proper name +{%raw%}public class SomeBean implements SessionBean{} // proper name -public class MissingTheProperSuffix implements SessionBean {} // non-standard name +public class MissingTheProperSuffix implements SessionBean {} // non-standard name{%endraw%} ``` **Use this rule by referencing it:** @@ -1594,13 +1594,13 @@ A method argument that is never re-assigned within the method can be declared fi **Example(s):** ``` java -public void foo1 (String param) { // do stuff with param never assigning it +{%raw%}public void foo1 (String param) { // do stuff with param never assigning it } public void foo2 (final String param) { // better, do stuff with param never assigning it -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1626,10 +1626,10 @@ By default this rule uses the standard Java naming convention (Camel case). **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void fooStuff() { } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1685,12 +1685,12 @@ by the more general rule **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private int m_foo; // OK public void bar(String m_baz) { // Bad int m_boz = 42; // Bad } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1714,9 +1714,9 @@ Detects when a class, interface, enum or annotation does not have a package defi **Example(s):** ``` java -// no package declaration +{%raw%}// no package declaration public class ClassInDefaultPackage { -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1737,14 +1737,14 @@ A method should have only one exit point, and that should be the last statement **Example(s):** ``` java -public class OneReturnOnly1 { +{%raw%}public class OneReturnOnly1 { public void foo(int x) { if (x > 0) { return "hey"; // first exit } return "hi"; // second exit } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1768,10 +1768,10 @@ Detects when a package definition contains uppercase characters. **Example(s):** ``` java -package com.MyCompany; // should be lowercase name +{%raw%}package com.MyCompany; // should be lowercase name public class SomeClass { -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1792,7 +1792,7 @@ Checks for variables that are defined before they might be used. A reference is **Example(s):** ``` java -public int getLength(String[] strings) { +{%raw%}public int getLength(String[] strings) { int length = 0; // declared prematurely @@ -1803,7 +1803,7 @@ public int getLength(String[] strings) { } return length; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1840,14 +1840,14 @@ Remote Interface of a Session EJB should not have a suffix. **Example(s):** ``` java -/* Poor Session suffix */ +{%raw%}/* Poor Session suffix */ public interface BadSuffixSession extends javax.ejb.EJBObject {} /* Poor EJB suffix */ public interface BadSuffixEJB extends javax.ejb.EJBObject {} /* Poor Bean suffix */ -public interface BadSuffixBean extends javax.ejb.EJBObject {} +public interface BadSuffixBean extends javax.ejb.EJBObject {}{%endraw%} ``` **Use this rule by referencing it:** @@ -1881,9 +1881,9 @@ A Remote Home interface type of a Session EJB should be suffixed by 'Home'. **Example(s):** ``` java -public interface MyBeautifulHome extends javax.ejb.EJBHome {} // proper name +{%raw%}public interface MyBeautifulHome extends javax.ejb.EJBHome {} // proper name -public interface MissingProperSuffix extends javax.ejb.EJBHome {} // non-standard name +public interface MissingProperSuffix extends javax.ejb.EJBHome {} // non-standard name{%endraw%} ``` **Use this rule by referencing it:** @@ -1907,8 +1907,8 @@ Short Classnames with fewer than e.g. five characters are not recommended. **Example(s):** ``` java -public class Foo { -} +{%raw%}public class Foo { +}{%endraw%} ``` **This rule has the following properties:** @@ -1947,10 +1947,10 @@ Method names that are very short are not helpful to the reader. **Example(s):** ``` java -public class ShortMethod { +{%raw%}public class ShortMethod { public void a( int i ) { // Violation } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1997,7 +1997,7 @@ Fields, local variables, or parameter names that are very short are not helpful **Example(s):** ``` java -public class Something { +{%raw%}public class Something { private int q = 15; // field - too short public static void main( String as[] ) { // formal arg - too short int r = 20 + q; // local var - too short @@ -2008,7 +2008,7 @@ public class Something { r += q; } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -2056,12 +2056,12 @@ by the more general rule {% rule java/codestyle/FieldNamingConventions %}. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { // this is bad, since someone could accidentally // do PI = 2.71828; which is actually e // final double PI = 3.16; is ok double PI = 3.16; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2088,11 +2088,11 @@ which class a static member comes from (Sun 1.5 Language Guide). **Example(s):** ``` java -import static Lennon; +{%raw%}import static Lennon; import static Ringo; import static George; import static Paul; -import static Yoko; // Too much ! +import static Yoko; // Too much !{%endraw%} ``` **This rule has the following properties:** @@ -2128,7 +2128,7 @@ Avoid the use of value in annotations when it's the only element. **Example(s):** ``` java -@TestClassAnnotation(value = "TEST") +{%raw%}@TestClassAnnotation(value = "TEST") public class Foo { @TestMemberAnnotation(value = "TEST") @@ -2154,7 +2154,7 @@ public class Foo { int x = 42; return; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2177,9 +2177,9 @@ modifier as the declaring class. In an enum type, the default constructor is imp **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public Foo() {} -} +}{%endraw%} ``` **This rule has the following properties:** @@ -2216,12 +2216,12 @@ which is covered by an import statement is redundant. Consider using the non-fu **Example(s):** ``` java -import java.util.List; +{%raw%}import java.util.List; public class Foo { private java.util.List list1; // Unnecessary FQN private List list2; // More appropriate given import of 'java.util.List' -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2242,12 +2242,12 @@ Avoid the creation of unnecessary local variables **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public int foo() { int x = doSomething(); return x; // instead, just 'return doSomething();' } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -2287,7 +2287,7 @@ For historical reasons, modifiers which are implied by the context are accepted **Example(s):** ``` java -public @interface Annotation { +{%raw%}public @interface Annotation { public abstract void bar(); // both abstract and public are ignored by the compiler public static final int X = 0; // public, static, and final all ignored public static class Bar {} // public, static ignored @@ -2304,7 +2304,7 @@ public class Bar { public static enum FoorBar { // static ignored FOO; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2325,12 +2325,12 @@ Avoid the use of unnecessary return statements. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar() { int x = 42; return; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2367,8 +2367,8 @@ which makes the code also more readable. **Example(s):** ``` java -List<String> strings = new ArrayList<String>(); // unnecessary duplication of type parameters -List<String> stringsWithDiamond = new ArrayList<>(); // using the diamond operator is more concise +{%raw%}List<String> strings = new ArrayList<String>(); // unnecessary duplication of type parameters +List<String> stringsWithDiamond = new ArrayList<>(); // using the diamond operator is more concise{%endraw%} ``` **Use this rule by referencing it:** @@ -2445,7 +2445,7 @@ Useless parentheses should be removed. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private int _bar1; private Integer _bar2; @@ -2454,7 +2454,7 @@ public class Foo { _bar1 = Integer.valueOf((n)); // here _bar2 = (n); // and here } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2483,7 +2483,7 @@ Reports qualified this usages in the same class. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { final Foo otherFoo = Foo.this; // use "this" directly public void doSomething() { @@ -2506,7 +2506,7 @@ public class Foo { private class Foo2 { final Foo2 myFoo2 = Foo2.this; // Use "this" direclty } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2535,8 +2535,8 @@ E.g. `int[] x = new int[] { 1, 2, 3 };` can be written as `int[] x = { 1, 2, 3 } **Example(s):** ``` java -Foo[] x = new Foo[] { ... }; // Overly verbose -Foo[] x = { ... }; //Equivalent to above line +{%raw%}Foo[] x = new Foo[] { ... }; // Overly verbose +Foo[] x = { ... }; //Equivalent to above line{%endraw%} ``` **Use this rule by referencing it:** @@ -2588,9 +2588,9 @@ that are misplaced (not making groups of 3 digits) are reported. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private int num = 1000000; // should be 1_000_000 -} +}{%endraw%} ``` **This rule has the following properties:** @@ -2635,11 +2635,11 @@ by the more general rules {% rule java/codestyle/FieldNamingConventions %}, **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public static final int MY_NUM = 0; public String myTest = ""; DataModule dmTest = new DataModule(); -} +}{%endraw%} ``` **This rule has the following properties:** @@ -2707,12 +2707,12 @@ by the rule {% rule java/codestyle/ControlStatementBraces %}. **Example(s):** ``` java -while (true) // not recommended +{%raw%}while (true) // not recommended x++; while (true) { // preferred approach x++; -} +}{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/java/design.md b/docs/pages/pmd/rules/java/design.md index ca13441730..4d442590f2 100644 --- a/docs/pages/pmd/rules/java/design.md +++ b/docs/pages/pmd/rules/java/design.md @@ -30,10 +30,10 @@ protected constructor in order to prevent instantiation than make the class misl **Example(s):** ``` java -public abstract class Example { +{%raw%}public abstract class Example { String field; int otherField; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -60,7 +60,7 @@ Avoid catching generic exceptions such as NullPointerException, RuntimeException **Example(s):** ``` java -package com.igate.primitive; +{%raw%}package com.igate.primitive; public class PrimitiveType { @@ -75,7 +75,7 @@ public class PrimitiveType { e.printStackTrace(); } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -96,7 +96,7 @@ Avoid creating deeply nested if-then statements since they are harder to read an **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar(int x, int y, int z) { if (x>y) { if (y>z) { @@ -106,7 +106,7 @@ public class Foo { } } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -148,13 +148,13 @@ Catch blocks that merely rethrow a caught exception only add to code size and ru **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { try { // do something } catch (SomeException se) { throw se; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -187,14 +187,14 @@ code size and runtime complexity. **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { try { // do something } catch (SomeException se) { // harmless comment throw new SomeException(se); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -244,11 +244,11 @@ public class Foo { **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar() { throw new NullPointerException(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -282,11 +282,11 @@ or **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar() throws Exception { throw new Exception(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -315,8 +315,8 @@ exceptional cases with a `@throws` Javadoc tag, which allows being more descript **Example(s):** ``` java -public void foo() throws RuntimeException { -} +{%raw%}public void foo() throws RuntimeException { +}{%endraw%} ``` **Use this rule by referencing it:** @@ -345,9 +345,9 @@ TypeDeclaration[count(../TypeDeclaration) = 1]/ClassOrInterfaceDeclaration **Example(s):** ``` java -public class Foo { //Should be final +{%raw%}public class Foo { //Should be final private Foo() { } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -376,7 +376,7 @@ Sometimes two consecutive 'if' statements can be consolidated by separating thei **Example(s):** ``` java -void bar() { +{%raw%}void bar() { if (x) { // original implementation if (y) { // do stuff @@ -388,7 +388,7 @@ void bar() { if (x && y) { // optimized implementation // do stuff } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -410,7 +410,7 @@ A number higher than the specified threshold can indicate a high degree of coupl **Example(s):** ``` java -import com.Blah; +{%raw%}import com.Blah; import org.Bar; import org.Bardo; @@ -425,7 +425,7 @@ public class Foo { ObjectZ var93; return something; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -475,7 +475,7 @@ into subcomponents. **Example(s):** ``` java -class Foo { +{%raw%}class Foo { void baseCyclo() { // Cyclo = 1 highCyclo(); } @@ -498,7 +498,7 @@ class Foo { } } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -550,7 +550,7 @@ into the former client classes. **Example(s):** ``` java -public class DataClass { +{%raw%}public class DataClass { public int bar = 0; public int na = 0; @@ -559,7 +559,7 @@ public class DataClass { public void setBee(int n) { bee = n; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -584,7 +584,7 @@ Errors are system exceptions. Do not extend them. **Example(s):** ``` java -public class Foo extends Error { } +{%raw%}public class Foo extends Error { }{%endraw%} ``` **Use this rule by referencing it:** @@ -606,7 +606,7 @@ Either add the necessary validation or use an alternate control structure. **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { try { try { } catch (Exception e) { @@ -616,7 +616,7 @@ public void bar() { } catch (WrapperException e) { // do some more stuff } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -639,7 +639,7 @@ apart the code becomes more manageable and ripe for reuse. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar1() { // 1000 lines of code } @@ -653,7 +653,7 @@ public class Foo { public void barN() { // 1000 lines of code } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -693,12 +693,12 @@ user-specified threshold. **Example(s):** ``` java -import blah.blah.Baz; +{%raw%}import blah.blah.Baz; import blah.blah.Bif; // 18 others from the same package elided public class Foo { public void doWork() {} -} +}{%endraw%} ``` **This rule has the following properties:** @@ -739,11 +739,11 @@ Try to reduce the method length by creating helper methods and removing any copy **Example(s):** ``` java -public void doSomething() { +{%raw%}public void doSomething() { System.out.println("Hello world!"); System.out.println("Hello world!"); // 98 copies omitted for brevity. -} +}{%endraw%} ``` **This rule has the following properties:** @@ -782,7 +782,7 @@ same datatype. These situations usually denote the need for new objects to wrap **Example(s):** ``` java -public void addPerson( // too many arguments liable to be mixed up +{%raw%}public void addPerson( // too many arguments liable to be mixed up int birthYear, int birthMonth, int birthDate, int height, int weight, int ssn) { . . . . @@ -792,7 +792,7 @@ public void addPerson( // preferred approach Date birthdate, BodyMeasurements measurements, int ssn) { . . . . -} +}{%endraw%} ``` **This rule has the following properties:** @@ -833,7 +833,7 @@ developed easily. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public String value; public Bar something; public Variable var; @@ -843,7 +843,7 @@ public class Foo { public void doMoreWork() {} public void doWorkAgain() {} // [... more more public methods ...] -} +}{%endraw%} ``` **This rule has the following properties:** @@ -888,9 +888,9 @@ in each object at runtime. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public final int BAR = 42; // this could be static and save some space -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -936,7 +936,7 @@ of the field or by a constructor. This helps in converting existing classes to **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private int x; // could be final public Foo() { x = 7; @@ -944,7 +944,7 @@ public class Foo { public void foo() { int a = x + 2; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -988,7 +988,7 @@ See also the references: **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { /** * This example will result in two violations. */ @@ -1008,7 +1008,7 @@ public class Foo { // this method call is ok, because we have create the new instance of D locally. d.doSomethingElse(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1032,7 +1032,7 @@ Use opposite operator instead of negating the whole expression with a logic comp **Example(s):** ``` java -public boolean bar(int a, int b) { +{%raw%}public boolean bar(int a, int b) { if (!(a == b)) { // use != return false; @@ -1043,7 +1043,7 @@ public boolean bar(int a, int b) { } return true; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1065,13 +1065,13 @@ except when using one of the configured allowed classes. **Example(s):** ``` java -package some.package; +{%raw%}package some.package; import some.other.package.subpackage.subsubpackage.DontUseThisClass; public class Bar { DontUseThisClass boo = new DontUseThisClass(); -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1118,7 +1118,7 @@ by the rule {% rule java/design/CyclomaticComplexity %}. **Example(s):** ``` java -public class Foo { // This has a Cyclomatic Complexity = 9 +{%raw%}public class Foo { // This has a Cyclomatic Complexity = 9 1 public void example() { 2 if (a == b) { 3 if (a1 == b1) { @@ -1153,7 +1153,7 @@ public class Foo { // This has a Cyclomatic Complexity = 9 } } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1200,7 +1200,7 @@ by the rule {% rule java/design/NcssCount %}. **Example(s):** ``` java -public class Foo extends Bar { +{%raw%}public class Foo extends Bar { public Foo() { super(); @@ -1211,7 +1211,7 @@ public class Foo extends Bar { //this constructor only has 1 NCSS lines super.foo(); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1252,7 +1252,7 @@ the [NCSS metric](pmd_java_metrics_index.html#non-commenting-source-statements-n **Example(s):** ``` java -import java.util.Collections; // +0 +{%raw%}import java.util.Collections; // +0 import java.io.IOException; // +0 class Foo { // +1, total Ncss = 12 @@ -1276,7 +1276,7 @@ class Foo { // +1, total Ncss = 12 assert false; // +1 } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1323,7 +1323,7 @@ by the rule {% rule java/design/NcssCount %}. **Example(s):** ``` java -public class Foo extends Bar { +{%raw%}public class Foo extends Bar { public int methd() { super.methd(); @@ -1335,7 +1335,7 @@ public class Foo extends Bar { //this method only has 1 NCSS lines return 1; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1380,7 +1380,7 @@ by the rule {% rule java/design/NcssCount %}. **Example(s):** ``` java -public class Foo extends Bar { +{%raw%}public class Foo extends Bar { public Foo() { //this class only has 6 NCSS lines super(); @@ -1391,7 +1391,7 @@ public class Foo extends Bar { super.foo(); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1436,7 +1436,7 @@ complexity and increase readability. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public static void bar() { // Ncss = 252: reported! boolean a, b = true; try { // 2 * 2 + 2 = 6 @@ -1469,7 +1469,7 @@ public class Foo { List buz = new ArrayList(); } while (a && j++ < 30); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1509,8 +1509,8 @@ derived from RuntimeException or a checked exception. **Example(s):** ``` java -public void foo() throws Exception { -} +{%raw%}public void foo() throws Exception { +}{%endraw%} ``` **This rule has the following properties:** @@ -1559,7 +1559,7 @@ or **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public boolean test() { return condition ? true : something(); // can be as simple as return condition || something(); } @@ -1575,7 +1575,7 @@ public class Foo { public void test4() { final boolean otherValue = condition ? something() : false; // can be as simple as condition && something(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1622,12 +1622,12 @@ PrimaryExpression/PrimarySuffix/Arguments/ArgumentList **Example(s):** ``` java -public class SimpleTest extends TestCase { +{%raw%}public class SimpleTest extends TestCase { public void testX() { assertTrue("not empty", !r.isEmpty()); // replace with assertFalse("not empty", r.isEmpty()) assertFalse(!r.isEmpty()); // replace with assertTrue(r.isEmpty()) } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1652,13 +1652,13 @@ Avoid unnecessary comparisons in boolean expressions, they serve no purpose and **Example(s):** ``` java -public class Bar { +{%raw%}public class Bar { // can be simplified to // bar = isFoo(); private boolean bar = (isFoo() == true); public isFoo() { return false;} -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1680,7 +1680,7 @@ the conditional test can be returned instead. **Example(s):** ``` java -public boolean isBarEqualTo(int x) { +{%raw%}public boolean isBarEqualTo(int x) { if (bar == x) { // this bit of code... return true; } else { @@ -1690,7 +1690,7 @@ public boolean isBarEqualTo(int x) { public boolean isBarEqualTo(int x) { return bar == x; // can be replaced with this -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1737,13 +1737,13 @@ InstanceOfExpression **Example(s):** ``` java -class Foo { +{%raw%}class Foo { void bar(Object x) { if (x != null && x instanceof Bar) { // just drop the "x != null" check } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1766,13 +1766,13 @@ within those methods. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private int x; // no reason to exist at the Foo instance level public void foo(int y) { x = y + 5; return x; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1820,7 +1820,7 @@ by the rule {% rule java/design/CyclomaticComplexity %}. **Example(s):** ``` java -public class Foo { // This has a Cyclomatic Complexity = 12 +{%raw%}public class Foo { // This has a Cyclomatic Complexity = 12 1 public void example() { 2 if (a == b || (c == d && e == f)) { // Only one 3 if (a1 == b1) { @@ -1855,7 +1855,7 @@ public class Foo { // This has a Cyclomatic Complexity = 12 } } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1897,7 +1897,7 @@ on the switch variable. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar(int x) { switch (x) { case 1: { @@ -1909,7 +1909,7 @@ public class Foo { } } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1949,7 +1949,7 @@ city/state/zip fields could park them within a single Address field. **Example(s):** ``` java -public class Person { // too many separate fields +{%raw%}public class Person { // too many separate fields int birthYear; int birthMonth; int birthDate; @@ -1960,7 +1960,7 @@ public class Person { // too many separate fields public class Person { // this is more manageable Date birthDate; BodyMeasurements measurements; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -2041,7 +2041,7 @@ The overriding method merely calls the same method defined in a superclass. **Example(s):** ``` java -public void foo(String bar) { +{%raw%}public void foo(String bar) { super.foo(bar); // why bother overriding? } @@ -2052,7 +2052,7 @@ public String foo() { @Id public Long getId() { return super.getId(); // OK if 'ignoreAnnotations' is false, which is the default behavior -} +}{%endraw%} ``` **This rule has the following properties:** @@ -2098,7 +2098,7 @@ your API. **Example(s):** ``` java -public class MyClass { +{%raw%}public class MyClass { public void connect(String username, String pssd, String databaseName, @@ -2110,7 +2110,7 @@ public class MyClass { { } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2135,10 +2135,10 @@ remember to add a private constructor to prevent instantiation. **Example(s):** ``` java -public class MaybeAUtility { +{%raw%}public class MaybeAUtility { public static void foo() {} public static void bar() {} -} +}{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/java/documentation.md b/docs/pages/pmd/rules/java/documentation.md index 0c9a065c3c..2abf433d4f 100644 --- a/docs/pages/pmd/rules/java/documentation.md +++ b/docs/pages/pmd/rules/java/documentation.md @@ -22,7 +22,7 @@ A rule for the politically correct... we don't want to offend anyone. **Example(s):** ``` java -//OMG, this is horrible, Bob is an idiot !!! +{%raw%}//OMG, this is horrible, Bob is an idiot !!!{%endraw%} ``` **This rule has the following properties:** @@ -60,11 +60,11 @@ Denotes whether comments are required (or unwanted) for specific language elemen **Example(s):** ``` java -/** +{%raw%}/** * * * @author Jon Doe -*/ +*/{%endraw%} ``` **This rule has the following properties:** @@ -116,7 +116,7 @@ Determines whether the dimensions of non-header comments found are within the sp **Example(s):** ``` java -/** +{%raw%}/** * * too many lines! * @@ -131,7 +131,7 @@ Determines whether the dimensions of non-header comments found are within the sp * * * -*/ +*/{%endraw%} ``` **This rule has the following properties:** @@ -177,9 +177,9 @@ and unintentional empty constructors. **Example(s):** ``` java -public Foo() { +{%raw%}public Foo() { // This constructor is intentionally empty. Nothing special is needed here. -} +}{%endraw%} ``` **This rule has the following properties:** @@ -221,8 +221,8 @@ empty methods. **Example(s):** ``` java -public void doSomething() { -} +{%raw%}public void doSomething() { +}{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index a85d3f1ed9..ba4394cd45 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -22,12 +22,12 @@ Avoid assignments in operands; this can make code more complicated and harder to **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { int x = 2; if ((x = getX()) == 3) { System.out.println("3!"); } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -69,12 +69,12 @@ Identifies a possible unsafe usage of a static field. **Example(s):** ``` java -public class StaticField { +{%raw%}public class StaticField { static int x; public FinalFields(int y) { x = y; // unsafe } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -121,7 +121,7 @@ and **Example(s):** ``` java -import java.lang.reflect.AccessibleObject; +{%raw%}import java.lang.reflect.AccessibleObject; import java.lang.reflect.Method; import java.security.PrivilegedAction; @@ -147,7 +147,7 @@ public class Violation { // Possible call to forbidden PrivilegedAction PrivilegedAction priv = (PrivilegedAction) new Object(); priv.run(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -171,11 +171,11 @@ Use of the term 'assert' will conflict with newer versions of Java since it is a **Example(s):** ``` java -public class A { +{%raw%}public class A { public class Foo { String assert = "foo"; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -197,7 +197,7 @@ Ensure that the usage is not a bug, or consider using another approach. **Example(s):** ``` java -// unusual use of branching statement in a loop +{%raw%}// unusual use of branching statement in a loop for (int i = 0; i < 10; i++) { if (i*i <= 25) { continue; @@ -210,7 +210,7 @@ for (int i = 0; i < 10; i++) { if (i*i > 25) { break; } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -253,10 +253,10 @@ Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **Example(s):** ``` java -void foo() { +{%raw%}void foo() { Bar b = new Bar(); b.finalize(); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -282,14 +282,14 @@ original error, causing other, more subtle problems later on. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar() { try { // do something } catch (NullPointerException npe) { } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -311,13 +311,13 @@ OutOfMemoryError that should be exposed and managed separately. **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { try { // do something } catch (Throwable th) { // should not catch Throwable th.printStackTrace(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -367,11 +367,11 @@ exactly equal to 0.1, as one would expect. Therefore, it is generally recommend **Example(s):** ``` java -BigDecimal bd = new BigDecimal(1.123); // loss of precision, this would trigger the rule +{%raw%}BigDecimal bd = new BigDecimal(1.123); // loss of precision, this would trigger the rule BigDecimal bd = new BigDecimal("1.123"); // preferred approach -BigDecimal bd = new BigDecimal(12); // preferred approach, ok for integer values +BigDecimal bd = new BigDecimal(12); // preferred approach, ok for integer values{%endraw%} ``` **Use this rule by referencing it:** @@ -392,13 +392,13 @@ Code containing duplicate String literals can usually be improved by declaring t **Example(s):** ``` java -private void bar() { +{%raw%}private void bar() { buz("Howdy"); buz("Howdy"); buz("Howdy"); buz("Howdy"); } -private void buz(String x) {} +private void buz(String x) {}{%endraw%} ``` **This rule has the following properties:** @@ -446,11 +446,11 @@ Use of the term 'enum' will conflict with newer versions of Java since it is a r **Example(s):** ``` java -public class A { +{%raw%}public class A { public class Foo { String enum = "foo"; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -473,12 +473,12 @@ Smalltalk often prefer this approach as the methods denote accessor methods. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { Object bar; // bar is data or an action or both? void bar() { } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -500,9 +500,9 @@ This probably means that type and/or field names should be chosen more carefully **Example(s):** ``` java -public class Foo extends Bar { +{%raw%}public class Foo extends Bar { int foo; // There is probably a better name that can be used -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -531,7 +531,7 @@ Each caught exception type should be handled in its own catch clause. **Example(s):** ``` java -try { // Avoid this +{%raw%}try { // Avoid this // do something } catch (Exception ee) { if (ee instanceof IOException) { @@ -543,7 +543,7 @@ try { // Prefer this: // do something } catch (IOException ee) { cleanup(); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -572,7 +572,7 @@ More exceptions can be defined with the property "ignoreMagicNumbers". **Example(s):** ``` java -private static final int MAX_NUMBER_OF_REQUESTS = 10; +{%raw%}private static final int MAX_NUMBER_OF_REQUESTS = 10; public void checkRequests() { @@ -589,7 +589,7 @@ public void checkRequests() { if (aDouble > 0.0) {} // magic number 0.0 if (aDouble >= Double.MIN_VALUE) {} // preferred approach -} +}{%endraw%} ``` **This rule has the following properties:** @@ -640,13 +640,13 @@ only add to code size. Either remove the invocation, or use the return result. **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { try { // do something } catch (SomeException se) { se.getMessage(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -668,7 +668,7 @@ Ensure that the intended usage is not a bug, or consider simplifying the express **Example(s):** ``` java -// These are typo bugs, or at best needlessly complex and confusing: +{%raw%}// These are typo bugs, or at best needlessly complex and confusing: int i = - -1; int j = + - +1; int z = ~~2; @@ -684,7 +684,7 @@ boolean c = false; // And these just make your brain hurt: int i = ~-2; -int j = -~7; +int j = -~7;{%endraw%} ``` **Use this rule by referencing it:** @@ -706,9 +706,9 @@ interpreted as an octal value. **Example(s):** ``` java -int i = 012; // set i with 10 not 12 +{%raw%}int i = 012; // set i with 10 not 12 int j = 010; // set j with 8 not 10 -k = i * j; // set k with 80 not 120 +k = i * j; // set k with 80 not 120{%endraw%} ``` **This rule has the following properties:** @@ -750,7 +750,7 @@ precision when comparing floating point numbers these are likely to cause logic **Example(s):** ``` java -boolean x = (y == Double.NaN); +{%raw%}boolean x = (y == Double.NaN);{%endraw%} ``` **Use this rule by referencing it:** @@ -774,7 +774,7 @@ naming conventions, i.e. for a variable named foo, getFoo() and setFoo() accesso **Example(s):** ``` java -private transient int someFoo; // good, it's transient +{%raw%}private transient int someFoo; // good, it's transient private static int otherFoo; // also OK private int moreFoo; // OK, has proper accessors, see below private int badFoo; // bad, should be marked transient @@ -785,7 +785,7 @@ private void setMoreFoo(int moreFoo){ private int getMoreFoo(){ return this.moreFoo; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -824,14 +824,14 @@ It is likely that you used || instead of && or vice versa. **Example(s):** ``` java -public String bar(String string) { +{%raw%}public String bar(String string) { // should be && if (string!=null || !string.equals("")) return string; // should be || if (string==null && string.equals("")) return string; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -871,12 +871,12 @@ Super should be called at the start of the method **Example(s):** ``` java -public class DummyActivity extends Activity { +{%raw%}public class DummyActivity extends Activity { public void onCreate(Bundle bundle) { // missing call to super.onCreate(bundle) foo(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -914,12 +914,12 @@ Super should be called at the end of the method **Example(s):** ``` java -public class DummyActivity extends Activity { +{%raw%}public class DummyActivity extends Activity { public void onPause() { foo(); // missing call to super.onPause() } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -940,7 +940,7 @@ The skip() method may skip a smaller number of bytes than requested. Check the r **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private FileInputStream _s = new FileInputStream("file"); @@ -955,7 +955,7 @@ public class Foo { throw new EOFException(); n -= skipped; } - } + }{%endraw%} ``` **Use this rule by referencing it:** @@ -989,7 +989,7 @@ count(PrimarySuffix) = 1 **Example(s):** ``` java -Collection c = new ArrayList(); +{%raw%}Collection c = new ArrayList(); Integer obj = new Integer(1); c.add(obj); @@ -997,7 +997,7 @@ c.add(obj); Integer[] a = (Integer [])c.toArray(); // this is fine and will not trigger the rule -Integer[] b = (Integer [])c.toArray(new Integer[c.size()]); +Integer[] b = (Integer [])c.toArray(new Integer[c.size()]);{%endraw%} ``` **Use this rule by referencing it:** @@ -1024,7 +1024,7 @@ Object.clone (which is protected) with a public method." **Example(s):** ``` java -public class Foo implements Cloneable { +{%raw%}public class Foo implements Cloneable { @Override protected Object clone() throws CloneNotSupportedException { // Violation, must be public } @@ -1039,7 +1039,7 @@ public class Foo implements Cloneable { public class Foo implements Cloneable { @Override public Object clone() // Ok -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1063,11 +1063,11 @@ The rule can also detect, if the class implements or extends a Cloneable class. **Example(s):** ``` java -public class MyClass { +{%raw%}public class MyClass { public Object clone() throws CloneNotSupportedException { return foo; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1101,7 +1101,7 @@ and not (ResultType//ClassOrInterfaceType/@Image = ancestor::ClassOrInterfaceDec **Example(s):** ``` java -public class Foo implements Cloneable { +{%raw%}public class Foo implements Cloneable { @Override protected Object clone() { // Violation, Object must be Foo } @@ -1111,7 +1111,7 @@ public class Foo implements Cloneable { @Override public Foo clone() { //Ok } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1144,12 +1144,12 @@ and count(NameList/Name[contains **Example(s):** ``` java -public class MyClass implements Cloneable{ +{%raw%}public class MyClass implements Cloneable{ public Object clone() { // will cause an error MyClass clone = (MyClass)super.clone(); return clone; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1180,7 +1180,7 @@ just remove "AutoCloseable" from the types. **Example(s):** ``` java -public class Bar { +{%raw%}public class Bar { public void withSQL() { Connection c = pool.getConnection(); try { @@ -1203,7 +1203,7 @@ public class Bar { // TODO: close file } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1245,11 +1245,11 @@ Use equals() to compare object references; avoid comparing them with ==. **Example(s):** ``` java -class Foo { +{%raw%}class Foo { boolean bar(String a, String b) { return a == b; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1276,7 +1276,7 @@ private method bar() that calls a public method buz(), this denotes a problem. **Example(s):** ``` java -public class SeniorClass { +{%raw%}public class SeniorClass { public SeniorClass(){ toString(); //may throw NullPointerException if overridden } @@ -1293,7 +1293,7 @@ public class JuniorClass extends SeniorClass { public String toString(){ return name.toUpperCase(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1319,12 +1319,12 @@ From those informations there can be found various problems. **Example(s):** ``` java -public void foo() { +{%raw%}public void foo() { int buz = 5; buz = 6; // redefinition of buz -> dd-anomaly foo(buz); buz = 2; -} // buz is undefined when leaving scope -> du-anomaly +} // buz is undefined when leaving scope -> du-anomaly{%endraw%} ``` **This rule has the following properties:** @@ -1383,7 +1383,7 @@ should be annotated with @Test and @Ignore. **Example(s):** ``` java -public class MyTest { +{%raw%}public class MyTest { @Test public void someTest() { } @@ -1392,7 +1392,7 @@ public class MyTest { public void someOtherTest () { } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1427,7 +1427,7 @@ starts-with(@Image,'Runtime.getRuntime') and **Example(s):** ``` java -public class GCCall { +{%raw%}public class GCCall { public GCCall() { // Explicit gc call ! System.gc(); @@ -1447,7 +1447,7 @@ public class GCCall { // Explicit gc call ! Runtime.getRuntime().gc(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1476,12 +1476,12 @@ application server should stop the JVM. This rule also checks for the equivalent **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { System.exit(0); // never call this when running in an application server! } public void foo() { Runtime.getRuntime().exit(0); // never stop the JVM manually, the container will do this. -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1506,7 +1506,7 @@ Extend Exception or RuntimeException instead of Throwable. **Example(s):** ``` java -public class Foo extends Throwable { } +{%raw%}public class Foo extends Throwable { }{%endraw%} ``` **Use this rule by referencing it:** @@ -1530,13 +1530,13 @@ Use Environment.getExternalStorageDirectory() instead of "/sdcard" **Example(s):** ``` java -public class MyActivity extends Activity { +{%raw%}public class MyActivity extends Activity { protected void foo() { String storageLocation = "/sdcard/mypackage"; // hard-coded, poor approach storageLocation = Environment.getExternalStorageDirectory() + "/mypackage"; // preferred approach } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1562,7 +1562,7 @@ Note: This is a PMD implementation of the Lint4j rule "A throw in a finally **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar() { try { // Here do some stuff @@ -1573,7 +1573,7 @@ public class Foo { throw new Exception(); } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1594,8 +1594,8 @@ Avoid importing anything from the 'sun.*' packages. These packages are not port **Example(s):** ``` java -import sun.misc.foo; -public class Foo {} +{%raw%}import sun.misc.foo; +public class Foo {}{%endraw%} ``` **Use this rule by referencing it:** @@ -1622,7 +1622,7 @@ performance need (space or time). **Example(s):** ``` java -public class Count { +{%raw%}public class Count { public static void main(String[] args) { final int START = 2000000000; int count = 0; @@ -1632,7 +1632,7 @@ public class Count { System.out.println(count); //The termination test misbehaves due to floating point granularity. } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1663,13 +1663,13 @@ or reported. **Example(s):** ``` java -public void doSomething() { +{%raw%}public void doSomething() { try { FileInputStream fis = new FileInputStream("/tmp/bugger"); } catch (IOException ioe) { // not good } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -1711,9 +1711,9 @@ Empty finalize methods serve no purpose and should be removed. Note that Oracle **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { protected void finalize() {} -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1737,7 +1737,7 @@ Empty finally blocks serve no purpose and should be removed. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar() { try { int x=2; @@ -1745,7 +1745,7 @@ public class Foo { // empty! } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1770,13 +1770,13 @@ Empty If Statement finds instances where a condition is checked but nothing is d **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar(int x) { if (x == 0) { // empty! } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1800,13 +1800,13 @@ Empty initializers serve no purpose and should be removed. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { static {} // Why ? {} // Again, why ? -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1830,7 +1830,7 @@ Empty block statements serve no purpose and should be removed. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private int _bar; @@ -1839,7 +1839,7 @@ public class Foo { {} // But remove this. } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1874,12 +1874,12 @@ and should be removed. **Example(s):** ``` java -public void doit() { +{%raw%}public void doit() { // this is probably not what you meant to do ; // the extra semicolon here this is not necessary System.out.println("look at the extra semicolon");; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1903,13 +1903,13 @@ Empty switch statements serve no purpose and should be removed. **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { int x = 2; switch (x) { // once there was code here // but it's been commented out or something } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1933,13 +1933,13 @@ Empty synchronized blocks serve no purpose and should be removed. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar() { synchronized (this) { // empty! } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1963,14 +1963,14 @@ Avoid empty try blocks - what's the point? **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar() { try { } catch (Exception e) { e.printStackTrace(); } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1996,11 +1996,11 @@ a while loop that does a lot in the exit expression, rewrite it to make it clear **Example(s):** ``` java -void bar(int a, int b) { +{%raw%}void bar(int a, int b) { while (a == b) { // empty! } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2036,7 +2036,7 @@ Tests for null should not use the equals() method. The '==' operator should be u **Example(s):** ``` java -String x = "foo"; +{%raw%}String x = "foo"; if (x.equals(null)) { // bad form doSomething(); @@ -2044,7 +2044,7 @@ if (x.equals(null)) { // bad form if (x == null) { // preferred doSomething(); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2081,10 +2081,10 @@ If the finalize() is implemented, its last action should be to call super.finali **Example(s):** ``` java -protected void finalize() { +{%raw%}protected void finalize() { something(); // neglected to call super.finalize() -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2114,9 +2114,9 @@ If the finalize() is implemented, it should do something besides just calling su **Example(s):** ``` java -protected void finalize() { +{%raw%}protected void finalize() { super.finalize(); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2144,11 +2144,11 @@ Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { // this is confusing and probably a bug protected void finalize(int a) { } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2177,9 +2177,9 @@ Note that Oracle has declared Object.finalize() as deprecated since JDK 9. **Example(s):** ``` java -public void finalize() { +{%raw%}public void finalize() { // do something -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2200,12 +2200,12 @@ Avoid idempotent operations - they have no effect. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void bar() { int x = 2; x = x; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2226,12 +2226,12 @@ There is no need to import a type that lives in the same package. **Example(s):** ``` java -package foo; +{%raw%}package foo; import foo.Buz; // no need for this import foo.*; // or this -public class Bar{} +public class Bar{}{%endraw%} ``` **Use this rule by referencing it:** @@ -2260,11 +2260,11 @@ Avoid instantiating an object just to call getClass() on it; use the .class publ **Example(s):** ``` java -// replace this +{%raw%}// replace this Class c = new String().getClass(); // with this: -Class c = String.class; +Class c = String.class;{%endraw%} ``` **Use this rule by referencing it:** @@ -2285,9 +2285,9 @@ Check for messages in slf4j loggers with non matching number of arguments and pl **Example(s):** ``` java -LOGGER.error("forget the arg {}"); +{%raw%}LOGGER.error("forget the arg {}"); LOGGER.error("too many args {}", "arg1", "arg2"); -LOGGER.error("param {}", "arg1", new IllegalStateException("arg")); //The exception is shown separately, so is correct. +LOGGER.error("param {}", "arg1", new IllegalStateException("arg")); //The exception is shown separately, so is correct.{%endraw%} ``` **Use this rule by referencing it:** @@ -2316,7 +2316,7 @@ Avoid jumbled loop incrementers - its usually a mistake, and is confusing even i **Example(s):** ``` java -public class JumbledIncrementerRule1 { +{%raw%}public class JumbledIncrementerRule1 { public void foo() { for (int i = 0; i < 10; i++) { // only references 'i' for (int k = 0; k < 20; i++) { // references both 'i' and 'k' @@ -2324,7 +2324,7 @@ public class JumbledIncrementerRule1 { } } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2360,12 +2360,12 @@ Some JUnit framework methods are easy to misspell. **Example(s):** ``` java -import junit.framework.*; +{%raw%}import junit.framework.*; public class Foo extends TestCase { public void setup() {} // oops, should be setUp public void TearDown() {} // oops, should be tearDown -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2399,12 +2399,12 @@ The suite() method in a JUnit test needs to be both public and static. **Example(s):** ``` java -import junit.framework.*; +{%raw%}import junit.framework.*; public class Foo extends TestCase { public void suite() {} // oops, should be static private static void suite() {} // oops, should be public -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2438,11 +2438,11 @@ The rule is replaced by {% rule java/errorprone/ProperLogger %}. **Example(s):** ``` java -public class Foo{ +{%raw%}public class Foo{ Logger log = Logger.getLogger(Foo.class.getName()); // not recommended static final Logger log = Logger.getLogger(Foo.class.getName()); // preferred approach -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2463,12 +2463,12 @@ Non-constructor methods should not have the same name as the enclosing class. **Example(s):** ``` java -public class MyClass { +{%raw%}public class MyClass { public MyClass() {} // this is OK because it is a constructor public void MyClass() {} // this is bad because it is a method -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2509,19 +2509,19 @@ Either the check is useless (the variable will never be "null") or it **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar() { if (a.equals(baz) && a != null) {} } -} +}{%endraw%} ``` ``` java -public class Foo { +{%raw%}public class Foo { void bar() { if (a.equals(baz) || a == null) {} } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2554,7 +2554,7 @@ may indicate problematic behaviour. Empty cases are ignored as these indicate an **Example(s):** ``` java -public void bar(int status) { +{%raw%}public void bar(int status) { switch(status) { case CANCELLED: doCancelled(); @@ -2570,7 +2570,7 @@ public void bar(int status) { doErrorHandling(); break; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2600,11 +2600,11 @@ chain needs an own serialVersionUID field. See also [Should an abstract class ha **Example(s):** ``` java -public class Foo implements java.io.Serializable { +{%raw%}public class Foo implements java.io.Serializable { String name; // Define serialization id to avoid serialization related bugs // i.e., public static final long serialVersionUID = 4328743; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2651,14 +2651,14 @@ A class that has private constructors and does not have any static methods or fi **Example(s):** ``` java -// This class is unusable, since it cannot be +{%raw%}// This class is unusable, since it cannot be // instantiated (private constructor), // and no static method can be called. public class Foo { private Foo() {} void foo() {} -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2679,12 +2679,12 @@ Normally only one logger is used in each class. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { Logger log = Logger.getLogger(Foo.class.getName()); // It is very rare to see two loggers on a class, normally // log information is multiplexed by levels Logger log2= Logger.getLogger(Foo.class.getName()); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2709,7 +2709,7 @@ This legal, but confusing. It is easy to mix up the case labels and the non-case **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar(int a) { switch (a) { case 1: @@ -2721,7 +2721,7 @@ public class Foo { break; } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2747,12 +2747,12 @@ confusing. **Example(s):** ``` java -public class MyClass { +{%raw%}public class MyClass { // this block gets run before any call to a constructor { System.out.println("I am about to construct myself"); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2776,13 +2776,13 @@ NOTE: This sort of assignment may used in some cases to dereference objects and **Example(s):** ``` java -public void bar() { +{%raw%}public void bar() { Object x = null; // this is OK x = new Object(); // big, complex piece of code here x = null; // this is not required // big, complex piece of code here -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2803,7 +2803,7 @@ Override both public boolean Object.equals(Object other), and public int Object. **Example(s):** ``` java -public class Bar { // poor, missing a hashcode() method +{%raw%}public class Bar { // poor, missing a hashcode() method public boolean equals(Object o) { // do some comparison } @@ -2822,7 +2822,7 @@ public class Foo { // perfect, both methods provided public int hashCode() { // return some hash value } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2854,11 +2854,11 @@ ClassOrInterfaceDeclaration[1]/@Image) **Example(s):** ``` java -class Foo{ +{%raw%}class Foo{ public Object clone(){ return new Foo(); // This is bad } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2908,12 +2908,12 @@ with the restriction that the logger needs to be passed into the constructor. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private static final Log LOG = LogFactory.getLog(Foo.class); // proper way protected Log LOG = LogFactory.getLog(Testclass.class); // wrong approach -} +}{%endraw%} ``` **This rule has the following properties:** @@ -2963,7 +2963,7 @@ and **Example(s):** ``` java -public class Example { +{%raw%}public class Example { // Not a good idea... public int[] badBehavior() { // ... @@ -2975,7 +2975,7 @@ public class Example { //... return new String[0]; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -2999,7 +2999,7 @@ Avoid returning from a finally block, this can discard exceptions. **Example(s):** ``` java -public class Bar { +{%raw%}public class Bar { public String foo() { try { throw new Exception( "My Exception" ); @@ -3009,7 +3009,7 @@ public class Bar { return "A. O. K."; // return not recommended here } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3036,10 +3036,10 @@ formatting is used. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { // Should specify Locale.US (or whatever) private SimpleDateFormat sdf = new SimpleDateFormat("pattern"); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3062,7 +3062,7 @@ for each call and new objects will be created for every invocation. **Example(s):** ``` java -public class Singleton { +{%raw%}public class Singleton { private static Singleton singleton = new Singleton( ); @@ -3076,7 +3076,7 @@ public class Singleton { Singleton singleton = (Singleton) obj; return singleton; //violation } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3099,14 +3099,14 @@ for each call and new objects will be created for every invocation. **Example(s):** ``` java -class Singleton { +{%raw%}class Singleton { private static Singleton instance = null; public static Singleton getInstance() { synchronized(Singleton.class) { return new Singleton(); } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3150,12 +3150,12 @@ behavior especially when instances are distributed by the container on several J **Example(s):** ``` java -public class SomeEJB extends EJBObject implements EJBLocalHome { +{%raw%}public class SomeEJB extends EJBObject implements EJBLocalHome { private static int CountA; // poor, field can be edited private static final int CountB; // preferred, read-only access -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3200,14 +3200,14 @@ Literal **Example(s):** ``` java -// misleading instantiation, these buffers +{%raw%}// misleading instantiation, these buffers // are actually sized to 99 characters long StringBuffer sb1 = new StringBuffer('c'); StringBuilder sb2 = new StringBuilder('c'); // in these forms, just single characters are allocated StringBuffer sb3 = new StringBuffer("c"); -StringBuilder sb4 = new StringBuilder("c"); +StringBuilder sb4 = new StringBuilder("c");{%endraw%} ``` **Use this rule by referencing it:** @@ -3250,7 +3250,7 @@ intention to override the equals(Object) method. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public int equals(Object o) { // oops, this probably was supposed to be boolean equals } @@ -3260,7 +3260,7 @@ public class Foo { public boolean equals(Object o1, Object o2) { // oops, this probably was supposed to be equals(Object) } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3282,10 +3282,10 @@ to override the hashCode() method. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public int hashcode() { // oops, this probably was supposed to be 'hashCode' } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3315,10 +3315,10 @@ the literal character "8". **Example(s):** ``` java -public void foo() { +{%raw%}public void foo() { // interpreted as octal 12, followed by character '8' System.out.println("suspicious: \128"); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3340,14 +3340,14 @@ since most people will assume it is a test case. Test classes have test methods **Example(s):** ``` java -//Consider changing the name of the class if it is not a test +{%raw%}//Consider changing the name of the class if it is not a test //Consider adding test methods if it is a test public class CarTest { public static void main(String[] args) { // do something } // code -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3373,13 +3373,13 @@ Do not use "if" statements whose conditionals are always true or alway **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { public void close() { if (true) { // fixed conditional, not recommended // ... } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3423,11 +3423,11 @@ UnaryExpressionNotPlusMinus[@Image='!'] **Example(s):** ``` java -public class SimpleTest extends TestCase { +{%raw%}public class SimpleTest extends TestCase { public void testX() { assertTrue(true); // serves no real purpose } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3448,9 +3448,9 @@ Using equalsIgnoreCase() is faster than using toUpperCase/toLowerCase().equals() **Example(s):** ``` java -boolean answer1 = buz.toUpperCase().equals("baz"); // should be buz.equalsIgnoreCase("baz") +{%raw%}boolean answer1 = buz.toUpperCase().equals("baz"); // should be buz.equalsIgnoreCase("baz") -boolean answer2 = buz.toUpperCase().equalsIgnoreCase("baz"); // another unnecessary toUpperCase() +boolean answer2 = buz.toUpperCase().equalsIgnoreCase("baz"); // another unnecessary toUpperCase(){%endraw%} ``` **Use this rule by referencing it:** @@ -3472,11 +3472,11 @@ on the wrapper classes instead. **Example(s):** ``` java -public String convert(int x) { +{%raw%}public String convert(int x) { String foo = new Integer(x).toString(); // this wastes an object return Integer.toString(x); // preferred approach -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3506,7 +3506,7 @@ After checking an object reference for null, you should invoke equals() on that **Example(s):** ``` java -public class Test { +{%raw%}public class Test { public String method1() { return "ok";} public String method2() { return null;} @@ -3540,7 +3540,7 @@ public class Test { } } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3570,7 +3570,7 @@ concat(ancestor::ClassOrInterfaceDeclaration/ClassOrInterfaceBody/ClassOrInterfa **Example(s):** ``` java -public class Main { +{%raw%}public class Main { private static final Log _LOG = LogFactory.getLog( Main.class ); void bar() { try { @@ -3580,7 +3580,7 @@ public class Main { _LOG.error( oe.getMessage(), oe ); //Correct } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3609,11 +3609,11 @@ and count(PrimarySuffix) = 0)] **Example(s):** ``` java -public boolean test(String s) { +{%raw%}public boolean test(String s) { if (s == "one") return true; // unreliable if ("two".equals(s)) return true; // better return false; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3635,7 +3635,7 @@ since the result of the operation is a new object. Therefore, ignoring the opera **Example(s):** ``` java -import java.math.*; +{%raw%}import java.math.*; class Test { void method1() { @@ -3646,7 +3646,7 @@ class Test { BigDecimal bd=new BigDecimal(10); bd = bd.add(new BigDecimal(5)); // this won't trigger the rule } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3683,7 +3683,7 @@ PrimarySuffix **Example(s):** ``` java -class Foo { +{%raw%}class Foo { // BAD if (x.toLowerCase().equals("list")) { } @@ -3696,7 +3696,7 @@ class Foo { */ // GOOD String z = a.toLowerCase(Locale.EN); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -3721,9 +3721,9 @@ Thread.currentThread().getContextClassLoader() instead. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { ClassLoader cl = Bar.class.getClassLoader(); -} +}{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/java/multithreading.md b/docs/pages/pmd/rules/java/multithreading.md index 34e0e7275d..cffce2e683 100644 --- a/docs/pages/pmd/rules/java/multithreading.md +++ b/docs/pages/pmd/rules/java/multithreading.md @@ -27,7 +27,7 @@ gets it. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { // Try to avoid this: synchronized void foo() { } @@ -46,7 +46,7 @@ public class Foo { synchronized(Foo.class) { } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -72,14 +72,14 @@ it contains methods that are not thread-safe. **Example(s):** ``` java -public class Bar { +{%raw%}public class Bar { void buz() { ThreadGroup tg = new ThreadGroup("My threadgroup"); tg = new ThreadGroup(tg, "my thread group"); tg = Thread.currentThread().getThreadGroup(); tg = System.getSecurityManager().getThreadGroup(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -105,10 +105,10 @@ the volatile keyword should not be used for maintenance purpose and portability. **Example(s):** ``` java -public class ThrDeux { +{%raw%}public class ThrDeux { private volatile String var1; // not suggested private String var2; // preferred -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -132,7 +132,7 @@ The J2EE specification explicitly forbids the use of threads. **Example(s):** ``` java -// This is not allowed +{%raw%}// This is not allowed public class UsingThread extends Thread { } @@ -143,7 +143,7 @@ public class OtherThread implements Runnable { public void methode() { Runnable thread = new Thread(); thread.run(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -177,9 +177,9 @@ Explicitly calling Thread.run() method will execute in the caller's thread of co **Example(s):** ``` java -Thread t = new Thread(); +{%raw%}Thread t = new Thread(); t.run(); // use t.start() instead -new Thread().run(); // same violation +new Thread().run(); // same violation{%endraw%} ``` **Use this rule by referencing it:** @@ -207,7 +207,7 @@ or <http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html> **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { /*volatile */ Object baz = null; // fix for Java5 and later: volatile Object bar() { if (baz == null) { // baz may be non-null yet not fully created @@ -219,7 +219,7 @@ public class Foo { } return baz; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -250,7 +250,7 @@ See Effective Java, item 48. **Example(s):** ``` java -private static Foo foo = null; +{%raw%}private static Foo foo = null; //multiple simultaneous callers may see partially initialized objects public static Foo getFoo() { @@ -258,7 +258,7 @@ public static Foo getFoo() { foo = new Foo(); } return foo; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -302,7 +302,7 @@ This rule has been deprecated in favor of the rule {% rule UnsynchronizedStaticF **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private static final SimpleDateFormat sdf = new SimpleDateFormat(); void bar() { sdf.format(); // poor, no thread-safety @@ -312,7 +312,7 @@ public class Foo { sdf.format(); } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -351,7 +351,7 @@ synchronized on block level. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private static final SimpleDateFormat sdf = new SimpleDateFormat(); void bar() { sdf.format(); // poor, no thread-safety @@ -361,7 +361,7 @@ public class Foo { sdf.format(); } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -404,7 +404,7 @@ perform efficient map reads without blocking other threads. **Example(s):** ``` java -public class ConcurrentApp { +{%raw%}public class ConcurrentApp { public void getMyInstance() { Map map1 = new HashMap(); // fine for single-threaded access Map map2 = new ConcurrentHashMap(); // preferred for use with multiple threads @@ -412,7 +412,7 @@ public class ConcurrentApp { // the following case will be ignored by this rule Map map3 = someModule.methodThatReturnMap(); // might be OK, if the returned map is already thread-safe } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -445,12 +445,12 @@ one is chosen. The thread chosen is arbitrary; thus its usually safer to call n **Example(s):** ``` java -void bar() { +{%raw%}void bar() { x.notify(); // If many threads are monitoring x, only one (and you won't know which) will be notified. // use instead: x.notifyAll(); - } + }{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/java/performance.md b/docs/pages/pmd/rules/java/performance.md index 039c9bf319..26b5419bcb 100644 --- a/docs/pages/pmd/rules/java/performance.md +++ b/docs/pages/pmd/rules/java/performance.md @@ -26,8 +26,8 @@ It is much better to use one of the type-specific toString() methods instead. **Example(s):** ``` java -String s = "" + 123; // inefficient -String t = Integer.toString(456); // preferred approach +{%raw%}String s = "" + 123; // inefficient +String t = Integer.toString(456); // preferred approach{%endraw%} ``` **Use this rule by referencing it:** @@ -48,11 +48,11 @@ Avoid concatenating characters as strings in StringBuffer/StringBuilder.append m **Example(s):** ``` java -StringBuffer sb = new StringBuffer(); +{%raw%}StringBuffer sb = new StringBuffer(); sb.append("a"); // avoid this StringBuffer sb = new StringBuffer(); -sb.append('a'); // use this instead +sb.append('a'); // use this instead{%endraw%} ``` **Use this rule by referencing it:** @@ -91,7 +91,7 @@ or AdditiveExpression) and count(.//PrimaryPrefix/Name)=1] **Example(s):** ``` java -public class Test { +{%raw%}public class Test { public void bar() { int[] a = new int[10]; int[] b = new int[10]; @@ -105,7 +105,7 @@ public class Test { b[i]=a[c[i]]; } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -151,7 +151,7 @@ that one covers both. **Example(s):** ``` java -// these instantiations cause garbage collection pauses, even if properly closed +{%raw%}// these instantiations cause garbage collection pauses, even if properly closed FileInputStream fis = new FileInputStream(fileName); FileOutputStream fos = new FileOutputStream(fileName); @@ -167,7 +167,7 @@ that one covers both. try(BufferedReader br = Files.newBufferedReader(Paths.get(fileName), StandardCharsets.UTF_8)) { } try(BufferedWriter wr = Files.newBufferedWriter(Paths.get(fileName), StandardCharsets.UTF_8)) { - } + }{%endraw%} ``` **Use this rule by referencing it:** @@ -188,13 +188,13 @@ New objects created within loops should be checked to see if they can created ou **Example(s):** ``` java -public class Something { +{%raw%}public class Something { public static void main( String as[] ) { for (int i = 0; i < 10; i++) { Foo f = new Foo(); // Avoid this whenever you can it's really expensive } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -231,14 +231,14 @@ adverse impacts on performance. **Example(s):** ``` java -public class UsingShort { +{%raw%}public class UsingShort { private short doNotUseShort = 0; public UsingShort() { short shouldNotBeUsed = 1; doNotUseShort += shouldNotBeUsed; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -260,11 +260,11 @@ for Java 1.5 onwards, BigInteger.TEN and BigDecimal (BigDecimal.ZERO, BigDecimal **Example(s):** ``` java -BigInteger bi = new BigInteger(1); // reference BigInteger.ONE instead +{%raw%}BigInteger bi = new BigInteger(1); // reference BigInteger.ONE instead BigInteger bi2 = new BigInteger("0"); // reference BigInteger.ZERO instead BigInteger bi3 = new BigInteger(0.0); // reference BigInteger.ZERO instead BigInteger bi4; -bi4 = new BigInteger(0); // reference BigInteger.ZERO instead +bi4 = new BigInteger(0); // reference BigInteger.ZERO instead{%endraw%} ``` **Use this rule by referencing it:** @@ -286,8 +286,8 @@ Note that new Boolean() is deprecated since JDK 9 for that reason. **Example(s):** ``` java -Boolean bar = new Boolean("true"); // unnecessary creation, just reference Boolean.TRUE; -Boolean buz = Boolean.valueOf(false); // ...., just reference Boolean.FALSE; +{%raw%}Boolean bar = new Boolean("true"); // unnecessary creation, just reference Boolean.TRUE; +Boolean buz = Boolean.valueOf(false); // ...., just reference Boolean.FALSE;{%endraw%} ``` **Use this rule by referencing it:** @@ -315,9 +315,9 @@ and ClassOrInterfaceType[pmd-java:typeIs('java.lang.Byte')]] **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private Byte i = new Byte(0); // change to Byte i = Byte.valueOf(0); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -339,7 +339,7 @@ by producing a smaller bytecode, reducing overhead and improving inlining. A com **Example(s):** ``` java -String foo = " "; +{%raw%}String foo = " "; StringBuffer buf = new StringBuffer(); buf.append("Hello"); // poor @@ -347,7 +347,7 @@ buf.append(foo); buf.append("World"); StringBuffer buf = new StringBuffer(); -buf.append("Hello").append(foo).append("World"); // good +buf.append("Hello").append(foo).append("World"); // good{%endraw%} ``` **Use this rule by referencing it:** @@ -370,7 +370,7 @@ can be appended in a single method call. **Example(s):** ``` java -StringBuilder buf = new StringBuilder(); +{%raw%}StringBuilder buf = new StringBuilder(); buf.append("Hello").append(" ").append("World"); // poor buf.append("Hello World"); // good @@ -378,7 +378,7 @@ buf.append('h').append('e').append('l').append('l').append('o'); // poor buf.append("hello"); // good buf.append(1).append('m'); // poor -buf.append("1m"); // good +buf.append("1m"); // good{%endraw%} ``` **This rule has the following properties:** @@ -434,11 +434,11 @@ include the check for != null). **Example(s):** ``` java -public void bar(String string) { +{%raw%}public void bar(String string) { if (string != null && string.trim().length() > 0) { doSomething(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -460,12 +460,12 @@ need to be be created and destroyed by the JVM. **Example(s):** ``` java -// Avoid this, two buffers are actually being created here +{%raw%}// Avoid this, two buffers are actually being created here StringBuffer sb = new StringBuffer("tmp = "+System.getProperty("java.io.tmpdir")); // do this instead StringBuffer sb = new StringBuffer("tmp = "); -sb.append(System.getProperty("java.io.tmpdir")); +sb.append(System.getProperty("java.io.tmpdir"));{%endraw%} ``` **Use this rule by referencing it:** @@ -490,11 +490,11 @@ is assumed if the length of the constructor can not be determined. **Example(s):** ``` java -StringBuffer bad = new StringBuffer(); +{%raw%}StringBuffer bad = new StringBuffer(); bad.append("This is a long string that will exceed the default 16 characters"); StringBuffer good = new StringBuffer(41); -good.append("This is a long string, which is pre-sized"); +good.append("This is a long string, which is pre-sized");{%endraw%} ``` **Use this rule by referencing it:** @@ -522,9 +522,9 @@ Note that new Integer() is deprecated since JDK 9 for that reason. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private Integer i = new Integer(0); // change to Integer i = Integer.valueOf(0); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -552,9 +552,9 @@ and ClassOrInterfaceType[pmd-java:typeIs('java.lang.Long')]] **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private Long i = new Long(0); // change to Long i = Long.valueOf(0); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -596,14 +596,14 @@ PrimarySuffix/Arguments/ArgumentList/Expression **Example(s):** ``` java -List<Foo> foos = getFoos(); +{%raw%}List<Foo> foos = getFoos(); // much better; this one allows the jvm to allocate an array of the correct size and effectively skip // the zeroing, since each array element will be overridden anyways Foo[] fooArray = foos.toArray(new Foo[0]); // inefficient, the array needs to be zeroed out by the jvm before it is handed over to the toArray method -Foo[] fooArray = foos.toArray(new Foo[foos.size()]); +Foo[] fooArray = foos.toArray(new Foo[foos.size()]);{%endraw%} ``` **Use this rule by referencing it:** @@ -625,7 +625,7 @@ is redundant and results in a larger class file (approximately three additional **Example(s):** ``` java -public class C { +{%raw%}public class C { boolean b = false; // examples of redundant initializers byte by = 0; short s = 0; @@ -643,7 +643,7 @@ public class C { class Nested { boolean b = false; } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -671,9 +671,9 @@ and ClassOrInterfaceType[pmd-java:typeIs('java.lang.Short')]] **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { private Short i = new Short(0); // change to Short i = Short.valueOf(0); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -707,7 +707,7 @@ at the expense of some readability. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { boolean checkIt(String x) { return x.startsWith("a"); // suboptimal @@ -716,7 +716,7 @@ public class Foo { boolean fasterCheckIt(String x) { return x.charAt(0) == 'a'; // faster approach } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -737,7 +737,7 @@ Avoid instantiating String objects; this is usually unnecessary since they are i **Example(s):** ``` java -private String bar = new String("bar"); // just do a String bar = "bar"; +{%raw%}private String bar = new String("bar"); // just do a String bar = "bar";{%endraw%} ``` **Use this rule by referencing it:** @@ -758,10 +758,10 @@ Avoid calling toString() on objects already known to be string instances; this i **Example(s):** ``` java -private String baz() { +{%raw%}private String baz() { String bar = "howdy"; return bar.toString(); -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -789,7 +789,7 @@ if-then statement to increase code readability. **Example(s):** ``` java -// With a minimumNumberCaseForASwitch of 3 +{%raw%}// With a minimumNumberCaseForASwitch of 3 public class Foo { public void bar() { switch (condition) { @@ -800,7 +800,7 @@ public class Foo { break; // not enough for a 'switch' stmt, a simple 'if' stmt would have been more appropriate } } -} +}{%endraw%} ``` **This rule has the following properties:** @@ -838,7 +838,7 @@ garbage-collected later. **Example(s):** ``` java -public int convert(String s) { +{%raw%}public int convert(String s) { int i, i2; i = Integer.valueOf(s).intValue(); // this wastes an object @@ -851,7 +851,7 @@ public int convert(String s) { s3 = Integer.toString(i2); // this is better return i2; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -877,12 +877,12 @@ ArrayList is a much better Collection implementation than Vector if thread-safe **Example(s):** ``` java -public class SimpleTest extends TestCase { +{%raw%}public class SimpleTest extends TestCase { public void testX() { Collection c1 = new Vector(); Collection c2 = new ArrayList(); // achieves the same with much better performance } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -943,7 +943,7 @@ You must use new ArrayList<>(Arrays.asList(...)) if that is inconvenient f **Example(s):** ``` java -public class Test { +{%raw%}public class Test { public void foo(Integer[] ints) { // could just use Arrays.asList(ints) List<Integer> l= new ArrayList<>(100); @@ -954,7 +954,7 @@ public class Test { l.add(a[i].toString()); // won't trigger the rule } } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -975,11 +975,11 @@ Use String.indexOf(char) when checking for the index of a single character; it e **Example(s):** ``` java -String s = "hello world"; +{%raw%}String s = "hello world"; // avoid this if (s.indexOf("d") {} // instead do this -if (s.indexOf('d') {} +if (s.indexOf('d') {}{%endraw%} ``` **Use this rule by referencing it:** @@ -1000,12 +1000,12 @@ No need to call String.valueOf to append to a string; just use the valueOf() arg **Example(s):** ``` java -public String convert(int i) { +{%raw%}public String convert(int i) { String s; s = "a" + String.valueOf(i); // not required s = "a" + i; // preferred approach return s; -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1028,7 +1028,7 @@ threadsafe StringBuffer is recommended to avoid this. **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void bar() { String a; a = "foo"; @@ -1037,7 +1037,7 @@ public class Foo { // StringBuilder a = new StringBuilder("foo"); // a.append(" bar"); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -1059,11 +1059,11 @@ or StringBuffer.toString().length() == ... **Example(s):** ``` java -StringBuffer sb = new StringBuffer(); +{%raw%}StringBuffer sb = new StringBuffer(); if (sb.toString().equals("")) {} // inefficient -if (sb.length() == 0) {} // preferred +if (sb.length() == 0) {} // preferred{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/java/security.md b/docs/pages/pmd/rules/java/security.md index 8fe84a69b6..2ada23a5ad 100644 --- a/docs/pages/pmd/rules/java/security.md +++ b/docs/pages/pmd/rules/java/security.md @@ -22,7 +22,7 @@ Do not use hard coded values for cryptographic operations. Please store keys out **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void good() { SecretKeySpec secretKeySpec = new SecretKeySpec(Properties.getKey(), "AES"); } @@ -30,7 +30,7 @@ public class Foo { void bad() { SecretKeySpec secretKeySpec = new SecretKeySpec("my secret here".getBytes(), "AES"); } -} +}{%endraw%} ``` **Use this rule by referencing it:** @@ -51,7 +51,7 @@ Do not use hard coded initialization vector in cryptographic operations. Please **Example(s):** ``` java -public class Foo { +{%raw%}public class Foo { void good() { SecureRandom random = new SecureRandom(); byte iv[] = new byte[16]; @@ -65,7 +65,7 @@ public class Foo { void alsoBad() { byte[] iv = "secret iv in here".getBytes(); } -} +}{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/jsp/bestpractices.md b/docs/pages/pmd/rules/jsp/bestpractices.md index 87c1175a20..efeb91efee 100644 --- a/docs/pages/pmd/rules/jsp/bestpractices.md +++ b/docs/pages/pmd/rules/jsp/bestpractices.md @@ -25,7 +25,7 @@ Do not nest JSF component custom actions inside a custom action that iterates ov **Example(s):** ``` jsp -<html> +{%raw%}<html> <body> <ul> <c:forEach items='${books}' var='b'> @@ -33,7 +33,7 @@ Do not nest JSF component custom actions inside a custom action that iterates ov </c:forEach> </ul> </body> -</html> +</html>{%endraw%} ``` **Use this rule by referencing it:** @@ -57,9 +57,9 @@ Do not use an attribute called 'class'. Use "styleclass" for CSS style **Example(s):** ``` jsp -<HTML> <BODY> +{%raw%}<HTML> <BODY> <P class="MajorHeading">Some text</P> -</BODY> </HTML> +</BODY> </HTML>{%endraw%} ``` **Use this rule by referencing it:** @@ -85,13 +85,13 @@ little other purpose. Consider switching to JSP comments. **Example(s):** ``` jsp -<HTML><title>bad example><BODY> +{%raw%}<HTML><title>bad example><BODY> <!-- HTML comment --> </BODY> </HTML> <HTML><title>good example><BODY> <%-- JSP comment --%> -</BODY> </HTML> +</BODY> </HTML>{%endraw%} ``` **Use this rule by referencing it:** @@ -115,7 +115,7 @@ Do not do a forward from within a JSP file. **Example(s):** ``` jsp -<jsp:forward page='UnderConstruction.jsp'/> +{%raw%}<jsp:forward page='UnderConstruction.jsp'/>{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/jsp/codestyle.md b/docs/pages/pmd/rules/jsp/codestyle.md index 56412f2e82..de425db9e5 100644 --- a/docs/pages/pmd/rules/jsp/codestyle.md +++ b/docs/pages/pmd/rules/jsp/codestyle.md @@ -22,7 +22,7 @@ Avoid duplicate import statements inside JSP's. **Example(s):** ``` jsp -<%@ page import=\"com.foo.MyClass,com.foo.MyClass\"%><html><body><b><img src=\"<%=Some.get()%>/foo\">xx</img>text</b></body></html> +{%raw%}<%@ page import=\"com.foo.MyClass,com.foo.MyClass\"%><html><body><b><img src=\"<%=Some.get()%>/foo\">xx</img>text</b></body></html>{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/jsp/design.md b/docs/pages/pmd/rules/jsp/design.md index d9fc103a59..c54e2acd3b 100644 --- a/docs/pages/pmd/rules/jsp/design.md +++ b/docs/pages/pmd/rules/jsp/design.md @@ -42,7 +42,7 @@ tags, or attributes like "align='center'". **Example(s):** ``` jsp -<html><body><p align='center'><b>text</b></p></body></html> +{%raw%}<html><body><p align='center'><b>text</b></p></body></html>{%endraw%} ``` **Use this rule by referencing it:** @@ -66,7 +66,7 @@ Scripts should be part of Tag Libraries, rather than part of JSP pages. **Example(s):** ``` jsp -<HTML> +{%raw%}<HTML> <BODY> <!--Java Script--> <SCRIPT language="JavaScript" type="text/javascript"> @@ -86,7 +86,7 @@ onload=calcDays; //--> </SCRIPT> </BODY> -</HTML> +</HTML>{%endraw%} ``` **Use this rule by referencing it:** @@ -112,7 +112,7 @@ Scriptlets should be factored into Tag Libraries or JSP declarations, rather tha **Example(s):** ``` jsp -<HTML> +{%raw%}<HTML> <HEAD> <% response.setHeader("Pragma", "No-cache"); @@ -121,7 +121,7 @@ response.setHeader("Pragma", "No-cache"); <BODY> <jsp:scriptlet>String title = "Hello world!";</jsp:scriptlet> </BODY> -</HTML> +</HTML>{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/jsp/errorprone.md b/docs/pages/pmd/rules/jsp/errorprone.md index 9006c497fe..0cf946ee62 100644 --- a/docs/pages/pmd/rules/jsp/errorprone.md +++ b/docs/pages/pmd/rules/jsp/errorprone.md @@ -31,11 +31,11 @@ and **Example(s):** ``` jsp -Most browsers should be able to interpret the following headers: +{%raw%}Most browsers should be able to interpret the following headers: <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/jsp/security.md b/docs/pages/pmd/rules/jsp/security.md index 88a56a136e..72c3daf482 100644 --- a/docs/pages/pmd/rules/jsp/security.md +++ b/docs/pages/pmd/rules/jsp/security.md @@ -26,13 +26,13 @@ through SSL. See http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q261188 **Example(s):** ``` jsp -<HTML><title>bad example><BODY> +{%raw%}<HTML><title>bad example><BODY> <iframe></iframe> </BODY> </HTML> <HTML><title>good example><BODY> <iframe src="foo"></iframe> -</BODY> </HTML> +</BODY> </HTML>{%endraw%} ``` **Use this rule by referencing it:** @@ -54,11 +54,11 @@ would be interpreted by the browser directly (e.g. "<script>alert('he **Example(s):** ``` jsp -<%@ page contentType="text/html; charset=UTF-8" %> +{%raw%}<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ${expression} <!-- don't use this --> ${fn:escapeXml(expression)} <!-- instead, escape it --> -<c:out value="${expression}" /> <!-- or use c:out --> +<c:out value="${expression}" /> <!-- or use c:out -->{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/plsql/bestpractices.md b/docs/pages/pmd/rules/plsql/bestpractices.md index 3dc2813b31..7d07f7e024 100644 --- a/docs/pages/pmd/rules/plsql/bestpractices.md +++ b/docs/pages/pmd/rules/plsql/bestpractices.md @@ -25,7 +25,7 @@ language: PLSQL **Example(s):** ``` sql -CREATE OR REPLACE PACKAGE BODY update_planned_hrs +{%raw%}CREATE OR REPLACE PACKAGE BODY update_planned_hrs IS PROCEDURE set_new_planned (p_emp_id IN NUMBER, p_project_id IN NUMBER, p_hours IN NUMBER) @@ -64,7 +64,7 @@ BEGIN END existing_planned; END update_planned_hrs; -/ +/{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/plsql/codestyle.md b/docs/pages/pmd/rules/plsql/codestyle.md index 949599d55b..01c9ca1636 100644 --- a/docs/pages/pmd/rules/plsql/codestyle.md +++ b/docs/pages/pmd/rules/plsql/codestyle.md @@ -82,7 +82,7 @@ Calling a procedure: **Example(s):** ``` sql -BEGIN +{%raw%}BEGIN -- select columns each on a separate line SELECT cmer_id ,version @@ -108,7 +108,7 @@ BEGIN ,slt_code_in => NULL ); -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -157,7 +157,7 @@ In case you have loops please name the loop variables more meaningful. **Example(s):** ``` sql --- good example +{%raw%}-- good example BEGIN FOR company IN (SELECT * FROM companies) LOOP FOR contact IN (SELECT * FROM contacts) LOOP @@ -179,7 +179,7 @@ FOR c1 IN (SELECT * FROM companies) LOOP END LOOP; END LOOP; END; -/ +/{%endraw%} ``` **This rule has the following properties:** @@ -258,7 +258,7 @@ https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/static.htm#BABIIHBJ **Example(s):** ``` sql -create or replace package inline_pragma_error is +{%raw%}create or replace package inline_pragma_error is end; / @@ -273,7 +273,7 @@ create or replace package body inline_pragma_error is end do_transaction; end inline_pragma_error; -/ +/{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/plsql/design.md b/docs/pages/pmd/rules/plsql/design.md index b1f6ff27f7..3cb5697e57 100644 --- a/docs/pages/pmd/rules/plsql/design.md +++ b/docs/pages/pmd/rules/plsql/design.md @@ -25,7 +25,7 @@ high complexity, and 11+ is very high complexity. **Example(s):** ``` sql --- Cyclomatic Complexity of 25 +{%raw%}-- Cyclomatic Complexity of 25 CREATE OR REPLACE PACKAGE BODY pkg_pmd_working_sequence AS 1 PROCEDURE ty_logger IS BEGIN 2 IF true @@ -138,7 +138,7 @@ CREATE OR REPLACE PACKAGE BODY pkg_pmd_working_sequence AS END IF; END; -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -181,12 +181,12 @@ Try to reduce the method length by creating helper methods and removing any copy **Example(s):** ``` sql -CREATE OR REPLACE +{%raw%}CREATE OR REPLACE PROCEDURE doSomething BEGIN DBMS_OUTPUT.PUT_LINE("Hello world!"); DBMS_OUTPUT.PUT_LINE("Hello world!"); -- 98 copies omitted for brevity. -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -226,7 +226,7 @@ apart the code becomes more managable and ripe for reuse. **Example(s):** ``` sql -CREATE OR REPLACE +{%raw%}CREATE OR REPLACE PACKAGE BODY Foo AS PROCEDURE bar1 IS BEGIN -- 1000 lines of code @@ -242,7 +242,7 @@ PACKAGE BODY Foo AS PROCEDURE barN IS BEGIN -- 1000 lines of code END barn; -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -282,7 +282,7 @@ apart the code becomes more managable and ripe for reuse. **Example(s):** ``` sql -CREATE OR REPLACE +{%raw%}CREATE OR REPLACE PACKAGE BODY Foo AS PROCEDURE bar1 IS BEGIN -- 1000 lines of code @@ -298,7 +298,7 @@ PACKAGE BODY Foo AS PROCEDURE barN IS BEGIN -- 1000 lines of code END barn; -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -338,7 +338,7 @@ apart the code becomes more managable and ripe for reuse. **Example(s):** ``` sql -CREATE OR REPLACE +{%raw%}CREATE OR REPLACE PACKAGE Foo AS PROCEDURE bar1; PROCEDURE bar2; @@ -347,7 +347,7 @@ PACKAGE Foo AS ... PROCEDURE barN; -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -386,7 +386,7 @@ same datatype. These situations usually denote the need for new objects to wrap **Example(s):** ``` sql -CREATE OR REPLACE +{%raw%}CREATE OR REPLACE PROCEDURE addPerson( -- too many arguments liable to be mixed up birthYear pls_integer, birthMonth pls_integer, birthDate pls_integer, height pls_integer, weight pls_integer, ssn pls_integer) { @@ -398,7 +398,7 @@ PROCEDURE addPerson( -- preferred approach birthdate DATE, measurements BodyMeasurements , ssn INTEGER) BEGIN . . . . -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -438,7 +438,7 @@ apart the code becomes more managable and ripe for reuse. **Example(s):** ``` sql -CREATE OR REPLACE +{%raw%}CREATE OR REPLACE TYPE BODY Foo AS MEMBER PROCEDURE bar1 IS BEGIN -- 1000 lines of code @@ -454,7 +454,7 @@ TYPE BODY Foo AS MEMBER PROCEDURE barN IS BEGIN -- 1000 lines of code END barn; -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -494,12 +494,12 @@ lines of code that are split are counted as one. **Example(s):** ``` sql -CREATE OR REPLACE PACKAGE BODY AS +{%raw%}CREATE OR REPLACE PACKAGE BODY AS FUNCTION methd RETURN INTEGER IS BEGIN RETURN 1;; END; -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -539,14 +539,14 @@ lines of code that are split are counted as one. **Example(s):** ``` sql -CREATE OR REPLACE PACKAGE pkg_ +{%raw%}CREATE OR REPLACE PACKAGE pkg_ PROCEDURE Foo IS BEGIN --this class only has 6 NCSS lines super(); super(); END; -} +}{%endraw%} ``` **This rule has the following properties:** @@ -586,7 +586,7 @@ complexity and increase readability. **Example(s):** ``` sql -CREATE OR REPLACE +{%raw%}CREATE OR REPLACE PROCEDURE bar AS BEGIN -- this is something more complex than it needs to be, if (y) THEN -- it should be broken down into smaller methods or functions for j IN 0 .. j-1 LOOP @@ -617,7 +617,7 @@ PROCEDURE bar AS BEGIN -- this is something more complex than it needs to be, log_problem; END; END; -END; +END;{%endraw%} ``` **This rule has the following properties:** @@ -657,12 +657,12 @@ city/state/zip fields could park them within a single Address field. **Example(s):** ``` sql -CREATE OR REPLACE PACKAGE pkg_too_many_fields AS +{%raw%}CREATE OR REPLACE PACKAGE pkg_too_many_fields AS C_CHAR_A CONSTANT CHAR(1 CHAR) := 'A'; C_CHAR_B CONSTANT CHAR(1 CHAR) := 'B'; ... C_CHAR_Z CONSTANT CHAR(1 CHAR) := 'Z'; -END pkg_too_many_fields; +END pkg_too_many_fields;{%endraw%} ``` **This rule has the following properties:** diff --git a/docs/pages/pmd/rules/plsql/errorprone.md b/docs/pages/pmd/rules/plsql/errorprone.md index 92385aacf9..da02816663 100644 --- a/docs/pages/pmd/rules/plsql/errorprone.md +++ b/docs/pages/pmd/rules/plsql/errorprone.md @@ -27,7 +27,7 @@ TO_DATE(TO_CHAR(date-variable)) used to remove time component - use TRUNC(date-v **Example(s):** ``` sql -CREATE OR REPLACE PACKAGE BODY date_utilities +{%raw%}CREATE OR REPLACE PACKAGE BODY date_utilities IS -- Take single parameter, relying on current default NLS date format @@ -39,7 +39,7 @@ END strip_time; END date_utilities; -/ +/{%endraw%} ``` **Use this rule by referencing it:** @@ -64,7 +64,7 @@ TO_DATE without date format- use TO_DATE(expression, date-format) **Example(s):** ``` sql -CREATE OR REPLACE PACKAGE BODY date_utilities +{%raw%}CREATE OR REPLACE PACKAGE BODY date_utilities IS -- Take single parameter, relying on current default NLS date format @@ -89,7 +89,7 @@ BEGIN END to_date_three_parameters; END date_utilities; -/ +/{%endraw%} ``` **Use this rule by referencing it:** @@ -114,7 +114,7 @@ TO_TIMESTAMP without date format- use TO_TIMESTAMP(expression, date-format) **Example(s):** ``` sql -CREATE OR REPLACE PACKAGE BODY date_utilities +{%raw%}CREATE OR REPLACE PACKAGE BODY date_utilities IS -- Take single parameter, relying on current default NLS date format @@ -139,7 +139,7 @@ BEGIN END to_timestamp_three_parameters; END date_utilities; -/ +/{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/pom/errorprone.md b/docs/pages/pmd/rules/pom/errorprone.md index aeb3e52dc9..abc289d563 100644 --- a/docs/pages/pmd/rules/pom/errorprone.md +++ b/docs/pages/pmd/rules/pom/errorprone.md @@ -28,7 +28,7 @@ The following types are considered valid: pom, jar, maven-plugin, ejb, war, ear, **Example(s):** ``` xml -<project...> +{%raw%}<project...> ... <dependencyManagement> ... @@ -41,7 +41,7 @@ The following types are considered valid: pom, jar, maven-plugin, ejb, war, ear, </dependency> ... </dependencyManagement> -</project> +</project>{%endraw%} ``` **This rule has the following properties:** @@ -87,13 +87,13 @@ By far the most common problem is the use of ${project.version} in a BOM or pare **Example(s):** ``` xml -<project...> +{%raw%}<project...> ... <dependency> ... <version>${project.dependency}</version> </dependency> -</project> +</project>{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/vf/security.md b/docs/pages/pmd/rules/vf/security.md index 86f8e57ef5..eba7e27f1a 100644 --- a/docs/pages/pmd/rules/vf/security.md +++ b/docs/pages/pmd/rules/vf/security.md @@ -22,7 +22,7 @@ Avoid calling VF action upon page load as the action becomes vulnerable to CSRF. **Example(s):** ``` vf -<apex:page controller="AcRestActionsController" action="{!csrfInitMethod}" > +{%raw%}<apex:page controller="AcRestActionsController" action="{!csrfInitMethod}" >{%endraw%} ``` **Use this rule by referencing it:** @@ -43,7 +43,7 @@ Avoid unescaped user controlled content in EL as it results in XSS. **Example(s):** ``` vf -<apex:outputText value="Potential XSS is {! here }" escape="false" /> +{%raw%}<apex:outputText value="Potential XSS is {! here }" escape="false" />{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/xml/errorprone.md b/docs/pages/pmd/rules/xml/errorprone.md index 1c612d8467..7ab8b27fcd 100644 --- a/docs/pages/pmd/rules/xml/errorprone.md +++ b/docs/pages/pmd/rules/xml/errorprone.md @@ -25,7 +25,7 @@ An XML CDATA section begins with a <![CDATA[ marker, which has only one [, an **Example(s):** ``` xml -<root> +{%raw%}<root> <child> <![CDATA[[ character data ]]> - this cdata section is valid, but it contains an additional square bracket at the beginning. @@ -36,7 +36,7 @@ An XML CDATA section begins with a <![CDATA[ marker, which has only one [, an additional square bracket in the end. It should probably be just <![CDATA[ character data ]]>. </child> -</root> +</root>{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/xsl/codestyle.md b/docs/pages/pmd/rules/xsl/codestyle.md index a0c276933e..e664ae3c8e 100644 --- a/docs/pages/pmd/rules/xsl/codestyle.md +++ b/docs/pages/pmd/rules/xsl/codestyle.md @@ -26,8 +26,8 @@ The XPath concat() functions accepts as many arguments as required so you can ha **Example(s):** ``` xsl -<xsl:variable name="var" select="concat("Welcome",concat("to you ",$name))"/> -<xsl:variable name="var" select="concat("Welcome","to you ",$name))"> +{%raw%}<xsl:variable name="var" select="concat("Welcome",concat("to you ",$name))"/> +<xsl:variable name="var" select="concat("Welcome","to you ",$name))">{%endraw%} ``` **Use this rule by referencing it:** diff --git a/docs/pages/pmd/rules/xsl/performance.md b/docs/pages/pmd/rules/xsl/performance.md index 3b5cca3dd4..c89ae0d35f 100644 --- a/docs/pages/pmd/rules/xsl/performance.md +++ b/docs/pages/pmd/rules/xsl/performance.md @@ -41,7 +41,7 @@ cutting through 100% of the document. **Example(s):** ``` xsl -<xsl:variable name="var" select="//item/descendant::child"/> +{%raw%}<xsl:variable name="var" select="//item/descendant::child"/>{%endraw%} ``` **This rule has the following properties:** From fdb31686f00b9d4e34943fdf08a6b6994303d466 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@microdoc.com> Date: Fri, 19 Jul 2019 12:21:04 +0200 Subject: [PATCH 322/371] Fixes #1902 [pslql] ParseException when parsing (+) --- pmd-plsql/etc/grammar/PldocAST.jjt | 4 ++- pmd-plsql/src/main/ant/alljavacc.xml | 1 + .../lang/plsql/ast/ASTSimpleExpression.java | 30 +++++++++++++++++++ .../pmd/lang/plsql/ast/JoinClauseTest.java | 17 +++++++++++ .../pmd/lang/plsql/ast/JoinOperator.pls | 28 +++++++++++++++++ 5 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java create mode 100644 pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/JoinOperator.pls diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 928f3bfe7b..88686f7b8f 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1556,6 +1556,7 @@ ASTSimpleExpression SimpleExpression() : LOOKAHEAD(2) ( "*" | Column() ) { sb.append(token.image); } ) + [LOOKAHEAD(3) "(" "+" ")" {jjtThis.setJoinOperator(true);} ] // JoinOperator { jjtThis.setImage(sb.toString()); return jjtThis; @@ -3258,8 +3259,9 @@ ASTPrimaryPrefix PrimaryPrefix() : } { ( + LOOKAHEAD(ID() ("." ID())* "(" "+" ")") ( simpleNode = SimpleExpression() ) { sb.append(simpleNode.getImage()); } // Note: AnalyticClause and WithinClause are only allowed for specific functions, but this grammar allows it for all functions. - LOOKAHEAD(FunctionName() "(") ( simpleNode = FunctionCall() [ AnalyticClause() ] [ WithinClause() ] ) { sb.append(simpleNode.getImage()); } +| LOOKAHEAD(FunctionName() "(") ( simpleNode = FunctionCall() [ AnalyticClause() ] [ WithinClause() ] ) { sb.append(simpleNode.getImage()); } | LOOKAHEAD(MultiSetCondition()) simpleNode = MultiSetCondition() | LOOKAHEAD(<CASE>) ( simpleNode =CaseExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110520 | LOOKAHEAD(ObjectExpression() ) ( simpleNode = ObjectExpression() ) { sb.append(simpleNode.getImage()) ; } //SRT 20110604 diff --git a/pmd-plsql/src/main/ant/alljavacc.xml b/pmd-plsql/src/main/ant/alljavacc.xml index d22c66587a..26b272ac49 100644 --- a/pmd-plsql/src/main/ant/alljavacc.xml +++ b/pmd-plsql/src/main/ant/alljavacc.xml @@ -67,6 +67,7 @@ <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTRegexpLikeCondition.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTSelectIntoStatement.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTSelectStatement.java" /> + <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTSubqueryOperation.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTTriggerTimingPointSection.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTTriggerUnit.java" /> diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java new file mode 100644 index 0000000000..497492e916 --- /dev/null +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java @@ -0,0 +1,30 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.plsql.ast; + +public class ASTSimpleExpression extends AbstractPLSQLNode { + private boolean joinOperator; + + ASTSimpleExpression(int id) { + super(id); + } + + ASTSimpleExpression(PLSQLParser p, int id) { + super(p, id); + } + + @Override + public Object jjtAccept(PLSQLParserVisitor visitor, Object data) { + return visitor.visit(this, data); + } + + void setJoinOperator(boolean joinOperator) { + this.joinOperator = joinOperator; + } + + public boolean hasJoinOperator() { + return joinOperator; + } +} diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java index dd74690268..5033394e47 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.plsql.ast; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.List; import org.apache.commons.io.IOUtils; @@ -129,4 +130,20 @@ public class JoinClauseTest extends AbstractPLSQLParserTst { StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); } + + @Test + public void testJoinOperator() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("JoinOperator.pls"), + StandardCharsets.UTF_8); + ASTInput input = parsePLSQL(code); + List<ASTSimpleExpression> expressions = input.findDescendantsOfType(ASTSimpleExpression.class); + List<ASTSimpleExpression> expressionsWithJoinOperator = new ArrayList<ASTSimpleExpression>(); + for (ASTSimpleExpression exp : expressions) { + if (exp.hasJoinOperator()) { + expressionsWithJoinOperator.add(exp); + } + } + Assert.assertEquals(4, expressionsWithJoinOperator.size()); + Assert.assertEquals("h.opp_id", expressionsWithJoinOperator.get(3).getImage()); + } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/JoinOperator.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/JoinOperator.pls new file mode 100644 index 0000000000..02c089a9c7 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/JoinOperator.pls @@ -0,0 +1,28 @@ +-- +-- https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/Joins.html +-- + +BEGIN + +SELECT e1.employee_id, e1.manager_id, e2.employee_id + FROM employees e1, employees e2 + WHERE e1.manager_id(+) = e2.employee_id + ORDER BY e1.employee_id, e1.manager_id, e2.employee_id; + +SELECT * FROM A, B, D + WHERE A.c1 = B.c2(+) and D.c3 = B.c4(+); + +-- From https://github.com/pmd/pmd/issues/1902 +SELECT DISTINCT + o.op_id + FROM + opportunities o, + v_opp_bundles b, + jopportunities h + WHERE + o.opp_id = b.opp_id + AND b.bun_id = p_bun_id + AND o.opp_id = h.opp_id (+); + +END; +/ \ No newline at end of file From ddb60b01634b3a39ca5c7954a7426f2a8911a257 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 20 Jul 2019 10:30:30 +0200 Subject: [PATCH 323/371] [ci] Upgrade to AdoptOpenJDK 11.0.4 B11 --- .travis/install-openjdk.sh | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.travis/install-openjdk.sh b/.travis/install-openjdk.sh index 017b50d488..3204cf0b95 100644 --- a/.travis/install-openjdk.sh +++ b/.travis/install-openjdk.sh @@ -1,21 +1,18 @@ # -# Original sources: -# Linux: https://github.com/AdoptOpenJDK/openjdk11-upstream-binaries/releases/jdk-11.0.3%2B7/ -# https://github.com/AdoptOpenJDK/openjdk11-upstream-binaries/releases/download/jdk-11.0.3%2B7/OpenJDK11U-x64_linux_11.0.3_7.tar.gz -# MacOSX: https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/jdk-11.0.3%2B7/ -# https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.3%2B7/OpenJDK11U-jdk_x64_mac_hotspot_11.0.3_7.tar.gz +# AdoptOpenJDK Builds from: +# https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/tag/jdk-11.0.4%2B11 # - if [[ "$OSTYPE" == "darwin"* ]]; then - OPENJDK_ARCHIVE=OpenJDK11U-jdk_x64_mac_hotspot_11.0.3_7.tar.gz + DOWNLOAD_URL=https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.4%2B11/OpenJDK11U-jdk_x64_mac_hotspot_11.0.4_11.tar.gz COMPONENTS_TO_STRIP=3 # e.g. jdk-11.0.3+7/Contents/Home/bin/java else - OPENJDK_ARCHIVE=OpenJDK11U-x64_linux_11.0.3_7.tar.gz + DOWNLOAD_URL=https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.4%2B11/OpenJDK11U-jdk_x64_linux_hotspot_11.0.4_11.tar.gz COMPONENTS_TO_STRIP=1 # e.g. openjdk-11.0.3+7/bin/java fi -DOWNLOAD_URL=https://pmd-code.org/${OPENJDK_ARCHIVE} +OPENJDK_ARCHIVE=$(basename $DOWNLOAD_URL) + LOCAL_DIR=${HOME}/.cache/openjdk TARGET_DIR=${HOME}/openjdk11 From 1ef5079b29401bdb0df6e773f0160fa54f779018 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 20 Jul 2019 11:35:27 +0200 Subject: [PATCH 324/371] [java] ATFD calculation problem * Fixes #1910 * Method call chains are now considered --- docs/pages/release_notes.md | 2 + .../impl/visitors/AtfdBaseVisitor.java | 39 ++++++++++++++----- .../lang/java/metrics/impl/xml/AtfdTest.xml | 34 ++++++++++++++++ 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0068f262c7..68317b11bf 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -32,6 +32,8 @@ Being based on a proper Antlr grammar, CPD can: * [#1898](https://github.com/pmd/pmd/issues/1898): \[doc] Incorrect code example for DoubleBraceInitialization in documentation on website * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" +* java + * [#1910](https://github.com/pmd/pmd/issues/1910): \[java] ATFD calculation problem * java-multithreading * [#1903](https://github.com/pmd/pmd/issues/1903): \[java] UnsynchronizedStaticFormatter doesn't allow block-level synchronization when using allowMethodLevelSynchronization=true * xml diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/metrics/impl/visitors/AtfdBaseVisitor.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/metrics/impl/visitors/AtfdBaseVisitor.java index 6576ae6f1d..b40f79e58d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/metrics/impl/visitors/AtfdBaseVisitor.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/metrics/impl/visitors/AtfdBaseVisitor.java @@ -32,28 +32,44 @@ public class AtfdBaseVisitor extends JavaParserVisitorAdapter { @Override public Object visit(ASTPrimaryExpression node, Object data) { - if (isForeignAttributeOrMethod(node) && (isAttributeAccess(node) - || isMethodCall(node) && isForeignGetterSetterCall(node))) { - - ((MutableInt) data).increment(); + if (isForeignAttributeOrMethod(node)) { + if (isAttributeAccess(node)) { + ((MutableInt) data).increment(); + } else { + ((MutableInt) data).add(countForeignGetterSetterCalls(node)); + } } return super.visit(node, data); } private boolean isForeignGetterSetterCall(ASTPrimaryExpression node) { - String methodOrAttributeName = getMethodOrAttributeName(node); + return isForeignGetterSetterCall(methodOrAttributeName); + } + + private boolean isForeignGetterSetterCall(String methodOrAttributeName) { return methodOrAttributeName != null && StringUtils.startsWithAny(methodOrAttributeName, "get", "is", "set"); } - private boolean isMethodCall(ASTPrimaryExpression node) { - boolean result = false; + private int countForeignGetterSetterCalls(ASTPrimaryExpression node) { + if (!isForeignGetterSetterCall(node) || !isForeignAttributeOrMethod(node)) { + return 0; + } + List<ASTPrimarySuffix> suffixes = node.findDescendantsOfType(ASTPrimarySuffix.class); - if (suffixes.size() == 1) { - result = suffixes.get(0).isArguments(); + int result = 0; + for (ASTPrimarySuffix suffix : suffixes) { + if (suffix.isArguments()) { + result++; + } else { + String methodOrAttributeName = getMethodOrAttributeName(suffix); + if (!isForeignGetterSetterCall(methodOrAttributeName)) { + break; + } + } } return result; } @@ -106,6 +122,11 @@ public class AtfdBaseVisitor extends JavaParserVisitorAdapter { } + private String getMethodOrAttributeName(ASTPrimarySuffix node) { + return node.getImage(); + } + + private boolean isAttributeAccess(ASTPrimaryExpression node) { return !node.hasDescendantOfType(ASTPrimarySuffix.class); } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/metrics/impl/xml/AtfdTest.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/metrics/impl/xml/AtfdTest.xml index cc74cf3e6f..d6615dbbe5 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/metrics/impl/xml/AtfdTest.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/metrics/impl/xml/AtfdTest.xml @@ -188,4 +188,38 @@ public class StatementAndBraceFinder extends JavaParserVisitorAdapter { ]]></code> </test-code> + <test-code> + <description>ATFD without method call chains</description> + <expected-problems>2</expected-problems> + <expected-messages> + <message>'Foo' has value 2 highest 2.</message> + <message>'Foo#bar()' has value 2.</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public void bar() { + JFileChooser openDialog = createOpenFileChooser(); + FileFilter tmp = openDialog.getFileFilter(); + showStatus("Not a valid file format: " + tmp.getDescription()); + } +} + ]]></code> + </test-code> + + <test-code> + <description>ATFD with method call chains</description> + <expected-problems>2</expected-problems> + <expected-messages> + <message>'Foo' has value 2 highest 2.</message> + <message>'Foo#bar()' has value 2.</message> + </expected-messages> + <code><![CDATA[ +public class Foo { + public void bar() { + JFileChooser openDialog = createOpenFileChooser(); + showStatus("Not a valid file format: " + openDialog.getFileFilter().getDescription()); + } +} + ]]></code> + </test-code> </test-data> \ No newline at end of file From 50d211eae49479015dc93be959efb8949d97ffeb Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 20 Jul 2019 17:32:31 +0200 Subject: [PATCH 325/371] [plsql] Introduce new node OuterJoinExpression --- pmd-plsql/etc/grammar/PldocAST.jjt | 17 +++++++++-- pmd-plsql/src/main/ant/alljavacc.xml | 1 - .../lang/plsql/ast/ASTSimpleExpression.java | 30 ------------------- .../plsql/ast/PLSQLParserVisitorAdapter.java | 5 ++++ .../lang/plsql/rule/AbstractPLSQLRule.java | 5 ++++ .../pmd/lang/plsql/ast/JoinClauseTest.java | 13 ++------ 6 files changed, 28 insertions(+), 43 deletions(-) delete mode 100644 pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 88686f7b8f..6f3477722a 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1556,13 +1556,26 @@ ASTSimpleExpression SimpleExpression() : LOOKAHEAD(2) ( "*" | Column() ) { sb.append(token.image); } ) - [LOOKAHEAD(3) "(" "+" ")" {jjtThis.setJoinOperator(true);} ] // JoinOperator { jjtThis.setImage(sb.toString()); return jjtThis; } } +ASTOuterJoinExpression OuterJoinExpression() : +{ StringBuilder sb = new StringBuilder(); } +{ + [ LOOKAHEAD(6) SchemaName() { sb.append(token.image); } "." { sb.append(token.image); } ] + [ LOOKAHEAD(4) TableName() { sb.append(token.image); } "." { sb.append(token.image); } ] + Column() { sb.append(token.image); } + "(" "+" ")" + + { + jjtThis.setImage(sb.toString()); + return jjtThis; + } +} + /** * Built-in function call or a user defined function call. * See https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/Functions.html#GUID-D079EFD3-C683-441F-977E-2C9503089982 @@ -3259,7 +3272,7 @@ ASTPrimaryPrefix PrimaryPrefix() : } { ( - LOOKAHEAD(ID() ("." ID())* "(" "+" ")") ( simpleNode = SimpleExpression() ) { sb.append(simpleNode.getImage()); } + LOOKAHEAD(OuterJoinExpression()) ( simpleNode = OuterJoinExpression() ) { sb.append(simpleNode.getImage()); } // Note: AnalyticClause and WithinClause are only allowed for specific functions, but this grammar allows it for all functions. | LOOKAHEAD(FunctionName() "(") ( simpleNode = FunctionCall() [ AnalyticClause() ] [ WithinClause() ] ) { sb.append(simpleNode.getImage()); } | LOOKAHEAD(MultiSetCondition()) simpleNode = MultiSetCondition() diff --git a/pmd-plsql/src/main/ant/alljavacc.xml b/pmd-plsql/src/main/ant/alljavacc.xml index 26b272ac49..d22c66587a 100644 --- a/pmd-plsql/src/main/ant/alljavacc.xml +++ b/pmd-plsql/src/main/ant/alljavacc.xml @@ -67,7 +67,6 @@ <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTRegexpLikeCondition.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTSelectIntoStatement.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTSelectStatement.java" /> - <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTSubqueryOperation.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTTriggerTimingPointSection.java" /> <delete file="${target}/net/sourceforge/pmd/lang/plsql/ast/ASTTriggerUnit.java" /> diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java deleted file mode 100644 index 497492e916..0000000000 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/ASTSimpleExpression.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.plsql.ast; - -public class ASTSimpleExpression extends AbstractPLSQLNode { - private boolean joinOperator; - - ASTSimpleExpression(int id) { - super(id); - } - - ASTSimpleExpression(PLSQLParser p, int id) { - super(p, id); - } - - @Override - public Object jjtAccept(PLSQLParserVisitor visitor, Object data) { - return visitor.visit(this, data); - } - - void setJoinOperator(boolean joinOperator) { - this.joinOperator = joinOperator; - } - - public boolean hasJoinOperator() { - return joinOperator; - } -} diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java index 675d444b83..e70249f69d 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParserVisitorAdapter.java @@ -1106,4 +1106,9 @@ public class PLSQLParserVisitorAdapter implements PLSQLParserVisitor { public Object visit(ASTXMLElement node, Object data) { return visit((PLSQLNode) node, data); } + + @Override + public Object visit(ASTOuterJoinExpression node, Object data) { + return visit((PLSQLNode) node, data); + } } diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java index 7da4036f88..018dfb81f2 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/rule/AbstractPLSQLRule.java @@ -1200,6 +1200,11 @@ public abstract class AbstractPLSQLRule extends AbstractRule implements PLSQLPar return visit((PLSQLNode) node, data); } + @Override + public Object visit(ASTOuterJoinExpression node, Object data) { + return visit((PLSQLNode) node, data); + } + /* * Treat all Executable Code */ diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java index 5033394e47..a15ceaa7dd 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/JoinClauseTest.java @@ -5,7 +5,6 @@ package net.sourceforge.pmd.lang.plsql.ast; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.List; import org.apache.commons.io.IOUtils; @@ -136,14 +135,8 @@ public class JoinClauseTest extends AbstractPLSQLParserTst { String code = IOUtils.toString(this.getClass().getResourceAsStream("JoinOperator.pls"), StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); - List<ASTSimpleExpression> expressions = input.findDescendantsOfType(ASTSimpleExpression.class); - List<ASTSimpleExpression> expressionsWithJoinOperator = new ArrayList<ASTSimpleExpression>(); - for (ASTSimpleExpression exp : expressions) { - if (exp.hasJoinOperator()) { - expressionsWithJoinOperator.add(exp); - } - } - Assert.assertEquals(4, expressionsWithJoinOperator.size()); - Assert.assertEquals("h.opp_id", expressionsWithJoinOperator.get(3).getImage()); + List<ASTOuterJoinExpression> expressions = input.findDescendantsOfType(ASTOuterJoinExpression.class); + Assert.assertEquals(4, expressions.size()); + Assert.assertEquals("h.opp_id", expressions.get(3).getImage()); } } From 169d08a8980e000d5159c61846868fb6ea61bbd0 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 20 Jul 2019 17:49:35 +0200 Subject: [PATCH 326/371] Update release notes, fixes #1902 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0068f262c7..64aeff98bd 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -34,6 +34,8 @@ Being based on a proper Antlr grammar, CPD can: * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" * java-multithreading * [#1903](https://github.com/pmd/pmd/issues/1903): \[java] UnsynchronizedStaticFormatter doesn't allow block-level synchronization when using allowMethodLevelSynchronization=true +* plsql + * [#1902](https://github.com/pmd/pmd/issues/1902): \[pslql] ParseException when parsing (+) * xml * [#1666](https://github.com/pmd/pmd/issues/1666): \[xml] wrong cdata rule description and examples From 7c77945164ebfb8fa00bad913d8fcb71cd0918da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Sun, 21 Jul 2019 16:38:35 +0200 Subject: [PATCH 327/371] #1921 - exclude ByteArrayInputStream from CloseResource --- .../rule/errorprone/CloseResourceRule.java | 2 +- .../rule/errorprone/xml/CloseResource.xml | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index abb6b8cf6f..a3c9740f56 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -88,7 +88,7 @@ public class CloseResourceRule extends AbstractJavaRule { private static final PropertyDescriptor<List<String>> ALLOWED_RESOURCE_TYPES = stringListProperty("allowedResourceTypes") .desc("Exact class names that do not need to be closed") - .defaultValues("java.io.ByteArrayOutputStream", "java.io.StringWriter") + .defaultValues("java.io.ByteArrayOutputStream", "java.io.ByteArrayInputStream", "java.io.StringWriter") .build(); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 604380c3e5..5f8c0beccc 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -849,6 +849,33 @@ public class CloseResourceWithExceptions { ]]></code> </test-code> + <test-code> + <description>ByteArrayInputStream does not need closing</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class CloseResourceWithExceptions { + + { + ByteArrayInputStream bis = new ByteArrayInputStream("fooString".getBytes(StandardCharsets.UTF_8)); + } + + public int bar() { + /*ByteArray*/InputStream buffer = new ByteArrayInputStream(); + try { + return buffer.read(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return -1; + } +} + ]]></code> + </test-code> + <test-code> <description>A custom StringWriter does need closing</description> <expected-problems>1</expected-problems> From 2278613cfdd57c7add868aea3c039a90b21afa6b Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 21 Jul 2019 19:15:26 +0200 Subject: [PATCH 328/371] Update release notes, fixes #1921 --- docs/pages/release_notes.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0068f262c7..861678ffcc 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -23,6 +23,11 @@ Being based on a proper Antlr grammar, CPD can: * ignore comments * honor [comment-based suppressions](pmd_userdocs_cpd.html#suppression) +#### Modified Rules + +* The Java rule {% rule "java/errorprone/CloseResource" %} [`java-errorprone`] now ignores by default + `java.io.ByteArrayInputStream`. Such streams do not need to be closed. + ### Fixed Issues * core @@ -32,6 +37,8 @@ Being based on a proper Antlr grammar, CPD can: * [#1898](https://github.com/pmd/pmd/issues/1898): \[doc] Incorrect code example for DoubleBraceInitialization in documentation on website * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" +* java-errorprone + * [#1921](https://github.com/pmd/pmd/issues/1921): \[java] CloseResource false positive with ByteArrayInputStream * java-multithreading * [#1903](https://github.com/pmd/pmd/issues/1903): \[java] UnsynchronizedStaticFormatter doesn't allow block-level synchronization when using allowMethodLevelSynchronization=true * xml From 6f05882c95bbb93ba9031df422481e21903168e8 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 21 Jul 2019 19:27:19 +0200 Subject: [PATCH 329/371] [doc] Update generated rule documentation --- docs/pages/pmd/rules/java/errorprone.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index ba4394cd45..11b48a8963 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -1213,7 +1213,7 @@ just remove "AutoCloseable" from the types. |closeTargets||Methods which may close this resource|yes. Delimiter is ','.| |types|java.lang.AutoCloseable , java.sql.Connection , java.sql.Statement , java.sql.ResultSet|Affected types|yes. Delimiter is ','.| |closeAsDefaultTarget|true|Consider 'close' as a target by default|no| -|allowedResourceTypes|java.io.ByteArrayOutputStream \| java.io.StringWriter|Exact class names that do not need to be closed|yes. Delimiter is '\|'.| +|allowedResourceTypes|java.io.ByteArrayOutputStream \| java.io.ByteArrayInputStream \| java.io.StringWriter|Exact class names that do not need to be closed|yes. Delimiter is '\|'.| **Use this rule with the default properties by just referencing it:** ``` xml @@ -1227,7 +1227,7 @@ just remove "AutoCloseable" from the types. <property name="closeTargets" value="" /> <property name="types" value="java.lang.AutoCloseable,java.sql.Connection,java.sql.Statement,java.sql.ResultSet" /> <property name="closeAsDefaultTarget" value="true" /> - <property name="allowedResourceTypes" value="java.io.ByteArrayOutputStream|java.io.StringWriter" /> + <property name="allowedResourceTypes" value="java.io.ByteArrayOutputStream|java.io.ByteArrayInputStream|java.io.StringWriter" /> </properties> </rule> ``` From 1dca17fd1b91c1af9a823e5572a8faf5932a3d0d Mon Sep 17 00:00:00 2001 From: YoonhoChoi96 <uenho830@gmail.com> Date: Mon, 22 Jul 2019 12:46:24 +0900 Subject: [PATCH 330/371] Verifying line numbers and the messages in Test Cases --- .../xml/DataflowAnomalyAnalysis.xml | 51 +++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml index f8a5f09f2a..7be1ab2c4b 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml @@ -139,6 +139,10 @@ public class AssertTest { <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 1. DU-Anomaly(b)</description> <expected-problems>1</expected-problems> + <expected-linenumbers>6</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 'b' (lines '6'-'7').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -154,6 +158,11 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 2. DU-Anomaly(a)</description> <expected-problems>2</expected-problems> + <expected-linenumbers>3,5</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 'a' (lines '3'-'7').</message> + <message>Found 'DU'-anomaly for variable 'a' (lines '5'-'7').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -166,10 +175,13 @@ class Test{ ]]></code> </test-code> - <!-- This case invoke False Positive(UR-a), because of for-each statement. - <test-code> + <test-code regressionTest="false"> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 3. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> + <expected-linenumbers>5</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 'a' (lines '5'-'7').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -180,11 +192,16 @@ class Test{ } } ]]></code> - </test-code> --> + </test-code> <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 4. DU-Anomaly(a)</description> <expected-problems>2</expected-problems> + <expected-linenumbers>3,6</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 'a' (lines '3'-'9').</message> + <message>Found 'DU'-anomaly for variable 'a' (lines '6'-'7').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -202,6 +219,10 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 5. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> + <expected-linenumbers>6</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 'a' (lines '6'-'9').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -219,6 +240,13 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 6. DU-Anomaly(a)</description> <expected-problems>4</expected-problems> + <expected-linenumbers>6,8,10,12</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 'a' (lines '6'-'14').</message> + <message>Found 'DU'-anomaly for variable 'a' (lines '8'-'14').</message> + <message>Found 'DU'-anomaly for variable 'a' (lines '10'-'14').</message> + <message>Found 'DU'-anomaly for variable 'a' (lines '12'-'14').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -241,6 +269,10 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 7. DU-Anomaly(a)</description> <expected-problems>1</expected-problems> + <expected-linenumbers>9</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 'a' (lines '9'-'11').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -260,6 +292,10 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 9. DU-Anomaly(t1)</description> <expected-problems>1</expected-problems> + <expected-linenumbers>5</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 't1' (lines '5'-'6').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -274,6 +310,10 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 12. DU-Anomaly(t1)</description> <expected-problems>1</expected-problems> + <expected-linenumbers>6</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 't1' (lines '6'-'7').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ @@ -304,6 +344,11 @@ class Test{ <test-code> <description>#1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 14. DU-Anomaly(t1, t2)</description> <expected-problems>2</expected-problems> + <expected-linenumbers>4,6</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 't2' (lines '4'-'7').</message> + <message>Found 'DU'-anomaly for variable 't1' (lines '6'-'7').</message> + </expected-messages> <code><![CDATA[ class Test{ public static void main(String[] args){ From 83f4682063af5ca89613c43b461e6ad194d1129b Mon Sep 17 00:00:00 2001 From: YoonhoChoi96 <uenho830@gmail.com> Date: Mon, 22 Jul 2019 12:57:21 +0900 Subject: [PATCH 331/371] fix typo --- .../lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml index 7be1ab2c4b..381dbcd8ff 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml @@ -200,7 +200,7 @@ class Test{ <expected-linenumbers>3,6</expected-linenumbers> <expected-messages> <message>Found 'DU'-anomaly for variable 'a' (lines '3'-'9').</message> - <message>Found 'DU'-anomaly for variable 'a' (lines '6'-'7').</message> + <message>Found 'DU'-anomaly for variable 'a' (lines '6'-'9').</message> </expected-messages> <code><![CDATA[ class Test{ From 56b1bfbd97b954e0f4e300668eafbbb585cd2ad0 Mon Sep 17 00:00:00 2001 From: YoonhoChoi96 <uenho830@gmail.com> Date: Mon, 22 Jul 2019 14:22:26 +0900 Subject: [PATCH 332/371] Remove wasted lists and Simplify --- .../lang/java/dfa/VariableAccessVisitor.java | 73 +++++++------------ 1 file changed, 27 insertions(+), 46 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java index dce8857b22..40caf39014 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java @@ -19,8 +19,10 @@ import net.sourceforge.pmd.lang.dfa.VariableAccess; import net.sourceforge.pmd.lang.java.ast.ASTAssignmentOperator; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTExpression; import net.sourceforge.pmd.lang.java.ast.ASTFormalParameter; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTStatementExpression; import net.sourceforge.pmd.lang.java.ast.ASTVariableInitializer; import net.sourceforge.pmd.lang.java.ast.JavaNode; import net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter; @@ -80,58 +82,37 @@ public class VariableAccessVisitor extends JavaParserVisitorAdapter { } undefinitions.add(new VariableAccess(VariableAccess.UNDEFINITION, vnd.getImage())); - //make arraylist which could store all name occurrences - List<NameOccurrence> data = new ArrayList<>(); - - //make arraylist which could store sorted name occurrences - List<NameOccurrence> order = new ArrayList<>(); - - //add all occurrences to arraylist(data) + //Map the name occurrences to their assignment expressions, if any + List<SimpleEntry<Node, NameOccurrence>> occurrencesWithAssignmentExp = new ArrayList<>(); for (NameOccurrence occurrence : entry.getValue()) { - data.add(occurrence); + // find the nearest assignment, if any + Node potentialAssignment = occurrence.getLocation().getFirstParentOfAnyType(ASTStatementExpression.class, + ASTExpression.class); + while (potentialAssignment != null + && (potentialAssignment.jjtGetNumChildren() < 2 + || !(potentialAssignment.jjtGetChild(1) instanceof ASTAssignmentOperator))) { + potentialAssignment = potentialAssignment.getFirstParentOfAnyType(ASTStatementExpression.class, + ASTExpression.class); + } + // at this point, potentialAssignment is either a assignment or null + occurrencesWithAssignmentExp.add(new SimpleEntry<>(potentialAssignment, occurrence)); } - //make arraylist which could store pair structure which is consist of assignment operator and related Name occurrences - ArrayList<SimpleEntry<Node, NameOccurrence>> assignments = new ArrayList<>(); + //The name occurrences are in source code order, the means, the left hand side of + //the assignment is first. But this is not the order in which the data flows: first the + //right hand side is evaluated before the left hand side is assigned. + //Therefore move the name occurrences backwards if they belong to the same assignment expression. + for (int i = 0; i < occurrencesWithAssignmentExp.size() - 1; i++) { + SimpleEntry<Node, NameOccurrence> oc = occurrencesWithAssignmentExp.get(i); + SimpleEntry<Node, NameOccurrence> nextOc = occurrencesWithAssignmentExp.get(i + 1); - //travers all elements which are in arraylist(data) - for (NameOccurrence name : data) { - //Make a flag which is for preventing double addition of same name occurrence - int flag = 0; - //traverse parents nodes until it is method declaration or constructor declaration - checker : - for (Node temp = name.getLocation(); !(temp.jjtGetParent() instanceof ASTMethodDeclaration) - && !(temp.jjtGetParent() instanceof ASTConstructorDeclaration); temp = temp.jjtGetParent()) { - //traverse children nodes to check it has assignment operator as a child - List<ASTAssignmentOperator> assignmentOperators = temp.findChildrenOfType(ASTAssignmentOperator.class); - if (!assignmentOperators.isEmpty()) { - //if assignment operator is found, add to arraylist(assignments) with the assignment operator and its name - assignments.add(new SimpleEntry(assignmentOperators.get(0), name)); - //change flag - flag = 1; - break checker; - } - } - //if a name is not related to assignment operator, add to arraylist(assignments) with null and its name - if (flag == 0) { - assignments.add(new SimpleEntry(null, name)); + if (oc.getKey() != null && oc.getKey().equals(nextOc.getKey())) { + Collections.swap(occurrencesWithAssignmentExp, i, i + 1); } } - - //swap the arraylist(assignments)'s elements, when it share same assignment operator - for (int i = 0; i < assignments.size() - 1; i++) { - if (assignments.get(i).getKey() != null - && assignments.get(i).getKey().equals(assignments.get(i + 1).getKey())) { - Collections.swap(assignments, i, i + 1); - } - } - //add sorted element from assignments(arraylist) to order(arraylist) - for (SimpleEntry<Node, NameOccurrence> tempPair : assignments) { - order.add(tempPair.getValue()); - } - //add access to the sorted arraylist - for (NameOccurrence orderedOccurrence : order) { - addAccess((JavaNameOccurrence) orderedOccurrence, inode); + + for (SimpleEntry<Node, NameOccurrence> oc : occurrencesWithAssignmentExp) { + addAccess((JavaNameOccurrence) oc.getValue(), inode); } } } From f9bb5b85a27871fc1cbdf9b1798832b252a9b71e Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Mon, 22 Jul 2019 19:34:02 +0200 Subject: [PATCH 333/371] [java] DataflowAnomalyAnalysis - add test case for #1749 --- .../errorprone/xml/DataflowAnomalyAnalysis.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml index 381dbcd8ff..620dfa4bc3 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml @@ -357,6 +357,23 @@ class Test{ Test2 test = new Test2() ; if( t1 == (t1 = test.simpleTest(t1))) ; } +} + ]]></code> + </test-code> + + <test-code> + <description>#1749 DD False Positive in DataflowAnomalyAnalysis</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>4</expected-linenumbers> + <expected-messages> + <message>Found 'DU'-anomaly for variable 'a' (lines '4'-'5').</message> + </expected-messages> + <code><![CDATA[ +public class Test { + public void test(){ + int a = 0; + a = a + 3; + } } ]]></code> </test-code> From 342f8482f5de94d3745f79b8d5edadb6073f1bd7 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Mon, 22 Jul 2019 20:05:12 +0200 Subject: [PATCH 334/371] Update release notes, fixes #1749, refs #1905 --- docs/pages/release_notes.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..cbd3cce72c 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,9 +16,14 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* java-errorprone + * [#1749](https://github.com/pmd/pmd/issues/1749): \[java] DD False Positive in DataflowAnomalyAnalysis + ### API Changes ### External Contributions +* [#1905](https://github.com/pmd/pmd/pull/1905): \[java] DataflowAnomalyAnalysis Rule in right order - [YoonhoChoi96](https://github.com/YoonhoChoi96) + {% endtocmaker %} From f7c16d4abc11d0feb7197cb25e7f2b50e0e7c43f Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Tue, 23 Jul 2019 20:12:37 +0200 Subject: [PATCH 335/371] [java] MissingStaticMethodInNonInstantiatableClass * Migrate to XPath 2.0 * Add property "annotations" --- .../resources/category/java/errorprone.xml | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 52de06fb82..90e199fc88 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -2408,35 +2408,45 @@ public class Foo implements java.io.Serializable { externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#missingstaticmethodinnoninstantiatableclass"> <description> A class that has private constructors and does not have any static methods or fields cannot be used. + +When one of the private constructors is annotated with one of the annotations, then the class is not considered +non-instantiatable anymore and no violation will be reported. +See the property `annotations`. </description> <priority>3</priority> <properties> + <property name="annotations" type="List[String]" delimiter="," value="org.springframework.beans.factory.annotation.Autowired, javax.inject.Inject" description="If a constructor is annotated with one of these annotations, then the class is ignored."/> + <property name="version" value="2.0"/> <property name="xpath"> <value> <![CDATA[ -//ClassOrInterfaceDeclaration[@Nested='false'] +//ClassOrInterfaceDeclaration[@Nested=false()] [ ( + (: at least one constructor :) ./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration and - count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) = count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Private='true']) + (: only private constructors :) + count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) = count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Private=true()]) and - not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration/ - ../Annotation/MarkerAnnotation/Name[pmd-java:typeIs('org.springframework.beans.factory.annotation.Autowired') or pmd-java:typeIs('javax.inject.Inject')]) + (: all constructors must not be annotated :) + (every $x in $annotations satisfies + not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration/ + ../Annotation/MarkerAnnotation/Name[pmd-java:typeIs($x)])) ) and - not(.//MethodDeclaration[@Static='true']) + not(.//MethodDeclaration[@Static=true()]) and - not(.//FieldDeclaration[@Private='false'][@Static='true']) + not(.//FieldDeclaration[@Private=false()][@Static=true()]) and - not(.//ClassOrInterfaceDeclaration[@Nested='true'] - [@Public='true'] - [@Static='true'] - [not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) or ./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Public='true']] + not(.//ClassOrInterfaceDeclaration[@Nested=true()] + [@Public=true()] + [@Static=true()] + [not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) or ./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Public=true()]] [./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/MethodDeclaration - [@Public='true'] + [@Public=true()] [./ResultType/Type/ReferenceType/ClassOrInterfaceType - [@Image = //ClassOrInterfaceDeclaration[@Nested='false']/@Image] + [@Image = //ClassOrInterfaceDeclaration[@Nested=false()]/@Image] ] ] ) From 189861656c42c0295bfb9393993b7ebe667ef758 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Tue, 23 Jul 2019 20:21:20 +0200 Subject: [PATCH 336/371] Update release notes, fixes #1832, refs #1916 --- docs/pages/release_notes.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index fe3d2aa4c7..d07faf3609 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -23,12 +23,22 @@ Being based on a proper Antlr grammar, CPD can: * ignore comments * honor [comment-based suppressions](pmd_userdocs_cpd.html#suppression) +#### Modified Rules + +* The Java rule {% rule "java/errorprone/MissingStaticMethodInNonInstantiatableClass" %} (`java-errorprone`) has now + the new property `annotations`. + When one of the private constructors is annotated with one of the annotations, then the class is not considered + non-instantiatable anymore and no violation will be reported. By default, Spring's `@Autowired` and + Java EE's `@Inject` annotations are recognized. + ### Fixed Issues * doc * [#1896](https://github.com/pmd/pmd/issues/1896): \[doc] Error in changelog 6.16.0 due to not properly closed rule tag * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" +* java-errorprone + * [#1832](https://github.com/pmd/pmd/issues/1832): \[java] False positives for MissingStaticMethodInNonInstantiatableClass when DI is used * xml * [#1666](https://github.com/pmd/pmd/issues/1666): \[xml] wrong cdata rule description and examples @@ -39,6 +49,7 @@ Being based on a proper Antlr grammar, CPD can: * [#1869](https://github.com/pmd/pmd/pull/1869): \[xml] fix #1666 wrong cdata rule description and examples - [Artem](https://github.com/KroArtem) * [#1892](https://github.com/pmd/pmd/pull/1892): \[lua] \[cpd] Added CPD support for Lua - [Maikel Steneker](https://github.com/maikelsteneker) * [#1908](https://github.com/pmd/pmd/pull/1908): \[doc] Update ruleset filename from deprecated basic.xml to quickstart.xml - [crunsk](https://github.com/crunsk) +* [#1916](https://github.com/pmd/pmd/pull/1916): \[java] Exclude Autowired and Inject for MissingStaticMethodInNonInstantiatableClass - [AnthonyKot](https://github.com/AnthonyKot) {% endtocmaker %} From f269b3dc3f57552bc3aa546ebe863d46040b129f Mon Sep 17 00:00:00 2001 From: "Travis CI (pmd-bot)" <andreas.dangel+pmd-bot@adangel.org> Date: Tue, 23 Jul 2019 18:51:13 +0000 Subject: [PATCH 337/371] Update documentation TRAVIS_JOB_NUMBER=3997.1 TRAVIS_COMMIT_RANGE=26e74b880e96...ca71d2fae4b3 --- docs/pages/pmd/rules/java.md | 2 +- docs/pages/pmd/rules/java/errorprone.md | 49 ++++++++++++++++++------- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 1b72fec5cc..8f699f323c 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -262,7 +262,7 @@ folder: pmd/rules * [MisplacedNullCheck](pmd_rules_java_errorprone.html#misplacednullcheck): The null check here is misplaced. If the variable is null a NullPointerException will be thrown.E... * [MissingBreakInSwitch](pmd_rules_java_errorprone.html#missingbreakinswitch): Switch statements without break or return statements for each case optionmay indicate problematic... * [MissingSerialVersionUID](pmd_rules_java_errorprone.html#missingserialversionuid): Serializable classes should provide a serialVersionUID field.The serialVersionUID field is also n... -* [MissingStaticMethodInNonInstantiatableClass](pmd_rules_java_errorprone.html#missingstaticmethodinnoninstantiatableclass): A class that has private constructors and does not have any static methods or fields cannot be used. +* [MissingStaticMethodInNonInstantiatableClass](pmd_rules_java_errorprone.html#missingstaticmethodinnoninstantiatableclass): A class that has private constructors and does not have any static methods or fields cannot be us... * [MoreThanOneLogger](pmd_rules_java_errorprone.html#morethanonelogger): Normally only one logger is used in each class. * [NonCaseLabelInSwitchStatement](pmd_rules_java_errorprone.html#noncaselabelinswitchstatement): A non-case label (e.g. a named break/continue label) was present in a switch statement.This legal... * [NonStaticInitializer](pmd_rules_java_errorprone.html#nonstaticinitializer): A non-static initializer block will be called any time a constructor is invoked (just prior toinv... diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index b60651b17d..4224dd971b 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -2620,31 +2620,39 @@ chain needs an own serialVersionUID field. See also [Should an abstract class ha A class that has private constructors and does not have any static methods or fields cannot be used. +When one of the private constructors is annotated with one of the annotations, then the class is not considered +non-instantiatable anymore and no violation will be reported. +See the property `annotations`. + **This rule is defined by the following XPath expression:** ``` xpath -//ClassOrInterfaceDeclaration[@Nested='false'] +//ClassOrInterfaceDeclaration[@Nested=false()] [ ( + (: at least one constructor :) ./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration and - count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) = count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Private='true']) + (: only private constructors :) + count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) = count(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Private=true()]) and - not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration/ - ../Annotation/MarkerAnnotation/Name[pmd-java:typeIs('org.springframework.beans.factory.annotation.Autowired') or pmd-java:typeIs('javax.inject.Inject')]) + (: all constructors must not be annotated :) + (every $x in $annotations satisfies + not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration/ + ../Annotation/MarkerAnnotation/Name[pmd-java:typeIs($x)])) ) and - not(.//MethodDeclaration[@Static='true']) + not(.//MethodDeclaration[@Static=true()]) and - not(.//FieldDeclaration[@Private='false'][@Static='true']) + not(.//FieldDeclaration[@Private=false()][@Static=true()]) and - not(.//ClassOrInterfaceDeclaration[@Nested='true'] - [@Public='true'] - [@Static='true'] - [not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) or ./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Public='true']] + not(.//ClassOrInterfaceDeclaration[@Nested=true()] + [@Public=true()] + [@Static=true()] + [not(./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration) or ./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Public=true()]] [./ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/MethodDeclaration - [@Public='true'] + [@Public=true()] [./ResultType/Type/ReferenceType/ClassOrInterfaceType - [@Image = //ClassOrInterfaceDeclaration[@Nested='false']/@Image] + [@Image = //ClassOrInterfaceDeclaration[@Nested=false()]/@Image] ] ] ) @@ -2664,11 +2672,26 @@ public class Foo { }{%endraw%} ``` -**Use this rule by referencing it:** +**This rule has the following properties:** + +|Name|Default Value|Description|Multivalued| +|----|-------------|-----------|-----------| +|annotations|org.springframework.beans.factory.annotation.Autowired , javax.inject.Inject|If a constructor is annotated with one of these annotations, then the class is ignored.|yes. Delimiter is ','.| + +**Use this rule with the default properties by just referencing it:** ``` xml <rule ref="category/java/errorprone.xml/MissingStaticMethodInNonInstantiatableClass" /> ``` +**Use this rule and customize it:** +``` xml +<rule ref="category/java/errorprone.xml/MissingStaticMethodInNonInstantiatableClass"> + <properties> + <property name="annotations" value="org.springframework.beans.factory.annotation.Autowired, javax.inject.Inject" /> + </properties> +</rule> +``` + ## MoreThanOneLogger **Since:** PMD 2.0 From f1fb425313f1abdb7e7744a3e54206b1a5758220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 25 Jul 2019 02:41:33 +0200 Subject: [PATCH 338/371] Improve UseLocaleWithCaseConversions doc based on #1929 --- .../resources/category/java/errorprone.xml | 41 ++++++++++++------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 90e199fc88..74e40ae08e 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -3421,8 +3421,19 @@ class Test { class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#uselocalewithcaseconversions"> <description> -When doing String.toLowerCase()/toUpperCase() conversions, use Locales to avoids problems with languages that -have unusual conventions, i.e. Turkish. + When doing `String::toLowerCase()/toUpperCase()` conversions, use an explicit locale argument to specify the case transformation rules. + + Using `String::toLowerCase()` without arguments implicitly uses `Locale::getDefault()`. + The problem is that the default locale depends on the current JVM setup (and usually on the system in which it is running). + Using the system default may be exactly what you want (e.g. if you are manipulating strings you got through standard input), + but it may as well not be the case (e.g. if you are getting the string over the network or a file, and the encoding is well-defined + and independent of the environment). In the latter case, using the default locale makes the case transformation brittle, as + it may yield unexpected results on a machine whose locale has other case translation rules. For example, in Turkish, the + uppercase form of `i` is `İ` (U+0130, not ASCII) and not `I` (U+0049) as in English. + + The rule is intended to *force* developers to think about locales when dealing with strings. By taking a conscious decision about + the choice of locale at the time of writing, you reduce the risk of surprising behaviour down the line, and communicate your intent + to future readers. </description> <priority>3</priority> <properties> @@ -3448,20 +3459,20 @@ PrimarySuffix </properties> <example> <![CDATA[ -class Foo { - // BAD - if (x.toLowerCase().equals("list")) { } +// violation - implicitly system-dependent conversion +if (x.toLowerCase().equals("list")) {} - /* - * This will not match "LIST" when in Turkish locale - * The above could be - * if (x.toLowerCase(Locale.US).equals("list")) { } - * or simply - * if (x.equalsIgnoreCase("list")) { } - */ - // GOOD - String z = a.toLowerCase(Locale.EN); -} +// The above will not match "LIST" on a system with a Turkish locale. +// It could be replaced with +if (x.toLowerCase(Locale.US).equals("list")) { } +// or simply +if (x.equalsIgnoreCase("list")) { } + +// ok - system independent conversion +String z = a.toLowerCase(Locale.ROOT); + +// ok - explicit system-dependent conversion +String z2 = a.toLowerCase(Locale.getDefault()); ]]> </example> </rule> From b416df404d83dcb25327af16cfa5a6a2fc27f8cf Mon Sep 17 00:00:00 2001 From: "Travis CI (pmd-bot)" <andreas.dangel+pmd-bot@adangel.org> Date: Thu, 25 Jul 2019 01:00:55 +0000 Subject: [PATCH 339/371] Update documentation TRAVIS_JOB_NUMBER=4001.1 TRAVIS_COMMIT_RANGE=f269b3dc3f57...f1fb425313f1 --- docs/pages/pmd/rules/java.md | 2 +- docs/pages/pmd/rules/java/errorprone.md | 41 ++++++++++++++++--------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/docs/pages/pmd/rules/java.md b/docs/pages/pmd/rules/java.md index 8f699f323c..c293956270 100644 --- a/docs/pages/pmd/rules/java.md +++ b/docs/pages/pmd/rules/java.md @@ -289,7 +289,7 @@ folder: pmd/rules * [UseCorrectExceptionLogging](pmd_rules_java_errorprone.html#usecorrectexceptionlogging): To make sure the full stacktrace is printed out, use the logging statement with two arguments: a ... * [UseEqualsToCompareStrings](pmd_rules_java_errorprone.html#useequalstocomparestrings): Using '==' or '!=' to compare strings only works if intern version is used on both sides.Use the ... * [UselessOperationOnImmutable](pmd_rules_java_errorprone.html#uselessoperationonimmutable): An operation on an Immutable object (String, BigDecimal or BigInteger) won't change the object it... -* [UseLocaleWithCaseConversions](pmd_rules_java_errorprone.html#uselocalewithcaseconversions): When doing String.toLowerCase()/toUpperCase() conversions, use Locales to avoids problems with la... +* [UseLocaleWithCaseConversions](pmd_rules_java_errorprone.html#uselocalewithcaseconversions): When doing 'String::toLowerCase()/toUpperCase()' conversions, use an explicit locale argument to ... * [UseProperClassLoader](pmd_rules_java_errorprone.html#useproperclassloader): In J2EE, the getClassLoader() method might not work as expected. Use Thread.currentThread().getCo... ## Multithreading diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index 4224dd971b..8715d96337 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -3686,8 +3686,19 @@ class Test { **Priority:** Medium (3) -When doing String.toLowerCase()/toUpperCase() conversions, use Locales to avoids problems with languages that -have unusual conventions, i.e. Turkish. +When doing `String::toLowerCase()/toUpperCase()` conversions, use an explicit locale argument to specify the case transformation rules. + +Using `String::toLowerCase()` without arguments implicitly uses `Locale::getDefault()`. +The problem is that the default locale depends on the current JVM setup (and usually on the system in which it is running). +Using the system default may be exactly what you want (e.g. if you are manipulating strings you got through standard input), +but it may as well not be the case (e.g. if you are getting the string over the network or a file, and the encoding is well-defined +and independent of the environment). In the latter case, using the default locale makes the case transformation brittle, as +it may yield unexpected results on a machine whose locale has other case translation rules. For example, in Turkish, the +uppercase form of `i` is `İ` (U+0130, not ASCII) and not `I` (U+0049) as in English. + +The rule is intended to *force* developers to think about locales when dealing with strings. By taking a conscious decision about +the choice of locale at the time of writing, you reduce the risk of surprising behaviour down the line, and communicate your intent +to future readers. **This rule is defined by the following XPath expression:** ``` xpath @@ -3709,20 +3720,20 @@ PrimarySuffix **Example(s):** ``` java -{%raw%}class Foo { - // BAD - if (x.toLowerCase().equals("list")) { } +{%raw%}// violation - implicitly system-dependent conversion +if (x.toLowerCase().equals("list")) {} - /* - * This will not match "LIST" when in Turkish locale - * The above could be - * if (x.toLowerCase(Locale.US).equals("list")) { } - * or simply - * if (x.equalsIgnoreCase("list")) { } - */ - // GOOD - String z = a.toLowerCase(Locale.EN); -}{%endraw%} +// The above will not match "LIST" on a system with a Turkish locale. +// It could be replaced with +if (x.toLowerCase(Locale.US).equals("list")) { } +// or simply +if (x.equalsIgnoreCase("list")) { } + +// ok - system independent conversion +String z = a.toLowerCase(Locale.ROOT); + +// ok - explicit system-dependent conversion +String z2 = a.toLowerCase(Locale.getDefault());{%endraw%} ``` **Use this rule by referencing it:** From 49d2a585568b0a4f0b2743de4b8e00a40c23b2c0 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 27 Jul 2019 09:44:22 +0200 Subject: [PATCH 340/371] Update pmd-designer to 6.17.0 --- docs/pages/release_notes.md | 8 +++++++- pom.xml | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 02f839df42..78cf620b7c 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,6 +14,12 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Updated PMD Designer + +This PMD release ships a new version of the pmd-designer. +For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/6.17.0). +It contains a new feature to edit test cases directly within the designer. Any feedback is highly appreciated. + #### Lua support Thanks to the contribution from [Maikel Steneker](https://github.com/maikelsteneker), and built on top of the ongoing efforts to fully support Antlr-based languages, @@ -25,7 +31,7 @@ Being based on a proper Antlr grammar, CPD can: #### Modified Rules -* The Java rule {% rule "java/errorprone/CloseResource" %} [`java-errorprone`] now ignores by default +* The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) now ignores by default `java.io.ByteArrayInputStream`. Such streams do not need to be closed. * The Java rule {% rule "java/errorprone/MissingStaticMethodInNonInstantiatableClass" %} (`java-errorprone`) has now diff --git a/pom.xml b/pom.xml index 71fd902efa..4045e6582f 100644 --- a/pom.xml +++ b/pom.xml @@ -285,7 +285,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <pmd.build-tools.version>3</pmd.build-tools.version> - <pmd-designer.version>6.16.0</pmd-designer.version> + <pmd-designer.version>6.17.0</pmd-designer.version> </properties> <build> From aa55a0108c5d6eccc64bdbd91c7e8f1494d7dfb7 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 27 Jul 2019 10:27:18 +0200 Subject: [PATCH 341/371] [java] CloseResource: ignore java.io.CharArrayWriter by default Refs #1928 --- docs/pages/release_notes.md | 4 ++-- .../rule/errorprone/CloseResourceRule.java | 3 ++- .../rule/errorprone/xml/CloseResource.xml | 24 +++++++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 78cf620b7c..33624df787 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -31,8 +31,8 @@ Being based on a proper Antlr grammar, CPD can: #### Modified Rules -* The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) now ignores by default - `java.io.ByteArrayInputStream`. Such streams do not need to be closed. +* The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) ignores now by default + `java.io.ByteArrayInputStream` and `java.io.CharArrayWriter`. Such streams/writers do not need to be closed. * The Java rule {% rule "java/errorprone/MissingStaticMethodInNonInstantiatableClass" %} (`java-errorprone`) has now the new property `annotations`. diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index a3c9740f56..a9cad8b0ac 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -88,7 +88,8 @@ public class CloseResourceRule extends AbstractJavaRule { private static final PropertyDescriptor<List<String>> ALLOWED_RESOURCE_TYPES = stringListProperty("allowedResourceTypes") .desc("Exact class names that do not need to be closed") - .defaultValues("java.io.ByteArrayOutputStream", "java.io.ByteArrayInputStream", "java.io.StringWriter") + .defaultValues("java.io.ByteArrayOutputStream", "java.io.ByteArrayInputStream", "java.io.StringWriter", + "java.io.CharArrayWriter") .build(); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 5f8c0beccc..008b5521b0 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -876,6 +876,30 @@ public class CloseResourceWithExceptions { ]]></code> </test-code> + <test-code> + <description>CharArrayWriter does not need closing</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +import java.io.Writer; +import java.io.CharArrayWriter; +import java.io.IOException; + +public class CloseResourceWithExceptions { + + public char[] bar() { + /*CharArray*/Writer buffer = new CharArrayWriter(); + try { + buffer.append("foo"); + return buffer.toCharArray(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return null; + } +} + ]]></code> + </test-code> + <test-code> <description>A custom StringWriter does need closing</description> <expected-problems>1</expected-problems> From 01c8a271222840053d9e1e28f2717b14c43cf518 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 27 Jul 2019 10:39:39 +0200 Subject: [PATCH 342/371] [doc] Update generated rule documentation --- docs/pages/pmd/rules/java/errorprone.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/pmd/rules/java/errorprone.md b/docs/pages/pmd/rules/java/errorprone.md index 8715d96337..5998b4fab6 100644 --- a/docs/pages/pmd/rules/java/errorprone.md +++ b/docs/pages/pmd/rules/java/errorprone.md @@ -1213,7 +1213,7 @@ just remove "AutoCloseable" from the types. |closeTargets||Methods which may close this resource|yes. Delimiter is ','.| |types|java.lang.AutoCloseable , java.sql.Connection , java.sql.Statement , java.sql.ResultSet|Affected types|yes. Delimiter is ','.| |closeAsDefaultTarget|true|Consider 'close' as a target by default|no| -|allowedResourceTypes|java.io.ByteArrayOutputStream \| java.io.ByteArrayInputStream \| java.io.StringWriter|Exact class names that do not need to be closed|yes. Delimiter is '\|'.| +|allowedResourceTypes|java.io.ByteArrayOutputStream \| java.io.ByteArrayInputStream \| java.io.StringWriter \| java.io.CharArrayWriter|Exact class names that do not need to be closed|yes. Delimiter is '\|'.| **Use this rule with the default properties by just referencing it:** ``` xml @@ -1227,7 +1227,7 @@ just remove "AutoCloseable" from the types. <property name="closeTargets" value="" /> <property name="types" value="java.lang.AutoCloseable,java.sql.Connection,java.sql.Statement,java.sql.ResultSet" /> <property name="closeAsDefaultTarget" value="true" /> - <property name="allowedResourceTypes" value="java.io.ByteArrayOutputStream|java.io.ByteArrayInputStream|java.io.StringWriter" /> + <property name="allowedResourceTypes" value="java.io.ByteArrayOutputStream|java.io.ByteArrayInputStream|java.io.StringWriter|java.io.CharArrayWriter" /> </properties> </rule> ``` From a8d277a02aba881078742ab2b87dd729fe3f449a Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 28 Jul 2019 10:15:10 +0200 Subject: [PATCH 343/371] Prepare pmd release 6.17.0 --- docs/_config.yml | 2 +- docs/pages/next_major_development.md | 4 ++++ docs/pages/release_notes.md | 2 -- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index e72b65f35a..c428074d93 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -3,7 +3,7 @@ repository: pmd/pmd pmd: version: 6.17.0 previous_version: 6.16.0 - date: ??-July-2019 + date: 28-July-2019 release_type: minor # release types: major, minor, bugfix diff --git a/docs/pages/next_major_development.md b/docs/pages/next_major_development.md index d2e0840206..a979294adf 100644 --- a/docs/pages/next_major_development.md +++ b/docs/pages/next_major_development.md @@ -73,6 +73,10 @@ the breaking API changes will be performed in 7.0.0. an API is tagged as `@Deprecated` or not in the latest minor release. During the development of 7.0.0, we may decide to remove some APIs that were not tagged as deprecated, though we'll try to avoid it." %} +#### 6.17.0 + +No changes. + #### 6.16.0 ##### Deprecated APIs diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 33624df787..6fbecd3811 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -62,8 +62,6 @@ Being based on a proper Antlr grammar, CPD can: * xml * [#1666](https://github.com/pmd/pmd/issues/1666): \[xml] wrong cdata rule description and examples -### API Changes - ### External Contributions * [#1869](https://github.com/pmd/pmd/pull/1869): \[xml] fix #1666 wrong cdata rule description and examples - [Artem](https://github.com/KroArtem) From 365e1c9e8bcabcc3d799ca444a9d8a258866549e Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 28 Jul 2019 10:24:43 +0200 Subject: [PATCH 344/371] [maven-release-plugin] prepare release pmd_releases/6.17.0 --- pmd-apex-jorje/pom.xml | 2 +- pmd-apex/pom.xml | 2 +- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dart/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-doc/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-groovy/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-kotlin/pom.xml | 2 +- pmd-lang-test/pom.xml | 2 +- pmd-lua/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-perl/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-visualforce/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 32 files changed, 33 insertions(+), 33 deletions(-) diff --git a/pmd-apex-jorje/pom.xml b/pmd-apex-jorje/pom.xml index fc096ae970..2215a9b09e 100644 --- a/pmd-apex-jorje/pom.xml +++ b/pmd-apex-jorje/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <properties> diff --git a/pmd-apex/pom.xml b/pmd-apex/pom.xml index 3f7204095f..d3276ac3e3 100644 --- a/pmd-apex/pom.xml +++ b/pmd-apex/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <properties> diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index e5c36bdd33..db0d54f103 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index 1c544d5fd3..881088367d 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index c158bb1cf6..2860fb9fcd 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-dart/pom.xml b/pmd-dart/pom.xml index 9e3967ee4c..f82af30a19 100644 --- a/pmd-dart/pom.xml +++ b/pmd-dart/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 5538c8e402..9cc87433c2 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <properties> diff --git a/pmd-doc/pom.xml b/pmd-doc/pom.xml index eb26c4c980..14fc649b4b 100644 --- a/pmd-doc/pom.xml +++ b/pmd-doc/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <properties> diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index d180c4bbed..2cbbe08807 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index 5b2f85b429..277f00c79b 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-groovy/pom.xml b/pmd-groovy/pom.xml index 26cbc9832a..29a7aff926 100644 --- a/pmd-groovy/pom.xml +++ b/pmd-groovy/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index 2213df1538..a7fc6ca904 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index ca34c630b8..7c6c4d4d87 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <properties> diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index ab05feefe0..7e32369898 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 1f4fe8dc29..1961fe3cea 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index db9b4710f7..725148b0d8 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml index 993bacd4b3..d3e9a3d56e 100644 --- a/pmd-lang-test/pom.xml +++ b/pmd-lang-test/pom.xml @@ -12,7 +12,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-lua/pom.xml b/pmd-lua/pom.xml index a67b0556e5..c0e3475992 100644 --- a/pmd-lua/pom.xml +++ b/pmd-lua/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index b2167a5daf..6a7ac31771 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index d3da39e300..86d79a5793 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml index 9f6c8dcc38..cfeddcd946 100644 --- a/pmd-perl/pom.xml +++ b/pmd-perl/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index 2b5e989163..974e51042f 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index f6f82b1dce..693519779f 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index 09f8a3de02..c7e5908b93 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index 72b40cb720..a93530c851 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <dependencies> diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index d5eff767b3..36e897a948 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <properties> diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 3be97f4d3b..a7d2fd39b4 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index 0bf33fe77a..4fb36871f9 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <dependencies> diff --git a/pmd-visualforce/pom.xml b/pmd-visualforce/pom.xml index ff9e531d6d..e5a5f84a26 100644 --- a/pmd-visualforce/pom.xml +++ b/pmd-visualforce/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index 72407cf8c5..05d1c42e07 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index 2ec3dc6ecd..b6b4600055 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> </parent> <build> diff --git a/pom.xml b/pom.xml index 4045e6582f..c344a81a25 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0-SNAPSHOT</version> + <version>6.17.0</version> <packaging>pom</packaging> <name>PMD</name> @@ -234,7 +234,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <connection>scm:git:git://github.com/pmd/pmd.git</connection> <developerConnection>scm:git:ssh://git@github.com/pmd/pmd.git</developerConnection> <url>https://github.com/pmd/pmd</url> - <tag>HEAD</tag> + <tag>pmd_releases/6.17.0</tag> </scm> <distributionManagement> <snapshotRepository> From 7a7971f64d7f9c36af6813e27997536e20d944e4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 28 Jul 2019 10:24:51 +0200 Subject: [PATCH 345/371] [maven-release-plugin] prepare for next development iteration --- pmd-apex-jorje/pom.xml | 2 +- pmd-apex/pom.xml | 2 +- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dart/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-doc/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-groovy/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-kotlin/pom.xml | 2 +- pmd-lang-test/pom.xml | 2 +- pmd-lua/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-perl/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-visualforce/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 32 files changed, 33 insertions(+), 33 deletions(-) diff --git a/pmd-apex-jorje/pom.xml b/pmd-apex-jorje/pom.xml index 2215a9b09e..926f343aca 100644 --- a/pmd-apex-jorje/pom.xml +++ b/pmd-apex-jorje/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-apex/pom.xml b/pmd-apex/pom.xml index d3276ac3e3..e93f196b8f 100644 --- a/pmd-apex/pom.xml +++ b/pmd-apex/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index db0d54f103..68c9df4625 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index 881088367d..1470e1a698 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index 2860fb9fcd..aeb904f919 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-dart/pom.xml b/pmd-dart/pom.xml index f82af30a19..5b9c96f0e7 100644 --- a/pmd-dart/pom.xml +++ b/pmd-dart/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 9cc87433c2..15e1d74bfa 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-doc/pom.xml b/pmd-doc/pom.xml index 14fc649b4b..2a351f112e 100644 --- a/pmd-doc/pom.xml +++ b/pmd-doc/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index 2cbbe08807..151c1b61ac 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index 277f00c79b..9c9c0316be 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-groovy/pom.xml b/pmd-groovy/pom.xml index 29a7aff926..ce66110735 100644 --- a/pmd-groovy/pom.xml +++ b/pmd-groovy/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index a7fc6ca904..2479508fbc 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index 7c6c4d4d87..1cc7adb758 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index 7e32369898..3e8893f007 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 1961fe3cea..c5088a0b8a 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index 725148b0d8..a29eba4f87 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml index d3e9a3d56e..c1a03ab2c7 100644 --- a/pmd-lang-test/pom.xml +++ b/pmd-lang-test/pom.xml @@ -12,7 +12,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-lua/pom.xml b/pmd-lua/pom.xml index c0e3475992..d5d31e9a77 100644 --- a/pmd-lua/pom.xml +++ b/pmd-lua/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index 6a7ac31771..2b2caf0b61 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index 86d79a5793..0355d93afa 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml index cfeddcd946..5918ef27c6 100644 --- a/pmd-perl/pom.xml +++ b/pmd-perl/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index 974e51042f..46596427b8 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index 693519779f..9f6ded833c 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index c7e5908b93..066e1c1ac5 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index a93530c851..40c08285dd 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <dependencies> diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index 36e897a948..5b647f0191 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <properties> diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index a7d2fd39b4..5d85201840 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index 4fb36871f9..5118662809 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -8,7 +8,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <dependencies> diff --git a/pmd-visualforce/pom.xml b/pmd-visualforce/pom.xml index e5a5f84a26..a87ccb0b6b 100644 --- a/pmd-visualforce/pom.xml +++ b/pmd-visualforce/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index 05d1c42e07..c09cd94bd8 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index b6b4600055..b4d4d1a887 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> </parent> <build> diff --git a/pom.xml b/pom.xml index c344a81a25..7ec756ec8e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.17.0</version> + <version>6.18.0-SNAPSHOT</version> <packaging>pom</packaging> <name>PMD</name> @@ -234,7 +234,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <connection>scm:git:git://github.com/pmd/pmd.git</connection> <developerConnection>scm:git:ssh://git@github.com/pmd/pmd.git</developerConnection> <url>https://github.com/pmd/pmd</url> - <tag>pmd_releases/6.17.0</tag> + <tag>HEAD</tag> </scm> <distributionManagement> <snapshotRepository> From a651514e567145dc48643a0f5a7351ce5ed5b2d4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 28 Jul 2019 10:28:43 +0200 Subject: [PATCH 346/371] Prepare next development version --- docs/_config.yml | 6 +-- docs/pages/release_notes.md | 53 +---------------------- docs/pages/release_notes_old.md | 74 +++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 55 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index c428074d93..ff47ffbc19 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,9 +1,9 @@ repository: pmd/pmd pmd: - version: 6.17.0 - previous_version: 6.16.0 - date: 28-July-2019 + version: 6.18.0 + previous_version: 6.17.0 + date: ??-August-2019 release_type: minor # release types: major, minor, bugfix diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 6fbecd3811..b8f8783555 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,62 +14,11 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy -#### Updated PMD Designer - -This PMD release ships a new version of the pmd-designer. -For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/6.17.0). -It contains a new feature to edit test cases directly within the designer. Any feedback is highly appreciated. - -#### Lua support - -Thanks to the contribution from [Maikel Steneker](https://github.com/maikelsteneker), and built on top of the ongoing efforts to fully support Antlr-based languages, -PMD now has CPD support for [Lua](https://www.lua.org/). - -Being based on a proper Antlr grammar, CPD can: -* ignore comments -* honor [comment-based suppressions](pmd_userdocs_cpd.html#suppression) - -#### Modified Rules - -* The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) ignores now by default - `java.io.ByteArrayInputStream` and `java.io.CharArrayWriter`. Such streams/writers do not need to be closed. - -* The Java rule {% rule "java/errorprone/MissingStaticMethodInNonInstantiatableClass" %} (`java-errorprone`) has now - the new property `annotations`. - When one of the private constructors is annotated with one of the annotations, then the class is not considered - non-instantiatable anymore and no violation will be reported. By default, Spring's `@Autowired` and - Java EE's `@Inject` annotations are recognized. - ### Fixed Issues -* core - * [#1913](https://github.com/pmd/pmd/issues/1913): \[core] "-help" CLI option ends with status code != 0 -* doc - * [#1896](https://github.com/pmd/pmd/issues/1896): \[doc] Error in changelog 6.16.0 due to not properly closed rule tag - * [#1898](https://github.com/pmd/pmd/issues/1898): \[doc] Incorrect code example for DoubleBraceInitialization in documentation on website - * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages - * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" -* java - * [#1910](https://github.com/pmd/pmd/issues/1910): \[java] ATFD calculation problem -* java-errorprone - * [#1749](https://github.com/pmd/pmd/issues/1749): \[java] DD False Positive in DataflowAnomalyAnalysis - * [#1832](https://github.com/pmd/pmd/issues/1832): \[java] False positives for MissingStaticMethodInNonInstantiatableClass when DI is used - * [#1921](https://github.com/pmd/pmd/issues/1921): \[java] CloseResource false positive with ByteArrayInputStream -* java-multithreading - * [#1903](https://github.com/pmd/pmd/issues/1903): \[java] UnsynchronizedStaticFormatter doesn't allow block-level synchronization when using allowMethodLevelSynchronization=true -* plsql - * [#1902](https://github.com/pmd/pmd/issues/1902): \[pslql] ParseException when parsing (+) -* xml - * [#1666](https://github.com/pmd/pmd/issues/1666): \[xml] wrong cdata rule description and examples +### API Changes ### External Contributions -* [#1869](https://github.com/pmd/pmd/pull/1869): \[xml] fix #1666 wrong cdata rule description and examples - [Artem](https://github.com/KroArtem) -* [#1892](https://github.com/pmd/pmd/pull/1892): \[lua] \[cpd] Added CPD support for Lua - [Maikel Steneker](https://github.com/maikelsteneker) -* [#1905](https://github.com/pmd/pmd/pull/1905): \[java] DataflowAnomalyAnalysis Rule in right order - [YoonhoChoi96](https://github.com/YoonhoChoi96) -* [#1908](https://github.com/pmd/pmd/pull/1908): \[doc] Update ruleset filename from deprecated basic.xml to quickstart.xml - [crunsk](https://github.com/crunsk) -* [#1916](https://github.com/pmd/pmd/pull/1916): \[java] Exclude Autowired and Inject for MissingStaticMethodInNonInstantiatableClass - [AnthonyKot](https://github.com/AnthonyKot) -* [#1917](https://github.com/pmd/pmd/pull/1917): \[core] Add 'no error' return option, and assign it to the cli when the help command is invoked - [Renato Oliveira](https://github.com/renatoliveira) - {% endtocmaker %} diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md index 477d4a430d..2a8f8b20ac 100644 --- a/docs/pages/release_notes_old.md +++ b/docs/pages/release_notes_old.md @@ -5,6 +5,80 @@ permalink: pmd_release_notes_old.html Previous versions of PMD can be downloaded here: https://github.com/pmd/pmd/releases +## 28-July-2019 - 6.17.0 + +The PMD team is pleased to announce PMD 6.17.0. + +This is a minor release. + +### Table Of Contents + +* [New and noteworthy](#new-and-noteworthy) + * [Updated PMD Designer](#updated-pmd-designer) + * [Lua support](#lua-support) + * [Modified Rules](#modified-rules) +* [Fixed Issues](#fixed-issues) +* [External Contributions](#external-contributions) + +### New and noteworthy + +#### Updated PMD Designer + +This PMD release ships a new version of the pmd-designer. +For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/6.17.0). +It contains a new feature to edit test cases directly within the designer. Any feedback is highly appreciated. + +#### Lua support + +Thanks to the contribution from [Maikel Steneker](https://github.com/maikelsteneker), and built on top of the ongoing efforts to fully support Antlr-based languages, +PMD now has CPD support for [Lua](https://www.lua.org/). + +Being based on a proper Antlr grammar, CPD can: +* ignore comments +* honor [comment-based suppressions](pmd_userdocs_cpd.html#suppression) + +#### Modified Rules + +* The Java rule [`CloseResource`](https://pmd.github.io/pmd-6.17.0/pmd_rules_java_errorprone.html#closeresource) (`java-errorprone`) ignores now by default + `java.io.ByteArrayInputStream` and `java.io.CharArrayWriter`. Such streams/writers do not need to be closed. + +* The Java rule [`MissingStaticMethodInNonInstantiatableClass`](https://pmd.github.io/pmd-6.17.0/pmd_rules_java_errorprone.html#missingstaticmethodinnoninstantiatableclass) (`java-errorprone`) has now + the new property `annotations`. + When one of the private constructors is annotated with one of the annotations, then the class is not considered + non-instantiatable anymore and no violation will be reported. By default, Spring's `@Autowired` and + Java EE's `@Inject` annotations are recognized. + +### Fixed Issues + +* core + * [#1913](https://github.com/pmd/pmd/issues/1913): \[core] "-help" CLI option ends with status code != 0 +* doc + * [#1896](https://github.com/pmd/pmd/issues/1896): \[doc] Error in changelog 6.16.0 due to not properly closed rule tag + * [#1898](https://github.com/pmd/pmd/issues/1898): \[doc] Incorrect code example for DoubleBraceInitialization in documentation on website + * [#1906](https://github.com/pmd/pmd/issues/1906): \[doc] Broken link for adding own CPD languages + * [#1909](https://github.com/pmd/pmd/issues/1909): \[doc] Sample usage example refers to deprecated ruleset "basic.xml" instead of "quickstart.xml" +* java + * [#1910](https://github.com/pmd/pmd/issues/1910): \[java] ATFD calculation problem +* java-errorprone + * [#1749](https://github.com/pmd/pmd/issues/1749): \[java] DD False Positive in DataflowAnomalyAnalysis + * [#1832](https://github.com/pmd/pmd/issues/1832): \[java] False positives for MissingStaticMethodInNonInstantiatableClass when DI is used + * [#1921](https://github.com/pmd/pmd/issues/1921): \[java] CloseResource false positive with ByteArrayInputStream +* java-multithreading + * [#1903](https://github.com/pmd/pmd/issues/1903): \[java] UnsynchronizedStaticFormatter doesn't allow block-level synchronization when using allowMethodLevelSynchronization=true +* plsql + * [#1902](https://github.com/pmd/pmd/issues/1902): \[pslql] ParseException when parsing (+) +* xml + * [#1666](https://github.com/pmd/pmd/issues/1666): \[xml] wrong cdata rule description and examples + +### External Contributions + +* [#1869](https://github.com/pmd/pmd/pull/1869): \[xml] fix #1666 wrong cdata rule description and examples - [Artem](https://github.com/KroArtem) +* [#1892](https://github.com/pmd/pmd/pull/1892): \[lua] \[cpd] Added CPD support for Lua - [Maikel Steneker](https://github.com/maikelsteneker) +* [#1905](https://github.com/pmd/pmd/pull/1905): \[java] DataflowAnomalyAnalysis Rule in right order - [YoonhoChoi96](https://github.com/YoonhoChoi96) +* [#1908](https://github.com/pmd/pmd/pull/1908): \[doc] Update ruleset filename from deprecated basic.xml to quickstart.xml - [crunsk](https://github.com/crunsk) +* [#1916](https://github.com/pmd/pmd/pull/1916): \[java] Exclude Autowired and Inject for MissingStaticMethodInNonInstantiatableClass - [AnthonyKot](https://github.com/AnthonyKot) +* [#1917](https://github.com/pmd/pmd/pull/1917): \[core] Add 'no error' return option, and assign it to the cli when the help command is invoked - [Renato Oliveira](https://github.com/renatoliveira) + ## 30-June-2019 - 6.16.0 The PMD team is pleased to announce PMD 6.16.0. From 295759456dacef3b3a3f9e5510f035b56d827f65 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 28 Jul 2019 18:35:12 +0200 Subject: [PATCH 347/371] [java] Deprecate ASTImportDeclaration#getPackage(), refs #1888 --- docs/pages/release_notes.md | 7 +++++++ .../pmd/lang/java/ast/ASTImportDeclaration.java | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..5f63319150 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -18,6 +18,13 @@ This is a {{ site.pmd.release_type }} release. ### API Changes +#### Deprecated APIs + +##### For removal + +* The method {% jdoc java::ast.ASTImportDeclaration#getPackage() %} has been deprecated and + will be removed with PMD 7.0.0. + ### External Contributions {% endtocmaker %} diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java index e75f57f64f..8e1dc8cd55 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java @@ -153,9 +153,10 @@ public class ASTImportDeclaration extends AbstractJavaTypeNode { * type or method imported by this declaration. This may be null if the * auxclasspath is not correctly set, as this method depends on correct * type resolution. + * + * @deprecated this will be removed with PMD 7.0.0 */ - // TODO deprecate? This is only used in a test. I don't think it's really - // useful and it gives work to ClassTypeResolver. + @Deprecated public Package getPackage() { return this.pkg; } From d1a5cb36eb21326accf61aef0b2113ebbc5d650a Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 28 Jul 2019 18:36:35 +0200 Subject: [PATCH 348/371] Fix build --- pmd-lua/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-lua/pom.xml b/pmd-lua/pom.xml index d5d31e9a77..88a46ec574 100644 --- a/pmd-lua/pom.xml +++ b/pmd-lua/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> - <version>6.18.0-SNAPSHOT</version> + <version>7.0.0-SNAPSHOT</version> </parent> <build> From d935db0a6d293532c4beb684bb7abc8715c589e1 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Mon, 29 Jul 2019 19:50:26 +0200 Subject: [PATCH 349/371] Cleanup developers list in pom.xml. The contributors can easily be retrieved at https://github.com/pmd/pmd/graphs/contributors --- pom.xml | 199 +++----------------------------------------------------- 1 file changed, 10 insertions(+), 189 deletions(-) diff --git a/pom.xml b/pom.xml index 7ec756ec8e..8fb1bbbbdc 100644 --- a/pom.xml +++ b/pom.xml @@ -8,9 +8,13 @@ <name>PMD</name> <description> -PMD is a source code analyzer. It finds common programming flaws like unused variables, empty catch blocks, unnecessary object creation, and so forth. It supports Java, JavaScript, Salesforce.com Apex, PLSQL, Salesforce.com Visualforce, Apache Velocity, XML, XSL. +PMD is a source code analyzer. It finds common programming flaws like unused variables, empty catch blocks, +unnecessary object creation, and so forth. It supports Java, JavaScript, Salesforce.com Apex, PLSQL, +Salesforce.com Visualforce, Apache Velocity, XML, XSL. -Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code in Java, C, C++, C#, Groovy, PHP, Ruby, Fortran, JavaScript, PLSQL, Apache Velocity, Scala, Objective C, Matlab, Python, Go, Swift and Salesforce.com Apex. +Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code in Java, C, C++, C#, +Groovy, PHP, Ruby, Fortran, JavaScript, PLSQL, Apache Velocity, Scala, Objective C, Matlab, Python, +Go, Swift and Salesforce.com Apex. </description> <url>https://pmd.github.io/</url> @@ -41,193 +45,10 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code </mailingLists> <developers> <developer> - <id>tomcopeland</id> - <name>Tom Copeland</name> - <email>tom@infoether.com</email> - <organization>InfoEther</organization> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>dpeugh</id> - <name>David Dixon-Peugh</name> - <email>ddp@apache.org</email> - <organization>Lockheed Martin Corporation</organization> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>olemartin</id> - <name>Ole-Martin Mork</name> - <email>olemartin@users.sourceforge.net</email> - <organization>Bekk Consulting</organization> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>mikkey</id> - <name>Miguel Griffa</name> - <email>mikkey@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>phherlin</id> - <name>Philippe Herlin</name> - <email>phherlin@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>jigerjava</id> - <name>Jiger Patel</name> - <email>jigerjava@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>kubacki</id> - <name>Radim Kubacki</name> - <email>kubacki@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>tomslot</id> - <name>Tomasz Slota</name> - <email>tomslot@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>ezust</id> - <name>Alan Ezust</name> - <email>ezust@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>nascif</id> - <name>Nascif Abousalh Neto</name> - <email>nascif@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>allancaplan</id> - <name>Allan Caplan</name> - <email>allancaplan@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>holobender</id> - <name>Sven Jacob</name> - <email>holobender@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>wfzelle</id> - <name>Wouter Zelle</name> - <email>wfzelle@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>hooperbloob</id> - <name>Brian Remedios</name> - <email>hooperbloob@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>xlv</id> - <name>Xavier Le Vourch</name> - <email>xlv@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>rgustav</id> - <name>Ryan Gustafson</name> - <email>rgustav@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>bluejohn</id> - <name>Johan Nagels</name> - <email>bluejohn@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>tkleiber</id> - <name>Torsten Kleiber</name> - <url>http://develishdevelopment.wordpress.com</url> - <email>tkleiber@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>rpelisse</id> - <name>Romain Pelisse</name> - <email>rpelisse@users.sourceforge.net</email> - <url>http://belaran.eu/</url> - <organization>Atos Origin</organization> - <organizationUrl>https://osc-service.si.fr.atosorigin.com/</organizationUrl> - <roles> - <role>Developer</role> - </roles> - <timezone>+1</timezone> - <properties> - <picUrl>http://belaran.eu/wordpress/wp-content/uploads/2008/05/RomainPELISSE.jpg</picUrl> - </properties> - </developer> - <developer> - <id>adangel</id> - <name>Andreas Dangel</name> - <email>adangel@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - <timezone>+1</timezone> - </developer> - <developer> - <id>acanda</id> - <name>Philip Graf</name> - <email>acanda@users.sourceforge.net</email> - <roles> - <role>Developer</role> - </roles> - </developer> - <developer> - <id>jsotuyod</id> - <name>Juan Martín Sotuyo Dodero</name> - <email>juansotuyo@gmail.com</email> - <roles> - <role>Developer</role> - </roles> - <timezone>-3</timezone> + <id>github</id> + <name>github contributors</name> + <organization>github</organization> + <organizationUrl>https://github.com/pmd/pmd/graphs/contributors</organizationUrl> </developer> </developers> <scm> From fd3eac3c9dc69672dce15d4392a781bba102ff58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 30 Jul 2019 16:28:16 +0200 Subject: [PATCH 350/371] Fix #1951 - false positive for UnnecessaryFQCN --- .../pmd/lang/java/ast/TypeNode.java | 2 +- .../UnnecessaryFullyQualifiedNameRule.java | 49 ++++++++++-- .../xml/UnnecessaryFullyQualifiedName.xml | 75 +++++++++++++++++++ 3 files changed, 118 insertions(+), 8 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java index a614dfe947..b4fc69d091 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java @@ -11,7 +11,7 @@ import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefin /** * This interface allows a Java Class to be associated with a node. */ -public interface TypeNode extends Node { +public interface TypeNode extends JavaNode { /** * Get the Java Class associated with this node. diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java index 9353548a71..b7ad4e8b6b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java @@ -7,6 +7,7 @@ package net.sourceforge.pmd.lang.java.rule.codestyle; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Map.Entry; import java.util.Objects; import java.util.Set; @@ -20,10 +21,13 @@ import net.sourceforge.pmd.lang.java.ast.ASTPackageDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTPrimaryExpression; import net.sourceforge.pmd.lang.java.ast.ASTPrimaryPrefix; import net.sourceforge.pmd.lang.java.ast.ASTPrimarySuffix; -import net.sourceforge.pmd.lang.java.ast.AbstractJavaTypeNode; import net.sourceforge.pmd.lang.java.ast.JavaNode; +import net.sourceforge.pmd.lang.java.ast.TypeNode; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; import net.sourceforge.pmd.lang.java.symboltable.SourceFileScope; +import net.sourceforge.pmd.lang.java.symboltable.VariableNameDeclaration; +import net.sourceforge.pmd.lang.symboltable.NameOccurrence; +import net.sourceforge.pmd.lang.symboltable.Scope; public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { @@ -102,8 +106,16 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { return false; } - private void checkImports(AbstractJavaTypeNode node, Object data) { + private void checkImports(TypeNode node, Object data) { String name = node.getImage(); + + // variable names shadow everything else + // If the first segment is a variable, then all + // the following are field accesses and it's not an FQCN + if (isVariable(node)) { + return; + } + List<ASTImportDeclaration> matches = new ArrayList<>(); // Find all "matching" import declarations @@ -211,12 +223,35 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { return result; } - private boolean isSamePackage(AbstractJavaTypeNode node) { + private boolean isVariable(TypeNode node) { + String name = node.getImage(); + String firstSegment = name.substring(0, name.indexOf('.')); + + return isVariableInScope(node.getScope(), firstSegment); + } + + private boolean isVariableInScope(Scope scope, String name) { + + while (scope != null) { + + for (Entry<VariableNameDeclaration, List<NameOccurrence>> entry : scope.getDeclarations(VariableNameDeclaration.class).entrySet()) { + if (entry.getKey().getName().equals(name)) { + return true; + } + } + + scope = scope.getParent(); + } + + return false; + } + + private boolean isSamePackage(TypeNode node) { String name = node.getImage(); return name.substring(0, name.lastIndexOf('.')).equals(currentPackage); } - - private boolean isJavaLangImplicit(AbstractJavaTypeNode node) { + + private boolean isJavaLangImplicit(TypeNode node) { String name = node.getImage(); boolean isJavaLang = name != null && name.startsWith("java.lang."); @@ -232,8 +267,8 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { return false; } - private boolean isAvoidingConflict(final AbstractJavaTypeNode node, final String name, - final ASTImportDeclaration firstMatch) { + private boolean isAvoidingConflict(final TypeNode node, final String name, + final ASTImportDeclaration firstMatch) { // is it a conflict between different imports? if (firstMatch.isImportOnDemand() && firstMatch.isStatic()) { final String methodCalled = name.substring(name.indexOf('.') + 1); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml index 8f3d802135..cf87255b74 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml @@ -502,4 +502,79 @@ public class SamePackage { } ]]></code> </test-code> + + <test-code> + <description>#1951 false positive when package name is shadowed by variable</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +package threads; + +public class FQNTest { + public static void main(String[] args) { + Thread[] threads = new Thread[5]; + int i = threads.length; + } +} + ]]></code> + </test-code> + + <test-code> + <description>False positive when package name is shadowed by variable (2)</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ +package threads; + +public class FQNTest { + public static void main(String[] args) { + Thread[] threads = new Thread[5]; + // threads is obscured + int i = threads.length.foo; + } +} + +class length { + static int foo; +} + ]]></code> + </test-code> + + <test-code> + <description>False negative when name refers to static field</description> + <expected-problems>1</expected-problems> + <code><![CDATA[ +package threads; + +public class FQNTest { + public static void main(String[] args) { + // threads.length is the class + int i = threads.length.foo; + } +} + +class length { + static int foo; +} + ]]></code> + </test-code> + + <test-code> + <description>False positive when type name is shadowed by variable</description> + <expected-problems>0</expected-problems> + <code><![CDATA[ + +public class FQNTest { + public static void main(String[] args) { + length length = new length(); + // the type name 'length' is obscured. + // 'length' here may only mean the variable + int i = length.foo; + } +} + +class length { + static int foo; +} + ]]></code> + </test-code> + </test-data> From 493e0014b042bf1076244ad7b7c7e91a31f52d42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 30 Jul 2019 16:38:42 +0200 Subject: [PATCH 351/371] Also fix a false negative --- .../UnnecessaryFullyQualifiedNameRule.java | 30 ++++++++++--------- .../xml/UnnecessaryFullyQualifiedName.xml | 10 +++---- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java index b7ad4e8b6b..fd248a50f9 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java @@ -107,12 +107,12 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { } private void checkImports(TypeNode node, Object data) { - String name = node.getImage(); + final String name = node.getImage(); // variable names shadow everything else // If the first segment is a variable, then all // the following are field accesses and it's not an FQCN - if (isVariable(node)) { + if (isVariable(node.getScope(), name)) { return; } @@ -184,7 +184,7 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { if (matches.isEmpty()) { if (isJavaLangImplicit(node)) { addViolation(data, node, new Object[] { node.getImage(), "java.lang.*", "implicit "}); - } else if (isSamePackage(node)) { + } else if (isSamePackage(name)) { addViolation(data, node, new Object[] { node.getImage(), currentPackage + ".*", "same package "}); } } else { @@ -223,19 +223,13 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { return result; } - private boolean isVariable(TypeNode node) { - String name = node.getImage(); + private boolean isVariable(Scope scope, String name) { String firstSegment = name.substring(0, name.indexOf('.')); - return isVariableInScope(node.getScope(), firstSegment); - } - - private boolean isVariableInScope(Scope scope, String name) { - while (scope != null) { for (Entry<VariableNameDeclaration, List<NameOccurrence>> entry : scope.getDeclarations(VariableNameDeclaration.class).entrySet()) { - if (entry.getKey().getName().equals(name)) { + if (entry.getKey().getName().equals(firstSegment)) { return true; } } @@ -246,9 +240,17 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { return false; } - private boolean isSamePackage(TypeNode node) { - String name = node.getImage(); - return name.substring(0, name.lastIndexOf('.')).equals(currentPackage); + private boolean isSamePackage(String name) { + int i = name.lastIndexOf('.'); + while (i > 0) { + name = name.substring(0, i); + if (name.equals(currentPackage)) { + return true; + } + i = name.lastIndexOf('.'); + } + + return false; } private boolean isJavaLangImplicit(TypeNode node) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml index cf87255b74..25a35a57dc 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml @@ -488,7 +488,7 @@ public class TestArrayType { } ]]></code> </test-code> - + <test-code> <description>#1199 false negative for same package FQCN</description> <expected-problems>1</expected-problems> @@ -504,7 +504,7 @@ public class SamePackage { </test-code> <test-code> - <description>#1951 false positive when package name is shadowed by variable</description> + <description>#1951 false positive when package name is obscured by variable</description> <expected-problems>0</expected-problems> <code><![CDATA[ package threads; @@ -519,7 +519,7 @@ public class FQNTest { </test-code> <test-code> - <description>False positive when package name is shadowed by variable (2)</description> + <description>False positive when package name is obscured by variable (2)</description> <expected-problems>0</expected-problems> <code><![CDATA[ package threads; @@ -527,7 +527,6 @@ package threads; public class FQNTest { public static void main(String[] args) { Thread[] threads = new Thread[5]; - // threads is obscured int i = threads.length.foo; } } @@ -558,7 +557,7 @@ class length { </test-code> <test-code> - <description>False positive when type name is shadowed by variable</description> + <description>False positive when type name is obscured by variable</description> <expected-problems>0</expected-problems> <code><![CDATA[ @@ -566,7 +565,6 @@ public class FQNTest { public static void main(String[] args) { length length = new length(); // the type name 'length' is obscured. - // 'length' here may only mean the variable int i = length.foo; } } From 091ce3d40e24327a8008f0e8de3dcd06442f5324 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Tue, 30 Jul 2019 19:30:19 +0200 Subject: [PATCH 352/371] [java] Deprecate ASTImportDeclaration#getImportedNameNode() as well Refs #1888 --- docs/pages/release_notes.md | 3 ++- .../sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java | 6 ++++-- .../pmd/lang/java/rule/codestyle/DuplicateImportsRule.java | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 5f63319150..428bb7bdf1 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -22,7 +22,8 @@ This is a {{ site.pmd.release_type }} release. ##### For removal -* The method {% jdoc java::ast.ASTImportDeclaration#getPackage() %} has been deprecated and +* The methods {% jdoc java::ast.ASTImportDeclaration#getImportedNameNode() %} and + {% jdoc java::ast.ASTImportDeclaration#getPackage() %} have been deprecated and will be removed with PMD 7.0.0. ### External Contributions diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java index 8e1dc8cd55..188288eeb1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTImportDeclaration.java @@ -89,8 +89,10 @@ public class ASTImportDeclaration extends AbstractJavaTypeNode { return isStatic; } - // TODO - this should go away, but the DuplicateImports rule still uses it - // (in a clunky way) + /** + * @deprecated this will be removed with PMD 7.0.0 + */ + @Deprecated public ASTName getImportedNameNode() { return (ASTName) jjtGetChild(0); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/DuplicateImportsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/DuplicateImportsRule.java index 28963d7557..655cd8c600 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/DuplicateImportsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/DuplicateImportsRule.java @@ -87,19 +87,19 @@ public class DuplicateImportsRule extends AbstractJavaRule { @Override public Object visit(ASTImportDeclaration node, Object data) { ImportWrapper wrapper = new ImportWrapper(node.getImportedName(), node.getImportedName(), - node.getImportedNameNode(), node.isStatic() && node.isImportOnDemand()); + node, node.isStatic() && node.isImportOnDemand()); // blahhhh... this really wants to be ASTImportDeclaration to be // polymorphic... if (node.isImportOnDemand()) { if (importOnDemandImports.contains(wrapper)) { - addViolation(data, node.getImportedNameNode(), node.getImportedNameNode().getImage()); + addViolation(data, node, node.getImportedName()); } else { importOnDemandImports.add(wrapper); } } else { if (singleTypeImports.contains(wrapper)) { - addViolation(data, node.getImportedNameNode(), node.getImportedNameNode().getImage()); + addViolation(data, node, node.getImportedName()); } else { singleTypeImports.add(wrapper); } From 225430953b1b4aaa476295b2c2371a869c09f5e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Tue, 30 Jul 2019 19:43:49 +0200 Subject: [PATCH 353/371] Checkstyle --- .../main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java | 1 - 1 file changed, 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java index b4fc69d091..55632f5e36 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/TypeNode.java @@ -5,7 +5,6 @@ package net.sourceforge.pmd.lang.java.ast; import net.sourceforge.pmd.annotation.InternalApi; -import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefinition; /** From 79b2de8549f1e2260edd06b6767faff967c0b334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Wed, 31 Jul 2019 17:52:59 +0200 Subject: [PATCH 354/371] Put designer wiki doc on the website Fix absolute links Add css for details tag Add installation doc --- docs/_data/sidebars/pmd_sidebar.yml | 3 + docs/_plugins/details_block.rb | 22 ++ docs/css/pmd-customstyles.css | 32 ++- docs/images/designer/bottom-ui.png | Bin 0 -> 28418 bytes docs/images/designer/demo.gif | Bin 0 -> 221144 bytes docs/images/designer/designer-top.png | Bin 0 -> 79215 bytes docs/images/designer/designer.png | Bin 0 -> 86884 bytes docs/images/designer/empty-tests.png | Bin 0 -> 13562 bytes docs/images/designer/export-example.gif | Bin 0 -> 185192 bytes docs/images/designer/hover-selection.gif | Bin 0 -> 290234 bytes docs/images/designer/parents-bar.gif | Bin 0 -> 27446 bytes docs/images/designer/property-defs.png | Bin 0 -> 12588 bytes docs/images/designer/property-edit.png | Bin 0 -> 23927 bytes docs/images/designer/tests/add-violation.gif | Bin 0 -> 183286 bytes docs/images/designer/tests/all-green.png | Bin 0 -> 7447 bytes docs/images/designer/tests/export.gif | Bin 0 -> 281571 bytes docs/images/designer/tests/failing.png | Bin 0 -> 7689 bytes docs/images/designer/tests/import.gif | Bin 0 -> 251411 bytes docs/images/designer/tests/load.gif | Bin 0 -> 87311 bytes docs/images/designer/tests/property.gif | Bin 0 -> 164420 bytes docs/images/designer/tests/toolbar.png | Bin 0 -> 10841 bytes docs/images/designer/usages.gif | Bin 0 -> 72909 bytes .../userdocs/extending/designer_reference.md | 254 ++++++++++++++++++ 23 files changed, 310 insertions(+), 1 deletion(-) create mode 100644 docs/_plugins/details_block.rb create mode 100644 docs/images/designer/bottom-ui.png create mode 100644 docs/images/designer/demo.gif create mode 100644 docs/images/designer/designer-top.png create mode 100644 docs/images/designer/designer.png create mode 100644 docs/images/designer/empty-tests.png create mode 100644 docs/images/designer/export-example.gif create mode 100644 docs/images/designer/hover-selection.gif create mode 100644 docs/images/designer/parents-bar.gif create mode 100644 docs/images/designer/property-defs.png create mode 100644 docs/images/designer/property-edit.png create mode 100644 docs/images/designer/tests/add-violation.gif create mode 100644 docs/images/designer/tests/all-green.png create mode 100644 docs/images/designer/tests/export.gif create mode 100644 docs/images/designer/tests/failing.png create mode 100644 docs/images/designer/tests/import.gif create mode 100644 docs/images/designer/tests/load.gif create mode 100644 docs/images/designer/tests/property.gif create mode 100644 docs/images/designer/tests/toolbar.png create mode 100644 docs/images/designer/usages.gif create mode 100644 docs/pages/pmd/userdocs/extending/designer_reference.md diff --git a/docs/_data/sidebars/pmd_sidebar.yml b/docs/_data/sidebars/pmd_sidebar.yml index 0841643c75..01fc82faa7 100644 --- a/docs/_data/sidebars/pmd_sidebar.yml +++ b/docs/_data/sidebars/pmd_sidebar.yml @@ -67,6 +67,9 @@ entries: - title: Writing XPath rules url: /pmd_userdocs_extending_writing_xpath_rules.html output: web, pdf + - title: Rule designer reference + url: /pmd_userdocs_extending_designer_reference.html + output: web, pdf - title: Defining rule properties url: /pmd_userdocs_extending_defining_properties.html output: web, pdf diff --git a/docs/_plugins/details_block.rb b/docs/_plugins/details_block.rb new file mode 100644 index 0000000000..db2a87050a --- /dev/null +++ b/docs/_plugins/details_block.rb @@ -0,0 +1,22 @@ +# Mimics an HTML <details> element +# Courtesy of https://github.com/towbi (https://gist.github.com/towbi/a67fda47e075d2b7fa4764bb42605063) +class DetailsTag < Liquid::Block + + def initialize(tag_name, markup, tokens) + super + @caption = markup + end + + def render(context) + site = context.registers[:site] + converter = site.find_converter_instance(::Jekyll::Converters::Markdown) + # below Jekyll 3.x use this: + # converter = site.getConverterImpl(::Jekyll::Converters::Markdown) + caption = converter.convert(@caption).gsub(/<\/?p[^>]*>/, '').chomp + body = converter.convert(super(context)) + "<details><summary>#{caption}</summary>#{body}</details>" + end + +end + +Liquid::Template.register_tag('details', DetailsTag) diff --git a/docs/css/pmd-customstyles.css b/docs/css/pmd-customstyles.css index e9de59c713..136529ec4c 100644 --- a/docs/css/pmd-customstyles.css +++ b/docs/css/pmd-customstyles.css @@ -19,4 +19,34 @@ top: 50px; /* height of the nav bar */ bottom: 0px; width: 100%; -} \ No newline at end of file +} + +details { + border-radius: 3px; + background: #EEE; + margin-left: 10px; +} + +details p { + padding: 5px 10px 5px; + background: white; +} + +details summary { + font-size: 11pt; + vertical-align: top; + background: #d2d2d2; + color: black; + border-radius: 3px; + padding: 5px 10px; + outline: none; +} + +details summary::after { + content: "..."; +} + +details[open] summary { + background-color: #347DBE; + color: white; +} diff --git a/docs/images/designer/bottom-ui.png b/docs/images/designer/bottom-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..64015fb7e8ba4f053f58ac4ae618d1b749bdbc4e GIT binary patch literal 28418 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%0D`WHm23@`dbNG>c9|s1%*Hjz#JMXrdM-P7I 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 P-eph&X#>liym<F7yWO7^ literal 0 HcmV?d00001 diff --git a/docs/images/designer/demo.gif b/docs/images/designer/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..405712d484ca604721c4a241f768cb06c2902f43 GIT binary patch literal 221144 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�>|37y;Gnxl`L8%(ou`0@XW^-i!Cd`g5g^^J z>U9elEW<CN8t4itibV)-UUBisFq#?M@G$$Q{A}Tagppw^{2lR*`~wMan}N(t$;^?w zBI(KoT6dq(mvd9=a<*~LE&x;1`Y*@SuXMMH^tW(EZ=Q{-asI=YiumoIe@ae1?M19g zxk}D#<g2+B*tHd4^fGU|Ubmtya!4pTAEGIav@Z_c0A;Chz)6;HYzp;jg$XqlH?ZvE zJYaN$`4z#W@dZr|G$^_VWWKW@CI)s&elt~;zu;Oir>-3B^$A!0b}pU`piicJJ&x3` zWEI}Oz)qcLlv+}&97d^}MgiY81EpVaHN&@4ytav$RkuD3*6oi)LlvRIZ*iNDuQX*j zR1Fx72IA|BQP)lW*W=FW+PgF~6*%ebGOY*ARD3j(K0To4WcU{0V^hmVTq*DVLx^zn zr@OB8Yk+2m+cQdU4Y){)h%i8PfM&hj=<Xu(?mUE(Fi;gKJkz%T(P3OCFbWtA-RAGY zENNj1x=_nqM;qL%Ufl`(;PYgW9!hWC%*`Hxs6M~DhJT^OV@I)9dm2U?+zeE_<R66b zH#4kVLDAwr;+`!e-tt`=b`0J!6*C+r#`0diF2Y1N5_)|s(w3`=0tNJ$Bdu~;h;m(p ze*sl+T`zV@SovbNh5F&`y|Oh^ah+!s$;DR1`d$1>;1<_0{p{d%yVy4q%t;Pf4Bi(L zR?D%xiat~-DYKo1?k04+KUVl?oT}<wW=9P9U`D=Tl|f7?{0~Q_JyND^Qut~Ny~~s4 zvrN3w_vbhHuj#^rk|l&xef*{hg+fxkOn7s0Ci8tA=Ia}|`p!gH(TAr&Vu`|CB+UJL zE5Apy#C4i&9{fI^qYwQ2+5UC;y?YoZtFlgE+3n79lN%}vV);(OzytAnFjf{*iI)T7 zJO>i&+ny7elHUg;#1ABQlCH|Vn;s)w{{oP@mAZXOx_*X|ww7GO^3X_$)7Z^RyECpb z*}^Z)%d95{(*hGqj1rozUoC-;`9~l(BM^5XmzPM?yCk`V2)Ywh`m7tB6RPwMrc{?A zxB^pu9Fn)zidAhEG~qw=Be5KodYt}PswFh+#w`wh6gO?c7`6p5hN2m3M!3FH{J==u zaN4DS!kY7FBf2MCof8s(S9H3gH}#SpQ&A6%a@=;f-Wl<VXb;{5QVk}k$oqwzrt%u; zS!(n_?*dY#;#1H2DU-GZPktBIz3)Py(*7i)ZcMzcxpCNWtxWyVVbI}_W{0HoZqG~p z`D;_2nf-a0Me~`_WZvC8Z1+XWQ5?;7D|foHT)?5;vtsR?4edO=vJ%&NJy%{6a!~;| zBPE#^Nsyia@sO(x^R)H9tZDB!L*-~Fm44Km&a+@pWQvE+_{I4)TC`k@v!<#s;o9CO z+v>lDIO?k#{e_i}#I7Xv8CW<ON?s{n^O2%^WO}oU=h+p5P7O*<oi=1t+j|}hoF5m+ zt$Dl5FOE;xvVQ{k+|;GUZN>Y((N$nH2>3U`<n25q14*GhvA;sd2;*@1^<G9llkdqq zf~gs_+t2m!P1WtvFD@QGoe!%_c7da@6x{TN+>+8ZyFku*TQ15scZX{paQJ*-&=x6_ zwlYr=9DQWtsPz?jaIGyxKw#y@L6S8~vJEiZzRc&YuLS>fZ9ZKJ-bHC~aILN61EGK| z8@g4YN7t_v56o?*%yIbJe{qyrG_kvMgoPCg);thcjkUj!h%47(5vzBP2X1hi@H$C5 zy7)gxQ{_#Yf1r59X=`vhkl9J~iqoUp&f02D5x1R_YMmbXyF}pgO>Uq70G?kEC^Y~8 z5IKi@0|5a*0Duw#074-Dz0e8v2VPjfFBZ-Lz*BZPBu+KzaJN!laF^5;bq-<h(?I~_ zJl3x%`&kmOssL(Wf$2(OR%a5!)nG^l9GBu(nU<lEF~X}Fx&&atsNGoUPvUg{+g9o; zAa5yQtd=O~=R63)JdZvotuDfZf?&>^s7vd{QL63>r*-DS1V0<&*q?H><&*ikEfOE} zlFPpX(M6rsA@8<vfN(GZIWl@jA=L2C?@{VNw0QVm+6B|jB%6f@xicUIC|bB&-1A5$ zvLng5%jJ6i&odTuhk_+;wB?pmFEiV<GTz^fD~>Z8;1R%8cKW%bQoY`xn)QgE)|FO& zdg-QE2F9+37AX|6fdz0eJ}GGpufaoYa|o7mqUu`uTU{z1p1(H_+9);Of0`!(*za?p zZ?yLtU<Z{aXbTNR4MIl@C__W5w54d#k?^1tx`G_nW9)wHWy>)Dt@IT))qdebKd+9P zOl9q~fR%RNc3Q6{TcivH{X)NRBfx7x9cl<@mH_>2GiH~|GK0&FlK=n}0HktEy;Wnp zMSZ%-o*-tR@CylH&j2<nT>wjXm48d=j;dSA`#qHsg#M5H8v^?P`2n2&**{7S9WqH3 zU=LVQ=qBf>2cI-~KUpQ)Y5H#dE#!?gz$*ALt24J3^Kn)o0dPPw*<rprT<jd!?Bso~ zJRF)vh$>9vxEW6C*qP=+&n*vt`fP9N?w||+>hTIv2~wpgUX{elp_k3Csh5FU;q|?v zPO25w#ax%znRVV*8Nyx}{&{r$V*k=JFUh^AP$dWK*?pllcm7I*wNS8<1NQ(tOLp@5 z+V6JeKP{ccJhJNN9?Iygm#zuTAl(Xo5&>YNdD#E*W(wBZ-lBeYKCkF01*Q@{zToG@ zl(g})Uu69|xRi^qB9Mg#cp8}NQFw4_eDAIlP;uQb^^*gNl%J<Axp5kPtb6y_0ETOL zWwg(VPlY5_S+(uO8YFz%K`@n`Sjy@N)OLIK350m%>x8X-p<q-J-IPsJ_JaUXH)oLf zi827bi>=$a*=7{=_Qb?eiQWUOFDv#Fj7CDAN7Bh_1HED-YS9cy*GWucKsu3D->6H% zr>GW=lih<WsuCv`fy)J=jfCj{bFFudF8YF0b_=kP@_(u?be_LO?mSbe2kdI5L8NWL zF9iF6rb@E?^H&nDWSC-Z0uFg%=vH-!2!L;zP>Lqb#BYHPP(RU@N0-M(fP)$+(Xx)p z)Cd3u{hI|KP%wXi{WGI(&bJAoe(tgp$H(}R77F|yr{aH&`~SMI0IUNrfhPWQj>_-B zNTinkC-c#Ds=G43>nTb-f#c3@wr+}`X_-||Rbk%?G5g-EjJ+JgOgZ0;sh)SmpL5Z& z-<nveONR4xQm<KW_zI2|WAgQ~^)8i;mRY`Yo$jr9*!J3{ErC<N)~!EJW1!5sulCKo zSnO<Xwtn5VX|?~s#&n;>gQ<@=Fbx+6z36;f93$-S>-x&YF8iP2u?7uQjzzJe4`=!t z)&~Yj>Q8LsgZ^PY3Z)wjynpoLOND*kirfD5=J$HvA2S1ubvv`oQ8e5}P4#<=-KoO& z2b&rWR)_NSbB#W{|M_F$-NV_z4~@q=b8Sz~xs5+I{W@41eSQD)#}9vwcNhC|jX!-n z`*U*eWA^i>PZz{J3c)!XgxPs6f|9>vE|OMeZ7vF_B{(0=blZ78hV?<od@P6m+B_Z= zE4UEHm+rg}FIZHvkRVdKw(vx(Q}6<RIPScdB)3wsn5=ZPw)j7pkNl-eDF!m@OQ{$w zq2)BQ+b+w`EgzIFr(5}7lpe9MLMudvbeEM3=c3Y;Ot;$gm6u+fLaSMR<1VY&fh(n} zIiW}EtGPIeYip!vX4kd6IR3J=SBWwkYxxANYwHDRw_Vo@i4V%wi?aMT){9B8*EUKD z(p@)7ONz=i%F1guHeQoE&#(O`uO4^(@uq&I>_<h@(Z-Lr%@o3$<aXwVo0Z-CuQ#ju zWqxeF8`2Wqsvf)jaI0qG!RxL6W<J(0r9a$mSSxzH{r(e>o}%%=85p2E=L~MXv>Pmq zP+mJtHB!Yyr@pnIKFx>7>oEB>Q)|*Devxg#9vB1ln!ryamWCF^ZlBMoCpW<afpC#Q zhbD1z&T!gh027{(rt@+xhk5TlGr5Xk-pZ}2-*`B52!Jlg_w82_UOxDYCP?}XYlVo2 zs-YWcB}a9JmCyi-`yZ;1OYI8=3MUwMv);d_R<r=efO1+{jVEV}lNSyn01_++>|^!Z z<e?IoB9j;WF+z)sIO@aZ$VUoZf)aY7pEpnIjHS3yN!;^^$Y%B;vlLpnA47~siv&gY zUIF3`Jr268v(T@Q8^sl@aBfhcBd}?8@e8vVxApt`iJvkxzdicOz`vKy_M4rLrd@}D z>a-F7be@6e+y1|_iao+_N3XA>F&ZgBpPBXx6k%TJ%6~hqZbbkL)TD0K7o3kt>|019 zPJaGK)Bk&VpF;W4nWWw%s5^~(^9>IW_}`ED|C;Xqb>T8V9<T!W4*d7||M&U$f5kpm z;(x?mx2m8g_5X^!?z<JeNJpRlihUF{=LPNSKe6wvF8%*wUsE>v<Ug^0{q-#t`go(T zynOPV^XRLv&e}KM>%12KiG9U%W8goruX{WD>7Upe)RX7i9*2arx=^O^V+h>Zv75xI zrQTFY`<c*&cgvqMZ{jHiGOE``@=fz?!rs@ce=W1_iXF(T-Td~>cX1}Hv2JVjeHaWj z__BU?A%pHYaQE&168n&IffL<36aO>z#-X)=ST@WFV6N|N?)l@0^PezMI0R0Kx(VWO zMyal>!AR(v01^#gWiJ0S`t(woZ8WPwASM<C=cA3jOdV*82Mt8Mie*!tSctqzebUMy zs3m6`Bhb0Vqk7X#2dR860&b2&P)ph2bpFaAMIlr{2!PC~`j8To+WBgVxm^P(-QvOe za{7ILsuiMLde3r(?JM1)%m+mo7sv|{ftmjkdx4y#41wAI6MMms!+8jG-e??lC`J{4 zP1MxZV0x;~?l($EKstUyhUX|q2?d{6xf0T>%zf9&$}27l_=fyf>>p-_)&5uPKk&QG zzKZ(II|KxKtG&|fynJ{Ca6}9FtXjg)m#FMs?$rGb@&&wBT?`W5uCM3~`thIG&oAq3 zH|}-{?=*d)79I+Vy&b|;2ax)K@de#{w|E=G3-MBgj?z5)NG+?h{d!YNWUrm+>qbQz zt5f-2CkL;CDB#3jWWSs5#i?-nrQ-7aUXgnNl|5ozA_x7pVH^_wLA}!EP3?b1!#-^H zDY3X84qy3hATnYgyLH&4Y;0l7nTlyLzAm38hW9%=1;z|v@!6ci#xLBDCZnz;9es1F zJF^)Z-dgMd^7l)6E6KJ;Bux*mpI_*;?O-?L{2UtpLA`1h_%9^NZU?G)sarf{yn`js z5YC(I2NgS(s*L6TX!ueq=Y3kBA^g*h?E44MeC+?n%(sPqLJAKTsVo0$tP(E!)mXgf zQ*yG<M_P~2ju@4S(|sq=!PA4Gmz=*YE-L~ZGiGAIm|gO8E>fjWN=%bVYGP4?O058` zE_;SDIac|*22z!s&R&cHU2R7NK+q>c=r5;h)=J435GoNx$*d3!#*vhNbM8cJ=-C|d z>$DK%-$t_bqxy@!a(tS^a+MPSXSH>>z6b>HK43)I^%!vwHqX6^YFXZoxY;kQ%_&62 z!2^guTeLQ(1Z3jz`S1C7M1Py7>TZ{a99bcp2o6PbYtlTVY`He07kRn=74zbwmg~WL zPj(mPROa?TYKfJJ=My<}n7Txm+%ESqWe5A%P_*D4IOIUC3wq-?D?q1>%~O6F;aH;f zFEEtI&2ZjAOR?L6cX3mv!vPa*P?6xb?_TjAM{9}&@25s@ToKgP?N#;0#4}K~u`UrJ zr9BW{yZ1UFezMJM^?3*r%Y2o8>ZbLgspnqW0(`fqbdjbEnE-yIueXK<7DXE@7sVd* zH7b0qjX_xlO+on#A*6w(LQ@LR%jg;z!3&fM4T=@!d3ztdKghm6k5$eTixQbQprt`} z3cm!Of4tK<lIsdFxk(`5+1=<Ac99?ijyx1oJC`JzHm}reDJ|&V=J~}hSrG{Yy8Q$Y zmuXA06{tR^WRCG{DV6G3e3SImbmCws`KGda>nUd_501R)#F(@PusyNA%wxHzvXl;> zH*r$=lQAf<8c`=dR84i04lA91t1+w^1p4b-z!oK>^DMZ=di9V|zf13S^p{l|ec{)4 z`xHJLi4V)43AV$?&rR=a402g{;ixUKv4|Nl=p^{F$)90LXdnRWLgeQRp1bJIZ3gpV zo5z1Yi(?9G1~CNATgWQrkSl(^6E+lb)_y%``q+v4dvh$^OG!BOF1^xgO}rHP8%NN& zoPF)*NxY<4-{g!BzMz0^n^{wMYT@y%ME?X{=ID*@D-`hh&Loe+IN|9H6J*1qNIXN+ zP|_EL<3^RJibq|2avLefP04K@*{Ab}-S@K23z~03hab%R`u4(oBkb*CdG^^qzmJ`N zp1s9oq|csRmMb{pBu6?i&p{PgouJC(=r_bU*u8ptx{u^o?W1eKfhTP!cx9Zn!2-j} zlXgL)$^?u41?I++4zc9Q#QRqBbl-_KY#%F=*~jPE{+x87;Z+2@!O|6)hE7Ez39?W5 z62FR@yjF5mTCu_MwR`g2I{sDZ79C61LmJF)eyk#P8LUXWl<&Orw<_~|Y+1Td{v2bg z{4Q(NU{yh1e!z3^UGTT^RpoaAgZ}Vp63oz<VR7<v+zNFr<AC#9!22OWa&<vh=$h8O zU}Y!hox7p~>niG#?cYkk0&(R@@*i91NP=BY&Ya<hE_=#UK$XlA7NS%VJW_wdw@`85 zVT{Q8ugxCa`KqVM4Pm4&YRoWDA_giPO#*uFYCq}Gp+uPe=^CGCVOYADA7A?Y-EQU) zxr+{WKlRTPgzX6b@NR<@xvgzhuxs~X!obZ7&U6^4Eu}U8B%m*fy>75hcA_PbqW&c( z``IkMPCVgWX#LFbQJu6A4(5T4dNnBql_6}|g)v2f%W^uQT6Ehfvy<=E&W+@YE*0*l z8*5B+RoKX60-%W5sE})35lXGHADJiesn&iptIy7Vyxph%_z(#L`|QmJuAwLoy}G!W ziIMmUb(V#D5%3FqSpab!aMcTVY0euYoHhr`cwYNt%R72=IKRk3tYPYjh{ub2-=_Rw zGX0*(;Gk$S`)2(wklg&!M{^*ccQIaxytmyG7Qq>u6|J%v0WFctkKRds&uVbdt*UX0 zD-F@AoE{MvJXb@pQZI9Jjvh3|qG*arhY9)Dw^5G)xKW+oSqiq`Lg=vVW|+_PL5_11 z<EK$E3vIT6yi<9N4|FoSyMx@MyNJdM^f7B2{i_}LW~KU4ipBf$CHI+FM14M;RGg*= z*1Ko$SZd{_`G<`T`VM4%6zj?7a0xQKT_6by-&uiM4S`!MaFQ~iU0<C#U*OV<JgNkM z#w3dJC3o55kZb|9idwKF0Om>1-$Wsr4(Ybl5fFS3*SMkFuCFlCXhACYV9|B~qqc9M zB}O#np`hzbi|UN#M%^~OKWFO(gJwA4G`j65yK$biI31$%#*y#OG^n{4^unt$BA{R9 z@5e}T4gDG@OM;ziBTh(u2CKG7`_OF^#V|`qJvIu(8ZK2IEQ)-nYZ1=PkEpm1c921V z^^v+rJJ1AphXN5KiO{r+yXGIQU-CeY7#CLLF?U|)A@k@la|sP=z3){%1Ud%%cZG^s zOl8MEsF#5*{o*pzM07R-zGxvPy{HxO05xZX$(*~gv%4p2R4dx99v{NXk7yDLJoBR5 zaf)kowu|eIyH^|6dGes`2p&TQas(iJuEv{F0=r`^;9?*VTx>=FoEa4@76_Ot0f>>I z-AC~Mkl*ONpxW9%hdCe*30UWh=ed9ppl|W%gxjy#nG^$<almM?=r%b5>ULt!ghO{A z!Ii>S><B)Hq}@l_jpBelI*|fL@Ma|KUw-{*GTleyGiF^o5S9HJk`|~<5L~yVC?zPS z6GR#uX{j8xk<@+CDZ=AH2j}1vp@!77SRc_Kj~l;I4VhC_imWx8!^OvGZE$HylWDhW zQ`AarRoR{^YNaV3dAPFJ%dDqaxj0~SpCe?RV_ocTPd<MznRZ`3oti)0HOSU6DBVk! z;4+zh-jVLNj`d`F5qu}kH|WKY<BP}gSb7=TXcwh0HsTtT7`J{u>JBlPO$OgUTr4D} z$lp);MI^G>DBsBl*2>5VvU!n_@hU^&*{_Vw<%}X1>pc0)ayIe8jLeppOfsAG>&eX8 z_#1EKUy`oAd@p2G6ZEoKSGZyFrEAB_cKN##($W$&HjTR!gTJ!8nyF^Yg)LI0VOQnJ z%vr*cSzYqCJ14Ur##s5BtIJmZ<ovr!V~&KH;sCdhP;;;B)kxW3^?Q3r{Ag+RW^49b zsmW|Zu0xDf>Zk`XUp{M5p2VwAz(`jVrBK$U06-(kI{*@26y6@dmv<3MSokr3##-8J z7(+e%=x&v|Vr`USwIBH2BSaCBM#Mp}Ju0{MRqo$ACTH^b!ZB77c<pCnH)q>?m+Y0- zM$uab%6pP3<u%&q1+{?|gdGy{T@ozc4CX{bUYjBekwCRMfY~nRQIyK>MXJ+96?4<v zR2<^d5KtHeVZdtrCZTDomBkc<C0z5j&GP+RP3)FbQ4VH&4r&E2)YLoF^e(GQYG|H| z!S##PG#zBo=TcN*3WyCakT34K99CAmIxAc=L}5%licix-LgR^E(P=aEzNFa!K+{Ac z2;-IOogn-&sMsXKMHc*8mS1bkU+V!ArgBMZkY3x@Oxq<|JNWQ!-0!<ddK$#)o6lVh z{jgvMJnRFSwssDJ+u(Q%(eW70qwmoEgVl+XQVEo#dfWzjNmBeSsr%edcX_hRSE9ID zPtX5%#ScHdcLcrHV|piK<8uvtZLEHMfqv7H{tjc_+pFf%(y#;4+dp&4tGJ>$2t<!` z=d$#_TA8uZf3z}7T0gP5M+6F?Ilzxm!`b%8#rBHeg^K;(x_j@d3i*r=9gOebjDL?& zJUU-CR=A|ACXInYb30ts4_AYx3$?zDme=WVQhmYDLLrElN~W6E)951NBI27DMAggp zW@MGm@3I?;*z4bGNbMH_6;mlkQ@IXff2fMmvgw5cO2g4?aPQsVo-Ze%<~whm7+>k* zQIPTyVi<7ibA(y>do#nIW*!<vX9UHTv4T4>2?O)+Z)G)pud1+$R#op^o(mIi{N(T` zRBYt6@QbPaJEj&?V-eONE5~H%{jy{*Pb07~UxfssBtUfaC}JIfOeorNSI#JNOZ;=o zTkLqJ5(^>J(?-)fFP`5?=@YPe*$^JoF!<!f%Rd}j%bX=0_dXBbeY?ytqp8tVTM&N! z4lx3#hu?uWKH;p4xfemBvO}W1{*B{(%!fWjlL7V*@l+p<UN?}h2={hajXk4FN0kod zy*>D0llJlx(_sx|x$373&Tk#ot3MDmNT}Pc!dWw=x7SDLra7#sc__b`%Sx3li*qyP z<49f$dw<JM_SRu&s|d$U-mF%Ma?!QJ)}`fEnSLd4r8f4d7WpYTxzo0%@7k1<J}HZ| z$1%3+^veY`yfESj)oyC{$Zt0Zl`}kTx3u!PW!3Rey~Aos#v-f3PRZroX~%=bjt7Y{ zwo09D2F{LIokmfeURE*>r#k(uoII7fba=ahr=%W*cH!I}1Wk2mwsl2^N`-TDC!B{m zMum1O*mo!QOTz1ETroYaND4k}haE95t|OZ3UMWJiU0ru69uiy+y%08Sb|qH6DE?kg zEbJrp!EAHdEq^-GIiQ(>T@Gz8VZ8g9fh6IyPd?wHzZ<Z12fA~|0VM}4yNdWa2W<+q z>+N*AO#oyDBAyiX%COswazG860p92bW`d3rR$%^yCrx8?4J&=EZmK8W2d`=N#{fVa z#eo2UFy>X;EOjM>1?}Zy+dUc2og;YJE}#WPw@L0nIMEbh!VZx`MFd50C$CL1ypQZR zVSpQF8U7inNEg=oJ<D?hjevIft*#~>;@}-5Dg!F-4xH!jPS1?hk-Bq|>w%Wr-^8>d z6onj$E^*bCcGc^*o2TfO-9CWMkN}w(a=kV%!ks>tQ0Gba=E)kCM%vJ6llJpf#{RpU zlKZDX&@Xtwkm>#|4GYG7&#O>P41~eLU6Km#QjcJ+6>1F8ZIHl}a~C$j5z#=p3lD_~ zV9<xNkQoCOtM^NAqBSKB?95R+XM#lLJRGw@!K|hu&IpGgkZzsd%8)V=jrf8qQbK;! z7Er!A=ZhAAsC}igc=4#fnd;Wv;6oA}x(m#JhVIW<($9eqS09-<J+l1j`!mb#NDRu1 z1cq>a3)cB|!T+7`Ld22L*GRzfGn%wBFdZSmDgBFew$#q~)btMD=g!1_W9*0>2K<!_ z-VBUIkzChzr&7jT2hgA_FN7V*YYYeSZiZvr6ApZ1rHANtnyIh)JtoT1@rhAE1b|uu z=xsD;lQ?`xf?q)n20DWJ@gOtO=VeU9Hyl)&<oaUO0~|fiToyPwcQ;$$`;)JMW4-VK z7;YESG%*)280K3dfcQd~TP+^W?s~L|49*w$j?z-kOt>=$vzzYf{TYiOmMjdoe-&T0 zoo|Lau)q#b<Lt<R#HQA{EnTa#WsW14E1ijSV%n}`itXB91u+nh^1LL-?pXrt?GR1( z90b!G@FsRZ1`sK_HtQb-DrH5Se_ga%3++8Wf_S1}${5HrVOZwz6TT0CLof4?16x^H zunqz8V>juN7zhSfIt0*#ktl-5Ma)}T83AFFbzyQrPe3Oj-xOEhB54A0R(a^=$mGXc zU$x-Y_+CQz$qU*Z(x6_lHkZ~$(Z?c)tjaDKtce=dJ_Zz$9@n6s`E*X(<%rvU+~VN< zd?;c!6bI0)&>s0^OV=1VF9nhPLUEbXBJ1nyI!6$?WM<I{L17-*fPA)#0^KJJ@8GBf zv;F8$2+;k{vKBx(LQfLpO=WptjTgum0P{hCe7zz%xe%ATBO0oG$5<atEZVMO<<|!z zH~;DhtQm?>LNsuDjvh1$&IV7<cXzoTD0>Sa=vDSE?S!s3!5gtt^k^vX6I#R>@~7mX z&Gy#au`Rt^@%uMZ_J?%h`Dpji{<<FSk$-KC9zQODjfCCUIT#HczrDtjv=f&+;d$)G zD!p|up|w62l;RQQPJrOiKt6$3J+6_z0egMBdzK|J?xgs7F?~w><|-Qa(TmPAZhi7J zl$$B!wxHcMfkK{y59$VsAqia{%SP&h?@!GBx=q7?OMQ{tr8|4b)_z#>+1`Q6uD>2Q zgZwi?a{cNBw(ts$_)2lT*>7!*Mz-!xf(7kvQo^4h+LTN`e%9qpYj_8<=5fvrw2Nwq zOqYZLre+RoT%2g9!r1e(%`hFr_n~>2Kky{%@htvm2_HP<es;q%{!dQ4*bTLP@=~;1 z`7xHFSrpOwIgzy@5YUnc<Ox2k%1)_sQ>%-lTdx$3dzzzxhfmu^NbK0Wyu7l_lOm?g zB}q9k#Z#cY1?34;Od;k6Aeh<{q}^xQGZ>qV0J&*<kjrLkm{*!fT$-6?>n25p*~&4O z%{R=-%-`5_WSajNb;`x118dCxMZM-|zPv!a*188pUIWjqG^$ZCaMXWq<6_}JUT}V@ z-f}U+csZ={oIDdi2p+*DpRW%(5tk@a(AC;208nTrN-XhfyJ`Z3?~x|lgglcZf7s61 z{2HLn;eUL-c1RL<dz%u$d3ULI+CV#oo{rz$;LOMz9Nf>m^y&`z4mE-+Ckq+>P^}>{ zgytR6UOmTun?-U&@mOwep>yNSFS%Xx#0QNgQ;m9w$00_4kFrojPVYA=9uB<o7}L!I zUE)BsW<AQ>%M*jT&LykRh_+J+=1wh;)e$NXaSeKHNagFdtyjb~FIhNLYO>s)qQ21} zR_&4-+5c?yr2{#r1mzdkLUCp32sonVzck5DT=TfgP#l0u>*5J|MHQ=s&siGQb&8Bn z=@blKs_co)F&ohnu56;}xx%hyl0iKXovK0?9$9ImxYI6ae6vI1nE?3+B89n_$Y#=F zThw4Wm)Br%tiGkq9V2C;E1vZZqc7SaWolTs;ajXC3zaszrG52qNZ0$lz*9LR#~O2s z`!Scs^>hnsZr}4<CYu73J8CTMheK~)Gqq2Ov$TJzDKly5L|1#qDfi6W!X~e<_U=Pz z&f9m~>y~TpdD7S&-SzIedaUVkOGMWC(bqGv@1C<UvNl2Uv@fhfb~=vBd=HlE?uTdl z1lUBt_)n&T&o$+2A0M07+v4}0?{UWq6xG{35$%+-Pm*1!w|}ZaA@A@^o4>&!Ra^PQ z_PK?Bx^4RXSow)K<Dv`Ht7oUYQ+7b7{4z0|Lc#P!6#x4*eWw+9m%<kh-n$e(JeqVa zE%x_5cP@L|nW<TjyYesU_2p8@JN`zunsS*7)a&p!1-H7{SjFvvE}KS=#(cFu9v_Y$ zm$^6mi+U9;dg<AAF@5LR&f+w+)548c@~NP4YVxVMRHx+I$a&tCYdr%vqm$zYHsq?1 zPKtAQbUs-=8krS`amW9l%0}FG%PE5T>K$?T$)P6C9!@wK2j|}P5wuNyVyJ!Q-7AfM z?Ao7S%=K{ak5F`kVA(_tlJGN+H!gg$l$Ry3=QA{P?<zA4$lL6!7Afj{w0c=|MTjkg zqAE@e_N(dk?8t(5lpGcu&P+o(2&~H6kQRG5>WhU$_<v9%&fypiwB;gSv`n{bpL3CS zV>W-&e+(Z216VZhLLLz+jDOoW?V5oA@*cul49$81;D$vWKV_OpwiB|NZx5EM3`<+& z-VwV(AuU)Lz_iHR@*M`)oliEwevbT$)29B2QuJ$Hh-ZwlW*qq1ZsHdew>+UO6?vk{ zttXP?m^MvgFV_~{RLR~>V=vy%QWa*lc<}{b&+_TyDSgFT?vB71QH*nfjQ>^;Lv%qa zid9!nAu*D>9>t>z1pZS~WI;hx_);%M>`AJpC|e~PF{;qrMFboWiI5XRnEzJ4#2JU9 zxr=UF9TR6@oXA#&1N)eUniDIc3q=Na4D2o+aP!R<it$lAeSWgYB6M!qf=E0-1d=XZ zbV7?Vbwp42(gg`%0xxg{+2@|%BXQ%TOI`s5=DHAKW#7{R7m*{8)g-nXCqPhzSR=m% zn)0anLTsJ!K9cJ&XZtjQrUKpcG`kH(EvQO6(qP10E%{tq5Qx-5LO9@zlpRv}yevA! zdbMVbseUd72bwJuW-Udw-5pHwuaY=v&C)(+;1$S>&A=)X78(?%^2pxPSNw!n+Bpq{ zib^p1+yQXq9ZYN2d#vEbBQ^`p+}jzI$n*Zs+)V&}CCjL%j|q0*m2Nw2O8LQ{Kn9?1 zGoER3gUaBqRI#=cUPVba!srGs-$|S{wUn2(b*NUFT=VR?ypC8rL|LXP^{24r)mRjb z-}pN=0)NMtYUIt08t%|+{O?n78czQk<og|Ex6R)(QuL11{*7FBf24mSGuDGHBoPnS z!hlcXM<`CfxpZ;w^}^!vV43Du9d)~vo0?-O8W|n`tLlB~bwl%A<Mg)ATn181Tfr#< z@#b+2Q#+tjRE+Qhc+ImSQ5OihY^MEh-Q3HK-3>kLb~sNLBo}d<zQ@MmV;i>K1O2at zWTO)`&{YFl8hcA_(6|U=;e4V~T75fD`GoWN`=@{Z9!mn5D7n=XZMK7DQw>9wJRVI+ zygi|^R;2KGFX-G7?tGg&hBCfg<GkTx7^)Q#<FIk<U_N@qP~^SQ8`~SdZ$05#Ri|bJ zs1YO3kjFYeYNnqO#14aKCy-=L>hn#$(+FzIgh@(zo5FT-U4$isH~u&JKS*085<9m| zuJo-7gIqUI@f<_xUnw>mIB1b0j8P*#--Vhf*Mo`UQpMlN9}^n#8B<E4`7qb145utR zO6d+sG}B4+M|0f2$<YV~0#Geb9+Ux>eChO^F`Z&^;!E#V<@2!D`ZE*UAmFYz)XGX> zf;4)oNF+|ke|dd>B(ylJ5_hI5zG!mTCc`S*p%ZC+0}Z4n9(F~VDu}yQ!9$h`0&*7J zoi&7m#zqaql&_p2&L0~nR7DpS9SauCKX>-;VTr;c0|C+T#!b+J84;J&Tb{4Ee#<cV z!mglp=eec=Cu*$yd-K288=qM&i|$;4%A?_#so-$eGd1NC3B)Z4oZo6QJT3nTA|lX} zdj`FEtwVRIc)RlIJtj(FYgRRT+Ja=Ar@<WRa^us#)LB^3EvLly;A^O3X5Bhj>$(r) z!BVQqU-<*sQNsO=YTpK+o;eONz>my2quj%!N6^v_K*_%!*uA<~m6^B~;y=9qc;fu$ zy9!ql+jjmXWMJ)=;=z-`W!9BkZnG*?mEWqjhHiYJ1BG~_6l-jNub%6w37a<P)yljA zbCH{2L&;AcuATn|8V2MGD33n<9f*SN^E&MLejZ=o4uAY3rwGoByc>?Om*XW4bsi{L zg#KutPi#S7J~{J@r|MRaMMXF7D7#D+YG-EHCPFFu{_yfO5AAl{wEbgUWpTXthl^50 z{dG<BK8_v>SmsgQAOn^Z8|-*Lz?ztbqnfFz83*@>-ao3t2o#C=tO>z*ClYV`d{e@3 zd6*XkIFmK>q#0SB&nVS!rI9uKBo<4=)3>ww5n@>&`A%Y2I@#;!Lt##WczQEcu4>h1 z!y+7GszF|{90jb5?XkRBFQ30^zD9d9{rjaC?^>_-Gt!(A@u^v2Ol{(6te+QKB@dBQ z8g0^>$aB#{;$v*I96?Q@piRLIEz{n1=~kQ4QrkN(^`{x?icIaQS!&;Wnw2%$YbV++ zWLo7X>T1#LI%({ZZtZ$YOd?s#`eW@?ff~Ap?Z#Og*QVNUO(kgZb(kt87(qJB9W=A^ zG|ZwqNMaq91s&Ox#K@M5GD64gppLuI9d`~jEt@*5`8w^Sv@WlAVEHt$W?Cj3o%R=_ z@X?(PZd!&8ovvf;PHCO)OIne6T5fLb4<TJzW1SvSUA~*?o*Wnd@OC}YX!p_R3QX&A zyhE}B0Pf*pvzxWU`ny6lyDmgsVH&Uihc?e<jq7|mj?rB~4&AZQOmvg+7#$r)4SZCV z&bb$dR?q}gdQL|g3l8ee7OajBk;~4c)Yb6DOJRV_faJ_LJP(QzpQamJaGf+vVIUau zq#!*(i9Wl$)3$(SD?U<i7ZgO!l`W<G-kg+xrBGLAvM1q8cVk~-3W-@guN^MMRZ|Dl z!@Rv?I8dP6Q0AON@k+Dqdg2o`0FcO<S}GF9FA*bht2eegww{j)9Lean8%;+^!4-se zW`*7-#RC&`{aB$|ms9QH^vfL#gopJCx*<6yFaVk&uRGS;mV!kG^v;dB%1wUoP?N+_ zd{rD7JQT|>2;?FFt`YDJW^jmQ1P2-P3zr(86MX@>9jJzlF@a{+DEv$G&ZkeLE>OXd zasy*l12<gymz(0dloH<k&=V?y8IWJBK?d&c^@}ta-DNV&D~|;IO6*>v3@VB3$<)tt zr3;Y*6+1AR?23FY!(ArDMNYuXhIoPlVQ#qi;AXKo4V3`rx<~@v#|x%V65)aR+{3`Q z;$XCDmS94}=XFzrk(pfqQ6k+SCD!h(_UD`Z8t`e2VK>|m4<(rXno?klC7R+IIG0NY zcH1(J*A{A27RSvK%l=`Qvy?K3Y+S1WGnnh<B?E(X<aT=ih9`!>a>Gp4!;<zx0`8Qs zs|gr%H)&4q0tbld2C`ry0|3MK_J*#VnP_oz^8NwTico?Zq|U|JBWW9x0?5YOtW-yC zl+KtMMRREk@$(ca<_~QJTS=5G0mQy*97)DYb-!gr#!Az@llch~j4=_)Hn~3$-}Iiv z-YbI4F?yG3)R0qi_!Ka5O8Y1f*yKZ5n1=7PqYNTKFFP_?%mKM9BP^|fD4j^otzk20 z5s{!cXGMh{iuJu>ZW=RYC!Gh?qrTPM^Vl0YaA<aSeaxvw19Rz%$3)z0camLm?12*S zTO9r;Q|wDZ+|B1H$~RNq?n8r4VvuVzt)X}mF_?cK4?CI8?K#X{`ZmS$u?y=Vpnl|G ziy1%J$Ynas`KqOarv6LP6U-w@@H5z{Z=w}ZKgbJuKGO^k7Nqj|faLmM96|s=fe5uX zy(~U}OJqR01FQp^7-u~c`lvfBEWw@i#e?boDCniAnn`6VotHRDzxo(dC6%8S1xEx^ z5Rsv!I-Y}v;=XfSjy2;8Ya^mGwf-e)>O$ra00b=uW+4KlC%`V<cMMu4$sKLkG2h-@ z*D7^S2#-k*CPp%N0Ri1W03iZPzFWnaR@re+O6p$q&wEy8_lhQBBc{I-N4~dCw|+eP z-jV&H`6~4WZ3301)pv!do<eko<5d3{bC)@F0NE;|Z0d6uy8p}6$QR~8!-SSg)9KXH zU!XTfq^BpOndx*XzGkC6)}nK&r~8tg+&-K>pWSMD4x#{{VoO+U0G9aam;!&Z89fut zxtN)?Y1T(>GdgxN8!-i|&;LQa_AqH~hBf?v-iM9MY)jA17S8OsqxQ`2ZwSpE#N5Xi z%pN6i9Tnam2%0_la$hHF_Rj#vpP#e6J+o(5=M*+)0S`C;TG;matQjg!nO(kVs*I`0 zJc4cyw`KYGoovtww)NKxbmlsg!uDexYO7L6v?TWrFvH3B-7}ZodxCftj`#4Qd5P0G z`r7OCo%4-sRR$LbO9?!`nmGTpScy#5HO7pP34IT-d?`J?1s;R=2AFAF46-^OU2dzZ zG{-s4&bhKs<0A8jhRlY#N@MvUFthkP_<ga=YwXiW{Jq`*zHZnUBogUWl=mlQUc@L? zLNKJ)Zhd+|w1Qof+2Nhg{MIic8Ro**`*`1a+*hjdmK1)zPSkOzF--|hGKcsjvryqx zepRc?V`o{}1^I?Xk?~*lhacwEYHgl4IA**Ox{2hJzbAVuxMECIC0>XO))$khAfosx z8GK_I%UO+-Ng>VAvY06Tz>1<*VCISFxk)m0Bl)_Xqq$7Gg@=&Z_{wXxD(V#lv3}S% zMoP<9YB|p#J|fmsU)t<-w5i~O@zz|=Y@pm)lxmF9H$}54sUm%FtzqK>H~w0WB0dj( z=hAgsaT%D{;Zyku6)Js|ihS1da4%>=e*N9$h^m*)LCJNE;7YdbEG%7QblU=sza6c- z_F8-`jXzUN+3qk>F$7Czmf5IY(&)#m+VP_~Fz0Hx7{#yM0wgPWZ38bFoQDE%xBlR0 zmR!HB;gX)7`8;+b*V`qY%4xq3&xzqW2mu}PzGsHB*>iE<5WK@I7L{jH7=i>ty&{m< zo;{wZlb4^0Y&wc_TwgugXndRj>?9&KRkJ7Y?r~}i4p$tpExZzH?;mJ3j{nH*`O$fs z?c?puo*V5Ev2FuFn|&UvJw=;?+ZpELn{7RtLt3nZN1LO{Y@PgDc($!C+bpA6TNBJ| zU;N#5eU`u3a7?6cO>eWFf9u=|ciEb)Wtm>tTIgh*W!{cy*jk!lpLjmK>VIkJ!FCAM z_WBK$3+(G=I@5aX_M_76ZDy9u@$EeirfrHHpI_St70i45J4Zz<L$^K4bazf3Gavcy z{P~DHDDr%mv2&K55#6x^_^fww<k@7i4LW`RVA+L+>wvVqx|DZe+Ro4yDM_0;GR}8& ze#I~g!jhJB<X9oGnDhVwg_QgAfRY&QX27!&s+8!+qj66vMEc)!?|bWmd3?Qr?w5kZ zknc-`gmr-54AP^co&&!{dZBw`iTeA=dzX(dT@LUup&zK3y4CFPt*$+m9|R4Wqww#J zHQDX6BgV&~@pePe=OTG{E{i_a!B;HBcz0H4;3bR;7Vj<wjTJnQ^o;Wq#B=o~IRkw0 zXxKg6d?Y!RYB5$MLSJgtS4B28;H1ECmx74%m46!lJ+RM?HAcXdQtlJ9(|up?(<MQc zpP0Pc_-<O*+5m+u%zCJp!8yX?H~+u1|HxVj;C4x@vFYMez5eF<1n(L!2qWNsh4RiZ zfQ^K=&NUBNFqc>XLMI~CErIKc(NpzBZmu|+wnzx>-Ze49F*C#QsW>(akj2YaI4|}| zZ%KgQQSz0zhSPDv<p?fISU_N5>ic@yr)DtGpRqhY!@HQNxl=dUdUqVYtct;0krAR3 zFe_xqd3>C(FB&fshZ{$kt6}k{?Jz=U;<J;)5LUxS?twS%<C6j;{Bd~X8l}k2iA!K& zcOaarF42Q%ab;^fC=gb+L2;!Rwx=<)p9RTSh4|dW)7LxDbmP+9;^c(mZfFNFmLz@0 znz!cT!%(o`=9t&PmLfWIpXeS%a6iYf{K@AzsS}B&hjOX~=5Zkzz=im?y$n}gz)URT z+MCIdxL9ROl#-y4KPujX^yK*?+!btG01|qBP0AMYdc4H+<8er>C%8`gDa~9o?;eDa z0J90inZ(6dmOyEVkla}@{=%vx){)FW29Azf1&=5%h4i&sM0IF?DN~P1Po%wk5_)dA zdxJ4xk}Mj6;rTNs`utrnOj6VI+{@SdH{cAp7p%xI9!YiH{q(L}ga8gKj|A>AovIDt zECCF}6H3*nsE*^H>H5E$vyU}zjc6C)M}OlUlO)B#k%|XFTF^)t$MXa)m>z&q7X)*? zroA)Q;>*WB+=!=CXO(l}qHNSI)>hY2VQ41WzwMz$U5P-dI`8xKrd_kBa$DbD)(1!c zLrr83_y@BT0`@o84+MrtYIuh0u7`pn1$r+e+&2z|#!9qu!`|PaNE`dVP_NlkWwe0j zJJexV{7^P4J8Y+>rP5;(5_LHD0i|I)Q%<+CHtD<HVg2$P1)I+!s()sU_Bft^Yn3EJ z^1}8LZ!Pr^xa>MY*hepgWiWmW%Texbg95)RrG}nu-&AF{T~GTOy*pR=>NtUQVmG5H zt8Z$#|E18~_Q0XsMm6MiM~usv!qMh8)0y%+M~WxA3tg$Ao{yExUt50u59;+~zc9z} zrH}i)=zYKIa~htRlo!*GeUNF9Bak}ITg=kdV#qv79<D2fSL)Y@&9!-whlJhy$uZ0p z>01NLi}sE7A9AEE9cNZj<P)E`Ng|tmhTo5yP`eR+Daz2}8vSv;9<^a4!k#0zdrEVE zvpZR-3{7SOS3CMrdw;)kfqE4mSeg#C4*qqOcy61JVIC}LEzO_lQr5u#^59D`^F5Cb zKk=YzsNGjeeQ3<2TR60nWP2!;8VTc4@{Y78Jc`QAf_)f`194#qo#2T;{#8;8mxA_F zA=lVm*mC!1A_AUBLesr^&(I2#L&|6t@L&ji@wYE`4dy>Hx?8HOTgI?XN$YiDbcH97 zpa!w{|5&>3cq$+Ff8b|09Gr6;vgZ-W-efx{n}kq`W0k$L%dz)NWrSlZWbbwCk)4dJ zV~^}4B7WY#&-dT+_jMkR`@Zhi^?X@3@>dUey)?)e*OV2g{eJs#q4vwC%>wlceqT2- zW^z2V!hf`?z$90=ICkWY=OdiGjve!2&Gv6|-j&&s{IRRFD(Y)4I%2rNE!?sDRj8A+ z{$#fvE_*55O|T%x)=`=Ui1aetrTNmy;(sa9&mJ=`(#4n&AUeqK@R{4-wLtTwdo6Q< zoY=6$TtIcTsWQ3PsQiW8(%{d3a^m9;V(yBKXz;a)f8+SzC_ec}3;uY_!1T4m)C2Yf z@#*LO|7x`!zLdXN`Wio%{9&inDly~K{7-VkvPAyg0#EkydyBpfLz45aFaCK~yZ@Az zTAo^bF0~S+WxAvoCwnEemZYU1z5dShjr2yEL!0zwrvH`nR*t`5!%9I0!t?P9vez;{ z%ewj+wkp3W$nMq7y^-CoeY-Dn(3<e7;h=+@f_Ar&DNycsfUmt}x0&Kv?nD#FCja|8 z+he(3vkvX@e-;AwTYfLc1b#bN%?MNg%=ot}T<kTw$enF{6$&{2HFw?e_xj*xyW;gf zt;I~S7PodFqWle!9O~!sW;;Z*B53yKh!~Q)V~W8wn3nk?=z2NfIX#Gte7BDcN5E4i zBR!EVC^B;64(ckT6T>cv>Bf<g7QJ%#ofdWkpLZwiv7Qs(E<18M{QW@3Ay_m(E%c_g z3GU26yWl!6dsCiuSLO>_PeYh=BD9Auox^i&%M#JW-P^k-9QmT=2gPV{Z&s^t_@!+Z z%>9NdaLl2+bJzjmI!f^HL=$`DE3fXdheM%C#5!9*h0CKD>QVv;d@OI%k0w+^pDM!U z83$M3`(ADL32P_u6(*h)3afcLR@dzg#l$U&K<yAv=OGD?I0|+hpvOTJ8QKTmz}~D6 zm4y>R3LwEeLu3SeNc>ytJ8z{swY;j*xaac4^0q4;j;zK-UPj0u^OYW^qQhsmx|ohJ zOmAE*lCKF7^nQc{8#&zn?eoa{Te}!We25kHqTv1P25DC(Y+?mGdXY*VIN}0Yi6z?+ z>VH;jIDJmC|9AitFI)H#rreL9M-oc}RZZPo#f_6{7%HRQ6?gNTX^?naRTmtPZz);X zH%!_%yb^8QuA@p%y_xDHoWAWU!6GBpZ;VA>uPCdSTRN}-1eJ5OSNB0fm?Xbs3%2h3 z#YBHA`}_&_?BC~%aPG$2Mjk~ooJxWl%L&<2*EXzwrHDXK5sDZ0Ke07zVc}Pl2`p%( z@V^aVB5V-}9b`rY{5`yuwMCCBMC-K7ocOJW-;TXIrY^IGd{-2;DSmdP!q(%Cr|K5g z2ozt17An&`zW4Hbca@QEOdP-C=&zZXiTC^rHP0|PXR+>UQ*L4B!K;^*aP$1S+TP~` z2ZxgRsv)n&k%d7gtCtBfFwiY)T)$hjf7hBqee*NBFWy~WQ?{aY*|3qpRGk3*y{h`4 zc^aXB4AA1)gg5sZ%>wUSi8)DIecRQY!GLQ%Oy<0IJF%)`AW119lgOuoOz<#><8qWp zwxJVXTM_n;+=A32HJN&(B3J~ra&`=Nz2;I7iGFgtOnGhG&5v-2GT>ij06X^x6_&@i zT+Y*fYv@xrO^<uUzsOAfq*3llB>AmlHHxmW`M$HeV?yZ~k3pKXX*4QD>~f7?#c1&H zm1t^tx3%E3*H>%ek`G;_8xj$FgD<@*(w15tw+&d)IUcIL-=|c5KWPQ6SBjEcyfG(c zI_RV>RGZLVaXda)C|GPj=&7Edq|3`8_i)FLLIMVDBD|wfH}5abhnsIB!9dkW<y)aP z)vUflw<Vyx`4m-Y{d$aA@2A8~#Nr%6++}p{DyfNxC)xV7fSDd~(#hXc-l>Fei42}T z$jf4}{{b+afm*17-9za+IAv$LuC7(3vlg5jWCv%A#UmRisU8?`K24NLB$iyOiF-7! zys$z1panM`%IRYz{GGKf_lhd+QHrJ1zbZ(TLs_!vfnQ0JbAz~lCR?as9=P2NKy#HF zL#%B9VYdysvla=k8NU-Rw*{bt-G{T3qDaIl;PSk0j$*&5FvFyD6_LQ8RMX1@cu*eM zGyJbKhmWhQB#r&=9#A-m=Mc#y0%+1FgP;vK$ihw7R4N@*LJ_%o$F?KS+%kd31O*bM zZyM!0VT^D!gfMRP%FxdC6URPXCb5v}w)uP5a?fDpLOCL6ZG7-qjVg#a_-5yih5J@m z?m78z$`@C%d%FTj)*B-3UUS{wU536f+QsyO+&kiZm^*IBHuX)r@8MSjhQmOHfMts8 zvz~idY8;{wa-S=a-BLvo49Hgb3S{VOeycU^0TS9!9_`_bZWa@)a^ulWklR~@h3-sS zYKDDMYG{?EHMX|%Xv8~Y|Mg|s$%O`PoJ3+x2^30?BnkzlyR%v|S1ZF1^OlrM)^8<u z(348VY!{8@!z^e>EFO57WeUYyP=YM`A<DwIn<j|MM_INr=7N`OtS!p?sE}J|r3Cx~ zI9{0_54!D&&N9?|w-q6Z3?XmAh;oJmi7)-?A(mH1u?Lu0*Qirsl6q?m_`8(_F!+}< zEXtAD=Nbm*cdm07bFxdncaq8hnfsNnYZ_+Q-d}e@<;KH2@QI`!yMD8D*HnV3HQ8xo zh@USj2?=M&r7Tkut0&Z0P`9y%5yF(D*iOc~r2B8Ng@vlaI_S73mDWP2@1xZyl^m#{ znk^v$ux_**sG9wL$YmH)*0R<8UYT9c>;nKz3z*k+QavDrGM$J@)Iv-khle=nmSl#l zFmV`C{a!zqwYOJV4=aT0+WYqrenKi=9CGnJnr~`;SYoLtj<|@LLs+u+4Rs{{6pr=B z4NcyoA>OAXhl3BMv*d=#<|`pC!(9#mur(B18K}T%l{=Q6HyKP+)9dhTl{+~%qhQ57 zCs*$HTCdy*dvA>cAg3OR>I~&vVUgjW-vGT5#s-Rmb0aZ|x=_XU{hMKCdE)ts>FOey zYl<tKG$XmJW&ovhVEk5OB~9@5Kge^90UncOSbFG3K$PZC?t`0Wa7>8oN9(oU4`N!> zRr>p77oW>baX5|VJuK8Kzk>$d&=Dvs4jG+;BGZ(#GMCTW8OBr0XizouNH8lw_zTQ! zrwXA~@u@_{x5-MvY*<9|RHrQCW1p7}k;$8cP%r~LsJ~WnlB1svaB>wC0&uy-DrAOO zGAV3c8TivjqtCmX@+p>jS(JKQg^+@@Jp9+2)#;x*T@}kJ@;w<EAHP<x-=Db|y3f}= zFFQk<*R-0LW1A>LIy_@vd=701Eo>Q!u{h4x4gkFu;VK-b?wLt(l6-H~Tj(-KZ@JG! zAyDW_rRQ?R<vwNdkoK-I<z0^-qi$S9o^3j=3Y!q=qF1>OJ$3JTgJ#`dywtY1>k~if z<yGV>sPig*6Bt$G_w=D}*4+TXS?{_csuixUV|UA=9!KnLJ}$WXW`x53>h9In-9Xx6 z(eol~)<Z0p?V)38kOH^+@ZAv0iC|ss11av%7sXeo;;^R=!@O)kl*Qrk+<_Y0k;LN> zS+?64?wi)HQ`h2Xg@@6-+$$BuF^k0xY20yDW3l_(#8I}cZh9_ZBjPo91y|%_r|U!x z?4xyTB2-6L4hH0W{0RDeL;-+yTju_SFHShsP4MDb)cdx31{TxCDjtHoBoN2z-`7vT za2q>4yKk$dM!Vf1AMHO`ZgZ#Vj(ynQo{!uXdeFrO>s#fX6PVGX)=645iInbEv7*04 zj~GyZeiowt_U^qE&wse&cz&C5fn<E9Zl@$3MDrVLBQa7b!n1i6BGH0o4h@lh_KC-a zS9(lk^$h%8W~6%g6Y2J+>@P*HcQ(p%kvPeC*;F7qun=~nG6f8xaK*F!9%qx#O-m0^ z=pIvC`-oXn`9`WlGKRk;68@j!oXX4V=0NJh*Kh?Ee4@mm164Q#+wfddaY#?3IO{4T zb^ufGWO_k2okNP44jSwZ95!HTx6pLVyXm@J@m@Dul7E)EM6n{6`xBTfAV~2rg4OP` zO?nq^ZL;tsIPWTCcpaoL26f%*Qux>9Qt3d3R)6{E{UC9&MMLTKo(i8Hk?3-=;8C)W zG~yUy0O4O^M(Y+6fB)+B2!9iH_#RUH4=g)uaF~?W>5S-7=3kNHpR&}c%zZ1<!;jcf zk@-D!FYK*T<SvnC(hU$TE!tHoJ|d3^#z`od9XUSEw4WbwT972}7zz4B-0{D<GC#Yq zdoyq4m*0vPe>NNVw2<`{@26L+6RZ#m6$YpXeMEgU+FN^ey*Gu3pL(-DNzHfss7x_3 z|AG8=*_HBr9qQc3-7Ilx9&NmAY$Pmc5r$V{QxAe8qdwlgwZ9{H@K=y?y$dm<q*_M9 z9o?-aud66-sgabzDW`mIZEC!#MDo0ALb9xw(vpa~Lmdg+w2$A67F-Pda;~gX8NDYl zPy#m;%#cLrRhBprRBDeWNuPCw+9J)kotRGce``+26zoa=6H<_}AK!T_nD$fV0rC1F z_@44RgRs2u!R_CIWw2q@^;7&td^zIW{%<tJ-*Dma8cLExFxgv`-f&h0Llx|dONw~P zJwri61I;s<z5cAX^d?wvLNd3G3iRa5%XtBUdoLgGx)S*lPwWX6l1JaOPBGiV8@{5& zJQzt-MGW@xaCRV}CO_F5vio}v6&t#W{3_N{gh-2qp+%LWHIz5xEXb8CGZp~Su6)T5 z0|@}w@vPs9O#eq!LCl~6A_@|j1=HQc1}d-&Gk7_e+mLQDJ4e-R@*~pxAQB>S_T7mG zwqt`VD0|-#g;Gt>?n-872to>*bMl~$3zTDmB?5e4xT(Odb~`B*5$GBUXZR*77b3kj zC0OpryEjE+FrwfH&N0&!VXIy>*;vtyR}4@Q9_kYA(^cemcG(LN<M!Y;Krk-3Pt8=_ ztB;Ly7LyJ<bewu272{e_SbZ7mA>A&v=6Nk9s|A-D{j~_-k=qnIAE}aW)|LPBtEZt_ zp}krTEIxi&t)vo*rVy8=^HjcoDJyz*@r$eURjFu+58W46_5SMLTcj2<^uWdQt8I<C zsg_!xxTfi>^oN>*L~*T$Up0zqv`G+(?VgJbH9GYg+N0tRW1i@2iZ2kv^-2bG|I|FP zQd6g>?Sa<nCurQTuZH!rn)hl~ge4w_3>c`@8hP|RH2*zgQfur@nz<LuSPW!7RMPa) z!NJp+u%NTr`zcckuUfiRqI0sNhHmP#UhX_$-M7|{sIA9JVEWX`CD1hYgAk#M(<$kc zhCwu;XmB?$>q$iBVC}2J70(BjCF9o}B|&Twj2q?@r*+Ue+h(=$AZ#(p%)ETAVxS98 z^Xy$i2+tX+(l_KIb%rU{v}xG1a~$kqZdz9fmTdsvMlUK|)@dBpDQTOw`((5}ploaH z!Yj?0n{<&9fcG$6GLyCVIAu;+QyKL~FQW_FjxyS%y;Yut=23%N;V>E0yy>-x?FY%) zM9J6L5#0>kKcb1hNwZ82faicga{|$PCeLohXRDxJsoQ$s6B>cVRR6_dFqt=B3yg2y zm)pWx>PaCTpWhS`X1S$=W~gNMKl|Y{PaUwJmhV7fvQW8SLawJ|bBmZk3R^G3D7yuM zcs?V$%<_tTKAV{tW%bO@>Y8Z#-Hon!bHmW3(4Wciq%L9j&ug`q*AJzA=Q$)DRc_m| zTB6nW1&Ad0yOpf7Wg-C)^i|soeZgwPmM0M>waQ@EPK=L=gB)NPl5L62+IpNvpNh_0 zYCPQQ>K%}lKbeco>%wTW3DPf_V_wM9ho5S2$Qzz2R48wyfh8jGbWj<P>(Y<Y-zcu^ z<HjnhSgVr)GY>#7)weE%$(_?zOMf1xrI?<l8%mc&^yyKp_cw;=IblfN5X^pKa_?nb zj)S*ILxP!_R~yM}yL-rP6T^veNZqlDGxMC<lFtJGHCh*>`XofRiG)@N&!s9qHiXQ_ zcTo02ghqOKw%J~eUZ-D{g~4}Y<Z1}yR4TAS30j49_!o0<VUvh3fYFdwz7(APUKxq7 zpyZt`U6M(kY3lkAwnSNP`Da-ju#)6#c{dkS|NU8A*m*5q^Invy1@^DnS&n*2Xx3L! z_7(g9o8>@ucg;W!gAu#x2*GT9pXty!|66ZO!M@Ti*pxp{so%d*IG2Nrh%>93b3%?q ze^uU=NNuP?^;HVD{*x}XfK+tLRLp}nw^W;^!)@9_WcEoOTtZ~egM+_<g({>)uUzgM zk$i%$DgpW}`u~~YTQv;pq&Eh#Z0Bhv9$XEd<^O>^L*ocbJv4(V>;!zClhr*CiB$Be zshqhqZ64p7Ye{)@1cO|Z13o<6=Jm8c>2$)CG0r?oj_P?pesVvjj=qYyNom!j%B@Mf z+*tqay`a@7;*_%<K}FRR=I#`F|3Cm*+@!OQK^>p5rogXQsnN9+^+Suxk|3b6MQVop z03Kvje{mQQ2#CbubLHq;HCc(Y3PZIP&7$)ECikoG?c!qak-C<zjWgQ5rnLR@2)p%V zFQ)ho+6St{{-KGQ#!w1nscTk-WR<DufABD?1W6;DAB5dA%Rrr=7ab-$Lc%C^7w`C` z-tMFcSV43f0<2=B6M2m5^6w_+Yj_=*A#<ns!$>F|>JBAEI4Daeo;FC)cig;lcpUI^ z;VBQU!}Yuasf*Exq06FB$#t5}4urL7z01-M4|fRXqdfJ^`Mhr`S-cQdRpCgLgy&*x z`ZSZSWFP*Idex>t+W@k&o=ml*dAuCWR*ImNPxrL@R`jUIs5SkS!*sbt-+TECubr3K z;vayIGrV1v+Ji{w6h8X6t@a6o@PaY!rgbM{lwGQ+E0WvJOV3^SC>8{~j#=}x!kwPa zdE<lS1NYAY{OVT*x`q`pTdOgIdfEN92H(J6Kh_O;88YhTR2i-=we&h5a}zMJHB_u# zCn-<qSSLA8%gy>w`2SO{ut(jL4hHek#E)*ER+=Y{<2`g1yQ3XL>ZRkoOm5dhkJJ{$ zYqaZGf?)dn>`|QK-SkP?`U7{;9Q6knV*W?HCfBm^U5pP3H11Al-A?e-9}*eh|E5is zbE!WpG3$6snIAYdF)Y1Z`b~GLQ_f&i{(RSCNc;e1IHvS7)Ie96Qpa$d_t(j{aW(ch zPf;{o+2n+lns|zew)EcQH&Ui|hLevp7T!)ge5CXE`;7SW@869r9t?K}+LnEvGIbk% zJpJ5v@B6fQ5Zq|SB1&Lt#wtnRbkZcvY3jRCW}MN}$1ioJemGPP8_hX2?itP56v2(3 zDdn)-P_GB2Q**Coou(JOms@F{d2W||7<AtoHa6$^9yh%d2t=4*tTwL~rU@Yry6Kj~ z7>FyEg4p9tR-&c_8kS>3xOA6erT0x5B6tu_){-<vzFQ_d()F#4d+a>BK8Y55aznkI z{#pCrHqt2i{?-2MX6kPsQT)9~t{-vEhe}h~&tV!*jlCz%ltP>v_BJWFKXOTC@yJyu zP1`*cF50N9Y@OY#mfc|3t2KyEW0TH}T!9kj7F&{9B<~d^Qf$n=OCxdSDLQcaecEL5 zdaD@7<mLW5B8{}0%k<c4_{H3D$oIBq9^qDBUS+FGrQY549{lt@+jZ!O1nXND6lOn~ z#{=08JlXJP101?-(zIMR_PvES`2NeZbdI__o!2_w%q)o>2s853zCP-idY#+2p4nQ3 zm||;8Mim__+mydctF{%|pfM*l&N}PA>(V|ocrW34erUbCeR0HYp(t_8jwS-MxJ*g? zUv84`EQn|$vBpoF9i;3Eps}s5_r<Rg8*z64-{nRlrSK3#T%V9W22ZTL!UnFv!A{1* z8E&r1j2rs?SD=KoKNnUZ@&SZ!ouK^jgMHLgNFc-IDl<zWkb+gcq%Vzw_5UK20cYUQ z+nhNU^CXHFPL)s6dAsO3=v77HlVWcGF^2I}Rf#W2aZaAAOw06Y(j!UnuWD9Vj#Aa+ z_m5(VI+heqmr1Ywaj<!uM<}XS-lQWrAY8)NeF{%+Zq*O-;8I(2|79V6=m<k3Qq>gS zMASS9MX*t8V-%?x`*ow^lF9oYOuT2;2$%tr>)}ZFIJXl#La`BbgCw;4m>@EuZy;#P zJK38w?Rdcm+qbhN#oo<?N72J<mST4l^ggNc*FB7RcCu0Jy2`OmAN+A$d{cTnP50H8 zx0!pMo3hIc4}C}8X8o?&ls`&)_<H|s_P>)&MPL*2x64N^Atw=n)KB{PQVxkda5Tmn zfP`Cw9J=m`uv={v0|2VrKnkSI)+OaveI%H^9gh}7Y4U0QK-r~~0)^G1p@>5jn35h3 z9qeV(4FXy;;?paZ-=XmIpMF}+peoz-Vq(NC*AusRD*&4h-2_Q&P5#}5jkTt8ow7HB zG2w(&;|@ln%J_GsHWELd+)%Hwe%}+mE<Z+*oKxVCoq;~&1e#x!A=1=t5KRCGnUeU3 zbg?$CGm%UE5oK39r~}%F+EwJXGf>t9f@2^c$}<b~e#=p#e-&YzyzHc7nk$smB{Yf^ zu3^4<l#qurA<W63;p!X6Kv4<+gDxj@Kdq}Ye)r6%o^f95)#I`riG8=EjA!eD9~xiU z{6sG_l>`?)bdkV;wX`BZ5refkOv72K=B^Lid`>D#B)<N%|2@+`!5b!d7*WPO8<MeM zSYX!=MEX>KE>}*C!VEY3v>L7r1NbYA_R&N{hi+y|mXr;huUvB@=bn*1OzotpI}8)K z?A?67k>IMsMk$K|#=jSaMBgt^qpSyhKEDBAXE^n`wH6<p3b4xJl$TE2$OG^u1*|#m zRvCpYz0W{wO(=CS-`TD}ZU*DxSEPzt7>(D=ARvNeNijDlPNfb6S|~n>yH2v=67sQz zzd1|;(=5Zv(}tbAeq}5(_rc$W<1Q{-6&i3l;ZHjtJhphRJ*Dt=6G9*%&h6fo$f}CI z3JDFpk|h_t*}Dm)sv3hR5`9#V&<TQ{7ZXJ7r@^25WlB(Odk}l~21rQc6!tibP^90p zRe#&~;)Uw3vd#Prsq2IE>DJTV<=<sC$1filyYtwSc3s53gg*8i<?c&;y`JDgq~eMH z(I-|RA{9UYv$XjLRn<M`v-zMqaO@f`uE6hPuaYrET`lotxs2;MIAhUK7)04E70y^X zPIgP!ie4QD5%B|(atY_r#U{GaQUl`wbZ5-1gkJt#(^y2{8C{niIFy_jMsc=st0vLS zFJV5mlNMg-QcGdV+?l8A@7Qd?>M{6aL+PmQJa<FK-Ta{iknT?~LaL%yqy`^rpNORu zG$WQg!xL<tsX!S4A?%(2fX>TRruZz+dyFjGj*h|YJ&~`NBFD*)CSBx-3Z4aQ%V3u2 zrV%yg<1rlbb(^<OCuh}*1b(T98?XOdlrO&a=y=Gp>AF<QcwhKbD46}H&7m@73&EpL ztqrCi)Y;Q`br#{DL&^roqeEXG3gfUVHWeU{CWYT%;MEcR2keSc;JL7U5IpfZccUW} zLW;Ebose+0d3V&ef<zH^cT0x;>wefRZZm?JYcT1&vrofU7IDve3(416ulK-N8{&+Y zfA$Q0w%ebanOk>FLlht+DL60;EwgE%2P8?o0zNfSDbzxOpwIvqm8%kwDge+M|4XhM zhDQT$qagF6S2F0MlrN+^qX0@hU^4=yi~`9405up`>_c)q0B{@4&+SYGAdoO)K=Xj> z>ywA%WB58w91(1U41oQ2+ZA>n5G6>s#5=<T$H3Nv-~Ic*5yW;W?rMbM?`_x16<wSZ ze^cE7X^!g#Z{7yJoNVF#WlF`cHFCQXLzKS%XNEu`i9ZU!|7$CTLUd2OFuOj;U7z^V z0Q@g0*WDQm*{KlhKJH`?OLWimPg_6Y-WZTuaHSLV^UWwg2u-lAIJr*&nW;GH1prR> zHhW!R{D580u_Nq01tsCEyZC26inQAGZ))PmM`5x@A~gPY4ofR&T!_fkM7pK`5X&)` zh~V-Y+?ABj*2v8$3NGuTwhr}<!jk}hT!8@(NvYiEyZXuK3G`M%WP%uq>j#xEvLyOj z&QNS3g`&`MEQ-F&?fgm@G>a$mb4Iuv{2atxPgGnpSHzA9(`r<f0njviN31SkG|%1G zZgG9Avi`W{Hhn`3w-BH{<K%C!KodOF2e&zcCMk7B)#4EPC@@xJt3j7Ag(ix`!e^W* zD6vGE7)~J}m<*c27s1JaBf6gq+ChT4)#0(DC!82|3p8MxBDNDlg2Axgt2|>JK_rd- zBRg6a6(OfOim{%!HNedZb|>AgG|YGB{dBC+l)zRwp@})-;nV(;1prbf{2Zy+jIE^m z<9f|JiYgO1YO_U<PyFJfiror=JC5yiq9B(7g75YzB!pwHzl@)gA&+|FVPnVq8KWe^ zRYxZi%oi0u-;XTC>K=I>uw+y*Hdaj+ABZUz@Jd&U$s35Ci10nAR<1i1y|cRsK#@Ye zF&g06*{ROu;zi)Xz~Fe2KjjFPV-B5T@}nH)DI8cEP2NHv^~4GNJU+d>FU3+0dp|*r z{C0GvM-Fh~mqq|WMJVQ|WWDw2nS^eUyTe*BWHLv4>Eoh0Vk4s8#3X--%~s3Hi;1g= zDJ*rftrDR|J%(opFa!>8J^>U&L;H_8{6*G00YK=UbQ}W8j0d?^@mHfDw3DLv4pC|x zSHgi32lXyL62On;4no3Y@IYn&F?Nin3nz8WhXrL-!%_eMYSdOPCPd$WAbJe!*cW8M zfz(q(`}%nfJf<hA#iqW=N7bl5fGDhsX-I@Cyvl>M?5K&w%Bi@-8MzP;NwLZaq5uH1 zVR<atCAM%<b3iP%?IgBSJZ=W3nPW&Ak|Gv9slF_(`<qDPU5##Fp7=DiW-CtgMk(!F z*8U}~cc)b6-m1>}i5}%Ejjc&thIf*OhI%>%<c386Vw`9bwZ4c%BlNKtOyZIJZv$iN zM@+8_%~v0ZNud5v19)piTbA`7{(hWULLK2GO~1;b+<}}@Vf6~4fD(zm$$=od1y(Ge zT+0Ic%l6D&EH|Bb$T-&d913>}`RkE26DLx`IRirt3Dd`2h87a!cixFDc06u=^{n0A z;BAP}vNG$7WgyoIPX(TsQ-$?Q2YGO<faIXbpH7jT9CSN?lhYpYcZ~(mfh_&~v|Qhm z(nz_93`bvQ!E$QBZj{Mv!72l0KEsnUvs+4dSxMJf$$Mp4|6UuT5hUhDK&=@C(cD`W zOsYB5e!rOpfqntYEG<CJwH$iY4!W$>FS#AmTPi|+IDxSaS`Z26js-~o?(0lP3L3-` zt#oTEgmn?f6kcR&Ln|BI@sh!sZH(QXyiTlA!lFk~ye0D4^ogmw%CliFr#)_71{EP~ ztiU3WQWD3!*m3JN02+YmzxGlNGenVWb<j5rv8LmQLQzCdaZK;uV+FZE+O)PjxzTU1 zE(x@7FRUOj6jPD|HUdP+sk3_K01Gh?<TRB#mIR3v+)`p9`#{2pB|Gd=ME!AC`i1E` z^$H7l)0QA=NFv@s;T^TA(-Q=Y{%!mC1Jexf4wBtj))FWMWCPWIEqpJq2J%qB6Ak7F zJtKAhz6{YmWuf}S9Dhpgqm-OV%YxKl{m4W2UKvCjk|YjbS_`6)%;m7hvVUfO>;8^9 zGAfl9M~tf%c=5qYTFf!%5BAkG83_u2XiyGMVY&IXhr_a@cD!3Nq6R3zN6^XhIdB3E zCy}w+0`S%(8h#xQFcYKWM3LDld4INKr?m%yxhw*Hc97x-=1L&Ozi9X|x_e5A4uz)w z_>Np5n6)<uHEEG+#!j2q5e{y!i(-#1@R2)|uqAE4I@Jf&ran&fG*A@-7`=+&SkpQ1 z0=4D9wNac%Ah;8NkTju}$&JjL{_2S#4p${}#Mp(b@OTl(kwqkn7WK3xmA&3<u0fzg zrDnzzqAUPn4Na6{$&lXp#DSD^WI6xLzA~IZe%T>_Q>sBfsX;GCdEYiKZ{UTS#NLt& zYCmA(wPG=3P=-Bb;UrL@7&s?`h@eWWYaR4bGaNsZU6ttEKh`GGdLw2!Q%vaTBrRFz zS8T77o(N{4n`Igz#k^CSl~@x=$v&PlbK~j0SR^pz-S$DX4?by6#zjA5cvmg;eqmPJ zq>)DKFf*b{Z$SyhkBaQbv);~OjVA!5K&eXfpf&dQ0ZOcI*oltmS(VW}c;jRg9jh0X z-wQ-NV-cVf%s_=3+?{6L2T~$!dANKtn$JP*%dA7_+uXVIEmH!x4=D?l*y%<?{j@A5 ziL5dt!fduMuuISX9B{V6#keday7FOND)grk88iOdXUimB=r=|b;u2`v-X)Aw5$Uae zd(b!-p35D7n}^H~RF#&$-H~y(leLf_M11?{t^0*9{S58Xi+)lUmFTgqF-pmNe{sE} zELUaBiuo(B#?FZNE6||B;73yd4^_PStN2t#6we{Ucu__v@#WyD!gf>DW9jlc{?+R# zRU)S1LKoGwCe_l-HBpn*4>H(PWNU*y)aYE)I(U->eyDZwtF`lYe9lz&%AfbqMP12Q z-D@Tb5C8h83-vkahQ|yINg0L_%?+7zkNo@_U341@G9HytuvN-#<Tf`g$2B#YYLv@1 z_xN|zT{MpmH4n=wbosZ;%ErXYw)WAsF3a*wH@EKjI}ZA{g=n??_GkNf(FSa>K5lMr zk7_5KC%cx#)66d{Uf|Wf<5?~*r~*280x-mKoj*xBMJ_iEU;57I_@}-Yy6m92b{=BQ zCA^F6vBzPIoj1F9KMn~7blp?yvSD77A#vjsaN$%p-ccexbY@crVh!f0U>!XUVSQ#T z3zjXt0ujAw%)>I9S#CI1jXqC3wO1y6uL|#ay?FT+VaKGM<AaEzlfv7%ryWFxF?VnH zc#^nWb}+Wky-H^8Wx5<t`!=vQ-(jixU2qI?ne)ZgCQrK`i&PJy?+-%RzC8m{TB_SO z1r=7P7U=)%dIjnGvm1=;XBk2PH8Bvp<4C#vz_0n2hXIrIJH0$k#W2z&>Zl}U(qzu4 zWd5i~QM<S9X`zQfEQdL)jGv9j?k=3w2ZoW7RP{|T47^2a+$8%alrmpj-(Q&YD4fh$ z$k2OUh2YJB4WzJsZsz)&E2vp<R@j>gcx_wYf3)96G|;mYRP<(t!AJ9}W6w-TZeEM_ zMEXK~*6Sb7Re$_mc=P#Re+X!djj#MP+T$Nt1^#vI7Yi~O6v){zPwwu53xrX|q6S?; zrMqmj_HQila<QIg=|bM-Onz;3bIGot=?kBosP`NPFL#?m->)KCPE5G}^8&IC;)!9J zL-O{M7?PXym;S%X-jc=g{#Az35sj-0RfTP#B9D_^qKTr&`}|{CL(ICRO!|&JPaWTe z^V>CjK;lX#F8Pe>1pNK_Cz1lT`lh!OS+~>PG&P^?ZC_BktTV==fY(ps+49k&+>xV~ zurZ=C&YRreq!P*dr|f^j8BVlWvbJ4=7Z)SmuvG=O&9JsFnC&;q?u#t7Z@)3FBgvcK zn|;4$)T=XaXi+rN$C`-ELq{F+Ww$E5`Ni;J+ot{HmhQR<qSZ{-E?tTIs)Mx?Fl^r5 zYSn%!qV_9}?Q$!gZFhg(?!iIm_0vwLvxDZdx8~-y*MFaf-yD+8e!9NU**LBZEU5~- zoGbj*q4;n8!R7E$#$fwD*%zJP1FzhA{w^;)TfDv!QN7x3zXq<bVS@k)@*I)EIh|oJ zCYb=JNN#r&HQ&>gNRhnWIA&SDOQ>jmf6S-?J3rVyfAAf@X;Z*8saWAqnz#cM(PLsj zYo?t4-%C>Q;<23jF^uvz_Vq-8c81LBLFyc(48xMAt<e%CQ)MPvS=s{<r8AY*U(@Af zsfu)q9p{=}li&L?-{@MvdOzk~`C@Cp#pe@EWWiELC^?fttdYP%Pb`z{8`yc-^X?Qr z)3(?r9E6}?G5;%=%!x%$l2(R7oXqcU1G%QnZ{Qg_F94ZVb8T_5^{Nw}{V%TIEg}vJ z-7!pk^3A75H#t+Q4HmhklkLecgm?VSPt^k*&esTq%g0;azh)=~{%tz@y*n4UyRXo8 zc}_c!*PfslX!`r);v#`!DG-F1$$I^lB@z>?bfks}LD14&6GEtTi!*}A%p%#}+-yKC zB0fCWvWUEG^ui*XD~o<1oa0M>?h{lU)GF5cU8H54WO`w4tjs?5w-~uAD5tjgqPlgG z$2z@rvgV7m)nr`--|<9MU5x?*b>%3V_h5-nHXqD1pV*{YQoXvlI|tohruMuytf_OG z#=|s+kpate&qW5S4A*^)f{#8|(m9z}#E+b;09L=e>`=j-Y+S5@3@#^9*FHBl(X1&e zFV%S`D?jB;I<DYj{LaV1{H)KJMYu1Y*_8}($Vz+)do>;0K37FM_~uRxIyh9HlI=Rw zZ)iG3e_5n)tZMxC*|B<b-O#ayY=6hGHblh1sV?->@9T&4i*LxC8&=}AoEtZ?Vw`X2 zg0Ifa`)%YdE&KW<PObB4)T!R5`&yQ|$5-U8co2oQYX|WyZJ~BDhp@d)gh$U_2h~Gu zw;oz^X4g&%7j1(s=0Hb-Zu$gm_W`bKSa~n1yd}AhzkNQrpL<l>V_5QGspyc5$J+6T zf<Nc4VPy&(&+*lbOOJ_Lze_#8(LkI$C-oodh)(F5mm$BIxC|pF4Flm`GuKatC8nN! zh?4}E#SDARImc*u{m{%7_%r3u9_PJi-uJwI)br2Y$$}q+?%8kv81ZW<@~(i-a=fC# z@p4Rg>Dij>J%sN@Ivs!GI<xWq`PWnzUBB%EFV^d(E?g1fc&o4-;on$XJ#w&9<Ff0w z+jMY~6#e~U|Dv<;K(}SPmBdBhu>U|d;ArIKo6F;2UZK{yVZ{Xb<#A&+{@?S){;yA0 z+FSqqY4LMut6EMNeKWIO#K!mc5ZwIc;#BM3)n(COd0^S^B?^4bdU@c-6*i#7@AjMH zycb|OLIG?Gtq<3FO07LwdAmUjYUyfls}x7V_6-lG(hRvBYDl6OsoWG=5gK@#ot*Af zC-tD7C|$sE-!oekbdPJe+%p}x$C)rQ=tx&~H;3|FRVRCvMx^F51Ih$wPcCO=)N{+* zG{Yy|-1d~*1}(SWmu@`}uyKpAp4Xu3+Ts+x&ZX3};$Nj5ZRq9vBoeP>pU0F3Rg<~0 zy(#HPW;yWbmOFi<7QoDza0TsWC7VbT=H=wD3GKf>;+mB3EQy0}HdkF!G%TgtI#O_Z zfYQ$WE!(a&w=~h9fuC(kekqRUF;9+RXR>msV?m9X^jG2m(GL`#3j|`qw9LqCKXh^? z3I(Q>U}&oqyPs_Y#z$!z@q9}=w&Rl61`pc?+ow-ECP*|hWINiw)t@ISDn0CBc%AlE zZ-x18?qK7{L4a7+iUt96@I=&SLQMA8{HFJA)F}3;cJ`H{t|ECl3zp0?hlGP$Il*Hr zLQ*XUR#uE>=6$qsUp%ibr}%*)qfo5-jeoI~A19;s<4!`bXTdHNkET`i_=gSE0{*h? z#%H_+)7|1lbvd7O0?F#xj>Y5dJRZ@@UNgY))|yJm@4WQdnVjN$^$G1{Zzux(UK0G` zvtjKgL%*Zgis)CR)&eC@MsLa%Kffw-bSg1jBAad)eD%e%tmOGY^mNP4tMY)opQiqg zZh{IR>LPka3sQ%f?%Q6K5l*F+EMI5(G$pH2!b)xK`p*tpdR3?IIlfT*`ee*cvL>IU z%<e(VkBP$5n$J!G4(822W}1xZDl*Hg;mhS;cDx+F{0(&pB%deT9G!Lxd~r*NnP21e zZX9y@;*m|hu%+qUG+FlLRe8+9uKl0JyVpD+-tFXzhtb|GYXarIqcMvopS@dmoyz@} z$d}Frz1vR8%3mMEEM4vxw*h9#0u2hk174oA6FGmvQal?2@zFnrMM3z@fXh%VpHAv8 z6=6KP1ab$TF6RA;2u0WmGRCKyQ?N2h;^XqI5}zJ^=c6!#-4$e)RIm7#%BYu)tIR)r z`s8{=5&~h?lpk*Q-!D82PSE}mmI|U>w5@uZ4O{2d@*RA%p(+%qw9fC~`}Ns=)rWT2 zhH#AUkhP%LyLUhse}?a{qjPmeQS1we_Vcf9S=E^bEgLeczM}#A)!7-Pn~LOqV;G}w zF7e8x`+al+vBcBLmN_tG*+x3;_chlALUG&LFVmP18{vhDI<~r9o!?SvB|a&|?FeSb zd@psbO*P)zF)2@DN*4~xby-+c{rMC{%J85-U@z88N@c2Bu&&ad-O-AVX{evot1zQ= z*F;73$E51-nv%G^yC0Nq#p7%1$D4nu@)6Oxzpr`cpS0&$axpv#Aa0t@-1BN@`gR=d zUHH@KAYh4M>90|p7~<a^_U*m-SR-}*{3JUJbITIU<?O9RrE3Ho(+YG{yywo<W{g$9 zs@arO-;?JKlF)#)r8`o|w~nLC&6^h1uNuC-(~0G4|M*?Rr7_<@!9#XcZd2}0?}&f= zwyA5z8t1+9q+6EJzE<fIXcw8!1=k&(Mdpk<y!GPW3!FDftTI=hE;Zo_a-xipuh(vN z>B^X-ScyOmN)4&sl7LELbF39p6t44AHuJBS_s^L=079s;aHQr9s}vfk5~6ry*j@S+ zCjAjr7D=~1cRe^5JI;>p(I16Sb>|EPu!U?c0LX+Kte|dCwN>EqxiB>M7_&&c{8i3( zs=4jZMzwA+bKbZAo-`8{8X{EO5@#x&#`MKDNF0BoHBAOX+6b?AjM+A3J>D!%l*^lB z&!3M*EHZsRIF<;nAQhNnz4&l=NsnGy+xIxXSial7l#M5GbTvPFf>6lWQ(Qk<y`pl& z$Ys1+0?pwAuQuWH73604Yk0qLVEH|pT@sre5}T2G#Gm{8%q9H_)LtwJyU^MCSr-N_ z;=TWES`$ZN$<%EC^f0b7Ys8r~^30k_J;<Urh@sfivd(E?<GCY-=swcSN)Nna1G%MV zW`PDhMVgsmiMaI4%rHbc{h$Yl4mQRZQcCg>qZdD1!J%mTc|44z0+4|XXh#Fv>1-yD z9(u&^7s&reRZJpCqXO=P0lzqf$6*1ghr~u>!24KN-eR~c075$B<6a#6)C+#E0%B+U zVonbVLqZ-Az*Me~CA~;}uSj}&n;*CvLkglv07KD4Nkukpk>Gb*HnZr+`97#4CfaNR z_HxTQ*5?|)jJ9u21i;4LJPs#ECI&B!ks(pu1216|1oHI$s4Qr7u1TPiUbM9rTu7KC zwjN$G6aD-&TC*=Q9vYQ=2G2K%dvqF`DrGZ06C8IInIsjpxMj0E6EyD)r8*>X0T7D< ze4A5)4SM0HXK~K&6IyJe*S4&;^q@@mgoZ=FJerK0K%P$w*T;ef&#XPv;`E6TyEDN< zGts>>QQ7p-=3Y^I^e;x~;}!vMD_61?#EFp9MDkf{_<5pfFMOB)sVA|aIR~xuzowVA zVT_7pX^g*zeT(5rCZd1Q4RBqOfRJNC7uO*-OTQfnVgWrfdlc|#MT+zmSX1510eKCA z1HdX{Kq&6r_PXwm`(ZR6f<9LOZKGi77>GF(LBLR$AS3lv?TSv}Sz~|<J-1l^+0Gff zPVZ(z;#G$tEkFe>BH=gt!;^dP+ZB*S0Al`-9FZ7bk4#NJj0ie|cjMtbdZhK(fH6Eo zN)L8Imzse0tE`9TR>0d`fr+SqY#y?7*90Bf)R0+gLSlO9-9#c%L~#RfCJ|dkN?N}S zpT$W=+_Xs<W4n>Ci~*k|0vU_mhk4_Se!GwFNK%6}QX96@aE*yQiJ5s%(u+tDgRU7d zpGX_%vU2RAD>mR;Xc9gw5Yr#Y=L+2WlNOQoChibW0D#RO#*AXF$rG{fqcuqPq=Rt` zFk*&GtW@TA-^?<*46cSu>Dk!E^UPl#(je+tbc}EBVo53!gLgh*cNt<*eQ~6`zL~U% zV4k$jD0s0{MDnLxxL+#tC0qy>HviHC0?pGo%@F%R++~;7oR-&R43ph~%m2-rL&Gw7 z((>!z0A5_fc4n4W0gwz<X_AFH%bK?%Pj|Kd_k@g(F%>%a+T?G+W6At^V`vT3W*(I~ zLYk{9<DH93?|PXqjRn2sPWy%e7WC!hPo-r)Azj4gq8bWxrt&f{<N$o~PGlzC4t#<% znA*O;BK=LS>&Hdml$qJ0?Y`VS-(tuNjMF~XNHW;_^L3#>bb=dMaWEMo^r>G>)TdG& zvLbBYr@#3^s81<_1v0*${uF<jw9Cwl{*=x5Iqye$!A_3NPI1V#9mmt$()#=;-mEZn zhq}|}_9&3#;d6}MJJl`70|LZ&8)8F%{CrBh`;^F7<K5H5FIw9WokQT#?=Oc>i7l`o z#jWQ?SODnfmjl0dB&I|*3_36EUd-YlN~p*$5#Zj#uw^`ao<Pcki|q!$lBTTFee#5C zi3^J1x_TfvBuF4Jc-obS5<tXp^T%ld$>|j@=|S<u*v@Tu*%;skr4*=0o5#SpF_1gh z_*e8G1OX&MfcK9PQR2Y}WZEo>SWFnSJa!FJa0T4KgO;#R{hwesHb{@JmLrjffT=TR zhRow5Yv?~Z0YEyca2Y)iFB0g6bsbIw-8lq{VL^*{7&Rb#5e>hKBvFY8n8OgaoWW~v zBwFFR@Ex+(U%?k?@H^y)yBSq{8Nm-6AT%g2hOf>#1`&5teAW#2#DY<&(4-6y10Wn1 zQ!~$P!%AM|{sUyK=kwzb6pM`+I440=fOzm#!#FV6e}E)T@h7N~Jluh#x$0|19KPlb z210?%32JDFV}d0xHNIs+OxoQP1~z^ysp6k&LC=Bmzk=V&ejp(L1#ePoJgq%^&23vP zV-C>`Ofeqm*kY;rMW5^T%MAESbc;g8`_cXn!>(W_?`F1(c2_<;<6uU4OgqL0Puha- z<b@+X65ZgCb{E$DB`u<f4cr-R9hlCqOe6%pMr$TS%}+242Q?so`1rhMg<E<`+7x2C z#^yS?VaYlh?b{^yhwsDnO8^0>AEEq>%(C#LuVCm{-MM<~KB~SiqMA9TEsGq1`w0{! z#F-COS;T^rQH}Hc4F$yk%Y0qYUtcehcdcl(@ib?%NyBMw3{3*StG-Q%9Ii9g$WLBL zD%{Q<0QSJcwT8et{P3R_Et5<gjZ6_Jg5C2W_oQB1AiSVD(zf7oTCT}$tFaia@! zSHa!B*q_%8iOqwnrj0%=q<%wvZ(#js{{GOG&WMlw5bahRUsL0mb)~SU_AHUI39)11 zkg5~}p$B5Y1B}wjh4p|4J>uCCh(jWXN)N;i0IEt6QxQOv!XPU2m-D7_8vrpG638Pw zJU0(qOApaG1gOr8959dWGJ_}yKv<0S%f^JKrx6*(*sp(Za6D;OAB?<W%%<2?cM5hJ zN#cFa`_!L2%d1N75T0KFY~_Z}Vj(qsKC`GBuEn|~Em7W~=lEXD6cQwXf@4a6!ylrJ zOu-D~85x*b|0me*u0V2m-|Yx!s$;Fdq5l#RCRO(BVjvQJ7^w^ZCr&4dK99KBwoGuh z!XvN%4**;jpO&TfZ6YdQ2~TEjQsdYBoe>Mafj>>rALlR~ONrxYWK$0rLE^|*`#Si8 z%(oss;{{UV##ltYbiJ_C_ef#jplx_1*8c?n)PMt0Gy%V1W0r7a2o}WMIj_I!IH)UR z9tT%LRSqMImjG}};rf!N<9TJR*6`q$t)zAWaEFB{7nW&{=hIAkF#=BA_jO`!H#X2q z&x8#_xW?vk<bP1{*~G>9hXKAnLVaJ}j4PCn`V==%O87R9w3BBfX?F#g>UHaG%r}rO zJd*!T>$p%{_G2Emu-v!M@poaF1@XEJAdDnV#Ack*BU;kNGsvfwaMuY0*9QC7P{+6# zb^&7FuW-l+{4*N(v0_$t%&QFWBUk4KXe8#}!aSwZqGxmlDQS3!)6^V`-Q1ynif{HJ zCgB-<i;C7X<LhbRvgsy)RlURf-k;>J=$D^9i-wrZk;KC*oThB!K*S?c&hTmHuW%I& zU$=AeKj*WqdrQfU<2r~qH-`8v)CvK;Li=Ste|V;wFw-yq6GB8X{7joSo}3^1hKcNv z6$}8xuTJ4s<wi&qbP176YmPc=RXTHZWovG6>*Hr@1mt?+%Vk5|X(Pl`SbV^g(|knc zv^BTQb-3-44djTKm;?82uW3lJ0=WOQOY76{(av*=3h<iDH8DGGNaGX4kpRAsA-;?L z;wTJRW+uLksjvb3TpbE&V;!*~06^qp?VMvaUJbD=jq131+GbJ~Dfq>cC_Up1f*w4K z(Pk(0KOgnU7!gGjISfmD5)sWH4E?i}?9(_=hHGWd*q8#O==8#VFhxiTr#Z(F7YdW* z0H&nMus6c&a$iO&j@SxK{KJ&MReW%{f1rnNfD04bV<1!&5Pw#Zev)E0*9JvRIQ7D~ z)xRx6nSe4pU@>tvL6|I0kDQLMc)%Kyp7C)Ju}@(KkBsrpaXln$pLD0k-*LD}#`!f6 z#*UrGewzh7e6c4&1~Q2x@zf{|#ng&d9Oq%Lq0B#L_ZMTr^uS7NFnX<%7kddT|9)T_ zGKl<+dD@Q!u8%dAdi$sMmRR?RKDUyc!DSK-e_X^W?yQ<Ao{*#em?lgNFOb^^7EwJs zqE+-pkCG{8Cy--m%Py>OF+d-^IIV>4Nb@7QrQSE!XGs(`DK6&?zNAL@S_V8R(N03M z+Aojm7@n;~a@;Y0d-lETqa{};ey0Cgkl3*O*qH6CW#IScgpYdR=k78egQ1nl3DFW2 zm)<Xnib;s6hgX=|=0W@4#DxAxCj9c4k99Nub>DwY$16%QdbX<l^g`npVtdS;a8<K( z$}=2Kz>rTo91l9MCMf<<d6E<ZL(Vo_699bzrWuS&PvxP+`=&XJi=4VC+-1h4Q3M=| z1_)ssqC?dlrY{x_>vFVob^X-~rwa|A1-z51nqZ8UqAFjA^cd^C_n4eDj`8u&PA(@| zoc7vObWr_&&1{6;Xp3G4p_NeZOY$*#;oB?Xt-K<pY!Xk>ONV4O=kAqsbozGHV&B%@ zlIGceT{vLKfVY{#2|wy30}BLo(Tg0f2GI)XND<W?H^kEQs_JVaI68?5Ba*iRxy5XP zKHN4-c{WBRQ(-||@GvjlJ*Q?}^u+UEV`1)(3!x*7;;z~JncLdHJE510^XKk>@w`9D zb<=-;w@x01Uu^J%usn#M$2H!$c4G|DA(Y<wS>U)bEU?4l?4WY^Bc8#2Qama(E-8UX zct$frTpx`J$LND{WRj3UIG)r=EwX5rs@tJ=UeF${qk>z~3PWhHNXke){hgpY&Yv5x zw_K`3z#$@wQX%X#D(PEYNVS&EOl2tyX)#3d)1zF{B5BRLS@;3oc-Xg$L#E$NrdXzj z%=B&$j(jESkZ`WtQH9Hs)lnt~vxbTuI;)Q&N@7q@L|e988upHBD)7^gnApj>%<24F z+YDve`$SMONoki`w&{_W`>5!{!go-1$E_U3hS{nn8Kw$PaMUwD{D->_j;#lI%ZJ>* z3SO5!91#9fLOmh)JoJ(3b@=;$J|?O5M#I)$oUe+Jw_1`Caur&4kNR+uZbb^bo77Vy z_e1F44^ivec6_k=!+Sbv)e6*q@?t&z)(@`yg8p>-auy?b=X4EVgp1kEaogpyxO<)Z zrPP#Pbq?1ynDiwHsvLK56`PR{)c8A%HJ?W#o1NU?;@@o>{cJ-*Lg*U|jPLs>$H{Th zYb^#N$5D4~ndBM|MP523A%uUjRBPAcH9mL$J(i&1DUf`htob?!udgMzZg32#m$^Bh zm!kIbu`y0i@F<c(gs=3mW@b^FSWG)4+<q<rP>oF)|M+S+C3(wm(cw+11<ZKh{>?*; z^rWvjhfkZ#;G-bPcU#wn3A#V55+6)Gl`lSjo1URluuLQWq4MX0TWV&_!!aCO&ATMT zCc?oHkQ$6iL?<9)rBX(}A6q#*sHXxFpfXh<x;-NmT*HGz<q$23+3JKcnu(Q(6W!*v z@Ftr{1qI`?Jg$7V@;<!r+bPL5YucvocJ_}>9^B5j?|w6+)YOUpkGi)Ei?Uz4hi8VF zVTgetL|Rg5k#2^RmhO@glvWUs7`j73x<eYIK|rLWTe`bJ5d;P1Ki>D=``OQj{T|Qr zKi=a#j`#ER?RTwfo#%O->$lcZ4#yv@1Z4X9Jj%F;#q7RJfzST@8Hu`SeRA-Cy;sR; z01gF`@m?Zg5bIA>1;=#rem=fUlBa8O4>Q-tj9WF}#6jI=svjcV@52aijv?w2Y%t!j z4XLLlSP$k)40ykPFOnYXz$f|^0t$ZxCIJ+3WEzH{nZ6hO3c~W|)Wksx4s;`%O~L{* zP;>~riLQXDp1Y5`#|Tn8C9Zq|3FuDMLC@);?G#YqY<A(lsizUJryFJ+0eCWbO#r8A z2F(KVFt|gA49%~&P|;U;h<mc#52TUNidM$#hczUPtEH;A%@NW?U{-$3=W(QKP_pPP zM*cKs5{aiwln3$glqzK^m>YcXi&vRS4JYx7eN0|LIC9AxfW$m+Agih((K*X*6vY3I z(Dxm7$KpJW@3{<up!;`iNe`1b*K+A*Qe@(DC*m1$yP#1GLxEG~?|zeXg|}iH_Yc1Z z5Cekraj(9ZX%gv`QCf&}?ZNN#KBaO9z?IpREyz-Y#dc0vDtn>B?qtmd;w^)B^yz{* z&2GL^KIp&_UJd8--+!2HXKV?-?<uEa(;bXD?a+rc%aY{6?h*n**%&s}VtZd^2^Bx% zJ~rs`o_5aGWs0OtA|3OuDab)c+djOLmi$_~Cz?6~lNJ^>pqUr|e>WHa&O)I^n+V)d zAEbBXWm2&dp`h^3)X&7QQXXX>`5Hf}T9}eRNx_7CtSLwXV6ArJcCXjV!WSk-UV5$4 zgl_=5!Mx>N(S{zM3;oaU@zli8Mg;u`?c|Y<gBGz97=K}C11vlgL4wg&p}18AfCudw zkqGSpvPNeZ%_kth9w(>}Vg-!Mk%Gou;uh)U&k45XK0qUT2vu*+-f;>rL8BE5C@8dv z)e8Kh7;_5XtxLU}mph-FF3Hr5y`Ve=DB?%PFQ`JRm6cRd;j(n*1n@dkA5&c*rx+G_ za-6iiP73&oH5Reeyc99H9=>Dw4-NM#d)uvdeIB%e&7VE`0y1C(&W=E;`PEpW9o+{X ztp+LDa>_q6=_@AF4lv_)1bXEFBNhnao+3WW2iz4a0<V0C+0}XYW(i}o{>!y}y7<KB zO!<k77g=4ESDFi6lLe$If$lyRU2G#+d8MjV=bde`<c6n_2T++$vX0zbLWhW`RYfYz zrfIi#V%gF{6a)CFJh-Got4apVT`PSxsSVzowjF3-_t8G`aoXnS$b}%o>yT&BMg=%_ zbz4-uq$z^&iuCNUa*R3TALNdL^bfq}^r-+LJRBxTv$q)AlCYVixeQf1d&X8_3f6|O z6jbiE{wO*)-dCs1k|#I^qA7vVxlKR&eQQ9esOa=adOYav7yb4h^$!Ij*6?Hlc&75- zX$z&rKhs}Pu@(a=6$$z@h0=K%#;bAMRX_T)-YeBHdtTH<U1Etgl$ow;;8#9LIIst# z&5WM%S5sUrUyd~O_R3$tw{z?@7&~&fUEJAoj?C=*CWrX#ogF?T;H%npx+ahNL!9$N zszT@?xl|^5_z7Q2??dr%QijN-t97<qGRo0UcaeLos}RniN^Vn+078To^xelrJZthm zm{PJ{4z|gz%!6MqFXr(quI~_C7<<Wdl84$g%VHHBCqAO=V2}}A!=+->eVFwj*?o@= zNQTK@JFVsjK+50}kOT3d3~(JLOfFd%k~-%z1d>PxrkL$Ej(Zf06_<IkBfA?!9VKgH zTu31y1dz#j1c7+afrFJ6WVO5Vj^t^vbaPM-n{weCvdcidN$4iC84HqT6@cU1fgcwZ zbzi#!MBX8z4A2J>4k6hg{UM|o1~N3ora&V7favydd>U<YFm8^&U;)M&ge4o8aTz~6 zy?o(MoyDB`vtwIyg{xPxLyqGH9l|cH4uo{miEDSuum5I!8|m%CV7SR37uDV2z{CKi zWjWC_#TfW`BuWklI6ab_dr<+Z0}zIx24GMJSUXnV$8{2%O)ZJ-mlC@P68lC;oR*@E zcuYU9LS({P@u~yx>9}vs7=F>i?6{G5=D<-Z2F3V$mywXG4YIG1$QcrzQ0|T&A0hU$ zA@X5jc&nsrEgubPV=l33skKow<?Y`^Ki$Lcq~DZe<YRM0c79O?K&k-{mH_c9Nq;R- z!Xb%A)OeegqTB3jP!Ks6PN>WqlA8@loE!uNn9Saz0*q*4D*H_J<DGQhXK{|Vyy_?- zB!EGkke;a%4hzNqfqH<3y|;ZH0agf*+D9JN;&5zAsazu&rGf0HDALtxy7KI5Eg3B@ z<Qk*IMp?(!i}sz!cA}Ja=Btp$QQiJ8@9_+E`zd~=MAX@{bjvV-{5tOv=Sw;1cebgA zDN!>KO^J;x#0ju8Y94eSehgQqmJ?%<3lQqj1K)vBx8wXE(`)U}pXxAd?Qy1LkohR_ z1e}c!LIrV45~`!7LAk1}F`C?vCNH>vP#_jvbO%Zdy9q#F%~q3F`UQqb1OnjY0Pdwk z%>Y5z)d1*aR2f?!hXN2A`KbXn5TTBOC8Ef}XfVBWgf^;y4T~G*AHgA#5~Y}$(f@It zUEjPWYM1gHJ=@<ikLQ34z^Nf{P6;6~&elivhKE75oLRH%!<|?{jLeyT&O!BAAojbI zg{_cEg&JEAjAdJP@gSKyP}J#LNF_(C{aj=~ScqmElx2_75df_+F0Vc83IK>&vO|8d zhB={vwdvynq?DX(mEH#h>+imA7aO=Y-`@_FE+8dyG*@n98j7YME0tBQZyjul3(-eG za<ADbTUB}$mFs^H>vs&j3xh`ODju3s+p&Z+fT_9`m3zg8BSE4KR@C!Du&h><;|~NQ zKZXwIhCXM+PLk$sSVc%I4vlmZtY?s|@Qr*|ANk;&P?{K0*3JADrBpK1ujV;Cn@Gq@ z{B9k+DKfq(vXfZ8UBF~TP3~;2+#IKNH5;OrqSjYOm$|6y<UepoI<Wo<wg4U!3|Gy( zR-5f6tu`L<d!*8xG2BC~@~dw2lh;6T>+oj|Sib*g^Q_`TM%XI#NL|!W!*xi76?LYS z%58Tc&^oSY6M8B;mJ!v`ZLi+L^aNHhdUSR7n3^eTQE{bP{rGK2L7GqpH~XNcFeCHC z3`&^6N0=Fc|G;M=JaU5h9F*3o$uX?S$sE(h16ji;LBJerW3)sASh4GP1z3}Id+HNR zDkoqqA(IgTw-H(swIhx(p|%(&L@@6z$90gFVCJM~p_VA;uvli8mBOTqiMEV`wiNni zNPa8pv8wV1D{Uu*se-_%BcdsREfTrtskOu@bssI|^O48as{EW&;pVX_cXTwDv{gBE z^dUN0;#0`_DJ{+^<D(Yc=*gnRuNuMH<~>^4!&(AKI^lHCfw!7A4!X~LbZwa@I5Tyh zSLmiJmOaTKu!2k-0ipWN84hqg7aBcR$fUhOV5{elE9bP^jcOOuq<i#?1I@IXkDh0= z)|)mxpC!H5(GZWV8Mi_`6pj9Izn(F(eo)ek&*2wa2mMf=*$4Hy;hFjog;{OuWu|ho zN}c^dNBXfh`f+VB&vL5cIOl?B3}VC$;`t5UiEAf17^FncY5EwXRv5Urg@mC4^)r_Y z!YcH$ZwzwyV<JsPV=}ov)fg10&KDF`=j#~0AJ!^@&lUR^re+$JwizbW8<sE4hld4Q zZy8j>jacD^HJnB@ZL=DHkRrKR(>|6;AETx_GujagjhRMq^+qk{`mMu8?ItsAM+*g8 zA(|eL51htb4z#tZ#yu6&kr05zrDi|{lR3b6pu#vpJ;XG{cu>_4<6jzkv^WgWAA_4r z3{Q@8nxyE2WQZG2Ll$~`OlAxFd-)+29*~7Llf_|^r6rT)r6v7clU2Cs8ja~Xr|E{c z>87gbmWk;$e0jyebT`^`FVl3@$8=xL^q|f3XlZ$S*!1|u^b~IPP16T*LSuF&zOo(+ z(L$PC^epxIm|aGjU1gg6sxbTAW_CSncC%!5dt`>bG5hk>Xo|+X@<tEDWq_qN3zk@Q zHZh0Fn_&Bz2k=7xmF9SkizrMQ{1q625jF!j{$u{~|BDZXvFw4YfO~+yqnyF!3WFVg zCAg==(NaA$?d8r;AX+2#-lVlD>2t{o^;7EbED6ZTR}3<|zN1d81_!_lXEVeUt2%(p z%OO*zJhc|&0B-$DMsD*$zA)3y9DsVrQ>Z@!OFYr;)(WZ&E73VHg_#ZT0B<l+!!XcN zr(DlJ?&VqF^Mqhie0c}l4s0y{ry_K95$*tlGxq>UsK&W-7J&<GFyDokt<*8lhul#% zIF#iy+=auco6i9BZ{hdLRlL>>M)V@Dx_+MAlaO$EoKQK$eP%<4tdYij-VGzls(Gdr z^7|nQ*Q;9S{ecO%WH+!=`GM8h3962JSsv`c3(I3n#f68D-+SWg-I-W)SY3_v00nW9 zw|Ekx_9jQt6;N=lF=e;3?HYiPArSwu8aOId!Hh|8$H5I675Nc0p~%tge5QDBk!3<z z1p9vXY5<6Jmri^cksl?vCNw$7el1+97W&4AWkV86oLo%=9KV6jQN=<+AdXiL?TDfi z347uXov0-cT3yAcq-2Qa=wuWr`{Lp>CuS3*^_7~LlX1RJKISTabXgdRGmX`8mnRFS zD9!#@i$HvQ(IO^YYQ7O40w_m4cx*WGZ8MwH?d4dG2X2=J^52jY1|k5O0^R<8%LR<s zmF7~edjJ;WzUthrPz0k=hQf!uo=9@ue+71%s{E{CYK}*vT$EXA3I~(9EeA3%f!#w1 zK&S#G0+7vMzG?r@z;4L^b^~T4sW<wf6_i|8`n3!b*qx+6kiz6G{v}FdihXw)6WCp9 zlKzNBP#@jN7Em8w@h7lb*Ny6KcACcG&^`?&u={C@@|*TYa_7|>U*c#U^forRY!0UI zI%OIg)b5Pt1iRW$x76)T(mXbjA8x6C5nO6Em_;KZaJ0}wbEbozVtu^QF%y4%ml+iw z|H=p3Y^0TK1Q-GP!NlIwe10I1EFEm5x&QodwJQ>RSh_n*CA96Qdv~<m$H=k6v@L+y ztkCu6<=JCu+tXE_8vvAL6$K`<UG<0E$Gl~Hf!)<Wggnby5UH;1S}?gy@mdJA`|esO zT?os17}Go3^>CJ=;`IoQhTZi@?p~ISD86aijcB3m;*A)wi`|V_B$RbCPL|AW^R2@D zlFfJ(fxXQHb$QmUL~UKWtt5S$lC5{f?t5Fw<{_-xDOT_7wo`43O19JN8}_!-oqJh# z{uS80ljVJ}xAU*S?%mw5`=z^iQ33;26xKq&s0!jr>G$mAY^6#HliPKrVF+815O8LT zt~|Nuta>jwKm}k|QcO|w7KHsiB8RO!_bU(ymG4t3qa?P?-J@gxbU-UpRCCoSOsS<_ zkT*z+^y1*s_}kl9quv54EK#KpssYLuNA)Qht6f#ZfHf2Ze>O**gg^)B_%uyZspPKd ztf-UK#l?YB!EcF+lMVp3J^ANb%0u!_9CqUrdc<Rn58VX!dQZ#l+|?xpu(%yQQli*7 z|JFwpT7I{mF<p#&fCjS|8f5<Ho$`ek0{$-&)B)}RB!D9SW9ZTs{eB!z-S5}Y#Ejqn zFX+C^>jz*l!C|N;MBJ|Ye`n2W<gY5|;vgU^pTw&=Xfl=RG0>Ik2POo??xZ}5@B;QI zHT=n%zgx5cJ;>IRtJW_1lQnOW{9<Wci#K9n_T!(d`BrY$QNf}DV$-3fN4i~?2zGas z=9;aPIA*iuq2`ypL*e3)w5pVV-Tp$YGE;A_`h%I*MqOE|R4<mheDtQ5hedb${4_u; z^b~rpPd55wmZ@{X0Hf7@3Ch_qk4h#Rm~!)qM%q5gR75PdR{Aq8KYMku`>_ggv45xh zf;IYmwxmza=fLlK2P>nWKB3Y7JLu{*jfAu0>90o+74EKwbM*F&MRE<;GDfq`voOZ6 z?e{Una{szyjFCRRw0J8&9kv;##AUz`tyT%MPGrJpG{baFujpe99dWFZX+X^cDbx{) z+aWetsZZ0MTl87~JNqbMULhIaF6I?p06rJ~lYIdCU#g$V0G4kRnI3$*$L+XB{oJbW z$P5LHhk`ra!^oSXDVx`R>oFq}liry6%k0HbaVuWR$57-K&nTwhe|8DnBD(iPpWGj+ zI^$A+;gLR8a47=Nl;@=4U)JKxI1?tK>`)Q${lz$bcBc!c(fM<L7dc&Y=6=0{27YX3 z1*4H(u2GZg%tihF+pHj|)!A=fca!bLS=rxR<{1gBe_{b94s|_ypf6vjip@f-IPreM zjZLq&6o&oIbgYB4&GRKxCM90d->dd&U<z}agUc7n#%;{YEF2#vqtINnuGhZllBs6m ze0~4`f&L54|FLq*Va^DFIVAw>9N-T;xWi5+=)BrjX!IqH9%YJVaQ%%90B}3vQB?+# zo1+SVz*AO`yxK;KKKfb*2T{15rMIebQChcS*7wMg^qj3kV@@Ug(zUbG_WK%p&U1N} zjk#(DKqCE0N<_){o>q?L>u9Ns$R&|7^>2#7WVX0(UAH<cGSfzM@azw#<gI^4LKd6u zbSXiSk7pLD)Xr-%p^P(~5#SGOs-awOqqv)C<)er(8u;A#IPUQvhx}m-*9J`)H1f(M zUf#BSzw1I+Zs^|TSPsVCNnc=mabrD;r~5!LUZu?oa+qG)Si?!o7dFOv$KA9-X$6W0 zSdIV!|LchUJ_+W(KKO7PQgX-4&u#!>Hfn{_9I0R&3S#zM1Op(Pl+dty7eU|sj7}>4 z!1mjEM-;7c)|5Vvg-oowVWn|0oCHOAsF{{w%T0qa#Bm$pgK2LKx_vi1mMy7X?94rk zBKV4fT0)w)HTf^#I#L46p1c8G{)}Cm^$QPZIXr*Z0Z_yOt%`Po$_M{GV+>8Ox+Tbi z)$N`bdFyIN(P<(qs`TOs0x7V<)1O4f5|&X|H#0Xr3tdS8y(a}UjpZw6zhh6UoA`QZ zSSEke!fZcRWyh}ig_Cb*5Ha~Sniz>=pr1(}|3VZ=1Z<A*N)7gyf5=gTDWavBan#&$ zPRkt>I90IOSHZ3Rm~(p}UcLFb-(^V&V{!EFJ>p~F72q{s?QeQSFp~XsS^#t9FI@k< zvfsy?-)f5?&K&=gLQO$`0*f%2*ku`{;VlcMvU_T7eSTeP98u6;`+hW3VCJZXArQAS zTOpx{x``*f#QZRZEmP?$!(<>sq3+TEf3Bd@p4jsvrFW(Jf!330;$;n-6SbC019CX8 zE0<E-PWG8oUstU}IFH}b;6FN*>I?&tlVx0<tT#m;NyHp_JlY!YdH4cDkAEt=42B;6 zRQ6&FJz^^R!A!N~V3z8~225ptd9XbEvGHW3BM|SNT5Hp{jlKkSOl5CA+xc_0YHcm& z2eY*=RxtGV^W;xuzxSlQ_3CVQvdnC>z3unU(~ZIGC!gAHeqWybU(w@#s_ednG6X_m z-xbtE1`E$d<2LcH2)P#lsm5=C_;mdM;A%dMdy@rwBu)p6fJmSZzu^iEyv2%Qx|9{} zC6D-_Y3;h_j5R1}!v<20mvY5=An`n^b2x3#gkp=T2sM|HeF<P=c^O2xZ=C1P<@G)< zP-5P;z)#I^C*O;$e>+YCoYNim^0^mv0v3xjGSTk4=VFp^yKq5rXbdfG6oXSM@NtD! z>2u@sj@IwE9PJFO`z|6EyNq%F{(=2R4ypzA0IPv{e`BefN+FI8_17%$AG<_d4h7eo zz62JnQsaM=S{@EX&7$FSp_luM{k1y^X;7bkbcy2rP`QD+lF9e#xorFte@d->ZHRVh zec4QvdHn>w@}E*G{3Xw1u%W^z>iNn*rgE~wVvEPweuWnXOP^4$FW{IiaV;T`kll1h zh+(ETj`49;i(1XrU=XV%21}LOBRMkJHyju&l@~lIGhO=e=>G>;`v0y=<cWw8jg_Bg zF+^)q#z-cSVeJ)I<(@qOU@7n*0hi`^tnZ&TpAkyvfOBLEQM2^{1f}M=S{SirTv{-- zKa!Wd!py;P@crfK^TDDH=mBAgYgmnHO$l*X?}xE~Ew#!^l>@bUGm}A%`bGCGhlbUV z^sh~>i7$?IHlBYxZk{drc=S=vrItg&$@@FJjZ*O}TxC<6GPn$ViG?S)dHP$sBZo~I zP!jPYzPeM@zjj};TKm^1Z52w!MQam~-$&)tAyvcBp>q9A1M~3=u~&6~c)1q~YI(Hw z;;=?WL=!B}hDrauY5b26Uj%A`LV>b>LmbfbxO!FGA4bCV9|xhkl+>Qwf9Ud`5Wk}s z6Qo%CH^d8ACs#+Zk$<|$A6BCQatUlE7>Ez&GiNIO=_Yl8d8(c-4b-!bl$&-%&?sLp z%+_EAA^02jiiJk!gobELH@TGj@??K$P|tF?9n(#!UB0ef>vCIRHN7VIu<_+Zvzy^# zOgHHk$NS>KtNCnuH0Qm0J7y5F%gg7?HXWvXwm(o|Ip}!h^?yN^r~jEQpFDX?kl}~k zEXZF$!7&`?ze#<G;W(JWY9NT2yaN!Aj{rzS0AvV)5CJdE?*L`}M<w61f(Swh<Npwy zvCto)tD%p;D(ZrBpqq+e9PkN+oM_?o{9cyDq1_D>t?6Y5>jPRv^Y}}Sxq^gWQmo8L z3Q&x({FOmJQ?ki(jIsPrPhsZNGhhkRTY@}_Y=5*Y5sDc5`)pDAv7!))0c=d3|JI{n zXDv*KR)0O!zw&+FU)+~Z0ZJ?O5&)eIuvZ%otY#)?&ae2bf@k;K|3?J)A7OI=5C-6Y z^FV+9C81WR#&q5PPq1P1rBwW@%Kj5Jf6veVV#fEQ*+Me^oS*-O&G?flFU7xy5X}6H zfz2Og`~#c6h7ipBjA6!w4^<Mve}<4h^Yi{v<PVZ+Kfo=JKuo_H*%d^1*R=eSTf#q< ziX`LiWpxJ~;2m)HB6g+YGepYr*7%BUcM|KP2|?y8uU%i2OkjhU5zj&Q16W&cd1~#! zLLm;6NcA*Z(lXt$On#{K5@`Z{`{tO4f@h<9Hq~r~EA`FA(dx%gG@7ej?CNZJGFHzi zOZ?aQs(=5M@;|HWlT(rpA9r4vt4jiY#HGrq%7SBMIAN3OZula7W9D#)f;sgw4qHSJ zMP}DZD4n6~kT?B5s%)Ot?b4l85SBwtnq0ksuDUo@&r3uobgPq)M&3c%K>A{+a3h5M zen~+X6W8DKbD>W*OTyjQdtYtyWiDm6Rh+4O!qt<Z;lkEZ`dKA5nge{z|Cpa|3>0@V zJ+@08NIM+=H9ya5Ck2o_-_5;u5&ma>o@dF8k!Ra0pl4OuD@?H|WhzK>-`{)x&X;Y! zxL~3OGc_0edRAQ8u)kkMl8MGWD6iw{e_qkFU0Pb+a<O0L(|F5vSRFgBc=(}@2Xj+w zNPzu8)rdTMh1{STW?*KKjy!5uB+zzf#E@cg!}`0y!^Z8RGDnTg$^*yB-FEhq);sme zCvC;OktglfWL8d}0A{659pJ&=PM=|nBF>%op>LeK5GT#f-K5IDoqNc;gk5^63E#MU zp_6QO>0_Gw<<ifRE#x}Dk?iF<$i36(I>cxB%XL_2hyUe>*h8<Eqe%7xn=x6fUoXco zR*^3!R3u;6Ppae5oKFSQs-Ax(=8Qg{W-}Z<pTV(%U(8;6s$R@lWLLQR*i_xP%{zYa z(OYmegTG$#;FWv5tiFOC{<(4}0T){KC3I|h{N^6*tF;J0Uyb#cogt6SL>aK>)}tpe zSKBxyBc20keq1fctXNvt-J+MKUi;MfBVJo&pG-d-)QHl)IYLav{9bE3$*MkX$69`K z3dVZkz1($grRv+jV5avOCJpgse)NfC)sN`}6Q7G?i_x2z1;6adpX-)1zE|t<vA0t@ zRVx+0js=%|uV*`-NKTxsNLJkZ!p`(VkF4JVcwT%0-d9FJ%ME}e3LIb_gbkkeY85rh z=R~>cfR;QusG|F4__R_W?V&!l42&HSkFaDEds?Pa+!<C_9ehPeiNA5tNf8qfEFh~7 zf4R#_{hixf^!jNL+M7kz7xE!2k%58u#I2iIUMXCSFJ(1PpNmD)#YD9=uhXiyr`Y;K zWN-}wdCz&zBal**&7m&EB+DbNnzyzuycx5`SRTLV`4ICmkC8Ut?Th&Hp=e+2RZ^^Q z4sl{)10S)?MEnwkSa{7_5-<~!#=Aa6k?^<grgWHjQ<+p;Yjo4Ets=x&mGpya67MrG zvl+P!=maPvRm$qHTQ=X*pK#T#ZDsbgFHwH7Rg-+a#>~xoKKS%lE~S@mo-tugMv<r1 ztjD{^B#w31LMK6cs`Y+eUdeEgRc*SC(S4!p-65Bj$n<U50l~?=2d`>sSq{9PWi7Hk z$?dMqdX@J;LedpI>eH*3eY>e3iPdr+Ma;*DCBB=8U#k8*sWx}gf<^X0{8+e%Vjfwr zf*fxeQ<Q5RJ=KkEgczG<a8O;reFjz~Lf46;0EI#>W(8%-mU}4^qyXMFR$qIi$&CF( zrS<EQK3X<yb!dID(sx$PbIfHTHn$QFyHe$BT%C^!ZiU*IAcB}uog||AvXT}yrCMCw zHkbPHs%thw7tiVXY0V19b8DlG7Uiaiq?DI!FSw6N^{g-M$XVUIQ0O+C=)k>T47yYD zlyKo~x9_VDQA=T#!nkvNHdZwh73J3Vl4ph|<Z81DVK$t&^J7X@btIe>cAPVFU%BM! zD;;3Z>2Vik(Ogyy@QMlt(V6)rO1Z{%ewgDO+{M-D{w6P0E>|G;Vj$by=3(aDm(f&9 zC^f;Ruje~%KIuz7j;|Y+dUjqrP%V4K2sUgb?Rc7`FTbvQU4LY~^G20w<<*E_-8uh` zk9hiu%kk^l8_13yC)KJWflv)(dfT5Oef0&`Wi`BVI}k$k)K2ZP>W=Sr@b9#zHjesL zG-}(SCzKW#x9>`3+U@X-Gz;^}*$U3%t;iWlOOp}u3jX%3=)p8g!(;Mt@tCdHkCaw= z1O{btrdw~z(yX+(C`whiwi1#ltu@prN_1{FlOofs)f^3qO-448{U~jeV+`I~XKkiB zrP(M{rlN}+95>S~DWA!W%oVyxY-Z}EJ(E7BDD)xN%vPqfl_W4M2wvXEl}xi0<4Vhq zuH4AyrL+@Po6k$~-6(vJW+&iCnU|@y@t%tEId6<%ZXxYP31QlE?#i^BisSV%EXo(0 zBlFqy?dugkQ(v$hQ)aittXCaS*gqgJ%IYy)|FDv3&%~9UIn1?QJ4xX{ueOl!^>(fP zOR58{BUQ%I$Xeq^3P-9Kqx7w;wdSf+NAk*#X-AH09}6j*?u`6SJ(pN(OHFkmJ{C>A zAz1qqP2o&P;GF_lS^eyv>Wt6TnhdX6?Q)}V!BM+@cgJtF$1c?c>L~V(=E>?86AD+X z81E!z^u5)7jZ{}aWoshm$;zM{#mk%F>jeH!E5pL6FMl10C5XqajB--E`U&@mmor-# zr%!$LgR||e>cf@EI}~o;RBz&R(92(OQr(Un#N$jxmuGIs-4CLDVy&~6=f0)5?^d+M zI5;gYY>~g-8or5klU!b!OL@J1Bp&TUxV$n<?y&;*jS5~_TKk;hvB=pT8C|usQBUqU zr+OQa<hQg{lHxh-AQ6%IWN9ap+-ox0H@xuP(%#z?ukniZunP3zK`{B7k>T6W`jy2a z&y+VqM-riJRf{JM<lX~tzmT5T#cxkjyuWaM3LbV^Jkuff=}|=oeU)51S4{Ega*zyK zy0?h_DNgR&5$zYag<iONl;Yc7@hRYFbm2EMxnJiux8|!u&f6<b^bJ}IefvQD<}L~X zL4m{6u{=<C)+pRvb+|3dxt`$JPb3kGAW0wc4!Pjn6ePv20F^D0rb*zQ5R$%FfDwjd z4imt+L_LWQuzDGAvk_p475IxW&|D_)r)8j1Z2(6TlSm)Gkb<OS6TcL>q)ZsU+^)o9 zTS2keK$;$uTCs*Ic`zd+SR1CP<q^zk9c*Z;X)qi7uqW8OPt!~&gr7OYhDFOdB}6nh z#6C>x#bt<nK7NFHsJlm~M@pzyQ>gcBsPAPciaabpC@e@nEW{%$EF~<WDJ*I>ECziU z7DpcLMoy&IB%#9)o{|!t))byG8=iF;o<kmy2MbRm4|VOkn=BMj+7wYf8&P=~QB5A1 zuOIRL@_q?RBqp}Br75y?HnKe|tWH1jxohMn{it3{ELcj^Kylb-mMFZYs4?>B38CmI zSmf|-l!kQF*QV&j+34lVXdjR0+1Y?su$ZspFmnXdBL!O-5oQO#a<2}JQU}?hLjAcR zkB~TT!eW$iz#0gsqk0%B4$CAb%m*2Em=cOL2l00fMV*5E)gi#Em~SlDPfz2vZDZDj zVkGoqD1@V*bpX!wLz4l3M~E;_b8rA%>;v_<*W@rw=lD0aIDl%93>}yiBlzWE4U3`! zJ*|!polW4v3G?rOP{f5sp+NYap`l11Dkm`_F5X=|k#7tJN5tNni>B&-`y?f4vJXZx z7UPxz15_tswBGx+p}wow{y9)!Gq(FB^m#SZoh1>K1J%b#5S@GHgi1oif#lRf{o|ld z?Lxi7lLAVhJ|!^e)D#c96#FZva}La(F8P%~s3#prIS1QUJ@lDysyi$hg@DR=CWh}p zpIjxpPJxm-<FK42_>ZNg&_Q&X0hxPA3r$JJbNsa7=>xC?it2bdMW8zh#|8l4iUSd; z$N8%#Fs=e4PO%$sU=pi9wlN^ZSgLtH7A*ikFcy<y9`A-$NTKBh4VJ+8C{o;n((w?n zc5$FB&#Z_zD8M|E7zLH4fQ6d_F~2Wy)xnvbP$Kng3II&x&m9`ToF|S%9DsHesJx2( zOg)=*3~=5D18D%6)zjEhu}@1t?5hA}yU@^T04fKBZ;+?e57F^VYB#|6xunlcq(6*^ zilzfX>~K&9q0Wk_HqMF3adf~E*fV5C3U|R?e+sT)D1A88t3QRM8XS*+Ss^n-O0!fb zftMwz0mwqqj+CbqvHs@Riv4kxB3S@L+_Tfn1K|QFWy%#r5<v$zq9f;VKa9QuRKp5E zdVwEtCw&pl^YBQQn@@$8z`_jj$I0_~&@I6crBP5NtTWH-09I^`9I%9Q((u)LHxC$B zL`-ri)+0I?`2ZN6ny8G(df*9#=cG8rK@EQ;Tl5zI5U}$7(rTpwF2iJo>O>R(ig99r zsmJ+MmnGsrb45z6l~T)<@)+h4UMZ!@E0!`ChDNOdO8Y~z(u!k6qNC=E>GPtOenr|K zfnFW&1NtFEIba=b2pMI8s6m01VS)w%lBZPEW*CaXWMcvn_z*CgRR9-vH5VP0tvL=2 zst^+|49DPDxtgcCniP;YU78qZ0F*&MbUTX5Ba))xK<w&O5(q3`#Cyqzr0BS!Xx56y zsj#1(rEOltZ&<1}aPu|Mu*!7leEx;Vndgu@hzj!k`0{<|Fl$NXJU~_{BXJJ=2mv$4 zsblE?pO%&_vXvq2ayXFn9<v`_vm_?3zGpWmO;Im!SEx1n{oZ;$u3V{jl(II0JN>g~ z1(#>VTubOeOYO2(t<Xn?^@zq6@&Z70*^@FDbRJ;eUuXTh@EHoImIlLijwesc)GjS~ z#EKKe4dO9K-KBWvJBIBE0PJ`+r~ZbTvnBW-i!|`6>^(D-kvM$H1yQ0YWX|z5&ntoz zGYvl0P#eZSHb?{@D!eaSd_P95v@|{wYW)NQ;8Z7*7y_62o1~uCMO0TXmjD=1Ko#Yp zJ9J=1KubkgG7TCRKxPgEbb#EE2{<{eMBG?1lu07yZ8$maHBv!$0Dzy(<(>%89d#h` zw081i+1EF1bD|Aor%g3RKpX(p-F<-CK+RJ;z&Re+v8<vuqP0)IwKx5q&x_CPv)Imb zwZ6sJId-v(<)O6R=_rrRhkKvB^ivnpLcPY?e_ujbu0#1$K2TprlV^PX`Qfwhbr+Jl zyQ-;6Oe|E|yIUcnJ6EAwE-FH#tXrMBN7Ft`WwBf3yjv@y2cr>7C~nlH4l$<gwGivk zx$b!x*khT|`~0xc+P>HALy)#s_%7BLEygcfGG8<-zpMv-@v)3>#3%M%<ny`~_aEX5 z91;)C;0r}(h=)h<McRu;8}r4AiN96hOTZUTY8CRm{t~tkV(-yEoY0TN8W><45SJPF zVmTldIMAIx5MSG$F+@}u#am7-R%^^#e<<3h!rR;``Y}VentG7(+aUMkV3W)cr{z$6 z;1EatP)*lR4#`kw6wz1|&&ajNS7V-;A(1&1o`npNC2x@lv0*Zz5xTSCBFhn)z>)m? zkqX|CO%B7XjF3YPk>iX<=hwnNqaIzAi=5eq+_Vb+785<C9({j4YDqqp!aGKqKUN($ zX1+U?*fmDPIQ~{<yjg1uI&3&;Ki+^fZn8Tb9XJkWoQRN_z_*-e#hNfIo(Kt?_>@0R zb%fwXM{{$D3-Oz93v!Ba_ymjI2nw5s@rY026HNinCcQ1E0D)6|latzgQy%$KgS=C+ z6$s7Yhw3JRdTkF4j>Obxf=yIq%#MPd9tjxHh-;gCg}F@s)SRB;ofhAne%>|xgJI^G z%*;%}^m9&Q=ivbN3UQwsl%KeO2j{~;xIpj?S14S<e+d;i%pbla?$tK)g?T8pjsI;M zSF(ddbOkEihd;G~D_fO6S6m`Nb*^A?4qIscFn=E0H*dN*4}>kKYt3&<FMMZQxD8!U zv0Tu3HD7$Ru!psn$ho-Ixu9sdxEio{nZNM+%c5NV;)%@S8_uOg(311!;$`U4ZT`|A zx@QS#xwHUU7H3>Omsxu5uskEZ4BlMo>sc1gU!Df72r;hw4qVo8SecMs378tcRGs=o z!+EXB3#3J&#U~-l99XoxIKEui?c;D?B%$LNk*NX+?dTm}4m<*>V+UiZWgd!U<XyE9 zdI^quBRtGp91k3&XlRYu)f738jUJlvu+l0PJLo)WH{u<U5_U8arRCv2W|t)3ky>V# z;gS}oHF`YqNG?l?QDRt?;NcUlA&nSz<*Y|Kw^CZPgV_kYfzvH>+HDJoZ7b7l8{ci) ztnKIR+xE-bj<?&+v^%a6JFiT4+<kXEvUa@McbsYQj7IvAM7seJyFsSAA-=m|=&ap{ z_T8u$V!_+pINH5<iM>SAy?4HQDOr1I?Ry!^ds(-8IkfwE68i<F`$fL{#aa8M?fd1+ z`<1u*)wBmS5(jmr2MxXlO<4ym?FX&P2ko~99khp?5{KQUhrPaseOZSC?T16lha<O# zW3)#T5=T>}N7KGXvsp*;?MI8tN6WWItF*`K633gS$J@TgyIIHk?Z=19$H%wFr?e;E zB~E^ro?Q5zTxOm8YCpMNKDoU;0o*$UNuGkuPN9CMu<TRZPp9}Rrv&Iz#Jz9ClHW+p zzLEKTBhUUu`RN<=$~Ri{H@bV@86>|mnSH-6iL{RU&i3g$$I5pu^mp!iXFO=hGd{C3 z0lzb$>@$&1XJRX766iDJy&uw&KV;2*$ou_J$o?U<qG#=lm(LBDz+6E_oNGNi*Y-Qt z%|6%pbgn;oZn$!8jy|_IIk&oZVJ&%KlYL?P>EhYS#q*O3d-R3ty`QfLf4WQld~NpA z<I_*Cm7kvIpWcL*zV|MJBriiAUWS=nhF6_8szX&q;SJmX$S6FfO3xZ_g_T1HesUE{ z2#^1CmE@;qO$UD~d6oM_FWKx@4*IfG@-)NgD#htnIr^&7@0Ux`ueyh)RS$oC`1GrK z<yVW-Z^z)@HR#{X_f9{?{%SM(U2AsTN_gG(@cM<^bvyd{3*l+M-|u#H{7tm-X*=DG ztq%0P^XYrQtu^!Qrqiu?@GaErRz>pmsOr|F=N58u`;HKO{t#^_hXy;L0YKy`G5`Xn zl}%A!lMaE?NCc5%Y-A$taGG|fXl%&GfCn@7$u&0>;+a*mWK%V_l-_Zgv@>~@;;W?b zJ1lpnYCY(U74^9VQ)=(3=gCDkBzkJ^X%?wwsvTZw?`xOpRG9X7@!08BnzZ=_lixYi zudyD^l2dkhVTdu7m?!<Mdu-g|c2r~hM(@P59ed*fLal#lUgwE(PyYJc$)Y!!MzYe5 z9CN=3c~`GD!{E#&FkaXX%K6>ZcA`*q^4#0-d_O4P;8O_AN4w{9^=O%o4Vgwi9Se9p z(bG{>m(J@wj1vM`8CA|(!<mGSZ;ic-wkIphBxz`VyH|Z}_QOW&zw!9~q%HYz_U*C9 z`B8Az>w9Lm`WI(MGeLf4=-avWEA%H;NdPtz_xoSCvg(XL602&d1cF!GouOoj)zWwm z0#2pj;vhR2LdiN783bp6vn&ZG={H$yW$h0=V69g~Qe>6|ZzaiJfSu*3Uq_wD)1FU$ zdraSd=Av*Fz{k^n5TUIp&XgXcDSSVl=|qvO>e@kxqq){q`JwgXcjbc?(%PZJYu=ZV zJd;)lwcHCTj;caC8HcJOp$TVd;zYGCN0+|;;2mrKMOr6-#FHaM^YfA19IMOUQ;k$t z(0TbvQ~7iJ56ua-uXU4UJm-nLYBJ1US=E($?6tM^IQO-6>9x*v418SObbBr8`Dgmb zzVZtizk#?H8V14-^(<ne!}Y8Tc-;-2@l#$Hd`wGfFvL%)zi1$+-6AWt{aEN|<ou;= z&&YK&@50z^SSPvs)dEejiN_t1*QRfj<9{xfFMn;E_x@cUVTQ`QdA(W!7Py=ZAaTci z8scwqxmHO1PG}~KT_D0D%DT;CBbV>O<7<peL%C_ZBJI^?CQ^59GSR3v+&bl<kEhMG zO2gG!+Dl(Wn=Fc@t7q@L$y&y8BGtle3vR@`>=F{)e~lF7)8e3?m#$^}+K(xp78x%8 zsEc@3-GAeC7}+GSFjzBL1aoMpGX8xOw)l=}py|Lp%&|40_037}j|-!|cC5!R=g!yE z*QWvadKtalRCmK%`i#7(UHczMe)!(|@Qb(X@SUC3GeSv8u~*}QOqtG;Pd;&<cj!H9 zlb*Q=5x;;vTlwg|K-Ep-wDj7K$Y|B=myZYNP1Q$_4WO*4<5qH`hR3c`R@T?;72kHR z-<8iq-yCgiNI0B)di~J5_R9k^@v|@Tl0HACu|N9!3{UjEE$C^ur*Zl5ouuFK#f%~P zI+O-rs*1v@Qv;T`Bf(0K{WUDju`<t)@8#43G)q??jUkfok?`CA<yv#>@H44`VD+F5 z`lsV69@5JN>bC4wxsJw{yyU%O0=%0Ba0gfs{&BSf^^e?nFY@kYignV*vKGWiO|tg| z#>1ZkS&$YA$+78<N9c81kkvQIak-C2nt?6JdxYe9-i=2+Tg;;mQRv1=`W)>PWJ$dx z^jKtiJmz(`CGC0BV~LCLSU<289Yk0`nrtF2RMv{&PP2l%z{J~NE5^tFBeBhY-1GeJ zAN&OHgRn5^3;)y2kW9p@Fr3N%wln{uto+Aj$a6f2!ywV)zi);n-(!{uznY(uPW@3< z{%bQNez~*r1gZPw@6Ax7^Tt5tphluWX`aOR(qQACojFFHw&=WHs`J{nrBt>Fvrvp< z#CQ*SZZMaAuuru%{-^$8_*H4Sj@Pi4YhrTUKX&F+NQ+XyVH#ZLANq?Kwt*i{G*HL7 zH2=_FJiFf9tK@jnJG!6rxBkM+5?#}do5=b-uk$bc#hb>tCs^O@Zel7h%1Vs>0=><0 z0APEj<oCC-Qu;?fO(;J`S($8~y!uC3nd_CGVllvy?JT4elJ;u$so~wfHbW!#bCKEQ zvlbEmJ7wi@Pc)w%C~hkWt6cvtW#yvyPdYvn=dZ9o%E}gbn^eposG9z2+HS|vD$R2x z^N+I9XmL|GPPDQEF_da|TY}jP*)SI)Pw75)3%UwC$83hk&RGCWebwQjVK#p@L+w9o z#kI!h)C&v$Y=)@C(T0)u9tEEF%Q2gw7cv3UGV*v>!7T^X-P>%t4~4sl4l{ZL4i1Yw z=g$rVKObKm*3aIi?(p@u)Y@a#<;o9IFRnj>1i?#e$1R7Niud`2?ceT}4mG?uX;WIZ z9Hr*~YsIx(LOGn{em0RPvARr)o_6A|G}*OG3vhhvW|6q&>>+=qvL<>$XC=i!8Org! zk15&ydq2zj^6vv2jfdX{xxa9n4e`y`pJ6sb<!2*eKM&7Fk=UF+#$@k0{1{hwQ1N3z zMeyjyr21pd^C@jThx4!c&nnKRjb9&~&zOgDUd&o0J6z1!zOT5Lw{JYUSaANr`E&8r zjKj|*kDZF2%icfHM?Y6k*zIEijkAfWlx$Y3k?QmKMA*XMuM^VTYfZA3k5>>I(a0J6 z4>$rLSUkPt&ZlctYU7uhSAxkwE)mFbs({K>{tb{6cid<Y9wbeScZy$dNaG6GvX~{R z+_14c&i@e6sVX!?Qsb#QzYCBdRk}n0h$a{6RH=lJF>3VKD7rBLiz(#C{&Dl#XqFsO zZ58H1bCMB(QZaShM>!;<s?3=z8OWwbl0c9-)q5-yZ-GmPxpx;?nou?i-3OuBxjd5g zSz|toCyLQ!Br1uU4s?%P3NSQ!7e?KO^=P)uKMD~r`6l<iKyoyIc+)3mtQWqHh*@*N z1(otXeSqeBBnqe_3<cBY@@0MQ2oS3#{-%}7$ppl8^v)+D41=Isk~`0q)_n<ra!GTA zI&3lkgl#bSA2}M~_>@7Ycy2jJHhB-U<uuZeEeEelsEZ7Qq!L9*6MoW&BtSl;Lzk_< zALvV2^L?Wln9bm6`Vfu4-3*G%pg&|Vhyq9xP+D|IJxu%-EiH=#b-sMe^8P1W!#2S6 zAbs|yO&k_2Qx25xIuHvL7eIEIM<Jq)!n2}l^>6CL{B#1cb-ji23Zbyc=s<!^QW0>} z2#rIvl#t;#iq#_rvRo_&(~S$nvj+kCY^A{-t0+!yMk0D=6kgca&@=f2s^!%pK_h3h z9QZT`tm}dLG|@cb{_AbJn!Xe+Pj$G1`y_;Z48`o40|Kk(x^{5*<Dr}bEC`r9SA=9C zx~qXu`%bFe{6bC_9DuF!(@Y*)5CJYI`hFq`oBovfM+^c;9|gev3ftxu$3>ZCAPwe) zq=~=Jp@O*Ta{1fr)O?;2a$s%=vMU7etD6TCUn4<!r}TiDTxGiARp4wGo0{8m?E<zt zROdlOe5oRkU`-T>1*Cv(^f5O4ay^qq-4=SP)aUZ<CCOYzCq1yERk+v{Dv7btP8ka$ zF6byQWMfjKqHC*g|B7uc7s^ITH%exokKp5$!CRe&o&!;oA}s!d<fzbFbdRg~5NQ`k z2#B&vnWQRhdZGLwF35RS%}rtmdN&>!<DAnKQ83F1NTUy6_s&mCUx3m$SF3{UbE&K3 zK9h}L&;0OYr2a(r`F_(H&I{AmjcYlTZbnZv`cyZHIg<jA=>}M@3THee3LcU!1C@*? z1j}c}{MXyxN}5^8;5Om2f@mKj7M=!D4FEcB5TE@&?7wSlU+NYVd!+Bg#|Y-7Q4nhX z*5hp3g`=0V4UHS@*tk&d!8b*+4w<Vu!csc6tz8Jsydh4qC#};8KzQ{xIDtj}n<@2^ zGjbNIyIte};pGo+@&}Ese6jArU<Z+@%7`|C(cBDMC~hUd>P!O*4bc`l5omp@&yt}R z>Y~2oxB|3c=t#ojE$r2(@PK`~@7b@Kh5B7HC-Z6y2o8vm5$JgQ4943`glD_!;8Hd~ zx*<$uk>ejC;U5Mk|LHDab)SX@Ddo>1*t1gh*{#A8dFpTmykiBa#QAQ+m)J>~dkG}9 zxp{UxJ>LPUpk}>~sytZtDr<)}kdTSS>2jF6^!jupy9}$a{y@@A+5#RFkGJl~{ptmM zhBSU6!sU-z!*6oDPayDfZ!3UcidEM|0JL_@=zRAsJ`#)84>lOUR|_H?tE+!o<~VTl zafLT}`K<gK$Qp>E05L1XN2*KfoxQ=ob+4yDERX4BSJg|Pd-;Wx46qh%AH{WTKs$gr zFG3!owiju`#EXWTS5-xNY+lidAf5(L%Sg-AHvt}$yG#u{+L-?yV$3R49jzJI0$mdl zwA3*Friy1jA?`s-$6TRCmqG)ZP+9)w1&ih@Kms2*pAsFmu1h<kW|y5qDVi2=VSEcD z5fW9%Qli;f!ZqAoTPMSG^Jg3jH&i};-@__AO)Xc`PT7S-5uKFgbQh<4fG{yZ;=x5{ z6)da_n9COGv39@#4VI+`R%;;8{lf_z!C1<L=Z93M5t^sa4^E)z#?P>OOaQ3MWz9Ey zVgeg#^JUPUsB88}_={_aOZ{XIAr`K-NVAV`)@FOqe}bnTns@!`@C!WUU%cMQ7Nk<8 zJDWPg0rua`+p-Q3J`~G6x)^b!#OJmk8IvB6dtLsF&|(a0M+d$iY<<LU@$r?rd^OHu zqcHhh{FQvvPc7K}Rk%?-<joiOS93Lx2H~$Aw@X*a)k))QG9^H@@TBEaUp_?Ns?!C) zcJ8ZTZ7+PQ=XF-Hs}vI=KmdF7vHj({z<m<W^hw-<UcYwkAh5sV_-hBsBF8vAzh!lu z=+|Bw7obiOg0Ew*?m%T1-!rR(`Qxy-iv~GW-iM3{B1%_1CG}*7!9d9$R!|qXXb#5w zOD6Ym@LaFCtAgDS2{uia&*)2ku0~;uryMaF=~sI8GCe=kyHCd6!(JjJm}AG)<~~Bv zT7v&sh~SqXDIwkNuf{S$cJqmD+jSOM01$E)UehETra&;{te1J;Ef^DpDsO>!=Vsvn zHx3N|cBwd=I{4MenDqjDVeoHfuhK&B4V-aTPH~=GJYVa;O*zM7IE4&9)5KWju{5Zj zKR_rpXv=Tn%@zP}za!f_Opgn37g#_pap4}tp^9|yjvs*LF_pt6i-tI<`c+7xj9Cu^ z{;4=9{0>;04~~QVTv^u*h79WChVCSab&_K*$7$n@#j@{OG=5>NtB0TRIW5p(+n-v` zki|5T5;Uj_%|L+5fas(II7_M#9opIC^;Z+@tH`G6_)pHt5AW(?a*!WbN3z@Dn9{*V znuKk-S&^)XIqwn*ob~efW6hj{FJ@c?`k|Nzlu-mcc?^7i3+~hanazQBKC=>y1Md>U zb+uvB+HS;g&v1l1m^zG9r=MP?nDAO9?(oBB1pKhO{S%6@IB}kr)x$$ieJtdn*7E|^ zu;N`-B~CYiWOTp)Fx<)+K%xtGD>24h1=4ft550ooa)V&2?}n_P`NCK{axotI+9Io% z-`oac+z{Lx5N@1vw}5VONtz>tmp%*P(<&Bj9MCRD=p+Z;(w~lVmmm!FB5p>tpg*SD zGujvc+2w(I;)si=18LFRSa%*1OsXfp-$q7rr`<J&P$1vf<oJ8oq<$mC%9SO6^_#%# z(zyY)i#fP@{2-rQct$FK#D?%TgdiFTYzOF--tn5I(73J1W*o~tyHKN#0|+5q%sl)V zLtae9f$rph2<TKvpXbsS3ca#{(jlLHZcZD`4@ytT_A9``cE&86K+4W)`rEklt3c<w z_;)Yx>OIqUFt)aPz$arGlGwr;?rMzC$osklxYbr+LJ2D~f6VI$oiPUI)&)7aJ4tE; z=0Nf>x41d3q(H~DRo4Xo9_RgF4G+mGq_9LC+-+ZGSsg!k(m0kC@rDxbW>RJxf#+_B z5D$8PrvM>?o_QK(RV>aF{PxRxzh431r;^oJcukD&LH>@xzr-eMg~eZqvFQ>{-VbJn zzE4Rj3Gg!Q!V=CK@THVTB#1bdc;Tf`mRQsmc^L}plEMp}MH*X5-wk*Ndlh4A2ro^F zb0wER`H(#bJY((mm8DOcC#7@u;VX!WND=WhWGQ@H2Fz4!N6C}aLb?Kgy~u&tsV4_C zBHro|?WC3C1L2nD*qHt3>3PcA7NTzh-Wd@@H!TR@0U5-o(xywq8~}cT!mb@ad{PGw z<B|xJfRzwXIDZut(Fc;qYT7}DHYC+58_C+(qYn|pjK4qJ!@~w50M$7)+;1LCa058Y zK#$OGY8~>xoC`I+aYWHFPsxD<(xP>;R753bDGR6AR%Ar7cmx3Mx+e>DYHuE60qavY z;9BgYa-u}iFNoC3NHimBc}eg@7izH8W$%3UqWq1}{8&%$O?-_c*jz9Wf4sr{cRlzq zfhxO;tbZf%S_5Ld&U~T40*{vq0l@0OLXOoKR5#%G%Xqk3o@q%Y%_|mmC^aDErP*a_ zU<7e>@3Z*oDt;*0-&M-zD_*h0;s@iJyixoiQywWRC9V8e_BT@7N>0B(?#cbSMRR#u zuyXjOtI<M>hH_KSLW?7N)0eW=A-pCKQNxH)y%|-*sA!wXi#Eu3Yd3q-!a?2Zvesbq z3!aFvnmeZfoT7jZZX$|$4VoSm>#xd%Lb`q^08>41F-KQxOWiFAB)Vr%1JPXr5L7c8 z)%_pp-Ycr9hws*1Y4n6pq^lq;AYdrck={WNq$9n9^bSJk9RdPUmEJ+Rpp?*yG!+mL z=>j4uDjhT@`u^W<zuzAFJ2z+Si*uWc+$<O)>o@1~%prKn45++ZdRQF7i-TOoXs*f` zzJT_E>J-+MZf`~R_6!<Jf7F-bygNvXqndyjWf|;XNg~>G0}s2GU-mD3?nko>K-mUf zGY<s3=n6aU7d7t^zvx~w6C#~yCPgBa8e8O8sVM2J<IvXMkmg-5_+XaOkHFi@s}#ob zHcDHz)(-X)eok7kB#GIB#<9)?MH(yfiucG}xL^pEiuBtQ2;Bnc;JJgBzpPg55Sq(Y zga{$Z)xQeJOtQDS3_BFfmWWae$e6c^;kyRH@<&I^2I5%8umz*KA>G-01B2%SY{EoR zW&}cm!u~TSg}ggJ=ZutaVNr<_ck;Zt?IHBc{WuP;HKMq>@2eAUxr$Bq{5*0y#BTvW zEZl`ux{;L)gO;#uH%DGl5_{w6JS{m|#|B<@n!B%HCx-p*`zH-#hK@-Vw2dW=N>hvt zxOT4;Oupai%F^oCn3xo)8)Fl0k&*(M&^=OSpj1s{&k*UhA4a-7i28js$v74o5w^gc zzsU4*9spkJzXacm%x7)oB7ym6wys$X8%z0-FoAwwygV1fC~3~@iiHjZgpO7ED>KU= zoO;1*2nrmjNZnNWQh#Dy_ZFUS>QizTn*Ytay#e8gsT`I!Us;4C&DtFd+Ch!PNWo|s z+SrV($ow~Ts%l6thJ<?inSA4<XX5VKk6xO;Et~%AvIRqUCV8yx&noBZEQz-2-%l1t zOHsKIA#o$d9nYkq?QaqzgpMD4GVd0yfAio$w~Y3b6ueua;7#ttTfXE4>HBXISr)<{ z41`{uWwa$z`2qr4&%!Y6<e>Dggtjh^&xEnW6hjO!qR6)empx5gkM|?|#oqALt04BX zY0ODEHF^=>cF*jU4G!R*Gc3}6Id#%DKa*|D46lL%H6Jo=kXHDsJya%FQwqv<<_YZ$ zeIqzI`LcF${=sPKuZ2YXuQv&W-Qtr|(p?|E@V%oh1*^ya8I8m$mjQ!Sq)evOy82^j zr3~4;+>nn7#L2m}%EgSUPwGE-voIlq$BH_ap!UHPkzM8Btl|5B$)%5uHV<;o`1>&$ zW$n&-+`CVJT@bh?9VThrMy|uO7%xi}5Hm0ueSdkIZ!B$MVfB1nKx=IM%bTzVABK~b z;XjveEjP0xsaA@r!*&%sO&dKDYnenh2U!i{ezk(6r4^+b<}Png=GXM?x2gZGT*cYF za*@40TsbJYS)Vw(DpwPJ(Rf>GlfPopvaroPY~%CZ8=_YW!sgos%-bIdk+Wt42<tA9 zU;W;QZRsAgtrdt4Uj)QA>?HK;(CLB_(NtN%(^|FNnW@`%P@l-;cc7Y7DJ=8_zp0*B z?65ziFb4IMF4I-t-mUAQE51$tbb0r`k|A0ziJM;H2`yEU-&@LfC14}e&zGr;UP?TE z({v*pULq`M+em~eYvu9UvxSjZprzjF66dueSBhH4Q$G)s_=_}2b^ny=V>cWsmF8#r z%2ND5)q!S?9dZXFqlr;Sj-_5Sk})&S^qWL3&V{TB@Tx*(fBbxY{80A%O=amGb` z`=K29tQ-f2e7%D_pPdrRrhL%mJ~gF$Ly`h%tAhJoWWo79hms=24S9)HMLj251tq2U z&0A3X4duK>CGAY5Tr*W;QDp;PWs_Fr5MNa*-ygQL%H1I<&aEo<MWQ@8ROysdC~q7v z-%tqUNP-m`!6LL5Ipp)A?F(i}zo1kgf}J_zoy|Khx>@0vO~_JqIviie0evR0so~4K zA1b8T=BwE$($@pk>Zk1=j@BCIkoNM^5%SkguFzSby&bC@2_3rq6{_<?NoR_~=%noA zVwU7LRG0DigvbC%!f6aI*FkdLp|!umaLH`%eK0GhUcR3mPu4NtM?EyBzKFfPYq{k7 zTYcF}cf)n=-ak~;7`l6VNO!HM@2<Upak+u{M*~0$N$qCn6mzi?W2v46MY!nrl<WB8 zV~kFpt#H%dS}HQ(oHLn}HA_UpkZq>EM?I25zb;;q8u$S(Db-wA-DdRP#@x_$<|G2B zB8X$T!~xIRIqR4-qUeqo2=c!rLziX3pp5@}G8E0I?=bH9Zjf&kYPA@ny?po1C@EYs z!?T0+gp63wMpQt3G)8gc3o}mvkeARQ<QF9dyx&<Rc}v!p?G02FFHn0ii{{_#iaA%d zp%K$zZqy!P{OV%Zba(WVG!-!*!b2HpFRUNMjOjpRfsy1NFN+Ae4_S}~XsZ%guH2Q` z&(cnO?-7R_JiY!3CF(v7M8A)XhXDBo_yG5_EglHB$D{&7Cd1eF^<|3%=4&c0kk_8C z0S5akOFtv^9QM4Eq&u6RtqrAxyf})SF>~c{T2d|pF~5zU-Mr<yEK~6PI#6NsEJ<v8 z*`ot#B|24|(E17#i$WYIFa<0&vaz_h<M#3o8k@MFL&%46XcsW~c4bj)<X-P-ff_h} ze>mSG?z&nrE4{03yrOJ(qe2|*Ku7K{I7&2Gu|{#$)`N>Jj-y$PJxxhSo%4}hvpV;a zK@>~CAaFaMdA%`#NMGv|nhsBlWX&0IDPf1Gg_<OiueLjv64f_;s)09}g7~i)?q=@r ziD(FNW?n4{e8|(d-a3JfSIf1+H&x4pcun6b#6*@D(#f?{5uZWoxp;!(o$`ppi&eVf z0<|>Sw0cREQv{~~xFAbMGxf`g)mGAu)n-zqId)us3`itCX%r=RU7-$4CK}<Sx8*5F zYjh7T`JK(x0!aZlP~=y2T@%S2eJALDZ=Aw5{nFif(I!Yrfd^SN=yn20fi*?Yt9{sI zi2+mAhy1SA7#i0G+SJU_{)nv(!U@zHGWz=7vky-CT?+Z^868_1@@zIOMDkB~A7#N< z-#xQLsd9DNJ=9T=u+K7bI30Cc+*xD0?~iLvAi>}mNv?HJiMG8Zxy=rP*^qo8K`om; ziW2Mg8cCL5)17@tI<H@YXNvK@vQFl^+fS6omD>IkS#B0#)xESA{E}g&&VtR66&;f7 zwv}T7G&gsSIaF0v^kE*pXRQfL9eGUN;!H6d7&SLwm7Tj4nU<}0JF!9H+Ok+)6-ZPi zR1Jt_2x&mEI3NOVUh8~Vl20?vKO!xBXCT*K+LZ?`RB*3CjTL-DtB%EMBK*p)xx752 z=RIT>+j}?v4=GL#sL<3mu}dtT@8h*?p6N)4e~FlV%<ewbN%A5q;3VcTkaL<C;Az52 z%g{}Ejc4O(oRd6D#nZ5d*~i<x;dnf;6#(myT^Rku(^PW_=;(hu2Tiy(x{xI^JD8R1 z9K-BZtY=IVD^Rxi2@mzDx>r=C)F+yfcHLJ&!(FbWSVF7pF7=&x*PO$Y&7grR#sKq* z+#$Fxrj&^#kHohzuEEMpkwP#(ZK$f1mM8P}wHk(nm!6F|p7I#a&()(h{fnYW2H8w9 zGuFzB;%Rvz<4nH+a(h?2>#fi_5l3DzP%OQ&gqJd57}^F*8dKQp<roB61kn;X_BLXM znd3G!_IlRfAI<l@NH-H-xGbP)zBdN(UNfe746w^M)ES0TrO4~Xs}Un+GAotrc?~)> z3@hrm(5}l_X9K_u1QBhEA{~HDkI@g^p!wX%aGj~B*D`*Uyo8xcEbKco{CTak`l^OV zXcH?OI&iBUzYn|jqcqW4NChfW!v?hGK%GSti77{6HZ?pfZo#E=7RZOj@d`N;b7+t6 z<Rc=fS)6WzL?BkBVTJ?lI#=8%GqstVBs}L@-vJrrd$mE2t|qudW3g<eo	OG0Du1 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 WE_iS@c=$SaG#{^@+8ao3zy2RyUskFB literal 0 HcmV?d00001 diff --git a/docs/images/designer/designer-top.png b/docs/images/designer/designer-top.png new file mode 100644 index 0000000000000000000000000000000000000000..45942a0ed47793964908a140b7d8c8d6f36ee670 GIT binary patch literal 79215 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 literal 0 HcmV?d00001 diff --git a/docs/images/designer/designer.png b/docs/images/designer/designer.png new file mode 100644 index 0000000000000000000000000000000000000000..1068d6ce28bfc33cc304c79524600e04bc0d2063 GIT binary patch literal 86884 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 literal 0 HcmV?d00001 diff --git a/docs/images/designer/empty-tests.png b/docs/images/designer/empty-tests.png new file mode 100644 index 0000000000000000000000000000000000000000..6c71392b840137d8a8f97fe6f12a6271eb0942e7 GIT binary patch literal 13562 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 K-`C1~3jH6YrcJW| literal 0 HcmV?d00001 diff --git a/docs/images/designer/export-example.gif b/docs/images/designer/export-example.gif new file mode 100644 index 0000000000000000000000000000000000000000..92af52fda946bb277b2e616a31cf314607ce9d9a GIT binary patch literal 185192 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%0AapA=tKm26;wjLrN$c?BaazoLSE>!ZJHC%sIB@ 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 To+gZ$_UWJwjGHEnfB*nH%Y+zj literal 0 HcmV?d00001 diff --git a/docs/images/designer/hover-selection.gif b/docs/images/designer/hover-selection.gif new file mode 100644 index 0000000000000000000000000000000000000000..09bdc6bb7ddbc5b1ec1c622427a8dfbb075f771f GIT binary patch literal 290234 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%0A=J1=k%R2S^0O*x^W!&#Ko~<D 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 literal 0 HcmV?d00001 diff --git a/docs/images/designer/parents-bar.gif b/docs/images/designer/parents-bar.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a266db4b1c2c5e47205316255a63511e8fa9690 GIT binary patch literal 27446 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 Vw13DnPYYsRF;#pb=u`kO`Y$8Byuttg literal 0 HcmV?d00001 diff --git a/docs/images/designer/property-defs.png b/docs/images/designer/property-defs.png new file mode 100644 index 0000000000000000000000000000000000000000..54e309197649d9bd029a7ed1e74283fe1f25401d GIT binary patch literal 12588 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 Cr>LU< literal 0 HcmV?d00001 diff --git a/docs/images/designer/property-edit.png b/docs/images/designer/property-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..5470ad206f781b19c2b3feedf00edb4a75b09350 GIT binary patch literal 23927 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 Jm0)e}{}=EUCX4_8 literal 0 HcmV?d00001 diff --git a/docs/images/designer/tests/add-violation.gif b/docs/images/designer/tests/add-violation.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2b71ba494cea889b4c4225b246c63bc0f424661 GIT binary patch literal 183286 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�CidDK+}1;G?q1s`jQe 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 literal 0 HcmV?d00001 diff --git a/docs/images/designer/tests/all-green.png b/docs/images/designer/tests/all-green.png new file mode 100644 index 0000000000000000000000000000000000000000..51264bf9ae9b50da00c98e7528fb611aa27ed840 GIT binary patch literal 7447 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 literal 0 HcmV?d00001 diff --git a/docs/images/designer/tests/export.gif b/docs/images/designer/tests/export.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2d36c89dbf2359d2e9a9695e6fe4b7e31807bcc GIT binary patch literal 281571 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	%P$8GlS&H}TmN`rdGHn-uz@6b`1DVdj|yBcfGi z67v6~*pyRf%2|mtCOU;0QZA)xs%BGW<2qvHHA>?;&Sp7^BURGoZMtJs?j~;Xrf&8o zHln3G!lfH##s9$}aVBST@ng#,_Uf|_AltU%B0VF_%)m=upDbM(!#!&{(gHh3H zj%QLfB{zbjZ7O4J`ets*<}?E5Z^mbPvL}7QCsihj4lJW`R#!dF$bSCkQl*ewGD#os zT4Fevl+eMIWanql8F#uy3w9^Tgy)}>A9-FVhqb0tRwXy;=6v=hde*0Wis*-qsD1Kg zHKrwiI@heZ<%+&&3H9SXwj7Px10F6Jn$W>63=Er8mV~wwg^CP@4(a)s=Xz!(07U;n zHKu2Xp6F|CsFRwgl$I!!(kB3@D2y)E8@gzgcB$kDs9H%3T^L{rA<<z>i8mZfk5ZQ2 zt&=xdXk@`Dk<KYQX(&3L=X;K5l|Ct+M(LhTDTxLuI%27p+ER-aDxyM;j3x#E%qYwS z3zUSZt|$Tkm>29=7U8fdon&h9v?-l_DrFhzH}Yw0Lg|s#<`n<{si`UeV8N-n=Z6A7 zs*+j}q@|#iff0;A2KXsEia``)r5OCc2J8R;+$o_Z>MQvlkRdCx%1f?=>B|v<?Xi_J zR01CmgX#bPgSzQIg<7|MtG9+LxQ?s1mMgh-Ysi?Zx}NL0q9&-m>xS8>R{H-bI@&-M z(54t5!3Au<zFxosP-T<KXTI_)zjA;E=m4y;Clh3fdj2T@paBaED>I@24{!hqBy1Ms zXS2@ImTs)ari;rlXFsYHUr3pm(1TZ1g1~eMytb^%zAT=I>aEV_1*kx=<|zQALB&2m z5dc7~-fI?!0Tuv&6cnp7-m5Y`!80zS7$|KSG%Yi3qrUPi5U>CTYyiSGBh;QJ0Ej^m z$YU8SYzVk&*IwyU7HiNtZPWHF*@8jDUa6}BZ8dIfu|9#)8pUvatmM=qjp(i4;>cXM z9JER*0Q}>VNQ`-j)hO&JAHb~RJ}%^<hP*E6%&Mbu6v1rH)Uzz3HH!a1#ex6}V9KsS zEY<?R8L)r`>_8SQYzbH`2ZVqTBuDB7t>!wT)jj|gWPuZeZgSi#04Ra$azF-z?FO{! z>0ZhPe84g;YzI_q&g!djOp+IH0H!2I20$zaAS?j<0P-U2-68-B6vYk<?cXX6TSnIb zl&|`-h~Ua-jTT1CwO7PI43<pEwni@g<}avvm^B7xH})?(0<dfTF9B!4rEq|~0`R@+ z?A4CI2#5f}rh(ONKn%Qq!A3z7@PNdgZt8|@a&!Rq8f*+$Ei*!azV2#N8UgB-!5Hi- z4RlBL0zeB#R1p9{elo!bOe_;gfe@hX4tOvJM1T!H!4cGIcU=EK1^@sMd@xbmLB*ng z2WtQg#4grqZ&4V)`aVv_W-%9wMSuvdq%z5j_Ck}%g*_xjl+bUKh?V}fu^WGCGXQ`n zd;%-5!Y2@gIr=7i3UD_nM{;0OH*RAV%vALXF90~P@Rq^pO6=Qa0SEu^!s0IWUaS*b zKnGw!zH-0<^sf^bY)5eb&u%ZnE^MnxrALh|Q5-=GRP6;ou}4|J6x^)W0)P<Q08L>5 z=@RSHTCfgeu*K$V#b!Xy8buHg1^ISyyc{YrFEdrNZ&8e_#K^@zjx01cDgdMdJ7lvq zZ!<S{vp0V;IES-1k25)!vpJtLI;XQbuQNNhvpc^tJjegDJkK*dXEOlY0xF;aEWpAl z+(OhwB|rys8AO6W6SP1N^g#>s1}Fy*xN1Sq)bIv$7F28slmQytz_3d2uv#?g%A*SJ z>KjDt54!;<M<ql9^uk&I5HB<npL9USLGd=i7$k=Xs6cWcEKEZHKwtDosDRau?L}{N z8R+Z=q(Cl5B@<kL*%n0<zyML?Ei<P}=5c9MS9MZ=X&BSRj4DRVnXxq!MSuW6Jdl-D zm-UNg!!4{rKd1FAL_<PHWpBK7K*#k#_Xb@%@CX#aTMx1!2lO4h01FW79k751?7$t| zzz7iQ7>s}h;6NmNbQw5tVV8jujKC$Q0TOILL@)ogu7>RhjIAJNK_lSsB?mNQBSB{$ z_6R_6u0}Kqb3h49foD5FWE1ue4>VxwKpNO`)<U$>4ggW;=K?^rS?9<W7dLXNm5e?! z9R>y&2L@44b68(9J5<G-v;(^Q1X@)0QP{Inz(YD<H@$#2cLM-Bg!gtA1v`khd7HO4 zyZ1IX#d)K*dM5>W7dKj~^)0{xE3|b&$MtW>HGm5=T?h0C*sNTa!A#Y(3aG%?s<sZ) zwg})rL2N(?bi@NkK^epW!w$9xR5VGK_JTvy2CzT}Xt*3aFbx#J5&Qtcl0n3FKn+JY zNoPPL;BW~P0r!qT3OqIoWPn32wiGLY13&*bVwXS+M1juoIIfO>1?c$I?tm2oKvM&N z10?s3C^MELH&#RUQAl%?aKlpth&wcDnd^l$C}cNG1w23>d+!Lxyg68;!#B|R1}&O_ zG{v5=Sy3p6oo9D8Y>+!-gPeawn}dvaXTzGCcc6>i&j^?%vV%K7`g1ILQl!IWE;>6H z4|fmx&uBw=M|FO$bw9iHT>o=jzf6J?I5P@?L&LSI5A;kS2Xa_|t7djZANEGO?E}XE zW8;8l53jC|^a$Xtf-lE%lt6w0v=^|z2y6gj-!`v5dxYcg#M<%*RB-lgxMmx4B<y$z za4%?IfwNoeAWQ6HCkJD<>Jt<*Q9%EJyC3tG!-%pX=e(QsJrqU0mpQ*%vpoa@H^hTG z+ylWQ#XZCWH%K5iaECkqK*K-0!$&;C%Y!?tV3|+6#AiIlZ@k8L{KTWf#e2NSbG$sD zL&7io!*c^SY(q4RJOJziH$;QUL&L?Jyvct9$-8{c?|jC`1I<T#1oFJlM?B1<gUJuY zK5RoaH2gk51IU~FHaLC4LyOcKea^GI(JOt!OQ6lWL&F>W%oBvpkNwb>J=veV*{40) zuRX@!vwripf5W=mpZco93^UsG-T!ld*Zo_gdQ@h?tMk3!|2@(Q^t}c?T^IgT0yL^C z{@@F88RYI0OhMkp^1b88abN%byyrVn?1MY(!#?yvz?b<xy!<_szCA=>Mu_z}Og+dK z1v-p1I;?}y)Bc&q!!(>Z=O+aq!T#+-20HA1?8n14yuMfi|LvRnnFBz+$5rf~dF-ov zJaGQ*8wK&BL-8NQIY0wZRKHQ&UYTEina9=jcmGn%{&WLC^sj^NAOGmL7dP}iQ6T*6 zZ$tRgzxl^Q^c(;2$38%y0|4OOK!XOip<Bnz-N0$t2FBaQtssDf4GW%YHn3vFg99fH zTnDY8M1>3umb3;jo<M>hVaAj>lV(kuH*x0FxfA9+cehrpx&`!Bv@%DJHUfY&>C!Sv zn>J!PmFiQcRk3EJDpmh0Q?6Z;R{aW=?9{Pf0c6pU1!feUZ{fz3JC|-<yB`}I$lG9V zfxCYJ2Npb-aACuTb?*BZ&s{HW@!~DsHqoO=kti=p<TiOT#(2{(a(r3vo<z^v8m>z? z(WS(R+}4#$2)ngviZ4elL=C{T=7s>!wQT9GWboj>2cC=ea`fnt2G5}s&P`y)<^ZC@ zrfzYfYG@TzD@2E`boYs}VNWLCGCJ~e&=y9IXr3f*<HHAzkH^j6H2&qu0|}+%z7wrE z(y&8GK9SrR4<^-QODHr1DLl}^3NgG;!wfmx(8CTv{7}RW0r)AXTVP?OD6GyZ%Pgdz z@(O?!y)tV?7-#>y%BrzwWHBommHO%|A+?Gztge=N!Y#y@Y|_amaoVddzM!nq$}6$V zQp>m?1HduH=6ek}-p+d|x{(A5Zz0Qg1C6-~K|&`rXvpNxBI(NfZKTKmkcT<S<`YOW zGUfa%&B+iQFeL+(GY~-nO?s{;(H^zTvUS|VR5m$9TS(AMcSF;l=L(YNy~svtXrjnY zbuCesVwxsE&A>w`BSa_i(?T*Qt8bt&5fn8dbU6Dh#A8QH7TIN$ZI)SNO%#eKqrmDh zDj2&m@<<$Ibg?WVi`3CuAGiGxTcpxb5`ZPQY}eg)51LXhz2L3a-h1)Q_aMfCNhl)! zVExlhkGB7jH6n)A^tUuOt*h`kL+ezCH9|kabUW*!BMrjK+_5yF(i#f6#7Qe^l+xy+ zi<C}}8omxwbkakZPKV}1uAq<{;?HE$Mx8k$%utKx98OdHb>zrAGSI(*Osc3%NRKl} zIONm}DQN=%@RzwTU3%8pue}Z%?6HrH7DW}Q-O<Jxn{v_GwYjZU+!xyp*II42n%k-( zT^vYVeE|;~u)XHpOYp-HPh9bxA`9lRk}#E!Im<AXwV*X&X7jVqb|rN4HnpQJ9so~v zHNZH*o7o~diT#Z-&1?&fM3XaI9lC*E(lx{PXxpyn&o}lcI$aw*2O>gCl{7g!O`{yb zcy#~Mt~v{ipYOIiLwoPh%O^&jy9uxRJZaUQ7TbKX(LY~(5laM0TA|X;JKOom^;XCm z_kQZ!{K>)_#~8ttzx!oNZ(0GsS{9c;1;T`IQ(E8yAsE5IXy7gJa9o$9Rxm}4j5+W5 z9ctFJoi=f<cG20H)(irmM`iFo%hT9yY<H13xg$QCkzt2u#~fX)&UGzp8JuKz5aqdv zXUtj0a&nfS%R%FGH^k2IG6SfGZKH-Fgp+>=QpBt&N+T&8$PPIIu@S!MI$Z<FHkjze z^sRAyZDixv%$A}R$*)^>8<*PlSGPNwt6VH9pxfBSzyA#qU1j*21QDq(c^NK|jdcIy zBW2Qudgz2-k0T@HS`x6$35`FkOW5g_cCre6#$W;}32`VU8pf38dRaRi0G2kW{kY^~ zC-V?*-ZL_$8LT4K;7{<rsG$tDW={V?&u`{*sG124hPE@)ZCbaw;G6>)Bs>V5uu~sR z;l@_kw51w-gB@fzsyX|inh440Ms>b%o$a)c*`@^mfAoW%_4LO<=s6I7%+sFx><2&j zNzZ)_^q%qzC_fD%(1i9wpYz-&O#E3-eoVBU_Ecy;_z}>GO7x!}iReZj`cZ-2Q=kex zh(k;I&yr5`9q$kZMFILyNY2zr4J;f@ahlTv@?r!P?3Wp@7N{`tQZuH3nJfRLHVrIx zNFw8`h|rYkAK4g7BvHjvRHrdBQc9Ift}|mgsfSfN;c~2PQYu8erW&RCD~N6)lTv+! zDW#t79BbW9!LZtp>S2#Ja-9rvb_gc~)m5qA=#-*JCCYN<6|AIb8W|hQPRY8HvgwN> z+UUs-kZyFNnzg8A=jqwcs+6NC<?LxON?Oi(HlU)lXlGITTG(>7wVN%iMpwI1fAB*e z`OwEpMN3ef4p%S@EC3^kn_T5SuyKzer=M1sw5v%MvbU5;MclzMFP6$^Sc?f&x3;}t z)^3G5{AQoXNh0)iSB+bv33zom6YYM)PeuFTuCVJ}{aSZX_oeQ2{5$_y0aup5$$}^R zVw+$EFPOm%UNCDN9AODhSi%0#$2)!t(t$3Q!*N+8y*eCX5i@B7Du9Dd1mZYYS;xJ$ zBrjyocg@ItB*4@Crq_gt&B&@(#`7)jk7=yf7Z=1hlKWbZ*SOtVig&<GF7T6+)xHzS zF&Y%M@|CfiWi4+xwinKDMTI+JG1H`heHrta(Ojj-^kN%eG7xl|1z;uPSg`0*ELf8a zWj*8fC9WC}vxJ=IC^LD_g?93xJ96NnaGBAKcJ!mO>}6qSSf*)Cvy}95+y+>h)1AHv zC?=Vc=JKh=h~~4Q*DGGJncC2*zAmemJZKohy4AFPBXcghXh{F>n%BMFwWKLsP*02b z!<!!Vv4?#L5dgp*lmvi^)mUq3vrl(pvo)$+J#B4Yo7>w4k)o^YYjKa8+z|#gm^X}U z5!)2G>UQ^;O8@|RG#e*tZnMq0o$nCY+1pK)bH4$uZ-Gxc*WoVr!4Zz|bN92-?^Z6m zLF{mehj<1&8FhLE&cSUD3u%F_bL}8YRcv3U+OF1+$OqoJ>7{(trAE-yJkD|%<Jx^g zL2$xxo^xI=e54JZxK0;&+@B9!-D^fCoGS#>I4d1Q3kh_7Vjg26=Q7o?=1@y4GOKRB z9OZ6~G43iNyMI63oKeqr#LPZz-k?0}ktw+_U2{4dgK7WOOt+A5I3=2b>zwa>-!jkt znQo%z6ynAn{NdBguX}rlXJTtS`$iIAr@wuD?%gK)_HCNIKAvFkU5Lwtnb=Wny;+=> zIf8Ju<BachlrY@)K>+nN%E{jKp?}P75Cm?&@1FPO#_*)k?Q_ICvhc$<J|q<b4=}<6 znYZAEH~;{T=);5hB}xZypaG3+phFzemp(eS&yMOhC>w_TJ~xoD{q9qr{p|<N_R-M{ zc9aPG+>d^Ppur6Ar$hShw}1NqutdbKM4+!hzQF*mPx{;e8u)Mg#9=(TFZ%p%{Q!{t zc!L?zfg219`@RAEB+wnuFB;I{8x#;7prIK?@cRGU;Q>c*`l?R?0}vX_kNrT91WSbc z+=2h-?*K>8`^Yc;8n6OOF#KK+{Bp4WA`k$ePXWb&{O0fbwyy!{FB=--`%F*-mk>Di zZ~6$(0Nnu!iDUhykOGAeI3AD+Uy%F~5dZXV2K$d2vLOKhz_5%^1qbj5rB4Q35DL*D z2rEzvp#clUj}HeiKcY|pxk3ASa0t=i2>}2O(IFbXu>H`X=BTXqFfkKP3-H41_=qpl zFwGN1F}c{G6xrbxvOyfK&mh?08=@f^v>_ebAsU*Y{JP;+qM`h<AsgC333Krq;t&AR z;TyPN7{1{fpl>F?Zx>In9oS(6fiWAjK?(oA;RJ2*S9G!bdNC%_q5RlE98!@TcJURn z0T$=4M4Dk6eK8lyF&)|g9)3|9g;5;nksi}w{@fuOp79n-gc+j26|<om;Nbz8q5Qs~ z7r`+Qk8%DYvHZBf7|!wi`0*ejksZ`gA_t-z%MTi2(H&|r5O?tw#ep49a3Yy69#_#L z$MGQHVFY_|1o@F0*ijmN(I5{J9m@|E0pJ_6p&(Py8FvvFn}Hu&vKB+K8+S1qI5H#u zaTljiCg4H)fH4|wQ5>6+DwR+vo8cJUF(q{JSF|rFdGh+Y@hPM7DF@;iv(Y3Eq7{|0 z{Ip^I(jgwBp%>>;7sbID2@)>xu@?W2F&XFZ0D18vvZ3atMH3NI6FE`vMp1&;P3Rgk zGH1#ZPca+^0vwy+AG=a5<I*4=vJ^*BAi=L2OffCvuPSFE9hxB)*?}8;AuUT0DSPo5 zjo}^*;vP$J7ccT7W-%Jup&OAA7SW+Le`P4W@*C1&B&SgxII=Y1;TtmZ6?1VF=Px4T zFD^%OC)1%h&ygqf@f@#{9TspRBatoP5iJK|F46KdpK&NXvKt~1IK?pz#nCurVi$4q z93S!?*%SO;G9U+{Bumj5N3%5L;U5V!9d~jhzo8UM1QzcR8jK+=xnVWg;T~r(7R5nA z(J?O5!9Qh!IU!OUxFIex^dA39lq~l%A~Ui<Q-T>F(iCU$7V{A;m(n2E6C7_cCcY6u zpRho;a~j{XG<VV?Su;Pd(l*m_Cs{NjEfKR4GfH=FF@;Yu6UeyQ%}TWtf+!Oe#Q`7v zku+H}Gz}su{}C9Q^BW4XGgD$1F7g}gu{ilL678}aqoE+@6e8Qw6=@Mbm9Z9YQ69=~ zMrUywJyIQ&Gy0k{Dz~yLwKE+cRY_xlOlS0qR+GNuF+cPa05}vjce6Y{0#q|{Fy(<6 zy1^r96F7DBC9zT_;!hgS@hsD`Idu~_i1QIA^fn)oHw*F@dy*dybUj-Y9bPl~YSj>L zQC88RR{@eO4T3qR5gz|`u|5q_LiICO528l1)l?6{6$AAvITbD2^BAFXFyS;WZ}T6^ zR3^!lL$`A^R}mLY(jA7uGH;?VPvkJAbYFFjN`-ApuM`w-3SbFVfx6T(yYU3k^Fb%F zRD&`kqc0&Z^;g`qEh8}+(Dgkv^+Ms09&>RUhchDKK_=-DVrRk~kRckvK^V&q98dLD zHTE*G@+{@D91F4+^D!yCF(%-lQq|K^7gkVr^!=`tCeD*Zf%710RUTH8UfW?fTQWFr z(j(&)CU}w=j8j&Hkt3ybFtamU4<Z9MFeQu<7{7rZ=W=X^a~08{V!KuyA$DXZbXl`; zXz7bvThbT=)i3`IavOK`BY?4L-GN&NqGz!(SPkMvck)%uHe<<A9TB&1Y0+#`F+Iz1 zE6=e~4?<!W_CB9f*Z4Jb56)i;HefL=FG@Fc5$9mPloeeOPm#4u71wIv&`=fhy@u5n z26ASPHDt*)SxuH3wa*+?l`0RlIMuOIX_ghmVJOv7X9qJTvQt|Xl`UlxM~O2k?Upy~ z^LLe2AKPJYPc<Faw*1nTRZX%<)AJuo@kW(XEno6hXID_8S59N%K-D&P3-?$tGAidb z9e4A7xfOoD_9HZqH#7BD2sd^!)HAU)Z`D^OGH@c_7Anh;A2s(Q;MXSb^?g8BbV1nH zNLO_c=XC$|!th8qh3$oP)pu2WacJAN9rRKz6YyB+)mcA6doMH)+hIfFazp*}G;eb$ zff$FQ?=xq#c*oaJn^R_!by1U1e0PFOBiDa1H5l`Q8K!YriIR(1Q3K!fZ}(S=pV3X7 z7HUUuKEE^?d?8*dR2?C;PY@J1DmMOl@hDHwBEgm-XVx8CQ%?u-96uB-nbt#Zw1U4V z7oU+s&yp<THU4(ARI5@q85AMixL6G$a4%Ad4dQ*XVJmS|{yN!xs}?2>w0=dkb>kQ# zg>jBAlPvjnCOY_RJ~)JJ`O!vLg#oA7bh($`g@tQETA=|MHWeL^ff-Wv7MB&7TQxtB zftdf_3z_}V7^u&fv9=bsF$0nLDXlp(>o-&t^g~n8e4{}YZxuM00Y*y%K;iKqOZAwU zVS9slBrWnlCvpLip?eQBpSQRfka-xy6&;e{o}0Nit5#b5`Iu?6F8A*kf0G;1nHI@& zftML;i4y(N8CZuoGjFv-VL~a7*+nz(nA2|?@pp5F8JhRkZap$(Zxo-?IeM3skS{fF zFEjs+nN68fq2-uOy_XfOS)zwHpOZEIo_S(Vc9>hW8lRb4VH&BQbC`7(I7qsCX=0Z3 z^_I1|(Q?_B@1@L+>j1oZtg!@`-{L~w)IsCIQCTs9c~p-B7%||1t(|0T)moNalp_DJ z)gbUwk8R?vX@W@GvPlKICJI|S;~FMP*|2AKK;r_irPohy!ms}tvUdWq9lNq~VwNv) zt3CVgelOU_`l}0PU`PA3nZ&G7n<qfjCg}Py)puvp%pOIxN!)t5u=?gcd$+But5;h~ z772BKd$<KdwTb&C#6h0t!l5nABLP*HIU7oOd%At^%NXuokK0Nf6NR(8yWzsPy*s=C zHn(e;y3M=GLOb}dTfCVBOCyfG;oGoH(MxYTzU_PPqPx7$d%r8nx9^)Uc=^8tysb-- zz6bokiH^Jtj=veap8OlZ@1o4+1;YOuywhwT=`pe88eRW-Cs}c^5hH@@n=t<_bi_%# z#5Gt_3-`5|R3^IfO<No`my}0UoW`95#R>Cs7aZX{%e5LDm(%;YDZIE&xNx|8$iv&h z(QFuHQo|3UP;DZ)#nDi|xsyxz8%;dQ^SYCjyD*}WedQV%voa|s5-Bqk9Gx<g(;OzA zvjBHAx#g2(57HgByl|sYw!f>&3j-Wu+c0%Iv)%z8#El=|;T`g!9en)98STN5TrL8< z(ZyTI&up$^wo0DU$u(7yH<r!SHEd~eE_}C4WBD+ivt2t^Fh&yklKU8Cl5My0f>~A< z%h_0!a<9FTM!8jN-*t;6^h2%sL2VMmH=Rk6Gl27Z$MfMJ#VsH55>o#KUD1Kux_fTD zA>G4_Jglod(&yV=i7PqJksjeR6}ggZ)e%ku_cj}Mup=_VUpYO^wku1$%k`Q$=d>Ag zbQP03EN?O)&lDj`)^07EVR@4(2eNAUPZe_*;h9%`19@{LRc>$lIn5VQ>2ciM(jL{Z zCCxQ+jdO6PF#~zgNIO(6|JZ7K*B9Ee8<?|E-||D-7@Xr8&Cxaf?%j1|n_O4DI(?PH zU7TDgUL1sB6;MGaV1W}(K^WLU&<TAm@39@|>B1n@>FEi>-oYJ3OCRRC9iF`(@*(Q$ ziP@_@9kw3Y7d^<QJ=^P|_|U$)C4HvkQ$EMB7R}LqWtJUh{Sp6lacEt*m4y^QKeQ>) zRpR9@o9hwdO9VNC*eAhUVwpQ34RZc8QX{u<g9)?FY4buqJwKiiJ>g;VDY8L#vl~q^ zfwxo7_ctl+vn72pAkDld(er0{71xV84&&C9@qRa{cWXcS7VlEl0}=?q*;$tn7)4X@ zMH&vLQvAYF?tfU;ecEc#oIGn0874szPyrTDfe}Oj>6Kpj0+Jox0i)*nLi3XArF<Br zp4q=N9o|8+p7S0LQnRrB!rGtg9gWe~J|}|PFY^Dm0fL=CcDJ&LV+SCi!i5YQI(!H* zqQr?4-9`JBEnB;E*}jR3rVX93bP3%xYp2lSw{#}80g(R(P20eQ7G)-chYsXLlpkdZ zRLIWVFoXcup=%Z`X*7*R6A}e*v>Ur`(Yh6t*X-NRqUk`UBO29c)tlL(p`@A3CCz3o zacca^j$1l(zFvNH*D)KrbYDB3U1-!8fUolWLX8G3o7IOk)4>#6G#lH!K`*is2Msa+ zw@;mlB#Dk0M~u<fWyC0so3W?d>N3pu7b>&WFE5tOm~F1F&Hz3#yO<7TI<{YfLv1FN zYB#r1VQNbUO&nEi9R~`e3ooM4+-JEV2XKm!C|I8u0ceKLU%!6*@@ZVZo}WJU?z*){ z*9{-P`uzCG`=*~h`1F&HR{FsMU_bu!#~yqRJ_!F|gc43jVTBf6h@pl0yrYjW5BdY5 zKNO8fVu>c6h+>K=uE^p-4IJ=dj4-xHV~sZ6h+~dA?#N@0C0bX|K|T(dVrYsD){#Zs zSag<2i}eQ5W-+k?4>VaB2h>&y8MzpAz{TbcGf(kF=2s9M)lNG~-ZbSx>2RY~La-GD z&68Rxlo3e_p~DmasO1@rI3~4o)Lh2!DNaX;+SCxAqb=%GqHLXcBvh`!!%d%1RjQgo zUB!uKpb4Qf%xGnCl-Ea^^2rchphAVrNrQ3o%{N(P)J;x$x`|OU-$lg`nrc=BPg1ph zlbJk$CMumqQ<Y^UJHm-0&aR_Y3YB2ltOEZCDzKaaNG8Li2cLTb!lw^B)TX5mKi{;Y z;C}>)(+)ol!jqdo9EGD^hW`EwaKHjzxM7DMhDc<>3NOsCLozl{K#UDfOmW2)UyN~z zKpMnb#zeY<3~i4p=FUhZ$(qndR#j;eN6|2&=|kv*tPngd!~B;}XCa8&X&sMBTTg5< znh<o~EHo!puQH^pHnCy#WTF^#RF%?6QKwC!xGDG0M^xeVWKn3!Y%)~CpoFicxF*!; zW;w-nm{cVVwHKecDn{i_H?^%0M%IRDt4mF%bI@nNI<%K%BJs93lzb(X*EiZI+s#Mm z_+8dYq^5b8-dkeZX*RF`g2*kf0Pz1wLHa4^9>449^ItpqNQX~8=<w^0Joe>NU%&Bs zG*CL{4orOU#vhL^haNf@qKF<p4?V^)MhxSO(O-{!_S$b>)IdT0%zcZ{WxkQ3RSkOb zlWVg4R8ZeR1UNIV;yYGJV%{|M*5Hr5=4K#u78g)uL|S1ATcfZAw5Q<3HkoQiTr$EZ z<P>Hpx3QA~DM%Hq1dADP+fx1LLY8-ZZe`Fo+F+tY6OiOgev#1#*PO!|%>V!|B4m>> za3aBrcraJ>a|ph)a=0zYN=b#$pr`7DmuA%jAwiTGwnPGeZHea=w?M@$O4yC{_``PL z0Kj?*1h0OiLmTaS*LvikjrRXki+Ko|5Axm!$2elBV9SF~^TLP6Jfi4fGSZ_T{|LxH zYR7vV6QqhTr57bV>U=1}45L&gC7GyeRPUQ%33nC~LVbran^ND|P}De~v5hvKTFTC{ zAwQ#hax>of%V=W5vW4JFe&3kQs6qyvlgvea=*UdXpy8ULc!xSuA{;`XL(1`;MQMA9 z30Y*QEWLyVGC2vGNj$<AqNv7wF7eu2-nSQS^w4g5lGOu8v!#(lg-i~V4oa@s4y-VR zFWEu}BoB8GcGSsowNjQ=^vMhZ9`H$_<JKu)!3rz-sa~wRUAYcIAarP>cDGXx8u^hs zGs=fO_!$sC-XX`3iWL8jbUYY{42e=b#)yw8ZK+FNTCt4@38oYQ)^?<pD3+LIOUSS# zURJgfc`&1=woFNz0I*H5jRYn=9fs3j)zh9XO(JibA+|8nQ}sb3R?CshPy<>s?<|Hn z!9v+hs%a5=&9GE)fsB*<iAhr8WF$3t$ySlURfWK0RYOHapMJ;?%rK)FzKkW(?mASp zxMQn0+YDBnN)*QSR4|`fOPnmyl_%M4v3MQoYB)PtqF|L70maEqe>$qZmKKS*!N^n? zD;a^31+PtY2^2*~x?7k65R8BY8MWvS`T@v4TO*^p!YD8H6b4scTwq%4HPYxx_g^Jt z9>QpfUFpGydJz9>Kz6?i-td}8rr;AVkM`0*63xV8d6HH{UMWjwUJOeUq3=ZW=@Rs* z7jEl?9|CQ3r!1wnApu4lLIymdY}{fMtDxd3ZsA1>ZPbpwgOESwQ(^f)ce)(z@Pw*M z;ggzo#65ag^}I{s6swq~<Xy3gTU4Ei*sO#0eJQo(GM2q0%uFwCh=LhxI#%2w8XhjP zk&oOD5Cd1lJ#MmzOe`@cOL@xBYcZ9t?2uX^xXC7I#(%M#upc*g!9zx}na><jB`fH< zU~V%2rnk}pxOvWW#*vlljORS-*+yaxa+%Q#=s*ul&3D|hlc8)qLo0gGSrW+i7!B!2 zGrG@YCbIvaFO6vpDbJ+NlQfAR#$8W~dd_zqwW&|t<31zw&zWwut6#Ti>oOVD*@g3o zX^ra_m%7gMtdY95tg(gZ_(tv>leH37VDXjrd6${#_9)$8B5xQ&?RiHSUu_|f9(mgE z;Woiy9pX;s8m4@#-nh>_;$4$kqBdd@j-<2f6sfCYcmcMF@N+qY;Dl(NQmdQ%y&{h^ z#GUevMvbF~DuHkBXbW!es+;i+ZD%MS>PnEnHblI9xDjCapjU)64xx7pZ(#Wl`GfMo zj*)-cV6qlBx>LH+6QlU$G-oj(osH*ewYwSdK2bGuq%43JP3SFB4b)oLLH&Nt-V$*V zL*W05BBgP!F+I1KvYOFwDmFMe48;(L_<=8#`^#ox&yeoCZJ{li@j?9H3%BbN;eqLH z<7Z4Gb-}%4m)AUyw(joU|K3t{o7b2rQ|q(75w%(!yT60Mh{99mc#@c;S#~-WNh<D< zTIsu4D;br+2acM~G)t}O%7~Ck4>OMlr&dBA{aLCdwRnqUeS8Xi<Fhdg#czZvUhaHv zE@zO~BpZsdB&WJ44|&!r9Qc9LPOXApG{+O=GNRQJf`IRD*GE6bMd5u%^u&BuQp<1l zRQ_2GziilZ|Mo`22r`CoicDB>)xr?R@Jg-^fwT+c1ZtOp5HxbZ^%ednA?cD+?BM@K z?ZFqr;}7q^7ws@0CFc$+k#g~2Gtx34TXZ|<^+ot{5D-WpM)4dBr4J>if6POG4$^U5 z_eBnMVegO+>0olzCWG)$frQ3pfCos3Hgh`YgL))*;x!t3(Gi<*8r&xxD5Ma~@)w!n zc(3P#coQahF&3zT8;?^KUKS;zF*R1<bPJIhJ#!X0kr!T=7qD>|Mxten*FZ~{Ddck; zr14LLLoL(-7Tv%R2oV=vMn0Fr4XNi6mlF-W7aYaXdrCMLHIx#Q;wFZ1br~@hM<E%w z(GFTu7A*7-X>%HAlNeJ&5{a@hhG7yI<b_M&Hz#z4C@~e@@qII7il*dw7?l4wRP!Bg z(lf_aPLL=<mN+NhFf+n{3i79QupkWSuwnmEEy1A=U$Gu!_kY<iJpQo~)N*YQVu1PL zQUAdg-{3mx0v8eZLsD@r{~-_{7$IB4G1M4>x;G&2Ac9{Jf#?8x_6HvbQjKRsk9PDQ z(1jqdCp;ZDewPC;_*X}H_k%llVz+jX3&}k}C|)WtCo0ij;Uq(@$S5$h70U$|_VXNd zWjB{`5iJoFP(&FZDGrBmY}K?KRsmP&#T5bpN!+9*MsX5o(_X+LR^L>KN}&{8QZ!^y z6@j6Lh0+v*@sT$46^CPsaML&`v=~CA7?>g$BH=a4!6z~i8dH@JMMVD+dJ-0O^${mo zEFu&pBN057F%ZmA8EUbTU||dgAry-d8vk@1K}jmh0W6U65aQHTX3>^wav9K&3{~WC z33Ur2R~QgzFZrN5_&6ZJ1&!rmAj>E`6C#bP(+|I<AN=7T-7p^vLLZ*lZTP_+Xs1QC zlOHR%nAL)rNroSwSs?!?4q5bn+*n~9N1KxAI>Ci_!9_1%^dI;zck+ODYc^{P$vu4s zG04fB*W-}kMU$1%6;~pB#0L~SCMDEaG&)2RU==_{!3@VzLMr19zTg%-0WB=_b72J; zUK2MBu|U3}SUr?ZL{UTt;dI33bY+rF53yV*;VAF4N`13aLxcaHl@wqwaguIgol<8u z^#mtU6OoMQ5O0zd1mzlSWmPW04tf(Npi)=AbP=`UO9_DyV?`^Rs1`vqmhTi$aWSHB z=n(o@HGEhrm?%`ffKX$03ZEbh(-xfNa(4YNch5LH*C!AYcrGPpa`k9&8TA$Kprk~~ z9Y89Y@iBo2SazqG4gAuX_QDSk^&s_eFCNzq{IO;!*o^t8MalJl^w@Fi07eMXnfl-k z#aU?0xjj6nr+tbs&lz4I6AfJic`rjs!c>tJdWlToDy_nEbn+bDkw4mi7c6lSi=!&i zkrjkOpIsqBP2(r@8HeI<6lwuUWwlIt1060=qDsPfd4d0nA;d&wqjYYAErumjvQ?k0 z(nAi4CL%GG654qV`VfNHSlD5!J1LeP3RWYu5LjUwsF4!&gJ1e4UsUlFEjmLl3JuW; zeGbt!n>C2}^OVdmm_P;#obU<5P+{^Q7^k^LL`sj4c`g~1Pr-36m$P=wXmLaeJbOW# zA0-|8dQlFtjLfp78rVg!V;}4xrlV;Ur<oviIw3J=j4HUVycvPIqb@M`4Mf@vwxbU$ z7jAy4J)jn4Cabc-c5_vSUE}jVfboT5lMN#R4^HPbVDcT9@*D%?l;t^BoZ*V^qARl0 zHtyL!PI0s-L^+LO7Q*47zakjway~ti5n6ekoizU{yTK5rXrSAwtF>W5H8Uq$sW;dG ztP;g6YxALifj9+ZDcSKRg3+kj3b#v0pW50GC#n!_;~ZjBp#GylaVeD}LVSMXsU3tB zzL0gWzzC<%3=cA-tkakji;hP+T%fsTn#-@l6Pyf^VYmq&MM`1qv9BKjMgYLDVEV9H zM5guVaTFULY{aJVQo9JkFLA0a`fv{)yN}|4r#ZN?9@BS;HoV7sUM=flQdt>R@qov% zE5%ZgM^QtQbQ~*VQ<B#VB%x176QT#v6_!dUHxw1KM6^{wCQO7JWYrb(L=p{Tp=yB@ zikLv5A{BJ;zKklW5@8xlK~7*ROD*wBpCtcIXQ52#bZkwlSDC>Vmt;6uV-U&#o^gUq z*Lk2`=uBa9l3qiTHgUH_lPS)tzKfxAn~}7@a+kImHtWO<!{CLJvKPD38Zt~xQMsNo z1s%hXb*Nw-k*kk(ry!S!niz(fr-`N`YnuFeZ3RM``G67x5`hmJJ8|cKU?d?5tGYw# z5AIOAX9~m`xI0=gx?L)yx%ox2Sz*@)cE2eO>EgTgL7XIOkjP8CGG}gdjK_ASyel>~ zIJP9wKvXs%51oZqPkR_O#8jlE8K%KlGU0SQn_76q7C!~Fe6o{0HHi78S|M{Cl1#yf zWfh~96q@B(Bym@gY!#-_Su5&R`y2leb9F76g;$!v5nJ^x)A?0TvRA1}zxDL2gf&z< z1*{hViZ~(3m^c_E+8f-^R3c;)odp>P(o?=dmd%Q{sC-M){3Kp0C#y`LaFY#Ng-WR$ z8raM>m2|i}#mMG7L$|;PfUpYW!3ekD!)*%0EqEHD2_k9J#AK)#6+&G9oSCF?B>q7` z6ZKHIvLJlITvuEm{Ia@d3>&A((ENfRUy~ngO2+%FR{Gel&3J}c)N${CApV+U!F!x} zJTWo1QY!7zEdr=3#(3j(a5HUSRp(w5QH})08wY11u}U%Q1JusyCUwFzlabSdG$J!S zY)_|N9plptae*W<vo`(I9VGu|tiTDGK+kNaARppwAQB<+A=Vcn)*&*oA0i+v$95Q& zf$CA#Uwy^>5+WnrAQa{xoym6e!fgO(FCnsK4}ya!{n854cM((AiG3n5t=Mg5SP~Jd zHq#KG>ex3{7EH$?Vg?Ja&|vk9ZP=zRt@&Zxc46KIfGby!#;JFW?IV23+OG`}j1AjV zW)L{S5kuW%_~I*HrX#8*WR~{XueL>%Ss`(4Au+h6f{oIvJ=;0r+RY8!vJKtSJ!jCy zYQc@&NH*BaP2Du2oO0IPur1x;P2NuC+t;1l>D^)5UEVnI-0fZ1;|<^QJz~}k-0F?r z(#78N-6AM!y!?&F^8Np^E(_qSectz--w7^9`(5BEQoKFb;KwWAKTUKcLO7T`UTYZP z;cedv?%@l*+#9|}cKjkDj=U3IBDHEFAA#W|Qba9o;&^=EA5P=Q!{9Ma5iAWO5RT(| zisIUF5dVRDx>pp<f}L8UL90lJ{QG>yQF@366pm*YQ{h@EgWElBvK?OITRvzZj^z_^ z*gXE_4Ef`T^EKP}haIt^6qFX%Qig2kWg{5dTcbe?T^5V+hNvVHbI~(aL596N=6*Wk zTu$hBC&#KC=n?VWiN26!4u-b@JYuuGKf%GKu@d787w0FzR27uv$ib^BlbE3u(-BUA zn1o-#=zXf?h0g!#ns(@Un(8i+kSQDMKj`QulNNWPGbxdJyyxdI18`&ohIZ%~hx(qD zavZ`@9g|3+q_h_wL7}z2kb~ap)n0&JF6{}SoClEYw!X(K0Chl$zrqozr?Y<{iH;{i zJkt!;{1KhuGStd9u}n#X;u`+M5xsY{HIoxwcIDlUZmVwX|DHUrF1)o4Wr)r1fOqRo zaXHWcGjhqbDdWoB(>B5m80}M41nTg|AuVqLL}lZK@=4$ak89Kp@Bn|~((d14F7o4+ z@PNUD01U$JD;$xf8DUuwETm%=p%H%zL!=@TIs1EByYkbXb(L1~M}P7Jzg;mm^flM= z5iv6~(;J9o6H!0^Sbwq3fW9Z4#i)HnO680c?}9_#-1Nvv@<(6oNgwOw)&MGB_NVsr z;}u}oi6T2)@eGk{$@ca-=<jIX>S~|rI$q*?&+^|+_=nGDjr-ev|L=g$=wXidxEA-3 zPxyV$_=N8GiN5HR?`f0I`DK6hm(S&yALvjv_@6Ioo{#z~Z~3BM<D@_4kiYt!Z}_us z`wtQNu218z|K*#1`+KJPIzsn5GW<Us^4K$D^;In`etZ>f;rp)C;C}olQv4*6{Mgm{ zy6@q<kL9M%?Z3}x!Ji|V*CV%05zEgI#S*r8lv7RTGe1Ha0%b%KVVx^3eV9#fd%|xy zqW<R(5a|H_3?wM-n>d0A6)t4h(BVUf5ea6ywQAKZSgdYE>(|laN01>!jwD&q<Vln% zRjy=NQr|m$!a(|?=}+QKoH=#w<k{2bPoN1K9B5ErXwe2il`du4)ag^GQKe4J$<8Xf zTiL|1qq-DcwruUD!V@PjVzzH$6>jZH)m^l15YZXisum|ZblJ2il-De-M0bC8y2}>L z@6B{*?GEH-tSj4yjTf?m+}1JxiWYBG+}P6dXV9TVk6!sQ=FFOxRj+2P`Y2J@Nn6jR zUEB6;+!3#0)yg$@!m<G1eM5`Zw>Y$B0Z=AhIUVtDzA2|e&emYsgx{WLGi%WBH|+z# zM^DKA4tzG>!?z10tGu8%<k$zAPfl?AH^Dite~Y#kfWh7dG6<Sx4ibwpw8;C<EXve+ zD?j3(NpLZRp2II8vd|KTLWSUY4lahs@=dtB{xT0d$(D;R9kou(Ccpa_EUP)L#v75c z>k#_y8v+kv@4ChAYY{&15Tb0v-zKW)qKrBt?MW!3loCqQWcsKko08OWOV(aHYA7zl z6mv{6bK5Pe%5cLg8olrWD;s9Q0w6E2Km_2e;{Fnco8rD1C>;sk>?Xrz{1cAAI<;XZ zu^z(%fVln$a`R1u+-asbzrJE~LxRw`ls`GyDU3hu+L4D%;ta(J&u^M3^uITw!H%&1 zM#YM6RI%m~kh@(~{RSOmi~)~Bg5=@PF@jjV@F956v9qAUUbIg!65m9|KWB;4OSm_| z^DP}zsTGG!u)>4X&~eF)MxX%;3@^h-2VzxLTceSc&2Hq0*1g{{yNEN6rWAN!f(!1b zO4Mj7b76*gI?5=bjB0pdiYvDGp)&)-4Y^PE0#_UAWTmXobnr5UtGP-Zajvbb8b}^! z=(=jTw+w~(<aFlZ>MLm_g;}t1qYJtncbEZL9B4d74po$mri__EYo@F}b}UuYWt}`7 zG@C+sE?Jzz07$1XtQWN^WdKrqP~K;k1GHs`Or93KnIYouFS6{_ip6B@1RG@kcVfPi z<ebBLD>|&3J*;GTCF~|0zS;S?Z|=ZFoE@@nTzjCDtA_eNlKI<;y27I2wBIE$(kNhq zTX+3+l@Pu%wTo+?*vr^#*L`>1)w~K#Bx&=sO$QI-883Ig;bxdz<FuLH3X@)_FPo*G z6GWaV1XQpR2Lj9UxZsIbMIMdG+5AHl%}XrH7nRV_oZwNr&{Jjo)#!obmrpoIq4``_ zcx;X^sseyKJ|~g6z$1U2`UU|V;;g@L?I6KRjC>%-7{{O^PT;{8xC*2kcvvqXhg-<@ z3Sv63d=G;Qsm^?$fgM2Y1#EF4jGyK+AY|pnUz@oI>tOdoApTHx9>G%o?~JG=+%*79 zM`U6XofwpirHM9sa$fPmmz?222Rp;b27zceKKqEUSg(2+{_cc5uxJk&g5eK4+R?0& zS!!n@6o&>2G$&su5CAcQBUkiAo~1D(hc{t|^~R-*x5!FR`4e2HWL3w*@Tp#Z*<7&> z7?A`@ia*e3TSM-~wm9YIPCc7b&m^P4J^_+Hg7l*p*(OS{tua~KniKlcHb{B(EQE?m z-+w@KDs<V=fwkFTlYAINWF~V;L+nTqpZHAIMC@U*fo3(WY0W4Gk2Z@cOq{5*xHNW; zAqWb~sT5Q!Fush81+<>C*k_#R;cau0bO-Z<!wtYSBa~+GlvsBEiM)2S!*X`P%Oxcu zw`Rd*XbWjpHl`Jwc4!Tc!m*T|I%&XRG9;7bS?EJ9IG>y`qflHCm7K(by%)}@837%q zMEB^xN`?_=vhp5!7_+}!>1dD0f|(3|DY8|*NSn6VA;6S*RHTxInf-9)HJ$2|BogJR zQ>CizvZ*BmX=6{030znPs-iz}<*P1bkShzgPMGC!Y{=4-C`~9Jky)*3#(QA}MXABP z)H5!BTa(B5X;01>RHK<P%%DDcy7SqGUVu7`*6R0{Q`uBfNgL`yHhQE2La!l<Y85Xz z`qTUzu4=(r4rRqA5XgzeQvCd!hu{j!x85mcRihf`e8EEhTB<ZI=&<Lw;&Q687>8K5 zDdy^udR*j|1}0V_BJHaBT!+PmC`*KHb*;OltBNUb$Pg*AkcJHKA`4jH?U|^+E6A6D zal7CpEzFt$-e-*s8N=|?c+cyYW-)`iCmS4l(wPtq>X#Wd%rAF&x!y}650(nS95Woe zEk=QNrSs8MvY^4;!m^XQg%M2Ag0(XJHp7h!ff;+bJ1B1GcNnD9sD359V9xOuz#(o1 zvJjk>@6Ok=b2{&V+h*VW{wKxZ9Z`w#2W0vRG#fpBZ2{3zrlR&Rxl^XHNS4~v>t?wj z)0C!`z5M0XWLHd9;Skm&WoCkSsIm_+U^mdLlQ-l4BxQUn&zs4dki?i2B6P+OpB+*+ zJP+3?cV0?t>pad8AG(BVcF4Fk#At}9*>=TsQk5+|<tsZE%wLWwH8=ffP%lNypKi18 zWZaX)z&O-t<`-@TnB^!}`qHyTYNi#o>MSRby13?bujBSRje%Nxs_qIpaO&%7CZ^R@ zrSvgr{cIrGI!nl|DwmN$ZERzE)Y;~Cw^to&XG2@ut&_I5o!V)0ryI=MR(HGI?bK$E zTi&lL_q&~_>jT(Z-&1AxzWx1gi-CLI120&;0lqtHOYGnaH)6l3&A6yQZZhy$c2poe z8HPa|DrV~td`{=>coSUYQZhKhFNSWDr@VIm4u5WNaPpOmDy71}iI$*6t*weP#2^=c z3UzG0kYPmyIsE!iG!oryfsb72N?mTkrmb>{;T!5xpBT%j`jum|`M*rrsHF1z^Pmt0 zPBFLasV}p>m!~l*;$*c;L7qBeE?w@SDLK^_mT*toUGLZhwiI*Y@*J`6bnp>S;GuO8 zJVU2siTTd{;v*Ofb@tChLVW(TQyuovh;xeEUqcr|AM!BgAl~{DbmD?p2G4bv(-~oW zHQ$~;ajGow84-X!?jnKEXTb2Yy;`^koi!6lD|VSZwSLdfKDozIi^-6q;G-3TFz7sP zUJzB2K6mUZ_cXJ+_1?>ba_@)VOnvA7`DM&wuR(zdEQ+e2sUju6OO-2EvGNbAdc!FD z`Nmmq^4O@NVMd+f26E8~d1(f6!4G}87xF+QP-zjh`x8D9l*r<m!sx%^*b7mS6<D$w z1_KqH!VHtLKg1ypZd$-N!Id-WmUrqF&icRPsFy@pj%<MwJ?ju|h(BscKtV|;NZBm| zgp@?9C`q9cuox6_Il-`)6w-?p>bs_p%RVSPiMkWNEs;7ZyuxiFzrQOT12HG7P@%UN zmr&soH!G1EIvf7#9G8(Cd?}WsDVe+|9FXypm_r)v_^P5YpR2eV)teKi5r+fvy!-)+ z(RsuEa29Pa4yl2-?LZZ~;J{t~L6wgqj3y+*M*$JB0}H<4EjO#EJS&;z&@H$5lM?X_ zm_eL=`k0V8Ck7)!H~B5}Ta>{$nz$OUsWFu0J0bSNrx-#SZCIc7!5Y%Bm#k}|>x)8U zw6dn-zNf>&B*8mpj7HV4y0g2KtC5!tB95>b9=wT}d>9V6$Rg!oo<edUtg{OS)W&Ym zL{qsV;qW-$sF@h!ilQ+TL2MtixuyAdz!0*Z@;Q}m7?%o?oF5Dx1YwinsXym=GfjM% z_t8fG;14otmOP3jt>TmO7%8*5#7E4=u@l1VDLlvsA!GQ)PXeY9sV9HZL~$aU0>m2% z1do{cnFkp<<S`Ho@s4Q!06X1z!esnOkC;Mfv<>hZN~7F3ExZjX(hCPULEsB48Pgxt zf{Rv3B~vjgtOK#)z#{$vru1q<U(ykGx|0M`J1^9k6{;5BGmNb)3%Ga-Q30fG8YJZ4 zByC8@KY^2VN-vv1hH`00*$NvtQlMVsByG`-a%3pBE1JLLjv3+>@?bnWk;*fI#r^3g z&Uul|L5JHaKy>_+1SzD)S);cIs64wA!7vsA*|8@&Mxgvjp*+ggutM3aO;JnA+u)}E zyS%VTh{!UdLK3eRDaG=@O3f0*A(R$Nv7zNKGkF9-)w-mHvP^(F6z1edk+F-98JD=c z5e-T|wiG2ubeo|68Zoxpr4r&o_TYw!?8Vwjh!jx>;!qB$0S<7|Gcya$%!EZ%0m*Q( z6K;?XA>2<4Nt(V0NK%?BH>0Bd$hjl($=6KA*tE^dfJO?vP@kYi*0{wyBPkZaoUr)L zds>$c1s6GyI8j^_waCXqK^Djv8TA1`7LpL!IxvH3m93B{-r5Th-Ml7rsj>hU_%J%- zP*L6T!V)T)QprihXg>fOhMi#?GlU*sF|16vAhKwlzc7mcS||Al6@*x;0Fsd5k{=RP zA+HQ0pGu3aA{qd+n(ly}vJlM!ElrNA8S&wjr*h2*jlv1VP^u_OKpj-wz)dcBi}OMc z4zn$G2qAs{LWZzG)bPq5Zs4u~Q;R*(vBo(s>=-Y7in+INun)t={P>Cs8wOtT6ctky z^D?6@>M?NX2Dl^+H(k|-Sg&C~232FbiC`~<G9Avj(qXtTGa4He+eyy3uWwm0WPqV) z@YQyx8e+YaG9{1@gRFFNheUNFXL+v`LlR&~vPZcv9owGm89MozFZi)OxHGOkh0SGb zuI?jL%b-nqy;nrD3g9V|s}MB#0hyzlkAQU>o+GsUaZtE=w1bK>joUMxG*YE-Qik%g z$<UdGZBA{v*oN?s&l^~VqAZVPh?1d@kQLd2jkBrZ(|5(bKgHLkuuzwcS%KBpV6z=| zI8Imp%dKbPSf7v|T)GYPG)f3vS(c60X3{j7g$hAUT6)#cg@HLOQ8u2uE_5Kf*7%AK zj7F6u+NEn*ru_+f{aQkGTCpwL>l#|F?OLN{Dx@{rpnzGo#Za=1Te^j})G?~G%|5TK zTZvd&zBS6Z{ae9hBDBq0k=xtB-7@J?qI^r-qYT_n(^yHNI1Z8Au7KFKKv|5*xHY2= zm#dKSa|#sg$-9*@!<{?CbzFsjTh(<&$c3iQl?bS9h!2shH0vbGAdIO63Z7xHJ!3`7 zh+PC?O_~!K2CLfEn7K)7S6MsVkxSjy9SFaT-tc?fCpt%*NYiopM4$`ZreM*jNI=2= zatJ|O4ds=H_?(P9<q+Yu474O&&A?mdRXXU6-ms-!@w48?=#C;0JWSOQ%KNzMfDy&x zEW_Nf$Fq;|*h`IKvFo@I%2ST}kd6rUU-7Vt9GRd}QanuxHps~l0nt2;D<Py=FxcxG zplJ?&f{X^ik^U_R71kv1U>BsZA3E#3`52G%ZQ#W)2yqY$7hY2SsSgz~JP{F)#Ve8- zR;l=~i{qQz?Eqj7K4R4<-1!~1`fXj-#oy{R)ZF9`xBy4~D?#_eKmm-wQbJ?<+X{|x z7yVPDNMXEHvRdMR5U%Mkb>WrB(iU6!lr}`m1C1=b>5quQL21#KH__8*S-%wj3`IF^ zHA7nt4+Jn7%fvS6&h8wW0rU?stiZf17op*iPobm%Op8hBqMucW_sym8>EuP#ltr4r zMJ-KknL{?Y<>+8Qgp|QVrX&L_mqj_iw8)u9x{R&8VsXo2)tz20wmbcOiluoZ_wy<+ zG@V@r(K6J`B1KCzB&o=1!k&VhILwPVWZ({AN1u_UV5P;~l9@yL4_o999+i_eiy=fb z4mzX`>Cu|3TIUzVBb7OjM)Y8Hh80OHGVA%o^Am`gxgbD!k*_<&GF&O-@fbH+l*SlY zv5|}qSw(40WdN%|jLsp^ax~q-XdJ66Atf5)!Ke6;=e#H=MFGU98L1}!_QU9qxQeQq zM#R~uuwrC>Hf46)`)y{ud*<)8Mmkf{jQk63WTcV=$8HeE<%w3Tgr~qtkUM5a10pbZ z3~5mcT3`C2(ey{bS(_TFC4mU%UmZx7Y7F>059lev5o%V}T$DO;nm<uz#+*}Cma+QD zNQDd=bJ|bF91o~Ttg=hVhvb@Hloql6>WKi}hSJ6K!3+B0ps;vn@nKVY3L)*#5WPql zwArPQ8joFeyZ?|7kYO+!>WX6yYFZoW#NA?}c4jZ0jitmzr=%7?jLHC=%5JF21j*^E zJ}2HfOzi;Vc&Q&2tK$x_o&fqOZRiWmBS7EEEFSGjLqsGZ&1GBvf@{Mp4o*>_?C7Gs zY-2-tt8uYLB<ZPw2ow&MEx`I1@fc3f{GPSas8c)a;wY)`NfB69l~pFi9LjFfzCq|v z40-Hq1-&Pb5$&A856rwJ#o0=1nXt(%i~`Y4^kz<}0BYI3G}<0qX1;BeL+Ykj6jjBK z0rgEb0nSD$5#mfU<J_O3$&XhY9OeWxZt-2Q?jB$=?X~!+w1{c4l+|DD&X1z30{?Ms z;wHNBluK#Y*wW1cF;5NG?%?s+6gkBd(#-dyuo|4lWa&);CCM`j9waZ1_*|QRa!KF- z*3M>W_DPyL(uO*wabK9D&@S^@it;u2qD%2RsEF+mx3m)f7u=#oai~-Ar{GW(Qc(~E zpAm(e?+F^QVy)AoGZy`)(}Gc%hKTyKade?><P47N_DTrC?8h-3?!@OT4;&xtboMB4 ziE|SK$vS-o8Rk2rMirw$f5%)|slf3VPRbXA{L%w463OFP<dne)Q&G_h9FXo5zd#Z< zIic{Ota|(thTfK&jgD`}s|p%AW1H%I9tIj3sp=~wZO^?T{3C>Q3K36qDqHlwwQWaF z@!U=lNsW^XbZT<E!D}r*_CglC;8aYlR8-wm?!t~&)h7@ir!Gn|Br}HT)b3<Gue~zz zXnj^@_&<<&%kM@W7gKoq3LEoIR{cr_V$)Xkl2KLv-f{>$R$1Lfzi_V$vlBo`_?;QA zI8h5@4VHWmn`gza-3l>5I(qV5vWJ%k@XA$W*hvI8E&IYBldkhQ5eAX!59H7)?!Y2Z zeR%O8SF;CSnHMRmoeD(9cT8JbEbDiIIB~i^I7q)-gZ)^5CE0=X@jnY#*Rl+X-K^dH zd(8!1rV#7YW3;ik#>P)Qo|H6Jy9~=!e8e!w#ILj6J#^*`H@H`Hxo=y#Z}hugxV#72 zjl|Hb)d}q#+_w+?<I;D&<@eLa`+u((ti|6{Q{8)){iLG(y0!b;-?!8+e&i2|*a!Zj z5`MZh{p8oT<Bxvo*NNX}er0n0xV8Q2cem;P?|$%qh~>wAWYT`OCI0a5w(nPydasJf z@VUqr*v+c5-O%=lyZrR8nCmD1ATob|03dK6!GZ=4B21`oA;X3aA3}^MQDB1u6)#qt zsBt65jvhaP3@LIX$&w1$p=5U}n>cnRUpD-ftsO{q-^3Mk7cE=5f$(Hz%hnB^xS-j- z^&IFfn>K;zj2cBs6P?h4=%Pu5sdX#Yu3o=-%yw(ls#{}kMeC<_E!(zk-@=V6cP`z! zcJJcND_7q;eZt!M3+xXp;lhSZUM!Hf!QsY^A485DIi*ULE+v12N0sKsbkLd-q}uH= z0Cdg1$<)TqbWp5GOEdEY4}i^V(U=AQ)z%Xpw9f^<MH9yvGx6fak24fY_7*HwX!Sym zE`2)n>UjD31uPgj_wFJuS`5$FJNfeF&wHf2vZZlxNo}G|O7!UK`9L{~LyZ%F`-SX; z3nY(k1j*EmQUlTk0B{Dn!whJiWz&p-N<}lFK<+fdjV}agX3TKtff%BQ5GhyIS!r39 zqKYfBs3LZMu_f4GBhpwNco-c}qmDcBc$j*YVP?}#O+6J9YA!)lp+Hv!)l4=n0oPhn zOafR?QCM-t4m96z7}RU%Fk>MAnpMTlPBdZY8E68f7Md{)iYe2FJ<?exaV0Y69EvUS z*{7d>_Vc24f!SH;VT)O$n4ydRGTLZDKe7kel}8DuSu-u6)Q(QNsR@9Z>4*c(lRACV zPCDoq<7rX0Aw`=`JGB}hG^x7z<%R_XH6f}!p|c^Xr0HZKZ%83XW;=5_nyj*6jb&n4 zdjcA*wA0!pXpGw}n=ME;il?o&-=YU8X^pYwUY6X@I?z?RZV2a?L9K=rYTOLN8BtNf z6CqFI3dGHtOIEdHy;cRx&6Ay)He8z*N?4j~1IdXjxD!u|XLHX{o3X|lTf3Hw6ocFl zw+&<zvdJeGCN5;@aD&^LtEIc7F-f6QFNOx@`{XxH9(ANZ@t&5>H_)6WCT#&j%#*sl z@SE$H(WL4Q(b3$tX0Yo2GSf^n(1a;a&c~u0cCvV$xUt!1|JkuxAB!C}q75k8w%l`n zq%vgeoZ1XC-wYKL!R!KnVN+zTCe*m%MC0T)DE(ZNsHzRbZ_cl|gN)Il0U!@ntL=^2 ztVx3g4>$4-y(U%R(49Ju7VC+&>#tj<c0X*ZKJmyF)t<ZV2-z(eQPJpj)!^xvdYY!b zv24tLqIRQst9X}YI6_5UmhXP*&g>J>$AZd^ZQ3ASA#cjlb`@t=XYQa&>=?|MoV&wc z9@)>rUcdd<^#!BH*v7x?$R+nLfOG4eaX5zz+_(fx$Up}90tbx)B9K21Twu%|qPc%X zPfTW7p!yVu8wNH1!)gsv5L1>k!qPO%SP~N;3k}0MjNLDWGHi?NXxG9;y)AAx+#$sX zc$`cXgm?u3;t<)fLX7|?9g<VxRu;rB9zt;|^Mm0Gt9ZW}@-K>Xy4`rR=tW2QFn934 zPzVd7nIU~KjU{;@w5;ex*I|)RYTVKPax}*~_9%>a+#??$GsQN(F_0RI<Ba+Uq8xV7 zkcuRa9vA7zN0Nk%f}AAB@;9hLLb5wt%p@m+l#=y4v6G@4Wkdc*$x}{?kfc0L9arhf zuQc+NvJ|BxQE5v*sdAQ)L8LBwNs?H;gffg1NjjM5%VUzql($?ai*kuf!))@I(wqn| zO|q1zgi<5_tGeDayXnVf<%x>S9OrbL>CLXR@|@~?)F*)iOE4YfC`XitX^ghcdv-;c z<lJX;%!yCLBx*7L9BA)^#uEI9BR{2b%6^D~lKdp}CfW4fObnvX>-{G_^DJKj2kOz6 z)RLbf#b0)=CC87FB$_Bar`>cC6;qi;Ccu-KKoIwzolq?(+~m+^a<Y@}E$OEvJV{Si zYE+QubEHb0i$9Ork#ss$nszhTXoAHup(M{G=wetm5C;@(%=94M%No^Gqou{IW<xCF zTRJwUkRoj~s&Yk0NSA8Yw={LG65*v@kEt>N_3V33S!hpDRnrPBWmSWfnCM8?6Tw}G z8K6r4q0<l&K6~~xvj$1(T|29mylPft;^|gsXZcrT7%5kaEe-j$8n_A-B|kior&!@d zkefxet6|05^nhC0-wvd%p6x7Xfr}8R8h4Z`<BeG_BM;hAC4scMnNAGa)`c3xShpP^ zoNx<(%J#OR$qg-Mhilj3j+Y>OO>ZadR?jgh(R+j?U(MRVxvsKACaX0FMaRXPifV{9 z2E&_M6Vjn<ve&4>HSbc<n_!hD7?O5l-vN;!p|3^HB?3BN;<}Mo{bK1Lq7(0d7T65@ zOb}_jD{6%0T3!Z^)WPgUZi^R5K)l7(Q#p=^5&4T?g2ZdbHCE?>VJuP^r+2+WR%A8* z(Ibv#lyS)l24~rfd|peM6q8bhu$1}O<Zv0Y%O5SWmC1?Z@zPk#cl@%N+pLurmwB9L zPOg&OtVTB5InN>?bDWnsXXA2N&sxN@pbNbbIQRLMe+F)v4ZTA`J37)1;d7!<x#-{4 zS<)?pw5B_K5JXq{l$S1Tpgr9`PMbQ_ln(VIM;+Qmr+Rm&j&-L&&1ylqTC<s^weDuk z>qxKq)^E&pW=s8R)%p6^g|@Y@-AL@d!dlq_Y-gmTZS7z;yNb`&>#nUWw`6<U&CJgB z47WX3V~0Cz;7+%gu}$t6np>{XX1B@KP46X-``uT>^8QZR<!;|QWcChti`}jN@A}0% zs^}*8#0JiA_U8NGuuHg8=lyVRIsD?uHMqp#$nUjfamxV>sK!s0@sj^G;vGjD#gDph zlq>7xFxM={S8leJ8`a`7Z<Ne;u2+@YypkpDx0aU-aG&#>+CN4*zQK7hKn8u^LkGFP zMLsg7V_fNtdkxl`zMLvYz1$z4UC50-T9VnZ>oM0le`Hc6wHMs!tqZ%@r%v{&n;mWf zg?qB>MikfbJ;FezyR>k=(w7H*M+9VX;>TNa!bi*SDAjr6X|(tXRvx&6hkV+`ZbPdp zhUA$q)Z$M(`i;w7oSgT#-9MlAv!C8h1av8OV^4D`({J?%_k7uhOnKY?n`ib;!YuHk z`gq;*N%9{(dhyRwdLcLepPNU1GkK49-=7_K(XY|vx1ZVLQ-4Lu_vr7v|3kI|4Ep9j z=k&v$qVW%u`Rhkc@6tMd7pETT?oXxli;n%P-(R?}9fmka06JCs?H_f(-#?X~0p1PU z6_ffo;4^_=0xDqtwVC`);AEiR1|AgxT3|n6pqe3`2R=s6nIJ9YUkDD;2#Q$)rXXRU zU<_sw2(n;aEFeB<APuHW2bxDhah<9NQDX!l4|+uf-k@IO;60U~5rV}GzC^wN4{7`a zyhxx=#0oX3m=kh^4JKi=xZuB?9RP9R1EK^dg@`=#$`HNRMy$*KMz9P9l_5+Z;TPV; z60Xw@&f!)-Ax!*=l_-g)3?V|mLzv}D?ZHQ^WK<T`MyQ02LM26i?BPdvp&c?+7+M|d zO`>D;;Y%cpPfbXayxl<L2Ub{!cX^7z^o)HO#ZL4@TNy<G7LHLUk!|qA6>g$H)S)HP z1s<vs4CdlUbfQW8AweL{gn&wGJkO-uM3w}Fy}Va3y_Rkuj%w7CJbXg|dKKQ#M>4|7 z(govY;hyU8qWEEA-i4mtg`;5%V@a$bhoFzwBvj(ShD3p)_F$0H3`_Djg>PI1YJ3B_ zTt-Gw4KD8CE|z0l_~JP=;W`SV51L0Yl42lw4RGK_J0K4KZUo^`P$7Z<49@HX`_M|K z=u12;&d&_Z-WcQ@R$@ZB#X@=$Fgj#<KxBD*qEDcYIDkpe&_p3RPKd?hn0O=!;mlUK z)}};HQ=|lcv<ydr<4k_n3c6&Az+^Y+Ayn2)O_GO19@d0-NfFY9LG_K&ghtmCqNZ#P z;@||B7zmg&g;&u;F<n=fVdX-!<W#OjRZdew)@4VuBT2j?PEw==g%yyY0|XHkGcW@( z@XeAO5R`$2)GVg@^d*T%C0@G7IsTt`kYQz-#9tB<R|?HwIs|X=*C2-FoD5SDd1gf1 zC1&cSG+kwDN(5+vgyt|q%xK03Nd#)rW@8{EX6B{;X4V*A{w74&=5eOZYvN^WK9fu; zr+;W=bS_eG3TL1YXN%1ybxP+Mx)XQS;5h2vbt++YMwoGeCp&p(wWX&cS*LJ1Co(~2 zdji>XP7Gbr=NgG8dB%=;KG?{qV}5Q#J0{dXL?9f3WoB%lfbQ94@~3pf=P{utgZ_+t zh6Hn|3yIMa=G|tLQRql8=Tt_hFU_Zb_M9Yg6>T7n;*iEgWr>Tb3N*+|f<_KNRu3c^ zsD2b+O~r>((CCLM#CyV~f6f?y>JX4RM8?&|P|?PK2n{zVju0WvQG^xkRfW(H4Qdcy zO+f{hl!j0lNRimajxtGZ`~+68Cz1x~em-dbIT2}+WnUtxX?Ipenr_6Z=+tnyOIV5q z6Tw4BuEvQK&S<>HsTe~`%oA0#gfxE2Hd2K(7N9(YP%%Z9L4D(#uIX|-U7NaT>-Ao7 zj$zti>Pc9rLriH_5X4Xdhn^}9YIIFZjUrd7iX>jwhrAb=P>-gR5tsmEgiHuQKFO$l z8k=$|bc|>(ZRdyD+ln%2Zt)b-U`T3RsZ2Z$_V`znER>`|j=GrMcd^7XX3nk-gGrub z`6N#532SgUXt9!%{!pF&fhqu|EANzQl9po8^b6+cmr_Uw6OqP4g&1os(J(pBhv3%a zfGcFxlQ4zPQH;jC;tH{{Yr9@j28JsC#M0|}J|#qe%1ot6L5z`yilj>rMO?ZBT$<39 zaw{@=if@R6zuXk04$fz+PdYqTGh(bbYU<ogEX8J-#p<2t<!pUwEKC3%K|I9+EfmX4 zrl20CVxADwB7-&@(O4Z2t$0xO<jVu;O=LchVruBn5=4l)<gx0~gi`1Xe(XaWXyo8$ zL=>Vy;OA-r8S$*-hYD$PzA2hrtk_0Qy=sIs`fa0-Z9<yuEG28&0`B0>P2P&=-qKl| zGA?Z_?&OM1;g;j!%2J8uXL4HZjyP`FLN1^gshke2=YDRDU@k9e?kk}!gQ9Ngj!5Vl z?&vaF-wtl<%5I3Pt|hjvD<v-f>{jmXf(-3uuI*x)<T9@A67PBRt{wjFDse7-GH>(B z&${+(FCs6gmG0zLul0Jz^L}CUlG5v%=<tHCw-_($Zttt%uHSxd`XYz;CL#HbQt+N{ z(aLY*VsG~DMf>WS^5!o3?ys`Y?+x0oC{1sB#%}@NN&osUTqJNO;cw>>umcmW#76M{ zdg}GXt0oSx{$eo7tgr6^aIw9w*f#J8f793H-UeS{2g9p&cJK0DFbfw-2}AD*Lz@7@ z?+xQ{og6R=PB14eaC)wA5FdsPk1r2%TMdVBoo=k5(Cr8haR?T1CYi4Vi?B(6ib4Lz zXQGA@GjaVo@wuh&=>l>8LtuzO>crh5#LdF-&|a|xW-%mHF!ipnWj$2Q^eB&_YTKbk zPs&7;F2udW3L@7>uP&4#*VK<PZW$x+8OxgwtMDEJ*)<hYK;p(XM5a)I#;KNxMN&%D zb}5wnR3MhAN*WX`e(6CGZyhJ#9Y4|$gXh4lioCExA=b=N&Lvz~N|=)DsZ>Z6Tg4Pc zAgO@LRyBxjG)SokPR9}no@SxtN-_~svcf^}4|nmM!pbPNaZgGOr8o_&e#kLeNkR=I zSH2-@p-^1<%Tt_&=ZM$6P>srBtSs*zEj!W{>v1=0Q{up~QVfg<#S=%;hD?nRnTScw z1mcL<YQUI=!vu)`Yv{{Y*-JnUU+P{n7H4zCrE$&<96|DA;1o1}6!TJ6=*y;yO%+j( zanx_9vagulbqy+IcnX-f#vBW%KD!@3FH#;eFed+PQ9#a~rsC2HkuiyiI2UF@n1)h5 z7M4g&s>nkJ8PCovRDbko^LDfyf3(Y4vKj+)Bwg)ngvw+l=3++e)1oUIPG&`=WNy+7 z1cgunDdqt+1y3WXPlq2+E0Qg9C+gyjf4wbo(q&-}k#8z?0e|%@hjq?v^Cg$H5^IZJ zQy*X(l0Of1Wn1>LJoY|E_Ti1SNE7vEiwI^TpJw;b+jJ&bOEGF!3<Se4Td+1Cjm(i! zc5KV`x2U%N?%nnt-AFom?`dm=F_Xk$v#pL0(Ob1G+q%aTi<NYHF?CObZz3mht1fNV z_GgXu<N>JmMKKzZ#~{PRQ$VthW>>R@NPb|qF&c?<7Y=Fi$Bv<c96E$Sm1{#J)STS6 zR^$tQTT~IEx1Id<>IF9*-3WLTw`XGphDBjDCj@Q%MtXNgH7>-uy!S~gNI^&{K9i!C zN`y`j4Tw7hg%8BhnuLTSgkc5Ie)mXd|MYh+pG7QqgY!0Vum>U|v><ccMg6NnwJ50I zY(lZ8d;IZeqUmKAxqsp4m>~J{ylpWFxlcT~kB_3M0%TYTjXk#Atl%snM~dK<?1c<w zelTYLe<uW}h(klesDX_pW)a1+PRPBmbci$Jl_&H~$On}dxjOp<kxOEJ5DlOc1)%3B z&O*7+^hY6D_YrDvcheA!lV5lj0FIOQWPDY;1jR+ZvTaPrlsfE*8^wdDVy?_baA*%y z5UOn`PAG!9Pqd=aL~E4PVkxUjDp%AjdP(50$~{Mfs3*=_w>21JM8po`#r<7sdHB zD<{j#5#`6xy40vE#2FdQsetRx&{oa_#pgtiQQ*ueJH@FRJ5<nwOj*dJ=oEh(`)NE$ zJ5(XkTotR(gs}5Ok+66Rm&K+^x&%{t{BfpYn67C%_*byIaM<)VZX-W_sS*j16fSE2 zQg}v%2rfGyWq{E2s@NASJ}g5)!zrfa6gD%c&}=J1*ImDt;QR+iuFGl+gNcWR#b2XN zVSEa)v@zk05@F6!24YYyk8b=JO1QYEe5G;|$U`&Zzn~APVEpH3Ycej5(?idgEUe&; zvuZGr$)BRANPSAo3K3!aL!(Mdyq7rajX`O>Obv8o960AC_#JUJ5*znM(B2T@)^j~c zOrb`7p^%~%Y!D4)xUPwS437D{3yim{g>?AWxWh0Q(VxD|q}bo$bIz9Y#1sZj*F1zs zj>&>(PR|U@uTlkvtcu>WWvYx(AfhutT(!)j%4}HuX=Hhe2cj*S3(`_J=3prQucF3I zG!LxQ$KaF7oOs5%ht;;LxVtyhmc*sYHq25qaxyvzUo*?jlH<Q)rwjvaI*K<p=Xhf{ z&Oje5eb^#UoMdfije!I{(hk114us*SD1;km$a@X%|H{E4$Y`oO`2d7GX5HYSW0vh( zwrt|kLDR+#fV+VJC|0z15db@f6vai;<}O;agbKS+)M(5iI)vZQH7m(2Tf2zSO3tiV zQQ%FC7ttAmS23N!X4!P^1n`X}MUc$CiMt3=TSbxp;BiA~5TU|v5XEJS*6f>1cpIN4 zz1Z+3REj+z0<enF9Z`y7A5z`ev7|hYKwCD8Y7}r_!Gi&0yR~Z7t;4tfqV;q97;<FE zlPOoWd>M0Q&6_!Qwyf`+K4FplmG(y%b!yeCS+{om8g^`p4Gz$@U0Zf;-Me}B_Wc`p zaN(-i6=!#AVcX$^;dTA`EuA=*R7J8=+0D4};vK{44SSZXMR|U4lD$q<p-hWtD<ZAQ z4Z6E#5UXlS2XZKMh-?9jf2c5>?AQ@WCW(p?%sP|`%ErFxjH_rtphPOEB?^66%Pf$J z66mkNditrN?FbYM9kaH}rWubQN>I7;#=6R->_W6|I=bL8YdvUg;%+Tt+Is7vuAH(9 zB>)<V3a|dELux4dlv|E4!w|a#7FHPZ49hIF+>*;KIRi~J(oBQ@lFTyAJaebp8YsXv zG~Ij?&N$_q)3xl76X(e}i$lsjtD1u*rgTPRCmo6cG_tzF_A-(py*k8+yhfohCLKXz zqG+ld)2dFshuj%PENGxZNF4QggeWI?)G~5Em#P}(rV2@P^{c47DinYrGXfIPumqi` zrFLknNl@r4(x@&EeKP4#kiIjD&~N;DGTNj%dem8V+?lk$X^kwj(gLRgz@U=gNk^t6 z!P_(@?$j&MRE`*|NY-+5O-e6ux-yndjHFC#vBta{nBam9CK$}oAT#Z>ejR>zPTSb5 z4L67_z8K?-HO|PmJM(;4RcMfD2CQ_UVFnpyibN-6X2zBOC!3R1HYvP_PDUnWl;nY? z8I<K}G@6v7G6-j8W<E-0A0uj}(E0%5FQ<$QLYX{vvPn6ciKvn_uynXFn&iBqxw#qj ztjortZ$xJ1D|8!5`Ky}XQ5%^e*P=RJ@tVOo<ru#<8poZ8?)$*DRLYy~X1LAuW@a90 z$mpXp%35fMG)xKQmQm_Rab$k(*65)#PdO}hz80Dzd>7UDUn;E>_~6)OpPlx85*D+x zjdkB0HZ>*Y9r)mdA3ilZliQfkyuYRP(2LG(EvHI9M(y0`VI#CSxU>%H(!rWP_Itq2 z%{zH0vENP5M`z5F(C`V}se0C+%D&F<hi^UL+V$W6pa0HoUwBN!6X5V{Be4cFV1Nl! z-~u6LJUlTFI8oDGbBe>OuBZ=!%XuEeI-;u#vZi%ax>Em0SV9y2?=cMf;0ozvK#C!d zg)x-j42jdR<IxZ{@CaPSyau=f;Sh-8`CJf<g1^MT&V)%+V(d`p7!?u`io8+N3!_*? zD+<to*1O^sx!6SphVXSu6yq4Z)Wm)~(TiyW%oNuILp8n;j%CVX9O+m`JHp9`BP8P< z`KTE)qVbMibYYtUSx7_Hus9w&<RTf_$S55qF(O1_A1PVM$NVvXj*KE3E2c?L7IKaZ z)EBxwDVz=RhJL~srSeM2n><d^lCj()CUe*SN+7CfVs5nMF1;8^1<oxRLlj=6b~nlg z3MMYB43aqJCYZS?1cQLl*J^+%%-|7|g<#a9EV(&GS~iTAG8|+l!&%NM`ci@S8Q1WF z@+^&ULmNm@=6c)-7^__FX<$K7G%->YyQM~*KipkA=Q+Svb`zmu{H8f$=)2k!fT0m3 zB03#*%u0#l8>J&<u9Ty$ieQvq(27n|aK({IWt2W3#Z_}aYO3a-)FODos8hsIB2uMG zIoRCEMPW)6ke13&7#(R_*a1>4QUpF75sSW{gVB`g%Tzo)Cb^7px${|sE)ao9-r`5E zvH@kJ8dc9!J<5@cmUJhCnkiZtk`9>vzLa0lX(@z^8q=aSC090W3Qoa#Rp4n8mI)QC z{uV0H3>NUA2Q=(rWk^vuv124ru}&}*!jOgZ2q%Gyi$Zo7Q_2RDs4!6oQK}hCag8<` zO+(6PaWx*)<_bmmkqJW7LtCTR)GL?j%4mJX*<kL4ds-<@rHI=+bZDb1T=A_}qT*Js zs0SXoWiGw!lMUq}L^%dpi!X9I614JavZJ-^kb06?oov=C0=*Y!tveUWlBBekk`HQC z``*?LWwfv*nQd)bn5}39sJlDpU<tgx!ZKEY<J2XB8Js}JzR5Y2g^1T&BE3~v5J%jp zRC#X;mgq!EBNYyihN039cOb+6KG&MbR*F@igLH$K%@GMUdr~O*sJBAtu-CZ)L=x{v zOB*$A$wfV~+mK9`RpoP*S5$1IU^NOw4B=IP%GVsuLdV3+2uhG+wA-6j<i<eZhKRMb zC=Bmt#yb8dPdqH0zl?><B=(4jQ5>DUWUIvyd2x(2jH?>=XCltkN<sSt*a9D#b_Z@S z@i@8QML!yN4@Q$-zsEgOUD$4ViIqq)I%f6A)o?!p(u*MEBGaM+R9myIv=*{j%V`ZK z{hi6sly+N60lFkb<*Z9!_7Rt$!xvTY1xRPCFJn(NNU0UF-Q@FW_{ijNfnjM#)Txbo zYT2d?$<yKtl^!sgIny}*Dp5wi;pw0r^E_@T5~=56>X>}WTq=R=P%sKwJ*y99-J3O4 za~fen&uPGj7I?uF4Qb%9kxd3yIPWBVCe95JX70rFN5zfbglq*p>0Qgu_+ulf$R)b( zPW9P>lAl5AxhMp+h*fsR&y5#qXB6UedL0E4>jWDb!5j%g$W875KZPhNQ8SpoY9!n8 z2Qa!mNI>N=Ec~Q4UigHv#KBGRSXmsq88=J1J6^M?guES3COL|-Vq5L5N7m|Y`Fcv^ zE!IKOb=w^H+_zNlg>Ov3ch@_{8h$1#KL=GKYE-0nrD=LGh|1cbGKOjbs8BuXJl?qv ztTKK!>^unNXGy#Ne7>ROz(7q$rbCIgcuf-x$%m?mhb?O7wUe%NL&(o+cDKJHZ)mkW zwG-CSTFRzYuehC8wAb5T3NLQNV?HB`Czn|qZx_hR#XBaZe8?>?qs*hdo}Bmmy>xEB ziv^tS;m4BQ_kOWPmmmH8>N}eDw3mpR$~#5nc0-<(=l2;!BJYlr$5Z!>rA6h$0MH@Y z!Ck&ZDPV0b6yix5g4=E@8e}5oOvhKotQ%@B8g%SJWTkyL#`<<5E?_UUvTkWU?dWO^ zBlabHxZy$?;-3iRJfse2+$sLVVg5wr(*^~to`NYz@6Bq4J9v;>P|RjZq5!e!>>xw| zb7XO>qbZL63StaR{G!l*LPKFvD3j99{9Y)Ru#gMiWc|EQ_%O$1xUC?1Mz^9Na@H&* zzQSl~jsNb38HPc=h9PKFrY$4_WgO?#iXvoOCRQAWM3g4x$R%<@q5@6N^e&_@)@Gdu zqbr<C&8h-rhGAr2?C9D{HFm~lj_N}$;{C)>aqOlH55i>9@M+Mn4cp=k2{8`a>r?8m z*6^@$t`9=C#SiHP5KZEK;4Xip&=)g<{JJn=5{rt2(HPCghLA1Na<FT>FC`Yj8T;vb zK7~~-qJ5n3X%w+F%7-xgN@Jpt=v)pX?vF5}=kuTu8>wO%hoKt52OLR68wCgoe~}(3 zBN&hW@l70RP4JN)f#VB<DBW6P_ITq@#4(V_(M<wUeu{24LdGC<2mI<$A|2x%`_W7g ztBoAZA~&*5k}(~D=n-EdnR=ro)Q}_Pg&9+0BzdDG7ib<Qaw048B!?sKX3{2C;~#HQ zCtE2ZVUiwYawmJ^{DP7w)5;@@5-EA<C4KTI-{BpGfgkw63Tr7TgJUSGvM6&BE4T8E zdXg!n5H#LlG^Emru8=EtV~`T=EO$~X?dTn2Bb6W|IzCc1;_`#+k{~x~Js4t_mhvmX z(kZL3EU9uWb>k`vb0*sohjfZLtZ6rnD^KD=@Ki~-P{XbM%{RPpFfs}=TVtj)&$Mj+ z$t(Xd{K8T&&&Vthvv*#o7*+Em6?2B7tDXeIQGx^MLWFzh(lt6lD3V3myzNX9f-b=h zI26)Qf~7O<$S+B=Gy@ZNz{xdNvyBofI$!fBE#{b*ij;~9D29X~X3A7l>R61bTB1Q; zI_j)K#MmMQenyHfKkBZ4Dn8%EJUJ5yG0`OIs;Fk_Jo7U>bA_t_gj~4G8W~gS+-k4X zu`Qy*P~0=BGHR;es!)n*%t-2^z;iA@N(5ccLBVRS?h50`WhLHIDH;*3+JdQ=N)=U# zucBx)nRDPw^Es<CHV%_U@ewwKL)Yd7Bu1;b7=%#fr7GU*FI0lFh~>Tfuclo8Mg)6w zDuN3QUCzrYYw%DjNUv-^4kEXpE84mZwc5c_h}7tObaD`)q@s@&t?aVsrPhLrwje7e ztfuzxE9<88JKU7Tkm4Y|p(c29x*&_PNYN;UluXBTv?v6%WRAT`Y9Og%BmiVUgksRn zrZQP8ITdI*VKhda6MzWwMpwf|KUElW^f!!*GsOWuEHSl2bR<>;CRDXj(yYA7u(*<M zLRw2yTrej1#5!`(0|CX(z9au&tWuyt$C9EY?BndLM&DH8A!yJ(93ok<Yksf^qjIZM z#>3|(qTVD7%xr5&u>&b=tnB=37*2}UBrGAEBFB>FN*{tgK#N8QusUe}a5h8aRk;V| zYDIcDBv``^EV`jnhz`xRLc<(F92^H;iiNniA|Z6{Qst2sk4RGiQ!HmxR9Pb}H8Nw< zk5oyr`|j`{^hM*WCT?g(LGYp_R>IScq@Om_Aetf}m_|TdmLs4lb^gNJj?nUyWGjGe zMaW`7pbJoBc2YF0Bie~jx(}<O!z;c)TeU*Vw#7{IMnL-mP_A`R%FXS7O(}{@=U5^} zqQNA)bZJPX^F9J!fYaEBid$q%Y<%-m#6ki21gV&<=*kd6CxtG?qZ?iiW;~2qA}l38 zC{ru;&}6hzp|fKNBUBp~{XUjA9xg5RR4e?<4(9?sz83aOj<yE>(RpB24o9LXyiHr7 zESPFyRrrHvy{%YS<Zev@IN|K#%oGvjG+lnrH=V=7W=vbO>{ozPh@M3r>ZV)^1R8u{ zr8-d~ngUSD6<Kydp1{m<6XL_nCF?@YES$zBeAZN+Ohk2z<Fql%FvWAXLPz`-By#sF z^lh?A28Ui0aS2Rur;>3YH!vO-fAvms36gi4YFaQ)FS6z@5`-e$!&zly6{$nw20}po z%s;?tqj-eh(lpxQ4_@rzJBHT1^do!Hrz4ovY;-Kuo=)5HtU};H*FplzMD!-cVk<Du zWD`Z$ej<G&Z$)C)c>;2N9wf|ksQ$vmBw*rzp>K7T276=wqD0<9_89Uy5^pRj&?S@# zD1c1Y@<T6Y=y2zEu<Ca(?{|OGgc#c>jIpqPd!zmOL}}a=KxAbsXd>ST1%A1cTvF|n zxCU$M0(<7iAY86T=~Y+}uv3Pmj-BENr3E{9uTNvu&YTNOab<29HeQ%Zhuqg`d#j!( z(5Lo;L7I$Z2x5uF*IXWmYf8#)=c4(V!$|yu2KCK(a*iMbv^L8FNuEt@wqjsQ^jV59 z9imu$A5h6WBIMrEa3@yoxHxe+)qcxZF!Yz1A?=KRgB@hTYg)#-xQ@H3LUC?U#!L}C zTBbv2&}dY*aeQTJddB~Zf^$yhXO7Uxz@{!*!f5LMW<9>9YO*GBw7~+ERzC7s7cl~6 zPNorWB<23b57Bgq3nFrIv4@Ptx}Ys`x~HM<lxN^ZShi(k;1_;!u4i86h*|N)mM;xU zs#kMSo<j#M{PqzWT2OTpg0>i$5z32E(^H>$HdvF8Z2In^Sw}VVm7OGBHn2bo*ByiU zEvpq9g&H@hhnTOi8{biB)9NkR!hW#FRD>l!{*4=%h0t`!KC*aFvl@KT(WwJtxLkUL z<Ts|fX{G^5rz>J(-+HI7^OtIdPC5vPnj>O)!X)DahWC2WV0x`(sjXA<t({q}8H=ao zq#z#hOkhU6;)uf>Cb}H^?$mm)W2vxf`mk~Tnw%1Q(MX15L_rvsp)gnvwNqQQSDUq4 z+qGXCwqskiXPdTb+qQ2Tw{u&!cbm6++qZvvw~+zvBq_6#`C=CrwBdS;X(PD}4lz(+ z4nzR}U_mje+q$nCyR%!nx0}1W+q=ITyu(|($D6#%+q};kz0+I0*PFfD+r8hryr*O_ zkRc@M+rIA`zw=wa_nW`_+rR%Czyn;s2fV)l0B0}(84SF+#Tb`3cEKfT5+eKz7=aT` z0WmHd!!umNH=M&e+`~T{#6w)fN1Vh<+{8~D#Zz3xSDeLL+{IrU#$!Ci;|{)S+{SMl z$E_O{C}Iv)0RVjb!Ebtyg1o^Zd=e)AyuxK%$x9p+PyxoBJi}4p6hr~aFTBaCyvaGd z%2(mayBx!}{JE!m$;X_`%iPS*9L>`_!xcl#+uY6H{1i9=0M5Y3iCnp-^MDS(&Kau9 zyZjX9028KLF{qnL2HnsL9nlG0(GPvm6P?i?-O(ex(G?vPL}Ah){n8U16|AJtVF48| zArm+q7CikEK0y?$gcVNV6HY<U37r)_fzwmH)Mxz^IK9%To6<pD)G?jcCB4@(9oT<e z*nOSYgT2^?-Pn^I*_Zv;n_bzRo!OsV+M}J?q21c2{o1P?+qZqk0bmYJq0g^;!S&I> z_uQNSffWEi7}lNL+uhyY9p2;rUEb%N-h}}f=)FqnUEkTg*6*F&t3=)Zz19I<7+~Sl zSz*)L9TqrY71n*a5&jcaA>9LB)dT+DeSF{FJr**a<2&BtKOW>kei%ZY<V(Ke{oUkK zUgcNb-3h(AUH;Ht{<>iv(Pdu8XCCKoUgvF|=VRXIYyRhH-qjKQ+rz!d$GtYD$lMVu z8(85Wa^={fUh1cw>Z{)BqaJOhDYr0%8H7P0pq^wyq8Ww(xtt>!p#Em7zA%i<z=w_P zPsSLG4IKbmK%~EfVRI@%WTGM(h9McIskG&g?Sp0^<lf%N{_P#->Z!gNV&N6afbkpO z@gE=ZBVY0-pYki;@-H9rGr#dE|6v%I;qX5n^h00tubyN)fAmiu^;2K<t$uHOzR`jH z^<h5tb>8J=Kjv+}=5fFFX}{-ZU*=hX=)v9Sksi<0a_J4L>7Rb}mw)O3U~JgNDP)Fi zD1u5-h8>-P8(OBc@qT1bh9YF9laEbNMh5LiM*L3(?72Z0z}_i>CRYsHFKWu`>*nu0 z=k13<{gEX4O&j(74<Lk<8A!08!Gj1BDqP60p~Hs|2{sxA0D!oQ7&B_z$g!ixk03){ z{Dus`H;W=us$9vk<;Rn^V%~x!QzlKDHDlh?nR8~%oj8O39GVj-P@Y1Q9`%`&6)RM8 zPNAAgb!x?{ShH%~%C)Q4|F2-fiXBU~tl6_+8yrx}b}ibsaO29IOSi7wyLj{J&BlsZ zHk2*{cLb0P8Z%_g{sQ2J?5|>UF$oLvB@P`jirFp$u$&kGG|bVOF=N)uB7kVnkdgj- z5dh+ho`-2`{TZ;h#ly1Qt{uB~>u8NJdQJvFm@(moXS*C0t5L+~(4$MA-Z0j%Xo9nA zS9uuw_V3`sV`L_bDbt-sk(xiRRDF8$@6i*LACx{)`%Ilem0Fdm-v0mwD4<?#v8C34 z2qviDf($n3pjdqQWt(^_Ev8yD*(m25M%)N93^L->mW?pFdB%)3sU?OQMXeQvm}iJ7 z1{*TRA(xD9w@nj^|3)xsQxR{-BqI)ED4iDEMd%nO&NeLW#>|8&0T4?p5>+{nb5~kf z29{fD$>o<`hMDD<U6Ki=nPQfy=9z1LNa35=Wpfyubk_M%W=XBL)O$p!*IrS5{u$_= zf%<ureo^)3--C=c>gZT(6%c6yk5+2wrI==VSA?wDnNnfGbk^F7$Wc@hH<&4DqG!U8 zCfbv~ArmT$!w|<KG&s_BqG`3k2ApZCE#~22O5O$>j>4)YtA@!5CX7JTMJw&J)DkpI zlb&WfSV`J;3nu`8{>dkMhPpSOxagJ(-?{3-0!u}SDvFAx^wtYtfor*C@4o!@>+gV^ zLg_7RgdO%`|7;qe3IJ)fC3ze=$)%=PMdE<E+H8cO)@rA>*|y=3#kPj3ZkGANYBQnD zYV47&4bzNh#jYxtl$2C!^UXLbM9Fmn_bgg7JqN8_Y3AmsXP@|~J7`biDlO>KF(JyI zqW@NHwO9ByaNyNkckMOT0SoO>MZiU4;l!J1R-BNol{Vs&nU!|iUxvv@u$-_Oo9k{j z3O5Z!717<8i+=@Mk-{tEn55YiO=Gf?%DI$HEYPB9`I>36sd?s{U%t8LolgX!*x4>D zFzKjo`}9rt@kw9nMc<e1(d*WSuGI3*`}OYpPP&$)yazA*@D6Un#17eD14JT&0Z=0V z)zENy|3~PQLdiEsT0i#kSCRK@Gd^~>3M#^248Ryl0FXWzWPm~Wvy|Ni62+}mbjBQa zSd<)KnLTS9tHLNo94z86jEv|wM#9m^T62t8lqe26n4U<45eonqL<~g$KoN?dgDBt( zgB$E%bi@z?EMS2;CmhHXG9ay39BCxWI0G5ZKtl-z1^{iKAsS4Q5_DX`h8aP|3&rt` z7|yVU-ztV2lyC(AL~dq}W63w5fjy4M3U=XgTGE<EyQO7uJx&W_)SePAsuAyuj>?+8 z(8$I%y3s7$a03+nQUXe(14`UbgAdYi8)Aq-8&wpE@qAE403czH9hn9gWFd}RWB_f# z|0&Hd>W4lhARz)wEP^qzVK<fl;1M8Tq7gVi0}pYmV;no28gS4W9*vDddhD1bpg_Nt z0H7IDG6)h%5Cb6e(t|e}g9dtOgBz3}3KoP2AC5^KH)J4%gV2GrcE*g1a08S|VB!@h z@x<>`Lj*^-f)iK}!H_KG5k3IoMWQhpYhqKI+@ufyQZa%fpg|5y$iPWvmWvQ{qm?N! zhYS)SFtf#uTwUzqxLD^!EIM>{@fqWOa`(oH4k&9|v#3Tl8obN^pcsK8j45)1jT-=f zkKCY%X||z;9gyZ5*$@(vRN5M5d}A84Fos3efrlL^XB~%3#}om8Q=JkK8k_0o|1fMS zzaSzbkgW*?3aZEr@7$&|-+0n7Zeff-0^k^|sL?g2dJ$|O;RDaoX)(eI8?c%T9eU*B zS6Km=h24}E7QyK)e6*yNl7^_a$jy@QT1cA~RbbzsTtOO<&oU&FASV<<3d<0Q6gI-L zCyc}s0N@<S5@ZY|NMRO!5L$w0*0P+<f@jNs1`<qxAYuUKmQuJ{F=WAl&T)eSvVf3A zJRu8M;1U)h5e3w8X&@h}>myKL8q=Vo8Q&-dSASE#zYO)T=zv8ms#uK<m;?a1=l~-t z;#SxcBNlliq}(pTjT-Sth+bW8b8qw9=uX#I)inuHv8&xGUV{W>z@ABN{~_S=A_=<E zb#Hd*S{bFD=r%Mxuze9oj2r9>fv_o$Pzbd;q!lWm_TjLf#K=XO;7(o~O>td(*8t$D z_{A``SI4jdg(Xn|1=%o12?*+q6WHJfBB-%4MxX*2(4dham<=&@N!l=c!yGqof((A3 zfiNtI352{2P^X}cazxn%FDOA6&>_%7T;m2Ckbw;dx{=WUEhFxbZ$-NMxN_{+%T55Z zm`{QYCX~PkK~Be5tN4v-SimBE{&SGa>gON4U<l}V1S`*hgde{^dg6ex6I2ib09--^ zU<QFjhFoMCz?GHr908a+o#`k~xynt=2y-4=hQ>C6vleti2T03;{}7zenFRTPG|^B3 z(!QVrPxyffMxcXScVM!BxIqdiYXl7xlZ68Tv<*(c!eyS&2r4K+m`zv)B*Y-xWsrji z#I1q|dVvKZkU<H`;09l_)|g>NW+Z-aZW)lE*#^Oqb>4iN<reZb;WdH`UJ!z0eB%;i zy(SI-faismfDlZu0Sk2CqiU4EBHsuvWzG=?5dhi;x;cj$BJhJ59MT#;D8ofqnof?m zSvUq4PRKi;aE3b^;@Fco#a$g{jBA|Z00_kgphR+$ivZ<2?|H+;VO9_r;RQZ8bDC|C z4r#pL$3d=0!WZ6f<BdQDGN^HzHQcTa3o4>o-0(pe+V;BN|Kh}EjIrJ!m9GNr{qKN( z6gL3y003-*3OgW<3@FhJbd<;&;>{xt?kEmtga82RI9@j5afuH20?Np9$0a`Sjm&3R z96;S;Ns)&RQhY!gCH+Il{rOLhENpZbi8FIs!vrgQ<KfaP=~U4XUY)koiP!kJ?)NDU zFJr!?fK2}LaXdEw#5Ei7gLxPL0OhIv9;ubN1ji*$Uv#G9%uYUs=0Tqg(UYDd(NHWw z{2YTA2tfzG)_@1^aDyF`!3g+AS;7VYbFgs$kOoL#0UqQ9%rpiTFj?isLiKh+{O5me zPy$o%Sj6T*yp?SMhy>4e5LZxI6F3mS76~^XP5&2y{~&lmpap@8<t9jiO;>OQRUiu? zCjwSR4@dxM%J2cL5eMnCdZ?!cJN6CbpaO|dXc`bsPB3rZAbKGn3)*mICUFT<Ck-Ru z13olW03dyQv=MTGd!H0aHF$&IrGw(YgFXm^w;_Z8K!odHgiDx&iC{cC098bUg%)9j zIk<y8NPHh)T_({_-GEY$Cti)DhHRK=I~Imw2rjkbMR6y0U$jtpQeq#biFZd=Wz-*m z7m8bfQ3oK3rg)0~@fX)n5!(<1i5GhnQ4D}U24f%si2zrK1YVD1XOv(OP!<N|uy}yf zUB<vuKBZ-c#16r@gwPWLpSO68q)(^g8n|~6|GEblKbQ@aHU;V6e0Nk*+-Fkdp$joL zXed!qR#0KZaSP;F2E?F*!hsG#*czqK26BJ|5#(imP$arA2V@WjmzQ4buo$Z(4$2S$ zHBx+b_<Pmhj8GyamD30yxIr59YY>n^On`sDHV{ZKZ5x<v*j9mMFa{w=5J<p6Cn*L` z00sGkf+%1RbMSEkAqGcK1V7*al!XKmaBDNUK|sJvPJnIn=4)i20>Fd@H-Jn?0C0C8 z0vXs_E`)O(z&>ZNLr7)}=@4moD1PCCPEU3NviETMBo5~gbJ|c1Dj)@IFa|%+1J74; z))zsm#7A?u1LBZ;vXBj=fONJeL{dqW|5n*gC#97ShjiCONKh7*moS!PSq7=6hjW-^ zaXEW~`3QNK3nh>S@uQ0Z_EED~i%Zx~SV@?P=@EEhiC9#LMU$Ee)ljZ!ckTi&Qv-^q zD2goRVzrr@x>*(&z>HXNV>wnw;((S_Fb8s=0+b+mVc1VTQUbDI5$A9NR$yl+(U87i zdi%6xuvY@HFdM{Jnud5fhe2@GC}(9gP{gPWI`*7oc>`f^4I*FzKro*`FlGja67Xqe z@kyWc=?%_VS8-)lF@Oeha6H`iaqJZbAaFmrW(=psN4O{sqgO@#*$UXeofkojR#ZU+ zkx#?*SS45n!uEecxs(LROl1%U|Ja6t6Q^sFg@QVe1~;H)Hc$dK5TpGk5dgpkByd80 zMgul!Z}`YrBPjwKBm_=5l)(i6&V&VWU;(dH22F_rS<sOK!GAcgCKfa$(9jyomk}W+ zjo)CI5=wp6hXYTBpziR4CqZdeFq{!^QqAX{+t7pMi2`nV66sYLdSngm=@H|Zd-4UQ zj&u@ZYL^gKBCC|97O|$J2LNsgS6-MAlr{u+8jXf(nVVq=KfnPoa6N`dM8s*FH^2q% zP^c!Msq3kS<ADqZ1!9z#P_X)Tn@EXCV;)XHfU{W@y9sz|L@B)*tis9_s>q6nr+A4V zc_+b(dBkNGVR_Bji{TiK|9_C79bgQD)*8~84b+*T&ZuJ*<VbtNBf{V@pOgU^5oss@ zLD=JER@Q2XP+`^DRG&mv;pchF$b8LLN0B3sJ`jys)>8Y*NCQhmqKS)l<gWm5kfza3 zzF=qU*^urf9M5798A)sOCX^YOv5^1(`!;Q7fT9~Iqsa7vpCtk~5D7?-Ogvd`DS&GO zL2OeHvQg@yk?;Z$#E~ys26Lc*W#9z%rlf6vqDbjMRw|`Eim_W#L4{PWPz7H8R2dK? z4!nS_L!w7W_@Cdv3)Hs`F*lszWf9iE1494+c#vgqwF3x?dRT@%4Jn!cB^<>880xC8 zP}>cgF|}38URVpU|0cn;y5Y3}rVQQ%8+l}xn{j-hDvx$44(?!h02z(CL4I*~1ECqU zjQf@QXnX5uiK;oPvh%sF!!DrvIyjN5pUA7j3S*?Wx~?0n6>xc2(TcAKmTCJ9KBNHv zpnDi&h%DuWSonF)>8(12ncU<<byN}nz>MDsmeAvQv1UN30UL$!2(K4NJ!Sy}6^<t0 zBUtF5Y9Kwk3ky26T!j$~ZV+VJkVhr}a>ZbL?K>nDA!*;hu<oFRK2@5nW@Uzike{>z z2qbB9>U-9JkF7SZ#5f_iL?u^(1s+-k!}V({JAfB>LRVmbF_}UtYC$YYZx3)nS#ZJF z_JmkqLBK_C{|`72C$vma&;}xaOi0Os5#$^u8VP`wfhMb@2#9S)Aj1}P2PkR~Qc_JA zp{}k1U15qnTA2<W*9rijh5uTb^}BRri3D%zaV9Yhm#|~m5MFsH4JxpGgo}gUlw}3H zg{-<x!O|K={4z*fsFh)vOk4s^48;dbL_Y|fRxAz$jA`gV3{QX#WBkNn{0-1raCZ5= zj*ErwKxbE*hn}Xpm^#0C=%??x5$r^FlL)$;EV{PJG_krxHG#Ujx+t&9QMU=Kr@YF$ znGJ{cii`KeET94^a0J4*WFrs)hJ1PHU{=cp0=)>aZhNgmvIs120wYiYP0%V=p&JsL zn2;I={~I6za+(o`u{XkEy&7_5@7H`P;07uXW^85+(yRh3&}pAE0vteOM-WeZEX^-4 z0%2<nOdtX;AOcp9Ug<#3_8bGyx1OzW329aWK>HU<#sQZXSKp8dH-OAEpi}E<5faNI z6meX&CIaic0V5DW8(C`r_X8tv0wEx6Je$HK+Oaa~e`BD|Bd~5yFj+)EWJKnF|0e>= z)@&aMXyIlALON|01O~G#0_TQIX#ivvprrS<Y$%$eNc)smvZaDm#E-DfRQ<1Ttd*Dt z&oO{yR3`(^S(wKmxWh@+BLD)9RS_k3&$KioX}#5Oxy92XM7c7*WX%CqJ(gI#4qDCC z|JdNwSEvJF{k3nX(aCHQ+mO~_m&BVvrn#^I;VfokDa|6#4bm{nwJeN_tEuzE0vo*% zs`1HgSBb2NiKrRco4gaGOi`??QNOy{t{sZg5K`H&3XNeJyYVh9LKvb#MA>jh0FWDm z!AaSGA>trcfn!R|Fbv=DL>XgUs3hEA>KeB)N%DgdZi*3oEi4!&4k%Kt7m*Gc;zYu+ z8zdq>d;|^UY7t?$yB@+<9l<2uAP*do4(nYRp;93fAuU<Zfn>5JO3M(JwOR$S-v~kA zy_HNS{165X5fdQ{1T!J(?GCq*4tRSTB=IDWXx=<DV;@1^9a2{zLf!JydVIMN|I|1? z-~G77UEwAXEE%re8*ba;@K1AFMIN5sx%b_*hr1r)RmF`YAyeFPMd3E&8lHRFp<Jt` zP1;NDVW;bfrEC?i{YI@j<yH=3ig6O0qBx_`9Y50Lwe1;iCMTSP45=|1QElR>;W69* z=H3AuUEV3cL7q<HF}+Z4>*cqD@k*`);&BTbu9O|>q!G+fGdc?3|LxxiVbM9$=+8k- zgTCjHULj+145JXn9?=Z1p&gSx-hnRTwnyoJt`ed#iKE-(w&TgDuIhf0+9-DAY?R8d zKI<HH5?8?rwS60x@fW{BIGM34y^<Ma&Q8~n>l*<v!k{dQ5iEr<NrmAT|8av7LImN4 zVH?}v21k$xka!MtK!vG8I?uwgEPLPqcj$~B5iPq|M0yan#^~+-5TBzZ<$fiUqp#nt z65p^3O5j*y!!6s<>Gz%zMjkt-&g!eq$xM#$W2CF9P3yzc+72J_Xk_cn+!w4-9DWfR zG=dJK;Um1kBtX8tPqG@!5Dnc#8=(>n7_u3~^5F-x8!U3-!a+DZLf<^%-T^-_lXDA* z-m>Se5bge0@7~{LqO?KJ?u)+eM86Q}KJ)<>l{xQ85|kO$81(@!C#|V82@iJ)fACvB zDDT4XuP*VtQ{`lT_QdlS7EeGP;>HpJ4W)q_Kf)p-avB+*7$tx5|CPZEBF<h>-60O@ z-MFC}nr>C}B}5Zz^*N6W%@J_oJ{{@))X@_8Kac1+GjNI@CDE%9-I4h@KN_^E^+|q- zqi^tEFBGnxcWB==vcCGR&pTn0B*c*waR243XfkI*=Aq#lr-U4N1LR^=t}ie5x(?yd z?)d@#4Hetpk*_A8L+(JY^z)AH(%<tsTKP|nC5=Ei0FV3{aS{&h{iy@~rC;!~I@+b* z^`4yiwE6m11M%)3|Nr6`YY+3Lp%}F<GrWP`4tn<hk&Rh2ZQ=|b6o-!4FaQVvAY%pq z05paVBW8mL03$Pm2Pa1C7*ga&k|j-^M48fLvskgpyo4F^|79bYHEqgl1Ry5OnE-Ou z%*oTH(4Itb`owv2D9oTbV*-c;P32UoRaG{FXjSW0u3g17V|MEnEU{wAmOX10ZP~GF z-Ku5V_N`pFb?M$si<fO)zI)lSVg+E%DO80G7nYb<@nXh}9Y2N~S@LAcl`UV!oOyDC z1Dri`)*M>&Xws!kpGKWp^=j4t00kBnTNtWOwO0WU23r^`R<VzX$|P#lDT#q$6~`@G zdG6lJ0i3EWD*5x;x{)nc&Kvu7?%lnA2OnPic;x_wokyR3VS4uM-M3%=UjBUg^yAmR zKmR&;{{8)j-|s&G2PE*nu<Yt<t_1aRE3E|?M9?n<|0RrY!dn0njIhHDYpp{MKLqhK z&k7i^fe=qbF+~+uWU)oYvSEdpY#K61q8VuvhenA!y3wi~Me32qAI14*q>pg)DoG`m z%n<;))*>rPv1oyd%D5<$Qp&sFIxDXV6QokhEU%1f%r48k1xY5?<f=$E--I(IG%c*K z&MhIt^Fci+%#+Ux0~>5Z4qYU)P(vg0tTRPTJhV|qAB8kh$^<R!lsPZ~;LJ1S+O$(H zKjrjOPeUcOOH>${1eH-&1(nrOTZQ#iSzUD%)H`WaYf~~Ee3DnXeEpTqw#+26t^{$N zHCAMoRkqn=pJf(WXQM^d&OL?IwNGsMyw+L?|6w^ULrPJRv|MvnOZ2k?&Ske<ci$~- zTuU+aa;`1C#CJ}6d)3!ivjE$*-+Kkl*Uy6OJ(ypE_vKYgh36#pNm2*)w_<<m^=nK! zALf{1gb4<DVUa%`x#NUAHaTRHz1^11Znb4OW<15hFi=Y2#X0B3O6-h8oqq;8=y&G; z;EFi_VI*m#m7Zj2RGn^m>8P28x@xDNmfC8nlb(9&thMGEY^=8?JM6E^9@}iRy-vIB zuCHd>YPREU`|7%*e*0{_%ck3Izx9rLZm|X5oA9*<N4)UF4_CZ##vfNZa<{?ux^loT zC);wqF^^pH&N;7}5kLUBLL#DtMjhUC{})ZYb=O}%k!Yil{u^z$YY+YQ+WWryX}Wor zT=&0$&)s&hg-8DOrk6Kfc;=tCJMiIsr<(cAp~s$j>w{0e`{Tdg+xzgrZ@zr)$4B4% z;?HNFclZ5%AO7j(r$2h!n;xBX(_!cT(bXFOP5%TqKmtmJ83$wrCxn3vjYK0G4uoJf z9{9irI&gv%oS+3Yh`|V6FoF&Apai2)K@m<6ge2Tx21)3_6>e~Z87v_OL#RR+vap6O zY@rBq=)e<}5QQ-8VF-B$!yE$9hcmh%5tT^79{$jYN<?B2U)Vt$CQ*hdgrF3qc*Ph_ zafVs6q8G8qMH^Dlhgu9H88x^?|1lmBgk=<B6uY=XGpf;qU)-S_;pjp=@-Z3!IAA6a z7?A=N@<cpqfX@uMNJhSHkP3{*6D7ICCAM*rm!u>nHJM3HZqk#T1m!118A?))(v+n{ z<tbH}N>;AYm92#3D`go=TFMfT$l$~v8@Wr>{I4^-1ZFVZ^~eP_v6e7|1~P^*OJ*Lk zna^})G@&_7X;zb(*R*CfvAIocYV(%4M4&LmshR%;aGd8vXN!m#$!<mi8Dx<WH|5z* zdd}0H^~C2r^_fq8?$e*%WCkvEnNET}29b&^XhIdL8e%fAoza+vSeDsOivH806~*X9 zHJVY5Zq%dr{N_Lxs!(4t|7xTsMJZ<12>@z3X&Az|MMq`&QJT)wrZvUsO?8@6RfaU2 zDJ5t**9BCf7PT=AHKr_~ktSr^A{je{Do>+2RjF2$s#mq@DSdiCqn`7iChcliQ@T=W z9wQb2;KnT`npLc}m91}eYh2+vS7~mQkYWX9N%6YZks`I7Vu9%`gppLa7M8AuHEd!L zyV#rBm9M<i>tiL0PO@rqsj+ElniRWP#&(vopY?2Lo$1)gE)tREENyCc>DOmMG)*jB z>M%e%ThZ2*wzsuyXGyDC0{#!7yajFnEBj1goE3s<Whrizo7?3!m$}c)=x&3{zjTr4 zm(#^=|5$6y5sJ~0|IP(3bj2H9@{Sji(#>w`5P9A7wik87EpL3yD_{D~*S_sUuX}@* zu0-kAzdzgVeFa=!0uR{01*T+v|C=*)eP+QA9wq`IncM?c7{M0C@P(JFU<kWwy<qKd zh#eJR4QJTIB}VayrOIIun~T5JZE=hb1z#1X*v2)+@s0b*Vi`j!vONZ}idg$cmgd;V zIzDoekz7hZ3Im*64f44@9AzqpsIt(AO+1&ZWG-*n%Uy2rlkZw(A1{h^WJdF99+?pc z#+JfghI5zY9A^#R5)&d#bEB&3nLPK|H1IX+cjr84IuqK^i48NJ{Y<DSFWS+WSu;Bw z7@IdA+R}x_|MaD;n&_WC+C}_Tl&3{anMl7mqMFWhs!_e_o$`3p9%?X*Up?!iN>~_@ z&PHsJ!D?Qs+Sk3_Ca0lHYZNt_*vDS8L)$Fawf@@Kz<zeLgUt*lEBe^5HZz~EP3%%f zu&K#_cDSWIZgHPCpkm&3h<=>zMa%1SXEKE(q&079P0QZ&zIVOxy>ET@JKz82H^BWJ zaDorq-~vZ@!4rOPg*UuYuvmpyRJHI{h0A7wVmG>aR-%kM+TG;JizyKCAe5E-WG7cy z%1UPPl(T&0D1Uj&VZJhz)7<4YpLxx7e)FB@oaaCHdC+A(^q3bN=Vi%kW_vC$z@Xyd z8|rv!|JEIKG=Dr(Y7x1vj%6WWO>FC5;(FM@K6VCmUF+Wxd)d?eb+wb7?QciB+vDDL zy2HIeYoEK_ZKZdw=iTpjmpkC={`b8TzVCwP``HnXrIwl9VoiVgVW=*mY_nIgQNTRr z(?E;K$BR;y0=dMKh6rw5iR3dw{pnTjr_{54^$c@;>|vh?K=8r#x5s_%b-#Pw_uluv zzday6A+gsJU-rg_ee#jN{97Hr`O1Gj^Xpao=vROG&c8nNvoC$qW1sOGYyDavuOW<g zo;0T&>SLqu1ol5c2knOixy-K_t4E19z)HNu4qy1i_n-g&-@gD<JOCU(4yX%EU<6SB z|BMA>zy@@{2ZX=~l)wpOKv7@>PVheg)V~4Lz+lNh4g|ps6hRLpz!7vj670YeR6)G^ zKoexa5=6lTS;4@g8CGyQ@`Jkh6Aj-2F|k@d_iMi$U_bfOLCmPXe(5^!qrUC4zV6dL zC*(dPgu*72LIYe2KsW_((ZVg{!Y=f}F9gFd6vHk&1wi;dDl9!IRKql6Lt#-u?^{DR z48JIB!#8}wIJ84Ll*1)t!z7$Txfs83DZ<d$Gs_bz_Itl45W+-!0wNs5$~Z!p3Bee2 zK^jcK7raDEoW!oP!nEK6R=}8I5yep?#ZoLq-rxfW@s$}IycVRyS7gQfgGEf-|3q4> z#8!mCSTwv^)Wi|2lU1Zei^D<5dqm7IHXjVa_5;EvD8|c(M49<RCX~i0oJKs1#$Tky zY*a%lREtk!xNmfpv0#N%#Kt<jMr-6lbc925Oh<NH$31+<JVZlyyhC?v8T~uQKe<6c zY(~ofHPi~L^-IL}W5gYx1xM`1$8a}^m_(Mj7F}$R`=bj`WQ8<@NB{(a5f}j=z(4&H z1xx@*Ojw1A1jZ-n#Io?lDFiyAJ34Vp#S_$)hqT36>_wWy#Z0_OUd+i`l*Nn0$)23a zn32f|3B;R8NXlri&gj9SGKMlh#P*YjL?n)*j0|@(jx&Urd-Ov+frXDG|Gi;31y0BW zEt$votH>vW1sNCt4tRlxOTq+sfwf#qC9r`uKtpb9i<I0+n*_=TLB+R_!FTLPb*x8v z)I)i!MteNWd^F5?L`-c|%(84lm~_JhjJ!diN<`VXGYczUFb02cN<;(zd=LWwc)zL4 zOvfOXRFDY6u#~I3g;KbJ*_=%&h{J5@mQ^f;A8-;ZVTE{`$WxGniZlf`fC5<11vwxB zA&`QI!;4Z-0_J3diYx^n_{y{60~xpi8Q_4mtbh}!0vX@~$|Q>y*nsXF0VVi>5wJ@Q zJV~)gNmv*KC74Y#I7`O-MFkX#-R#ZV97hriOjooRo$SlK^hpBU|3#imP`+Hy165F0 zbkKVomQgr@{xpR#0E7PIi>?Gk0APiuOU=r7F@Pkhe((i}=!Rs}2X>H%BA^A-4AIBX zkk`CASXhLO1cK$X&6gohth@zXxPt5a7Lhy4C_x2GsK`a|P*{kA5>NsqK!Of%1S`3} zQMdsi7y}qE0ViQn8dwEX0GP1=05D~R6Ie?Q;D8I@00uzQ5jX+FILoWEi@0o4B>;jK zP=QH^L%bx5lw1WhC;=fL0v70iucW)390eIj1F-;7A%(^N98e$4%D0S1{It||Y|O;W zRLI;^!dy&DeM||>i$5I!6R?t0;D8e7&$~#}MFmq3jROFX|Be`SjHxS8rvQNVdp~_> z2-AEHgrrqOP>eIU1HrgTSjdG4FjTQP1?Rkl!T^^nGzCEDO|wJ=K={gQozAjgh0&2W zvglSo_*PiR1ho(yLtTYcFoia_gZn&=NnnLuK!P5qjj<dHD}{ng2}@Bx1vM~%F9iS# z=*@tAgW6CPSU3et-~>!T(==^>ACQ3tXjl$Vf{)AuQ2fYKa96P~)9&N|AeaN&b4xaS z&s&I3f2~L>Z31h>*0DHOvjEd;9XYg^)|tJ9bcF>*kk1=PgG?AnQNTKEO^a!5*|GS` z!Bj<GOxm<F(3y<Tr*+z>tx2ezTB+SjnXx}Luz?aF|2<gHTCO$PbBz*}70VC(1UP7e zF$I870DwsV05lK|T2+i=>?(h-+cMCB^;--n002plTg4CoiNF9RXaE)ffF9rjh7^lM z0NY_n1r>mT*qql}uu>yXfgccoCb)%OU;-O>0U2llR=80acmWV_5&%E~6(HRnkX+S$ z0oHBRTQCJCP~8zIf{MHZRTY5~DAcw{SXLN?61am^0Le@M(^9yBCcuPAz=T;%URc1C z<P{45;DOU63sjf{Q8*4juz?Y%fChjASTKbvXn?ikO~7bg-VlX_%>+5U1r_jEx$Mq4 zxY<78Q<DY7u~35#pb}!>fgRvn&jsDtt=-#&|Ao$#f%T+;vFL?35CPJS0o(<FA9w*> zV1f-$-5x+*S9M?rPSO!bU=>(Ymjuibra2z%)JXMI$Gp@^1=SWV%utO?O_kwEEfarb z0v`Z?L>&Vaa1vceT?Ix33&vm>=z&!j1I3^LRESk1;DEnf3|kE=r_6^ZD1v{0V#i>G z+mHxhl?XJrjVM_J5fB1F6#~trh1{J4CZGW)8HE?{Qdqcz4gdho1>2pC+y)MTTeyS} zh!RkYgFO~U%9VjknPbu$h0Nt+4QPT%C<P?&0V74yIj%^+IE6`=ggA(RH{b*?-OuNp z1XDnQ9RQb7U}LrT1SA~`Q#b<-sDKeL|Jq47fi(33#Fzv`ILpBJgh{yAv3P;_jo(W- z0Y<Qsl08{dwb2u30y`!>RybtJ&0ITn;~O~6XBK5rz63=k<PlC(Cz)d>xn=-h0@nSL ze|bq0enqUEOr;%6s%_e;h39vc=K`hY1`SFZHd-~Hfj*Yw5J&~EWreRqUd?S)h%*Hk zkcd+_1z`;Z0_cIj$YO~o#HD0PpJ;@B$koM22Wo|4Vddg6l|M4@P?F3A4LAbYT-5ku zf)fCNuf$ifz*o-I0Y?~%Ii?-P1%TX@0z=hlL$%U0fQ8A0g<kMiKJI{9_Syv&Q+VxT zk~~sIa03;P0!+r`d!=Sm$OKVl|J|J3-y%JQUWQ&UaAgIkWJWko4!D9$s0~i&+OfD~ zMzC4<UCR?lU>lGDG9UvEH~~Gako!H^4KULYpaI@s0v#ZW+3f)*A!-wlX|mv48jx2S zNE$#0WTQUI*xhDSVB^US<X~We7<hvsC1Dj#XMC>V08Qc4uHn^&;ZJqp*N$PvL}4iL z*WG*rCV+xeuz;^L1v!{aBtU^}epUdu09iE*Q;1a$jcAG9Ol`xf^)m)6HV^4e40l*= zE?(JFAcX|r+ZttDVZDn>7=hpx3(O`4YUW&WW>OKbfgfn^7#O)RaAFWhX*c)*4xsPY zR8%0|0WS5|G!6l{W(74s{{cyMW;(uPO!$OFQ05Dv4NL}rfyNa6&J;#a13@N>PXOyH zK-2F90@3+phb03otVjSrz)aBCVfp2?v;iqm%e9n&(lh4#_1XZ3R|XzuMjhpRX6zi- zUlRag6=?7F?g0S5Y#$bjWf0*YAMzhyU0pDO8yJBYsMh~PTBJ4Ym=x8<vq-D0X9)Fj zdyeNX&&7M5Z60URtwn@?c9KV)f#2={`7C5w5Zwa!RYydHkIv$MOuw+|24g@90B8qh zWQ=r(XkbMEDd>fXyM<&m)F?q-A`oGire>Ia0ib4r{;uf`xKFb<>^R_bqt%5A2i`)K z*R4L_1@2=;7)yPI|5<ol1Q3t}pA}sdXaXu#-%prb8n{^GJx<9r0i%7^R7sOIXjnE) zQwAtsSAGMd1w~Hy1c1p4x$aK)c5g4p>tV(dzs}#q?sU%8ba5u<KLr3<IOU-pXU#V3 zy=dz4R#bPd<HE*2D^+hu1yFQ8^Q=^7be2qfY;6{P;edy2*N$z0-*T>V^;8h-TlnXZ zYj<%D?w`I{;x_KWFa@?n1U-l1SR>IA#pr%0gDl90EV$z3UJQsv4vFAf8fV-zFpP?{ zU>Z1ZL}r0DW>Pv%Z?mBHu~-E&gzK>g<ecqVO5R{TR#k=<focwLT#f^!e%DgZ6j(?F z5$J(tO>tPT|AZm{7fr5XP><8<MU|05SfxP(AYjW1U;t&W0KMh_B3PQX&X`+RagX&_ zKEQ+#0E82qad6$=FcC)|m*b<KdMJ=)q>tR(9bqDE_t>m-%H>(3PiZ1GL*(>vz&K~p z#`1iZMWI|!6?SJb|4A{QXVC|J1U+~J@!DXgg&Svcqb9vYV1YP4?|hXA7<d3gK+WXV z_`jvw=gtE6^9PfMjH#@G_!DFK9f1&71+SM~Hir5ac!3gFRB-RlRCs|CFw?=l1P)Mv z=r?3HJ%OW-UF6<fs^4@>7)}C@l1l~`CU^pHQ3K@PYEa+L3myUKZ;OVPQ*Z@E-T;U; zu*jU?|G?n{8CY#t!D0yO)~$yTAyR~;g2M=m8b|Pfg{dM)inln3e8`7kL^UR8iR{H> z2Y`sC;%qn}qQ@<lGhV#72@#eX7Ai)FXmaaP2v!h-En>l;M=2R;A_g6*qKPgh8-~U} zG;tN5kQ0B3l{oe+TC-_OiX<y`?OU^I-O`1N)^6Okc<avH>sM`Gz<LF@CCv6M-@%6$ z-~G!tao)&oVZl;aGF1sguu5rtF@p&T%0W5MKs5#cfD5Qkq0Yn#HSE~3XVb22`!?>} zx_9&L?fW<I+zk#4FHSr-^5n{w=Z^A(IrQk#r&F(v8`UaQ+5vn5Fb5TYhm<FZXFTdg z{~B16luB&>a}p+{ELlyOB%YRfNqr%HT3>MzBVLhb3L}yzwMYyxk*8Ngl)++3Cgs5r zhYsb{MV1U1*|1+(<h_s)h#CQcmsup8b&`Z+xhK*o{@s!lPA)pAo+u$b6kcNVWpayx zs026`E3AYiSBG>F2^o@b9hszIXRS!$Vog4&WMoT@W#yBEVQJ)HTRPcgm0?2WC7EJE zDH&cYwI|mknq3(Y0ISRaKq-6x03K_rShpviefnvgae@9hD51aQ<BvauD!M46)q$rS zq;rOsC6^D4B7=epzG>r_DmKVgikd>yixN{6#w0`l93kMBXw7lO6?3deX<MRT|8ncC z@O^~pNNk~ap{8?*_fn?rS$LPRqE4owkVUrote3npCgrq`Q7c)K(ps4$w~is^EwI^w z+nBiJJ~r;P(jp7ek!u3L${eShvK^$2+Iug)$Q4(>z76F2FTeo{Jg{_-8jOmhv!3c! zDN3-)X|M}(D{Qq|DweEWORjlrktr&CCPgNi^(&DU%LSBC&sGXCyBRmDv9mC%Yw^t0 zqM7cQ(L&25%QREjDbPO)?K9C}23>T|HrMRwg-r$t@4@vFJT=vS21?v<Rcp-~H?Xw< z$kt(ty<61U&GA}b%kCE{(9s^NFvg*_YjepwFMId6DjQ}ZS--A3C5JRq|ExCNvo>qD z%sVfwG{}wPjPv4yhkLHM-&Q`k<&<llIp>&r?l|Lyy}j7e-<3T!>Z$K`b#bb@4!|U@ z%Z_^42%|k^VsbNWA*~?$yeaT4N4&1yh>1RY;%kXa5g?~D)ZmP_D8(LS)KiAv_0T_L zz4XyL)V=iKe{cQv(w{OSwlS-Jv)!Px|30reA8+Q+M%SM-{)O9*wEp=6&%gVS#5;)z zrXfKxUDRf$z|{4NIKx@s!14jX368C7XL}bzf@HuAJ}rYC{GbLw_(2YOkc1*6p#e__ zLKKQ{g)QtL3riS68F~<gGmIe%IUvJH03s8R%8qvCCB)hh5j*oT|JV_On8YIvafwk& zA|?P4I~?AyiZrC+6|IQHEo!lgS^Odw!RW;>l5vb?6eAkTn8q`zv5jmz;|re_!vmg< zf_5Yr>-crYdqrW7ek7O$UjrLK#wL!2Jmk|*Lr6u&QIU*9WFiX*NklsGk%J6UB{2xe zOlDGqv0(%s+AxPXh?10}EF~&WsY+9_GL@|y<tt<9%302V4~zhhCEs<)4tDZ`y%gjk zb@@mT?vj(j)TA*98OdNO6O+gMB{6f!%w+CznX=*KGc^g!Yg$v1&SYjctC`Gj4s)E} z<mNfOxlMIaQ<~Q-<}oL^%w;0bV1K-)y#mFrtl^VTxa=oD{}*M!6w0%p20bW36ROaK zGPI!u)uuxuD$$8jw4xThC`L1y(Su>ojcZ(EJ*5`Vk?yI1ts^N)Q>s7<!m_2Xq@^rZ z3DcR%w5Bn=DNS)|)12~jr#{swP<tBGp9;08L_O+IlWJ6@B6X=wZ7NimD%Gb>HL6s- zs#UXERaUwbmUUDqSd|kf<Ak-WW~Ex~<aG*Bu(hph{RCX&D%ZKvwXSx(D_--e*S+$! zuYUb2U;``I!4kHxhCM7|6RX(8GPbdfeJo`4>Q=X^wRUH{EN_Z4R?Kp?v-nyC5Q_*Y zwUV~9radicQ>)t5vbMFZeJyNbE8E%9wzjstEpBtG|J&X2wzt0hEpUVTT1LQ?5w;br z!9eTT<>JPq{A4b4qstt0poY2tux{6`3jl6Vm%Cm2E;_!u-SBRAyyEq4dC?2r^OASH z>20rh-^<?l%D2Amy>EQ+tKR(bcfbCH?|<p5UjP$W!2K<-eGhEl04JEi170wKAKc&w zD|o^XzOaQeEa44Tn8Ob4Fo-`aVhWEK!yaxgGJLewTgIftJbJN<TPzF!%(%uhzOjvS zjAQ9CR~Td6Cy#?HWaY#I0P#37l8c<=B{R9nPJS|!qb%hqQ@P4kzA~1xtmQ3pxyxSu zGMK|G<}s7G%w|5bmH}`I<BH;z!q5jk_@NIu|I>NSc9t_f@~r1P^P|sx{xd)NA!tM) zYRH^r-E$4C=ta{;$woG^JJ2lYNmIJgmcBHmGp*@ObGp->hVq>zA+JfGLKyu3G^$gr z>QoE5AA~M6qs!`Cf5p1iwvI=nAB}6&<k}sN_H~hg4FF*in;vtJLmOa2>|ZlG*v%gH zvzP5`b8L4X&~`SqudQu&tOEdiC<P*@EA4GZyWH6xH@eGB?d+nv+usg1xzBCxc+)%G zMb-ss<gM>|&s*5*fX1$ey>EN-d*J;x_c^+=YlAbq;MXp4G#n0WVnAEq^aj8(z{Uu4 z2pb!90>CVI-Ee}F{NN)uxx`T}Y}BAa|I{r)1u|AG^O^U#)vkWEt;33FTIamyu`V(a zU{eHL6W!59C%Pq^@B$wkS=UE@deNg^WB{}Q8A^_Hk-bp@BVWDgP=|VKlF@Vkj3728 z2)WU}E_I^UgY2{M`r4-s8@L}m>~xPi-qr5tdU&JgN+w6X-C+;6%SP{ckGgDVzzxGQ zp6K0v_~F4`b*yt8HEGxfuIb+R%_H6sxn_JVxNi8z$41G{K+OoCfceO?p7XA6J?vla z=v9!q<*Pu(scEkJK-+xKIQMx<^?6d@6Mx9`Xf$wqjT#?V+dAdQcj4)A3hOdQ?(yKo z)(81$=#btNrPqzzaYGM0h#(OI|64~WbfDz$uZH^6*@oDj4}igcKLp%pKBLee4CUWu z>g=x#{(;=w?Snmp!U<Tx|1lcvX~!h!3GekD1V*3)_TH-{O7W4@tX-f6c2;))04KcN z+(91zWP)vAf(RbpZLos-RTn+nl65_v3BtxX6axU9z#GtDcAW!ktRMhT94ffqF?3BS zKp)VRfFpcg;lV}_(h2l+TXq4!F<94(kstuXAQFOH^Z6hT#zZy5Mik1Rb^!nrlmIAf zUu={E#aZ7DCSeH113f(9_E8(1(1SIQUTo0c^#On^%tk#d;SfHW6Dpw;jv#8pU_4NR z1$dsL!G;!kp%987Y=BK{{}cnop++$v!)&OaBQoKm&0r1QV0lGH0_KMN0YDW1Kojgk zw^@TJU}7l@!y?k4+?|6ThM^gPU@fFx0500pEuifIzynU8FiKzr!rBG`)L3E7F)pKY zkwOU=!_;j+Z0sUxs6Zn8pWJmJ0N4O(%tG^dg9yk03)IF7s6cI)BlKa)Y|uj-0KgBN z00@K}YTN+wseuK^qilHNY|!IxoPcbsLmY%au8{(4u%igThCH?%ZS-9T(#96T#whR~ zY>>h<#0DJ3Mk=62C(y=5dO|ShnlpgF0Cpoa@}qC~;~k<#GVCHdx+6T|qe<RI2V?_m z{6N_$8vtk{H)7#D|K<id-Xd@;LPP$>Mdro}oWKXjModB?Y{)_Y79eWSpU-UvY7C=Q zwpuY3BQy4sW)TOFZ6#Q$R0$+Q;ZZ|v5adMO#to>RYz)KTp<ry>Bx=l9c(_CJi6m^u zpH#wzI*7m?G9_xLA8Mc^YK-MQpoTr-qmf}B0KkEyzy@IgfML>x`6<I}fIu=RWMcw= zImSctB?A5FfNjVl9?TzV1l`mjLH5PQJUoLf#KS$XACJIBHqamZ!A95A12E(QY<L1R z(8ex4Lg6u{V^-H-nq4v+=4@2vWs)TT(11h&B>)I!4I-y<R@)-t##_opWKJdk=%sBG zWp2Cy0Kg?`|H!}(K&NetA^`B?3-E?NTGulwB>*^Q2#Nq(0v}ZZKvwprfBvU2hNT~6 zpnw*r9Zj9Dfj~9@-rG4t`O(8mOda5rVS7SBbfSiN(#A0eXI$RKF-WE(Tqgj8!Cs<< z)+r{hJsMuNCv2Q(Z209B(uPU8Xl;a_f`;Hv0stkzh6xB;JOThIgaA{<LoVPYLtdu_ z$b#Hi8(JC}{_R5eZ38u;M)T3aa<C_hn&{cBXKdUkhNdWO_$X}5=$6Jqlm5nr#s-<9 zD2algZq!36+yFY_pDn-vAK0m#QlV{_0~5sPZ0utA(c{!@X>0`DEQlzO0)Q2isIBei zfA)h8|DuL5T7#tegYx-9Kez*|$%BCoDAou{r-mv8bwGBZD3QWO64VBRGAe8g!T)W* zdxB}-Ipu5!1=-~&YJ}))sDlN>hIz(=Hu{<hI0C1l2899u9#~`PVINuUBCb;CK{j8n z0zfW=fVGioH`)V-jvW%3<)fLvLn<n2(7-pC9g5-xby1^u0)Umm#xS_4Y*6Q7jwJv% z>x=%Sjt(9}$_BOyAOL&-OO{@+awf6D#<2pxLHb5H%Eq(GhOV+<Z{%8Z6b1g7!w)oC zEr4rm{3JtOs4)a!JcJ$;AZnxjlYiQwq|OFEz=o^&TCs}i9_<{=&aCU0K#|3Ob0&j% z|I!~>@?$W3WO>cQ4J;~c9G`{8h8n<zJ^TW0u%9{@;l_r+n*zWN4BjEyhF>-x6O<nk z9_l{c>v<NeWX?j7X)Mmd#^Z?tYLp_?4&FX!<KPLTk!fS|g#v8kCjcZS{|#O$jAHoF z<!sy^Jv;*~U@0HQ0l+q-*V1QffWphhhWYWPwViE!qAYB*UDX<yx6($|GU7DeM$$$l z(~jxA;-3mgEp1q)eFn!1Tx{zmN66hkB4lU*en6nUXd(n4J))>Rpe3uunxkfAZ1e+a z;DZIC2E`pOe-@cM`~%I}kxA*%^G+|-c%x-r>$>73)v_n6YNl+AtZ%68A>QMK|MEtW z?ZYJiK*YgD^PQdYh3@xZ=9HSNuhHY`-D5mlF97tbY05^dK7t8|ZhfLg2au&b@PZx& z;3BN(X__x>AOovr7cjKzTyjnG6`B0vhWjclLgp_GP#6DFYyZ`2`mQgP7UnGQAIaVZ z_-b$p??#XM#t1O5w~fNPEr<CPUg)tWp~6Pcy<I3A<nQ)ef6B&f5^u^H84^>kr?L(c zKXJf-CN+e>VNz~xB<v9Lh6&JQbxNmg7~u-{MmeNv0`_Y2spiAR#v1_b#>U39(xz-o zaTVLA<-RBz)Nc<2ptbF;Y{(^S*kipW$MNX``?cLI;2$jJhC0;78qY?K|H3G3#6sN8 zaX0S97<;i9H|<<59*=Ud$Z@6{2eSA9fDc6MK13?==>{w;LhR6nBcSrs+3m{VYHiRe z`=VtSKW{uJFKWO8FGDc{ed?zIGco6j&F*jZrsS2b=lsgXY50i>*m5e@ModOCH7Y9r z95eq8o*&1?BHUyVtnP0l<}S_yZT#-w9Re_<uWabT%K~n1VChnxtFi7wE_^UDt7Keu z^KL|Qa7cq~RI@bO27@*;p$Khx%C7g$hO1^NYIH8?igU=)?8^Fs^U}sTTy!x*kV!qz zMt}667&LA)pD-A%Y+PtPROB=RAWK8XJ_H~hlpP|Nv~0|;U5a%1|6cBGY~h*yF>1{8 zH10z^SOZP7uO1glGrx3hi1ckJHJ><jP1A-BF!glIuZYIO5dYsk<T7oXKnn|~1;Rtq z{_;I&G)RX{9`W2+uQe3+DFm@?Y`8T5WCK;RHEaMu4)@dI$_CLA^ExasZ1}QWZ;kLJ z+F&0xVh>Do)^%c^l^TjFJlI27(}r2g#xFN^z7Qy8Z#HLlwr77fXjexvdUR-)wrQU> zGs?r`qBd)bl>>dMTDP`r&o*t>wr%^IX5Y4M?>2Auwr?XNY=7l%4>xfaw{ahLW()K1 zAvbe3w{t%?bT^k*c4c%|w{>4PcI$RpXE%3uw|9T{U>A05|ARMqm$!MJ_cG=-dapNo zx3_yk*JvNWd(St0*SCG+Q&(!%eeXAa_qTsjje7sLfDbr<7dUkM7-<{0f-g9OH#ls_ ztb<3mgipAA2RMaaIEH8Vbwjv@cesatcyWt2h>tjlm$+<OxQVB@im&)t$2W_=IE=?Q z6X&;Z%eal-IF4^1isv|w_qdNo7l;42kPkVL%bIc<c9AE!k}vrLMelesIh04alvhoV zPq~#}IhHd@m1jAZce$4z_;kPamybD_mw9F>xAdC1ny<N;i#VIVIh<$tj>kEj*SU|o zxSi*@p7(fuJJ6p0IiSP%oCi9g7y5)FxO^MBqA&WP{~!62GdiS4dVdePq*uD7qxY6y zx~6YBdAm8Me>$jhH>HO<sh7HM<GHD)x~l&+jVJi3zdEd+c$hDDtk=4&e|Dzdx~}g! zTjx5j|2nWgv6BZou^0P{JG!wayRvtxuP?i^KYPw~bfQB$wO4zsZMU^&yS4|Jr*FHr zfBR*PI=GKJx!)10mpi(rd(6JJeyh8?zq<m7JG{?3y(hP3)p)(<yT1QRv+ujV|2v<^ zJHQV-!3Rgb7d*lz{F$4S!Z*Cb`-Z?jyu=s$xlg>sPkgIS`^9g(!$&;FfBd^2Jjjnc zyo)@^pFFw`JIb$oy_-DCzkIg4Jj~Dhvv+g>|Ij?nkGst0JkJArxA#2IJG;jRJ<-2< z#TPx&|9YP{z@sO<)5p5XKfTo3`p!?i)mM7eU%l2Zy3KFB*OPkIf4$i2`OlBN*)#gk zpS{|%`O&Yv+wb|(H~rhsJ)B3c#?w9C$2sdTect!I-XHnh`@P_gxwH?y;gdPGAHL$t z`KRua+%G=l7kS!8KIIEKY%62sXMU2$z2<lRkWaqnhkl16y6BhwjfcJIr@n+2zUsGr ziYLD7$Nq<xz3kUMg@eBB=YEA>zN_oL?=Lv#|Gw}8|EweV@E<>alRok<zkj1X^FM!f zcRln^|9m??^<RH;(?0fZe|O_P_kaJXZ1aBLgFpF4ckq`#`kVi(7r^+Zzx#){a`*oG z&p%wf^;=YL_^!Psm>Gr|QkoIz?gj@KIu%4vR7ycgN<wO8h#5jeKuQ`!TDpayQy4xX zQc{9aDoTh5vf1DFINrUF{SU15(^}8*T=#vRSLGG;v*mLildJ!JoO|ECiUCk6$qw34 za7H2P)?`OrBEx0<G?nL0dI^_gA56DCcQ$y&rya|pn&M)VDtxWfx-I3tNrtqhk_x&( z8<Y(K0hj+ksgM8wNYGr24ojc~U;uFrfDqjO5A1)%ILENAXyE^b{o}cf>PtpaMg9l& ze>IjN1CM`cl=@)&rHcRd;z+~m$$U%{lE=8QY^vBWRj6vjy8QiX%VOhP<EDxa{{#C! zNqJ~i^Z&E{ZtpAZbWHD<HveC&|4G1Kn>WkdI0y}|X=|-xZrA|N-SO7C&qK*qOeV5} z>o>+S<vo_h+x#~s3Um{A&Dt9uzRtI(y!)=bY3E}tO=*%@NAtIZR{y@->W-El%j75; z;z(%g&(FiD;ud$q+V=l9>;G{vto?9j_JZ}l9p3T#g7r^0Kc5Tl{IkFLzVeN2#M{5W z_dbU{lJ4$0`+NNO{p4hK_xbtsPpTChl+A6$=`YX!!2X6=IC_1N)o2!>7Y;G(56V_! zdG8Fb649|D{Mx)pZfkKOQnpU<63v@MVd7mPpA!|lFF8L|`BGMVama0ceun949!<v9 z@FRt^h051cnpo{hL`?NXH_{4K?F3%fJ}AHMY{S&Hk>L;<ax+6W{^6G_w-miEVh@|Q zzP!9vP5t$P_1{X(3G9j<%?mr)`kIe}iES2yfypDH(LxoQMNxUZ)Ig%X*j7o}|Ht}Q zY?bB&Zg0IVh!xu|OW_SbmV|yGy5<QzKPfLHwV%hA7nhB??^L&bso1IMJlfuQ(=MhU z5>{EydA*G4etj7x1%VZ*A`2ONG)~)id~2H37pHJd&_g#G01}}bvj%pjlqb>$Jk-X} z_Lsh<D!gu4)mL$|s*V?*P3a&o3H)dvmTr5O0uo>{HQ)k%s9jW5zu7paFY&XV<tA+n zhJLK_`#{yS+7^cAuc#$8fSU4Z*H*c`g^{*Kfq<)&y+^PA{S%MIqy}@By>(fm`L6|h zSq;TehMd-K4UGVkISdm_zvq<}Fz)>4=8`yC?l2uDHnnj?4G3+}V}HDQO@CliaW#_` z;7{Z&Zy4|ylKj0`KPdia)alX_1>kksxhAE!2=Hs{3=R4gw7kzIc9dL{(`#5=x<@CN z1}xUaF9W9h0joDF?E|YwdAE>&rbuG^e|QEd>5pOFp8~qIfBz8y?n)#qz14cOE(1_= zm+W;?O*u4m-ck{7Btu_ae!~d|C}bMxe7PrUF@(2Y4?O8vAljrovl<Ly-|W$HL?|7A zjHK`HL2#44DSg@-l0H9uMIWst_8vm%YA6S4@!E7MhDS#R5F58d0B9vcU`&{2bkSZ` zJ33SJ*FjVVXupe&v)}AwEr3PF@9lf`ia{kLkO{C2iz6Ti{<r=;-@U-sdiS>P^Db^o z@F!5ny|9$-K~O<RzRG~Wxk!tWwY?6+tacu9?o!L6gNX)294P<}hbLo#?>6v?@we2z z90375n|E7M06^+H-F0UOneDEyH2dB=3m)d-lOrOs<>}Li;PGN!$p=b6Cv7~Hyy4e^ zvO0Q}YP<U#QG>0AiXmqfuCL|DFi!yYAZ{;ZTMV%j9gE-#Oh8j9d>n*24R7c%05`FE z+!Z3p;uDlGwXv*GPi0=NB?^E10oNtfskT|_Dny{}(p(O#+#;F~O0&bG{Y3_j&y>0` z<55UWyQ!kJm-KuU48Ug6HC6Ujyf&=t8D?i*Tak;<B2`yXzPAnqw(sY5sv-UXD6mKb zKmEdJrV_~EoD6-Egyvkdt!P%&?Ux<Dv(R3Gs0&gYzgR&Kx6T&1B=m-eq)QxEKyV{| zjb9zXpc8R|LfgW;x0mGj%iPw=lc;f9cb+Do6w0)vKDJE7)D?z*UK2=ep+aP?v6PZ@ zq5q+iVPFTSENM%$6BmbeN`ZeXF2*DuC<0}LXcC%lZ6;XhS0NMC+WT!$@4~BGi-fRz za`dJC(V6D<!)l+WmG)naKeo>w)&#$+y!(6fW7o;y8{DfM;pPH>t8pilncI-twxH&p zBA#_4b?Y6%iBOv^8RyBW_u2fi-VYFt(fZhh`B*<5>LcEGmvz`B6tKf9JZf;#i(ye# zH~xA~=K{SfGmJ<avcVve(04w#7rD<hq~0pYE1xZ0ZhaxQZpP328kI4pu%NP?r}Gd@ zUG(5@X)Iz91pLMVV(pc~aAZGp{;79B`A&>cm`;NeGwB!95B|!l0J&UZ&txFnu<d=5 zj^^M8Mo#+^IA4byK*dI0m8F(uIqpFv)kX`Ot|D(A_x^9;g!1?*eduu?n!b)?VCsZq zz`~S{LC)`G-d35vDbFI;$mPa-nu>RNlDFHlspTWGUE%Q-)%E?x<rncZB0X8%4YI6^ z_|IIaV~=vk-<t(oSD3O_{7w$5s0(h_Y-zVV`uAdwl?e<zY(9)xmM!<?_zx$PR(+0x z`j(57a64m6i&(USIfP87U`GAN%sAd*E;+||S(opRAaVA<i)O<3y9rBUT?ig@7I&oo zhxvV9jRcM54ZQVFW>_eMk<s@d#^5`s?6~2->*emoa9OU8uM~ticeigXoXoUNG}Q#X z+qwJq<Rh8Bxt3_Q>%{eUcG$eR-v3O*Tz!<K*zEw5y%%Q!MKOChKnp{JlabLLf!>3S z@_fo4@Vgu+q(?wyojBDsk@2UbW9&LDfV%)KgI21Qz@%H9rP+Ud5#v~9gVn*u@a%vr z!&c1Vc$|Sj2+N}au@Vq^OZDp$dTBI?DUb$0N6)o~FK`4;cYcYfH5)~quN;MZ9j7+6 zUn4?b00Y7Y1i?B`Y9gkUspaB~`g;}*A|U)<KH=!lAi%R#p4q0gH@a>9Ke#d|t@9m- zwd9mJht!9pc8s4=lm^Sl^lSlVZVej@0HX1@#`Rmw{f@J5KF>N9zncGUUpV`YFYSdG z=KfBXL%G@r4pUL-{8)StG$9?tD;SE_6rx=Rb&H2}aa6^YJ`x`VKid>ek$8kZ&~{vs z`aH%!A@gcjj+#|By`YPEWSrr&1-P~MX0CY6aV>txK7*p!L2ek0#?S7r6^7p{|5{7e z;O`TUQIz%FvW2LvrmjHv@?QFwPWDWUKML;4I;YkjcRZoCXg&Wu^)&96zs{eaOzfZK zg|i)D`@eL*!B>Q)_S}RMDPd*ObE0n}%rglLxa22$AAL$4BIaEqekkLR!MH@SHO(;& z#g1oE!L!)n*@E%xnRw1tJohY~_ZW|6C-4~t?h&cCm8na~2q2R>2OY6&5S~dUyc`O* z&G5nbgippi#@QhK_h7cJ5dyP5lp*-XOHuQ1K=kX~4Y>1o2KA0BQt~Tdlg&A!IUI(F zR1`tl*v3GGke|Q0&V3CJOZJ%~;%Q4fp2}Za(Doa;Dc?k}c@_KErZsxIB|0#e7;G3B z+)50b^$Xu528%>$etnqLM_hoD!bn7TCMnT2BK4etd&(Y{q7s*88<!p&mzf!t-5QrO z8<%$+SHK=0Sw;#Xkxbm;<Je<@H=|#u5Fw1<$F0ONH$qVvsbMy5>NnWSC&u^q?qvhh z`JPy>W2KwSVGjpL!kZ+`mc;Sd#EIiX3j5RXO{xxM>ewUL{-vivB2O1*pZ<68%dw<d zQb}63P5Kg?w3(T--I}yJoAmuSX^;KcFO_Epn~4cHnMan-PTZ2JZQUOlhV{6G^^s6G zraQPn_!Sud*_KQ@mrVaB8O8CON%c94-E+2(=j>U}IoqCd&pqe;^Bm2Q!mpYlV3#5k zk|L6oBG#57tO|Ao+|Ch+A1@~k{T7D(q4qy_0H8jA#$2k_pHvJ-nvQB3)-FvyB+W1@ z&A2VibS};OPnspii|eW{tnFUdguJlLdU31mh5g)%TMq$$Aa%Df7Oa{~ur_BKqP|j_ z3Z<lb|4H}Z$naCm2(Zft49N)2%6QV25jK|*@h1bvkx5X^jJC^+4ap>BWyZH<CeCFh zm1n{+z?D7M3q)AnF8zV3Np)&^rVQ}xPgVg(c9Cj!iCuPSNOoCPc12ru)m8>v22ilg zN*Co(cxbOQ5}CS^Ro(WobM9r=pO<8goL<$O{_<={K}4ET`s}rr!W+WMbAD}hIsd8V zPTS?qgyha<<<5uX)P)$#_2jf!CAXfBAll1wzl7v%X60?S<?TMqg~&vff3*gTUS?)x zfqQ6=<7iJrX-`9FHtaHJlcB){)Y&+=5gGWFRe)?Spq($E&(2*GO%J^;G~a`~2=>{; ze2<J!$0M}ED}|?`wEsdfBryd-?nRP&1!C<*67xk;Cq<E}K$Q=T!V?-qU@>*N!!Vjw zeZE-Zq*#ly1fy1>bE^dVq(ncv#IU`@c)rB+q{N)_m8IG%%_lTf1%+Jmg*@%~XMghj z?23drOXV+RBPh@ypHep@TpTF&oG<l0DfQXTfKX_slIiC5=$0|eTeYu4pYZJNy~f4U zR^nbAmA~R0eWkGd%4Y;{JfAPiwgkDjm%2SEeN|hUWLN4gmXYaR9?@3rds1G&SyAMk z;eYFOQ1<I5qpu^7Ws&i;H`@!jD_)(n74xeV1!O^m+QHhG0&7c<P&PF5A>^hHREJV- zmRw#OS1wafKGa?nSzcAlS^b|{wWk^|?obhQi#aTtzH+o;T&Ap64ONdUI(t~@uUY`j zhQi1Y4H=--y$FKJ3Jw8!pFjtZ@QLko_#P+-1*fY`J#9Bmc>)hxf#w(k2n-}>59Yj5 zbw9gQe6Q9uzRF9qE(lje{TCL5ff=r(BQcPNGIfmVwJba72nvKhp*H1KZL%@I$5nsH zqnx9oj%OiV`ut`6basPUM?>tx>e=`T`MT;)$g=Uhid7`=*|@T)qU;ezsgVr84wMR2 zqy|w#y+x~jKdEI+s5kWiP(E-!nflZxbrabDB(zT6wa(qW?!`&EXGbYpN3Ed)K!pRR zwl_mA{EZKrAGTNdRz7~LUhc)!@<^rypHTW_tRcRmHSu=F%sg#ic6Isu>zSU4$crkD z?5z5V{65PX)17qloviC71(F^a1`bVL4<UnU&BN}^H~?x!hHDqpA3p(v7v69vfP!if ztS&9LTFQTIm-~u#s;hz?k)fA-0EXHQTFcTfG6cby)&DmgUeMu81|yIeqkmzJJDrru zH-qO1ougx&OE2F(4ei=oXnn@j7Od8`c&jZvq0Jzn@wRb|$?Xi`lSU(;>W6VbK21hn zeEYA_4Bt?A+}|eG3K(l>l{hMkIvM6?38Gqo)GwqnEWUl`UeBS?$z=*q$(TEHHS^`b zE{u~D&J4bBM8n^7DioMgy#8?lLU1viFA;IM6MRLZZ>ytEL!)}f<MlVL#tLNjl6&K- zdzt-{?w0JzAKB2Z(aI1}XrDU-VoK(r&A2k&K{F1QTc{H5Ebmu;%V}D7AK4IY0#M`X z9bPumj#nKUzde1@5>YwmM;?5jQ8$)7=z42Nb8#qw_Vv}Uitp-;86N#y70{cO(B5+y zS|Vpr+^r0Y-LkfmZj$Jr*H)9vm`3C6W=nLh<{nJkvzh&L@OI7{Z?29%YCWtH8E_N` zIo2`ZG3s4DD&9$sS?HwY&Z<5gW%a4Y$&~uGjdk2^kF*~j+%3R!_phNFv8Ii&p81$P zhyjM0Skd^*KBIV{OdDuQ^UR#6Z1Va8)X{XrcmNDLZ;&`}q7U^zN5>`0mXy5?FVj9V zpUyApV~3pq8RKt0h5|?#$gRI*_glc9u*nS17H=}R!L)}bw3jUh=6>sK#~An@Eyd^J z4oNpL)H%f+p7+e7Vsw1`y<^)hx_ecO=9n57w$#UAsPjBBXvvV2)5aU;Vdbvk^(_fd z+7-a%HaQG{(1$fIHIA&%)J<1*h>o@B^Ry(80V>pxEKLRjZ383S2iMU7)29W-x%H-I z<2+{{h;e}kY_-$b%b6$D7}`dDNge^O|G1E#5lZ3MiavM>qJRYAZ_Ri;1XwBE*_6sf z?s8`jvLvc@YV3`70bogn%cAPl5^Is6aJmk1iGAI3P1xPsi|=`k^)~b}4crj@_Q5UH zRJysB-#)li4SL-M&<ibWx98pLRWEVPizSpg7fd<4D|+&+wBys1E8TzYn*CRJx+gV~ zV`>4!AnkyI&WY%~w*chRZaTyg^j;INR?kV#S(rb|di(ZM#QEvML(SoL_QP4BVd8Wj zkGJR+ru~a4V1Pnnjrufar}yI9Cuy;nPhQI>k~u4q!#bvIeRujdG!yIh3eWsygmE%v zJ~Xe;%d=UZ{_?CcX|4LsEnk*g^fX(9-1U2aTLM<-z|Z?z02=zct1J;~B6({A4_ABW zRyd?qxJKz>0H7YAgG_<aYKs%e$XYU7Q0kLn^_q^>dcw<PRD3>JatZW(oGaowFA_k> z(E7gp4{!kJ6as?ZW$2r)d(VBkZJu#YD%+7aM_=oUeZ-eXssP_f1Eynq;iPMFYGyz) z+4t?MVH9mXKyzla=C<@T;@{U-bIbqEmf5?w{g&3v&%Mit^KBd3`D<v}s#+oJf69#j z(1=E6L~Omr(7Z-(<^8*8C)h61+Ag`fT^g}nmbYEewOzHeUGs0dmUpLKYp3z<PIJUg z!344wO;4y9_wJgBtywk5X-vu~>qT$p-W6cpmT6tuo%pv);r;fX*0<@q-)6eD0iSR4 z7i=Ft?c1d<kLbTn_-^)fwI$vymK*)H-SvHU>HGJ8-}iWb{L=a{Gl5*LseZ)Evrb=W z=-It#{-Z1+%0*@mdT$RFxrfN#Lw4`cM20`VD*&F{W4ij&Wn~YD{K=mGle7CL_f>)4 z-@BxEcV#Aiyi6#IoBx?lj|d}&_9=x(KJ$=z<{@^DKrnP8#rXF9mG>2&{nA+8*E-+F zJlf{7*u4CP`)}T>{-sR_>cCtMo=7%l`K;n^DPYcUSipa1ntyn!`_Mk}r|$VqjQ2sW z`L8cE2lf^)*QlSbbzyphqcX~_$MT`y)!za4eoy>6T&?-x{OsV+<DGE#q4%4keDV>N z>A02mcVPZ;Jm0suuH*fr-+$<N4DOW)T2!9XA3u!zNxCW!8@coH$8iDQNzuLE$qc(r zSATI;?9v@ZJu}QJ{4RBA`Om?>KlS%^@~@t>=KpP9{`rdUXhinU168_S^l9IZ!uK+C zL&>KD6q+rmEm0~c1_RYWLmwvZzPW4k=!ZaAfmiAI(w~?IP&oj4os2BSK@|X+Vl;SE zS7<9AR<DIr-m|5bKlaK$n&dmvv4mFoP&-=x1GFJCVgxEWUTiD!gRmSmk5)AMwKZ%! ztK{AO%xj<ZlXx^EG!Vf5!2Z{{$%%H2o|4_+%$Ka})v^^qi~U(vU(NG0!~a1!tv4-; z^q%s*8!_Ly{-8?cat!B<?F-hw`tCsXjY^6Wko1bV#k{KN@k|w6vRiySn8WM7g5wRQ z8#!>2<$z?_3|3z*-;z;+6^o}6yx2gX=xsnMuVcQiXp+QOV-+Gz%)RA&9Qz32=NE>6 z=Hb_R3fQff9N>nd&>;u{^hrJm;Ivy`oIp>hCva$hppxwB0!NSsRFyy1zYr?Dyqe z?p2~xr^ii4*@1M)&?70V)vXKZ9P1_4V$-#eH*$ho@42-|=nVJ$FV;OqS*A_0uY`KJ z^!I6CN+6Vx)=Ou4EdMWBO+{326x!N2q%RF^>Tq9!@Zaq>Z(C)=H)uQlB}{hTFkg*I zRF_bXc@EdazIm#y{}2@4ZL>2jebBk^UEYZD67}XUr8beD^U;-h!z<6Qau=+Bj-+zB zJ;6w5g^*BVEMBN<US68lUT-4Z4V5>|x11`^bm~HSNO)ihU2)SWr&k?6&|}h|4ykJe zaW~d1aWRZyBsAT@n##%~f;ZLjJcdTa@D&)WLP5*JKgbk-=+!XypR+2h6ySxvaBaXf z>5P5SSVc4tisQDc?=3JFHU`2a6^B9`@0!3gWylzhkGiU^A~SPIih_HgC$@rvuxijf z8or^Cz--X@<q26!>_}&W38v(rjUSD6AsP7&3AWf1u(viY%75+$@e2p-n2m}Kl(Z}r z)w{Twg#O-WxffZO{hbY{TF^K9wxl33-{W%J6RW^Z!yj!MszUX`l77?i1z9I~mvCEI zAFBg}HnrB^X|L}<$o%vnJqivSF)<cKhY2riUG>|BM*dUTSW8q+uL3*lU|pO@x`+^r zwL@pqwUTH0g53}oYmxIs&L7)S3S3%rucW9&`*#%-x4{_=fs^{`-=0t32vrKW{3Nuf zl`i{sb5P-d*J!}MjgGrvhu_qFdf@N|abN=KQMHTV0MgN`yYwJ_5=w_O<XM9Qm0Zgj zGoScu2(T*dR>{yqb@Gz^-Q`1a43J)ffYeKAH^P22ll?l-di^ci(Y$s`<$jU#z57R2 z`d58w-WT&;<dzOH+V!(PddGdoxf`?5ZdYFCkQA_mWAmGb>cyD%e0jrj%^zL6&yu$T zuSP6<{~|e>c_5?_DbWD6k32tzJKQLR;I^X$g)=rGx6n+lCBt3^uePCB1HKkmCMU6G zU@#H9wLG+?tLGm4qFHyY7hj55*>X&@>#62WK^H%*H7ITcSWKrB83TQ8BtFE$R8{J& zs{km*5=^Uwj^C~>ikeBt4X*!Pm7P_Dk46uNxg9H7dlrI($!pZcXq~t+i->#B&#kj; z`f|Oo5kK3PJHf4kRi|dEp3%<S8^NidqAej0TL`eXSxQww1^$kw&0@hpCq<=0SaVFE zgqzw}VA!`e^!>-)hKd^wrH^mEw?%Q2<OVK6u+rNlx!y+^w$v7vNl@N?)4jOdYtn%b zqk-vKS0y2*r^w|$CR@8Dm#kuir4S~hOJgdgPNNSJ2e4lZCfvH00oSBSjd-p$sF}OX z{yoUKM1h(&80nz_0U)g|6`g$~qcnM2UdX&XI|ed{nPg#BAGq-2fprRmqzuCBgYwui z3%xFb7(B+gc;S*)cyX{)%rmYhXd{zY0<gRO0Z#a$xNhe8aNl%2PRbF73jQU9_AmOL z-P8{q5j8AB$9xomCfH7`$YbPU7`0g6Tih3eQ87M{d)#i7#GU&3s$QINo^^L;`Bb*S zr#OY@?bfA%57kJ_Lp&fKYE6Q_I(1w+sIlS(vu7fj?E+a!rT`ETCf3&^T`Ep8fYR9Y z$QGqyqLtAmL>pMa3<2@=5FB#-p)PM!!I7tRVTW8nm6;*!Y^iH|9VY+{DqBCNN~GYr zW+qr3-toBY2!p_U&|vLkH%6~!0!)DnGpgd0Y$0CB0W&CO-2&aCMiH#Ajm;G10nuj5 z3=T=gvTiD=#g$9;Yc)<;dXFDiWmH&iD1B_}r=BG*K2O!CaRicV3v^hR45QXbQsF?q zfCMwI)!wQf18vDS`n9nKzVtc+{*-T?>jgje@Q*8W-+XSLAzoixWqBXZiC)~tSOIIY zDpXK(^ZwX$7#LNxBW2_PGd<|N`8YB7!tLvUx<%S7>5}v&MebNJ!hg5^GXCygK4Q<> zGCOchmV2$smsxn+iD%K%UWHkIb-0A75<MlW!!)h;({e`_LG2ebcYYhiYhc^7|JcxB zhx4AwL*-1glyCZTBPYr8gZ_u6KNCI=JIQ9ujcecsR=uxd0B)xWV0b`T_2YWH%b0>O zr(do#V-#p%&@Lpx%)CQmQ`#?!GIDyck?!|EDJ5&_nNmYmK|8(Qiomm#5`Vq^1_6v! ze+KqMJ`M78LpLKkJhtYYkC|o)_A|qOK)^xe{cnq#w_JG|&@h11qcU{apZ@IHo!S^p zPp3-@vqSnyU#}~`FM4>KMq&f&Gv2zpw=jJ80CTQ<s^-x<kiBrRFL@DnvMKS<X5m&K zSG4N916vk8{fG_f+|c|HB7c$L;b_}Gm_3U4{g?S@P`Q~ZqWRo|VKIE3UcUA37q1xQ zu%uYs_m8WtF*G=+W#KX*912~&NkNOB`QRbLdQ!hsp^IpCzL3!yH9u2a=U1eKulG1E zDMd@quZB4vzk5uNk!Pf+eHNm5DWT<Gbm`M3$MZi^b2t3OzIEPH4SF(7rA+4t032~0 ziUZ=`{ayuq+JRV{d>k4$cxx1X&r&&b{_p)#(wnHY`>T&r2DF0O8Ps+kTl@#)p<><| z^!&I604pCRlqFb}_RhG%*8a>K*-?rYA(_xn!K)#oH<x~8426AB><*a-TH4Qthi~d# zeez$%(!pzk@a-GjPu@W=ziM2=ckf>fosZ;Ye)9G2a&a<MkNA1lz1XX#T;W&4o*Z_n zeMgyS*88(r)#|WM;UW%RT@By9xqR}mMGL6yKHKuh|NG(hzuyCV5u2&^PQMyNo_y$z zIBHow`$3F6-MAWg@^Sg!@1e+lhv(srDpbEOj0#Ivv?4%Vy}F$sEM`+Cr!PxkS0<rh z1!_Zz4Jsfb8_6{NWZG#m-8z~6fXo2xL9z5O3iL23^e|(4Sgd<kU3%C8dM-uxu&4EK zl=N_3M1XtUZy^}+&RZyLD!88jIq13UndF3GzwOaE=$!NAC59_N2W1a8b&C!N?iFk7 zrAdR|!9bl`{}1agE1=7D5o^Ei>1HPL3iO_fgLE!?_Nj0u!Juj$ZmGZAdg-Ex56MuQ z&DcP8?GQ4Rpd~>Z5fz5&^9#nKC@_qRb^r?IjDx$d!wkaU-l$mP1F~jLv@InT86E4m z2@4|i%PJ7XgTaA7f3PKl#t>>^tsR1b-D|}<ZpH@Tux8QNdp;NPQkY|F%)LfEJC?zF z3NY*<*-IuyvI=9EhBXf8*WB&9D$(cOIOx$o=$Y0de|q)Pf~M+0iZY9qkAOiHPNnKf zf?`|Wjp07pD!33kK3D>OmAxmlHJX_;beX-+uN9;pJ-|{G%g9c6>_9-R==kG?7-fd( z1BfQ1A;to{a{$pm1aE^To-@zlBX@ffXhH5S15CjKY$ZglV<6BH#<&6wUK#cYhWoMO zY1v1Ji3VwjBSa05IK>c|26qiMWEFv6Xov9<hEf8<#2f=J>}ZMg=qs$Tw`pHDO{ZTY zlW&etd82W;jMi-k&QCo-%hQ0i1U>}hGh^^fX+%quVX1(2Fk<vEIf`Be7A^v3l_4;0 z0`7~L2noEh1A#e{;FCEV-#MJfqMOt?fb=BhX!JZk#RarNSyiwZ<AB&fEb}q$F%Bxd zX@c4VizZV&!GIZ62x6^Z8N>+fh3MKa>YAmYk>^-T;#h4bWRC;Sqhi|B|88;m-6v~p zZzxU}0M5BYKmhwhWg>lr!o<2jyh0y!v#!AgvzkUf**`gof2FsN)^I_CD62xSL16`P zgeUA#N-_jq#0y~uqY!jV<2w0Am|kEqOb`(jkW9QL1Ljfz8&imZIHGnywCpkdyD2;f z!OC?pb95jE&6?|k5iCl`k87i2@dS$ixJfI)$Op_N5(WK$X=WLIi~&cjPX@>kBi3~^ z*JBv>@PT`=jK{cZiIAR7Q12oJ;l(a06B}4Yp?OE4dxZfjf;omQFjbR(CBSyaQ`X0L ze)bsVO~a5{sLt*LUy~*62TS?^*cE^vR2%($-Lh7|C|Jcv%FRglt=@<!JUEzmj*~D! zavQalU<OLaOnM-o7Oq%k$iOp<dN&nR(5uJ;Vxhnvk?{IHmP^=a?2YM9>-z9u!j&@I zOBrAzjDEdj+Jq|pmTuSMS>q>VDsQSVL6n&G=;4b8dSVF0Y4H1qX{PF7rW<%Z2Ru_S zC^-xs5**D;F`z%NWN{+~lOSpK9~dn`=!+=|BI;so>#%=_8D&EhNaWib4w4~Wz~C{S z{Xw>HMHLV$$$*Cfv*E@wx7sA95%mB<z>S+C!En!3uyHHg1T%@0nCeJ-AIAd9sk-Tm z!g4po%4SY--iTrZE?8VMoBkrdaJ?W~3&vzn{raRm`$s=7s`J2=5#OgnNsB}ik&n7z za9_cX&f$6#ftjp+qKD<p$C3nZ97V!`cpr$07bHfwjIeo)2RRV!RX{urBSD5{*w&ca zB&r+J7{X%FHM9{X;AZfPk9nFOtX~azw1S)t$Mu@#D+lJ~Jf}r02}V>nb^zcUjuQsV zP2V9+6c-vd;$Q*l4YoSe))c)~8;)dxZ7tT{@PiD62)_YgJjOHQ2tMpaEM=yA1+cWv z8`n|zI~!ys#bIT|*lACyV7F^NH!Nb(sKPLC=UJiw#wZv^^en>!t_;OMr;{|`0=V(; z6&pSuBEAV6(hB7W#?O1v@CCzzF@s^laK&7!bFB@`%ngv}F-WECgAGO><zfZQ!UuT3 zzK`$BdJ+97MOX?vsH}fl@g{K*WMjV=>@!Szj1Amdx@u?{{d9?uY?OBjcqQLrb%Q^w zwOI(qlT1y64abpb;}%#e<hs#9fR#Y9Q7aU?(z?J!9-_xwr&+(Ve0Im>)9v6{;&mTF zu*9_PyLsA~6}rG4{c!8NWBoT&IJo8Q3d{nN&FwzXg1Stq_zvAxuWK%6?~yE4cbdq7 zB2yTu{^yH$56TC36kf&+ZhwDr<<&6O?b?Dh(OHnt>-KK!5dZcSCa`sgF%zV)X@#`L zMn+$>J%fT<?YSN9xWvG}4q)Kki|1UmAL&?@gjxyLEk8^ABacym1X1ANMf^uW=dVq+ zJk6MqU07h*IBgkRpcb%mxE7;fY7?M`nf@#z@_8V}DVzisI<{vF7(tcUU3#SxOqo+U zoa3^@UqM5pQBnF5qrv?kY?uM72v}JK#N7Ihw#sp^iTv2dka1(>&X<k5Fzwgtw{li0 z!LuL$O+ca?bI|~cQatm6FDBs?&3*LTkQ@GGW6UC8-D=Dnozn%}iFvEnsfYKooN~7W zi5o8Rf5F5Z;!O~1SS?UXGKiBB8-Ovn9YG97ya={lK}y__l5oCbW@YpAuH&7_%g5$A zonW2Q5e20?bp0P*dJ@k=Z2Ot1dd6;mLShLY72WU$>+{hA|K7QL^NNwnoq6V^x39OA z#0w5Sros!{(|7^*MEC2sSknIc9HH?(W1VttM&#+j$M1d$8YTuB-p7~p?v4{f5mYW_ zcWKujylo=;&$_a@S*jjxRLyKxQ9TemF3m~Cxeg*-*>=`<k@$z|Ky9Bz%);WQiSnjx z{l&i9h;`(m4P!9=r74`ZEA|pQ7|rH%$O2kCBr`n)387aa^|8SyV*i~*8YmD9;QTG4 z{ExosjoZX+*x6{f29T``YpC$M_F-v8oF6cqF=J<^Q`cnPA=7LZTrRr5wE>44oK!gP zV?#r&%^<g_^CSre_YDyEixCTO%_SV3r?K^m3P@XW#;3vK&H(N%5TmWte-XpPE^;^( zZuRc>XR!Mt;qJHS4KHjH4On~499a8ZZ+F2D?1qre#qHztM>P{Y3|-V9iJeOH&S~?g zTCbXA8F2`5gL8>^?J1u7#huqPMsa$en`Y3i2Oz$(*q5DgI0?KM24Z(i9sR)(Kz(En zhN#LAcpTuttzUCgZi*&Dt!mfP>|t^~1iNa2ydl&!{C<Z5Ea?m3KI?EX#x9B#1Zi6G z)dk<VPkbqIjj@&B(F86|_Pz;&UWBVW8AJ*%7ziF>B;i#ry!D2}a1ul^0|K4#BJe=Y zq2CQX&{6VNLD!`qGpsh^a2(UquO2a`dC9wZvo-`putYtfet+vF@S|X5Xf@`3>uDVH zYCn?iF5S(AKd}e&yW2S{+5m!3a52`#0RNWa&b|cr^$YpVT5p7sK_v2<@lQd=F#a2h zSC6gAsYXI^-V|=vZkUr)Yusa>C=XW9{<pZr7qc%levQ!Y``*BdIuHX?+*n*c1TW5c zx7ug142LDdKti)IXBWyGzhZ=87IY+#UD<>eEGF@Tn(rg*Lmbldpi9ULWf*Pn<)_zB zY_!G&e(}<u6h()&5!r-=tH6V;LBc9{S`?A(MIg(br_0md!*^rRl3<gg!}B7{2jVo| zyOlb)AQn@N*^AxHO(t4r&O7H$<^;oYQJy!use@{RS&|OYC&@<LkH}+$TnAiUSqLzE zV9`x&@$rvJ;)4MD9FT(!!@(EP!EKk<<QyFF3jFuI7EG?8X#jhy<MG3Mw+m|z+zl10 z4~?%hfZZcgKhBTW$X_ezj(cq}epewjck}p=?eDKxn9Fc%Aca`466;8bElECk(H&Ry zY;1TUuHW-Xi}D|izF*d6(S@y;V1%C6FtGvNU-a=)QRGSPF!3&TthDCeq}O3}fqy37 zU|xq=GcIXneT+jn^u5I4@`kAMT*INX7x${OIq8cDA#n%c^TaLn+zNiS6xsVsfZ!2+ zZCUu=n({yTiJnFAGvmm!2T~Xn&j_DHVsOF54qLc|A`v9QFs1qL`@J5dBH>apXs6%( zhw}Npa)iT@_GwZ?k<Zx?U*~nog;<ID<aOko%!r*9U8T#gN-)Xo2aHL=Z4ccWjl3l1 zxw&__pTs15y~>s`Zy=FV*>89A=au1PeuET=hjNYzHkmMuxc}sk<05tdK+@S4n#fTL z`n9{YFH9-WAu>t29|)(H7-yAhY#)eDmtB8-z1say%qG9xI~|OY=EYe96$e?aUN}*k zIrDn2og>M`R==<RReSuFTIyu5s`328^nmT99h_OpbGGci^H*jJ^4`10vg^av=e|_6 zFNE5I57<BspaO=spe!4~_Z}w-+tU>{8@#`rG}(7a+!>6vvy!`j{r!c^M_Jx~U+E<> zOXtb+DP`Z045h+M=43Mh<8<VHWAyIse2f2&?`P`4-|Ek1=))FNP7Vx0o&Qw-(>y)? zg<tDy(^yjb3apWi30`F3kJW+nQiGfK8KgVy<q`~++53{DKQ->tD_mojceLNa1}96y zZb2;sY#cVTRi5vz^u?^cEp}99dUa)xUc{%zJdm?K)hu3Y`*<d}@r5#9@_yadyUBW- zAp+iGKyA+bdmnUDInS<T#NlXjok`LhBMl}3Oj*o^>E|?eE(W~6ZT;U}u1nl}juv%E z?crlKzoISfLBF0vZ@=!GET+=f`do}<T?M7!<1VU?TqO&Up!cH--+2UYXIU0Rsii%W zPTRyq<uV$zzt#)?H$us&ZY<wSD!-0p#@658H&foCls(frogKBfdUpKzS&iYz$?Vl0 zq{;f50nShf>)S7iXd))2E?6T?Q@ahFLlGtu{qLvzqzs3^Tggqc^;8y`WJ|)7!Cs@N zc^)&e0h0?aERJF=qwh~*XPNbw>eQ_geTF`HaNvYo=@gnQ{Z_Cu-+9PC{iB8M^0;XC z!FO@SF0isdBD9`_*HvMxRQsi0AHM&z3Nm%8viiL3d%JkO>}|o_+JuoX`H8`!VtaG* zTe_2qfKLIzZJJ4dLFr{@!-Q1qiX%xd`7~rg>IM6+(Wx<OC&igxEA<IN0k(t<o$rRu zO;QeBS0?3da1|M=nJAwHOiR{8jm;!GR8!R2XyqL>+m4+qq&@^YAr<rbb)3~VuIqfp ztS9<C74FO-tg6L@%Ec3r<tBJ_4pZb)Xm$~%PTgX+7NAn!r64sbc9ZeYn%i|wY>pbT zAo|>HW-|#U-V$VP0h8EC9;;Fj1gT3KZO&p@P@s<V?UJY6*V4GQr}IYU8G!^DVWvhh z)BgM_uG=qZ&K75i2<NveNG3=yr<1_Q^EV6!Pfu4`L@d|>WbpHaZaPaZ?};N)l2C8K zk^D~ZKcyKlHWX4MJvXb47&h)x?vK0AQE2+csif)Zn#U*Nh@ZDWVveSl**f;EVx*wY zZrXzUeg%Vvkxts@qS4V+{&&F3AZ=8<4;l_#jyA=rFEFl?Rzrt!67eEFq(m1RZUn&Z zB$uY`eZR$TZp=?eznCIn+s}E0^L-g_B*odt+r=hgQ~Q~9@D~IiH~&e25z$&$%syt> zFGSEzz~}U_Mzs#`-IFc!fD+h-Y-7ciF0#qZUe-X=y0XUCL`{klM-3%PdcKaq-gE7F z4XPgz^>YYA|BL4f4k}rSPdN7o@#fChi&4+JObke)q5rG`MGvmR4Bz(oCWj75TTLbO zmy2d(h`^L8F4F|(K$ufozbG;mmT~y4a^1)Au-ILSHFR-6oERENa6SidTN0S~xd&l_ zD44OO&s`dJ9f^Pf>0xRo(2O`D@AO9UWQ;@(3%jeTXrsC8qWry85f*y;R)8D#ITI$z zqQxZ}<5LUabxQs!E|*+3*@WOJQos98<T;fT`E%?q>xb;~veHOPo!oyq!h%@iIBX+{ zjcE^0vn9~==~@BpQ%k;|RR!f#KH8-xRS#A5l<0i*ok0B8GoV!~I!HH2?#0ohZoooe zEO!Fgd0|;@U8@M}JU4U>E}GrXbAL|?d7S%=<+4rF3ACmeQoOY&qOtNP`oF1E{fG}D z29e5CUY$kdH^V%2>Sx7X(5|?Mh7vE`F0GWQsB2Ic{d{#|b8af-NLGD}x`C{ds*>nH zJx!gANw%TZ+m!T%suKB!`{`ZRLD%<uVtLwsE@(LHnJ>5xt0_#8@P>W2VdXGi>Z}C< z#W)2x))VkdNVXsCNw=#Qy6mF;%zW61w?xMB^M3*3z5(FC9RS8Z|8wcMxw!a8>mY+? z^71KL5Bmwbh;~8GbXco%{H_Dh$aR{Yw&_E#(4m#exlHoxH8hFpXL(G%uo~^#%5nk0 zJK`8q8f0fw@cAHlD2gUNnWf9Q2ePUU+oocmWoGF)c(Sb4;kX<`>CI1p-axL(I#U~x zc${B7*Wf;(PeodDN5$}@C=1dD2B`39^ZttK7Ia7#YIBguV^l{T5+TBwJW@i4*lQvn znZ7H0R@GJ+*Dk1}^h|S|qlf8?1c#}t5S@EkwV89zzsSE4ao`?6B~X7_qq@yfpA<oK z`K@C&7Wmxe-lD{~vHC4ayv_T(e*rg+3%T$2)bV;H_PPFpECdBZ7@{cp#mm~yF#T)Y zKYR=%Hyvo~XV)&h4L49_xdy+TyfrgKC8Fe6m~itnXlCu?y2vvAX~nyvj{_x-wf`$@ zs$K=X_y9g1<gERmVsY%$IhaWlzP{cXGxs0+9}+z5<58lyh`%ItIsXvTtc~^I*bK9h zg7#qhI-RtOQ(#3}^)jn8ZK^q2i9Bp*-d!fxbJBrYl!dBbr3>HL#`8yn#RMW$2(>`0 zd+^`Yqh7m4jd4U;vhVU8u~4qQqk$j05qp+<YFHA7OI9I&MsNS~Q`4)m-gOh#da?`2 zaJ^h%GJ{v8OYtX^P=e9l%TgZa)lx@VZ(7tml1Su?B^+?Qqp?+E$^QOE=l%<(E5FJH zlQMojz1sf$`G>WVwlX;rkE8qlfF@2=FL^R^*B*9cC?)N2>YGgiI^ejs5t?G4=BdLC z>ygYl2P_jD7mD^PaNKyYDX#_hgxfBU<`-b#Z`9R!yf|){Le46D)v*ixVGkl%Ap7)I z=H1I1+x?Pk_6!44QHzt;TiRyBsj1r_>?xVa>NU?3bOZR=_Q<i9Y6`-?C1?-8L;MR5 zn_fe?q6?sozaovK>J?IXwy(6SJ=;3)Nz%3l|DE~6a*63FP%q_z9P%CBO0d$)H9C8b zfsPk+BF0{5b6~VN5R<o8qhjgsP@yccfF1qAOlLvc6iEk2dQY5SbgvOpQFN5W9{{4Z z!sh_}!vXz!jpzB(VFc53-Z)3p<2y(KTC3AAaRr#mWywCXrmtC1cY&N!7YKmtwRg|+ z=@0I)&V6Fl%hvUrx__Uo#$kS$<L(54*T=2!QpBpc$P(A8!3CEHpz(-<o=6{^7mX}R zrvzSmy4Yz*bKEmI1R;=PGCHJ>H<+a1nUK2~#e0iJkQS?oW2)TH7NWZ(8$%O&TDS!w zi^iEsN%pGr<MFi1GA#GnUM)m--n>$~AoI3Qi+m{-k);Vh_-dn6J(rIZwS8Hmae}BW z0b_f;+)>fhYA>D<I;<MY)KnTepAy%7m>K=SPCV0^WQ3EYje<5t6+TU-_nE|ybbXuV z)H}!cHX&Q4@k+gYLYBDb%p4sKhtq+vx1>cv_2=By{A17fqOiW1SA8>0=T`<0vwS5{ zYBirpr)z(wsApKmCBza1a`~qJEX*UWAgM>MUQbrJNGlu>>bqCeyZZ7rSKqJl$B+}k zB~7*6uas@BMSr6<)G0L5;asYQzWT;9W?#6BFC6!|Y&ucGwhd0*OT3BG<Msi}pt|cE zSanZ`6s?Y0Sdoy+CG9j_bSL;}PT!JkpG;2b?isa)NL14yMH+fjgY1|tb3HvXN@zUq z8vn+;h_25_ltRF5$pO5?dWxW1-(K8JVfLstZ9bV{ZKc*e%q-JBC`znRR|Behtt&&o z?GkpJpE`bd-t==<tuE4WxRVm6A`_3K>lZpsr8OqY!gAE<`-ddYF-0zY3P-H+6U*{} z?9a?tShch1Ws0G9EzWX2OO;}jHA)IrAU~@d?0mIV$hx2!BZaC|gdT*7IummrB6vD7 z-c#W1E|e0U_;$1SK@mh(@rAEB!Y^s`{y*m9o=^1V#nB{);PGW=Ht3M25G|pv%)wge z0YGKDsBZay@s2B_kZaEiS4D!WI_Wi@R@c*MHoBjFiZMFU9D&OdU@>;owRC*dB*1>3 z(~K>_R9_^9aO<W$%&de>^TOzg>YGIM@i-c2uSXg5Mk$DZd3Uwb3k2iW@Vuvj>ef;G zn;>3^4Ueuq)oC#AN{^o?HmSW#u<U7bYZ+e&p(#rwzT&)0ysbBh9{fXZT%#mTU@B_= zMS{dMB;>;e#&YYj1HVS&LPr*VCl5GFitvM52=iY7qvGWU^wDloWNb{7(JKrr^Mx~y z!%HCns@V}5`u>h8`kgWqNssaDt?rGwBrQAcJeEn!!7SL6tm%kQs4ahBPSWTVrT3i8 z%PQ8<6tm*6%ykm0s7-js*srVs%2|4!pS;~wLSM>1NgLyy!-Tzh_Wnain&doljtzTz zFhkB@995ukfpzKe0rSr84HaB`%`FSVSMD&e=r>Lev^L!fzC;!4RAAafUw)x9>5CDB z+>C9~mmJxa+XP&1h@_Z`wAXlWep*kFAjYZ<P2$dV+-eI+YS9Lx5QW8^>OzQu$SrIM zM8PFR`?yk?zrPnD(IXe#-Nvqt%o@rq%A)4b4jV&w=_+Xy>XbwUHbJx`Xf+yjhpUXV zND>Fyxhlg1#8Z+MDm(LRthBL8;=d7PESDucR(-P%|1e6zaQNMyqUhs=NDke}qhb|Q z_1<xjY(d807hR=c9qlF#4GAx0ds>|^$aK<ho~`G-o)JCsYFTT^$BdjqOwn4q2};Lc z8S~7Mbncu0B)K_LDY|-y6FbtLIeoqQ121+ssfu1wGVa#8I$Cn1*;X5mT#XQKHBUEA zs$|u2W2^UgURJqoQ#0<VYwij8;ti2&J&#iNiP9A4Q>%(n90%Vji&@ig?3UovMSq<X zv)tP&x0H<@%+_Cg098wLy)7s?F;k=8TJyuE|C>(#UTMuwsc3>6G^&36)!UK{F!hGk zn}d_li?%&=N<W_GjvA>?I?q(jO;^rGcM2P2ft@i^fL3y2e+fyK9QNzhK04uqT41rK zc|ZOx-O=usKA9NHEh;&gkv2zhnuT%8-<AHm_U3fr5m+8uvL(%Sx&K5b8p4cKsC^hy z*LNaTd#Y3WM`;iGRazU^gL~}3D&IiQ-w?j^|4bPN6=RofIJW70KNvMQn5d<@VszyG zMupTj;-agh0FkG~y-mMRUq1r3obQ2&K7YSs8U20!CCO0B*TT7csg-@%<{q&Ueb_!^ zuwDAel2D8Ai2f^7rxRSO%k6XV4xPQ?^P*a0{vNZlESvgICg&;cp`Tn)GCV=D940e= zPJDUa>?NUpYD-ABsfn;H?S)R)@+;Set;-C3_hE3=Re=6PJ*%VU`^nP%hI?5S5U=B0 zkY!2rp&|Z+WXPVn*K#D({|l@a@$eNMk`u|7mDs`ZS^560_meFCDYQ^0-S<mkzg{w5 z?iX0jd|FP9x#4W7ju)~o{^KW8WStOm9h$+fwPyXY@{cw(IbRt$<;VtK%&((gd&<W? zf;2xLTl%vZ_)EL`aSQv)N1pF7t2b~l$jcJ_c$WP+Kl+RB%c^(pOIPm8?)=h}-;-hp z(D>|k!XJR1+?W4aul4bVghc~)@f+D8KlPTMa%28nR~6*X>vhlNd7b?fD-oBuqAy?d z=8xL<36?kMZuBNK2xQ0$-u6>VRlpDx^x<;s^0I~&jiNyc=9lC(O;!!|8?aFd7Q%|+ zU+b*+nzVQ7EmD1Tm>X|cG>Pjr8bA&$Ob@j0HC}TLkdY1$hf`@b>~sGPu&eYpiW)MK zUZqhkQ_>YN{TgfXQSq*NtZ8b4>Vm=_`o~sWkIi>{Z6g(R@_p5bO`07kOh6B#OXgLN z$1tuV_Q^gG2SW>WM6}^K0_dlZsuX$q8gy$(r-3ASnr6ArZ>)Y;s0m&Obsigj^=EsJ zjiz7~8ku*o*}?5rC3U(Il+-hKLlMzHB3YNX2#scOjJAKH5@4u4T?M#KDK}c3vF~w* z24cjUoD2diI>8P-u@9t!ZeMErHK@3M^hxQfqRV2_la}8OyN3e#`+^3t_bqC}JAN7} zD_k3Db|lKEk#)q<FrK`=8YXp?sAx5N9mWtjpmF47KQ&PGK|Ip<G#<&WEB`^ZM1pfv z*Wk!v|EJT-G`p#Z5<{gZ@go=4<0zRls6%B!-6y!)12)w;Z~>+Sj8Q8P+o2sbBXOww zM{Rast1grFPW4=9XQedvXPn(!Yu9W;^qU6HP{mtcp)udS>4q8KRykfs3Nnx`3vrcy z^1dll85a7iEz5!`?0sX{vO+lg2!HR;N}=hc^I_UPRu$3uc<4_KBqo_Ero9B{P+$d4 z`P7w7RU{g9pC3AYR0S}JJP^~=g?*W;ik4+L9Uxrl&l|6pspNEN)hWyx0LE@$@%w`( z%B1!O$W7#^?iGPvgKO6g|AUqg6Ez5??*?8&eONoHtW-*p&*bbzN_F{<`_Dz&Z~Z;6 zbc-&0HrC!qlhLh671?I2{v%6XKkKG?GnZcWZ$-89$1mm8QXC-cmMDPKA(07TPXwV# z@Lc2M+V|)ExgQzK$PlTL9+6WVD!RwaA&P7GVv`1s_|&hk*jxS{yL?IqK$E1SPc-%j z!uC3%?0XvPI#P)QrPKbe(Mfp$fm<>R7yfRBEY$As1k*S2w-Vj&ot9q#V9zJe+?vN6 zXRlRap|%n&BY`scgnbtp^k@l6)7Cj*pfm9vI^isH<gN4b0IRTTj@;~+Y@yKPsvRj< zkk(blhfZ<$#q!^_;<hV=#mi>UMC3;FI0RQ<gyBc8BwOL=PeBR=<hz$c#MiMyTm5J2 zlZ&ZITVWbzw2=1<f5F;4rOA^hhduFr1k$u8?oa>f58R2u6bl;s&j&<x74$Eff+#<q zVA!&V3!6+_F=r=%z=dO<@+qjF=8X3>erfzwRQINR6VQBVuxUu^+j)QU$AFfG$KiZ& z>h?N_=sr~$JVT?dDhb2fk4Khhb8nIhA(&3CJ<VhS@&FL)*M_r0fGP;{0U(|UX16C* zrRq?3ssmwLlD;?Jz3;o6rXy?LC&F_7h`CSR9()ABC^}jx@jP)3vGTTH#aJSkMf*_U zTTY6jxF{w;uWzx}p739$ePy#t*|L=pNT)}x&c219-For^0n4I**UrNuX?xIcsE?^m zW!jbZaYl?%g6(0w?!6`)sb9^2-2gT!oD?J@Ok|Gk{c~{6)JqQ0{`Lmkd4kCe8Ufpf zEU#FtVx8DlHoy4YH>qqCI30mkuN%2BwYv28Smh<X6>+>SlRhbkBd^+jNwbv8(U4`a zUL~Ef=T~Iw7fLGFu;V)8SR0~2GG2HL0R}>tR4RTqMv~Y{FxKzuUc~agxbOi!O<|`d zE%%r%bUf&IA<FsSA=R@xy)ktE3yVN>zaOI8QLzzMb}J<eq2#gMJI@p;g>DBkY^)~~ z9>ROY<y)EM@8HLmKc9Ym`}gtZ*S|kM0RHf!VFi-`zWFAdklxWpL4FwQryqYH^hdV| zDXh@K3o*=4!wos?&_k>K2~k951pLs%6H!c2#T8j>(Zv^EWJgAJ(n&`gaSH#;CYxxO z8GsX3qN&h67>UgA95r^hga%{uDW?Quya~aWYC<T=Nm*Qyhm;W3GUo=9yyQY3tKius z23c-$=NUQ1xx^O$+L@;lS>VY>sFd1ilgW0j`N0N1{VamXmr|n3DR*=NM@FW&V5gnL z9(xKUv$`3rB*0Xmz$T;M+O(&p?8@K|cp7PCB>><8CmTw-xhu0#OKoe+w*>o!)w`Ah zV3P$(1BWxCEZg+4N&&E}QFh>g$1-E^F$*!2I<+dJolun^k@JRWim4$iOJu5|$n&)@ zMmZymf~o>*MgkQ6NGe#XzA9~shfuw=PLvGI2T`g#OX1O+Qh<l0zJ~u0N7PwSx}_#b zCxmAc3f2m4lZB&c>K#Vu!>B1oyNeGV$98gOp>*KsG#^?@3N9b`xY?MUS38Cep8sgB z+2)&X_V2#{2Q2VF_!QKKL4F*JP{JaSPFiWDMI5ojrJ;^m>Zz%&I>i}jv=PT|bmY-T zAcd^Y>LT0mvV={`iJ=vBq@>cy60k%`o?1|-l%5|%TStu&q(FpNLanL?m^ESnOz=2H zvF2|8^wINIJShaqrkrG2iY0^%BPyk~P9nF$zHs<8(?JO~i>X#{{pt_60AR`V3|e^{ zfYeKZ>)CXS>4;k00$YonV4ngWCCaPn_gT<?6=&FXPF|oDF>wFLEU$uI*+G``@Hr{4 zRv0c;FntmeM1r`I)kzzVj7juequLRtkta&irdSCSy@{^L9}9=66taL~3XcS41##$r z3oCI-G@gKh31r|hvnvB7%CMH3WGZ6sAj-uoCJy*9q=FZ_oP4UMz+UZxCEYQZWfUbJ zl=)x^P{=|-Vumvr&X9&U(;0twMj!(rC}=|~T7<?HL?JG%X(1vJCWe?qB`%SPO@zvf zYILI<?WjjT3KE5e<U|ye;|3i-69BGJf^I}f8&o3Jm9j(%6rkiBH{imgO5ubqez8J= z>%=Ww!j5`);~9r=gZxmEr%Ol>8(z4=ArC2rXIX_blOzAiQy68G!+Z)g<dPk<8rYK( z4kZPu@BsyYVvKL-APi4<!Vm<J0(_*>lb~FfZZcBJQwm})>_`ba;35~^#e`nMvy21* zKslZO%vaU&l-zt1I{?h3Bx9n>A3(>GmHZ`hzZusiQ=%F!JYgq}p#VOHkq7`#W_@I8 zhiXg`lg-%AdE-gS{>lJ_c!r@b>>(gi{xB_B_@YxM3E>WosVj(eEGBDNi50r@jrW0N zRPe!Ad}uL&DaayyAIV5d-XXcbY(|9=@Ie{kS%!wzkfbFwDSd9ZpB(y(hYM=ZgMg?- zna&hMMLZ%+ahg+|?$jt)i{jS0Rz<L3QEWWL&^rH^(1S~Spi*h`1sUCj5+{ihFm&tA z-NGP}l+XhSL%0c!IHRUTj3W-lz!PHTafn#Bq;Z!pD*()aNJKVaaqJY<P8@o<n@mzA ze(4;jhDWcIfGjujYX!n+L4ha8@*@CC!7Wn25_}|fv8McHO2qLu$3hmHD9LC^B$W=q z{_d3pJ;~?_W7=sIFDW-khxlUWl5LGCSd?4Kww@B4nB)p2!O{nOEQbSaNG~wpcnUGg z8K0{(B_F}+PNCWfkNmYIC1dJ~0Pm@TbVSRr;}ME-Cpb{uenewkiBCK9(y@#F7CsmB zj73ZM4!9WO9nO`{{g4%$lkS(lHB6~~R=WQ~pt+Q2Folp&5gf!K{^O<zcJPBCj5MEW zZHivAV%Sg`VWYU?5?ne55_|wgF+!C~D5(dCvr#E6p`bfn`a?R-L5Xw#02?>3!eB{J z0;(E@tg=v(CFEBRVK^$SbQGinZFxfr-7h%#TUlRr2NmZ|N(VI&2W%y^E0bh1E*tLb z>=<YaK}-M#_$XFd&ezV&NI=YF&K>};!>rz>Wt5<WMi}S|jVc3E%Pv6%S6a0Yo-~(! zf1`_6zk&l_0p$<MC65)1;R|Ct<Q<PG%eQdJ74ozKKHu<#ZxXRi&fPFrwiI7G64f1~ zP=FuZ^2Mt+gN})|<F&;x%R{2kigf?rDsvxER$OEh&emafdi=;&G&G`2&jR<BrX4S0 z)+-KHy(2S2zz2Mw91fZ7wq(8HoO~B{>vrV2MpIdfwCUSlb+3Cr|IJT;f0iHu|M0*X zwl|Cx+~9lfo8SHJDHJKpH7b7XiWAD>z2V`Evq|*^VMtpm$QUJJ!9yB17y(n^K?)so z;~i}bgFeiGgb}=81Udi-U~;_Uv=$B?^Z<q=x{=mH%v=&Di3c!do^wRF1iTc&6|x=) zpI2z4F7U|)(f6{y41lF8L#YcgDe$XKX|=CZK_^d0(-kZq2OL-L>nkm#^_u7-GrVHx zb4T*@IZq%qiaM>Px~GbzQ^5Z(;ZWW;mD?Ay^UB)qI6AL16(5p-1)=ZA$=)wBb)8ka zV=a^Jx!?n^aKy{(HOWZjhd>wrNQGB;Nk=1t*;?gQ-U<O6U|tC5m<6yM3dKnYc$u<y zuC#+F=(X78*-jM%y<_OSGRfada~}PbP#-3v_R`tTg}j<wQ!``t^P#U?n!&rJLVKyv z{GI&|<@;&c_x|^JI$<da+`>aOcu~F2nK1!v+4Ol7O7g*8ltg0~+K|ud??0<|ygym+ z;08CuL1&&w8yrO>=EFj2<h<~~`GTVz5F>^N132139Ax1kVrEPV17>albin5(_OD~! zFOc8^F(l<t;3EVLZ!P~YCwtz31a-#KjDaVV3w+cs9ViMUw8{kY?@>SpA7DoM-~=%c zg9U>l8+;*V9z`2uL4qRB0mI<|IS~KsLqU+x%!1GfmkA}r!53Pg8{na1Xv7$nFh2B; zFrKR&*g*_|!vGIZA0iDLx<M%p5dK>52~F@(x`VymK}I4i2Bl9Z9?(B<#~4DQJJNyU zfaV=m20rp38)N}EUeFi@Bl;*2`rHjasBgfmufVVm{5+9DxDSawaTG~0iNp`62JXU$ zD#J>VX4+2*@6X*}@fD>Hr7~<t=1^>O@uEKP5<P2G-Yg{$0+`w_7K_mXdoHDnA{o!? z7<D6tm`!Xb!5IIx3)r$D7PO7o_6oRa@c@m{V}vmlh|wGSV;iXsF!<vVPq5w2ujg*& zxoAio=THYLu^!b;9_u3$<!uw`?PyAo6hrYJ1#%#v<`gSTs0vOu4z3l`QOSz28<`Qj zba4)qQ6BxnvtSV-qcJ1Q>mj2t8T}&!r4S$4P(Q3fBTG^nPx2P&L-h#HC1Pk9Q4&A! z&niq18M(0>GcqU1albI^BkeILg>oqGZ~6p8hvKb=t}mtt68r+PDWNhdRm3344<Ucj z82_;-v&bEJ68#)<7G-fHJ@Oo7G8dT<4RP`-Rq_?nk|Z0lEX@)m+Y%_L?gMpDEa&n+ zYO*b7(Io%jk|+Ptq$(0GyOJmk^Dz6%E#*TWm68*gQY!uJDIs$*Df2?8GN=gdD&=w% zwX&$VG9|-u6?d{O>5?ML(jl=jB1`fo`O?1>(krntFF}(n=@Kr-@;=xSFaOIe+tD<Y z?4)*+FjEpSiL*FoNHODsG3U*|{IN3cO){M`I-~P4Q_=ihlNA|~9Y1q0WAiU<lQtJJ zEhSPlak4x4GB;gQ0B`d&uXEX)@i&3;JK?h@NwYjh^D{SdEKd_Q`y)Sv6FH4DKm~Lr z??XBHkvXOFIc=)@60||3k~+&TAy*PRIa4ny5+%`dJbO|t*D^!8Q8#08EAjI@J(C?d z6gU4vR6|qr97~i%S+X-%R2#{Y71I$HSMx&w)IT#cN7;=>2h=!o)Ifa*K^+vrptDGk z^dBMADp%1rKd~0!VHu!c_ePXJWyTv|AtvY3Mh_4k&fyy{1V@7tAK^hAXyGJcls!H2 z8wk-CA_f|wfTLbit0s~nzcKRM^c5w|Bfs(?;UN+Vk3LltFohF8`9mBcVF!FbPCN59 z-!d?B(nr(5O=~76b^rw$<wyS`9kSpLsI(p>jXpdLO?T!fSxOU!v=fsQ!H#rQUG@8x zG&7sjJpWN1E<pz_X+xCD9bPWUJhVfNVjW&CS5HJuUcr{+Lmr+15PI`Gbt9FsK~(=v zVj5h}%bWsO)Z+X+6t(O}RQ3~C2dlNzQ#af5MYK_T${-Bvk1Vy-Lb&ln=)-^(kv>q1 zX7a%owj*?8NM2_sG7!;bzHL7ERX&6v1=5X%UPWO2Do9OL!1gg!AM;gns#PVnV)rdp zRk1f|)nbj}9(wgfg!K-HgjZ{>Pup=ND+DG|;Pg&HHI(ftbifL7W7P`FLoSLl<Uw;} z5nP2aQBZ_uSp<3R#EIx5BV@KdZuVx7M}~|x8*heYaVB8pqiN@3>S!ouKVm*4XE@)j zVUuz>Rh46BiekmKY!M7&t#d-1G{Ud}3@(DkzyM3+VHu3T285stgo5IfKnee{z)@~u z8g5~6<iQ&}!4q=f74AeH)S+-wVHn!MV*!C0JYf--!6oP+7d+t-@Tg2vffrKY8a$yC zywDsl*Aqqokc72lH;`~m7mzw*aXq1NPl9v{_jKWm8gk(fNFf(;VXexPcTu4*2Df%m zHy4h97g{%EV?t!E^)9vp1wseTo?r(`V+R0AS$2SdtoOz^wUo&0t>#Z0A4hl!g}G)Y z3K~HNP{6B}A_|}Y1xkrsPC_bBzz4XgDkx;=PyhuGN^T-SfrfxsUSSAkOdPTx5jrOd z5+MsvAO+$EQTG?1P~saHn159)3v^%tBtTKuNq<woQ_=xYUtxa{iXH#{7k-t)mMEBn z>k2cXKq4j}fT1E1GFZ5bV|uF>pymU3;6oUuz&yyTRpN9!Ucm|w#549nK33R*@53E% zm;$Vq)Ao>t$&Au?Pks5fI}%lUcfbnbLw~dQKJ<ct9atYUh<c$|hoRvKG$I8QRohfy z2>v$(5I8=>Ar{_aKBQ+}4KFF)!GOIN2j~kO+!uZm$RvbxDeKK_wTNsP`H^V~Z6y>^ z*)_sAtV+&-34Guru0aLTfE7yN30z_tOd$?30B2L~CdQ!?U;!Jh;S=QM8A!nttic;3 z0RTKUbcq2N7GW*u;Sf@x7}P<nl=Tv>;Sd(#8ag2s?qM88p&0+L;Thb(3qw|tR@oG= z0T{+$#*}rIYx$Pt!I`01n!Dj1%wd=1fEb9utl;6Cfq@TP0v@h8o3|MNewh?{;h1ag z957)L{MnxofhX3ZJ#xid2BIJi!Z{eiAs|8`z~dq=k0Wp+$w*?$(&WnyV_Hk&puH+H zZ~!faAb&jCJkp|mbfel5VhTV)x+vlmGGHfqXDONjUorp%b|5^s;A1``Ji-9IJc1Gw zq9qW55?-1T5}{Jy!UxQwfjnaZD4+})fq*T;HZ-CuumY%Ih(ZiH5*7fV9?d+^10fV* zp{@8Gr1mSqVk}yLT4P6;;A5I%=Bk4l8skH(pM#;l`aJ(00;L;4rQsnWCZZuO;`lhC zuW=A*H9{=710EC_I@)1X(x9swA{>MRIecTJNF#~mBclm6E|yQCA;zOYTBN<U`XF|Z zA$f@$Ikj1Pi6mJwf!4u}BuSP;AJ`!mqy+w4>laWU9SWmN&g3T6#8G_pm)A;0P{Ly^ zAsq5SPUz$rdU-sap$+z7S$P!^gq0HD1S;mi6VN1eIis56<PeU~xY5v8Z>hV{gdJ{9 z5^|#*<l$ohK)lncybr+<9`_lRyHEb4zXb(hhBjaJMN!I&V}>VEJ|$a8;}0-JQ{Ezz zCIzrkWA=InS8ye<=7(9F<&xed1Y1UCOC~6Y0we!o_OH|eS)j#UBqdmq1ulGtb8N|* zcw$>lLW6=L#{EJZ*g=~JZ8<`mS!BmhJ|<CG=2%{3Q8tDi!A*+c!&qdbP8tcm{n$I6 zKwq0YD1Mv>=cB+)u*hZP$fu4TUyHmtCRjcYKL!Y<O@_;3<`rtfW46w(-~$@gw`f5n zSsz2a7J}mz+`?-jvAW?FXrX5uwlVv$wN-mTMG?^%orzw1R&~_D%H{?Zj^Sni4c4kK z?%`Gi3oxu=m@k1CDwoINpwn@=SL4LH?Ex4rVHCU}6`tV|#Ninvfma*h<|qLk>Y;QG zVNTegns36q0YGpXA)HJ7SJpvtJ)zfS!IuB_0T>X0OrC)cwo0wwgxFh-yiZ~r7Qxg5 zDRM4Dn5YajUP5Q#Y?C~PLXZboz6T{-_9QyxE@a^@i~%T!$1v{K=Q4l-pa6kUBFg8Y zDSF5DnofE+1BHB*rTqsACPJ6mf>`t-d)7V8$0Y;$m$-am;V0r{je@OdgfdpBg<c4w z)@weNHa>WG&T9f$@&`T!$jTMIg*F}yV*#qODn3dcK0@AwU}(*3BW51YX^)TJ>sXBA z%lL9$W@v)R598yrHWBIddt&AX%{smqh2BF6C?<~;H~}e5TalZy(XD2+#lGwd65z%U zGc)!&*H**0$ct{m8sxwTN=~pcu5SN`$}lc>*#TkONnuY?!eb?Y$mV3#7vXbV-4v8n z65^W{JeCp+e;T-<91a0Xz&qG0A0>o!=f>ghIpgLQ;TR^r@=t<fe}z{!A<2IEi#Fe$ zmpNI+!42A>kmTwL6p1r{3-m_fBOqy}_sZO7OQyRbSEGg5ZnjWX-k7kS&FnpY06=-D zqC%npgG&Q3-d*@Jdc9=YqESMf3PUmEDWoE1nyheJ%uL2R1A3Iga~Q=jBq03dNzQb` zWep=Kk{YDssi7XKqnP~40is*GcLaqkX!Q=BAPV8~y_5F@$G~^##7KZrrVK`7_$ux| zfrB7HbQ!pad`C-ykBk`qz<d9fEsKr?3<oM?c=BB|nKZ*q%=ylpjv)huNkI6Hq{*Bq zktSRij-5O)IDv{pH}vO2s8=%#(U-I&GzrGW8Z+8X6)R2yzI{u_j-bA|{Ob1W=P$26 z0DSxU{R=p-;K76o8$OIUvEs#y{r-ClnHeigjVoKej5)LB&73=X{#=-yXm;t+i4*5G zTefJ-25@2(jj+{splc&u$E3%l58eL4t5%{FJHGIKq3G=w^-sR}+T9x$M_W5`o@D*K z2TT&XcJ!*d%N`D1yLJHNJ(DC4SR?GO=yj6S4j%Pb?dk!$^S9oiSK{d%qEF6yf4K+W zbe_-$z&_cL2Y^WC@zMX6e*AIwABEPzGtMH~U^B)Q9(vdWa(#&e%|Y+5BSs40@P*Y^ z1QEv-Z9+)|fKm*mBb{GUsn{TG0H|^lSOn3sz#n`8*$PRmm^F+9?LgIzP$_`ZmpCF4 zmk$62{h`lTTx7W=JeyD;5Hux`XXYOa^3~Lu>?|bEc;gWy6j6N1qXP~rev>D8>Gavx zjA#~_4xDn1*B6d!jwKvCDS}gCEAb_C)lmBM_)v=B<fIA(#{9%6JK|8aX;6I<^d^~y zlJ|~74xQAZkncpw&Py+e^wO5E#)xZ!y3W=jc}+PKYfeTvrO;9N;3?5S>}b;sr$L@% zCKs{_8WtCfPDB4zlkLz#3tMi%B^O<G;iZ>t>aNRfyO2dTS-bMiOK-jQ-mBSYq?v}= zH>$Db8f>yzg>P-{ToOVz=OEz&U&X`%06V#K@F{VZ=%9^`q?C|IkMNiiO*`gk*p5BG zEMkm4>mUOFcG|%+&wKf()5$II(Ibp`o4^CiE8jWdA1fsTv&N_E0K>;N+i<guIQKk* z^3#_X1Axhk2(&UgK@Yu#EX|E<OqL>jw+Vw!NBzvy0CWejJma{L4q_yl=qN*3;;G_` z5hFQJjXE49jv&hNwMmg{8fBzN0Mz+YJ|(J{jSeZaW0qNH8DtWXIDkW*P-Nl5*D&w_ z(A46RcQgO0r}zNrk}3;u5gtiu`V~zEI7k<ba3$KA4JFZ<I)sR<!^8S;Q|Xzg;D4Ya z#_N<Xz`O5#6+Sxv(;Ngq-5s6YjyRMULlEAj79_zRKmiHP@3VUKjxZTe0FFq4w<6uF z&=1tR`c{cAk~rLZ4?fWiq)iFon@9wRlA~w^R#{14D;&Z<YP}9u&ErBl+-E_8Tu)D9 zYap(mR4KsCPf3=OKsSc5mbSblF7KF&KI+1cyXa*v1*@SA+4Zi+NQN>u?4b{T2*e;p zY&4}gO=?!tn%Bf;FtZV&W#HkA;P9m!HwXg&oN<B^yr2YS;EOqKFoH0SKm|*Y$Ho$Y zt8xDvVvU`E7y!8Ai8UUg5%6%?cIHu?I;wGvYoLWY&XXQQV22WJV`C}~1dpT1agB(0 z2R(qnMoPe=LEVuf9Wi9cJSM~(aXf@1=ds8`yayhSjO0uF;|q~xNE?b9*sP9HE2uaG z0I!&d;Rq7B1uQ^MBuPOA79fEP@<kAayAxGd<)fyYL`w_Ufi5ZVz-^JmDBz34Gj#wz zzIg6|4I<J4CU8H3K*N^h8wj6tiGwq-Lv|w)=P$vT!B_keou%?04)7t8Z#+Sl(EFV| z#}|}+?y@BLfQLN!iM$38Q%$r9m7{os6@EhVR<+cnnx;a51-_$G4|EVQY4QZSjl}<! z3_U14XCsn|8ZI9ZedYtb2~MJjB$vC~6imZ88~@3aniEkeL$?CXquk^JCl%)|F;zNP zok^*_1SS{YQMsc~GaHjpA-P&;t{9>#FHY>LR|Av7f9&w9WG$;%&-xdA6|rCcN}|A+ zNHDZAW=-;d#xTS&5qK07Q_JKlY23jLZm2Ili4^Ru#HN+;$YUGXm`GgoflpZ_WgFTk zD0%iZ8di;G9nBa{g9y70!}bUrl!XU8SojdrW-lS870sO9K_1Sc_EiZ<2TF6o7m<{v zNA1AJtrF4>pG>4d&G8BF#32jm^bG*|cr5_Zv>awNS8<H`Mk;A@lHuw@G}`}=g+TCe zBY|8>F7GggcYk6U^9tle=`aTPUc1bk<RcrhFs@$V;ofcll&|@$Z{uJKls8f?1AlN8 zevP5u5j7XRww24KdZZ0s)DKs|ofC9{0$-7|LmLS0t$gK_kb>qHptBK=a8L3L_ZGBO z<vs6798zHxw|KoMg^NZBV&V+L)+YsplY99aTnFW8x+3XR*nUzc<W3k>B57_ksyZ$f zx)6pkOqX1*T(Gc?70X=ivX|ARR(>53U`li)Zok}^00%g?t!$^>)(mGg-!{H-_K}<E zj9Y@OnZNv1+?@OBqd@D~&up&L5MZm7Ler*q;8k2YVnO3%9tF?Yjcfm4;;U#szlhR* z4seDu{pLTT<9iiRm7NiF=Q;QJwv1kNr(dn(S8MpjvaYqQt#Xr1(OS0<TVO1lVrWFq z`N^2Ds+6-@Wv-%m*`U#KyqFE`XiFO~VK$<_kQlHf3Z{wEHq4p#jH$o0InH)2w5$Kz z=Wx5(+-**^pv!G;zJ@#0*af#=D6Q^wV<m(2wzJ;W%@_DG$1KP^_on|1m^1f?-3M>@ zy%ElBb>lhS@+L?$Yza-&Zu{NbzO~2EZSXvQeB>m*twQqF=~x3x2mBs3lvh};7oKZ| z-L5%foXta<>wM>Btu|Y+U1qr2o9B0SH^9y8@Q3%i<O;8N(%t|4?u663-wO}<#*^Oe zzP5vf6u&gW^WDl<=iBQOAN1459`UeiI_iqX)S;UGa8Q4n>2xP~$m@>xoHW|*v)THq ziEZqdQ+ca2B)Z`plfx|^e({XAm(R!SR&A3V?uG|<U&n4{d9T~jcVD&A8D4I+vt8*+ zpZC%uF7CB=9qg*Vdg}kpX_TUU@}{Ty#E-7|*S8b&{$6{#2PSu^=Y9CZFTU|he)p3A zKFWfhxs@AFbeuzf`qZz@<F8HTw_cs{JU2V*;SK1h)4BE%r@QCJAJ@xM-21;T%<Z#2 z?$%%a_wXP2(N&Ls?-w2G9N&DyLtkg#w|kyfb;oCb2Z;ZG37C8$v3xLxRWhelG*^8( zCw&uWffv{q*Vk6rhIH-Meg9{6b;fb9CwrpjaSLd4mL_s5sCKL8e)Lv!a<^yU_jUCb zd$PBFA~<!oXLRY-bqYs+EEs>i$9qGVfJcagNmzn9=yJuzd=EHy5{QA)R)JG!g;z*z zL?mX|7kM4{b<%bYxIi^>^M#4gejccM-Ue?%Cv~ZZ8EaTD-1m8N*n_}#7(sYxX1IoB zD13U@dvHjGd#HqiIEV{qe1@nKFLzZ_=6uSAh09ijk0^;4sDVJIeUqntiE$2w;0u=_ z54#Wv>S7Lo(20}yfq*D(Ue||L$a%Fvh_48XN{Ii64Y-KNMtG+9Ws!)ByU2Kzn0=Bb zd~#SA^`HoDR2lB@3xXhuq_`%$IBk4r8E9C2LkAkMXpPr+h_yzG#|DAPR(Q^cR=Nm| z<5+XP*o8tTjDH~y*suxbunUHO2Zmq?kboTSSP6#k3Vk6D%TNjTn2+*+3%j5RbYKab zSQznu3;nnW83O?EunYI73ZCT-(r}NuK#F`}kNC(J*q{pEK#m^?l8S+iBT16Tr;Uop zjZye~A?a1($dWIKW#-6%=$MItu@1PP34x#r=uiyHpa`1~477let}qC<;FGUF9@h{E zv~Uc|pbFVz4Z7e8b`X>vIT-6u3w6Mhy8!<&$f%V*DG2f540}Ke%is!nkV@x3lt!rt zNNEmd2?_ZKlXDr8C25y;DRw96gbv7v5xA0c`9m%Vn1ks=G8uH+SCjgP4V9n>ap_qA za1M%4iV@=sd5|$sWCz^<MR{-~+LVlk;SGL}GJY|Nv2ZEX;0N8X4w}#id?5`NS(%sV z44HW;VW<gyU<+eNn7fIEc<GzJDTGZJcu?4g-^iOaB$&skocLmxml%wR$rs*$2ZNvu zkBO1Rcqxlh3v^%$xL^yvV3`0=4vJ6*wlJBC^O=6(4%lD|y6_5@0uRby2h9iop*e=- zK#KGb2yQfrzTghqX$#%C3wuCgb>#n(oVlC{N`1h|puRbaDA{~|>4*wyFUd)v7it^L z35>5Nj5j%un;;H;Q4gdTHwluJ0UDqY*&tz933wm~C5nv7=ojelj)w4*<?##i`4^#y z9Q`?p)&T(h>6IvI3lSMU*su$DPzS?Mq8RF=HrJq0T9OaCm$lf9xA>&<Vxd{erI(?h zUWkg>vyQ)@2lz-H#AuB2pbRhC7g>TS@Zb%5FoyDwjP$7wZb}@L*_q|A2c<|3a=H$R z&<I&l4rs{^$ylO#1(`Ux2b*A(T?(npCZ&^ljZ`|Eed&#nx-MI)sht`cT4-$>c$k<d zjegM%+kgv$5I3tC2~CQhuMqzi=kN*yVGYcc4$hF8IHnBYnQ53p4~h_$klBg#;0l7k z4p?ai;ed>T&<*iGroNyLuSy=W`VP_%my<Mio~o^0MXBBTikA9>n2M#_+8LZmuIKut zG+C;Cu~)<)4T^vVeOeyxiU)Y02dc1j)u0G^fCqu_3iw12=THmv+6Z;V4&zy`@(KXh zpb7O_2jKG#YFV$Az>MiYul9<ss+NxD%CYR?tsk3&;L4Y_D1{x18RlxTotmzQxvqvW zNj*|m(Qt6?fDX{0avi5Q=nxH$2@iFZ4SZEs-vAUbo0qMavPb(FAgi<pD6&?nk`s!w zH<x(N7PTF_vZM-)BH90RM#yO~7=!B9g1(2d&{?%*n`TRkw#C=9DOsFmE4A;Ucy6n$ zSNohTdxu*~f=q~ea|eDqD1%%ZrgAH|>YBEN%XhN2jS-rugL@b#%eV<jw;W2gi;;eL zyM1lvhL{^~AZTyY__&{2w}vaax3;#5JFcJ$R#TgEsGFscOL~)gwyo!M^~Pqn=X#ub zdV_{}tjoJlH@d&uX{Ae?5^9{i3jmI5ymaZhzU#3jD7JrCs(Oop$xFSy3%u9cM0$Ct zB>R`fi@ep#lFKWD_=1PgSc845ir@>r*vr1?roG|Hy-@4Ds;j;VD!#5}Lt&_!q6ngw zfsp69Z07(5qeK4~`*;OM&@qYu57GbxK=1^exft-U3{YU5jDZfqu)l_(vw)$$?P3o7 zYZ?CwZS70K*^9UkI=qWpz295E<aocRcQ5_fF6EG#hp~wO3;^rk3Y3tY%w`TUkO=e% z7~W6<Qosm6ni%Y`4X_Xgyzv*;Py`iY81is2LW~&Y@B?8q1Wj5PI^3FnA;auK!w?)8 zHw+j$%)^pe!fX7zx0Sdle7ecY!YvGrFKo2+(w|mbFlZVWJq&F>9K?hH52Ww`ml2;I zz{LPi4HToto^cM0&<jX_19(~(JPH_j3`Bek7=DaqZ0yOxE3PFg$Mj3b$7#o&3mWUV z35%1EhG74ZrI?X&Sswi8kNQZ<kT49|gbPOLkNQ9l1qs4Aj0?K(kekpO>+p{8IFG%7 zkOg_3`>2qO6{MT6n3aI93)_)^0gz3w2tQB+3B0gwAOlBWMR&3cMqmR%PzEon8166% zKOh8ra07o3H|~tiQt&AYECfhU0!o0uIXntRFwSL=CGda?P{0@K;02=-pCPa!d~pp* zzyu{A1WND(s0J7dtOQDs1>0fH=&a7{92mn<4@j`Z+RToA5f82q2@Eok6?u`6`H&iE z&izQ!v)qrktjoNNkG>4dA)3&`T+GLu%<@Q&4T%fRtRu9%3DW$*)r_wk`KUeQ$!rYD z@mv4Ay*tOHyo;y2v76zcIw=lgS(ay+mTP&GNx76wd81H7mdAh#H@ec5@Rj(=lVd3& z#JC5lAeArb4#D7)Kq-{v(UXdh#(Yr?OBoEcfS}S@2f~00#TcY;Da$Pr3MbG5tPlqs zAPf3n4oE-)x3CBz5C)fW4JwcZtWXLU9l^O!0%=eR6J6Q|^V+Q^2(#qbGn5CWJW z3ZG&QM}P>lkP0ebMP{S}D?$%9zy-vi3{K1!+pr3kPy%lt3Xmq!e=!ZF5C<8sCa0a+ ztKG<bu?|Tv1b-3Ms?em@AewnfmS%~T?Vy%LnbrWHluYTA?#+~O%@=cB*X?lE1RDP# zim=yxoeqB;*g<(Gg?-qHtk{g*8;%Xx#rT$b5SKnw)oXm!S1QW$3%69u)r0BPu!|Y% z$e3}tsw{me-T<57iJ6+Ir{#7ItjQNWywY}1!Qv^W5uyo^zz+Ekr{Dvbk_i|q-3Zwk z549kpzskdL>I?9&(xF(JIEkB7BM*;|F!f>5?BEQHybq6X9Pp3}AuxuNd>agNnjCYm zDqueEFb_a{C#0YQaT0D<z60T4MkqiY^zZ}a+|c9mMvMF@<INZ8U>t9hJ!4+xhf&fv za3_n|n6JRa`%nu$p3pQ70I%7Jv6(%y3F8Rr7c>6FHa?ZsNf3OhoAuD+KOX<&*I9~+ zW8_G#<b1*8`rzbH&e9l3<+*7?8D7F0{<K-myIURNlQ`mbYZ=l>osX%X{7H)c$(;f! z;Nw}Illi9^+>k7t<73<xk?HKF2>>H%jO1O6B0-F49OVE&4mBL3Yhs{^z?pg84f@~? zkFW#vejI$E3|US^Gk^y4LFj<7+}0wV^UMy_AOccA24^q^H(&+i0S}kp-MO`oMDPPL zZ~`d67qy`0Ys1`GA~6}zU_P?QG*%e*a4|Vj@cs_)?zav|Fa?{U?9~YveCi7#(d=II z>;Nk5y+Q5f*%#Md<l63L+<u+kektN^Zh>ly=YA>azV5xz?!<8q2TK3O^Wy6y4D4+S zzQkVak9h1^n;9NT2OwOUmm;LUP@X8NqKn$1Y%27BVdR1Fr`_OLn%wNP5t%sb#X>@i zNSW=eYRPmOtmT2EO3I}2!10|E2RgtGV18MO9x>J+2SzXg7!&ZM+2>v)17VO4QA7rF zAo^%9I&_KxK>ZHDkp{ys4ULcIq|ou_u=&}u?|`nzj4bwpd>lT)4wP^Cm@gZReko)h z%;+fyC()n7k@jn!qMpT~E*dv+uhOpY#qCu0cQ4s%v!8lT<l)x$eDU|>5#{MH_;qUd zNxGzoTrXMQzFSYc>g)Aie}!QmxS7$j*g&TEc<xg~qKFC*0N($>%lFQpL3rNw7<*?f zP%Hou55{xVD5AiF<reBQSWi=<cL2%-@)fb3qFC(?hFs^0(!rLIRC;WrkDQ-w?cDtm zgzp?KO?x(B1RyU|hHe1XG4TQ5QiyKv<dMpd4&%UTC0emV2teFLuwc(284~eY2}<p} zX*C#8<-2>NP(*#_?$M5@@zkJb2alAFq~>mf;m9r*)PoVdbzrzMWY~!Ce$9O>5nk4< zkiouNN7gC;c=E9Q(qrgVI{*%SB|iD`T{%6z*zrt<FyGaI3XP?H*cKy2kRexUG{*5A z&4?p?%|!XOZA;gjUCBKD(I!rvJl6pg`c3n9@ZrU8c3l77{CV{0)vssY-u-*{@zvvA zAB`2J0pGr*<N8kDe|`e&ryqX`^k+N-6I5_P1{-wnK?uY9XF>{@xi3NtGt_WH4m<Sl zLl8s!jvW%&Nhcj~#L+LCY@%Ui08UtmCcN`R46B`Oa2W)hU+m~69@2c#XQb2KIp-CF ztQkh1bezHIoqcMt!#i|_F$g$`hQq19b2P~V0C$w}ktJ6Ian7K1nlnfqW%4iv9%mK; zK$<6a5+odHAbABI$K-jWgfQTdri4TQxMr|+u(<&Wm5Pbw9m5!VtDF~hKn*;1YJm!! zKND$ZDIK(F2c1*2LFg}2rF!bkYDPdopGakK=Mw)F!oX-PO1_CIB64ai?>l%d3H32Y zrOHK8OrcTK2V{1;2uB^$VN;N+!0hqIAcqX3$Rm?nvdJf-obsJ2udJvoExX~;%WlFP zQ#vzOQc6v!+I%xkhUkpS&OG<DkwN(a7I<KS3pQ9j`qZ-zKmGVK=s$e|<Yzzw5B&FH zj5F?#!U`|c_+yYm7I|cn!z<B56jl6&MHgX|kw)`0&IcZoT){&ROGs)b9cdK7<7QRb zVW%2J^uS|Vd^-B&XFVd}3QLT3`gv-nPqO4^KUNEgou2Vn=(4GQ{!*!>k3J26n{u)< z>GP(F0f`etfFdb*b{XM>5qbciuU1cZp@jc3t|DgyAM^>YopYGDTZmdYGKYy1@Q%Tl zq=WqcHG>`(;e;6C&><Wn6<48(8@P!261;u5)SX3c7$F4ED+5cg5o#Yn1uibT`|rSI z4~ur&EnR8m%zN|A$XagBc{QGW23lyMjYe8&rk#EVICP~ByJ|(Q#v|**y8gPFu<^(v zs&&fVR;9GFv)=cT6Fzu;`s=rUe)-W`IKTb+gIHpU87O`OBp`@5HX#dPqJRrzU;`aU zvXh-CMJsC2i()h*@YG0T?AV5P&Lj_L%qTJLKnFD1;hYneP#p5gl5Z|@kdwp$9nq+b z3kUL;#K;RZB|Kqe5_2YWt?3acNJsy(4x$ot7|}T(9ELdH@fLU}16kpL2Rxv$n|Blh z036}QFhm8!7N+BhdvlIEuGkL4u`n?avC0}XLlBx(t0>U$VjRI!ML9YqGGdAy4hI5_ zZv;^)(4Y?qO^Cu#LE|fKe4!0Hf|41wQFb(2qrBdM#6!xFJ`B8HCq4N|P}b-@`)ip0 z03;v+3GjidWF=${_>Tm(QkJu%Wi7)J!IV+3Wfz3muLkJL9M0!gjBH^H8|lO23DS3N z6y}<Q)konZ(~>!KM;xYb!Ua__JuM`U9)sz}Wx7y2%+%vJrRf`ZOe2tv^ke=KrpaSM zhMdPiNiyYm&T4)0nBx3pDE<HWPk;_Af9D}({~mVAiKVhYwq)o4Um44WMpU8`%@{5x zxUvem41?d%U_V9a%X`MGoAsy!M7Vj<Z-x_`D;4CdcF-Si4wRX1$)++{*v)-T6E`P~ zCxVDs&J411n(WLcF<aQquo!ioBz;s&ahfG=rWB+F3}{uYdexYX@;>}?n12u&z=cv& ztp9qb$HsbAw5An77F8L`EcmjZPL+UJr7Kj2DiNOcRDMTIs!-_))Tr7th&(lFU(o|q zO@6eTH{I!Yv>8o)cJrtD%&9VoLfK&Em9Qd>>^zGKS->t3tD`0DKV@2;f_C+PsH~V; zU7Mk@D)6<lrL9=ms>}bkZd5ZJeIPIw`&%`N^RGAc<}i&5*|<J-sPlxMVVC<@$x79) zmECQ7ddXPBI`^F0JgOk0D_CSoSA&#oWogZO-uj)^F{w3W#8|7!+QxT0v6XLq?Yqj` zVsw{q<)}zmsZ^DQv_YY*>4QQ$S=nK?zXCQV{2~jY!W#I&6Xqv{2drQPMYxve<#2}s zrrwpX_n_`gXlw6#;)~E1#Vcm<$MWk|jb0bSE$(k~Gp1pmKA6S;vvJ9Ad}0p=S;)<7 zkBGfWVz63l$MIG1lAZiy2)#I?yiD$lp)8P}I4eZ(SjH<pa}jeG!Vr+q#>dbh3@s;U zh78TJjkxUP---X3%opx4iidn>JcCz%TP@{?0jN+VUs<h97IdKveajL_u&q<(Z*}Dw z-*XtEBnwiFjpV@-c7!D!)4*58%JGBR4dKh<X^BNd7U@YVsL~?3v>-AKmQ8p1&>7Bi ztvw9lgBW?WC5G>;#Y$*j2iwU~-mh*$O5oZWlhQh4HBY`noQ$1=5xqbH4sMemZ{TEP z%2qYAL)7YL%SqS`wspBni)(}E`m2B*H${QnZg}69*twPQk2@rqp`-&Fm8b+HN+OSC zsKP1$7dXLp(eG5B<KU(Ni!~M=v~}#l5O^?zB_NR$FfD`Mo4~j`q)`b&=z=8RF*w36 z@)Kbkd=UR-j>p3@ed$5q!sHi$_C?^aZ<Fr>7cy6cGYk<4ngN{O3<m%<RN<Xl0-zqA z(G0#}Jss5CoZtQ~O27wh^^#LPA_@ojD;oarPf48O7Vo&mE5Y%IcpT&+Pc>w+o^V{G zyb>!1K+8d{ikJT)<}*)@xFdses_UHRJ_mZ$hwk;FAN{`OW;|)p{SI{_nceYj=({O@ z`Pt4p##OerhPI=LKnPqKf!M?`cHswO<l`LE5y{9et%yw&;}>oM!0HEai)AR{Z069! zAcTR9L5Ra0!N~n4f<cS4E5i@82u3Xgkq$WRffmbfMQknwnVrC1_OwrpBF?T0T=;@V zb(sIYCL$rNUugdqsFz61BQpBZpWYZ08H6<OAP8sVq0H9^1TBsc@Q5&n>eCa*ScfDi zix*M~pa{J$y9V}~6Vfw1_FKJ3XuW?+zu23--LO5}(>>JSJ>LU9;UhlSJHF&wzUF(r z=$pRkTaNF@z6|6(bMU@R06+2j1@c=4^Fu%NL%odfI|z(F)T2N9!$18ql>YlaRS3WV zM7;QFJSeoP$BVo_GcnAgCCj@)EgUP&qp})9HVzSuN>Btnu?mW)z<fAE(9nop@W7&& zy`)%&kARaSgcBdx2|EY}$T$Z@XglQyK$3`wy%{|hl&4EOAEo$++b9P`I6p9Z2*dxW z2Anv=I8+2vdkw#fhgygPbBP3spoDrL33>>G-N-+T3yYu71V69^En7Mqzz8uULpZyL zC~=y)+eCA*2zX#aH>AWwYy>(iGdpaT9??To?8C(PL*DQOL2L&?REeg8!(Uv)M*K2| zh=oX;L}^Tu;J`#J)5Hp_yXpAEQ1pdSEJZ}zL!em2G;^&ed`HvLDuywrBdfw*+rm}K zLVVmuhU&sbJ2orR5O2VPm3uV+pa)HW1Y5ubTPTy4bB6o-iZ^sM0N4kfh!Q%mg@xRO zJ?Mr~gA8~GMU#q%Y6ygdw1r*JgIE|vlTr=TSO;CO1zN}kfoQc%vq&>pMzH_LHfK?e zbfArjbT)x-KYAd;lPr^UD5-Kh2T~LXMW_Q?XuHU`hullY&X|JO8OVZ!42_tyqEtwR zbjYHBNI{TDn+!@pz(|e61&;K{iU3KGOpKB|$&_5lhXBOo;Eb4@$%r^hoczF%y9l04 z4wCrE=R?aM)UvNUN<m1<SXj!YWJIWxO3<K6MM%fjf=A8#q$%Vxdfc@n<40D~N6{=z zR`N$<)2_~gkk6xoO_0bLR7j1q1;mpFvb=~^QwclC6sVj{ypzM1IHr@BG=qqf+0;m5 zaLHv<i7=D6rpirg$w}f^iEN__)v(FB5K3=si`YEQSD=VkSO<~_#m4{miAuOXNfM1+ zz=Jv%hR<+C<7my-1PeO>GozeMB#{cTtc{6GJD%Xp<NQrcpoH!k&Xq9E<4jJSX@~`F zPD3!M+{{ktTnOrX5(f1J?5xkB^t<lFPw*5^Um#C|Fwgq~3-x4A_oS`OTv7Y!%z0F; zb+ba#Tp-e%Q5!8F)T}oh<B-r8jna69G@%5;35$`?1xs9$9#M%ioEH8BfP&D(c)<-m zgouM62MRR^l?c-0h>eG#k4v)y)KEj-XbgksN`tUcWB5`fosKqA4H!}cA@vRLjEC_g z#g#}13QfiCaE#6nHOmkU(l8C?3{0hi(;*#>KrqtaP*ZV?1SbC#2!gmC=K~@msi!Kv z(o5nDI4x5y^$)j8((9RykZ=ex#YC+^Q#B1$N4!vpXbs~qmsp_F5Vg~Tz*C0M(@j9S z+G0^&Js20|s`j$Su)0wKs!?J+)(uLuT+%Ok<Gda95NH{MFv$a&6phv3!$`;n{#%Vp zdk8@xiPzYcOzW0+sD?dw6nQ9y8fuAnL6b6BA#|XHbihMwvA(wX1#cxpKrB@`G?R6Z zl5ptOM<K*atJFx?5B<!8XpjnQ@C8{d$8vlJC1DaL$%%g9lPoc#WkH5A`=J~e1Zh!* z!|Y3YDT;>G2W-_=a242ZT@51P3UW19bX8Y(ZC7}KS9$-XS0J(1Xv|k|9n-|<*G~ah zfqe&p#j-|3Sld)shIQCFoz>NtSa7jeJ+Y%F>{YB4m|yL)dVH^8MOKnAR<Ir0i^)-E ztuqgq87FPIsmU5183fQ-T5Y&AL-3iV;S-+G1f$V|ps5Rp^qF_z8lPE+OcTJV83Zg# z9-LWF^PpS11-g)!PRrmuvDppBEt<YX2x-s+JOI<WTTiTUSXT(oI%SCHF&nnYBHsa? z+7TY#ARY!CNr7NnpUD~^f!l<g+h3^Ln+eA`(c9<oTRZ?<j1ye1F^0mmnV%ViKspD- zT^?xMDaY+yjFsHTpj`7|h|A^MOBsmG?OY`V-S7VqUDBOZ(=8g*J&1xp+q24A_l=LO z{mdA>N3#7Gv8`YH^$@fD!hm$M67nF&AQ2=L1S^urg8(6Dup~2*A3l*C6-o?t0Hke_ z3Z5un=(-9q$_8WtA#tEosQL^*D%gjK86JX0z^bC)0;ed-!()Pn|E-~w5MT->U_}Zd z5K0(#003Qmp$2}T2R?`h_KxS8NDH>CEXm;V;Na^cC+I7oqk7eqFeGexw9I^8D`t=Q zg;B|q(frMr`|V;dj*$IzG%ySq^nlLpx((%GBmg6-eX2>Gz#KOwujleElp?N<;x4^H z2z8?4&Klq|xr+4-Cr5kZc*5hpjN`ycF!2An<M8?}=JGH3x?)P6VE3RxuMM;?CaVL2 zs7?Ol4jE&BTuqHhVv*GcO4T!+`mD`jsRKUc>#Hm~?k?|QE=MLZ1)HkFI%Gkb7E~s( zJmM?9(zB+6<-6kLU2d#8R;>Q5;!1wzW!|$F4c1Hs<%{`ZYtCly5M|YTR*%Zm6y_}8 z3TIaat+t3|S<b8B5-xIn4;_uGQP!qZre#;AWpwMWK!zt=i>}9`;>CkzfHr4^@k}ii zR!!FCjp<~wLTH9o5N?KK_Wfqg%dV$tF!FG$X4Yq-$gv!Y=#FkK9Fr>m>*$K+--w>9 z1o39gVzGb*=q#pYUi;dH-Vkh_X@viNXj%4XS<2{AR_XTj=^ASwQr_g2hUS;{vud_! z4ykFSwq~5BXPquDpzi6ZUb3pjn4u2iqJHM1?%J3>=%#)UrVi^(erk6Twl@2YmJ>7C zjfi*%KazQ~QNx%sYsc|eGd9BoyS|9Eeo)AGYs%CZxt6G{uH>!;&B-I{2pMa|?qaj% zE%`z<23fT?ng(q6hyrwpAq|<c^fXW#0Y6QUj~p4vUbeuF49mvsuz-%u2AR%osKTb? z!=7K6Zfpi&Y}>Bi$ChOI;<f})&hJPEs0oYK=4_#iwrQ)jYeSIgBpKgE5a8Af;eJcV zC~nt2ZrF}(E1vBwrr+F75ZwR%Zm`{Le+Ch!)3>SnH><0<f(y8V)4JMQI41-Ehr7G5 zo4AU*xU@4nv;&im3pql)r{S(UT(AU5Ym2wO1(m}%shhb3UvSU}IK$ZvUl6=X=((Q@ z4ZV{&svA-Hz6f`~1>Ea8eGs~?iwL9J;fTnzrSns9ayq_-y1z?r_P)CIR)zOYxDUUG z`ZffJ6TAE_yN&C(|7N=y8}PR_@Kk&7xnpp^n=~dLgrwjyRhaPbvv3RtI+){d9Y683 z6LF0*jS@FIhD-5((eCY*M_@(juNLnH32!$iR`M?64*5I=gg*&PJqonIH&j2`<G|e8 zz25u1;2XZ;GeIy>KIZ>(KG2907PLM`8}M|^y*O1mRb;`O#B=$x^yQ;IGXb~S3q)6_ zzx&HS-R;3!9rX@88;Yoe9ISHw^FIJgjV3I>1Jols7r2XXKxZ-92;B5N|HIdd!3|XP zK>xr&7ePZWLF7wx6m&l5b9Cy1^pKMDVxaUP^@vU{6V%Xj_S1GuZwF9kN@g7OA~f}3 zm%Rxzb~kMGSJ#JFS3+9X0|E>YG=E?2Ht0BC5IEoW8J%;Uevnu!!$w_O*4xEBXv4Gd zML7gUQ*ZP;EXF<TL$FXr)o8|NjCAULx|#?HkElR)Fhy{5>$j9ckT=D%9K~`6MNuS0 z$v{MI3`U4g3X1=*1B0Z)QxuDJWW|ec#RJ|qSsb-mEZC73M_uH_h2O?GeE4C+Lt_*R zil@22ym;1gMsG8$0iWH9$aeDsfRI0*qQ?@G_j;7aw1X6NmN!S2-$qN6`C$}Co3}Yr zR7X|hc@MdF_s#dD_V@WxXxZZXYzFwOW)Q8^27^RMuxv<*w9SZ2WLJZdi>!r=+{lhB zHDn6OyTpjOWXQT?NxaO`z0}}|*!YV`lct)NlqlEpS<J9>HPcs#YB(S4<U{du1!g1( zrc6`XkkCxYNQRs}QxVhld&;OhDtNF=t3(2<G>F1CNQ~%8iC}%j=L*IzOE`XfoK#E7 zcgt>U3(Ws-DudX3lvGKUEFKqxNtvWci5PB}KnaX^ebw&<>32xeCrR1Iv`Vf0+xLas zZ#95O2f*DgLGEhNv4zXluRPk`#d8&j-MfnK$|<U2%NKx-9pT+urYKK0k0wu|Oli_0 z%a$%*!i*_%Ce4~QZ{p0Uvn2qW(O6*`@a<bVitqFx<)^e?KYvdBsf;RhD%Gl1uVT%r zb!*jsUcWK}%5^N+vS!bsO{;b-Tej@pvP+jvoVcOcvPEMyfD@}|Qen3BxDJ;lI-A6G zG^YrXt;V)qb(H4}kDzoF<rQrAj-bI>8Xc=*w@wqKcO6;QQ^e7tvptR*8#5QkS33Z* zX}|w7XK0t9SS%wpLb=XWBYmb*$I|SLq~bxZU%f-FoFryJ6zK(u6|YjPb+hXQG6t_8 zMb7&?zYYzNc*WE2&f%&=+45y<yYSQ*W*I;|Bslc-G+1GW^;8jO9_6;!bC*q4*=3n+ zR?tD8H5S@vrMZ-vFBSpN+H1DNHk)R*)utP7u^<Q>f)x!{Tt(8ovs^dLEhrrTGFEq8 zcH4FLU3lYJ7oi~MQD}>Lz_|pUe3eCJAAb6+wUd-nQdy;ySMF4xO+N)SR8bWnrH@kl zF!dBvfuWhEnroW$6<A`i8K<0c(pjgSX2BKLTy=eOS6+Md_18;k!XpnhzvyAeE9?I# zLJ5E?mJ^6BiZt?|0Ifh$za5%I6p1{_I0yhd`9M^QAeyywjv^>pM9v<@6sQ@al=M`N z9vdD7lZqz|hhcQ5YE}(N$YsduJHB?ase`w9=L>kshKHFQ-Q<(0JDh3>>Ux!$rsX^E zc(dwzgzd4(H!ZD$#1H~iROq3JzB1x$?xp6aOOZ~Bt+SX)WGsE3hB~TgESc(Cd#bwU zYNHj&$`JsMo^<Vs@8nt_jKl)l(!_ZHpl@!oCA%zm#yAVDw49>*j<ra#bQ-s-!ly~N z-voxG%rnzmv(4@K1e8!j85QQ3Wj=MM&_mDZrdMHMLbTFLGu^b)D&;8`U3TH67hit= zMFkj}?QDa~Ak*fNO~%-4Xlf++Tr=A{m}Li#G-^ls3OfLt1KqHD_$E&=^bO~)X?-Jx z4lU^r^lUtc;ue#$*?id%qsjd(>~i94nujrKldaF=(-rHCAI40phjy;?$gD5pW%th8 zzQwIs-4&tyuQkKylaA-zv?C29ufVgSJJ4WrgAd3&)E)p_dz~@K?p1!dp}y#2Hri^l z9gEv=2O{@-c2|RU#(O*N%BX^gFU~uH6aI_gh}V`ff{Pbb;N~n!o(JX1SdKaL^W*3_ z=*oyLBBfgv0Dh6W)m<ceu7eB!VrQD!)$Vq><6W9=X2A<$FoPV*S(kVQrlc(Yr71ys z8VO5C6{GzFX(n7D3tQ;It3+*2RQuD_1mzMr<)e4ex(^=k;0Irz;}?SnN5-7t5X=}t z5qQu;B;fImbVx%JdRU?=G~<rRDDhbpVTUx7xT?9C!xcTm!ytNcj#@0y5+b@Ght7zH zJ)Eu@W9%VG=0~gs^3aDH0*}D%cn&cJ0ur+kV8@#EizF&S4^@0(7kj8kd|}Hp@Tf*2 z@sK@ySOionF~<!?;K>o}fK;c+VMSzvA}!$&4@&&u;f7emBOX$TOmrd?rAS39Vi6C| z>IfITXbg&kag2i)mmBq<#>8=GMQ()SB<F~SItq(e5Xs{Yqm#N}VT^A7fE1)J2<an` z#WInLgrX8}*+BMKWRjJ<r12`K!FR$lo;uMMO}MnPFC7JhWD=oMUg%G!p-_eY94J8x zI<y#0txr`06xLLtwK~BA9ngRosVwrA2MGcm&_E1J<N*z6By%$pP3DSBB2n|ThaDr$ zmV0p4&VQ{Wnfhp7J0rSMo~-0|;;>e&^ug1PZnPyHjRsC1<_?Lrqc-$p2|Sz_Q<kPv z8FmQAzl>*7qBQKHYb%IGIcgD)LL;WXgIP>_*V2=^N2TL}YCBuXOSiUkrZ>Fm2HE&K z0Pxf}KCSE8f@+eXwzZ`OLaHd&B+tVlHnDuIi9Nm4GkpTBp9Y=(tegT0C(2?rvzi?X zLiyw;s|6}+gL0Zns#DRH<YTF9%obnasx8%$)S<B@X=_7T)!V}MCa7F&Oks<X8=7Pq zYn^RvI|`wfXws$1b#2OIG8OkRSGn$6?x1wbTjLSew{lV}ce{(h+`go-9?YkhLTIMV zqE{`JO<H=}>)!Tuc7~vBXi6Sh!nJWquC~=0a7T;N>K0YD*2OMQ7E2|;?)Ry&{Vj0o z8(8P|#8~<zaDn?<;R{38!3JKfbg8>x-6EK^ZEbL!yldhUV+p)25idS{X5JCLH^x|5 zuZ(MKV}Hh1p)?GwfCFs8ifBf(8Ajz(tCHO~1y;6Kd2o{d9h{a0KkP3RWiU%!Ys20m zxyqtlvX-H&;h~{8%wo=oid(|s$Ch`W=e;qTQ$pi5!#U0eg^ScYyU-d6*~gRhvYaui z<*e|z&v70zp$iQd4&D>ZKjY__1byQ-J37*mPD_qI%TOEY*`R@*belKL=@=V2)S)gj zOV0ekG)K14pKdRtSMBOoLygWd)bV^VJ!DwpI@h|Mlc;+=W>Q<k)Z|_Cns-gvRvSCn zg0A$Pd92|~uMj@0Qj0sbQ4*8HgBrOQg*Hs$4r~wu8Uk6zHnt%)l$>K5N|nbptTByt zzq_I7R;owTk&9f&LfQIuudn-kVqjN9*e+HxjQ9QjPh=ZB;W1|Rj_FHfXq)ghYnjI( z@@*1(07DMo>j=d?;fX^40s!MU1j##b3VN>t7;CUNJxK0ylFOkaDPOrs;PH$_5M$a3 z-#J13?Q`w|{2c;^ETeh;LWCPV>62x6t@C_q7LrI%SAhq`EiM>fP{OJF0R|i_6Axst zV;phNhC9@82t+(;9-aWk9XgUjc%&Q<?U-9n)XsLRJ|pH0^R&|Yp5>ndKAu4zI;xBA z_Yxxg@QPm{(=Y9GzNf`do9GBS;!}xDbQ=KnsYGu);tpwWUKj78+b%fIKy0X@Kv9uL zIZ9C*s#l!e07y9{<k6mSgyNT9#l11w;f|aCKSUmRABP*d!BULhfwjVy1M!WYu4h0Z z9A-uE;;aAnz+?Zrh<5C$iCu8(6D{%JAOD=+QfK)(zQ<2zi+}>5igc{QGqjk-E>Lt1 zO$<U9yLcBoT0@IvxWcTo!ygU8Er>+BgpnTXPD<1RH5`H`NCMqeo$RGtBRJ98WSmz$ zk=Q*1Jd8sp$ih49129O!Jb<9_VB97I8AOnv35H;{JOdoi-NXDD`PpDuWM2+m(BSC| z_YK>NN!AVCiTDX&5vob!;hFkD-dGq)B`n4(2*i!7N@{(C5tYO~6ht?S2DZG-h8R(| z_207?N6YvDh^);ud|WEPLKJcw2(AeK?OotK00Sf>RXX9GHfV-AxS<PT93mJ`%1Oe0 z0018X10r~Y&Cwyft)CGxB30<%Bi0NLc2J8EU9mM{oDkt9Y9gM<T0&V`5<c4^o`pA% zkv7aAJV@0^REK4tq8$JLb_mRE97IAW#4hXs?xagdj6^q#+$da*`?#RCRA3xt+-Z5> z*lo)P%0fGg!zGBvGgtyH0ze8TRYx@AGe+a<#UMo#*(Q49<3VCLN{J*UTK55=s(oW% zWMVq9V^tubvpt+BnuUNE24ZAPLD*wQ+(SXIq7{<J#`pq36p4CZ&VA%ZI?zKd9Kt1( zg0{3nJ*2`noE98b#619?mUv+Q?&SkBc0wzR;2L-WFC0Qgwg>VVg*yO4CwSZ;kb*3L z3L;h`^|d2AiepV4*!GRrz@^$us-w{e6i))BRlK9a?H!4=g}NY$qV!)LkX3|9mGRw6 zymUmuqys-n5~#Gy%e;e8<ikFY!^bUxFc<|rISw#bV7e$HMslF<Wn4GV12B{VF%ZKw z975Ky2r#H%MYP-~5Cb;QrCr*b48GJ72Br1c<YCSePEumwSz=+D#X34BP!6T75oTE+ z&mg3OVvNr@_(DEJ3W_L3rG(7k%!)p=&i1Iz?p$C?XhuFXAh+oyz9kby{tYlJf_Tuw zEqGujAOkjx!y2Fn?k!{gJH!Jp%)#8e1M*qKIFLf`u>(rZ0V_gZ9m-^6G9qGPr%jNf z59*}hS!Y>5=6AB=WP)Q221X8f1U6_w4^`6@jZu)i2O1fZh>(*bRgrd`MmxZRQM>~= zR2;dOrPjUT$B|qFj@%)v!6giXe%>4|W@PUrCollQ^DP1%>L>3ps9>^{d5S0aW#@-F zmtrc~Id&*nglCCvB6%udld(xtp+hvx;6U6|MWn+>ofcrtgz7;TJ}BZ{VnQ~whknY# zIs_Fw6a_nMWV*0JMLAJLaifyb)P9nR%~=9B(1(?w==g!?mU0+l^<Yj`;`e2#Rh;OU zGNOuxVr7<Cmr_{&b3t56#KSXmf-`nmTb<US4W@{Rm<M`XEIg?^nyJxo>7aJlOc0*; z1!16eg->3VqP8QN#-p0r$$~N2pGoSH${r0CrCPv6QF5rG@*JTK>UM%DV~Q!Lx*4Og z7pkTsq<Si#=GvR0iLA2fzKJTAlImh2DmvEcNt9`?R-daX7_0(ovFh5bZfUNLD8VJF zv3A6-I&0qvD-9BBv|8(=AuEU~t2r_&uNo_~UMtT{YlyLExSA`rW@~nC>koFTxq|Dt z8r-<zXIZ#IGuW%WW}aGX11BH??!fE6szti0tB7*zPKN8d0&KF$t9_9LHdMjGJ}eYu zDz$#9Nt^@!8Ki+MT$_L;Y{ycjz=q?xc4uQcE5dqgt}X0nnFTgTLGQ)nidKa=v@AYg z+R57Nu!3yJ5-htK?6sQg&AOV3P6Hs!K^pWP-5`Q600J6N!b1Q+Fu=+{hyv)G0xHY_ zCFlavPHcL%Y^J({F3bVb77siW10SG)(N+aEG=aYg8PEc4&K{=7hH0~wtg5=Lw05GM zHC#tv!x<ogER;gmnnM+&!7cPc75u@rEQ7>C%o!wtJB$Jp9Bvx)LKEO&o3d>0HI6(4 zt}Fxt8H9mlu&g5pLn*B7Y0;oLJOLi&+1=VK+}fnvnkwCXtKGV;(M=}gT7i(3LKtYC z6tsf>?~Q`*vcuxK${Dl*IzYl7tiv26!aATqD_o#pIV{9VK_cYCIe<YT=x652!zh$N zZJdMS-l<?MZoWR-?RqTi)}-w2s=L~*`YPOHt^*jP0V<$^D6~Ntu!GDR13t)uEm%Q1 zz{BEFRsANyJ@7#y#KRo4LjAUa>S+th%7R^#$jq{X_O?PikOB8@1|)<5e=3(X@WJ(d zYPHI5t+KB;x-W?yZ2YG1zR|B2qya0i0xYn?GO8`^KyDfAr}07r^2WpR#={xpn*&QQ zOJr^xR)pFf?f5=0`EJJW3ZhG(LovVs|F&)n|LY3t>`ff13;Qe#bFsqaE&A0^JhTD- z_a>E6sjl;sf)5w(6u8dzy2Ap;0~+KT@+PrGEHS`<K?K_d@a{t!_-+G%t|l!N-&*b# zm$A8eF(kHdyS}iS{Ny7W+hi7S6R-+AOhfO<Ebe@7_`(A*v@AU60^$zwAE@yI>v119 zao7Gv7C+}GWC1&DvUvP)h$V&;9FHSoa<oSBBTjP9TI<gS^No?GJCuU;{((L?@!G_3 z?=<kkra>FX!W}a(@<MOE!9?a_QX7%M!*a4_pu;FUtQ1fJ6YHoFb8^ilvoH^H4i>X_ z9y1xo^Q)<7KBPl7ur56{RkpxGHb4s#7Z*&Fucu^#M4nck_^XALQr7}=KKJVXJk#^e zj_j!xD>75`d!;OiL0-9zMUqtnI?RC-q`}5|YDX8VMQ2|<lWgr;a-*{Jr+qZ7HjO-R zgD=GBO4l^2x-|B|v_=CfNB{I@-82fnkfa_pPzH724K?j<G(I==vYj!lrC*wgbX9XT zS3EV~MYXq1^-Qm7S6j9D&Dtlz<Et{YS-Uk`f3>KEHT;tGTc5R_cw(~=CC+ZOUHi3G z$F-r&btS(^S^u>%U$t8AHO2PzVLNtU``ciTaa}t$n<aHyS9VoHcE3sXJyUjO*Vtt@ zHfX=~X8T%aN2^hjb_t1g#jbW~o3>nI^xTSdQB(D6YgTLHHfhJUY=iOtm+Gn*dv;;( zwtMMzaaVS4kJ@a{Zf*CfY9qJO9Cvj8wQ>tKbH6WP9}P`Y_tGV{UVp4>cXv%&ccGzn z-G26XdpBC=_1>1JdfRn*6WV#pG;zcCdgHa;Hr<Mf_kG8+eE%AD3wLVYwtu(KbQ^e6 z1Gt#c_gLF^g8vhOLpXUaIEpp6ZKwByANY5>H-BsRQCGNy3pgcD_Je;o3rYBi|96O+ z*o8lLfvY&vq<D;DGK;tPh#ND3XE=>J&5ZLn7u&dZxp=KY_m5K=hwnFF8+kGZd3Oyt zs}}i^b0T}|cUDI#g-Lk|H#yMZxIOE*iDx;{kf$|Bf+MIje<^kUm|N?XE7p^vYLu(_ zR*)w;z{38<B$|(QoQEr$CzhLoDxB*%R;XwxL&3({7iI@KQ1kg=`MIM4dZN1{l4mtG ztS%KEdVfQ@vo1QLcX>=Z_;wq1rpL*k?=WLm8KR4Npl-T6HM*icdaB17m7}q<nS&S{ z?Y!bNtSkDezf-FR>Z|MeNuVh+qjX7JdY%Wnqw+dD`MQ|`d$RMAq=Vu*_^m7~>9IpQ zBrm%LHT#%8JG7(e4lC8AXS=p<yY~I|Bra=?qc@nB`&y9t6Lf=FVf(ww^SSR}rxW#y z@3_6Ag^IF6sgvu5`un}(`^|KFmVSG(54!Q1x?mN&rXRfj1tmO+E_|?$`5aWiArCy3 zM!X77Ji_a{RAacie>_>tIWwT|yq>(VhP=q9dpYu~m$y5pxBS0L`&#ogrr&&)zP!y; ze2HGXuKRe;gX+&m;>bHUk;AyrN4l(IH7H&=&o>RFqPkg7z0+eo($7rLcj(Z=deN^? zQ5hvxVD{B(J(qEPiYYx^n|#_oeSXjSVt0Jga7!+vLNd_XJlq>A&{Umn^^3NxR7l&G z!M$OvJ=@1Tcha`o+x+2Yh1l1LJeY$wRGdlF12M2&ly&2RwMca3DR$k)hVB=ELH^b! zzLj{rc!GVZOMacSL(5qm06ZrN(w)`oX*+p?A2=WXZH0bI{G)1-+Ua|B>Z^X+Yj+B9 zH}OZs>(@y=90F~agd9d-N05Uqtb8&_-fu`mMa6^VVO|rLUT^%%=Y^iyyvO+44eAY7 zjxxX68~>E7{&zy!`CQKXqlEL*2|aYeDFFlkf%kw(VkdAOur;ZKwFB@D;=6UYGzC(X zF5)#m#v-n(RfpEGU9sMs(=<rfu0Xy3z;m{T)-qRme6>60YS67^ie9xdHxtsUh!6!1 zB`OeUQl(3oHg)<GYE-FHsaCam6>C<lTe)^!Y7}f(v17@WHG39qTD5E0nthly8Y@f# zzI{u_4x&E2{P_0k=MS(yuY(B}HhlQ$KgEmxnaNdZ0C8l=lPOoWe3>gd&Fs>p6DO{2 zwrtUu4dBEo+EcNZsnR=CGburX0^7Btm+KIzQrhHUtE4C>#)$iBMZycw+eUqFUFPZb zZr?9K-PUPp1X0?`ch2%?d*{+lx8>(3`mx3FT~VW~*|&H99)5hKZRyvye;<GTwr|nK zom=;=y!PtrufXIx5JAKiW6ZGx9efbN2;bX`GtWT#Ml{k)Lrt}?BBaNYSd^0Optk_X zXCHMASwtE<2GQoYp~~6Amx$m|#t!w~kw-d=ZnPsEdIBNo9dlN4rxrSFu?3f1_UOi; z@9x>jIsS%{5X&sJ+;S`Zy!;Z(FvTSQN-h8Bvg<g#^x=yizXB7C%QzuiP_f1^SqcdN zQj?R<KK*2m!p=SmZM4!(+q0?FAao5jq)1fHopL-mB$Znx(u9sp#EA$1ccepVN9i_= z=$;;1;;tJbYbx@{U+P$LNmcLyptoJ{sACu_)BBUxUVX)E%wUBbmRL^9l<Uj@-%*oI zHx2w1TFL1A$Ihjah!)#ywM{Be3klWm&<?@+u#;HeiLIa#>%q+vQ?hC2J9yl|<`+E- z=?MT;lWOi8PUXR|8(M#{qn&ybq2!@*XiBF?h~UYmB#QRfq+d?Ay%^(+K`oZ!jy+~e z*Rsq6FwFtmED$h_Ri0|vYLR09X62Y=cCgz)F)VaLM43|bLDys%G2Ms8VJKi7(`#oN zTn0(!UqRAQ${a-mf%hC=@+oJ?d=<Hl$ME8**B5=T?y00#0FWlAbB~&t?Y6W081A^` zHWn^qNfvNT0^fAI?Uozl8}Ps-tNFqV4du`&o*e{HM05=r$|0k7&F9>Fvt9}tP4K|O z50>0<W^+6QDe;_I@X*7OmD)*18bvnOLzTz{pPhF1=Dr>GVM8WsWHj+^7G*eV$Jp;X z1-hdd0GLUB_~xBgituj_*ZC_CAB@MGLw-ieoppk?>c?=Hf(IUSqA5`zccA%3sdUx{ zKz3T8q5k>$?e8-8{PoZOZ}+i!SC(0Nd)ED+RXn6PU={#KfGnUvKnL<IdN%_X;u2-O z1j*wWo*>2c1fmX4ctR3bfyXr1_dpY#5I*};;R@H%Ke7C;WO+N;-ca}_0}7-AjjQ1f zGZsO^<xE`bc~EWQ*AmU}5Q#~25DS^u#MK<@KfYU*$()rkC35M80B``z1VX<nesN1a z#96o!XF)KY5skES;u_cJ!mz;bcLKCx8s|hOJ4GN70O&xj1kyk{{_#O#oS+vsHZJ?E z4Uma!9vd0SLN|g1j#HFj6@{lr`4le+G!V!tkitAmeiBfd5me#ENWq<%aWZSO7*-Hj zm{o!jmTha~EcN&QNTWnDfHNFmEZdVsq=W$)e&ppa5hKXy1@TIiS>-FO(n`WGlbF%e z7A>iHJ6jF~msAX%G+AT7WW0=v+!SYKMCmOF9<z*w)Qb74mlV1QQCE^n4=Sr?G4i0N zkju1~GsoFa2vrlHaJyzivN_3Z`g1bAMCd}VVoV^W6P{REhbtO^lyexOM!VvVJjnzR zdF&z*^4uLVccrR#CetkpRcQ(X+R|bT6e0x$9t~Go7=_jpr%Z7u87rtxtRyF35HT2$ z3dvC`c}fu0qo+I9!>Uz{1*SQbYARh?)nLK&9Ws?;C8w&DoA!VuU0vx;O<B)~KBYIC zNJ>0h5eazztz#F4z=I(y0g0lWV;7aUS5f4#j7sQLDDr3$rYwQcWa=m$xcKWPyz`ED z<kb+eN{>6Fp;ujKrzDVl1v{{z3ic_=r(zYYR;*guFkw}zx}4)^uaZUPX@Ip1B`YC0 zs!^w0$|6q_h(?U@5O)M)Cz}WcEd+9toa}^b*9b&NmZ6I8SVI@Cu)}aGrcaN6L?k5f z6i9Y5HJ89dCN!}LPISVPpXebdN<C|A*&7wpzE?k}wVM=kNy+wF<)%rnf-vtJ&DoNa zp91O4Z-SE);uuFg=TJmO0l*IKXya7jX-?6Gg4BE-1v$!5kC9@bk9SnV57e>FL$Xt& z2Y<)^8R5wXc{E`j^gy-0F@`97X$&$bCM$+B-KC73a?=|mBAh&q<$q@kO{93kMKD^* zjKYePp?X*#Nn(;Me$kzGltU4($|yvTI?u^s!xp-Dg@=Ds#N_lA09f;dkVNEEBq@nW zy9hD7;4vjdIA^Is=5dYrY~#8`5rEpHsh*i~(-07Pm_+XBdXaLeOo<~Y7FNnRE(ZYO zyb4y5jaVf__m(aX1s!pX>_fT+ucQD~AgVIb_Efc9SlL3dwYt?XgkxJoBf8JIMvHs_ zo#U<Ey3ls~8?cF~=u?JPDe&k`z3$}@eJO>_%h{1KoQ9NqB-<N%=xwN`rXzh^8z~e2 zRtl2^LJn=OV{6w|7)wmml89+yVxKiKv1P1ldy|FNIF6%gxk_wb(w5$7G`3j}`xK-p zjcL@@ZBi!MZHSERAm=a}0IV?#eWb$~Ar{Dux)T+8NX;Qt13*1oF*=XfAsn6>L^r-h z6R`yXUlK>#D=HW8fZrSE<GS(PB&p-o()*@1x8%U*ljo&SF4dLZSL^VgZO%wT6M8sZ z?ATEaMMxdy_^_zy@K8~wumj7Rqme)|x4Al?`6io7T}@c$x~U5t?pV!vY4gqV`X1Eg zL67?%iOy7HLnVAoSx!rmB9CAy#U1E?Ms2jh4)dW;+0e*_QVd_h!q0E-aG(4C=Ic&h zLGRe#!Zu#!71{R-&)X>@v^-V7O?uZaaq~Ive4q_FXrPP!^@%inZFApyw#8odJNJC; zK@V)b`#y=g?;rA+uQA}`eD=QPH{6fk{2D4>an{%VubzMJ=<nOULa+YzABcUUlOO$C z>b||d-}7IKANT3!q51zVfBQ>l{km@d-EANG1-b10PKf>(EdUD;LGmxx_V4q4&i@!> z^bC-I2C(2DkOJca0sBk=iH`w|Fa9dfek2g}JWvEF;{y3C1AVUFIPm|5Z3Kr01Ou!E zWAHFau*OdC{qn8@Wsr7W(AIR&2cL-s;mZc65B^s00e=v1cn}Gfa4>@ZPzZ&O_E3=e za*zqzMhUAB3t7ntO=}3l4+o7f3*F`l!;lQ!YYXWP3Z>5r18)4vFk8mZ4dbxr&akSw z5bxNK3gz%(;7||ckPfZN4*O399k35Ih7Sv|4F9kW(-8db@b<tE5%;j1Z03h}>evV{ z601-VT`CZZ@7CHd6Z_;4Ls1hqF`zne13xhjNwHT(QI>j;6~V|9PmvMbj|jhz5MvQq zToDLiaVlVtD?(5gd1w{^3KdgO6(MmLTX7OeX^;TS7kiPkfN>hBaT!mj7^~?Rr%)NM z(NB00e=G=|nyUUTOma@o%l0W6y>XGUk(Rcx2y>AgMX?#B=b;w=Z32U_EJP|~mJc60 z3Z>2>p60QB-0>Z2k^ejq(Lj+PX{H{}=^igJAG2cD+yWpc5*_d9O44Ga8gh6Ha+cr` z7wd!tJu*wc(J3yf$$V-fBjTeX;UaB|nF11#o(&*vi62c;a6qz=L=q3XQ75qkC7WWX zPS5WO>C^hrO8gGPUP)D=#LH@nCWSF5RfZ=S$tNFC9;;G9hEl+=VH5C5uIS3H9s;ib zizxc)ukK|>28#{~izUX<u@tKk7z-jEORprWQ!2|4E-S3gk}UzCvzG7txY8=GvW*aO z0g-VbSJ5yLWGHb<70{s=f@`>ni@cD_A(V@`oC_YHOS-84t0}$gx<X<kI>l9D0_46c zCT4;qjH|qQ;=IzUqn7e90|zk^^Uw6n7S~WKN%9D96EYvN63c21F>%0vW3w!3!H~ki zIu1O#VZ!JpDb?v6&J4<uuEPKT#6;{m-l4>{13FVoJl@U4j72zSCpVoaD;p3v(=(8W zvy=cX`%W#%(5JW*VLLlT%5Z_oIu6UUEYdy&ROThj#;hf9#LPBAAk>V_lFk?2Y)P8r zNy5#}ssujOXg!&zJqPhUGjupLW0dUC5(y6V98FV_q8?U4w=V6~WTm(iOLTNg(vTw5 z3}Ms+hG3Ke)hx#sRt-X3Ez?Rw)^KIvKooE`ltUH&Qv(^3&=?X)Cj%Unjb7{pUy4$| z6wcbPP1^)aI*RDq_61eOZR`NR+>8O;8bRG?f*soJVE}-|;w?%wR7q8+Lz8hU=d?Y% z^5B*R0IDMr77pUzbmA)R;xeviI1a*~;^Vqa<VeosY60a`j^)7S<zmikX0GP+6gTVC zPMK5+<MBf|bx-B<8H>ys1p?_dj_Jlu9++<G+M(*M4iB<!>o&*hngZ<Hu1w4BR?yBB z)J}EU?sZ~^R6o*F_vcO<6DW_>GQ9FBHr4Q`C-D}qh^oTz&L`XqZ}Kj0^#ly_oE2G< zHGh`%NgY#MBLi9wBvtjXOQMA;F%qKihh5kIu?g)}Trh@QYY9|u@F(*$U8U4i(di%C zwO;Wx9HqjUs8anx5ECV`ofH;fA@&zr$zUlmRTuVR<z!#WwO?=XUq>}yDPvtNkYTG) zVta67BSaV<_7dl?Vlnn)Cvau2B4bsyW*fF+t?6TZ(><xBBuBQG1~wv1G-pXL9jB5h zHA*g95|M;Ry`FX|Z}K=*>9ESN$j))33~4lVWNBfr;INj_q;@p*$!cE-YIV+R)sY<0 zc52h{ZFZJtchl|`lN$k6Xb+=gmB}L0_HCtdZTHbOw>G5+w{7LMU=7!4ThePc3LWRw zD1)eK^Qj}%)^8X0q#jowjjC`TL~iH*wm;@83jOsrfi^hv)-d)~GVDX7qLyu$c5?^! zJ``7Qse&W9R&5*CZ4visu~v6kvTRQZ-zwK~VRv)iHYSHRK|XhG%vH~z6m_vebqzx! zX%Z(dH`O!+n#`6z5^Kv~)@y4Qv?|hI&jAc%0V>6!udd(-5`k<P_iTUw2%g|MES4JK zVHu#{IC9b{&_NhDf`21|os6Y=#aCnPw@9?NYfS`Zz4s<Fw=h|QdF94=g$#P5*D9vB zFigsN`*v{~G{m--C{(g3CyEk0%+_AlaM3Y&q3UGwMFtWfa>l|NN<a!2K^ETko!DU; zU?C1ZpniAd8j8Re;Kg3$;SzNJz=$K4DazpoMqmVnK)22cA||S$jD>@Xmuio44$C2g z7kGp*%4<y+%HGLw2Xc8QSfF~=5q}l{F*tRJwnVG;g(KrBU08XQw{eehs74co5xA)O zaUX>j-(J`pVmN)l0v<@=1NPWy8TdPt;R9+-AgZAQinv{Ocizr{5qbd$Z~)w%D8qt^ zOzya8w>Xfw*m2cy<n*&~Q8;{C7;)P}jn|lNhc8q|(sbc?XhqbVijzJgm@v|+QxvN& zSE9Hy%O(8^Ej@~vAz>IM3m0?(u=If*3QK_{0vB{4uQuU1;A$-E>Nye%F8zg>H{o6K zWfOd(5@P2aI;&#%10HbyAq__12ZSIDisBr`;GWAM9pJ?s>{$p9!3$a;Mz}Z91ey<S z;14h&ppC!=q@al5K^lYr2}(c-+E*e*!3bpF2+9Cr<{1joV;#HzeIq#p!XYD+fC)-K z2$bLn7;k)}K?#%~3)sQb`U;|jpbX$4!0@6TkU)xMGOfIft=!7D_|h*S0x-?Snb*>( zcjTF)`5oM0n*HittQng}MVq;~F26ah=1QFBvYh8hE$i}K5}2K12cA8*mOZ9|dF+CD zSt>NxDkM`JUZOR{3pO?L9XRtCn#*DI`WSG*xg5(CDuKIVhcaIxhz({BR3W;Y=C>@9 z7Cfpl59W`nVY!0;p%(BA$?8BDa6vzd1Sq2V9qxe?RG<e?Ar3AXPLY5H5MdN<zzWy_ z9&(`s(x4PtIt(BNd&5n)dE2-3!5uDPw{^h?bO1(*;S=H@1TaAqir5^E01;>*6;vP$ zc7zmkK&9#72DrdsBsqw;VHJ@34MZUpq?4bf!4%>k1C02uRUi#mp%h|z9VH?OhQMMZ z^JyT0w>D0%!>cCxnkV1|u$${4ShKJXo2?W(CK$UI96KT)Te3?o9V%N9gzK_*B(qOA zA~>5CJR7ucWwiBkHYe_2-}<H4SP=14Wa-)~>{=?4v%n@Q5|+aokomzPOghIjDNMra zqz$p{0DXx6Vn)zx<TSxJ@*&&MZo$@rtr}tQ;-MA<K_EWvgtN^T;NhqNU_8p>JX#_Y zLI6t4fuY$!8A8AqC?^-pd>xR$2Ry7AR6vFUx!~e_&bhM$5&`T~;13WYhCQmgp(K9V zK^`7q2f{%fNC5>Lf*yWgyAw2}lcF6gxrncIDHsL?{<$UI96eg^DS{dYzLLORVTz%n zI7*~CzO%#t;KZU++=ARX(qr%dfUS&t$+WG)nVcP*yi4J<IhA6{QP|3{900UjAGqAh z+bTv|Y|KrT#asNAM;ByE_l;$|D`-3_knBa!=Rti`LgTDL1Jo9p>`a&9sPPkoi$>TR zhr^ctV?~Lo(Og*|4CaJ!-Py@O<B&>r>WoUHvldVwU?M#X+~E;ApbZw@4N9ODz?%zF zjiGDpY@sc@m!llgyc$G63drCL#=y260v;|QzLBD@h~Nig-~>=0${s!0!~5FUAr~^> zNV&5EphPO}A&Ipiax#7f&>$9M`YGak3dG0Tm26|kEz2*b)ufEv1IFCZJ=oW(t=K)y zzPKdpJ>Ex7=>!7ZbO_&<<IDLyVEldKF4Wy^XWFSfbbGB4Uz}O-R@<|J+o1wQA<c5O zv(;SXMM+0St1aD$ouZh++`2(s>^<BSjKLa>q6W`k@a3q}0o8b<+h_$FY{f_yndRaC zG`#mg4PsypLVphKAXUOU)ntGYRC<=pLDEnEx1FH`$UyYb0DT1p1@NBF(_k2;Ar8E| z(Ov!=TA$LzCn+#p)0aZ?-JKn*K@N;y1ep8yo$QmB<L(C(*&*~G_8!w>#qT){@TVRr zrkwDf<T$W2@rRw^8vou8T;BtA^1sybF`w3?eeH!Mu4Qbl=U!Lk*f_ryAl|(LK(L^} zg9sBQgeMQ%FFl4{)l)=?V7WlP()|*Yjv%~z2jO|!V+??~K(P?UbJZweIg<Ja*3;Ay zz(rr}08EUP)8IN+6$$=~lyhbyedPRfYv*nwzH_)V?b-CLpuAcr*a4vTBMiL%UmwC9 ztcPR@K6c(pgaHWv-Zyay3!XzVgy6Ljl-i|jWw7TxQYg9+boXe7;CO0Kw1Y=VhhTFz z!o*~kD}-Q!-a3?wYw&Aegz&1BXr-0&I=UU(HhdT{=Sg1%Ck8F2#}~VesXvAsS@LAc zgDYzud}%DEPMQ`m7FERa;Lo4{h8CrXR4LPq>!MDr%DKDu?*s*kA5Xr#`Sa-0t6$H) zz5Dm@<BJFIJ{l`b1HOGr$4;QW|NI2lPe1+?=nr@ZCaB<o3^wTCgWvrl;e^cG2jPVn zW~kwY9Cqm8haIvbB0K4%BaS%wWs^-b%nZN@E75Rv9*76EvkfkTp!19W9o@w9kT3dN z^h!?Wyh4yQ!|0QaGfDxlPc3#-h0ZVp1?Q4drJbWm9^JU3439#&B1lgKt;1YT@+gys zG4MD;5&+UP*_0sRNCU|$@Ejx$V6NT31pwEmP{v}@G{TNNmxLh8I%<@VNKfUwumhP1 zxl@Z}=se<RJL@o^gEsA;bBZ<|HAX4`h=#ysH6x&)4`m(5;?5;1gi%mhlzej;0OZsP z9z2(PT2L`5$&-s_lpf>`G}zqW12UTtWFwC0q{)#%P4VbsZ9xVyBmhMondFj9J{ctd zQ&!2+mEB~yWtU%G_S2Zook>udYqt4joPy11C!RDaDBr*Y7i{qV!3fJopL_P<ryqa* z0Vp7W1_o^L#TauqA%zxZ?D5AShb;2QoQ+7Li70-fB8x7<D5H59=aZ*SuHd1ECCa5E zjUss1tV%oVRHKL<czBDCOuzK3M<iNVSx{3wN6qv^mh|igYy`2hGae*`7In{DMwfKa z-zK%xoJT9fm}B5}m5)5q+;GAOC+r|o93zxag$$ArM9v647^hG>=P*IH5Vgi+4ihKL z9fL7P1N#A)i;HkV3~}fnR^cP4P=%jQUoy83J-M^U4I_jgmO_w?;Ckm=ghuxZC6rMb z>!`mzsX;Om<Qqcg)M7Kvu<6XR&p-=Jw9!Z_%`^Z`4>q>{)a+1gHP!%V&2!h)e2qug z>x}JfPG(>CJjn?qtp57!x9`3{3%A#Be*5+J&VTv@$j^WV9*F+`0PN7lBvc_x1n__e zOrQcsX0j5UC`Bu3(Tidfml=hO9owi1rQ`t(3O)@T&}avlL<mB0j0ZtGK}R%F6B6&_ z1cV|STz6vF7K5;3S;L@|lGss>638NJ%0O0k-~kV4Y=$i{;l?mPm8^rL!-xQ&Apn+T zjCSY)ew<+;XFf7BETRe;OPpC;i1;0Nd?_4W^awP#V-OB{a4;|&VW^-1mj$J8g$r>Z zx<c5*1s3FefDEJ{2RWbm+=qS;yPw4NN3jC=@sW`KG{^w|QNT!A@{*X$WCKwKL6%MM zW#!2vDAU-Tog9#q3OPq3zOjx(t!^K2n1U2NL>}+Vr#mMc<v_rL$}LVKehM@tE_W%) z?-25s$V{ff4C%1?MJ#_4>t8XaDY8jclA74erZz(~A_t~yWfF8*1!1<$@Z9n{^{B*e z{+CP6EN%oMpaD+$VzF8dlbGW?XZq}U&jq#ffazSPLjGA!b1L(o2u<ifn2AXH;ZJ}3 zt5`uNsv&E3jG`FLC`C8<K$S(XWp6}?1rvxx^qBLHq$KD;LW$B7+LNX6OJglz=0z-u za4{{tB}>W4&w;v>rtO63OjBA&qT=(MCS6$nOINB-k@hr{FXiV`e>&8h;`5RU&8k)f z8PoO5?_myIWJDdQ(XuMYq6RdpTGx6>j(+o_pUh`Z*-2HN5>uZrb!t@C(^dG{wXQ|o zWmB!{*Y@-^sY8WoF3H)|#v1go29@bu5j)wV&eb4)RnK8J+t<zNl(CWAs%S@>u*0I~ ztIkv;G#M#Pwz@VUXnn10XNx|!b~2nHWolkY22=~y^tYEKtY8Ud+RpB@uvf*bV%Znj zg=V(7z(p=`A#2)_R#v!j{p`SsyIk!86SRILt$4=^pX!<iwTXOaG$l&g*T%NJ@Qp8x zZ0k`^iqogN6`4?xYTczm*SY{cDKI1d>sie<HK@qV=XcwOU#SAvxye;-e3&ZX>nfGH zzV+^f`77PPn)JXN9&l$NN!}8hct#8b>oXzRNdL)Kt?zxYjA!g1`hpXrx*TlCo*Iu` z7{U-K`K*7ryVwBZwZlkWu5K-><E47|U;r=%JAAQ}C5s0gQD_A`w7XDvP+1)Fw6Z&b zAqkwMN4YA@sec91;~&SOvWX4wf|*?4GlN*NM^-6GPt4~No3}jZ4eM&h>S7vWG{%Nb zw4xPaW4PXTpZV1<RN*lVY#>L-7~Zd(11sS=&*&P1=*Ct58C)mF8O5g-L<+Kzfj=b6 zJkXGUmbpwHcj&+h!jM1}3CpPe68t~~veYbnej=Pao0HO(ZUme;JltlBc+P-5?x@8B zYQgMP&wK8(w#EBr@&tOt>m}==3ySD*n>*2swr_4LjBQC5H62!BY>^9_T{%CN)2IeO zHMlfwJV&_G%S^C%;Gt@9=zt5aHcuBHOdoXInijGa9C_ezELl)IR{3CZVZG5L0{<5P z@Ma0ad-?Ha_ZHe4HtIX}ZEY_9dx6`I`DnX6o^Pv`#jQQJHp{K^p2s)cxXm%iJ=Bm* z5M&vuz(yr1p^9#pV-p>b2QFSA9;b=t9J{DQM2!0mc_2OOkiechaB+)eX#ExX@cPm> zkqy^u!t4>TA3T&^iLhV)9T&pL`XJ`M3s>CC5I=*8F9ZS)q~GqA@~B2HsNso4Btt9p zsD>vRkBpqmBNf!R1TlDVi7LK>9=Y(uC2o<Eyb_!O?#KWa-WCZc=l}<iK*13DgN`Tc zU<a+p_&cBx1xh?&0z<I2!L2Y1UE>2As$gT4)L@u*K*kDbEczc;LX@K?ed#}YdOEs3 z^<4(%gjhfO%e}4&uw(5VV=w#J({A=ku)Q75fBV_xPItQt1S)y2#NM&d_rC`o7g$qx zs=yA&r+ncha|ozVG$$T5r(UeZUOqQXJQsl!=vqLBWA!$48<HKG5D2P}4s8+$fVT`# zXEvy^5j_z-?{E(Pt}qB?rwHFtDZiiyn@|kDuqNtK33WgVNVjr<KnuZ83t{68cu)tz zAPsu(Ez%GOn{W)f;0K#w4vOG@x_}ESNDIo~2S7+A=uivKLw(9s5cdEKo=^(J01S(; z6qnZv*1&kOzz*tAhR@ImeE<xS&<^x)2&qsE>Tn1=aSoU;34$nyh#(g5@Csb;4P~HZ zwnhPnumCB52(ktM;y?*^AZw*D4GTa4VGs!mU<ElL4p|@z!!QNm&<^I{cXu)~WPt-9 zaT<YBCQ;#m9U&0c0EHgm3?irsBq$CXCu;J5g6bk1;L?IG7=sAW6f|gqI0!wipo2W9 z3i|egLCA0aL}-LaI3(||giZK_Q8<O0P=(-vg<2R4!|)DW_=T<z2_~V6M)F7r7>@_F zfCABgV%1_5D1ifXP5Ic5YjuHf)nM(0Aq`Opif|{n;S9Bb8P+i;DYz~kp(cXSCSZ~f z!3aJy0TL@=2lnG6VnPt~KoJ1o4Hz*+zc2{lKz(cmk>#KWk)TB*nFn=55G-dCZxT~t z2n=$N4)`z+o$y0Mv>5RK42aMU<8TSuFb<25l#p-_&tM7K01xc&43H2G*YE>2fR$KT z1jW%A_o4$sAP-<E4y{%Y(69il&=Y4FJMtg~DF6;NQV{R}6;dGy-*65$U<Jxh0<(Yz zDR3zNN_UX2z(VivB<Is63rP^waW=x}jKX0?VMCF-q9->f80(Oc&d8Aku@4`)6%_Ff zBncZ$fs$b8m=@uZFzF34IUY4h8~_j#bm<4S5G@EKkG6SC^!N_;IB59jkC-%pz8Rd` z1dxxWSEZIAL^ufAa672t3}I6c<%2fED2Bg42ex1fxUdU*a5mUr3%Y=ICnyM7u@AyX zeH|$qF#(1g*Oe?Mg^+-qwjd^2@frwGlXAfv>7WdPP)GVShMTY$^WX_TBoE#&d7f|x zcc>0aISykW4&xvPLwO0Qa1E*O44o%91<^-eX$1zy1-7<&1QBbbK@ih`iRmB)6c7&o zY@s&yunb%Be9}+^v%mzClAOzl5HEo}^5C44$uH)U8qsqP)p?!Sxt&bWo!=P~!6=?i zQl9I0JLu_*kpP-d7!&Pzknky=CQ*_H!E*C)4*02`Guaj`stC_no41*!fRvlNiE|Jr zoPGqHa5|@=M4am;TrY<q97qS7Fq39v2bAKY4mq6!@g#L{o!2>l=;C95cQ3*?sL`Vn zFqjk6mkz4Q9o3)|?un?j@Q$u|5SMBY_n@C(ii`*`hIiNwK522|5DKuc4c1_XM!BF+ zIS!U!4`?_F6nYJ&;B;5;tH3G-r)ZJ4mJSDp4rLjlXju@#u&nUlmT(yt4Y3RVMK}y| zfdevu1lYQ#eTpp`(HUPtDbd-O(POBbs;KC|sL~joIRU8<DHD?_rIwlpn5wB*im0A? zlbAuTqDrbTC^*wvtuP5dYFe-imSU;pfP_Y;k0hrI`>>B>r$U#f7{U+^0TDw&k>XmV z@!*9(`mWYeN4lYyD|&)}Dy4)PCe>#YBe@4avLtyB4rU@y1#uFzNf4?znKsFzoPnzB zfQJG)l&QK7z;FiuprA=vt8(BDz`zJM)f3nNtiaj?I%^fT)}apfCn1^vX&IuJ_^c^f zvT~svR8gpEpgATH86L4380#8bnu{k3og7;W^kSO#BBma(qWVy>!FaO&r5UNxaU3l% z5-;nVGRqtZVY3L4v%|3mJPR&lYk+8Ku#^jB^w_51R%j3#Kn}aPo*O_Cn}HOoA=5Gl zAm|Ksa1bXkB;|kyb=$Yuz#ld-KH&0>7WoS(0S`-vHIa%h#*lb#LWF{#4_d;GzKbf@ z03=&_v$IRHD}e_u*|T=Y4)Cz5V<-oQG7g9EpGw&c59*+nfDh`>38V)P^dJliB9<I_ ztjP)hBASWLDhOel5dR`ZH0da_qAE3VBc^LDT11hmJ3g%&y(SyGS|KDvV!H?tjJdnJ zDT^v<^1Ia#ysk^Unqa&UjJ(RLxWj=Gz)>><T)&}Jxg<PY40A~TDt2?3`?&|yxh(v` z7t~FhR9`_Sx-l~|f2u6XU^8{#v2r0iE(>zfpb12y2S1|_!Dt9PvotdksbbSJw99d0 zqnz~7V^MQ8*~7sGk*+-xw;>p27nYNf@UsE>L-PO(Yj6mQP_*Jpt4SLU_n^Ipa0qKa z3mO{6R%-<xnzhfm0DkPpDG(0t%MNb2Itn4SQ*;Tg<0#BY5WTadG@HZb<Rv^zw`l_| zKwLaST*OCwyGm>`k&q|v;Kbnr#or>uJwwINL#@}7#eu-QT#N@^tczd_0EnzWC7jC> zcDX2=u=kjAFg!9Y9L&UQF`+AvO%^cufT3HQ4JFe?&;Skp-La%aG^P|r5FoTGs%Z>q z7C-O+LXxXCpm9c>#ybK5e;Miy>+lUdK}2E{lu^_U@~{nUr%MU}lkbodr#P%7lA(9Z z8KE)^RSQgiYRHa^q4R+b&a4l8#GD)?&748abktl4k<GWVCfzKT;QTA&YzGF7NxB@; zhQ-UxlwQC5rp4?r!<^DA%^}AOX~&64w@jIJ+h7Xui{<<v=ztCJI%E`0Bj5$oATuA7 z7S0vMAT!-YjcHZhfzutb(>*OpB0be-M$!!hZVxDKEuAqdz13d*ATMp4135Ae=3FQR zU4LXP4E<l4Mh;;UX=t5O4BT`s2WRY7T#lu3&t`J}(FI`wrfGf6S$PfDBgS=zr=JW> zXH2~?ZY^rfR#XZy*8^=yR9)H9=2g9H(!2@GUmY-A-PxdxAYpA~$-HCH=4me16WvwU zf-Tl%ozJ~BZ_8$9r>17irr7R*+DVpKyN%3`{bUdZf53&OxgFDSnN60R+^>CFnJs8; zs@0+WA)g)H)Xiuz+)+0ckT5;g8B^S+M%&-b)<KP@3&>drwq5in*wKb$;=S4*mfPD6 z-0v}D2GiPRrQFHg-rm;SSiP{-E#3QgQU5*QqJ7<OrEU{Tu-67y_cqc;t=}RxZw+qO zCx?@{nOEq&X1x8^>;Y-SEnObxVHOT;m^NVl^-Wl8h2NH~-!;eIDxB4tOW+tX-7;R? zqs?xm-QDMXZII>QY6jsh*W(FBV0IPa^9|VWZRD{{<Q=Y89}Zzq?rbP0<V8l`-o4`* zSWqfn*(}b0F0Qb>S>qW(<6<7#H%{IP&R2u|+lghIe*_iAP~jHtUAI(tg9%~g@MDmm z4R!T#loeQGR%XH-<>sM6ef`=viDClw;B^M)3}@m)KH=|R=d}nwd2R@M-sQJF-Wj#! zRITZ{`Q;}K-DU0|WM1lDedcUEx$eE*wR8@K02`2vVf0zm@jc{AYClys4Q>+W(M9D| zT^_ymYr*DV;z4Y9M&fMV<~jxIgZJzI$n_c|hiY^-9!ol4@xbdh>FTXMx)kN<Qw{2v z3*)GMA*WvMEv@Q!y=Ugt-d$x%NbWnzVe76f<x2`x#Nls*KHv0laTZr`x;J#c*l*O% z+fTL=-7XNXfzG#1U1)vpNR{uPPE+s&?jkMjqQ2QEjqV9@?i^pt>ON8yBYo*mf3QJ* zQHONZ@^y8GJ>eG-<6#Y12Y8&~V|ZW)mH-Kk?GEj?376px(x7#^fDw2`e&#o}`A5Y) zrge%MjDvs+EpHH?>JcXIB)9<es^AQU5Xz|1ep?3s1&B|GVHjy^1p_911wnoAH+M@H zc3uC0Z@=>8*Ya04^He7uGSBq?HE#$vpYuQ8^P)CIL2n2{k39>_@@`KM_@{TIvh;wb z6;2QJiEk15+7?y64_D80S|7??=k@PcfUjloA&v1R?c6K;@eJbes1L&-&*>b(fwaht zP6&nhz=G^}6DPQgH&_xZ=z_}-ujZf$gCGppFbLu>X1~7)!9WXxk%d4=x2L-YJm`0| z?5(=rj8aI20H`B7=%OzfjJl7Dluw(o?~N-l2-4uX&PgiQ@Po&IbiU(`1<{JHhy<}H z6tf8Tb^(P0QT_no#~6Tft|9>_7swX?dA}5GD)uYSz=DHrEmQQW9RPEh1_{G9NSwQ1 z7&ir@1pt6MWqxP{t0gG^9Xw}yXf1Q4$Ja)cJyp7M2vOodj*2R6(uK<xx?go}YKoMu z;lqdmdzRZnRHd{)n~v=g7|+!pX?O%V%cBjzwLr9vEmNh^Tuw-@eBQ;ISMOfFef{=* z7g+FM!i5bVMx0pjV#bXfKZYDRuu8|#SYaCQ?OQr_f%Sdn7rI|Rf2IBXMV(spYSyh? zzlQx!_H1UCVc*7`Tla3>y?y@%u9w|#cIncI6Q?;_wrI=-aAFmW@8RGKu~kx3Hyr@6 z2lI6Y01s=gj2j!~=>}k(rbaZ=hIeMC8&Esp@San&@Tx+&3fCC~pdGGu((AnR)@vjm zgcOOYCvyUcMIQkFs_~;61JzTck*l)mDV|ym;?5wkD5*ywdIA{;t@Q50MH4@4G3J~b ztWc(eS@1}K9eJ+H?v?F&+UG-dxcg8gu{0EK5Arl(NTLJTb5AXr<fG5NyYSObrG)f* z(3k%X5>O$Y@VXE|1<PUZM~)zrkU|Tc#85*mIW)4!5F;6}L|;x!5xu<5Y4Js^sv}e{ z$qq#{QAHPJR5HpMvkWuMIP(lN(MU6`P)#@GG`HDkv#nE6M<umXQ%~)w8C9EMrd4K; z5hm7KZh4Ls02*!78$1TlrnA84(F77(aIwV|K{}Ji8MDL*tf6Dy+2<EQf~3QiVRzZ1 zoBtXq44xAIV;QWPK!&wt7d>J*5!`pWZ0DVIbg?C+W~J>cT0z?FaxiZM3T(@Cq)i7} zX$8Z|7{Tbtj$C8csU#LX&q47WH0!X%mu~ODC=YXHl%|MTnAo8mU3v9&Fsv+o2Vr4} zH5OTA1!49bXX}-gT5EB^R$EuNCCpn0!yT7cbJ6{IT`}E-S6-Rv75HAGQ4VZhgC$nz zUzwUFIIDvbW?2x19aacpgD0-|;*7h&HEp%mX1i^--=^+XNH5gA<yRcxv#2}Fz~HXI z-Gghe!QI{6-JJ{!Fj#O+2<{F+L(suPfF!sCcM_Z+N#^j|`>ea~y=$F6;C$`=($!tv z>+O20p69cNpta0*HlZjb!Jk3~Nbq`>wqreR)*!yJr0=MvW#y%zj_f{(uJkr)mMVp< z0{~GTP1P1?R$-r&|3!7#%-qWLZXb%w3!-F~U9XL^`)+9KETx81&o(gRCa_^<zZ^+v zEg!_MVClRT*tZdL+sN0#;~X`9+fZ%Q72s}7$dwyN!s+V<;o^4>ENERpOM4YBj*dwU ztXGZ<mL-qmJAU8w?`9rR+!g3*o3~-M>N)=Y7b>Fn$KPKrgM#B1NqI7Rs_LO;#MAwA zcS1*BwCxBQidr<_QpPT6;e_Gizb}@!uL`^=c1|s@47=sXItjcoC;{9~r1d5Yi1-Nr z0FS&&p7w6ku!%^iCQM9$k?d<iaDf65f0qIT5Q85<0RWWk%8d@%D-X=U7_3_H6m{h2 z;#3oO1cZ1c+Uq5*bjB8bprj!qJ|X0_m~f)zNh$nnS}ZL-y&nnKDHs;2NbwR%xP~k@ zOO-UFj$M?$z-{{&(b}ABO`>tPb18e$_?5~Gl+AkAlIV@<MCUdqE4CO2<3k-wS{^JT zyR0M_+M9V^iN#Wc=BhxHfN$I!%Bk$XHHmTBrJjpb*!)@^jrw^>lTMBEvX^N>ttchc zRQG@p4O7^dkvP3Izk>IpC`E|HH=BZW2ew)<Ex+9Fh5OlfPJE)68a6x6>n=1->ZNX` zMPlEEL1*bpSF!NB@5RV710vq>5mssbBz?(h+tpTF3!E61(C0}|?)YMrJ=jY!cZ}FA ze)_t;GQmU0hD2Q}y3ZuCoTB~-pL)ZQ+o=>rc3h$@x)VM6o|?71b(x*(jnU-ox;srr z&8+4oKfSeXfS`ap_F>Rovd4+4_Ib+~-%SRdvw;dEFdE&qPB%v3SrpGuvnN5es#9B` z8{txzpl~azo7{F)CEj5oCrLS+p4wi)hO40#+M}1>hp6QH8yDeJm(@pf&`7;;Y!kMc zS`5A=mtk_VNug|U*q5zcwmCuXn4GH7>Zsf3KH+M6tMe^)vAz0DiX(sz$|mBQc&fn& zag?YFT3qb>FzV?QxJEv4+u4=*G{PoeD?W`P=Z~TIQ{pOP;XE53KjZ?T7sZdEYh*-) z%OA^lQ36+S5T-$Xn~SCGtjF5pQ189M#Ch&*-Dn7K;+fqrWSiAZ{%N-35<k=w)FZLF zj|rxw3H36&uE&r{UmDmNMbPbTTO0{=z}D6phU#Q(BvE%r?+G-hFn1RSQ=s)MpD$eK zZq!9{wR^w5=LpProBPMBtM~lgD`ec<O0qCG=ESj?fBh8e9#5|SW&sxIp0sK0ur&H- zbc+%t1s#Rlln_;<g@drc23&qWlug1B_cCRB&_%4r8tk9{1ydd}C_+3$swf$`wzkpv zLi9TJ!@GS+XHmrPOhX9ue(Gm&{&z$)b4L!goBV};hCr13#3_;`C~t<lL38mhe%ky? zIg*tz<DU^g3RMzj;khWxx4_8)Y@MzSy`jr*V|>Sp*9cFB+d(vle0saB(v-)5<au_D z=4QUgBW=MjMD8zBTUIHGAOIDA@8XTE*w15!7&HEIaC<FomYYk%$JwQ^pw3ODgFw3& zVi%+9x4N><e&yhqYwqBW3mXUzfQ|U)L~wmRVLgfiuxC|k`Vw!~k@JLVGbv_VXe5;V zHF^9d5BL25Y5%j6s&FmE=CDg9!^v0PYlHmvWDgD8H#NA>;AfPm|DL9I_;t^Ayk@zy ziRX-Y-Jd-S?T4w)D}Dt7>j$FaJy>+KzCOkg>$JvQW5<{QW#k*8^sj?InJZp}AAUMG zj0l@SE|J~(=~<o_kB2RC$#)6JudhipcYmFHd1IKcapvre`)ymw&vw4|*bE-NzAqj8 zap~`-1oCkN(dX3OTW}VM9<g;@7L>u;_mib7e1~)(WK8tOW#Vw}2nTJ@(C*!N&UnNo zX7f!b-M^n{=#fW?GGX6%C9iDAgAW|TLl?S=j@~)<u4$$QLgE5-e=RFDfQa$k_UuSj z)9FMKP~Jcr?Wxvm?rdgSajmB8sTT9cuFJiz_OZ=qdM4ty)dnJe1ta&XmwIO{&$Sny zdrwca#zf_;?q@#J{(3XAAc<G{cW4<z;Wy}Rvv-cEO${VCr+~{73~GtR^_ijDn1CM3 zk?1H65R`0CyZ9jLUX`;6s$GlJIbslJ9`X%1@T?iRmMFUd4H3>aasi-N7bpOofr@0Q zk?*gzTuDOGWgdxBKozkn_2@QG7&H;x!3OS|0P^%f4-`XHfL4TFpxSi9cwp!uVi1T6 zJX2PVrEm~^eUNKpnA@WiZ(U-Oafp#<h?nG9Xcb@N(&Z@@r*VN+*^6cijgta>pjn9> zgrHm0#Fhj4gXxRaOiG?>Ag){TmUFfK%V^R#93DDx(I0C4*yDmSh90=Msj|_BDBwDC ztqS!D_AcnbC6KKwxN|zp*9WxmVSq(LNQY$91O|78#`+`(y^I|-$yQX@M#^1M$<tyX z%;!g$^agsNF)l4&P5=}eDnI{7t%-qZr~)tcOLARC^ASf+BZ#-OVR_qvSxDcI)SYmZ zk1bV$y<QqGe}Srck@F%&!Nw)csYgal9i1LkI)nnQHP;^r0ITMshc?LAEXVdG!NWc& zQ(7pB0a{I&Ct`$DhHDh3)<#DrN8<t}5U!#*E~4%L0I>?#OD9o*9Sl$bD6=blTO~Z3 zORbs2;`PUGZzcD%O&i=|Zx0#2KZ@s_VwTM)a6cL_fTEE+Di5~|ef{|SBv9Q2E7j)X zgLKhD9pJCqWfXK8!bs>UQNdM0EJh?#u=c6?*wNTOgK(U}_&wxQGY+-44(4rdJT?^Q zjsYaT__QKXopDTxEE7fm^M%Vg0#x!`W8S;<<a%tggbY$BLec=#aoFpVRT|^L_p0LT z+#xu_!b!@eE^yy&RC^OebwJ}_%RuBF%Vfp0bBl&@1UPzR>MOG*?z~z*=<~qk)VzbH zW}-?l1Q7fg?D5Q4D48H}k<hr8^m{cnmqF!R+8&<&IZJ^)4v_S(6>XKF^h%trcREhK zJ65lxJ*Wn5a3AmgX=tz;uC-UCF%6$Mi!~}47rsEX5{tbcNzuC@4F<$(Z4JoNqnWyt z8{(+dbA5Rl(e9DZ<n_=TBmDRebxun)elLBZXe&MlfrNg*0g^!C)0i9e)mXmDVJj*y z-Ka4ebFx~uyj_@N@!6@6J#CAmhyOE2wY|tOZjcS2ei<^NjPx7V{50TIf^Nf(W=9|I zE*5(hKpweQiAIfPHwdQwG6SWa_#^a<>3#2ChYtXnoCSw(Y+v4RqX3dnp$<^6unN>v z49sbxgD%|IN*NnKPg5<9Zao2y1(1K+CX>nJc>4{#$BjIllCwdNeZLOf?Y_@?Qo0Bg zOtbM-u|y-R8;wj6>_Gt+2IQ&5P6r*0i(lmERVe7qDFoTfiepebHmET#82Dwr(=?=F z=@4VzCt)L9(Cd2>1VbsdiC>ch|9)!QC&KZVL&hE^H67{Z9){%-00kJ_;pg9)Ubv?O zLE)JU@Q2;+h(9_1h#`JBgYqUYbqcU;<>2R7Wpxkor>6nolM%yuBTZ&KZL}qyztT;o zB9o`XEW(Cz3=08{Oa1v^LDU|*?l=dXS0<+F9`14h319;Mb}d{SE$ntD`_B`Da2*MV zhK-1A4m=PVZyt?4V*@`IVhLKVZ&>9bpju3-T&`_L^%@lRMO#Tn6V&<J6NHu;D7=#W zC0W2i<_<<`EIbhs60eo7G1f9W4psh_9LGqyQgmw?z-ZhoXl!n<@&mF`rnm~k?Fl1| z2L}$pDwf|lQtjNY)ODEoF|JhXzbRipn&revAz&-@q-(7#YkZ$qo4(*SDXs<mUA+rm zZHrs$&M_x{wbl`b+tFdJ?`d8|wcK;NHh^ZKSiAPg6ZaE~1^dQYIPUtW<NBCo%8-=B z0^j-ssi6c6P0}1qcLJ5yk|EfH)Nm5fz5>>Q#C{G~|E_3R3$vK|n>^{bv8b`$;>h4p z6SLZA$)0XDDuyng0y3TJn@9Vx)z@3H-*cfqvE;ddRIm!V72hhO-myd74O?5u0cuXq zEAhim_64^0fBgFSVZqX>&u8PJZ}i}O;UNwCv0{@eAXZ!jq>00zKmdk7Kxz{Rn+c|1 z0yKLcc*t9j+FaaYj<`pSm8?G!-7+8c_(eX19V`uj{dUChZ~=b5{ejiF^$lo!)t7v^ zU;{6N;e)qD2y6xDVRj?&f)G?w_BfyjoKpp6eiX-f4-+;6uLtG{9@XhWW1c;oRxUAR zk~qLc1+|O<(%d*3dKe!D1uzKJmOTzL>Xm;8kiLJ5v(t_<hJlD|TLiF;4~B{#*(`*V z@w4voiLCJa+j_}rD;5CPZ2`u;jMHP>GFl$d#ei+sY)ia?89~rh?qPxXFa;BIAr~}~ zH->ACKn|7I2r+a%6;xYNyHJWafdqZ(sE?F*8(fQfnnCZlSz#}g>;=i}1$gXr$rk9s za;P$MOrsHj0GJRINv-Pw6R?4w34<fj(al?83TkY1{q_~Q(WO;lL-JupKKn)x9AGZm z{vi2JN4Sz#TnIf(Ih9tW+kT`4EUn|9b#UONMMd$JfwHaC_<=$HAbD2N**{*-Kq=n1 zl)=`<abvGA@FGTNu=;bH1}3;sga>B(#a?uEH{@bBL=0pKf!k>v0Do{{#&7yB?*_K) z9kuSJk>UifgT+c5y%&$(XubSckR#H-VBkd>xQHF_&mz-FFQc>6*2K{)!&%e~rfel_ zm1zgdfa@JO2bsikB<L##q1&dS3-KLEX}R2!;<yCSauCdlu(OD&?ZCKjFlQW6t4`{a zRMNZ<=1^pgt;=Ch5NY-pc9s=s3s@&8=rA{4KEx!Rl`kLqedG-7rD~N!2z~rX9J*z? zZS+4_hzrP`?4*pRA!N`+jV6xU2ED_{J%nI~Jr{`eJaJg%<^w)XCv$DP!)!Go{p_U~ zWaJo<>Ky9_*K4ulxCcer95McK7JUm_)r5(p#}(5a!2g}nFa8i?gsnQB2Fb#8Yb-fR zVo%?=b;h4<r+PGikEs|Bn-@I*gJ(`AzvhM9!*4zEl$s(`;2tGAMTtTo0I1jf%sMWP z5e)9pJu|E)Gp>YV4))%0I{%*I5#nXm)O5D*_3IF<o}&cLE%KV_>w)FQ2;FbokzHU# zA-#Qno%mIGPj{X-r+865y8P=G58VP=Z>^wo`E2E!P2RZ~ME!cSx`6L_P|2O<^<NN) z`hE}dZX^Rg{P1x)@<BuTz&$PqH@^^fT~eJF0;@gnw0&AreP0}U{EhM<8oy)|z0wl- zMM-%`_S%;Yd1+aA`Iq&IsrrhO+@c}={EydV#xLKjC_i>&DOKANL-S>OG~A^d!e#95 zy?9wA<+H!&fsef6Pw^8tU+WM@=dJlEeCRKteMO^uAqKw`Czt<2b~W4Y-@&jYlD{n- z9H6Cj*%;-|Lmt4!cEj7?uW(){f(No_0m?_+=$!u$+4NKE@(>@mA;h`lUkd2<MLL?! zIqT*H0+IfEPFFnIhX!mz8r8oP#z}#{z%ES}rfheknwR%Hx2(VYERApJt9`AVv)|3c z__)|}vER8XTj~`DkdNPHIRz2y1!9bo_UFc+-T~S3-8_tc_k8j3C3E#^zHvkbU7O!J z!{42G+S$&bag+=N{{G$l=7w}L$Z_^Ily1PM_^LzKo&5-$lykrbJ$apXU&nGA%ogG; z8nPr95FSi5!~;{P-v$)lXOOQ11z$&>-?h$!yurWzkb5OiY?hf9nlyeTGJo}u`a8z@ zVY>cz9{jEVJ?wnpZcikzP3iW1vt%s%p~U%dOZcIx<34-Vqv9~s`S(NBIPwu2FN6&L zMxQRAPFdm_mq$yd?1=PtgYwf@q}XTi55cdNbQE3R5Tiu_pIVy54jT(^q@LOjp9a3z z2$H?ht$FGv4!?QX)OY?g0$&@zx5wl8$Q}|ikry#pjM~EU=aWnXQ5RU%2Q|a^&uo|3 z*tyL(`m4!JlpL|YY)6Tuf`^~sR=bS80nj*8u-9DI-%Pe2pROVEDdGEQvJ*=v3%?V$ zj1$|KT$h%@8LQpn2mT%)O}{SLd^;4IApiFr9m=+hvLF+=YwWx?`zIU`&ygB($o85! zF6t^LDkVAM6dgcwgt^1!el8lmpLToI^;%mBd7+66L;xqzF=(^_fMq0#4LyKHSF4rr z=z?J+frw47!R3;1EQM0k?@Wb&bRwNzJMr-*k+@1Vg#v{VnrPS_EU;NXY~QdkUHB^a z>g@QMZLUNPPW004hW%TGTAqOC$qmPRjb620quVX#V%2}@odB18W{pCPq*p9@731x0 zOKqN~MnCJi{r3AC-G4X9s{trUscT>*kWVq_#5|uaJybGTb?Y3CiJY{8D=R9Fb8iI> zrr(PC|2lgRJen(0&RXp0I5k$X9gpHnrl{CnZgbvz@BU8Y*KpX=<=<q!WO;)gI5F=( z9kDuHz_$oS3{(sNq`;^%;)VagN5KS#R)p!J#Qnw2cowhsKS|_cU3Fg!sX7@H15lri z5b;7rd93+gUN7DAk^wdV01G+51ydS@;t_O;^RM{5jhVL?>JT$P2L+15OK<}YOtWMo z7SRmYwG3l<8^V~xQP<6wywjMs>UK^jL<eAy4Pi>9I94`J75le~EsIK9fshfo31QA8 zaNN=HM=fZ_0I=4Kz~O>JurI_LgWnnREW;jH@@<oj8I3^(zHm3Y9KZNjfKY3a=`D*m zTdc&G;^7-4^-V0~4?#AbEa{Fodz8>%(6-4G%Ag80jsXX;1cR9fYh{jE7)Mn>e2*2H zSKYxJ8o)+}$t?D*S>b!!q7!;))1$4~x>h1*2ztdUWOgElFDe#B&Z21#4hgf{EAG}& z%5d&B?Y{2OGQc2UFw>l5PNC4Rh>@!^rt+<)*BAv8z3iVB5TIfGtvUs&h@LG#7AIgX zpBkhAT#;Cu)>WjKJn7|qmKUiXhgkvmelnIu`Kb+6tf~-j)fGMYD6h$REEAK002R^1 z?w@k&6e5@l<^9)(64e0I7woU5U9NdQzwG@ZFkRdzI*b8OsR01;EuJoish%3j-^<{G zEBM22nS{Pk3B#fC<aU1Fn6t8h@))29Iqzvx_dekzOY~btljM}ux08~vXGJrfYGIH$ zvb*t+SXm|me=Sg*84F;x=b@)o378uK6xtwv3U9|zMcudZUZKR7bUa!D01HK)U32dG zGe$2kP$0keUEX!5aRP2^lD-%4jU`Y4CM3jm8hih}I%8`Z2Q&t209k6T4A(;UWv`pa z8c307v*&V%c&r~<a^ZSv+(U$7r>*KTQnw4voj+b!$K57!L}<ida8|4Q)4e1xxB91~ zYcS3BC_MnqRGk(bn<(cT-qqx(WtQKO?AaSmYRQaA#b?>4?&gcXC8`-j!$R{&8AL@D z%)ngwR27LYQH&;7CjG_n!s48G)9&pdg>|C}?ZL$ugF{AE7y*bP*k$UK#aE1~d?tc^ z8+ttd2?+XFjc_KHA$n`v5Is?bCmlC3@y{!TVbTs5Eypyb#5xL&Y730x#|5GyTTk8^ zRR?bMXJ<R)h?cIuIiZcR>;(%E8XN)wd{No0O{EwfGhhp2uN!CR&d&<hXiYk&hw~U6 z5Qo~>6N@Lpxfo^3Lbl3?a+YK1TU(RWC>Y5Eec?jvwb)csd(>G%BV3S*ByVVIc9lZ` zg{i#k$l#@ciwBFs4a#Sa_lo?*P#gP`F2=Bc;mq)}a*YF&6yXXv3KR=;9w9;u!wP%W z=f)qPV_T}(d^FkkavaNSX`(EKJ$Yd)T<{L^j31Q4w~&N$f&WVnL;90XS)74zO8?u3 zq7gHElTKwN`k73f=0X-S<fE#3#xhY}Dj_wB;huujOl+D#wyMP2{ABs`GLlt#2Nn{B zS*IBXx{iccx=mk2`y+(f%mmEw?h;!zz@Fx9{<cKL&}3E<PGQiIk}7Turpz+q+q*v; zIs>SkHBz3%QpD^<|1dwlX9zUxP$-i<?i#TS8_vT;JJ49oNQ<o5B}h&O(}GLiq|a1P zhj*81Y?b0jV5rk_c~+VIOvejD9nLckP=0x2gKfU`jD@ApH9H^D$_96|#A^~t8<x)+ zPSw`>>($vaNmN%~HHN;FWzQqy<c4Q1(Cj~p@AZ7K9o%B@-VrD}7`-L#!UA^SMxIIx zCVqRlv)43GgRuHths2U0@*@waLGX!%EpHPAOUhfG;j=uMY;tt<z{<{ED%PmS-TA2- zM;=L>@at;lGg65?+rieO-&h}^WOwXWs9r;+3MT9ubA7qYPfIb>CMu{8G|)Zl-=zf~ z1>nCk@%9CA+k9irt#MFo@()K{K^5$l@q3}FO5aVC2cR$I@GHZ5ow(skBAEQjbzH=U zKOvyqm|!?3QJjPUqp%P`{=lwm=~|ZXVz`UylD?Vu2E{)3N;LahdUYT=_Z~wqE2TKq zpc;L*Hmxv)azltfc5zA~tNw%15&c9C${_Abe|xIA{CK_+XIql5<#n&NJ+waNXGNHF z#T$LWe8#V#OCs;L<A3>#6<*R~$P|^6h0MWNJeL0h^(FLQgmKPm>?sPaa-N!^ad|Nu zn`3|gIsE}Sbg?+L9v{DVZK+ks|1Akge>=Z!f-d@8qvP+w033wuuq;I{l#K{eOQM_u zB(QM-pP6ZTqm<1{`45zcdzW=gXGKRc@MLyCbbq##WgfTF{1P9fy~C*ljQIE6{MW=P zm6RoQ`cgd`C_k`7#Ivbn*cQ|vh>Oxu^|ttNt*Cl`-0|SIjSi)99>~)@h6J@&Z+Jdg zta(lVZU>1|sr1V2X>iZ|dVac;J^ydhK0SkA1@WpPo?17N@ty6pjXvunf9R&??k4nk zD7>G0zX4AP=m0k`01r@tnrhQA=HGOU@Uvj0MGu)U)Vhih1Z~U7JesR~!NvxZkW`vX z3i<S3*XnO%OTC5<$k6&^Fumtv;eG7v<q1m5US-%}?V7J|y6fQbk=mK-(rCjAh)&x$ zRS*r^xQ@!m8;6kt@<$P0dBkiL$}i$&BzK6L??(muFH>Jj?lJK`OzQVv<qk+52sS@_ z@$bJbLP{RV^FDsf>c6Q%@8g?_#kTaB-<$=DZ`?-ZHSb#9bq1^8|3U%iA<&;GBF~z2 zg1{lgp8GKw>8q^fKl_3M4>PZ&Z_0W99_tT0E)GcFeQ170v<^J|KuX^uc%u$M^i%st zy4N?oc9?+nf4eP*k3U!Bo?6Cb{{5m?+1&l^_hPPOo#2lQ09*pVqemetL7}AwvX%gO zp81g_AZdD3r4m#vdNiXFG%I?rQwi9M9zCc8oz`YXV+CDq3-HO3v=t--K@2FaeFXr7 zj#U3nZf<<F#`!^eo-_FCJ>@Dc0ROH8{~tX8xRd~ofsm|}kd}dnwUmg5fmo!JSek)E zsgy*Efz+s!)QW-3sg%r%fjp>`oRbQR6G(*uk%7pw%$Jx?(^0PekQP(e{JVj8vnFBy z!>AbICz0oIfl!jjbEZI^DS^Cu+jN<7=q1kt&_T9}7z}zK{{<8iV8>e{i;DD#5o#I4 z0SvQW$g;kb<EsE-3!yN_+wpRPux}vjL?9w4fE7?i8314dmw`XY@}Yv5tzy7XM(%zT zW==+)q%!(%cDzE2xbt@0SEU$7jNJch`B-JSflT!Aa;O?H>~}GYjOFxtyZpc%VWKhy z#xh0$Mxt)Umtl7J7)<;pc3fpZ`c*qRKp9W_4*LZJAHc-VSI!+@#x{b&t--|CJtTb> zBiew%glfm8V$XXaN1ZRnM>|Xn*b#0(p@%T?Q_E3lFmc91+2zV*<L!jq%4zM&g`=27 zY3&$!82R~RF>7`?t_Jy<?D>Nn1mwziQeuc(plCPIJadek-v+smV0+FcJLV)N4J#)4 zs~sWW4wC{@jh2NuH-@TZ5IhZ_12A%?4q}>A8jcO>39!(Q4N)!cP_ggOSRgQjWToCR zGIug6JK1Z<F><&87&OW$eFi1{DlLDoSRGVa{bI4cV|j)^zGz3WnHgfnfZ5`~Y_ULg zM8uVEhADMcDI20~U$Hvm#@OBsQ{KezHOR6J#_(|i?Y*2h`9K0VAVEHPK?7ikX$%Vn zs00F(nIL*GjKu>0;53yg*D!dkmdHb?>N4Jm&TsQm%Re8dLX{WxfDljbuy_p82SIo( zfEd{hbR+iaJRtlL0K*wG+e}$-rk#3Nbud<WFt}V2sprU91blg5E0J4m)>Q5fWc15* z<V`pXbAw2fu>}NG>VeBJxSjd-O1Z%x&R5Q%cXHH&l@VdiJbw<kv0T``IR|(_dB#uz z4&+b?fZ->@WB~xKX-4s~ohU|^*R1<o@iEV~L#P{+SOF3YW&%(gaWAs*l2n8M?WE=G zcp9R^4&-DP4+U#b*sKr?8jie@%=FVo3L<-N?&S1-G4ZjwSS+%^UL7S(+0pIT`5PU@ zIUU8vI7Y_TCdk=Q-#Ej7?6EU0x>05MjIua`F_}fx+A)wcGuO8>Z0xIS(VdLhC$&X- zOvFAARD)=alpzX>=u$>b3htU>pgl`0OB}K)2J2I_Up@;_J|kb1eNLIH;8-o1%5L<` zzN83eZEjs{5ocXhU0oAr?H%yh+Vg_I$!?~OZ*Z70C5DFp#?c_lK@S2XkO?f;anK_g zy(pc^fUQ---2Y*4%JR{J1T2PGriWe2oCLe0sUSeWmK+uk@Jh^F1OOEy7?Bv<^m2;z zDysj{w@q~v!*Mjs0jS1k8S*(`U?h=e>OU5E9>{8u<t1R`wqfTKItp@PqfS8~QW&Hn zk>?YtCIRfQhoEpyGjg~<N#@E}M)tXhV9dZ6j=|c5G9bSN5S?TPcEW%V@ZdA>pbTKd zr(j1M)N|y=Onqb)5b*GivExLxIPhMS(t$y=cc)_l<pWh`Q*IC{7e+db%Gpkjxi(pT z3lP4|9{a_qFR)=SYF9NEK$jgu&3wiz)ZnMbG<#*sp~r-s0AK*TjAk4{!(m!mv>&+R zo>OWx_GRQx0nU{XP;)Z_ZqDSVWcdhOspk(Bu7<dYIG9>Id2h;j_L$e2T%PCfM_D~t z1w83qdD6-?&g(TUG<l$-Ht0n$^<M!nj&|5BhDHv!SMcn=1AiXaok^{heg9TQnGNZU z@eoVmo+R5jmG)eBI-I8TJbue~+4l1i_>!9dMl}tYt!oITJ-@UXCIrY)t3)#s0cnV0 zgw~;^tg`rg9=xA+6Q2DyXLV=7%X@p2p3HuOermi|W4wQ6n*S{F{{7MX_kj1`ujaqQ z!_*iD$eAIwY}R%>P&=di2OvZ`Oz!&^xmHF5e*+3XfqOF}$mvc_K+@;K46t48lv@Gh zMn+3xGAzpctjz-fx{ExB6wYevUr(1{H@hn&K$+;}eX53pG~|VExMutS=q)w=WC)f3 z2s9UZH|)stc!4oJ$V~Ba@{teylPmw0J2k{tNb8b>SH9#UZ$cXs9|qxS8zwp2UbW-z zXN<;Ah7wP6ZQKnrhP3(-vExHp@!>qA@~uW%zJ6{^b4C19c9&D%_|Z{)g;V*bL>lnx zp~R?{1n72ZNH1?*4-}fUL8^5IeuGy0LtlJ<C<a9|S~fo-GsX`n!1?cz1oSeaX^3H+ zb3-eea~y@U=1fq*iF%Jcnifbua>l^@iz6JyR^vyN@5>Z_&XE;EPkhBsc}2@8fX*(! zWPQX`|C9R{7YXqtjk6y&If53^GzSK;;tTNGw+fZ;qsIaeVLRmTRuRP6!^{p9{?${F zKh0ZysikX<rADd44=>OW>=Y=}g01{SF`J)IIODx}Fa#_qcZb10X^Z@rhFPT05lnOY zG$$Vvt%a1F+m*b9l>GyEpZ6-+ezK(>xH8JC+OslXAlhbPTz|L;c&t+9%YoB|)kWR; zrvsk%zd`&BLqg2*0wHpo^zs4}Rw4#K=KPjsltIxyRJo%*W)=1N!8El!AjBw0^oYJk z6T$D&VdUM>ONQ_<Ly#EX(BQF=y$dwOKlA~^dWYrAp2xaJ+RTiFOqOna>=4tr!Y1{% zR_|^}UJIMmcL<l<n#^|C(!qE}0xi!2t*Zm0X@{tVIxVs9Z0Qg-u#Vn4Ig_+NTXYdq zy3XFWG0wl`I0j=(es_q%pyqkE_R1pGFk${Z2b<k`r)uGTBABCgr}e<CDb*bb{-qo7 zody1#t+j|9*Pavaods_Yzr&q5Tc-tir$e5wtN)Jqb%*V4hYMG*y|t*X;2pmWj1oBq z^)l`ZEfx)X3gkB!_Qk6<B1gFX?y%Gr@x>2TOdHnc+_&Hb4X65rAw{9+-B5h7X!3iS zn452%DD)+Af<oOe(eCE4A)!Ji4v4$}0H7%kY9&HwTgPZWS1m2XGzAe_O!9)v2$sEJ zZU<1ZGeXp%USjaQ$D?_7`<ACthayBcmC3R;V|8WH77x8AT^nKJe``e7lfl-L*(;jK z6q+gekfki1Eh_G-{*Y<@U}PPdD-jx!B?#yi&V@fblWcO}p~h4_!m(QTdlwn@usoP} z)(7!|H1YRY;+!JUg-bm}v*O0?ff@dx#h}Mr^q!J)@oZ#h5&Fjrbr=?sKBn~gq5SY7 z?0bEN%ws-VPskG=fM7U-xEi0Ux>EjQ4g6JY+Q(Y*XUsDSeZ?#KK?M;7ME!V}AT@%w z8ATT3meK;DL+sAyAkSALz~3mFfIO)`7ZPo`X8}M2y1SEK!*r|VPdhSb0T7l1Si9p& zs&#CtbMKttEyA{gI@8?98zGe5+k-FuvAXwTvqW!KZ*Nv_?|AR0S&6=--ac&cPltRW z7tcH$DBt?ir{eH_Pz0W{@DQEkFx#i$yr<!{USXFY#OBkWvgD|71OgkxG>xKufx<Kh z{O}qvE*LIA4H9VS7HPj1rIwg*M@+CGT0i^|bpcJxMqskRrjdCUYcJQ@zKmeWJ;}85 zbs3LzqDM|ens<-d=Ea3~Crf-6?fWhxHLu(^uPwD;+_zvYwdmZp=-t;16JB~PwG8iD zPLo>6>su+7TCMI|ZH`>g1~K{kSrZ(7`H5y@sc++XU0Mxm+m8Hk_^D0yX|xY9E49{+ zBK1{$WR5OsxDqBI)GrYMdIgCRDM7UQgZ7;fhR*#5-qMG`{fDomkKp}BY0}4e{l~@9 zC)NEY&C;h`{ig%cXXE{6v(i78`hRZz`-u%=tpL+&48Md(T%ZqJ;LBW+zrOr{X!}WJ ziYwht+TX+3FV8G}WBl%l>Geh)-(4PG@@&L}|G@8HnS12xfqS^jL)ySYp3GzMz+<({ zQ}e)6m&~7mfj{Fie`g2&F3J4c9Qb!AgFKgkM0{pV--5u<2x$%S)3@c|xD3+S6d5}T z$)x<!B=MMY6{=7%O!e_p2h}V#-715ED@*mf^Q+^m$uy^dsDD1dxt=U%?P8f|FzKso z7u|B@3|2$48*BaQX%kzsS2=Em^~SAE3m<dbmugwQ$B~K#or!*M{#s?&o9k)b<-I+Y zBa!E2*&BR$u+W?5Z9VWB1)WSX-^Ui=lHqF?i%DFrF>IxjD_P*TKlSiqve5L}NvpY7 z7EabTfBe0sT({b&?``1eBI{^oj+FVj?OK=b;bI^1U9k7&Kr}k}44G-wXcC>dQNLtc z|Mcv8_gt;4V$H&T7S2okG%m+gI+cFpGDQ)g*J?xYZ#3UUhW|d_9?z30j*5KxeR;Sv zQ2hEe5{ZJNGl+u8JvRtCw?7~rCnHg$IHph08OG#j&=EXoxIX)YE8afU`+D$HXM|9d zTbFBjUfov;)zstbD7kHl?$`_0hOc8(z5!_k`V<ciL;C5hIui`=iqsFMErPm}EHXI0 zlWe6anIl;S4d14?TBr3szw9~t_L+AGM}L}slKcC#;8zX(FTyJx-@k}%r(CN$>Dca( z=u*g{y*Ri((-)tvz%dxXcuz7vCr?PK$s+#3a~}Csnc<DWH&u?t`ETm{?}>9%wZt8X zr2gU<8bF9&21>|j3mPsMnzFc68r!}xTr_oUTv#;s{bIOe8TxZ!$vPU>XxTRL<>In^ zMqEdMq4Y*Tj+EjXBXPiw(#{2UMR{RKkDi|*Umb>Ujn{oAUoNftf7LYJ2wX9AU2$Ry zHChdAY+ST*@B1Rk<$3#a$(m&i*JLXilV^DgMyR#C<%j}7BLx_hlFfy4G%f8U@%NkT zx*>m>a70PrnL1pP@T}}*>1vto=a`P=*uoid#dZrso5XiBd_}PK3PXRb92Q68nH`n3 z#uOZt>#w~yt}O6cJ+3ZI4HGV}Y<k5}**If{JZ<dxwR-AR`)}2~VU%a>?88?r^PdgF zRuXP)8>!~MdXAgce)YD-QJwca{8~F7K*6Wx=tJXOzd#UbTliLBTCZP@Go)EuO`^xO z=uGj?T3mk-KeurHtbc29^Hr61<ED>F#`1Q-)O+K$NdL9v-HL1TMi8<6faULv(DRMo z^?pdp`|U*D{=2O=+Ex$y1!>d|2c>CNkH@=FMUSVgvsO=)jhjE7&WG@e*M5!iZvMIc zdfqZQ_uYH*@9*tRufLwV&71$8F00-C{dqXwe2x75TLuL$9lDQggF=`OK@&KKVh3!2 z7)*M>O6f7A?KX$3A+oq$=`i?b8+6%cixYC{CyYsG8&fyGgQzM!?qvYOoYB49i<$KJ zA4#^jzWMSrYRB;sH{1BpDn+#5j08m?Mwj>y1s0x+L={y#;!=uHc4^%t!*)A@+7QK; zUcT|BdpqPqVsgCk87YnpTNGdNm4wL%-na+sQk^d;iOpoB9x_?eT;?mEZ|J5)-Z0(V z-z&@F>4iiy?=cXnO31TjX1o#FV5E62kvZXIX0`9JkQ%FMcx7fqeRp7!eWBJ9sh3?T zRJp7Ys%F@v=T_^m&t<DBWIUFc+cC1j?OC91d4QeQd$Z50xu9<IJW#Jg<iwv*pn*rD zU+^WMDk%R!!&OVryri5?xV1o&NKyav-NwzqR>Om)Zz}QIZRSJqucn&E7Ci5N22{g8 zA!dSSvWhek*`7`cv?K2nQlD<vM4leBqhAS@fP`K6vBPxY9tBFV16^KHJ?bR336v3c zxNvZV>Avw3D5ttTVwQN+%@7c%U=lv2R}a(6IpMG53OuGZf7C0e<F69zaHVh$(|_;A zUoCNaOmZIjr5MjJU5e#IH_^qQf+rBJ=6Is-dSvk2{u#GkabjrdV%Xpn7;CnFVk~}S z*pk{2W5;r8O5<YG-qZngb38TwduY@>a~tJXd1|@oZ2alhLh8ZZskL^E@gSa2_$n3# zfZ+iZ4GRDOaEAj(faCxw003hNfP#SvWl0)>>9#rWkGhp0qA{2#HRMmX<rC3SDB8tZ zwuac~svY)f2+I{R9a|g{F^CwThV^1&MC`58S(!B|Gk=T)l9ZxEWQ!O%_$+#h0RIxh zhlTXDlE(l-Y7c~fbZ=43M8=0SHb9*86E2DTye$*=BS4anONZ*K7l;Gph@3~=6pm4j zb+dn7Dw#R9HTAc8_SZ(wU!vrfAQHd;0-s8eBZT-0QuN~5^jG(#s#)^IN1~S)Th|AO z74XcqJQ238el8v82yoQ?bFK5mHraim3*`SBE8%~|`r$cNl7z~Vp_mMvMoNsW5(J0- z6gTrxiyfH}h|6ud=J{_%fCeA$1`Vn=s-#;+Lb9CZAd>|~xgn-N8yt>m1GHnKx7m=q zK5oO1?3kj1Dgndo9v+z9=d-1NXC&P&*Z@>JMSRpIRX76zMko}7<1JKx57~b@*07)+ z^01Anw)f_lO@psP{{D53-KPVT1_{PAyvX1AHXKhVXo02OYX5N^z!z?@Gqd|SA5AN) z(ADPu7Y8|j?D?7bKF2|=;$u@_h(^pwlE9+QY=F%~RLIy`HkwS-YGbk7_*E$eX&1Qr z+jmPQdV7^rl7nxGEtwL#EnF|NB;yV3<+Ds<rmQsw^}FX;_1yarFW}#Wv+4kw>?+}M zHA@PX;^ByYC0dP>o;FkvVKzdX|5xTTqjmsM04UE_feJuDMg5=K90R}vmIK(IPayy6 z@>=MJwEc-FEhbt@5pV(~wL+EFGR0{Bdw$06PBWuv^zup6s(xG4ua5x+$0lu+pY!<G zSZ|!=t*CgNCCAn$KO9bo`~&|vT0Fo~FILIov|K*e1eBhwHq7_5*Dd607Gsf$j<YY+ z+aRJo5gF9u1Ou`y2tRjvDi~x<xkYB+5frPI>GW)TCI?vb_>ZoP)^|1Aw)kATT1LoS zY<z+<@oIhwxlH&N!S_CMdWCI&6uQ2DeVDe%tW@x-KK0>Y7_+n?3ZNSfo~vHyHXn`@ z9fV4nX!mgF?o{H^D|PvE;rE0Cy12el;OGb(W6>$))AMe6UGj26AQYj<P|n%M3jG=^ z|HIVEzClBr?SI5oi=VryCz_^*Dx&`0-2v>r5^&}x>?->Duea$6J!*a{em#Y@OdEk+ zdNs-Hf8o1snPTCKMqen2!Qe$?*E*F5F7?A=P0_fTjEiWO9SdB2Ls1&bR%Vi(R8|5{ zV(0F>PfQT0GqOv4g_r#!Q@tqDI85>24qw`FD}gyq*GYU%X2T@3GS^1$ct6iZX=NhA z_`t*|+oh^t@9n>iW7a~ZsRGvb1gom7MQ3k9*@`2<6G`v9fp6c%Iue-Gl-8qBU~<L^ ze5A=t$9q*>F~#x7R@LqLk*&JEmGPveA{DF7Zvv2hQdifRl)~3MMum0S(6*>{+SqxJ zblUXsZtAqTAB=t0GQ3Dh@IU#I1!zR62KfI^zWf*NiSvKw3!PTXs0zu41PVd7^@&y{ zWu?Cg{6x7k<&#<L`gN!+NnZy7@=YAMdfKYKyc01-d32Wl!D%b#i$$YGQa1A%6xH5~ zmhJSlS|^#7CcT}ep-T6Io27Wp34V|U%!@`{q+IK@LG4sJ`J(Gemk)lCruwbo$4=kt zllSVugV?^FE5|e%M$Y~H2HNXroLYR_<2txZRj=$?O(yc=)T*#2Xg<A0K4RLl@_aac z_l~zvB}{!XM<m6D|0(EWr`r2-Fhx3gGN-6Ogu;egZe#n;U0PrKtsqt^7>XJ@R`OjV z|J5ng>@ct*Hix|KN+}AdK0d>Lca5Lc=><EcGIW4?y;0Vdkt+8#{$%qJ?G0gpcf@+; zo6uX*1ReF1c0wDW2@DW6T|S2W`)CqcAxwIxkDQqZUR#V|96gcHBy&o`HynxM2x8no z;`pO7S@uljtz@A^m)$pF2Q|B?l6ObDX%H~SUb+IA>t2QmYwcd9hRE?=mW~p~ezt*; z>wb=jQ|*4PMbLjzC7$CT-yzrapunZ7_Ta5Y=kdWipD~WZ!hl8B!}lQvwTDF!cgKgt zP%!6FNi3P$QE38e-BDSJ$O(H{#Kk3;4zA?JQ5k231+9Wvop6*ES*^O(6av-iYM^1I z&-ntJJ1MRo5#>B>XunfEZS44!c-qu@GR4)@|L?7P(eMvSkJi4E#IuHR#<jENP9Cbp z4-q`QNyYP8*q+5GDF2g7|HqHg|79mQP~rf+z-E;H=NtOp?}P@1rzwkMybJDU5g+rH zvXdBg*f*R^P^YOY2af{{W@zU0ThhItujRvT;dZ3VRW-YlQiui)y`0v!MJCg7soVwp z%RGwV9+MUm?X};lb;{M=t98^Z)SG;8+nDO8Uuw2NB+-N~P!-8;;N`B_H`quiwyt6Z z{7z1NY0=5^aJ<+=tzbB}j9bB_@(U9BF<^y~HT}JSL_B)f^>;GJGm`BHEeU&&+UaA^ z<%uSC$@^Z%w^!+`pFeh-F16TyF4FAn{JGYR(txN;Oyx|1y~Y%%S;^au>^NCA^HN_J z^zWv{QWG@}aR598y%5-=hJLaRy68ZLvxPQW%=SzAE1mO*UmpPXZP((eXZTKf#{1W_ zr3a8m0GNFXiVB{fdyPHBw8<MraWxfkbo-my0?xsdAO_gWN|U_^K^R3Wl2**dgNF3= zL@~_b3m~+V*JLcfoN_qt1-qb%*b6U=_pIR_S6`w)G!ygDL_{16o(jP93L^}W<BAL& z%G&gFpseYBCfa|$6O$F$8m-^)0$eui8RF3zch#8hYwzhL4nHvxi1hDer3!{)8rajW z@+qdV#`XDYy>}xcd*-Oc%I7^()(|DUUQ?viLg}9v)6#8NNgT5~SrS={-bugUtVZ{B ztIV;gsynG`a7%PEI5|clN`;cP2vy8?RLT=+Lyo>$3MXAm5lYW4Jo^mZaL2x39e+gO z0DPu3S9Uz4sE4!UcVyu;jz7LSsRl=?vt)8uO)hk)B|W*xo}{jx^j?f{@tWjYt^A4> zW({+Y{h2aeEI9{}uaKB?@NdpK8-!^I#c<Tx4DDTx;|a-Fq5BBkmDL~j>DRq$t$|e4 z^Ve3ybFoyhlNaptpZTp@PhO94Ur+OA;aqiHXk0UWetDgj*2_~IaZy_kqdqr8h2I!Z z!^peg^<8rS=lZL{>$iSALe7o1i@@AZ4s#5_XE#-{dg7f~ceyk{wGJ|Yo!@ko{{($4 zbNX|+z?t^0a~0Bw{BpYqMgKwB9fsZ5y6m$_bGN)L;wZFPfOjmkpsh^vdpmVWif1|P z`b+1J7&y=4k$#_>@DF2W>44dHo06g5B<1lQ<x;|}I_8_$y!<w~%A>^3PursQ<}1j( z|6I0(_qCrmfCie6Yk2X)CmNM`LeHxflbcq)ifVt_nUU9e`n`ip{qt}{CnGTK%k=Bh z=D_UBoZri{(*M5u`+L1UyIk{p`1}4TANfsr5SXOpg_K|2uYyb5@AHOCUz7X>PC%+& zUPKec(gRM7rGMLc2G8#nqbRG$HA-p6x(nuEa81aKggS=&`jB)ht=zLMoanbpMQ_kT z!cYAwE=HEKlmH1=8DUIKjZo4kBg&f?Vg08A(@H5Lsa6>UHnk*~OqY>$O^ot{T|ST4 zl~atXj0wEGOmTVMe5=12S_Ncq#`o?RujUWeEYCu`r}d~r*~izXecp_&m9L$I49I2f zrx_<QVT9-A3={gLr=jZ5di#${FrsEmXW25lcdJ6Mw9>WD$`3O|#MFm%GaBj{YFeD8 zP7}YqX`G(@2RR<r4{FPeh^S=S&5=O)@g;)$)BAH9a+!3N^E}#YbMR=#pl;o_AnVVx zXhRBLE>u56og>Vzj+E66485{*{3}>I$-W#-YWeo!Pz!z`ANMW7eV^xGeM`Znfg{3~ zvs2G@AeM+6AXwEeAdc8LbVC=u2>oEO_vHM0HE*V|5xca{p@KmcE>-u}yJSVEN_Ne) z!!uLRduo3B$KZ-Kds$=tt;Rc<uIe7gsI208eJTx^6WyX?{g^`%(~m_fI>a+PB|Nv= z;^HAXRCYve5Lk`+1AO>`Gyq!5bRgIpECKdvubXk8)G1Gzk6a|FpNZhq)aBGl|ELaE z{^`2dP(AOar4tfl&&u_Es>d_4!+-40mL%^-iHIP>rj2<wy(JNCgDS7)(=#p`(`V?7 znO8j?^O^7|Sid7awa|2wP4P{gUUmO%E&VjRV<46(vtDPz+zp#{=|{c0pYvr|X!R!J zVauJ!Ov5VUpXMf_z1?LZ7w&3T_0_3Hb7L`!Z6_A2Lfb29uF_=hN-QkJiLoaS)yO_l zQ**d)lNo$VTC}&uJ@(KIHGcod8;nBgX7t|8@^b7$SNs!KL|U@Npe1?V9QK)>Irf~| z9qy~KmJ&$tz3x9w?@A)v^Qg#U^FJcbV_TZdF`l1iz*LPb=AKSy1CzRzi+S#a`+NR4 zmkp<+3befm3OQ<V=Bv2Oa_85MKJwvHWW`$TB1QG7$KAR$N+JDSv3xw?6s!N@?>kh$ zjeh1vdj@j4BM$}wu8NP_?EQ`$1`H`CbN)0T?+xl0EBBLn0@Q)ZP1A`a{%?g%9kr*N zk;I2{cnaJonBPWvi11#e$X{@?g+6xx^|hiVk`tvJ8Q2j=0wIz?(awfK(=^`(Kkyi# zLM0AgnAP3K=h?0BcVk^ndg2K$1(hd4YJfDOCh?3Sgg9mxd(=%7BQFj9(gQ4*2-?NQ z1PVd;?nlF<K`tFt#BHg2dtu}PrRp>;r6<GrF8I?yqbXw~r>094GzaNHl^<gdc>T=g zw{r6$I7<`Mgd4skvGYr)ePbi$pHisfPslA0cws+rGWssVQ24G5Pm>uN@Xds<7iH_0 z*MysLREwhH@Ry7D<geVYxv?H=+`RBEHlfaYv|{dZjQwm1z%?z7h(~F%@dT%}C9)|v zg|EDzvZb0VsOK}!-5|NthWx^1Q1?u5k)qyrTVfX?6)8R#-5xt!JT)pX;DYb{2@ah8 zXbvwJf?5!x5ifLfnZk`aTx3lhDX#i^CgQ}OuISz0Gc5xG5sE$f9*Z71O>&GxwRuJY zQY8g{w);e^wp`~7*vnHL1tt+@ChHb?vHNIvYRLC;Tf|k;UL-D!)SpUkW2-Upeb2KH z3>}**;_1q>pla5{ptyE>s%{F@z{f9D(G~}!F^O4_|M)Q0IkZvnRm(`_@D<l1bpSPR zF4Un^JGLYq7vK4mo69iO$wa+oDE#P{<zNCH`gktYwkNwmnk#3782@yNgl!~7YUUPC z&38o{6KCRwWG9%1L$f8j7q|@DVKjq8i(Cn}ZuSi73}-rc9Wm&aqHNQ8bn`n{<1sJC zT3>>WxZ+Er{F#;8;*8u5)av&sDJ$tj6%Fx)O)fxD$s?ZR-D(wGQM%hva1>k$d4gY1 zytz4E!y!Cue=mFx^)Zl7!k?ZTWIeDCOC>cHg@sb&=<Ybj+B!yyc8U?QT6m5cIPSlC zL1F$rIC3-4NOf8I;ntGz$Q36rmfXSiXe5$-Lj5Y%QYqeMOW)ST#X&h=>}|E0gp*OI zV9cmu)b|eQK!vzq6O$fNN%duQ?_F8%e3>|vc*i5h?fG~aVYn+&Oy5e-*6rTdKqSiJ zUQhToF4ED;dBOzmz=(u3)+9uO%`w50-EM|O@;90ZSkWT!UNn^5mZLmTu*%fgNVS65 zcFizu<<Q|#P`x!LGCs$6w@Whm9xljiUR(p|sxi~6i8XLBaJ@|u(l`4(lK5v|O~%D& zR6+j5UM&Be)z-b1;sIQU%y88p<!7K-IH^^8eq!c?rEf?g>3%97am+l1-BYDmS-#Cd zoW>W2H#;@Sn)jwgD)5h>*y{w%D@SA95bdxd*j<RhZx`7i(u@oR!+m`zj~a*D%(UWp z+eQ{^?KUeKGRK7u2OJS2B*q(Bb`9ekh)aH`*nzGMMSMMSIr@Ara*HLUizQj|*o+>N z9<Zn~=ZFUxPw>@u=}&*|FEL4Q$--I4LS4yZB*xFZKtE28_asgx%NDGHVqgbrVrTIK z?$YJ&)&E3i?*JtA6`3_$Q`Q3#SPk_GMa4_lqvcm9k7RjKb@4)D<PITr?&Yl6KHmCz zBJCkD2LgKPN1?X>)WjC^cO7^#HfV}%q6{R=OFF1y1TVaf)t|SHndm{hB|!bHsDN^+ zrVDR$pgqS(W&kLkT|gdYYWK%B|FPxG#E5*iVg_X1S|6OwRco#>@us>vuY1Vx-(?Uu zI$z-05h#l<I*67X8l|a=OLI|>s!#B%1j~~FKM$z`Y}84{@D0>OIKEg>sXi)X^i$=| zRq2)u^{6WBx^$u^r-|otowalIBcclra{bZjoIXhLAnqPf^-PU&frt|HmSU%LV!F2C z`8i<(<dVg)y3n!Vhj(JG_|U$C;^ydJ-oaf{gDJY_P?Ik}ihKqBJ757HRNE3~B^!{O z4ww^zl-jIZlr!>t3$I+KT<@abmJh7p0}?DjEn0Ep1%vGYsIFUJLB0Z$T2!@kjCewP zdnkteVA*~F!BPpTh7M4!1XX*ESHcaX*b<1DQ4WCMaT0*%5{p5E`0kA4GL)`QJ&ZBK zF2Jc$rpIbjw~}8_Y>X57|3%e(KeG9U4c`wz%!s{1?7jD@h`m=)wfEkeDq<H!tr``z zXHk0<v8nyF_b6Iwl$L6n$8}%N{looVe9q%Mj@O%T5(WQ-BE!g*QiYeMBoNVSL88N5 znb+xHvhRN;lDu^;Ay#*<<OI(Eyrx*ZMzK6v)I9wCJi6LF!bNMl5{S0!s&bk<dzQh~ zlC^bL)DbAcPm)aEA;h(#?u}oVYAW#)Wg!1Wdpx>^SI*QyEX18ku(e9ih9u+{gpg|v zSPua)u@L>X1#2h)JDTuWS*qGAvE2p;D|{=B{7Ak|Hh%vKK6s1QZHx1Wf}bc6mH7g7 zg$e3VBs%nLtaCVdEZA-kkSqjzJx5gG3q%M*ZliHHGVm&*apYJy@taBNgx~qF5H`<| zTpEz@&f)YyK(K*g9Yd1CQ&g{=yO%#n_El}Ud+ib?w|2$ZqqEXu>&mlPwyx2jZrb@} zmsSAzE6RS^$Wur?dfolXuYQ6TGNncI`FH&-tiji?VdZPht%Uc{Pr|wm&X#==><&L% zkWbx}`#(-dl3P`<u%E~^Ou336a{zpA5OVU<58JLP&DSUKI<PM!AF9k2Tx$;+V<4b; z_Zos7DbkE+^4?ejKV0H-v$S+&wD@yTUHW$Az*&z_*e_WiKUjd~gn%WPvWiT|kpcGT zF3H9-5@sd(Zv!}{EX^9xK%B9zxe1~5`?vmNr0z{XH#@MDK~Gd{^Z9OD&I0GEAyE(? z<nK=(ED#Scq&-3%a@^Dom}?)v>&S(53}Vzff?stUXL#ccc0@&xEhg9h7Vf+>=+vqr zNS<oTeMI7<AOd4SC0GGdS1xLN(NHPK%MRb5Zq9A(LW+I=d+NwSJ4j5TlMpN4r8YQB znKl!PRH_QU7Difb(Di#4{JIIqV%ddVN}ReuqmhE=C(=Y@2<GV>0vM36vfw)U;yD=f zD*pmj*FlaTzy=gJ^*Ko@QJ;n_Zh|4HG$WeHAb_B>SSNLOl&Dv3U<h2>6lwPfWEs7< zHc;IBN#yvG8`eO(fjuy?AI}qluj5C^NYo-4X#NF7$r^Z8=jw4?NyW&DlQ$@%{^|5E zfMk8db91C0<#|CCJO^W1G91Ol40eF7Lbm3FXWo7a`!>)J=Hp}N5nl*Cxn~OD3cj&p zK4l?&<S703z=TuaY(AQ^fiA!Rc$o#HCX9WrHG;o4*~CA!Zp+G{gcmS3<;p_j4=-Ns zf*cxPZ|#!6P$bIyJ)y!lcOuQB8$CVGA$<|Un*1ZuS&*`~E&h9BaFG8H9C8AqwfYtG zd0seiIxv~IANP+B?%sF?<5-qufB00v3%;@ZUe1Cdt|ES#>#GT;u`!a0V9#HKLM{IN z8Q`QUt}u1qpem^I+04rc>fAG*2S2(|vPj=~r-V~f2z~zx?Ljv<?OhXFS_o}v1{TF6 zjv@e%Cp^qpg!P<&oeiV?js!@$bNQKIsHI^JCLjk{X2j!LLN`QDPs$H>$Ka3^qMaaM zw!)U52i-(wr2K!~wHhE-mkUJ4QA7(YZOeH|{&Tq^Y>6}>DJ~Gw&m%a4<E}dM0S`X3 z=fMocoQ(jsxrh1NU7z193zaa&^5BIUqga_X-pA{c!fKVOyzmnMH0_#udW>vFDxxhU z!Yzg|80B_ii}L&&5)m^~Gf(pUlD0)Il2Ku0n~Z$)($fn@5^+^FL<XKauH3%D=YZf{ zvXF2Hzg_VK+RcGieSrqT&=CmHMbl&^1DlZW2$9I<b|z7#T+hc;a8-t@NpUlgAIYfa zl5)}Kj~=~)7_;7o`JN{q6MehU*C=A9Il}8*;;v%IjRkggH1YHRagP~&byfJW0uz1< zcUoWMXEQg9W<+};S56vte#2Tr4Rvutdo9^|s{cwc@mP`HdRWGKS@(K_E^V^{%Ri3r zMf~s|0a0nRg{w8zH&0d0xdI781=jYXx9nfu(eSsoyj1>0v~}HENHR0lauD=Dojb?> z74Kz@6^UFF|5ZC!Qt`llaD}}X!pI2J@Wo~Y;JU@wv-x7P%>g4tTFm}oa~R+qtAW{e zfr~m2%P4GX@E6N59Iogi5nJMYEME;_?DI5;!e;jb|M2g}*{U!$>)bI9(dWIs;eSKs z-<$BIFv8d{2)IhUz{neSx{xzq`#9?RmexYlVJXzaNT6>h8nC;68}jmA>fnzVsb(Wc z`rYoJ;bG|9LCWJ*=`KHT5Ui}&QXh4w30@1HrU|_2#l=p|Hd{TR(Yle@=Ta##Hs3!* zgEvra)acl40;DK6<S#bT^*W25iHPW9j>$o#sVH>8`b0$(n!-k!T?ihB*gjx=Km7*| z{S5|)5$^*?LoL|G6cVo9O`WzBZVD4)^NB8Q7pf?;wtQ~4UK2lMd9lBJ!TsK@=Txlz zjnH1S=%tcK=OXgOk600n?-en1bCAHWHD<H+^O=J(Z*%$!$oIbid9NyLmd8y~rL9UZ zT&b%Sxq-+;_<ib4yakiFT4bn`oa7H#0*-3{fQT>q)PB-<PU!XBD~}{`R<{(td@(uK zIFYC6rPskCuk&CpZ_Pg_J>j&~=hh&kGPDtTG8W`8KF%y4t>(gUoujl_s_{mMl;ftL znR(*rs)qb}Yo=MgIsRHs`%$()uyt^<S+9e^E##N>f6qL2G7Nn(GwzJix$g)G&PtLT zy>lF0Uj8tW3H!y7Qb<lxucXG0iEF$Ii!uM%kN@K;$M&S{N0-K3($RJM-LLQuDIT-d zcCXV{vMsWn+*2i4c&sMoBkiJoWC)i38lR05cfRX<Es}5hJLkz+PS9^BW_v1`Kew39 z)YpjAF|bkO(QDjOkxHD{Pd-`ZPoI-(T1mH>C-zyL-`>T~>XzZ^zcP8P9RIrR=>y<O zZ&xXH9$<@|VX&v1K*FRLM{BsRl0qe*$IhK$HyVc{<!+gu>7bFxv4bW2c7aVZhgthQ z<B3tJR+>0mGPTR!X)Isf<LBc^ANy3PaN@eS%tvnhGDa^+j@lazlWJ&)MFr1O_o?@C zHQrmb6s|_uPGy7&UE=4f6~dpoEgybV&Nk^C_xBaNaTYhl7y5_GXnwgnV0;vNQ$XXk zIg-Z293^j7uTkd1^L3;?SoG)vJbu}0GyBT0>pe4t?qvHn?GZ~KJ;~29S6efQ7_@1{ z3&~*1O}N;TVfR7~*WrGJ*PF!)D4U_r#ZN$tK6x-iGy9OU*Q)f<_*UkqTA{>|l*3tM zkVl>cOE-7JZkrSSMX$8Yc^10RnJ`o2KhAl&KW74`)gRM4vj->y<QL8+2_?o;B6Qmi zl!*)!2qqTJl@=j!<30GuAB2Lnf}Tz7?am&=N++g{%_H%bXtg(LfahrqDbk3`>WoIZ za)#l}1>)g<N_F2PV{kNKg~b1wNV`f=nF9*RoAZN&cI?8Oee?&(4mfny26lv@?<ZZE z%$&>l2I6e9=ix<^CSIHrkAKlvp)VpKibauPM2(<C2VMgS3gTuxsfpoc41&^QsICR~ zc4-oJxO+1_r&+8MC_y82bkh~MFZ0pZkfE0IwYQoV8I*lwK8EOllRkhou(q5->jl(b zoyq}_ahyeNVJI%(^GBMh^FWbAVj+n|mFm6GtF1Sx#3bjf25xWrh&P-CTE2E`xh;A; z_mj#273z{(s8M<H)~MuoPp`2vS^I^l!VKn3PKvB}Mar#{4mCq;G$IYhnJm4ZCG42p zVC8S=wltG&$2~Z?d=BEHleV#pTML1NHm!|NDe#M^<OI(Q#@hmRH9PDR4{IuE+~uFK zzfJj8GfGjA+3fSqq`E7P)>?3a91!k*b(r<sI$q-`;pRm2tH{G-91J0oZxT*Cj92YA znJL(nqa+TM9Gk_(N&DX1w1E~+JF>~}sPK-ORXtwV+p2m~7av<9%WSc4)iLxaCviLd z`%^8Ocs6Wvs+gyE1GaHg&eD5Y(DcwZ$u@rX4#8r2_)h73SG10qnv!%*InPYvnL3X+ zJ!}13s``SbDEpd?HbOqQGFgffsN@9h`f+At<t67a+K2sB%`hXIUCDt%Ob@9l>HLpr zR3&-7<jDu)0+zJCqByJowFGgww(cTS0H4ch1g+am6BOWvy>^&y^#`!Ss4BRED+urf zTX3UEzcSzf<_uqHnAH0~x<JD6hJ^M22eOl^XF~NNV$Yfo7$%BHHLl+PV$D`0G*LrU zWXUhdyoi|MO*D*{j4VB;FP3PB8yQipf~CUGf}4~?4j6_f%c)E_Et&&xhakzg=7Wm+ z<FWh+BJsYhXhv4#FrWQMhWj6PSU>RHrMN%IzlNI7v5h$CgdpB9@r$qt!s451vnPp; zJ`r0F*2=@`ijS$x7iV(+J?u+;`n@Ie^5NSKMv`m*i~2HpP-7RHfmYE>1sh<tgrIh) zlG_eicr!ae!rgYOxt&u-o-+Qv*Ypdqg3`>3VR!YPMOEt3LkPNaws%aZkqpUpA0|<9 zhU&9jQNS6RDpmtuff7#e3pdtwjX^~ks-Y>KgCNVq7*r_tW`g|q51#?J$Djkp8TgYh zrn`J~F2`ok&{iPy3V_GDE|RY8>cIG_iHrUF6|uG}5PBAh$3Enj#=MF`;R?ixT((!n zjUzw^-xJ7iGkd&}16D(5j%pWxG%N{*yK9TTxEmv?dj=<O(&i)&wq-Vce@(T<&k2+p z(;7cTgq>s_F<d!mTgoExNKcPyqSlgZyY2G{ML0#%+NYfrf6&Yqao*G?>n3=9EF`>l zmJSKx%lbV?eZcNyJ|b({k}L68rj3(Kn&5M3)rU!?IsLeVYe#M!&;&Nc3-~s_QrM+r zXrCJy%I8W-IY*~u7da|_ZJvIv;A>8(P=cxX10v{K-_NHKOBB;QTAt%!r9L%CU}@CS zv-KP*{&6`hd$dPV9JUYPFaar!iQxIABEXluD!h%EkMBLNQo=5%P~9-Epn;~lgP6T? zrQL8~QVjMU<oV+FW@6pWASS;#tnkgm#MVX$*j`+b{Cc;x+kj|<NkygdS&CWT^?x6t zsXQ47o=>BHrscn?P;ub9*BV#!Xvyh2<B*tAodM5%L{Xi;s;o=GF8pthG{HB{4WuSp zZU}2{Mc+=oT0~b$!5*qrnXU^~mU(<-IXq760>0Xfn9eG`&>oYtGb6G88#4TF!5!h) zn-LNBlTk2%g<xYoJ#Z2mdVr71-;S{(f$c25`^%Wfab`DYc=nUNGIWKiwbx0+<jU!( zmU`VBe7@Pr1U4irCNEF8@G^!t3Y|fdr)(e&FjyVJ_1J!uooUzowgWx)swPR@(mt@r zoQmh&Q3@7G^vE*lsGOornxTyS^Ih{I*%_b~)|><Uk9iYGPyo{|znxLu`cf4qv3m0r zk;2VXv0~r5Yf5@jyjt?PYy9)4dt_FC6ND$wjjg1Na7@;0LGjl0jnvOwq8H_54SVK^ zE=*a^nm8Q`dvK1SqYRn&TCq%=Is%VluJj<l0T_^U{^pzq6aqk!A)x-sP0dFFQdk>= ze$`Y-a(sd&;y_weZ@$&iFPP)&a2Wd*n$v*(wf3}(;*ot@9q!qr<!Hgn->6&uXQ|(C zKBTVn&uj?A_1RF<Z1|+={cL%hZ@SVX!InnF+tFR;SpNj~3e<vTg8BoD{K;9*SMdb# zMC3~ZIX*7)fuQ2hGtcre`y+gnzcYJ6xve6Q=IF7%Che}4FG-#AqDok9{J^^AE#G>0 zX+Gjwdih!x!%#!OaOQ>c7@Dr4vy3rmu-$q@FuJ|14M%ZlKDlBL2^|9H^#9Uz1}JIn zPU?PSA^Z+;bM$+a`GblhW02U{m8~4kEIVdbFqNm?$E2w)v{<|yTw~k^Gac(*J}u~Y zPJi&Nhwx!_YNl@e2ZoTrJy8aM`tENrYL%0-!aAGtDe}wfsbk25dcANjWe7KrG`t$o z@Z%|wJU;{AarVV|<NM-GS9w~3!SF2`S)J<2Jx%BU^3>)&>U+3iWKZ-H=pQBFV4Rn* z_=G2l&pBKO1rtzmtl9#A{6`24i7>|rppajS71hR1jF{^|NXJQ_;<2-nBE<xwj6dQ+ z;AA>6zP|FowxHMVVJ8krK}xY?(Su|VEI!wy6YZpF*8ZF|v9o5yvpQUOe%;)j;sx-@ z726ZABlO1j$xk-PU&tr-4Aj51`4onp+-*DooP1KUl>-a|vDl&5miS1Iei3%GXm1kU zAZ6V+=!Fs(6F8orK!zVIO&Au9=Nb)(%@7KW#`81JNK^v3M(28oCSa0YKN;?-bi*fp zKA4o$_$|32=q|x5CQ-AuDHuB%_9oFQI{!;_O&o0t?{!PycxC9rs~vLm-RehGog|4H zwA2y^Y{@4ZmjL#JDliHp-=UTMK$RoO5cNq@&)=AcqwUy7?ZtC*SJOz|QcDx3M>Y}M zFJw6dCP}PQ1`gn{h>dy;zD77^8b|hlDTv(z$vlQfJ;lcYHf7e<(&y)jj~COnZHdw& zRPn+T{au@mn`A@a>Vetn?B)0oy;8^HW6_&qvEt*+1=(cHkcm#B?{~R!apNILqyK0* zXs*UENXF4uhfHb1<LNgV$32uO<>TUABvZ5#hmeWaCKEZ16S;vC9)9EWr-Wo86D%^B zNsj6Zs~LHR6Yp*&O3pOHafpf-vmGpnvMEVN0h1Mula+y!_J1;_LkU~WsmTX5Niy-X z?c}KK-sXkNe2vC=*q{!CBs8SrTeC|vQ06qAsRRJDn<FPXv$dNE$)C`rE@vbo#c*t@ zHR8wl&HTykuNy=2@mxAvop}<OqX%Ip!%4yvk#CCwR;NDQX&aJFckoT4i>5vw>Qq|R zGZrO%IvgL&_>ef>>?{LPJHcfi!19U2_bV@+E!Pn~%w7mgT0EQHT>9L!P<YXkpX$bl z8Pd!PbS)a2$a`^`7vF?;DE>AmA1p77qa7V*?+2P%!}*$x7d0P`74bHDkanD`IQ>fg zbT^OOqYOR}e_@HgY58`CJ^#f({EZ2&i*VfS0o9bI9w4+hp_7i?b~;ZaFaCt#;ga!| zc;<of-M-1}99(bZ`OGzY$8qY+sZP?@K-#k<z3-6<7dXWQ48=U`vspFyKXhinpCy}k z=Tc+z@5}WcJo889XFJzE(^VLb{VCqXdh%zU`QJohz^YI+TfSsB+r=6cbMZSTfM~#6 z931kfmErjLCfX`3=;Gs9R2u+)v%y)q6}Xu*Ye+5Uq2FN(3?}7(Yuvy)Tt!|v%s%nr zcb>9~1)Ya^Llx{C_~Q)GgKxGc;YJ4UM;AN4e_xz=B0Ftt0)UP2DZVH+Gh%(7^{?S) zawCz?Y;474NzWEIUo3DJFYxv)sQ(@mIA1VTR+h_JQo%-L!;K|IDm8)@{p|JCDvVFN zjN#+PfK_9QlSRbCq7LB_{q55k&l(eDe!zGlC^pgeD=rIBt?V1J{R!agRE76ARL)>z z#-D?w5AGsLq3sT8KnyuC@ixD$^&A>}UfS#pFjF0%*({gPR^~S-jSKhX44+d5pkxwG zYCjkyh1=>zKBvix<$)BI2N(A_Y#|*Rn0>vLEz*|V8ccyb%UBOnUVSPUA6(uGGG1Hk zDi79`Ix#bQ&6S}4bYfqanI)}+HLOG^bnaa7e*E)a9<Ela5nntCq>JLWY^uK}7pmx~ zof7AV14MqV*Y$@_t7Mz)BT6RMaTStq!v!Go^<q{{xE7)4LEd_Ft&Uf?F^g{Em(0A9 zr}&#Dm4%<zf~w=pGt6wH6T{m$$$-;2&xF4zWAnDO|NhbFY5cYsSGYI`@11IE9qzgX z#Nrq4`kl0e4<Sy4lSS3%Wg#n2O~v}BiVx2wEj%_XT)tWe6mK^Dr_(pG<{<jKHK?*} zE2q6Jz9T-dlS3olX)CYwV_i#g?{!}Bf186Xq|f{lA!V)0_Z-gdNth9T4s?0zhuHOf ziMUg4h-+#Q+Fsx9&(u^l#|%@|YJ<2za(s|4XBaMXb`4I&RHgsm6GLN;s1dB*u&wwc zYtf2&29N6g2CJhHt1Tw+;1jDvz;-;uT1zZp9~aS~Vy)6+^(D>tIEeG)vzT=8wq}pW zw-IZbx$U_}*!FhilBsREZMVdvEh!@2b?U>UtDKd=3ME6A2Bc4dppuz?fcaJYdlt~= zR#Nc4MpG?($=+n!2$8HGPkMEesM{4Xd+cs%E&u!$_?DJ<*04fk+|Jr26aS5X=FhA| zOs8pG35#=mTC^-gje<d~p8RL$C43KMVAt)pC+kof!VRMP-iGmE-1FSZi2;0IqUI7v zXdc~K;ccfeONwU=-et3X!`|4HWz^Z*y9;;LL{W5qokB|S=gp+VMXoNg{Ee@hlKmVj zJ446vvL->H2^_|a_f(W3jjtUC0kY6YbURN7wQUosAY3hcj3)2d_`eIP#&wTZkh#Up zyKmOG!y9trLu$w==xwy(0z7CFa*!N{3>2}xAlHEehD$8RXzgSig?-|Ni}Su#h8_=p zM~$?@)w09ty8IgLBpquzy`P5;_67RiD-8vmGUbj;{w;fZJ4s3snsatM11DN6%UbqV zS~=IrUmooMo!K~P?IoRWl$`IHsFj^hVp|988<hVVqcBzPVOQbHKOX6nrdd|TCkot8 zLQXbr9(ee(6K)=Bfd27+7;w5|K;IeY*3aIsPrE+I&(jzh-A%Ejn&P~suDSd+MDyz8 zuY)byc8>e%>0LxT3%lv#P=g_9kj$K?qzR5S1wS1?-cY!wM1fu{<E2^;T@Zar|96t{ zeaPM}G3$H(^__8!vs+#}PX3n)8w2IE^c+S8{LoG}`Ej={)3{>6PZC#dc0}$rv|kkj zzm}!TRs^dloK7VKpV>_lgbJ%9-w;r$h(A9ge8!*d^e-W6^?l48LNSgYI67e_fjF{m zL}8jDUjyV?ZSf9;@Y8sm#Rx@Yqf74^V($?~n`szLOJdbl!U@6iz&WBRDF1Xi!83M( znS_jAoyl{~NekZUG2@8;qO#w)o_mI-t-d?Iyi?r!m#{&NPyd}TWc7T_TB9&~GA{D$ zXM!;4n!A+!tC4<h;!?;=v>Hst3#fTvKuCSJtyY>!v2m1Ytb>ln%WfLKsFR1(IbJR+ zp@B9RDt;G)q;+T9Y11d_N|~C{?BFaMqU~>O$&MsWH|go9OalEkI?Wk?Q}vK?t>W?A z--^jJ7YOx<H-$@??{9V;&#oXe6Q3`Ah`9XyG!a_!L;{An5dBN(x8LdAvWRWQMwG5c z|D|3;`{KupWyJc`9%f+lAc7w<d70BVj{PvQrzE7G{CQrFvxfXwhmn=nUoeCGSXTUH z&Bp(uzRt%XW1eNAKMwdOm{!2(&zYx2X6IL!9dHrluh~pS8g;FXMf$h>TB;-PSV`?% zDbRO<WOenLv*hxz6wl}~u1-pgOOQ-RaH}sBAlxxk+dIjuuj#HC09Pd9dN~e$lBRup zyCy^OemF(e>{j|y5b>`7Y0c5UYQ8ee$qF<<BX<G1c0Q~k5YPnJgfv)w_J{LqkP_Fe z)5WdtPBy6OT2tuu;*ua+Gaai2+?SM?9oGL(O|9Bi`$=hFh04zm7VUpYTKM;*&VIz^ zq?&eI_-*0@!8Ufop&|W@fugh5*|t-d2%2BXJH<sBzCxrwk}`D6-uuc%;Y+&3bqT-u zGepg}NAmWO-E~r<6nf>hLYSs8J;MHdihI)`FpzdOEzQM0w|Wx=xL={Y-%S6hSEV}i z)jvi3w|(|!Qycv17x<1bI`NR-g&zW)>#u;@xl5Lxms{~yQ+3@ael8e0B}RuQ=Kp@e zMZBT&yRD;mTL<(@#b8gz0E|0}_f+possSQe?^He~q-kzy&;YSI)A2&iJ|ZM5rYPi7 zd^%4q<yJS+?oW<p-t#La8}s>KH^cPsTJnYn+O#6%TG6Ck-k(kVgp*mWFBO2kgEt<t zvjhu!sS&v61|t)*aiMcr6Ayh=bC~hwnE~d=Wb;;ZiH<^S<bqpdCuzz41=)ld?xg<P zsgl{>OOZF0b6718gt#vz!{!h9U$p=FN8S5aL3;|lHPjw5HDxl^QeEKbH{psm;@N`g zr7`kbF$-`&1+DOe`ZOB(@Yr$jwSEHt)m0Ou4Ni?XZ9o=*xk`tgKeT+I!h1u(*HHwl zp@JD7f*SEO(QM<-pk54Ak5!3RtkD5%KL1mdu#-2-`O0omabdw?F_v4y>N=AH)%buf zirXYOkx_}WvbR8~@l>{Q#g;sh*3Vw`Z6+WaNMP$UWfS&@bcazy%jhEG>=@W*teOf6 zW9L~<^yr3c+i)t7$DX8W7=?a%Ew6%)hQ?td?u6{FkW%FYFia~hjE)VR#^ex7sky+e zmGjBGJB}v+qFX2(bj|+ze{nQHud@fK%iW<z0?qr6^!4Fno|w<~KQcGttGql$1ro=r zk*in(d>vJJXCK{rWd2(k_tpA7a~2rzYf7(k^qBJA-J)G_bD?pxJ)%?k&LK@fGDFp& z8EGVSwIoUnz-lZ@j=@hE1p{tQ)HM}Yp1BgsAIMaUht<@KStA=);V}3~CYR0As8yp( zCym{KZ285fzqCws&OfrG5Q@^;hU~<57(x#fXzjxjnvbE8*YhqV&+g+}nE`)ehF5*C zv?NeY5Nu!DOpGG=Au7){Sj;Y-#`$C_fr<JambIR$VXem{TEY4X)JMxy^5XYB7b=EO zmb<h+3^~TKjxsOh%vg<mB|v1z{aTDO838GH@NH#dYM1Yxf^H?@yfwLWq}4Y559hjC zpy!0_ReZJ9+MI0ns<O6ZdY7`h@i%VPZ;8#~Cc2q7CS$eb{e(n-W*2{zy~uvlftCi# z3&&K~XI)%La&3WxH5UH%9o)}Smh6b4bO!_Ub$w*xhbgbHd|lrkk{?=ikIE9(l)F6T z9k19YP%f>E_5I2th)U`9aHzz?=Koly{FS$!lp(0XxP8Bt?}HA{x2q3m>InW%Kt8^f zkH9gNomR|$zx}=10iGM@9qn<??b#1=9R#~8TI!N|;t3VR=T#YA1eTh(DUWet6$aE- zwcn`KXv(B4&rP=#F|_fX$!jG0+{#ZZ*%?N-r^?V){VkD6IJ3tew)ol27h^B<O*d1Y z)c&VYuvA>gB;_c*K1Xvs&?tdXk?%*PMd4OZGE+pHHpkP&q|bt(OCmbyx8oY91s%{C zjk>PFx$BZK#zR8gJYea3`Cahepj8J7llC>&x`y@*-+;~4>Yzk<pY4>h;&3<`nEquq zp831>K2vS)d3y5(cGsp(F{10p#ja82SmV_b#rvZ|eQ|k-fA14vAMPyPnmC<evsPYw zrcRc}OhR()6-mGe6+ff?qx3(+QhWLvvO4~rHWs3xMEoX2gFL_2Nn*<TA|qvId%ph9 zxsTWEbK`x<A?W$pvCspX28Q)lI#KQ<18%D3)BkBS)XzC+&?={QmMQ-1bMn$9WB7v- ze`1t;8O1nFCjYyNC80heo)1ZjMWVr{%HG6Cgrfu`SWxMb5Q){fV)&Ti*fARIhx|R2 z0wSwY^X#i)U{8%B2*@8gtC@-)U46&tc$fC$s`+))A2ybl#dNP-d&tWPM5DV&$-N3I zvr^5h8WfKdlfeP`5N+!7*j+Hu<Wy&!pEjZP=Lwu+Wzx}_`whltBy(nCdL_GNlAV`` z(dKaw*!~f(sP{AdNCwIJGVG}yag~});J7_0{OPl8|MYG7%4D48|4A^UTL+gt(TV{9 zicZ0<wg-=nZ$eRl=(uv_K~iRolPYBmshaEpe`e|k`{yhj9dea7&7taC2m-CD$Ek6- zxD&%cb3aDBGPyp`i6)Vz{?ljCm+dB8{9&isPJl(Kp*W~UN^-4(snOf%NETxhkFLAc zK|zc>kCt)mg7OitaD9Ridbta7`)d!mDmBrPw8vN7g_C9uILnro5-8l5P?^_J>TBL` zxLvkJQ_5=TkhP5kEWNMF<pw{!Y697tvek+Rkn<PbriTugRNl(`M_5QjVYZ8bK{5cE z!cS=NCBK`Hg$wfnVkZ~h&s37l#HmZ1tuLGHB6)ZMD`mWeV@J|$K>!>jZ6Um75vTMj zF{*0azd4IGXRTFFKGzu}hp&|F!)o~KLB?(FsZ}i!mB@Ver?<8QsZ^~A&$f7N`%*wn zVEqQiw68iu_RYds>YQFL>V)>Y)rxtC8bkl{&{1cQ3Bt{-&gDPT`dGJh?%yFj6A6-^ z!y=(?FH5Fz1j)INlZ7fF81;s^#8G?0p5AW~zF5KJ-Sa<(B(3yWIF5xD-xoggI~d~h zqZB6}tRBlJk9b=Xbq7y+q~#^k?<V1R8vfTmTYTdg(npcM>TKR7cQ9cHqne_B^z70X z&_E}nN#p3`w;3hL`k>ZAiEa2c_h0XrZi{_V!l!qBidGC@IbXd{^|S`QmM$c)_6vPo z@A$XTV2Ed!mHGoC9jg!BFxpQ&nR#PN<W1M~OL^gf%rh0vMrpLWo><PF&Mp?S`MAGY zKxSd2%MZOSbYw1J+>bvlWE;;u$0dx3pY`msm)*PjS(g?r>Kx1b3Y$fOTPt?{oNyL) zEx!9FUhOe;B4t*<@;l<X=!)1?!N+3pP2=TzT#|2wpF)PQ`^8FCnH-)QTa0&E2iAY9 zcc(9=*Y2p4sB&sJbb7E@?QLu;*(>_?lvH+UxnHu~u;5S`*fT~lfoW|t<Ue)tDV+V{ z9Mn2X;`QtzY_fa1wOIADm)V<*h4*-<qQbu}L9-T{o9})$4)%HZfn+!Eo=6WRtGPYR zV_03tmFg+h^@-AdSgDB$9{#a)oca)c5IYmvy=Zl6_rP#S=_6euvgMBWwR%X*99m2v z_~Y$jkv=_F=eUEOyL+B|A@zlC=W7L<Qe(zl-q&6Ib)U~N85GvIOK$s1!B@E+SI1AQ zf<N);-Iz<gIAK2yY4H&J+5F~(bZD^jl0Njj1R-~>F&4hmCwSgjCBM@-DpNIP<)c~h zVo-pqyXE4acj>|3{f2G19UtqT|0AHuLS<Gz_w=RQ{5>TK9+Sj$#~g+lu+fywB~Wa| zkk~7+F<qFCNw#OEIg~gsq-Ksu){CS)?&H(zdcFvIRiAEos7&o$67eBsI*`(M>*$ku z@FAk{^eFMgow|P1#@mw6e7XML%PzfLW?nAL)R+TYuW5NO>=kI^u@1ql21ftiI>Z=k ze<#`4){SYv9DT<}iTOKb16J#P`LAMJj2~NMK;y&xW)Fe-k9da7|4d7-7;&)Im!59c z3E0l^JojZpU3P8U2BAPvs1FTk%`zbQI2(W-uCM{N<TE_sfx#dapj;|~(G@9IjfSyc z$4n!+0B9x@M1BDI7fV@=KLvb^>Xt`hir?ZEV5|nI=<d0h@c)NE+Y4A4=Y-(M8t8F& zDofkxaomAlXrgJpDrXm=1taZzY>~WYhQ8wnnQUc5HtG&5<F8??yzq#0+>pD3D%3Pi zju=%m4kS-UGSuV4vu#Kh##yNMi{*jracDw|je*;FcB4`bYgSHd{il|yvh~R2xgqg0 z?AjuvB|cg(Ki=+9GUHa0>s9mI9QNi`T{S?%LSxxcNdyZp;UZ9F{?5r^4)G*`d@6z~ zbw?3^WS>TeNUGj@VdoA5MR^?nLuj#qm_Ex5JR^HfZ#F4CyEKEuAV?gO72P|^)arb7 zv;6oZZcQm-9B7w@tQGK~0-OI30|98T;Z*DrZUcptVw1Ntq3#GoHA18XDW1#BdP68$ zX(Phw$o9J|Kd4Mak6l%dy^njcxHsQqIQ7*UTy}VJ<PQ5YOX`sDXm_i&)W8lmt%31w znesI&;IfPn@VHjR5&|jXZ$(R6VkgQYIZPH|*hn$a(Z_Fh{ZTs!YX?<94r9p*P=em# z66t{Wh=Q+*X>}65R&s<n>0zk;7ta~>FGDa(Wu8Cwa!Ux_NTgsb3w#sEQmf7U1*sRT z%*S{@ABru+h;1c`%lbY^4uIgQ-+^Vs^52k3D3=>^R@w`4u2qmq*6Tl@Kn(ViuQJui zu;%-?)nv^%FarkA&zQM9)SO}l@IfF}7^T79?-;dpD2jbZ+>W;S&8z@G@IZhfmS|X0 zg)u&d!yFoxiY;Ob^lsshuqg9af|ZJwVmp_$3)pfP+0L_YIp`hVrY*9RqZeIAW$u&} zvvF(XNgR_PygUht?8XTGH;8;nRF0YA5>O%%3ZFw<9F-BaWc(GtPMkvv001JaK*>}z zJxUAu#ZgY_fDwhyx)0-_MMM4_F<Mrz{bTdj;6gF(`ir`ha=YNka#0$&`nz)nCAc1_ zQp0VLoWmx*U5JX|?8#vj&(F*DN;EcJC%A1ud458fBpbzdiBa>whmjqDp&eNLAO|rr z4a{Ny#*{%NRqnB30fMng>#oeu8b3}@lIckR_E=67cfxPHcvhD@|C*$9H&E0H>3f8@ zfd<9j{ICi{G~GtxMDb|D<5IzD)EYBqJrurLEng4J97OUpBP}cO<+y1>pK7N4eOf9x zpT<ioVSz2>h<mfeINin&sI`T&V6}C+#lBuR)>oYOe&eHC?X{*=r4@bc{(5c}PhG)m z&ClmYu$|6{XY%q0u1ofWMo9lN==%AJaH9=>`O4(l^LoY207<*cw67^-7R~RAXNq~# z_P2U-){FXUZ{X1Dw%YdV%wd>y6Ww<6`wbv<ZLuCb@F(xbMo2vVw{oqb^)&bDO5QO$ z49i{@Ut4VLaswl%fN%Nl))1Y=M{MR60josk({`w5LM3nKm!c|i%f0!nerw)d<+`5Q z+AW2W%fH|DRCjL%89Hz4t~iQ2{p&yC@wW@s_q8x=#`6rddj`7JA0^lChwb$CeH)jp z?}+`@NB(WZ*|S1%3%F4K1AaE9wmVVa-Uj2_y*;~N^6F_RYRxT}(mO{@^Mg2d4yfuk zWng=-T^wqgLtLgwi#iJBs%h-EL$wSu`<rXO*A@u8QlAyC&<m`}7OhV5u2~l+C^G){ zQy_0)eFl71)@-%=%xg)MVHxkNu97b+XlK5We?7`-!ung+ecgCl!yul({?FQdBaG*k zOyl0~h7)L_oH+8dz+0NEWQ2TG@^RP9<jn+L<45c20g;mbo_$+&-fFepLc5m?2iNaw zd5u`}r7e3eF7tg?w&}MxIg#}7w?$B?_}nPNRq)<jY(weFWB6&`FL<M7z0czWU3y#2 zD$dP%7rby&g#4o22HhJE3eJC7qe5zg#uo%v!hN;{?0RK{FuWj14J@P<cc6Ht3_v(I z#|sml_iz0}9%mEK=Rh1V#8{4n9K~V92eP2BIO2?j*)!ylVnsU9Jg6Z?gIGaV-&^bf zjH$2jV-9FK1}~99o)XB6!opqTmK4V_P;9z$6ePv?Qre^GSYr9Ju>l<zq>Kriep6Y< zWRTf+Ow{0maS@!g6V0szr>KGpiN`4Y8zt;O^4X=3O(_d!z-b*vFtV}2*|FfNCPR5R z4bYEtN`%R{l<GNFNv<+&brWSPwr9FBEy|2?agweTTUKd^xgO2PJ|v5R^OZXrD}A`p zg0mi?WuoD%t0#n0XzuL6Fr#J$pb}-3H&b2<kMX%|G@KrV&6}jmkc}lr*(9=ylwXad zqEw?CQ|ILxQn-Y(4x<@cm3cd`egAymk9=gV5QuS6#U?aIhq8PIoO6np9Y@sH9LQ{N z&Eq2`#e60k3a4+v<{QA~J9Gq_y`jn*OauEPDgEVH{N;-<G5jcmFwGA#2Ticqr3~e@ zY;?;sphZCoSC$gUIN&eEEUv8YBHs$<ETnbFM^ls=^Hht;@uMk=xHx-|LSsPs=>XV< z7*PZcEkw-n=1Q@35Gs{K=keC(Q23<z%#YHtikb<>-~FGUukvxL9uOqYkDxHYc`xFM zWk$gjAu1060?<f7=_@(RpfXW_I#L`kf`ETSQn_Hs-Q4J-(KJM32FKPV<ALjvUSkCH zMMF1wRc#hM2p*kl<`aZs$%u*rg|NC0eQONA>y6Nl0F#JjEbS4Q4EW8zKm-cSt@44= zAQljDrT?MUkGpv2o#!()s|DG13!7kzV}z_D2Emx8#Xf|P?3}k}R#%B_w}`!!V;4L7 zei1bx>ONNdcSgK-xqd9jro}?i`MBMiLAOVfQ9&C{@A|Hy(Q{0<z52`9`nIISg=BzK zM~VEm;hDGczDS|!n!2=xKkl`Y*8+q8`1RzZLKA=a|MC2!+|m5iDi~<JXZmf~uQ>FR zROA!Tw5;cG`>&0OpGV7QO_}Z;BONa>Avyt4%Y+{`U@Yh~A3r&PIpysQ>`vs9P~3#` z!{1E#*5|tFCC|!=CRF+3LhhW<2=S)F-z^4``QEM@jj;!T1ONG?AelDe8xzN*l}nH` ze<b|Pn{P~GxWp37&GP?Poc^-Et6DEuiN##Jnv%}?c7tgjq~KDQO+?6<BWZL#GT#eh zC${Bqb>%*3qDsUPG{<767-O<Yqyv$AgC^hlbQQez=A9ank&|JM4wIz~;Qr86ymNp5 z$45&3qY)k`UE4?NpbJGR%RGVLafC~6HopmJ5qXr$3`9!RyUUqBD{EsBM_^HAwB(P; zNZz(m>dQXzXDG@hdLpEt#^7Cpfou|@OL9~p(4SGQ8RlM-n9|*#-(3}gC{+ufbzBv_ zX>R(LK;_b177-&sbK$?!-SR=^X&zSExNPX(a6a3U5;M5Hhit4+Px~vW;KGXoE!>nl zb1oY9;q#j0nr}%jf3<&zkYc#FqQjh>%3L==nSmdB`s#vSXfyX7cq3n)_hICexh{H; zCzoH(>agU8j#~#_KHRli?Jk5DaP<yL2?dH3KNb%E`yA4$CqK4wwfM!W{hL&OOXyf$ zFYq~%T{_m6$a~)Y&!^1I`-0wSIbqp>AwIJYEu0TIb^LhC57U@GCr}B>>F&2qGIPud zb@o8UkAZLhlU;c7BFVoEj8ORRRkutMT*ItynMn3IP-@;sVbvq-357^kV&59qz0At} z+K0ap0k;%^i2RRzn`2UPz4x0te_uv)uOBGvRJBP=!>Mq>cSscj%79|Fa(i6;`$CEb zQvC-{6c5$=5A_v~Tv+8p5rX9yWl`G+`AaC@*$ZD(O@NN|QQp7R38YLYGChh+gtjyw zH6_5e<aD-wx((^`4)v7Hp@bn(>TYm_P2F^%|B~5Kfe{<tR`HzzN9F{3-)4qN6gODD zjN0EW`5laQGL@Ddn{Gdm?!8@d<KAT=CVw8mr9=H>n-xBd{#y|%ET6mJ``*+y-Z=8T zN~%52JNp;q_V)Y<eBHQ8tzySoq~&G+2&YMBh8-f26sDFfooTQ7iblkFsWa0-{WUW@ zfl?;x{|IQY<ssu{a`C^SHSH6dtmMMGz?r-iy3ls56yi$b&JU*LZ}I!?MJk10@-AWB zSgXIZ4LX7f=waE^;~1Lgs&#;L+hW?OjAg-}Rngq6|Cc~(uQ=veR?ZitYM<)R-zrsI zxFlW(HnHncup%2Wb{=z54l{|@YJZb%jp_$X`vsXj9`ir%3_d?KrQ7avN<n?eQ78=d z`d<RA=U_5d$Uziux3Q=SQRCepr|t4aI{te#Z!iCN*ib}1TJfCvw^YbUkWQg#Q0uXv zd{6?xQQy1&70^N+(*Mcb-N=r_f*6IP!=)8OI2iJFW5$>~qvp{WW|sSUu&V1jweE@c z-Kj0%l%+VO{x_E#OlL!rAiziQH3tfUBW=SGsz(7$b^UAIY+sJ!6`yq6C`MB?znb3N zg~1X}QyuDrV<-d*pd=fv2#B1hVw_bnX6Ga7N#=sv+=OKfl96VOqW)U{{{)&&f_<dV zhuQibk<v-VNznA%stG=W?&Sdbb>pTVr@lOn%-14|%Q-Z8<GQ9gz3TN6f=YTe_5TQH zlpn;`UX2wY+;zr_gEm_=KKj!0LW*7E0zmYX6k0A%0W3M70$2Y370_;3bynUS)9GuR zQo@4duT-*9ci$#FwR-EdyyjBcmSnc=9xKit9QVp}!>j9j`FWgu>&3?Z3TQ`!W|o0# zUMpK6drw{0Lr)u4wj;bqXm(!QpRept9y6UT{hG#DeA{^>(DFy35f)=P^$^)H$hdfx zOP+>-zrkLb%=bIV1cX+KI)<`_g6#xng4Xc$Gw-#d4o94tDqYHyu^bIc3l|#1rSLGh zMyR|?o)&eh=Uc5LMGfeZcquw7nJooGQ!a%?6djr%=_nt!nVH~f)tMsw&1`j0Eyu~` zQ9x_kFw%RYWFm4+U(pHv(xw|*%3*JY*LBn;@ZoXC(;?T8gWn_2ZzR2U-rBX;;wx=r zUVnetkpxHaI@&+hLN?Lo6IGZKDi&<NakFSRTU}KWOJB>qH)9xQAKX9b&5y7CQ(QJV z%R&n#`?hwJw61A^_iTOSD<?DgqNw!kaVaKoyKtD=VO%7IY)F{8GJ)+}{CU&_u-=~% zi!>seMs|+c%Gyp#%p+naqi#m=$IQcGFx@+)727F=-x#b_(GHO+S<8)L<(bFF7z9^- zZ*4uP5|8^9r4Kt<eY*^?hux8o!ZrzXt9pOD!b@@CJd)85$Ie%#@+XEWXwJpbQ?|#? zy^cWe8Y!#Xu=t$W30&ms$t~Z4UmPM8Gv{ZN8xtY^m%dC!<YbAFgJ8&cq6()wV`oaI zvVeD{wIX&_Mv`NBoV1Q6!Tf^GjG?RtF@pKj7Z0=pqq~~mbH*=K&&plO3GZYzc>NI} zjS@@Zwc^o^Sv8{XyCD>oDNnZy#2m6saa4hMePNg8l+e&|u&SFfX?!@PTy1HR9z8kp zF1^V+mP(<xCS+t-II;5g>?&E>>3}d<6K%>7Zha#h$Bah;tyqFL(bp#vkU=HBkO+2N zic5bsY)}0Soo*~r89z6kAm(&S;_}<qbnY;xd$?j!4f{>ek+^Y7BW)(5o?}tI(Tei+ z{d8P31>gqfSmAU+KsN<h@<&I#eVWd|MsKS4&g4i8X+9=?WUNMFbpkIQNq?y$&P4GS zB-(;y5aVs~>fEy&z9KQ}6}42lkK-l{o2*X(+X5nOPo-#MQnCHBEBV;DHA&W|ofB?K zFXVZY$7=YFJCXRnP%L@Ozj-{n>DEf!zdO2pHA0cgi*HRD-1Ujvjq32)o}DU<Hsf8U z@mXR)#vx_K^98c6)g;R0ba_l)nJ*NL=G2jWPIyF2O<M@r%G_@2Eb6+ShQZluNv_=F z_1C9do7oud@#|>J=T|=I1$!Bg@XK`(&bKWaSDpCJIQR^jOs2Ox6f}6K=oPllMxlvH zInF(vwXdZ$wzs{HKlk#B5L)k+?C87o>J9eT*a7EtZW4O?Wfod`F`0FJW?FO#d9$9@ ze86yt&qrqqdv@#{qDmO=ty;d3dC98t9&;CC$Tew}=AYO1?aKRk$gNcdx1=2(6M)g$ zV)<ix-lva)H7~vsU`#THo^~fmoW>l42_Gi`p+l?sk9(Om1XG-YA`aCG6$ScgP|0Q{ z#e6e5IG$*046%!CobXRMJE{&<bS%?lG}fklnAUL1bAftGCr_bK)&pvV?;@i8nfp|v zYwSF2yz&B!wu|jKXdUNoZ*n{j!_PmK?B8)^Hc#i`Fw;#C^!b|hOfL%psVV}t{B!5! z4T#ZFb#P)a<;>nik&XPu{qlf<E5^B+e!3Y0L9xjBLj&0m>Cv0dKT72+oYCYKXrlzb ztR1^t^<&EU9BS?t><N8gv2`EmdRIfG<QGC*Q>TjCZ)zqqna?%(UV!)sLh9q)pZNqj zD<8a_jpl4G$Iy|usXkv9Echv|E2iRZ@{xWy>E}S>3*7|e4GF+>?#wg&hnL<+2H6z9 zj^6VIpO*oeyLe`uXbx|`)(lAil%~r;$6K1Ul@Th|(FJZp2W)|hmGJE$?iX_5bwI*3 za`K)v*eqR#oPC|~s9c4wPu2!7`Z5XB+z=SQ>%cShtYFM1?W0$C%7p0|<96S|E_P%9 zd&&K~gRgtG4lmA$rW_?*o4D>{qu$(%xN0Gv{MVH5vU%-p7PqtL3wJrx(vTF0c6bFU zs30d7w;iIeha+s~@;{-bl~tU7kgorc(|m~{m}hfDz5Z(>ppp^W-ujg|fh;j+vve@3 zGXti0g4uPB<N)NlrgBQ|Co^U3lOS*g$%~WD;(gxIAmhAsRfaTN4#}05S4X9;HPTIy z<4jZI?3l|;rYM|4Asn{~Fx7R2)$go5!&y;HwJ%v8vd1_S*1!fS<fP@q(xsOGk;EpW zypY#NVXmiy&sll%(!x!?X1?sUpG+~GHRKeNVAVB|P&HjM*N~(e`g7=0^04*m->*UD zsH@i{e~zRu_wyxDw;xLWp7EGJpBA}E)9_mTl9I^rk0rRBeTp*4cUuL|8MggeU|+wJ zJNDnYkEI3)$7BqWopq6R$c{T^kGldI%|a$?&lEL4D7{agGC*tZ^*B@lt101GE8$k6 z@-fgMyTA(#M{W-KxtEOC*i2(ooWfXrxXZ4H^TY3^Cwq9E0HNAappr1#CY)+n87f$c zV`0bI;tdP*l?*k2aYH~sPR<Dq?!;K0Ea<fqPGtI*wNxHrm>q2=9?c(4x0@K~JGFmv zBs76`u97g`z%R>DoV?{~tL1FOQg%v84iu5^$<u|_X|bWcFcP&rP#g;}wl^_lGx5S8 z$0m#{9zfQMqFVk2JG7%q9l(o25f3<$%NY_XH9<$C@x5*FvUh<9i1>glaWo6brY)ZE z<-cqt0`gMPeLG^vAlWMv0rNh6b~J&O5`OkBfxA70Tr+-Lg$ZRWqX`Q!H-rd7G34x< z;L+<$ROsays!J?I<~Dgryyy#GZXzMlklAk{{{q<xu5|f+>Fx_B?P(@uz=33bF~pxI zG#g$wfio7t19D>mPR;{*NdN<BzQkN|;>WbUFql^*Ict^gI@ZQNKSyClQWKb8$}rQJ z8rh|qPb$xbXxv^c+&8wA+TJ1js}ikmsiP9xjur^^J%-W*1u}qvlYCV&qVXVhl->h` zt5{I~Qk(@8Ws(T-ax!Zp9Csm_N(+lF(Scx5i6&JE)QZLAI>=RMOKu8huxMsfK@kYT zaTZv>fh>%Nr8HW5cnK`9uUG_0EtDCypw&{U4m+ycOA-|rbvG6iQwzr}K+){8;G`I^ z*2WNwo$&9fd7r4kjv4~+ueXVfd?5=-)GaWweHh!dA-9plrV*L25!+%6TN?@c5uDuz z0@KQ())VEJMRI662j1v1@1S=q#_U*QczX9jzi@~7ssmnu0JJmCX8;r<I_#_6)hdj6 zThQJyaTS^nv0q9}{ym-3H!%_mT5l+gD|E06qg1w)nBK$t7tNF%BYeb8GZes-F#w8H z$MrWfSz5I9uVysaC56~S9a$7#W{}w(!6r*_QU@85n&=gy)t6%kq=h3g0H7gz#X4c( z1PG25D|E>g^xj^cMx6D;PH<yT(gvQIG{g<r=Vecq!VC^ceG{~g4Unc9lMWjf$ay2< z5UBDl0OnaqR{loz+?BoASk8yjURY1S^^JmTWB8dy%o*3Q0a{FdhMJr60`*2Ea~#X7 zHA)`IlQQEt_nG6P3;PF7jfohf0iK@4fdmR0>W+o`J{B6qLcF<0_CMF`OC<T1AS6V5 z+!#aup3#Vm#6IS2EgYvDH9We@_3>Dj<2|E2ifRcaUk8)drX;9GiGIa0WNrkS0$CG$ zjsF6T1p+}9eyP*`66us`Je6OR5aQpfG|Toi%UabuzBs2YYQY=#TC=l8$F()T;B^G( zl)cwsD?4^<((rPKJ|qn_z5Svx{tbsC)>}gh<9B06Z=c+~$GxQY6ju<t?1y&8F#RIz z+x|>`)1dqi7^;DV%Zi8p3r=Eh3*HR^f47y3ZbCXnlWUByt`5>44&bW|@D{(v8E3Jc zSE9DW*5`<2)Iu@z!f;w)Mr4$v2}%mv{%|gFWh#4R0V)$AaT_Lk90D<yIPXgC@h{G- zacUZ;@7hk^KQ*n(w4fWZX#P*T?N*H{7Pkw8=)ZLy%0cdf&kV-RL(pf|Cse{J2!QRE z|BtG(jH)VN+w`I11cz=obR8OLknV1f4r%E|r8^FdbT<fybazRYl(eMMCCc!=^UbW8 zpZoV-Yp?x0&wXE)IO_Qp4a-20&=IQem!gCOUfWQQ17oRx8d>C#!?%q@Y}ZHzYe+Wd zg)x|%p-Y~O>wKWCZDR3WD^gGF^I*!(LR16~Pj?>xc)|7j28rsJh{T>Y;9c))nh?!5 zg%;F$TC-rRRUXX=7{yaE7hQ-%QVLce%#wtdc4r%pUVvxxtDO~QK!UgQ)4Q0QB^N6` zhw`szXHz~;yAJwtj*d|K*>8?!`tn0WFRtF0uq6(Oc*YOb(3!qtbo=WjYsH1A`1PpJ zsD21ND&-`XO8L?!OAQS^B-Zs{DW%lJ=4NYFD}~Em5*}Ojl3<leS_(Wxw0#;A@)FaG zM$jsaAz3hGDi^A?1?55k>JG2HnS>5q5y_(zm3uJe8jWPFJFR-3!*MXyArEbxg$1sF z*3~OXfom=Hbj)0Dnt~+P$PyGINva&lkJSB?=?J`ML@;S)-=#T&Zy)A4$PO-pqnvPe z0f1em3$SM0`4tPu|MB##ArAQ3;yrQrw#(<N-zN~MATTtIb*{zd_l^&)<;`t{#yb{G z^Jz_M&Q!T0LZz|S9||=UQX@}Lg#Xd2$019@Y1D7&X;unv23yF+NpLK!D7#y4o9TTj zi(-|-2|Qt}Q`@Rn+c)pFQ02Bzy<q_g^{7=6=p~xba=l_S{hYuDG^GMiLO(_37AmF? zdK?n9u@o7?993q8hQv#Pl3(klkWB97(L4?7i>0o%w!D`h(Kfmq47I;cUf~>7rWboK zK}_E-Ex?aPPu&YQN(02;6vKJ@)+M&1mFoG}0H>eiEtolB+5mUXK>h7V{9m4gpREbt zF^2O@rCdQ1=CcAwEM>D~cF-u#TZT{RmAMu+w1tus|3Gt%3IS>iLpt^HfUO53xAdRi zJ-!?0Mj&aeMx`kgXiugDF-Yk}NRkspv$WC_6}sf1Wzo1-<hN<l@U+s*S-ggo7R7$W zSev2=tAv{EKW=`1*m+PrG<2bs$}bMiXXs}DwCDT<mW<X+xx&9L#mz3r2JD^iPZi>J zTTluLnBCDp%C?Grpyj$-VSD*ou&OLze;XaH9tPFSG*?lv(hyP9@^gJkv)>Zf-22>{ zrCd#Beo*?22UOlaS^l%8dfKnXw%F)du)TKCWn$~`v+e2ZR?U}F;a>Fk&$#4rOQ2zX z)hT0@5{f@VkU#yu;0^2@{5z`?mNn%V+4ZQZ71YNKoB>TNDqr5eP(@CyI2CFNYs&8? zjl26uR{DrV32A3&upjwpw}P98kZLvk$sT_{1L_}GksZqtY8BsD__EfYKeqfX!L9e7 zQgP;}lSFJvL$zS!JX<(CWMuTP7Mgxa&tB{>No4Gl6@?j8P1nzDX<iJphIt*bRUIWM zfAr>pBMnQ)0u#ixkUEAWF<N281IU1pY@%**t4I{AczY})ANSfO+F#jOx-vaS9o_q( zWI!gUu7wD{By&0=<Aumpt0w+4(AEwXY`KmEPK==F(WLy#^-qsttDhFCF1qC^NfPlE zx>ab5wPQ~;1c#weVcT}?6_WV}lZjg3CR;Eb7m~%;;3E1M4rmA~w(+8Zi8%@}UHb7k zwuw;NdsuoYd4hn*LU;ud7_Klp4Rg%5$dq~JFX}ErcTBRPAiO+t<cJrW_!@RZU*`o4 zb@mQvaRYWGH?K1>fai${t!N+~i&(<AU*39<(h^^{Z&1^CXt93i=mN*;iP`%FL^cd} z?ZorU83D^W9)gKO0!NWH`rSfb8VaPyl8)(x1HoU9BLoNK>3Ld8XbJ}CVrc?Fa=h## zu6kcy6-zOMOOjoiD?c||;xE;5C&^HHArZ@k5vBIw7|erax4rratSFEfMGFa{kVuFu zUX^tc*C37A1XD(p666))Kf)NDb_8PzxsY!txGeDQbAR9l>uhZkwr-J+7q|>%BSS5a zv;er><bc6oykA=#iI!wULCF0uJfZ?EN^zjI1xXn!!$v!aEX2h{k9(Jq=3v-7$8t%x zaA`==xKfIkp>tEBe3^7-S%79`V0nh7afNz{UX$m$S<3fZF=&C<N6_0<fx^|#Vrwmb z^Sj=QNN+AWqR1=`un5c0$h>v3+MMxHPbi}GV-yQKgtEzm36fe--&e@LvKDwiz3#UV zDfN*i2)?L)IR?Fr=}%d*ah8G1AyFR`;yaW`><CZ=A>poCP;f|+4_n}pP~-jDCWT8D zecvX9(NNTFV>n4%y?RDrfvW6DVno2MBPA%BMQ92vkc<j>wDN&Q3Lq^21yR3BwE|vx zsr29FW0OdwhCIuDy^mpDzv!e%Eu~M%cX$p~P6wI<@ukkHd8GlpXKT*T9dU*5{J>Mw zlM8Vxt6jmi6u+p{<BJ`gQY+aD18BS8;O9_9ZL3!ck?%7th2L7Tj*pU&?%I8_6bWGR zEkITTASb_IM2)d5F?x+*W&kqbn)LE)X~0i{A*FH^L~As~Z=|&a$fl@zBVhFEfMuUX z@oa&8?wS8xT&tV=4pK+zu~C(6M%>XZW&x$f3#!Hdw>&hqqvU~1DrE+nCdgjndnvv& zjq!XTczfeb8H?qBmz$?2{xNtO=B&k(zBW)_C~9j-sdVMBwDDQth-}znadf-O%+m?H z{*{T7|4qB;-_*MkSkU{V@PF|O&3Uv+uQ^f94@Q^(Q5%yicnUKxsc<)@<UE55%i(xP z7l*b^M)j|a&VWDvz@n|^+k>&>uM<SuF84cM;;u5b_|Aay)bF?s#4aLTA@$GTbyu@m z;RtZGRMfkd!hY4B9(wNv&sKDn+1Sq$_UV?0#q%s8gH1MYmkmhc;f%>Zj_`YVwmkeR z@3T5nV=u27bG?%lm<t|%H7A(fYaK1t3+IVZTh7#4C1kB*mJ?iY(@7;fq7PR?|0sz1 z4Y^j3J}zM)Itf{@V=VN4XBW*b2602USA;NfJ@MTHG`*HpWfHtE9$uOG?xxvJ_yI~< zOamCZTK0XeS^BqZjwnX+Kb8lxzyPRZ6+dL|UjBsC-3k4ylPAGSc7+jCF?K~U9R3ud zGXF^|-uCTIdi^%WmPi*L(gvCthuF?JnK+{biI?QrSK0z9j%I}GWN3B7vQQ7e#*Zb^ z`hq70e5q1s?y31Q@6IGM>Wzg))kLll*7Kn!01pfRM=)jz#V^2sg2-yK$1@8*Tir@n zLq-BQotAMy3PA#C6YYYCx-1%wo)Oq<$|JxjWUDHJFWO!|QEnXOsH-=ACIYsv!YSW) zkKJ2(8Kq<*j-KJqYOP;2er)i0Sop-Yc_%Bft`m8mEpJ0b6xQIiSUuMDz=Q2E$uq6u z@r@s2d5XUklng2L=8LP8x=jlm>92U30+HHB?cWmef}k0~8hYuzNrCW7Rj7tXwZBoJ zl`%w#|FpwXtT4(Bi|2fuHaR=j;Cf9=mB(K}BSNcqm_%_p$~#2^b6Wwc@*0LD3g@ol z;feKMSFg1~$Zg)m3kd7#4$L3kLqtQY7gKk^iYQ}j=PG`RSgEjqXAtkIYwFe1ktkfj z?5pl^+sqkMtYt`n?OT(ES}|ysQ%l?VrpjbI?Pkg3qe;_>b+!pC$${x*7VBMOd9~{{ z4Q@Xa_=xl2ekW1=-@Au6wOlU=v*QFF-$PCL@<wePAeAc;B7raK@S>ZQ6Ws+<wv!X@ zaAL*a!;2F1`WNp9i2@_N7FIfj861!W#u{UC9;#`y@RY&mb5IBzGYJ)N1sEoSG+^2h z)=5)eY6$+CZIPz11UGFhy&IM#D2DGFD@HFPf4CnY2-`I|HOD~o&qAk#_H+OS7<h7k zA>625YzZMVX@bjUR>KjGvjDRv)L@**oZ=666F>gFz`P5dB^ZNH;9D1v%wDvR;b6y$ zSkwy%Nq|AU|MCQkieG^RM=dORpRI%jCwf!{86)yxCUTeY7UF3g>Xzs<A+m=Aw!1z_ zg2aME3%GIB$efH1gNDaI>C{#QbYz8L@+>{UEShyV?;&G3Uj34aYD%Y+XdMgQOBdkN zUaQQn!I2tG42jOx#Th5~`*h105Q@h}N)Go~kvZIN_WW0$q}}#f>C<J@jIg3ZpQ7<b zQscEsxpPi~=ow$NDNakuLGuaZInqcJwG-IVs$~ohOi7guO|hxsl=CTFNi}R)-3vj^ z71E^plTqR+DcgY~95iENend6tc)GN9YDelZ*w@cFR{iMNncp>IICx6ol=f0=WLk#q z;n`~xhkT~PxD*k|Wx{{oD!qzPPm8%M7Ou6Iu~_Bw%v=zkJ3W-n$6ma&u&k;vx6ujR zozv{rDHI8(mnX##d0&%KE&EMJ#-D7u*kRF4(@|YH+h}IfSFOyBq0(p`TQqIcwNC6t z)#S`*Ii}9#y~SU1GmB%Wd(KVXI-JdNjTN_i>AEVl7G7NTl8H5)Zj|0;F(o|y{w=wQ zhMdre7b9DH7(!IXO-ZcuCT1m#QKzU}*1<?!WOa6muY%8+!cjIreJv*SQ`s4-t5uA_ zND)7?tI3(!?)djZB_F|>-kP@pA{%2ndX2Qt;dSng<SY9h2#dei)Vk&?udV(=?=qz1 zw7bYMI`nR?Furm2yE4+~E^Fx+$^GrDS#7*or`v<_@0~YJ+*Y(sM%64=z2_a<!pRXa z^N)RJcS_|SKN>wd<>Fn!8rF2TBY2uo8SDLHC&)K$mwNVc?LNFFSI3DZ9-=_6_md9X zZejEt5j_|U;axMwP`|51BIGu+SFwD-A9OjsstU_i-Xr?0JF>;l7|_$c338e54oW-n zGjZB0qiq|f{=gI0QngG~E!6kAyADCUzQg=Qzf-Tyt}DlQ>(6+G@Pw}{-?DAOjl_$& zGvVx=%~686LO=0m8z*}57b}s{;|zJT%X3#vq#3=fm+|?b2mc76oixb5|5qA3@8Qjk zz-Pb3G-nTl*P506&i%N;**783EZLd6jCs7sMN}J)dZh}SYTh+s*%WRLU0yLi(U8Xa zP!Phx=QLi2yclD9tbe$<O6&qLx-d93!@gr%$)js-;8xAyTh^-Ue*3i};M9S$hx~2U z*iI&8e-;kJA<wui#Vuci!gsF-1)r=HjwzIyxLUK>KXzA`IPkmhUSuO6uVsjHD%*GB zPp`}>>c4u;XeEgdnoENS)<><&l=47gT9<D^1{{^q1}F#r-bDJJn`0_V&^G=ukQ)`C zf%_;F<3-F2wJh4XrzaZ6wL;M+PM%3{vglBGLVIN=B5$hef;#tquV8T0)M49_gak2O z2+f{^fpxd|s2o;;WhUKFSo<-_seDFl!jKbdImPyw1s+b4KiougKArNE`-wQc!^}Am zJ$#GdFCC`lS^SesF37BXEBoK|qHOM=Wl{Sgdwye$w)}6<h49Ld+HG>A=m9`MM2#Er zC)TmEdoElHre^w8mBNa+aBM`#G+ZqCSqe9sd6;wR_K)QH4nNZTAS^66UNVYqw&lAF zm)(W0&3!OYUxn-`^H&Tb_yD25IiLQuRN!ttJ55Z*Afsn6(5zsW*bDmlyQ#p_&ND3^ z<dY!4y(ggXf;bcgmX#*1_IL&dO8`gA-SuTY6z={9A}BaRptgtdVNPb+E#S%n{B-v* zxFDcYAJ(JKuS^$s<P%7Dh&?_MC}jbe!gxO?|9;Tt{r8sl8+Y%A89(gVevl6S@YwR9 zZ2QAG)5mMukAX;}%!k3=JFoDOf@lSU(3mkXFacPtLEua%&OKklNcb=QfF^lE87-{x zZQEgO{)a8n^K+suS1nswq7yE*)MSk6UEYlXVhl6_!X!sVUs>QbtIa$_cRtj?GY}6c zGJb|&zW~!iTCCw5|L-gqaS;&%V8tI{v9XHyD2a7b553k918BgnFDX8l1BYE9Zsi~b zE}$<0IRM4oTJUws>@y3dTQsORBA_<{L>nDJ5~*Vl>7$@lUx*oCAX;+~DM=IcctGVM z$QIoibrmX`7)9K%B9prEQT32Gx1S-YAUfv|m}dYh%#18Hh%vECaJUU8_tCX)Aaa(( z$qFJvqapRs<ZHrpO2H-F(IkmXB3VQyIPZ<V<tGc~f;QI!{h`3TOj$?^q}?3Ygiy1k zB~5MM>Rf^rT(B`_LXu{Q3H;&><#9Zc$wKNOX;9#%FC@PrYLDA*;exOg$w%+yHF5z} z>QT;m6P%C;TyTkLNE53p@TN2pe{m;07y$o70i$NY|3+~EEU#W>OjI`n)<f!o)d%nc z0@p8*;OIF-J~9cV5lT)fa?gxOeFPOZM4)RXGqpik3}I~cKz4ibRtxw~yNvm?gkx`A z4Lr)G3u;eVVkx0?JQjlWZHSo`)la0zR4#(7B*$TN#?nLA6no6$Bv~>v>fhTRv2D}t z6c`F4T|Dq$A8~;v_0XJqwi_)hS>D$&mh=kl5d0M=UK9!`3B!ESCmTQ6B6|`qsl?Fe zPZ80X2Yry(@0kOFxCku9VXjXh1a|3)so|BMR(z9uXCu3}J|$VCcVNM~6tl{XfE9jz z)k2weS6LzM8AqfhetypS`^+l<mgGjZoQ9O(0^m{<>$*E>J)Ow;3;}krOG7Zj0t>;F z&@*g*8A_r+(BsP8D=$_wl7g}OipYby(JCoRGT-|rb^{cr{2}_QCL5g{=RF>kLjj5c zs*lAM=Q$Ra$#*i6W7WTne0Nw>1dotEpK$*^<ZsFw6L9n3WqGYz7I=pgluAWa?i3IY zhPg>X@W%@X{c~|!NwJl(D9Q4uR|#p9aOocXkB>?<hw|$63~PBY&r&ds=*7gzupSUW z{Q{yPQDUEiplSou0q6Xe8lc8qR=If@^ak7)An1{6<OUQ6!4uVYRW=k=s#=1z(E$1C zs-bzsAHqyXh>P_j$lbF~Y0j#2^DrJ@4jyo2n<}8(kXC-uM2_Bq{7LreF5wj&c+NK{ zewC5RZ}}z4$>CM9lIVIfpSu#S*W9ZHS4F=n?!fl)k7O00Miu+zakj}7ZiOYThZP7i zNb+NFw?<`bRHfu6jO;A_+~YzJZdI{SRiQ`K-EHZSk%C2)gNBW)ov%Cr-^b7(84vDA zM|uf=3GcUqul=`PpVOowTVwS1L*`%-reDbF5E2dz)K=Hx=`aP2E1*-!=fmBP=jS0< zp8WS!nExJWb&9b*T9aNJ1AiP9qG^FCt0g`|<-n2()!4F?tWG~<G~zJ@<Y*-bbSkdL zYgdClJA0}=&VT-Q1^ET7|LDo%Z(V<D1;Xm651pyMDaL>XRN!BHAp~Z9O?qzdt#81u z#-#l7*`)9_Ex9DH`U^RB-p;4SrvW~8;ET7a?wGZOf1r*~-cWd7X$GL&Wz8jP&2^=t zUU;pxybJM<)p<p(R%)%j+Yj-tw)l9WIAg9}%Fl5G0H<6lWYR-QWi7<6l+IB3xT|!3 zX(+9_n?YtFhg={p7Ny;56~EZZz5SL9g0@&?j!)OR;XvhOX^ptz*1vPD9VeCuW%cAg zF8CI0xQYhJe`u%n+Wdj-8MN(+GVL=3?5Ptb{z5Hl0nDc{=9)_?5{tUTXqMLD4vESg z8%a)n{N}v3F7D_(r$8J5uWq*`#bY+5j#R5!LgR9N^PSkP)aLHflV|HBy`Hl_Z`P}O zHylkqmv!lvT92l;k<#c<FqScTs|61kh2Q935L!ZRO)uWqD_+}7q-zqabF3)aC?423 zh4&LVnUmyL?Cl%JqnUlt8<@ZC1x^n1Z@=7i^-PuwtV*qTYK#ts6a&|+sZ`pG(;Y69 zE!3O_Y$I5{VfXAT8U5~1lmWew%NbHQ)j?wHlU&aea~kfM?KQVE^k*0(((Bib>&0{G zg)W(?!h31qws0aN1I982;{oe9Gb;*H-)5V&8!ax-2yWbvk<*Cn>1c1#@Nw&KnO^S% zp$>(OF+b6$s@#~t@L-eoNRzCMeCY`3r1gsK+bq$}PZYiBanE|0aicGX@!T4Fx3tmm z+tIch8#i)YbGvRH_|UVLDdpS2*uc)dxRLj9lZH<t6`j^>a^rlr6XtP~jh*&iY(|Gw z9LH-WHUbm+MJKmC?bG6h_)j5gFb)AFa2pqPH801nAn+gn{J!A@0;%Ha1z8KC9J2<` z2hseSRLV%6mMDa@A%G0H{l0LDF}U?esU=_Bz@BKQ&C>+cZL7tBN%WKB=H#q<hb^IP z(uTM5l`AF#H!dwL#-Kk7eJx(lOKRQ|GuIWH^Ahf8K6ee17GjrncjbBIJZEwNij@HM z?C7ph7>jh8?i*Wg%eZ-;I8xW@<`T{-#ZP=e|K@h`JVRN#_(qinSHzj+)`V7bj^YBI z8YKQ(1E&{&p%el-<$|~sfPWQ0B7-nL@ZintG!9(DgJvL@4Rd)x%U>@*qTdEObKbez ztgMPM+e|LTg99j+p@-&Pzc3_ar95xZ{bcn;Lr47UY-brYA*De+^z6WA?WIeE4B=dp zOyTMp?m{&kPN*2<okj*N9=inonmgCpFfz_G0BhT|E}?5>UDPJLf2BWuz4~nc(_O`l z0J!6v-|8x`!~E4&OXy@);DnFXK|wfy9?pU*W*!VnOLDag42lmDzXX8XgR+m#mpla_ zcs!(Jcr>rU09s@`#Rd2c`-<xf(U>!{?)zt6WXKj;o{1%9Eb-B+652>S$t30P+{@T8 z9;1>dfAHbbF|!`vJXg$00I*^72fpUg;Vv%1waY}4W)(&dK?gk5_(2<jNn1yAb+ywA z-IZ|O`R1@CGPNs~M<Mi`NDoic%AVn<0I}?ssZg2Pf1QjwD^Lvchv4qix^L2VZ$3-Y zxT;cKn5^#3;CDG=+0H`m-|v{d1DSIibe;VWpE_{<b<p3Jp+%e2Dnue<3jcNl^p~WH zW+AL2WtPhWM!I5^24$aV;8a3Yc-}36-EcmeFjVE@oI!uo*5felVRb_1MR*QoXbG3+ zuvjIrG2|(`-|x7*J1+ll{F^ktNcx$W^NI^4JD<eApc|Gh++NBqU8I$S^G5<g(T&*; zBkbFd(S657K>OqC#pYVW=7t1LuLky@1Zde6Ggkcc;V(o`40|vLJoj$t(-p`OqB+>5 zt)8|5{5z=@e|%JzXPpHpYvB611$@}zKP4t1lCFrT!s$8|LAI<S7-oMs-#A-`Uc1g% zgFzeOM0D;4*RH_f1kef>#POV;P;2$f9Nz;**qpmsvPFOD%Kp;8?#kVbr5)SW<Bc}? zW#IJ-weA<YOM>14bOqYzI|!BQs85!BjdLRTKqq0RvraQhw8yo?ld$=>5iTUQ$=!sW z!3CnhU9jI=y#s?d#Ev-&pV<lUu+@qVp5HUi8m}`Y{^D7>(fD@B;c`pDq&m=~^x>O$ z!iivdN6XhRMMPOYe;iJ!7t3@AR*H;KLL+1th@&_FNisbh>$mSj<vR;wIXAyYNrOu` zW39tPFaq0o<s1Za93qU(y3pRN>Ru+vP2z(`e=Cntd*7Dh^yx)(qpd$s65>qHV2NpV z*LjWS_UyCZ0-b&gk#+Ty9*l7;PFDYT^pacD>Ff{cw6M{;t(bl??-^IGd8mFKtBPY8 z>u=+EYx!r*SW!oY*RkhGcYHAaTOajE5$A9)+@1hDED!oOr28k*X?Ehp==qts(5rhj z-?Zk*<{WKg7Y7OeJa^JDBewcNFwh`yJLtA_)Nc}2<3p~Up$I}2%bXRcg?t<-@dpah zxuU^HCK0uTLtI+rSO)1b6+_$-nQS4iUwhx@f2tQqhC>*P77jH_6w^3tRu>K@vN;4; za}?(ohf;|3m!4L1_jIyI8}#;#c&iq&+1>KKRVCLbd~y)-M~h89*01#3eOo)OU#43g zjE2K#ymD?a7)^MR^XZF|R0U$YKh7R{AUERUX4&<Wyk{^)@m#i%rT=-nI{#I*=_h}7 zn~rR;x9P@h?t@DO7dup7uM3y0zHl5S)2I5S#W8)}IKvhntKm**0lltH7qhmU>AKQb zik9UAzx?bts%O8u_4bCv04A69zXA6b`_mZ5b>IK~S><ujS92w2l4-Y(>^g2g`Tg~@ zSIJdu148c#Uj=xK@^|<197)d8^J;YTRJ}p4_iWBVr5=^|E@TL_t+BINjht{}y#0?^ zU&T(*(18uxzbms3+wIOW{jkna>BsD0b!o&5-kYgOetNu6j1OE-Du-24Bug(#iQq{R zc3fX7b14tXVOy<o&sT;{(%|P;$I<ajmLmv`zXh)k;;D&VEqF|Cmmygv@QtHxQOJZL zp@NmJQD7uWsP6IvR_j7&X+q4iXtN|fWZE+^>$5fx8N%>#67d;Kol&29d#T=s%)KiC z{q5Kr-De}muQyBi^+G7PhDtPFC_SnacGFF(?oj}~>A|=`UQ-H#xtayc{PCt)GmP^& z{LW02-l)kV`i3Diba9>ll6hPUB}2ls+)2M3BmA~OLT<nPY9G_UtHotyyIMPpJeL73 z{TRK~V1AJIiYEW?+c%OJ$*-3_(It7!*r8FWn$$?e$Xp6x#L4{I(8<#rkGi0+{l2JZ zD0}DiV3TQ;?)SEQ35gD@qk&r*&$FUAPZGG-FcjmN98OE|R<b)XQD)~;F=6(bZF?2N z?uVC(#>e5v+{8E0k#PtlR}8!`zs3lh1be*z=jJu<KTBSn3ZaC0<`%N)-a3TPRh}(P z-|x@9Q|Dwmy*83Rk19V7>FG*pMhM$9$kSvndBy}6|7_u14)mB3F@xvvOY!q+`@|z{ zt#uRT?N}o=EQG1}K*XYMYG}tsuvc%smxF_m?uFw51GRL?g_7nH6oLDy(^b2_ub=!5 zi!(OMth2c&^X$iUv?Y>NBO*z7wr7V{d@)^6j#un$1@b1o2lE5Hs|3)goZqj0km$>D zag}LE|IN{Hgr*UMvX>*Gv`x$MBuO17V#4xx&>_^s40c9@pJXw%#*Bq{J5@!+8(DXe z6j~9mCnGaVE#MCeeP+h9%nKbvDOxIs2;wcV0Gp&IdRn8H3I$^fqar6ddD2lc!DF7s zKV-(cWZLuU<0D?~I=oN8VN&wRJ9gGlRJ|(Y;jB#-#9jBY$jJ<>_(C}Zb2ITRPGixZ zSrEobDMNqVB4f=<tSHY~`H%SQ;x4x$INQ^5n$F+Gpd}XrHx5f!H#L)DtxF~*i(aGG zYVw^0YrShCQM|fW7mMGsW)f>FS82SEcp5{%@a@O0qHtdsz&Dvp9+V95FofS>?du>L z7Jk#<jwqS5VtGZNY>uv-*=J$nJb14>qJx`E*^baNzbdeh)6SYNG38ScNR6=G6_?!0 zr>CaHvBn%oymSAS>diun;w6{1U~Ma6;RoTYsbrp+%N*k=?GgSCfoMf-HSRp8mO#bc z(m&82@-iH$g)yckSvd?e92hpf&|Jw(G1oN4efWYNXg_*7%$rx0XdogygD?id2?GUF zKct=b$c}9&imfUQO=_0#mL9D+F#@~3;o~u?Vl2k3q#Perlu0u<Xy)>iz4NSn!%SHi z>n}i1jI~&yUFx9gcUcP$D>lPn59Mye1=-?;Qx=a(P1N}7H4zbdKFNd<7nm<So)TEe z{b5lL$<pgQ&@FM0%HZ;(K?CE_Q|^$=bp6t7B$4%^*<sdC3aru}mD9`8w2>G2kbx5d z4>dnU;5ThP>T;$!YZN*=MFLz6m?v>48!D=;P5u}OH+}{IlOh{uGU3l5Nhx{sDhpCm zn&IU}xByzuq%rdV<Gt}o-h)1dr1VEfw{H3;WKv4W^q3kO17N`dp*-|Ww()s{zB;Wx z9m6ZF2EF@acBJ`I-xr?k8w<O(FOzt}K895H2l_p`vOgol$5mARxiC>|xCDcpKL2a4 z_f0&Vevjm9jwx@T_sJUQy;`mIvp}hz{D6y_Fvpy&bgmyI-9Az^(6ZP-8ZSX&HxR{X z9KP6+y;lN?aSpU9DL^3-t#*9Igcq|@YAJFJxh2ILC;gU`tP0FpOv*jAcIssFZF;;& zsdch^tUVrobHGzONfWW^WjJZ2mxT1K)taZ=@Y`>DqR%BAZv{u5g#`WoyvwnJ+lnTB z`k;Ooq5NrXPZT3-;&k*#E*fqpL;k5Qg2Szda>K$=hO1Te;de26yrm}>N?mH*b*Wgq z9mz+dg#yS;g({`3ZJyDhEC25*lW#U+JZMy#qq3~Y!L@#Sw8S+Pyc#pO;L;ov;^jcE z24cUTg`)!$n}T8J#9BC(FSybdF)<riA%O>~RPpdZv%;EW;#>W}_q~Wguf!ej>w-_E ztG~QjHYg|kDf)>|+cDZQlprQf?X;J@!;GwWI4^|YHy6FK46F@UvKCgvX<RaJq8*4m zmof2b^F}}T0z3GnoA|@mXT(A=QBAOu_J*TH;s7b`Rf!bIGwT}+4nAB=-PBvM53pNd z2Tcs4mjxu`btEG?O`M4a1=Z9F3VZrCw%FvK|0=E03#0S_z#~L&>qzaUg6nj^-fh{h z77sT}tyC%Ur@AoO3R5G%X)#e!D@S{LVPZH)3`cl%gcEf(-pg)h6@Wk=%1y%f3)+Be z1a;KE+QxVT{c{}qOe-cza~Y0UUq2fi5r082%POGYgw8~?p=l+EIguNV*Q0doS=_nz zg<c;O$irmvoXuK`iT)4Yw;tQ@&i8Sh^!X3R+uTj#kG?{pZc#exMf+I=1B`>SEFHhs zeoZHe9w*)0z3UZsT=gE|Jl6QLT5VbRwE2uib<727LNWUrUFjYzK?TfEGKJmTw=<~( zzq0Ndpj^2Rr{d^-KiknQx+S<uD@G~QHCK%xYexWJjx15eIFU}@;_eh%K}9xx4T@ut z;Kg<IXdb2OcGD2@Dz0<x4VP5F@Y6t-RCw*7fhs9TYBn0_?kWbb>vNRueHRt^?+WdG zW?uz4L0k%Y)zudeTx!6s=fPEU6d&{9P1Nsk4C?V_24hU88C20;l-D!NKCTgLgD8>) zRUQ>+qBAJU<}IEGblFxZF^zC<UMYdSCh6EjU#>{kfL1S<cm=Ik$u^De{VNX-47*l| zV1-BtRKR>Fx_N-KtaXoE0FIw8y81H=4F?tAb&jfzKrQa2k~Ef4o5ZINOPnpt3p<k0 z8Z1_a%j$TRt0~Ls$y8`N$r^ylz;Uuh6lMDKF=nCo7TTRgr?PT!(!~|cUE~DPn7u`a zNRz0rfgmw6Cpmxn!6FHPO08ZN`j}t%VK&wRw(G+gQq2Wh0w3RC2H^|7{f;Kxiy~c* zssOF>sBf(j$+h8XjTOmVvl3Tkmdl3;hDr+tM`6U`zm|^{l+J8*c9f3@K$BV%d}pk% zV<4WHB9!HkYVO<qAJSz#WtoR?MQoBIW?0S}bX^G|#~C#JdX(68ne2L@oOz+h6Y-pY zc4CV5B9ZnI$H-F0_VNHUkLS#GA8UntIH-}gLtjGVt5pX?3w72ivIi(?OCs8)-QtM) z(tqs;M@Y3+M|e(jbe)LA8;zfkizd1W4ek!*!<9?VBfgz<<^aU3O600i#a0K<-rS@0 zI!egicLU<a)%wui%!KO)i7c{-WxIAv&o?gxi2cg$TJ7laREBSAqyFGk9#e_gcN9PN zNIm=#?NJ~ZtkLlTwGE<34Y}$co|_1l!0_M;Lx|>@K__Dna_h6rP9FR#9*XB*(1Pe+ zUrG0joqj6@ko>#qp|+OG7F4NH=_53bVu=-TSwWfii<}RT{569y*&kirgw;%d>Fzq^ zr4c5FNriD;j5$bx{oEvhcO~~DXVROw4_{{L+KNcuw=ev>@10O&)t3m1nMhC92v2g% z#cJhkWPtxmA_z6eKT6%ZUPxr7%8Vq8V!e+F6h{5R-3~;fttq*l)W{C%U#XF^mXsEC zRr3~<R-Flb={<T^pv!V;V(l0BU=FaYi+nMUbXORFZZxxY_6xU`m3H*=<h1ZM&AtM~ zyjhsZ2Th7iVpVyv{D;U}kLB|M;)NA?AOpS62U;EHoJOM<|Dre8&Dn8*0gka`yjout z28#@)@(md0GC9`nA;c)$yt&$ZZ6ycT$?U8p3fPG^cG|*!=LtiAf_U*vqzhvE3@*qz zvO|m_Xk2@`LO24+pGTPIWM64Z*CNg;8kEl%mJEiJ{_1!*(7iG$dyvvODA3W!)#m>S zV*6ASl(m4XtZOKyt{EbSA;J(?wP?7Zs}sB+A**f*){|yqvS1&2S<28nprT;|006k^ zi)l9<`OE)j+MUH?RS|T3QA+|SlynTBJADx#YAxfJPG3_LCA%qwVq?jF?bF6%|FxA{ zjprzSd9hCmdK|ASUgb{vV0<Kc!Xg077AwS(5elDINEAuG7ng14W6`b>{eMln%1dlZ zl}g#Bs#Qb|i%n`j`U%IEj#pc4u8ub*T0Z~i2|`KyYP1NOZ&3#SP|a>--yPE0SIUjk zuiu}@<b7E>wRtFY#NifuP3Z9{Rur7kil4Ook7>7dj$N{<RC$6u`m4|JKvO7?TCKCy zt+qLI>OIAGhRyt+uB48R*WOpVD_<OcOqsM!dqe~-K65a;=+oyNAV>e6>hAh;ch0%2 zO#m$GFbkQfb|LQhuW5HQS#-t8eTpMu%OZ*a;Yl|Woc5yImAHg!D~92ZhfZ*0%~&Y< zG7N=IglF5)X^3{nRA7rBx6!GFwO8Dk$KYXy#k2mv{I7jla80<?4lj!Jkl;%kZ8oa( zL}(qzeIn`exsNKWiQ-EfE1=gZo}+H1&^m#xR$G};_m|d>_tsP_3L@u%UohAwT8kn% z&vNGXQetH66LJtLhr9o=Pcs{!>J`0wF2pNF{Q>p6DpZWk_VNPG2ixY7cl)-<0v||< zaU_q1F701^@cfd%7>`LGAD1Y1JXw-2_go%L-K-*TSlfC~#iq2m#T~^T4e^A$&qv-; zWB2?IPOV4cC9Lot)LHTHP9zI|^Wo)q`8l%{#z#~)2S=gfS$u`}fRdjR4P&ewFPya? z;Ix>$QTs{P{Q)^Mg7O_LMDnI0BSGR%oc%;!bItu$lrJWa>(?wu7$hXZ94kn)C-4ol zJfkW*4~|?J%h->_q_p)P?AYYMWAo|d#IHW-Elz)h(I0__rZsT`DErz_(alo}wqZx2 zlEi5gUH>DA{nG|2A*s*B3UuNbyi6kZVxYw7#$OFsnOu?Vw=2V6zkoSHL4gkR@RUE; zu|Mzazi~a5?5b2Ed!0BbUNb*yy%=#8cVl3uQTFnJci=fyQNBM#iEB?o;2^&D{nEGl znYRCo#M6JW$J6=>zQ6eCyHyy;dRDI;PwT&hJIZ#C`9}GuGGXwAiWCb0@Moo(M%H?# zzZ?5-gm@=>oW=C{=`zoY10gySD1#6=l$eLKvNycwhWo}rs{DJBDE#5Gye|J94$D9P zdpvFV{qN8D2<P+D^|H(J-}|4RpZ`7G{eFH1fC>Q9#FTGrhA94pL`PMmRr?z3;J{IU zqGcA?G9>5pYrG0bEg`)hyR3szK-&@vU(?*TzR_=4yjTObv6Tp_MQ#96w3dwt)CNe5 z%giC%_2tRFgBGYfzQNefWm}@j_4VEb$w_)Dt$fKPGcdSkA*OT%2h{<ZEruUWz@Zxo z$6hHJ<%)&!dST4b=q?_E-H@W-TLkMZS}gkP4#AatfhvikOhnYIKTN0iry-^^!6O}g z#4N3`D3<hN!AK+?GZc12E1T^)BMdEpp$jR<P#5WiE2M(|!Jy>CQk(I^ccR987PzmO z`$5io=%f@hpkTfbaF|8}ZBdC-V~Nerb#81!C5y-#5)|BbTqq2OGck0i10+ERbb(3p z2#8Jy9v)JiZyXY?l|m_*y!(rIst{F5qaVL6Qkk3p$(oLZR!9em&c2icyKt4I@7<>* zVM$8-(7r<br{Z}U2yR3~rfSd<AN3LL>?EZ{?P0UD6`&&lQefEhFXJGVh90t4aZd5& z{VRI6RxCC5qLkbmR0bB!F(o3$`Rs&XVC>KrJbNjVr1hqzhf_&HWA{vv5VsO~_9II< ztuTU@!w@T4G12X@E@fCS@UbLT{Q<RCOv){Us-6}?i3k^;3`Qkex5TBjV*=C_hVa!F z5$sxH8Geh=``3yRZ$A@`>sbKyoUtSju<L(;*n+LGODJgV`Wa*p5rT&>ipxV;mUmoX z!3!u@3<}aLh<X(7dqTjP0UFs4Sd4*26&b6Y6z2{UnLDe5%$@>MUbnB&(UaAMI(|Oq z*t0zOIpL;6Kjcj5jX$k^FM%2lJGv@mbyW5NAEn4yWpW<zLLqWNMU$X|miDmD<EbLf z3sw6&wpWFIg=${@C3<xZ1B;SaRWv{lqYCx1-*=V9Km|X`>J=`Q_a2>H@0(P~o$pbW zL&Zc{$JxNp1EBBVmFNply>{|G3OabwAnmF{veu9&Ul63###}3bD8uu$UeQxvi^Tp1 zL->sbWdXKm;YhCEZPR*5HZiSUiMv*MacxH+`@tcN*A_x}C6wmtG#_^gBPaz&DFk}C ze=x5>e%-Q!pjErjEsL~Wv^!`iu|@eiE^l)5-F?3N#{K>*)=ah%(en?jUIMiS2btX9 zIS-hvTiXQuV)~cW;6N&46ya45?mID@&03Nu@b24GYJ;f|q-)Q6)v2SwZL3W900(qK zC@4V`z7qtu2fCl%jfN5sFGY$_HH2!K8NkL}T}8$vRrm&X{NWZiAY<@}LzD!zwcr3r za?UPwO(y+*lqB22_LhTSYm!1ea_e#5$xm;XDLoQh6Vrwh?eBu2cs{4jQxH6qFJ99R z^2vW?@u!avrqP@wLE#<SH0SG+up<-C3X1m}%t~2v`Hg&KlqE-<v&y))MIICPvKVqx z*|R5);Z4x8`fHvz+Y=7Vk3c$Tg%_QsE6Ar)*LTqJ8<P@Fnyv7P0-tLx+=lHrMV?(_ zOK+fYp#RBYB$C_)EJR{~>N#{PxuSWMJ^xje0X9Gpk$`S^9vN#2#}ZPS0lS1rkPp{! zQ$?KDkL(DJiZd!8GEB~BBSY!M;p`tVr$&hk9m9?-l12&C8YAS(@xbH;gWE^g^mv0i zBxX&+kwX{l0ix>CL_%X11NkY{@DSu>T-Q0FFIin7bK*1^oO4NEJKY3bY#@Xk+FqGu zeoB*HQ=YyZS`9H*>E#JXr-|QgB&ci`JDL@1F!R6^8Sh`rd4jj)yiiHsf@Z?#kP!iF z2fQEUxOSD4n9Co<lFeKCk2GH2Vkgb4m}byWbT4x$S~~Umul$o-zzBH$1-5G&UIT3d z@Q=+t>pj3t#FamNZW%oJ0G$rV886D`I|5oh$`yT>s~YkD)X!-utrXot7psr=HkAJm z!5up<n0O_eL?_^BCE%;g<&B^_lu)1<@l)xOi7qlt-+^puS%qr*|0(D7GY7H0qMSq6 z-{V43udtixaS}C<EdV%k8pyn!U;!xlSrAwNfcB&bx}ovFzt!h-b!M;#BTfP0zqJyI zgp`}prVOK|>EbQ-dd}E7nYBm>92k5fvi_|PJ-K%Lzm7anK|B}T|8eB$y%gy(`Rzw} zQQW9g`UO4kf?-TA^d12(4*^I>FxhA@{!i!9XS|Rst`LU9kFqa0|0{>-Vi4O(ND4}5 z2v=ycXAmHnthkUsrcX$YMz9P85Zr4ygd#kWB3wN${25;)<rY|4jG;AbCgVn3dKG)~ ziaK3G_(L!Asf4i9Za|NL@QVey^-vhb6m)M9i*aGk9fZmRL)O@W?Q<hDaUqLAIlF(x zb7~;lK;e5_$l?euMQ!k&T|%@aM8y^P2MNk>5Y7_~_{Emz;)~mdZl!MP^thEk2ScXg zLN2xOlDTnOIe^5vqF|Cj-d;(6w?m7vjsD|{K&!MSUlPhHxA{_xF+fN4IWxARShxly zzS#h0x*`@n7xlI!&KDXN!xiVN5r^{Z7FUoGw+Ku5b{~i5YhOC&-}6Fot?(^jCQS_{ z``rs!I|u)sfhZw~&0P^JScz%b6D(_s?VOV<2J^0YBpF)bJ!y*7dqY>=hB6}{qvjGe z-_zl8;sY?qIgHc6&WIjKY@h%<b;Yt?pJ6*@861tLfFA>Z$=moskIaQcuQLwQWKokc z{dU>S?s<2tpgPekZ==QDV1WlS@XSfUmiC!wn&}39sUbz=k$tH(!9+|+6g7Ut;gSS` z+N36Ka*>4izn~b}T$y(~lIWwvu3=e|R@o(zBxw!4t%W&B+vEkBI4=R6+BQO$v~Zq6 zk5#l>gj~+p0NKbVa<{&m*k@cq+3lRF!qoLodB@TCqu(i-`zXGR<t({T66h0m(~zEg z%6~M(SG&mb)XY1u$5W|HHN_%OCMEmxsQ~+tv}`3GZM6VPF#iV@sbX6Jk$)j~1I3<V zK2tDlggNFMR^fRi2_`G^4|CAz7I0n;?+}VsE0LvGT(l#>M9(crsAI>NBq=7ty%t?4 z-j0tyDB^ubwp<{XOM}UR0F$0$tYCrh&WjkfA;RWp{V*h77Pr>~GSaBUPx2or`N2}c z<g$;MuUTIo0aEHU!ARw#=RqYq1t`WrxmKTwwUvPC;|bQ*a&}Fs*~l&|Ze^xq<PJ(@ zHmv-=Q33jvnpHDk%x69>vSf9;EK@!_-Aq3Q7G$ir9Y};V4f0n-tVPA6My#Aiem^VC zOjdX+48+2Nc^(ArfH6^r2+uZ9ox3vpx)oiV0WNG|#Uem(Eu6(Itj-wF6E{w!1UN$i z)ai<4DTC9tg_Yq76kaYP*n*JuqCLQHk^pGJK`2Q<$hhc$!*f)TdX(BAz8NT5>NzSt z7iz|3nI0ENF9wHH7J59W=I&V$fzA<4rgSz_K^zK1kX7&^E6{1uRJm4uYOjpitIP&e zVe(b=*;d8jQC1mY)f`vV8*zJu0Gk}DZ;UEh8;xR*K*1W^6ZKd}^)AHHzFjsxbm2@d z1i-ss`l06;c=M$e_l>b!xDKR9rymCP2e?-^VvW=TKc{iTAT-*8fJd^x@hyy5S%pIl zU<alxu^UeB7FMYQsJ9;T!m_5z9NfVQJS~72{{iLBVD!SU&LnUm5!gd7*ZFgYpFvnD zh!($COfw9e&%J0rG|)L&O9@^S)d=LM^AZ3IlIn_~p2a+04<LY|C)ESSn_CTGzyU5a zJU^2(4``2Vv?LFGZCaDFdt()%afiz{Evk&$@eSV}Ab;$auA4V)XeM(vUltgeWXLh) zVw;*RA<7+Cs(+d^MZWGheC5Ql%~P(VouE@YFsXmVw9S+HcPUu0I2xj5N*v7nEs9nA zdDryCJrVll?J<+-PLklZx%~>z&gl!cpG08jBizCpYQ%<d6ohj%g9Ssu@v=AX4Z=L* zf@Bncck40HL0EU^p!D91({m643Ryl!;g{$msF5~W5V|aQ*&p>u!ywAS(3yHbEr5e= z5{-urodp0X{lsTNhqWt>qvFk7uwbH5);T}HTy5LMvDR%^)Ma?d8g|^3jM`0eXNn@( zjpW_UQ`CLB7BzF(y^YsnWXqZ7lL=w66@2Uj^gEv~MmVyjUhMdDia_tqfoD6mR&ngB zmn<>^w12i5F^J&zMD9OnIEpP<`hi&EmcY<rZzY`}RX%tF0wQwt3AONR_H!@e)fN_v z4rdcq^O7fcR}H}wg;>ELyD*Fk04M{2y^O$~?yV7DvLtsxa~Vg|im653F6m{0&Y!m) z!O#hykmMtm325}IGUuo5q0KT8Vh>Z)ix4a0R2-BP+nnKpC4Z+*c6Mb!0CYr_cVtl4 z-Zf%mx^yIRZscR!2Q==U7`@R*r_aws!^R+(wZ6v2CA*a5q|EpBU?VP|4;MBsH?;#d z!yV*rL>V=)uhTBr50Lg-f;F!F8|E&PKB#Bc14o1x{&Hk?4iNjp20Z726as*2=3w0S zz3A(`yXIK8=U<DV<ICpQasFs8LKsU}(xPDL5up4K+Fz^EkMc|dqJM&%7xcpe>+53N zQSiOX(x&D;yi>-eWNG5hPlGSlz2TPAgjb>*9n+|5)83-)NN4z{T_g0NGdCho066XK z`i$SDR74BU&rUj?P%xhrZ!&F~R<M2ErI{8eCE!r<4KGw)8cH%SrLIyB=Tm<Pv7E@7 zM`mJdyGCOqQ3+zt94_+pi{crvVWrFBB&?6UTZ5bcKt2FK`uZ$79OD-N6z3{t8x3a3 zol|vXiF6yUjDxtc_LFM#*FLohnM_1u1(@UG>@HK-cP+u>r4+AN-<{#R*5W*;ExguT zPS+>!Q>7u@owf<|zd{YFlv?q&T8Y|_3pNME^{sq+-d;h9T(bo;`x!KPpA#M7GVITA zF=lXoM?m1nLPz_ZQ|~#1D`f1lBG{O57GY*x$<)VQRFBSbD_eqb5yg9rxfgsXmiEKW z6OePR*}DnIB^M;JeiUOJoLw`P9)xo|gEfc!;$#OQuTs>2=Xt<@I#3&*YHf2Mv_MeI zjxW;7H`3Ra-@lc&>yGu1J@|xuDB$nr1!bz+Kq0&1kLpIMhuY}j-XH%qxE`TftO{G` zbt`d6TUR4nRhMnMl*~CO1ScRudOKk+^RFmZlwatChl;UkJ%pc<2uQ3j3yNdYuOOX* zq*IuHnU#qT=W#vmw9L|RJADv6HBx+SVY27Yc}8U>T5N(OXTx|n@HZDuZ#{ZsJ!aO~ zcE;&!Iuvqez8&d`=_mo*x-2N~9IuP-x2y-$OdYd8A#76+RtiY_#fK9_5(W#hUJyaW zsGZm`yB+s|zs5m`MEp<00X+-Yi7K{qrP2MJaMFyB4+r6tfiT`ZBxmQRUKDLlR7zO) zMupp<ZvnStCv{2^PT1^zu`j_x0ghfU<U2H5Rfuo~1$^O0AcKOFcSNG7DYl_O0B{Da zS;d@dh#|-4y+*=uZJ27xBRix@lbQ8DIR{_v^eAe-7>01xW)v}w(@=0F#ofg4SdxAt zAV=r;_1<}Io-qY|=V-IP7HH}&p6hVl)e=ST;NRqtJ^cD~r$+YgA3oCSb5+gr9TYO{ z!t+kmPtW$($N#8q+fu(&lG|<b(jKon?&NKKBBG$nMpYudkA|!um`w7?;gV!^ZDiks z@P4*sQGULKw5Rs^k*T~U)26;bkGTpHC|Z=fLvFY+_?<&<L|~5Nt0<JKnn*c4dv!K; zTWCQZpl}6My6csMq+i~>sEx~lfA?_FqZ-9TOp{Mw-52EF0E`|P#_x7n?vBLsxj$ct zpgbh?6o%?OeB^wf7$+d%rGFU;i!L4_)hUo3$@A3RUfh}k?{AGc3!9&B%Mve@sk3v< z$Z=vGim3~3NDC8!pH_aHZa(`_UYe2(fN%CHDemh2#!nNBJYQ$zQ}iU>JATX`&kw?V z%$@jrXZQN=_vt_NiqFgqj{u}CN<i>$bUc|%M1f=kn3zmvWu{On97HDt_eJbT$073y zH~C%^$iz_!K|r6lO2-lG>}muocnpeJYyz8upR|9f<%zxjhf1b%s8J*vPjzFcZQqx| znd`nT*l;iw!=d>03G++kd^MCo>)VlTrEa`HhGqC8x6?@FTl>a9HV^x;I`vt-(g0od z^(2=z2U#+MbMyXiFtuFH{q|CW^WQ9|r?iWO5&vSngc@8f(=iW$iElYA@Sz#OHB*&| zI~VI=pD+CAXAdX#Ltmere+=io@%feED&+XDbKbq*qctvkLz#@J)8_MBIG^n(l-`+H zQh*S0MJa4CthFi=#bLA%zNdS6ef;KU-_FQJR$O!j%;P7dSpBnj`_J>J{*>S7ToOna z^z{;eY3@Pdn|C}+P&C|>pTv?YENpr9Io}7mPJ4GNbExG=ETTLEU-({f$TH`W`D8jt zeD^^yu2SLfL5+a|K|U^dN}s(3dFt>g`6L6P^{63lSnBzZJI|Bi>-;H;5@LGS(Gez> z7ZiCfEb?hgfgY{RUXeVw|3aR3T838@X}|9+K47k|ELjPrsgY-+LprM_db4h$MmT*m zkI=_!WYo}IHMD*HA52&yYHzO1-a4w5Pf6t<)P!O%TKzRHt6HWw#w>b}FUSTX2os}k zUps721v5|Z^#(?Up03+4LSakO>qU)#1|Zk%E@WQxM?l@^_%~#jsq|@uwDg3IP6?+S z<}Xr>LI8jN7XY|GN57R&LlIS!QAaKHwNipE&2-Zi70UKcTtuyeR8vt^^%quMB?wl8 zq@~r?N^sScS3BhtlptY=RWo6Q7iJi!b#T!n5Im&`WRqid@xz#W&UqGqayX4pkxh#E zC6D7c9^{r~6nW)Hb2J%57;FX+$DLqS-Xs`W&Q-<_T7s!XkaXa|kd|d!(ZiP`H*)6} zkx4e0AafL{Wd9RgaPbA5U+OSglSr_2dgNa+ew9gtD7F}5W1JmC8axDXCXZ6D351qo z?vxs7NPtafog{{!=;4U1CFmNm0YLj=vN?{#W01p!`eav9Ub$reUXFR@nr{|aXP$iq zT4<v8FdAv4Z)*DKlHHrS>Z`Nfy6dk)7W;6I%_b;uwb^zXZn*)V+itus*PHK#k4HXv zAK9!#k-bNBw()$T2LPTWdtv#=2=mBt9Zeb``gfx3=%#5q!lCFKMOys$K^9AFyd8>9 zSGMHtzpt_!MZQL;!C3SGKsB(mz3wUEMESy9JZjN6Q$5RBl&FV;=n;tH#0^pkDUK%m zU<(Z$3;zcQVV?7xlaPHZFjWd<ptDY7y**&has&i`_rMpoQjM>Czc^p|)|Zg>NzFm< z1AzP-v^0vqP=@*2--vwpzW@%<elav)*))Vgf<*6u5%k3bE6BZ#WN?FHQeGIvIL5?y z0}rH16+!5s2}sxi7q)PPjO5{rw~2!wF-p}wBve8=*ussw*h4o;bii0ekV^!qMj+g1 zi(Tj;78B%>m)4;RThJmKca%^bCFC+rA>>N#X<s@dG$K8M34t1-hw~O0$8}U97Faw7 z1wE#SI@n@e)w{>axEMnuOaXlWFe4f%vZM#4vW;(yW2)v@M@-77lzj9fE&wS=6Hx>n zhW|`RA{W`nM+PF2LyRFME!j*>3WAd@`eeQwBub$Hpp;TXh%r|wh*rMRL9slJ{%Uzk zc;r$MyCh>k1v=272#yY$u;b-a=|@`tYnkn=mpR|jG(otd7PVxkD%jyYN^B%ZEy55( z{b&p?mDCW5;!=!`MA0MZiy&8m6pQc}DG9+-Y76z_E1VUJbvP)3?kP?s-ljxVVPh9~ zsKYRn=s^I+5Ml=v2SzB`Kb$u7j&y{mN+&8Ii(=G|8s+FpKAMn_ij<__G$~4(*^aH6 z^L93ZsSkZI)2W`4s%>PbPF=xMpUM&dK^-axjfzyI64bDVMeIi4!KPp6K~U>Z1pg(P z%ELhDB8v6016!jf4`o0U9#vAHTQMl4gpdPwM}lleJ(e_rOcsPVJQDRT=T`*!!XTzK zMualkK>p2EMM08mLUtODzS;;L-e6J&_pk|sA!HrMBI;tX(O5y96CuFW$3#A6*#qiU zv(MtJXR8E&ps_V1>N_L=aJvw;rZ!)!1%PWYnb~*9wm~)`CP8rPUEV5@Mc0k2YlmCh zSRwah5L<3@U6WV_H#m&#*aj{J;SOcw;gW1pkoqE#54zRq7v6-&{2cd+RGkA@)!4(3 z<WUSImPoWQjH4aVL5p;luN(1bEd7f3;aG&YllSeLCd|2xTAVLJ-b9>((*LO8Z{#U% z<H0a-eSt+R0>B!>&__C)fhGCvjaLbA2Q;v810NuxR2hM=gt66GqH;EB7}ke|Is7;f z&+i={Bk^Ac^$rxr;vFk)aU6;0Vj0ue#yCzI5!uCKAG?pXF%&YQiX4t34{3f&-d~ed z_2i=ZLdsO;)RnWm<!*HO6<;QjgH^q1h2;Yt@0i|E@qh<Ez-|z~q+x^%p$I(aVOMXG zh9>mT>qA9~j=UzHLD(S;US}v(=5WQV&-jgZoTC=Kw!{$MqHA9J`paT!2s~akYm@!? z7rR!39u9So5NiSt^gWfdYrWH+PMLyyPB$I`@d|vPBp(wo#|=OPqW>KnsUfa5i2o!K zZ(h&aUg7w2uFu`=UA-e6!5+4{+3JpCzq=a)S$4CH@$6{NdJx32Hnus%m3r;E*S~%% zM#SxIJVXru6Hj-s1=8+!YgX2@_Vixs{nG&Ed*Aq2$iG9=7s;^N=}*TEP2hnJXi(d{ z5Mc*}%q<9bKqH|Akq0!Ok&-YYOd_xD3)Q2F5_VL5H4KSS*Vn$4f}{f)*$~U0z0OwC z42|mF(7HjgOA>cby&YGt2|Uma5|Y3}8Rz@T)T{m+j%3{+are4J!ajC|lpQjQKZx2# z(spXs<?<4edu$G3_e*jl?Bd}2YX;)?s#B;SgMUfkp>cSozyEzEdCv;eg+F}3#6>GL z(W*?8{vxU{o-KL7N<&nN7Qn28<?orz(zS2>`Annq+93<vH(8#CEWa$yKR#JhzxCLw zB{=9$j#Z+s7xfc~<-acz@%6ud7g^u`BndBlAR_H^zrT=)`OCWiM7#xajkvfB)7w7& z@CfXqzwo=f&Jw@}48P!$53raF1zbPOD8T0fKJ=rE7x};R3l9Ec!Tqxg73_@mlMT@r zLB5c^tyn+?Ou;gVz#eo!)c`->z(0aewAkRl;YdLsED0GrLG^P!8#KPLNR9YtjVf%x zD{Mj5P`%WU3gCc3=sQ5)`wZ}~iKf#))>yj9a1z-g!T;Vf!|U+C$!NeGls~X|zAt1t zJY+)-Aw&4+j5ox>Kx9GMU_-iNJkyB6^TP}Se8LWti?#4U*dUYB=tBH+5*VyL+9<<B zWW+Tr#5sh(P6R$j#E$<E#8Vu^JXAs<%sW7o!v$MJ(J;W@a6?GUzDQ&~Tf{}=SVb3^ zLRfUbTXe-w+(cotz#*i?QY1fAWJWB^#avuQ224ius5ax^z<H4lKbsM(Q4Y@Vj|nWr zfoP5qc{`)f5AN^|u|N%l5D#9A#{L_PXPgQ1;E47xi&M!)iiihpT#z?h!HQ4_`k=gK zB*=m^$LvTEp!hGFfQM<ohVKa+R|qa$9E_Q|4gU`Tk!0zKK?;ogOP>Tu3g0q|hI~ju zaxRIKFH#f?Jn}??bjg<#3WL}Zh19keNe30$h?IoKmK2H@$qgux5-PD0ED?~I>=JNt zk(;b0iqJ`wM2fBBNtl#M!&;U%nH6f$lRUW-Y`K#@(U!jo6yqtBOgWT9S(HY3lyfN; zOTiRP=_H)M$!5U?O906#!i8HH6-eP1ZP`b>jF&874pji4hw+74xs_bml~rk#ujH13 zIhVVf6hYC4f$5fD8J1!JfMd}}c4-sgdX}Zx%R1T0YiSoy2}^GwOK>^MaZyW3Vas%R z%bSQxyQE7M>C3#FkE?u;+x*Mwxs$=f8vn!m7sOmFds)msInBpZnO~VqUn!V_nab$g z5y6p|i>nyL(HO>Y91l~Ss6iQ($)3xB8JVFOo52~+iIkrCnV=b(qB)vG%Zb@km10<# ziL3_=Djm1d9kRJkpE(+H^2xvYp~>kTiBp}$nH=!69A~KnuKCU2xf@l;8$H;Y!1<fN zftcz<2*c5k{gj->=^@&QoWDxY%5j<T)Ex8doSjKe&|%NfDINHP%cZ;{`V26F=+FE- z5)aKx{QS>$2+&yag%W9-w=vM#ksQhiPX={R!Gut}fi?;?9_ge~+z6rP;Vl4|o{nK5 z7t)?5lA-XaA!i^T^Z6y>*r8YXvHt;$pZO`m8KKc;F_EUa&&FW~3!<V1IuY-&Qwy4@ z2^vy~#3C(%2QW1tF|8gl%@Sv^gEUH1fFcfv`J(HZ62WR7EJcVCii9-EQ=IJ5@HC?D zK~x(uQypTTH4W4@MM~L>(<+)%9Q7IixKr-w)N0~WS@qLQ0sufQ5eSkX3My1Cf~*-5 zA4P4TM%@<+N*_t(pel9N+6X3XaMU$ACODEKtV*bvdZt?Fqdy8Hjtod_LI`boBW{8u zxk4>*YCTsqNrHf^LweUEsRr(mCuEwCcnu)#nJM+j8dn(7d!nEi84-%Is6Kk5k|~ww zanxDbCu{PjU3xBGdZ{y#*8gGJ0~M)PYgHy}B`0^<BW{hRX#&?mLb7pHq;hqnbM>us zt)z9;)4(AucNG$OrB_w5*NvLleC>vPT_1Gt*LuSzfu*U60@;K89fjo~TC$~peAo+m z)~6i|gF>jA!mFIRs=$h<mEx+45-G6K1l3ZAu|kNlVyLq^owPE9^pa0^ebvm&S#RK; zsTl;38k8+zE4bZRU4^80aHXLGR$Zm267nir&?r4M3BZD=qB^RiTB<2&DyjXtp-qUX zsamVrG_0LIg5}zb+NiI+3$Y~#vK^_CLaUQX+l-h^h8QF|ecQNIgt^Ttw~d7(!P`Ie zCcfn>dozYYm65>R-2bmSp;rB?R>9oCVqB<2-ocPA>UxFLO3CfIEdJUoHk%L7DzA-* zS^YXKC{nF*&;x{M%C&_tu(eyA-ICF;TRziQ>V2QS(p}x^hAoW*3QOGaQXz&ku;JB& z1nY?B+RWv3EX(;X0Gmk4;;#9ME%2h=>akvl>In2It?hNM)p`*5Vu;i=h+YM-*)`wn z-C&yCS@!)Q_x&mOm0$WLD*F}Q`7ki$Vy@(c;lfC>39GOR!-fpopE>ieI^z^PE3p$x zvH1+N7b7$Pn6Vnep&M(gozSgpNC!v7S196OxV57SI}SLD*LSGhEi(oRb0m6m-$F$) ziWw3-I}#IP*Z+_ZH7(;ZY49?v2(vLOvok}88D6u*RTV4lv^dM*4y%_ys2&mXVLd~n z6#Fw4V_PDQF(Wp#Bt|qHgNr79;)RG}e5GPHyW$(x2TRshF81PB0AqXe1u?cXBr{_| zepy1nGB)l8H$Jr(hGoJ)xLA`nTf?>AnYfqZm5UQLVq2+>OSX3iIXrMS;*qwK`>Siy z14|&n_ei;mg@<a8HgXfBnN{D9i?>;;waoM;gP7MW;TU}b00#->62>`=12$gsWy6Jt zXf`^2JBTW=4}lxFf_n*sdk2N<h<E@1JZLyid$@>`8*bBOVC!X#n<!w0lwo$Zd@i|Z zBM4>AHvgr8z-Jz1X`W{8$>MLWub<myL-J<sskUef1V|ufp(`$K%ef=DICVy6`E=)D zJGxk=>Edg=zk7!Tv^<31y3Cu2&2tLRYdoeCJ%%8?_mc?QV?zOyI-C|ll?XF&SibDi z2lE5F%zKEi8xK;{J>Db1`2fA&!wScPJg1PnCc{6=+q%@t2%we-p$^EC5WR&s>g{t> z>tpJhb~{V#i>My2_=>N;PKeiI7iidOo#^T}t?9*13ey`wm~bnaFu%?CKSM<7R*XO2 zyNmCT#mYFtr?$cxL_mjVNNT%5LY%&sm~2bLzQ+zj$L7M$hV5x&?Ard3rkg>HP=@$I zJpW0w!4T}dBNRpT@a))5LqM!RS?oVG6z*2^Z4ko10hGeW4(>)wi{jpF0z~d%wC(N| zkmUZuI!wdm2JRsYZ}Wx>+0JfO%nZ7#!b+^{S3K`Ml)!>eG&Ed|=DWV@o^8$^?-#6Z z?-p<XdG2u3Y^I>>^wtdOD+zdHa7A=O%wBH@N5XRa?Lzc#{h044G(}MC5Ak;JI^=I* zG;RtvLlcb30atO}@a$N`Z0M^$>i)rA1jQM|4ipc?8P{=26hkpAK&Xgu93Mu<P;eU$ zJ|RbPk6iI3XL0&=ZWrh42#@kl+({8X?O-%U*a*fd_d`_#ZYPiODZlb8m&fE*LjNky zaVgw#CTH^<0g0+;3VZxTY19vQ*aoMqFKWnzQJ~{U!3JW0hUZv^ZP*69OP_668hO|T zYnX;bZ}hFMwr!vYb;yNWkOlXCM`d)2{piC!#Pm7mL-L;UDyK#b_edl>!!}p-<gt&~ zOmUr<heNpZgs=x-kOM>}h*<XoPdEfXc!zN~gkbN4Qy4U0Sc6%ohhSIsV3&jLG4@%X zk7rl}VgRE7QF2=}3v0jjRp)l8ln5^g40wojXm?j&pafK_2Vj5$=s^Z{7>78}26s@0 zLqLS4ng>q+hC3h#SA&Oj00uy42S>g4e2<l9Xm*0)?(hD`ZfAJmt4bqomH(<aGo#9s zLqZp~e2~Tj7U;|gc_@cch?a3zG=HZAc|eG92!)XYA(S_Uc5nx2FBN$(_;GLpr>%8; z2cem-`F(i?NC*d18>m+g5TS4QqE9U9#1kUpnrYaDAvuTf+yzd7(f3rE?=;aUtx$@n z2WmJ3PmqK(68XLX2JpEfTaVmyc=s9_hfcWkeE<eYm<P6}bzs;8B8rE%k9%l`hi8C; zg*E!W2YfNQ(h<4EgKu$&ykMB#2Bh1)-rtB_9CtqGpwcYvA=%fCZugfV@`-lK--M z00u}nynR7=Z8#EjV0(7R`&vf?v6lp*T76(>{b(0`#SZ-2$9*)3R{uvO>qToPvQ7t; zWs!mn*+2r#rUmv<sCLd5d$I=r(3b;6gNL-Qp0$^Sb{L0C*xhHagi<4jTCe-1$^Px{ z{%GNQzt8>jSAQOX+-8d0dl;oh?FQ2Ig{B$Y!c|<t3jSO;gi8R3QsMv*1kkQts&DNI z0$2x(61;Z+?mb(ijUl{op^W8gH?C8weZbau;&ljQL3_aNup{UWSSL@O4v~_T4*<Mp zklHO|=<_GRcS0osEo$`W&!I?@5?$)_DO96Miw+gav}x3=Qm1O|>h&wwuwuuOEo=7d zS$OiW{nBIT6+CBozA==i%uY7|@_yMlsE885a(aBF`z0tHLH~F+&*9RvXA|9)0P^i4 zH*=9N$?$+WY!ngaM_E3{#nIO8rJQc`fR!Rf?AjrS1RZYbN$=1oV%T8I&Iw0y)~aZ? z3V+IVIMU-zl{2i0H7IlBSD#C-Zv8s;?Ao_?ZMO~ApmgRG30ip0SH5zAVgVT6NH5=R z@!I;*r~Z}sR{*3zf}6D6JNeW@%_tWEKu<2BG2{?LRynkYG4RlHOGcd_gUvW=u&0qM zJjDad9FnPYM?vF|VoW>iyfg=5IqlR_RMAQ29CgHT*PK-`$_PMlKGmq*jyDQ9B#}iL zd1F4GNu&uLc=+MVJMK8sBp!mWBh)#y;Gu^lf%wu+I{(rr(xe`$^h6_#?ZDHLP~;pU z3sFLK_8CF+%yh^hlCU!lo@-n(jG7g717JoQ0jLrn66ItOPlclB+m$>jg(jsvI#*Do zmr6>VL_Ok&RdF<K+G(bkdYWmdnxdIpj?i(n>Zm!cDjcemn)+(3r2cp$uf6*E>sV;Q z0}ndUTsf3G(0pT+Q0XZ94uF!%15GrO=ISaw06OOoCfQh}rabFFGY~xKu)|JAiLs;Y zJDah4tWayRD{s8dSi(&@spfjAt^2y#>aEkYiYvd&8Z2tR*T!1wQOAk8@WHf}3h}iG zGps4F8Ed>T#}IEis>c!+{P3qGFC5P^om^tfuK$w4cx#*yPi1XJGQ|R~t`#F}?ZDBI zOz^2Q%PMokA;W62tN+T}Fu?yN4J*$SQ*5!wIm0Y)%N=XIHP>ZfTxqOM@5`yfrLL=O z*a7?4Gtrfvi*wsxUtBhG59{0X$4XZnbKFN?4Kvg{16()TInO<^&ZP#e9LZff{y5~p zsT#P@eK)SQ-a9Xi`QLkMZn)*2TZ}c}Lz_<br;}F>I@njGPIcNzuYLN|MbA2R?FW<Y zapb-G{`>2fr|o&nAkU7puCo6~cvGHFXY|-d^G%iDO<Q_9sLazIxbaBm&12p(Q%`pD z)sxS9?h1qd{p@}N|33VWkB&X!l0Hql*#D?9ef{>Ln;*UIBqqDkUCw>2%b(onXTOiF z?rIDp4$u%tJk|k_fz}#e<~$X@4RWw!p`+jgc}KthWetGI!`}T&7(%*z4Qtk$Ui(HU z!?tA(dKeoY?*13P4<2r0!NXezgDAx8xT6_HG@^kZxIR<;Ya5(E#Go)J#h|#3bH-s6 zP&9}`OfB$u-h*HXv-Y<bGDUA*{2~?4$i6EwEsH@KBdOf@oHr_Mh<3c=b+A!|J?;?- zFZ;?+&OwGW$RaOX#N!?5$SNQ%5s{93BqZU74Jn|ACteeZIVg#bNOBU8TI?h!Ln+Fo zOal;eNCS!ha1KNW0}yDSgn@zq82<pcLlnkv$0<-T2TJJTm49T&BvZ){cj#gcuQU)m ziopjopwcPWXhIZ6Db3_evzpcvB{t502w9YZlI<`@71D5vUR2=^I9Y}t8*+w3xMLJh zAZHqS(FD^JC7586j6Aw2i(rr;42YSeBZN^3X#UbC=6C`<uc^?5GPI#WY^N2#Rf;eG zV3Msk%_zcfE_5zr9cO3-Iw0|fb<80V>p(**HUktr@=*$j$j3RrkO(yeQy!xzgL&3j zP==s0i4OfKP=hMeU#$ZSX+Q-kMA3#aup^Vkz=u3+VTE+S1D)Y$h)nOnheX6<4y`C^ zD~vKpS$yLg*;t5E@xhLmw*Mj?WSA)}A)!&DSc4BP9V%Y)s@J^^XB}Qh11neo3s!XK znS*L)8P>#60L0^?@epZaWq}T_iq)GidS)um@llV$wVnPn3Ob4b2c|O8lXF~L(W-br z#wn7ou6-?Rp%RZa%#<fRIjAx8Qi{Z~V;NI0k4)XM)p(#mvLCIiFbTp|f@CrzZJ;P) z`+1Y2JX0H`^$Kf&Mnk97u6wbIEqKE#UZYgC3Au&GG*FbuLD>|i@E`^y;h~FiKK2i@ z{c3TM`?7e9Rz;)80z1kZA$uZay=Wtg2Kfg<{Mm}T4jwOrBOG3Ll%l17&<AF9n^?xq zVUKBOgDiy0)y?L&p8uNki6HlA-i4rJ6nm5cB`o>1cVPB(FjV3V6-+>)dGBYRlrWHk z9MpWIBO3|z$*>9nk8E_KBRgG6L6@u$cD=)_gF@d>oJwW=?GCjMuG+#<SGq9@xy)uh zvuW?<KpIU}3Teno^}_78?DDN}3l_5(>xkw(^SRFgvm){I!VO=*O?B>*qMFytWkZA6 z&yIeyneE0xsXb7A-%WG|SGzjIi4oGC{xn{>EWu3=P0kriWBa~bLE|Oxx}bhFtb^L> zsOikRTvT1EGwr|1?bvX!{xz_LYG?GN@5fbKBWiOfGF{&=*v@`72jLNo+<GM&Mr3mK zPTMIoO73}Pl>c<|mY8j|H5=OIKKJ9!;e``trJa1N0#2Viq;h9*IKo3WzVi*NNw&e9 zT0v|$+F=bZz!g}nosp~ct?-3!$FsPwf=Z(TQN*|vx(vTK#+_YMSs3=;kbrnP#wzcO zlf2|-o@6)J3Y@37n~xSZIm}~j=6q%$91#8YO^uO_V60Q-KL0s{XDbC`dI1U-IdnnX z@$t=6HJyu0IMAambwp+|pu*6F6hzZ3aj>f>_qgdonr=uiPQC1AhosooRq=cXWf@Xv z#maxuPNVPK3v=CHr_ZkUy;o<~&|x-z%TN$`ptBq8a(h_E-0~{G*r!|MJLDsO9cA;- zCz6TMP5;+*YTF9sSWlNc=tF<WU30p@NjYgNqG#)4i@x=)*O3a-2gVPsp3JYmJ?`ab zLfPZ6d^9vRy>l;o*HeztqV~4(486$VGavU8RAFh8{Xiu)zxtxr-}90FU>h2Hiq`+W z-mM`CM;N|F!^W=ev)$?LgTMVgM+YpHYRUHn-~INF`Fo)-cKRRu{{B}uHXzh={T~4q zV0FMl#~GjkE}&VMgBT<i14f_(N?bR+*#ur71{#G&ZIk997}WJ%28JNX8P>>YMg7fQ z|B0XqdKv;gK{rI42Yz4-vEK^T;HR-e0*+n^g3J!upbwr|)0Lp)(4Y&+;13?5kXb{A zz5iSc65$UaAryWZIxvId1<SoXofAf(7UG-f8HeC(AsCXJ>Ag{-g`pYh+r)I=0i7Wm znp*_1Ul+Ea9C9JxEZ-8rgE!<tDkKAp%tJ2Z0xJk1QWQ&AFb1{FAtG{84-TF=c*C18 zL_HA0N{GcexWapYg*kXhB5vYdwZm;F2tlX_Fz88Gc!MA8Usq(}mvAC04pluI!YUTT zJ&dAckb^E%VO?OuCNM-ixI!erNIc*|B~-#D7zj4(LM0did$@!&B%>~9qADTdTMz^` zr~+NIA~uQ=J#@k{$|5Zi#5{~dDhR_LtwUo3f+`>eL0p3$9O63ELLJb;G3)|+od1I+ z41zH1f+ohr9?-%vxWZtx!#TLZAl$+-C<1<%13>miHa27=-9{`D#4M7cL3m;=&_pR{ z!&+2=BJ_tk62v~#LL>l(DH?-5D4AU3#XcBDH>`suT%t5+qFh`=T;Rn?GKMDjfh`=O zL-u44*-1A_<Tn;XJ5Yu?9Ks?<10D>5HpCqOl*1nQf|A|E%k0Hr;KW^|13jz<b9sq7 z)B+vYf-T^}F6==x!NWZqWFDZRPqt+i`U*t8%tWr7JCwsrq{1zjqbAV7CJaQ<8Ae?g zhF?mgVYEm}sv=r><uBBMSc;`8;L|bUK^+XkN4BM9Ug5@UV=TbnToOb*T>qpen8I1% z1U$F{Tet;&v<EaMhFn}DLD&Uez(-%y!(Rl(U=+qx;>2P!#$&jqW&Y;&ZOte8L}voP zIE*7(5`=evM>^O=ZWhFNl!q#zhkCGwd&s7I(1(2lLTa9ae(;BX0H=7`p4I>*aSo+& z9z~LLWl$CbHZX~kNTrleiIpgqmT-xefQgupiJ6S2f0Ad%#Dh6JV$wMTMMecY+{IP> z#IO_#T`G%DI161=CAIvgg#xI?$ip*uLQOD)I>>}1bOn0(=7p9ha-86=*cOtVi;1?V z#$cw4#;9w(rHt0-Pob!d<|t6nsE+n%HSuUv5MsLF0#Ev=kpd}HRR7{7s*)i{<yXkV zE<{3gsG^ZpsrQ+MDUKa&wr9HmrgR{tm4<0qti>)CL@)kgL+pYf;DI4n0wfsHIY^^^ zyyh|t<21?xS?;AJG$~R9<1iK@LBxYJJ|;6dBQ(ZoGQI*1TBDdYDpKerI({TOQky#j z!$EFBFwlZ>5u`yP<U(9SAjsn~r~*z{gD$v&9b_tr`oufN<2<s5J1nL@l82f&LqGmw zKn`R<9^@-1q#iJ&qXw&9U;{^bBtwMcNHWAZD1ws$06WYiPB;Tz#Kl_5otGj-NuDHh zuE$AM!zsEXOv+>)(4@3B8BXeCkqWDidc#sS<xfCmvwEf?#Q%b}eq~tVf-U^QxIU#K zFlM~Qsv!7;Y1)D=yuwK)XkYk5Nd|_OY~?blqP>bGS)O9prKKWNtGZUHUh?H&($cjS z#5r&!NWx=d+5(}fk}y^YVnm5yv<f<?sUeW6Z2nP}cBL<5qJlu|VwNnSuEj1$CS|Ho z#<r+hoaS33X1vx3x4xz_Jm&x=hBxd%ZoPw5zRWx51KXh_#ufy;5(GI&?K&tzBe0!d z5L#g-2Ff}HWQ@<y=IC;UhjUiuY`B7SGOVJi(wthuFz7=%IKwF>hBEAH9o7l0PA34= z1KqO2JKBNG{lXw*=U{AScfJC6!XWasZH%s`YH}$~?Ek0KvO}0?f*x#%nXp4OD8lG+ z=O)=_lPqbdutPbF2_8fxHNs~dP}@K@Ntb*{n8<FK=$Q!V3+7rV!Y=4fXe$g(3p5BU zIzYqxAzJ0IgM%vBw0KL7Ov|#E%CuAqmO)?M4KF8-s8&4f=XH+1z|k9mn+2H<__i;d z{g4(#kfPm9>%eIHim8|N8tRbQ3N4!b-mjJB?+ob<|LRcih8X}4@B7x?)TEl`6r24Z zX#(fy0;8H6d7s}E+agYIk0zT5`pn`S&$w|g0Owc_ZZHX_@KR)#3b(Kezc38Punf;I z4cBlO8X>Qsunqqw!GMJh+u;u5FWdMq4iDk?2LCZ|PFjP_SP0>rjnx^c{V)>WFca61 z@ilSp@sR3GaZk?K{_^0VDUz3|F9}I87uR69E%2<3@R%jo6Eho+oiQsm4)gR{p3zyI zc@em+aS_Wg5{^!;SxO+Y7M_t?27`_tcX1qcj{pU4!U>S~B5)!rG6s9E?_C$=MDZd| zvRleXoO}_EQs1T+q7|(XC;ujv@F`S02b4<bm#*e1_vn^_1;9>ee#UZ*l4+c-X`8;O za>?o7)oG&YMV`{Zo+j;2_$e_Oh@d9p$+|-`8p1O=DWXneMKLNaTPCEcLTFuTrf%x4 zdMW^bs;H7GJeVq~s_Id+syx!8$HwD9mj4Go`XfMoiLQ2PLN4T-W-~T!WJlhuaxrT` zJnO#J<O`;xwFc}`WGh2tBE15Dx3=U<5=2Z&CA1p!O*RI)@-r*4D^teZvOY8|f#q1{ z>%PXWzYf#K(h@chtifVs!ZO6dK4rs-EX0!ZSeE5kTI|+x^c-$%UqYgnsAEVnW@DZ# zV^o65y2MJqtRckgYw`un{;g`>Y#`*UVj8t$Lgvp-rri2;8y0O_9PQ!G>)<u*N0Kid zN^MlvZ9!lyMj$jpbS(gUtuch{*goZ8u*2EvX4>{9SZCwgB8E#w!bjdmOL!+i=q=y+ ztsy0-;2s4%6z+K(ZsIO(<38?uME~x6<i~#Whvfz~D{5}%jtT9`!+w%(ikxohzQXFN zl9u4Xk^%+n$}a6zl<nfKE9h>1_AY-4qG)Gh@>b|DHShCkh4dN=^+H27_yqR;#P$Za zbWb;RSGRRvH+E;Yc5gR#ceetP@^zR)P=7@*B6D8FgC+dIS8E4)nF1oD>rn`)vJxqF zh<C?oMR`j%m0m|VP&HDVgDNkGD^P;AMp8WhK_Z03I{bhY0Kk1i#WfTG1j<$%jDQTh zfC@}OXmf@o{=|M;M}H^hPXIVFS0aH2H<<d$EFW(u(ZdaJL0PP~Q&d9-OgPJ_LT<^! zC6qwoVXJ>{Yee$Oiu*)?$Nw^!(vmPr^PvJWo!aR>6W%aF!Z5f5E*NB@>H|IO>3BB; zF6aU>ZbDwHgPO9bo90C@9&=p?^Cpa@coS<S^k+4$Dm>sq8jQjZ2!X|&!x-Fo8KlEP zw9}m<f)~JDRuG;M*nkjh7%h#$p?gz3i~$kczzisXgzuC&fWa65K^nNh3?w*uD}fRe z+&WwVBDld16agp##Wg4a6O@1uD8Uo(grVC2sviXml7k9_L6IN1nfhW+K(nDzGn4Cu zFk3URNBNW^xs|^KmTUQ7nxmH!W0;S5FPk|opm{L=DVuMCo100Tx9~QLgRRnYu5v1` zerl*5!>F=mKOO@v$p36FRsuYmNod)smMX#?sKTipMx}bQrs_p89OQ`;L^XtJFw{b| zvTGd(11^}guL7$?l7b5K04l^mjjIw8&;TNg!VOqKfaO97q(LdPdKi%JQe1-y09Gl) zIxX#Z8t8%%=zun$11)fT6HLM?9GOp)g9tRiC5S*8#DNZkgFN&?Dcryi6hu8BLCBW^ z66}D81Hd+{!j8XzD8#}GR)Y#OK`+EX2-rAKR0EF}#5PN6JF+{u+q1cgGdZif%+9mB z!@DcUyFb!<G1$A(<Ga4oZ94S3B4Fyj%R|8bMS&MQEgXEpOD4n5>%;H!{ra=9R$?Ta zq&J8wxlXHGga7PA13-cIq8&ITR32hIXu?S5L)7A~K>I{5HiEXsLoF!uWD|JQ`T{(h zDd(r{M#DoWgutMf!wviaJ1E1~CrK{w{yHFm4|J;v6x>t5L-AAFbd`e&_}e_l09?5^ zbUj%)lz=gKLycF%2N=>iFhPTRCKBL4OB8=J0Yy8|cqK8G8bEz}bi7m0!_&6|<iA2? zBCBM8D?k7MAT5wD0M7Dg0|3vNoo)>CbQ3u7oTf$s^-YZD$_~4U6U*%}HnE<jNbK@? z6DjbVB7+|RY;2S<W-UPi=_#V5Po*z-8zZsArOA)2kuZ@aRl1aEQ>Ra%MwL31YE`RO zv1Zi@!2cVbLE1dx3=~VCxq|L$(XnL<*RDMh%PFd3>m>kkD`5f+`>~uKi7XY71z<K- z#(HCst_w_3XGWlQ{Q_|JOHjLs@a`>B6cJu66cXwE2;=Tihc>6(lxRio2A8ro{-m2) z?#2u>vD#U#CPE6CGh=R85m-;O({eFdsSDAq+H!&GkXW${pk8o+)jAlPt`vK>>D7hD zRI_8d(sglkc<=gkFUUQ0=^-9`HtpKBZvn)eTlenKk9v{n>n{LW5{xjz<oif5!KiC2 zCRc(YC$h;Z69_ZSBHBvB4LR)4!w*3W(Zh9yqGJ<r${H&pvwWFsuC;7YC9HFBsRR!} zWdG|ADVYFx$H$58>L#pu76TwY!CI<oqIF!EX*fk*u?(nmyopR6%BGVCn_cjzW0-W{ zAq54NTH8mB80JWGjyt+Br?s+Vpd_5B*s(?qBSz3c8-_|CLrpYfv5Ym>nj)u!ZoCOW zo96yn2ah3Sqb|DZI`EDu?6e!sI`MXxbE$aZ2q9AvH8Byzi75PtMUPl?5ylv2tntPi z@%pdHq=Fo>$Rhz$^0_8yA~MPcBcaktECJAxOD`i8(b;FAjaJ%eqw?{cr{K}@7d;Gl zg-A+#ET^D!D2o)Hd|-k{rI85R@m6cyGbUJz1QOR5%ZS7cCMGFa5<+|}(nmt?DF4KV zMosqE<eQ1)@yw&p!hq+O4?HCai7D`5$D0zuKzE^UPQ|tw)znq(qwj7A!#Ly;UDP=M zpc{guAHu_wCZ)W|jwB|0U<nDCKfOfM%aX-r+iopm@uP3+)x#Hd%C*qr%hsKbL5*$= zP^5V;%C8`N11k?^SNi=m5`bqKxE%^fO?Y8y;f`DGx#^w?-l*Ey2A4t5`Ng4lw)I6H zafdzU6@jc7MxS(?iEN)*>{u9`VFcpQ+H3RkYer2Xaz`15eyvc!umzGwnLLbPXeDVT zq%0h1AbABInB);N={K)Yp^SFmnWhnT<Plnyb<`*!k?G2LfxM=QAxoZIvj1ym9VYZ_ z2c1(CqK=6j+Dq!1LtAdn)9J&bE@c4NY0f{T$WcM%(v|6;6?vR7ekpe@DS;AXm|-S+ zf%3MubeIlDADPVG0ynro6z*^UNZjHYCy~cR4giy@T-IPBpv`sebB%I^=$1sfWSuT` z&RAXR1OYqQ)s2NMbm0p>bU7LRs7IHZ$mQ}eyLZ&X6?o7C00IGkcBDfZiok;pRnd<0 zDMAl;SRg)z^NS<u;Uo`g#N{S)L@l0#NR~LFAL_!6BH}?L@Ti6skC>r#NYRPIQd_~6 z5~lPJNHqD7hcs?*f)Six2g8ZO2ue@|8H9l*<QRbuZk7}??(qdBDE~uP%)x{c=rIPy zz=vg|fdoJ%VkyTlM)*RYk7|ry1R@}%sOm8(0CcB&FmcBsZZLungd=Z%Jb?(T(5%F0 zl9Z(^pFnb$qN}l_7Cy8@K>$ERBO+0W)nH;9p-3GzQqdzkLKPdg$c`?4F^pp@;~CMY zMm8?cGH?7v6=9f8b*_`0NSWab1@g{o!P7_V*v2>B(GJWd3mVb*$UEGD4rt_Np1BdI zIOLg7ALR=j(a<H)nqnD&=0+)ELkdL~@)35p0~*69&*IoojuOa1Anb@=rkWy;j_zq9 z8R5n-w1H6}$`mRdn;lXTc~hr=Nr)eL>427!$f+R(9-ph&NB`gfjkkS7rT#SFM7Lv5 zXoO5E40Wg?og&eJTC|;A_3BsU_Rbs9u!cX9r#s2Y6dR7!tTK#eTjy!5e7W_j=V-(? z)*&=c?IR9Tpeb0@*}J8xGhcu;>|qh>Rl2eja|tbLTJOeKxbE|<jiswX7g~u}z|*Ud zEF}%@b+W{cmWB1uENM}jTGcv>vz4{1SRYHn$h!8mlr1Z5YkSt%rj?z!;oWM18(iTI zm$-@*Yh>5jBbcl;xo`dFY;U{UxL$U;&@JwDv724(ZkM~yg;#QIC|k}pS1IAGE@tUj z-R`cJz3p}Hd(}zS^rBb3<X!G~sY_qm!k54O_3wWHtp6d(LU*xIiN`JsVTjG{lf2fo zZh)Qg4P&sw7nW)YI-<}Dohk($6&6Qm<2VgdAYy$_Y3NiAoZw+Xn8hu2F;#kp4SKEi z8iN2TSOt-SY-HdMT!jfVB%tA@xI+h45QYR$x}!hJ-~}p}!iJf`q^?CJ#xquJjc@#7 zEpHh_>9D41tC1nY!XwAx&;b{GoGud=nHE7#qybeilHi%_DOJkyPQRSmFyEQWefG1K zHX)E@r~(_6sDvuov<cbB0~ZanB23P)i%N8hDe@S!q#;okci`d{%b4^l^kHd3Zz3B> z+k~gP6&83Dx)PbD2rh&n=|QY|7p~BQB@B^78vnfn9)oUW>8jBSYItH1$?!-$s^JM@ zBf~QDNCh=6K@478B2)Cpg(og?i!@tE5EO7n2Do6yNI*dcIEVxahTsu&JYferXobh1 z5d}&-VFE+=i<zx33?$<N8>$#=MuFtMHv`&MXA?A`4V^@DC^}h<#@duwB56u5#nP(4 zw5B<YYEX;15~Mb@##PN~R|_T9m6-LGY>jJO<AT?|?)Sg_9P{>)DiEpwlQRO5>t!f< zV97$(qbcHwL3A2QKAwysHc^aUpzeZ|r~@qqy~;q)A{e#EP*>_83~A_LSOnR`F?QjH zqnJYx9oGde2t*5I_<`z_Lq{#D_!y<!1OFJFC<QTqu?X)tyBF3Nwk+784!b|26MX=N zB-%lbL!_b@>No^$&Vh+ZOn&l+m=io+!G&*>LBm9*03sHU0z?EE0OFv;9fBN|X)J&O zVTi;6q*MAV$YK~%prtu%9XlvrhtAI#O3j;f4Y6AY=Q=-;oqaC4JfB18L?2dCj-K?T zA7vv>hq@}HPIaqG1nXMoIwk}0^{|h<?3*}y+SlIp3c|gb5E@MG9W8VDXID#=P(<v^ z<qW5N#LjE``In0-Ll^>dlHy9#$Rf~XBRXOt_ThtYLMONanI>Zp!a?q=DK3fyCcGgJ zsA|vhqgIfD?&KgH@L?W0fu!I89{+eJ9)JN6+F=|nK^w+l5o8b&?%^3MVNclM86Y7X zuHgr400@Dw2;>E+N=FBVKpv1#9C&OZpkV=8VLG0W3$jHFQUDxaVmsjBVD>-~28$k$ zV0r5A{$4?s9tWKmV*fD0oRklP0#G6bkk1TIBGv%`A7lXqq5*HhNFdM~B=8p~&;qjt z10QMwJ1|2+Vk9!+V2Yx|=I;?#Ydye%sSpCF*f5&D>>hqWE!e^>2nHK$K^H(R`8;AD zkOe@VWG9G)E5t4%_KfTxfh}y|gIEQbV8R0_A~4cH83ci<V1n*8fp_M?6G%!Pyg}JK z;Sdl{9cXYI#y}j#K@M2(68}=+8dBjIsO`;qN-31k3e1cPh%DR$0?1lH^-?b##DD_A zVW@~IGdQPF(8E$Bv6VuiF6c+h1cG%4=A0rW6F1R5JaKJ6Q4}-cN(7-4PZ2`);#(ZU z{i>u0U-ABAkrwB}S5^rh2}Bopk*Y3aGx!V=LGrLj#Z)fibM)y)^wIy?aLOL%Mb<(_ zDhR=Ht#q&ipb`?|ghfgqgi7)NpWdMw`~ntVrGXL=DK>Dh?tvFu;`x$-?hvmXOi&i! zVH`pM7Pi3}4(|n<F$c%N66_)GM!_1d!4%r$3e55>#ekLyu*lNk%+R3;#}NuALKvX% z9pJ$Vv5?}nq)WaeCjUYOrAG2Z42Uw2$|Pxs4X49$-k~L51t!r!Cb2L1EQ3OH5+{p} zSa{MWfwD~`5=Mv;1O?(K_bDj_VJUA$S@`myLUJ_^D_e|)TcTtDPx4wML|)<n?)njf z2<TMKrKN`IO6)+N1QFtx<ZO0`UU~w8@*o@*Bq_|o5jXJ0LZT9x!YSDy@raQHpK=|5 z;SK<R8D)?w<-i?)ff0ObI<Vm^&$0>rBC@*i8`0s+oG=5Ta2!+bF4d78g#uv|Mk9pA z7|6;sk7ihu<}w;$Hs7H(_2D*G(pq*?YA{D1e$#JsGAMw~Y|w@)-a|Q=vq)g#Ic+OC z$!a>qj0^jdHUCjGwE}1mZq5!K%PgX#9Bw2_{3aXH!6OLAG7N{}eqk)&fgoNY&rAn( z<e?f?qAPBqB7$N_<qR7HXFeQJT!v{Q@E`-1!aCt0Dn$@@#^DfxaR$2~8llk=@If6q zLEGSg9)!Uu+_T8w6D|RO992&)$t*vULWMRAfAoic{3i?bhD8ZTmj>`f$w@}76gX`Z zN6CpmUV*o0(no>xf*_7bi}XluL?4uNgqTiCo)kngC_yf$N+ShNQ?yi5D~GP7sO-Ro zJjaLX05@ys9E#~Zl1Umgp^5Y$iKOdF48e$~NQY$NyVeK*+Q>4hgpIzUa=3(>&<8}@ z>M@TfIRATuA-;yeWXL+9k{I7%9)MvD4q*|xvrM-#Jj3B0y7UkZVGU?uI`r!ux-lH% zlM2OP0qB)pQy?7VlpU-v9AFCo*bzE<$(Lp*n5+gVKBux;RS#ZO5Tc1dX4N2w=vJAD zwtTKveJB!cDp=uVjgE+%-r-n}C|P4-S@8gjnl%sr^t+%H52SS=aPD5rDj#&qRB3jd z238;B2_3S*ysRZGd_<+7LA+$hAd@O&FiW7i0dqFc7#fPf;6b2#Qo70t9tKQR`E{~z z$VU)#ZPwu%rXvM)Dg`YgH{@X(N)2n#Ya(<>YukaAXz3l&AswuRq8uwJaMoI6HleH* zCjau`X6{C3-$5Tva;$vTU7;ap6^dx5N@$r2X{}{xoA!pDR;d)~t*ACYjq1BFt7bWu zg^o*er%SqQ3vZRnwHT%*trfp0%g*kmbu0J0t_2;i0ZK&otn5pzTDP)HH+RcRw~z~K zmtwxAOR#XaZcVqW&;@kM${_XWz8Z_MCW3YAOLftThGe(sHg~r=cYCR2v0V3c!OKyT zi+}_-b$2(d$RQ%8H*`Tab$_-;BePwPw_1dkxg526Rrj^#H!1A5wwj`HotLd}YiN0~ ze9hN+_bGjoc6!fuzwYKrYEB}Qw|^gudo8#_^0#)sS9t^YqP|ymqszPe_j4I{ZvRUd zfN!^W^(%yf*LOeou~Zm@Q<!2~i-mc%ZV@zeI~ajwSZMJVfZDfxrS^h}7(`GQzj)Ze z?zev%cy!lSgJ<@J3CxA}tA%S=fB%<?C98r3xQDA4dgDoIXKRC9H;Kh}iC_4JcUX$k zwus$WMB25j1{j8Y_=iPze_{BJgLsPJ3W_rrcm3FZRXD%8c!ooGX7RVVj5m;LXpYSb zgn9Um^B9b67j3`zjWJokax0F>xR19OfCJf*C7FNsIKNDJkUKeut(cSX7=b}Kk*64v zKRJ|7SceDLc;%Ob3oMg)8IH}$yIfhas-lKp%@O};l9wxvmZ1#8crX$S692RTvP}7s zg;^lnAs8e9W)B!CPRyN}Ihl`{P3H-i|5qrCxs_QMgnO+FZO9y+Ihv_?m6w=Jk-3-c zS-Z}`5R`<AD^f%ZvU}oT8ce9fU~8A5f_O^c2b^r%6a<5)C7&&_DGHR7<2j`$1E2*O zG^K){@42I0tgyORDOiM|vBDsgq9{dpjI9D5phqfOT0fHl`Qiqoqhh2(#H5n~rHA=` zJ-VmUiQv*f<P4(X7H!Z5=+auPE+XyIKEfI#E{WCw!SKKkECCY!!W}%V<E~m7CQTP? zu>g^J<Ol@TWKAIsY|>!zN(P}u#QFo*XVnbN)%F1wYD5*B!4NPuS^u(n;$AK<#zP|9 z<d;eZ8v+e$3=Xc7TCZ(Rv5(r~5<B9UdLo<}t))k*soJWoIjc8etGoKEk)q-*?$t^z zS<gDxJVLG6T1j+zA%q$L=DM!$I<Gm7ul>!ZZJTar&gQ%h?8Gh~m@g>o#pjSt>6niB zhE6jGR1*e47_eaw#NnDXV-tdb7OXk_st!j~2kLAM#E>HTh@1S(j^+C1>6XDH2Iv=t z`xl0<UO;fS$8RGBK^krZAr#^ortTP`?)~&2b}R-5&;>dWX-R%>u?0f-j>5f%@3*~X zsL@;cio5xcJ86`gxt$xjk#4%Ho9(Xq=Jr6loyO=I{JYDd{Qu6*7seav%==2xd%fNI zBM{se;9I^0fxZF2zG(r!BNO-bJN|CF$8WmO$WS&OBOe|E9zvoQE^`iH#v&j>A>#0W zj;dGq!WLPiIE4sEeN4&guo2LO5GUe5R>?24ToI;Br*G3jfnp;l;V^t5K1PB%k%AG8 z;v9lQ8A@Ol@E`?%2gvd7BhIjz;7(E(;>eSH>FAKjY5d9kCdxBXwW+)yth^ntoEr^& z$+<i~6v0ZZ#udf9(iNl3Yvs%@C=%41&E5PUF!I%i!YF*a)jeb$CxRX{Ar^6A77sF6 zoZ&`J<)2-fG9HH$@1q-}jHnLdYN{a+WN{btAQpI~BL6L89dyAKXdxSD^43kULMECO zkHTKarGTzIUSeG$YyE@PL9^KW98eb1_oE##B(SBS2xeh>+5y%xh*tTK)@}W?bG;X< z9U%qb*8%b^hCN-1{UeS&*_XZ9Z5rC8o!UvU*RkERAF^J?C2GE%z5OF6@SWVvy&%wi zB=mzW*xe&tz2vtdFi%A&J+pN7JyMw0CIta4ToP95uxwz0NR-5cUd1SEy5|i6!32YO zB?DPjTc%lr*HZ=Kzq~Wo;uSU`7S^F44&x|j#6}8eu$N^R&H)K<U^uuQW=iBlXej9i zgXwLdf#_#es$HKbMCKcl9cq5IaQ-87{#A^j=l{RPnSp-oVcs%|J~Ap2=?PQmM?4li z^Xa4B7p7h)tiD-LlUYnY^07idVN)?w@l$ny%xN+>-vKBBRcdMigmUp}bOeB41_JX# z4Yd(CD>OycryhNzKUg0#Q=~2!(pF+29;80qsb(ci^li*U2j;|0-iPv$rk_*sZfQtd zGQVqBzw;sF^B2NnYyv?6gY@wtpWeapo8~1}pF*MELZ6c_>|ORLl=hLoK`#G-a)0;V zx@vx(oF#w$@#arGCl9EdQ!_FW^1;3V!WRH}zXHXACoPb`a)Dm4190vY007nY#2Q#E z-NbdS1htz8fTJLB0MOA&=kAxCZt;HU@&EM^q)dVa5h|Q$E|4*q>oj>>SIbT~nimuL zdI(Wbq;DGKIm;7mAU0p|6xOqP)7mh7>74oL)=nCvSMX#~ERo3Fr4Ty-ynEYj8?Hg= z<S7%RaiZNkJLOH)cTQ=(Yd4A7^!1LRLx>XJRgCpcUdD|bV}|TV(j-ciEM3Ah3(~Mr zoH}{>YzI^*Q2<7f2433qX;i;dvHH3yP%BrjV8xOJ{q`N`;lzs@KaM=P^5x8%JAV#6 zy7cMPt1r(7?_IulyYP7T;|txdLE$Do)ke^eB0PE`l}#s2lOFb}KDu*;XZ^~z?4+&V zW6VS5xZ)iigM9POIkm87i9+oJ2mj$fzo^HadlQudAcXLkqltHXMK+-#is(_FZ~!3G zp&bu$S0H%txDv}cSQ+Ekh<G%Fk8s*W2!L86jDQwW5MuXMPLM&!;(9KQ7fxj7rMF&t z*}*3teGlH3A0GPw(BFRn0x)2K2ST)<9t{c<oLg^6NTHM$W@zGu9pb^)L?Mn?-$d`A zsO5^?eMc3HGTv5NH8$d?XFd=v%BYErS_f&Ql1@r#rIucbDM*dNgAOzZKA0vu?7T&g zAn-s#lAe)415KI}x#Ov-!DZ*@JDrNN<~!_onr5RQnu_Y0YDV~0I?!a3E2*eHSlm15 zaO&x(!RgbeJDs)zs;_XNGyhCCy)p`qGD0nSVy8^is;ji6o{B4k@~~<mNU$OpuUoVV zd#j_n(o3$pzW|%+u;c<@Y&M!ID-N>)r}?b8qpC?QvDQL^ExO<Kd-1}VZp?AV9)Aq- zq>l<Lldq*JEU==k0(Y^FE4!Mpza9-MYrQld?6S=zKdNodJ`b$tMDR?*@5?YVdUDXJ zsw`~H3pY)2)K3R@a=gT@Y}VDuHhpx?Q_Je~&h^IpbjW6(jdt2<LkhIiQ%81}K9>Eg zb<TF<?6uZ*2_m=FERW4-vpm!NGjM|Y8g`?5%ROA+8n+F0*fqNw_uPcvT{qq|*Nr&V zkxve_<7<yjdg-QvEdM%>pbPsB%Gzp7vfrAI%xJdg{w=oZe_zgf&y6GgdCR=LWl)=M z*Y+DMgaE<ag1Z(dUfiL$)8g(>phyWGJh;2N7jJPwfEJe`#jQBBrOM`i-_P?t_v}6I z%$|Ao?9cg-$(eN>Ypvs4*ZPr|W(7}?$0mo|V03xBI+Aio7CCD8^`?Dw%$N7)$tTZ` zq2Fi7lE2@sJ`eM{c&fti<g2N|pC9|<*MCLN2QMKV_sq@By%(Owm!en7>CIfXue4z1 z`NdzaV&9*fd<@2OE5R6W9Q>1c?h<QWbW;)AlgQW-c==`Xpy0N5luXC*Pv7U$v~1a5 zI4Pkk`c}B-Z{_jn1wzt-OYlA63Y|Sy(ZY#V_rTTR=1}+W<VXu}(vciFJ$oFRFfGB# zip*cND{rmeJCBo(qeHDN@LpzX$a~PZfSG!n3)cs6uQ_tghxzA@7puxor-=z%_H9T% zQD#ZD$l*CT+0m`90^4MLlif!Z>DODvg~6|pHT|rJQ4E-bPb#h{2fml=Mgh_Lu5lqC zVS3&v^cOOxVSEN5wsy;cKa)*c$g7js;8w}~F^eSJ&nK=3V^RvjsFu5mLFtn-ZSHY` z^PCo)5I{M>n7kIJZ{k2VXrjP(;yvv|uMgR>sd{3Mp5n+8LFpWFKso6|$6rP)(b@2U zbs+A8UtPLHs~ZciD^7~}Au-Ezg`(+(9)Z=M9P_m-P;#6I+r3+XE><>5hE0gz`Qr+I zk|Bsx4i4O3^$Q)2C5LFS+{`N%QvZ*fM}8lA<{n?2e+YlGHmW!qo}g}EL-Gm}AnLD+ zqhPUbI1jJo^FSxcp_XUjGaP%WTAS^YvCDit%6fguNq|UXCVe?SrI$1Z32<spz8O3g z+qhCjoTZfp)z#59<t>p&V-W9jAF0l9e(0$D+TiBy`e`{FR|`{~>;#}r=Omb9X|Ye6 zM;RsH?@baYW=qgv62tvsKH0b1hOo;dhUvvzGTMnX&qyt{2xJFG4XRY6f~CxS!AbA} zm}muPWR@DA!%@4ypiIkAae0N4sAa-N-|*^OsvQTrqWe`>|9PXQ$Z57ZhYio`Yar|f zjd<vAC+XL{@zbDrcwFM46uZy3IwVM0>wbtl^r0t4Kp!okA9~j*g%%^t?n7WDi*7z? zStlw}mb}<D^0rS=@ii;si=XHt@8oH?gTrvQ0l0yK>$frC9i{7DYePJh^YDlTIf6*U zIK@Q`7M+_luEm)RffdmwY1%#u+vKwRw=De9(!n3^P~m~q_{VWN+zI}Pd&J|&Dpm<R zm?cV-?Mc)16A#Tr$Nj89MZUJw6gSRpmk3C{s$s2ia7vi?J?Ewqdk$$@nuHbQNS$o_ z%U=ChYgsXh*ltBm<@MyCid~w*&T6j<K|?ng5eA_PMQ)=$;Pb0pLjUDcd4?NE0HB;? zND7nFuC&IjX{9g&{p8Z^c+M;6!<=eU$3vw!kl=l{T{Y^Dv(xBT<%pUZ`uLL3=oe`a zPF(z+wapQ>H}M%EXOXnS7EuBSo8_A~Mq<?>*9jQZhA;dh=?5R(L%4U6Lcvp();~ze z5^=DN74w?Mc%uiup^{z%iGJ$xH?wCFCx$PAHulF2EDqBkz8p3VM^{QRls-hSRE!r3 zU&qOi-loD^9C&(`7b0)0O(nFW=u?F?q@BmklooU7yN*SKS_G3tEbM9pJ+R%6U>S|4 z&a@RUE=f#jZ0ujzbE)7R$(iNz&+arEFEn5GyoB7I5Kcb6^hy$lp2Tnok~ag}AR@Qh z>A4FD<<DW*C7<OW7R&LueLx)PsE5~@Gt{?)uHB;o@l9GSXD77;pID)R(uQt@S+yn% zLdUztqMRs?jQNDZpP!Vw+i`Ude&7~tw#UlgC13dqUIte_9jkTH6rSz($!(Q6XbVun zi2ECiE93T^+`$IjbeOYOYB{`)q*B4a?@hv7duE{<{@>en8x>8r>7@R_l!S-A{Ed$R z-}{}3Y`4D@cJU%d4|UT#oU1!NhlLsO_7;8<*!V@Rd*2Z#RZb%8@!HFcT?EhQvSTQ5 zOfi;kgkn6@pReE#VSUc`_F|Ht#)o$o-Z6g~=Ryw#J>N@wIqGjB`@EmmZWE<Rz_prM zoK|1|qBp7|NO51TJJP@VX_(C7gVN%NxOTgLi%Rfu_M6s#kln*KWN;&3jXXKYv&u!8 z=yur1kq9A2$PmUe=UD%&3|Mb$I9_)s4QV*ECLEt5OlUEv-!Wp%Azb`kT}I&<kCU9o zLb$~qOkF`XghG7lDD3qkxpqI2JtK;wM)sCM79ANThoM+kA-CiBMmZ-!qdPzX6vIRo zX0H0iiaBhfT1LfBiN-|sqCCKp(gR`Z;}r<=aE#G~$J~8aRHqD^z=&)=Qn2QLQy^oo zYXVGJ!V`}|8YmQR)8SHq&rF;YU6C=--Op|mLgE91zb(L1bK(#=5|JG7;`@*ptN5x_ zJu*dKN&P45gE(-QZKuJ5cAA)a{=K`4Vt8{`JZBVb4=9S(P=<|C$)zKKP%JTbF+t~E zd#?RW`ElaQN9Zy%X&!{d@?APX5$FuXwKhzw+4G?YOsL~fcic<(=#=~>7GDow_+YQC zRF-_NBk|7I?&e<bE-?8!TwwtK@<jl3u!!JLJQxg^F{?LZ<s!`l9^Zyk!@$0>IK2Xh z<(%Zd93&SdxV{1iUMzyKL2Rell*w>>EtqW;NwSJj8l!L8eN7r(6uu)2)TRSIr8G4} z0J~;!4X?1-+whhsi5(H-<p8Xwxxj&0%u6L&k~K(vHH9E2?vO0dx`gQD7&NQ{W^zsv zyT(-RNi&~($h1_WyAS{yS-q|#1oE+BH4++@69UWH(ivJIj<eun08Us7#1{ej0s}VA zdP0ek7C5lt5Clg6V4RL02`53h4)Diex-kwwGB^GOPHrk^?no=d3IVKvfy-ur_Jfea ztK=IiT%#)<NmKgFT+sJH>^MRK-&t_x8h9)<x$O%7GXkGsC--sL>lrksk&wVnHb)vA z$JLZ}c@R5HJa;0lAhieb0s(9o1h))=1<BK_(6a2U{M>N>*MRJ6f$UG5xW|KeEu86D zL}`BmAznYS-s5EHn9?5W;CT(^o&_X{Vg%$Wz<lr3KIattnk-%>B5;?@StTYpyuu9C zeE=^{LZ$?;eu(B=Ao8wZz|T0@yK1Q<t@&c!S-&2CKyKmlIE!(jv`^6DX`<M@k-)D< zl9oAXe<sU#^JuSH@U&V;6fg{naL8kGbFO6ZPC*2{u=I@|*bi%YMCzrZBm`GKyvq?- zXMl1cFoEi8TG70)w5(z_vpC&7xcYIKIjVAD2U5A69achcAWn#FMqbbPxbz#?wp~&e zSELw}ap^>UBnzD9C}#+VltYvBWO2^0!VajSl>>tZO#;|{#<^jK{amX|K-K&}K-Nk! z9nc6Iun5*>@%_eg#)h0SQ4Vhv^35FIbm6>qzE^mJ>nNFo>}5#AqiPyY>o_JKg1E#) zwmGq!uaw81$i2vsz1WMnGp-T2uN&fOkT9s}`^j-Lh_6x#3!+r2&WmM?3Lk#bu%O;Z zM^ay-9y?(x`!z21TWoRo&+sL#radlBsr!a)Gj5Xos7(%e3cE-ur{aCC=38~TW|H9O zW1;t|zTI8*L^W`W)mU!zW(>)e7_R91y5fgNDsCPe0+PYRZCwHr%*onJr{Y&R)f&Rz zh(_WKdy&qSChkr&8;NPK9LEwRv<(MAUO=m7(6Saxu;OxSVVKx@0@#Lw>2CVTXP=TK z^V^;!6r8LA#ZPFLs37N7_%E*Vr-ur4bc}AG8mv#tK0huebL}+mDeAU*zzU9|wc^a9 zLzPbN<OaR&w0C`5rJvg-P^g59W1bIb6>py;E8hrw`^vS8Aw7AsC4VK0mR~Z-x{p=> zjO7>H746!c&O}g&z}ngFR7%JhN8k@_r_T&Q)PLs0CiLWT(>*x1J8fg>=%|Q+3e4-% z#lNTp3w7ny_tvjJ+G&}?CAfM}wXrk-`d0*SH3La1qh06=Va%=u-2Ne4>WFpxs+D}} z5}_%ttPodnE1cfcFIdAkM04wXy1sonI=07zxZd3Tn^R>eIZbYX750SGy$QXJucf8S zs)N-LQ18e68Qp2=)eAW}Tdwb$e#))6JdxKctU8K9M=`k0S7d*A5Iu)NvQPux>jx23 zEig*BM|gH4A<Q+c`#LxgH*v@!FF4C7A%>&TFMEh_qmJfxi}Z2iwaYM5!!U1rT((ma zlqUih=)<i!^1JpuD`*5S-$%xLL^>q7#3^LjEX?F?aQt{g<t%d<ij%y}%VO8EznG{H z(yOXDW)TNzX~{hUDStB=v$P18kmzn29eJVoIEH|4`lHmoVSM;k1yj$sCr|$&6i5c1 zc$L`m(yTtpbt2g9t>=%lzZ#WL$#Kr<iD(PEh1|hfVI;e18LbmCWyAdWPt481&iPhk zVgqd%?qq(5(OJt|y*?y<&SV2>va&!sA|E+PiBc*UsXBW=x!L1CbshS8imcW^{rrjQ zY0y3%#KY8_vgmJ`@}BI~oJJc*L8Zn=ET*TX%}slau2FAL)6)w)F|(iCm-~GtG-uXn zLyS%nJ~SW)r)TzP^|<b*8<<J95V*AnyevTi#3*>wHszR*Y~EX$Oyk23+7x{a+QV)9 zZWfZSvUubobhJd4^F$gy8)m;OLS}`ZTQE80iO_9bku6x;<0j2D8xX`^Q9)B*5aR>( zOK{)OQm<O+L9dxo1<W}+^?1MP35w`T>*>dM>9_eoB*yetxAm!J7Vs4b3JDjE$ISAV zG;5)FNfma!tS?r!v7POVJG}6Mu!usx8i$LRM8A445hyiDJTO79nr195Scgi?F3!p0 z&#%gR#TbE)!|{ieEQDGKItg)lmFC91bmSH60kaknR~C6*vkRHnRrZ#fFiY=F%X^;X zxIco=DHZ`&b1Tb`Hf5azC_eUhKP7P|SXm0+pJ^A}n%Li-)WMpv%9_?ch@lEJRk>Ql zGvlDJJbJrIW(xWI3RivHt~`@CLV)A}-M+5M!tfAUT4-<XfNNPr!5@unZ8T8tj_mB0 zeilk7M6?djA+S5dsnW@3M<)pAa7K`QTD>DJs-h@iV=OmvsXoN5jiIOq5_uoE?9Oad zZhV67%{mBf?pZAc;Q@}6DT4I}PRBhifDfKlWuV(}Dqd^P`*F%&-)OE2r*6*$6Wu>6 z@RAtE(N)Z?l7!=nvJ;w=`8MgYIi_X&-JxSiLqQ-Dgj<5wRuBL$|1{?Obg9*WV1Iak z`>hRmY}e-}X!u_fcc&V5bM*|1yqtteAww)U9|eW4{_JVJi-WL~q;YX+Yab-BeK1Tu zpeEZl{cvF3e_#nYMEFlxYaiO&9XQB+eCqenzG&6)14)zDETJ_>_ZRI=3vQ|xC(g{F zwe;b%+?=(N3)KhOp2DM{fumR%5;k5E&hxB3E6^jwE(?HT`f5RNOdq2akE>H3qtsf% z0mt_Z?e*Y1j|kBQk^VUEf@rjU=DP>|qW%SV@`0L`F?49reFrkMZIVxj*I`wfuw;_* zl_&~rX{rRwZiC;u4fb#OqUqt)>1C`NN@Qwe^2Nx{*xdx)x%B=o_+{ux3;pLI5sT*8 zK5yw2AtFlMDaazL3HSASiQF+#cO@Wc2ip+;C7R{@E0R;0)o|z4jf3-PcdJO4RY~}o z1JQASr8Pwi?%ONeaD2c)3CK+O=#r0r)e5)w3XEO3=AgSmQAS84s^6M%RWX43QqG{J z@zX=m>f22_vLE~~%uhk*XQN4{js`e^EnDH=__ZP-$sVAw7h6epM<iJ!JuElxOCCdM z<7L){&0z#r@yFa4{7v_KG1dnXXxPeMd}3!F;qgwA_e>vumT*jFt_bN~G2%nN=xoR9 zLHLItb^c7}jX0O*?mESDzbz>OS~r-isp78*e*yu$b7W+jYmhK?fGoixga}=ifNls< zJJh|W>-o;h6F=3nd7CEFLczcIBgGs0h-AVS!w>@@2DT577$F9@O(|{!w)bDDGr;v$ zD|TDQ&Xz8=d#TA5<F2gnu557)Rp3y;1L}!3Z9t*xB|830Fz<~;<?%4&uE6S2{x#bT zAIL`_-Z2DJKQsJ*)VQFvc%N8vC#Uec9?lW0iTq>nqU_Vta6O*T`?`da%Y94aU!-GQ zo=NZr-iK+e2RjhqCFa9B3<1Kyp+^T4!h+N(RS3ssmRB^H+f_=W67kqyo!e7EFe)Xp zn9lF3WpElc*{#hVXygdm*BNwQS!*Q_db1TABiNr80)v$cO#g?pd!k>Xt8`&!l3Jo% zCdvA9u}6eMsn&Wdnbmyx%(TOK$!zSzx6Y`<c;K)AX>?)M|N862!TQSO=QNLjEi4?0 zf01_i9X7;x49k*PpI2F|-Plj(ig+Gwtlc`!mMW#NSw7mNi?xQ$4x698x~{g`f4rbH zZMOc@^Xl?Yx{b{vWl$e{X}NKKz4qSy*NclbE}!GM%5)Fz4p)nO!$=>@_03;jPj<#q zzT-Z8bKGdK<n);6{rlxt^ZvodY6dbXoxU}itzz@OpR@VjNDu=*!NOOAnV3__O?QjI zP0#)S?7UilpA{ZQOP?h2(Y%(pyHX%jAoW%x))2lPB|?++Rw6RAyH=vK&G1&HcI~)U zruAL)R-q5RyH<fllFlpo0c0H+SkeuA)Y$U<Zqzu+Gkny!>N{@KdD<6!H2D5S+8rVF z)fAc%zSR_7U|CQVS@*lu65Gr0)t30uar+Nxw_RQI``ztxSqw5i9eG@lyIJvH1vj)F zR~6XVPK23$kKB{aJ3UQ)Lt#{qg)XaF5SMk#RA9!BMRi|vIX0Az%FLaiiEZX9qX#qY zO;UBw-}k^p*{GfQqL-LGK1H$?p=m`gTn+tA9r9m&Gv)EzWT$s?6DOVwauLrgvgFbo zCDefSWUZ^?m9nY@SJYN)_?~-@6Kip`juO5s_UqcPHz@Sa_2AZJEeb{c5#3<^GGuQV zl*%(<=0xLvZw+Uz@?G$)m{UyA%3zsDQLP?RrdD#B!^&qq@vcm^k(CKx@Ij|~ovYt! zdbpoj`dWzI@!PDugLKSVb&;hTr^BJvMk%>ns@j$#y@hg?GJ*AmU^Th)F_wu<L;G@& zYg49O`lpvy0s)gj5thVj=KE@Txl(C<Yy<({UQ2qg9>g7GYc0mK=^I|GP2@im<u<UT z)Xy!Os|BFQ$<;i_YVFdM`?5lOP~2S^TAo*wEH|uEI2F0=WN}!VFOLTg{Oo@t9h|lB zTJ5P>!!4!MT-;5oUf6ibrI{GdoEVcx7!jEGvF@2VY^q-&Db?QZwTh*<@@BsYI<1dQ z*D9gws<dUXe@|_o6f*veVkNt^@}zrD5IfuKig4e>D#3{O*e9Fa==ZPhg6#V?AH2s2 zdgqu!)a#U?L4rxXi@Tw!=<8j6j?y4yod}Ztw6e4Cq?ROi=bvCpo+hI@Im&ajEl|`| z{{)xP?64>At!Y!!*Y`-A*~rZ&>mOYN;lThclHeAsBaV9oD3B;({^s)obk>@{J_?~$ zXjU|g-rDBdfJY-bLIqeciai#`F;V8pr#Bjt|ATgErm2`M)Iyo!!m%5=1ydA=x>pt( z*Y%m#)2ln}WI1w1CkR&^@8F5Smg2B^z0|!r<{{Sw>p@3^N@g)#TgA!VH_)R%`}75J zvB(4Olu+SVCNkaFm)knY<t+A`rAjJ5HlkGh_zCg1ttg{+J{pbFOlcNstY&$7*?s%0 z4LT>SX5aL3MpzC7!b~;o*z|KNFab|z!yy4uPx59n97Jkg&p10Q<b4`F6dhR8^77Fy z_)P04Hu+lHx2nD1iz2(^(wcVQJN=@I3P-6g;?IK*Ns52<J3jkLaq|4lU;Pp^Rt{Nw ziP=bU($de06I|%%|HH~_#_U8#1E2u_AWQ%nCg%UYA1I@nqY(nw9>4qnfYzeH-efi8 zcLw0FKwcD&_(2{Rr?R{l0dNf9)#QB=k&rhz8q80{ZV)%{;S&hMS&&Xh4FC-3^T8r) z^J84ICn5J`gIbd+fTy#bS5X+rMaQ3=9FRZO(Mb}9bpoedRe&w$&E8oTeQ)y-Bl}Zf zo|Q_yp}f$iqUUCB&)yBCs{zT!I`JR=2%HddNVZa95AHZU*)&D$ZsSB^Ll02xd{n87 z3o+AF%ENfBhBYK>jUS6sLl>sAp2$T~JQNwCmU)&MOvl>Zn15nAUjlo2zNHIpKa1{l zJzD0yv+NfHATXR*e~TRXfA}m2w9+j0P1tNQZ}{7*DK^e%rBB$2-iHAT`9vZA{x3ut z2Kx`1As_k<fEkeT|2(9YQiYhaziOK7*9>iLI1Da}s@{VD8T$8v@@yXElQFEDL{wMk zTkl1O)r$&pA-OC7jCYnj=pfVH+$WEx6{F7%wWbUQ&SdddQy8gbe&9K|%hIf6uYGfC zL-u8{%%VAHsYc|?B;CHRh!xl9+$`34?42R<f~LQ~&Pu6}TW6Obi#XMxVBH%~fRGNm z;pK!B2?PROjPK)?urUkSeL{$jsOIeU$fs^nOH;3PeJsJDCXGe3eOYO-ohs7mdwag# z?fYeGrmySr^WeW}hSz(@bncfQ`g?AVX3I5-wFi2?e)$*8aG>w|<@QK|Im7dJ{XcGx z7wTVr-1^q{{c5K#`T2wN!Oy!(j6u)h=8)gt*Zx_T^r7ozNb7)aNk|K4&dW&LZ{PDG zLGt(8QAAu~jA6Ie>^tW4Z@S5&(S^i};nYQxHn9NUe+2#!nlnHTkn~^Y-HQR7&V2$L zfJ&7M><m9bBh~$KbWnwc03nwRWNZ0E3e_AuJdIU7D~(;ZNVrFcRU=d2WnM_c;RjBH zn6JMb>wy|Mk4Y5(U&4Sxr(7|G+_H{z>UmzZ$w@(c`ciJO!oTQ|uH_uMF%D?VnRTWq z#(i~`eIn}bg`N*eNJpMFY$iDlw{6yoqTc(N?&jU;eQUDhH~GQ!fqLvSf&X)+6cINu z-dTZnA(J;sIJgwvvgY{acpcXO=Fd#eYV~r2mg<AdPo~_aDYAs#wsxQfR_|a8CrmGi z3|B-9M-|K~*Ui}Ox*C%5n!o-rFQ8;iSEQ;2vw3sRn)dWRV3^TxuzKwbpSUire1?6; zu<O1ZW)HqThc;7Zx;H#<^JFAeuRED+-!hPgfslrzzX!i>;hq5W7`*Spqb!`-$B1!* zcT*i{SifY>f#9irWJ)p+8II(rZ-&RZ0h7|%hEzWh-!~Y3`<2^19na{7#&bfvhT}=L zj%<{FMgzBW=pZ1gq~LHYI|Q>L5}WNQUF}?SFE5Tk`T-e|Cb*Yw6&0pCn9c;f7`*-X z?6>ByDw~-LrmfSIJy}VtY-TvYv!A~g@O8HLfghZl-vtceypOxVAXK;T211J$<Lt;) zQ;lN$LTjC2QZ4=2NyO@bb3kaKfeUAL#Whw|-Yn_E93BP+hc${UL?8kuI%{jK&PMkb zV~UP-V`nV*W?N#Cvxf4uUE2HJ(~sPOvn3c3myEt+v^iq+_Rr%Q$(rhQDfOcuN>W5| zoOZJ9=PX;jVuaK(m3Ehp^vHzf=Mr!tQzEA;?=do%pX-TofU5PZB9ZRm)d-=;el!J! zF<Q(p@BsB?2%v~1YxzC8Ar(oLYO%su1|M$V$W<K%F{j%R^G{@nO8T^OJdu1dBlZ34 z_M<E|@7=5-h5Ox{DtqJIyynyMy9J%ct?Y{i#_nI2OdK1(E?Wege_gTqhaPE{?fz}e zsk-soC%3NiZ|hzYyx%wcR@}dD1|Btj-wOF2aQ^)>44d!q$)WJL-+{9?-R~woy|~{) zsPO&R&oK7*@kozs`muKDchPfX6UG;GWSznnbOOlHmRK#xe<5+w^qxNWxHjy?H_6UO zZPAPB%c5VWwznRAmjl=jk{3hu^u4Ep!80MZmbe6c7cZZsgna$Te;M@nZrJ}KxgMce z0)+oNL4asgTcEVeSR`B)$QJA25Z0g)w5##bu>|~wO8xNGa+Qb&n4P}hcDY)@AK-7o ziR%iD=)b@k(tzE{nQ%e-zxT>Fhf@VY_T8>03oJUh{DE0K@kC1%<*H+7yHC_exvKCB z57Q?N4{>S@8f`3VI$c+YPO5Aq?0v~f#O-!bg&K#b<tEt1(68?)FY~!y9D|E6;7h}` zi87oorgKQj`zW+)ELbr>M1vv3Pqu!?5fu;P7|&SyfioX(<dp=2o({sKOoVzkb$2VZ z9JFhE^JT`IKGYdv8K?e;I_<jNt1oCf^k=1xL{n$8oJ^eLy7^KglZsa46?pw+yzu8k zBo+w7%-^`FRc!E6^8WK$7x&#?`o9%n!x@0TY$R)$;yK;MFMU3F8xw|pEscm1d$A}w z!JCMfn+{6{<&^m2&c&jbWKGx<iRvxphv+J=2r-z8w1$yn#(;=**bbQ(gLi$7{G%rB zn~bt2jJBwA%H<%`*wU}&fK<7r*v#SURAPjoRZeJVTn#K;DE8bE8+Alw96FNHYC~=> zP4n+Eop*zxxP9hi^bLT?Jg)`CnJv(Qh6@%RI!wE!Q$YkcyM&kHi3)qG(-PR(lo!-m z%|>xl)m$GIVSGEOmW3(D0f^)YQ)4(hhN)P%yrHmhTHlO3U?qj<Yv(F+*-crbXXRKb zpuivph9bu=*#3gc3bok@&SJurtuoLwrRA<c+&C08ti~g~M~Kb0Uro%{R0UUT^>T34 zTF5GRSCy1j62;_2csNUsAJ-M<s!zJtcn`PjfUyl^WkJ;$=p)#FhOHtvs@<*~yvK$U z*y<;9$HCk!EzZ=;p71tseMbRtQQx+``MD>-li%K%4D4<N6LwX2<&zFfH8)epT&Y>7 z^Am^L8L=<p`JUOmnN*IC&!XRK5t)CjtS3&@<Fm-GMOlxTi&GG8Kw!`*Yy5m*-vp8y z_i6$i>p!y3`eVd%0~r3DeL$per;?#a5cZ8}YD?+R8y{MAQV@n*x+FkAoAmy9L3|QE z4jj|@su(|j3y2WrXgg33!*~;DA>MMJnkHcTMni4ka3)FIHb}T-zIrN74jZ{zOI$Hm z3`vIs3NAjju|Qp|Gzmjms7$(Isd{%^!&<wOv3+5NCv3e7Lpu<Qo80<SpCh)5JMQ;$ zxZg{`!nOp8<{|Eo&*(ncAB&&8ac>G#Q>|)yWEW53?T^AQqe%o!ClP3hLJZ2FXSFY8 zdOJ_U%P0qEtYqnVx;9{h*Yk(M>`^rlkL+Tp?k%<U9?tM_D;Tki@u9%5!FMa`5%kWV zkyxrgW`2)NrC$_o8$Z8xOg!L_*o;m+?LwA4r`Gt^zZO{|5O?dNG+AJthzL&%yA`qf z9Eu$$G)e1gF$6M6%oxXJj}(c5bE?h)G^_`$hmirrn!_qI>K#LH4#?bNjxhiXf@3i( z0fU^?Q6K<US>Q30?T*ndp2Y>{ZkMa7BOJ(OPZxy-s4wwBc@7uuV!e`MBE<&e0%muU zuq)@70p_H$nB2ltq+kFR)=pWtJUWy)*B<O=pJiT0G(_c{)}hWp0IFb<XUD^22T%&9 zRu|xa7I(87gnLmXKtnYW&QSCcHXfQus8f+QOWi>pjYyD_sTc6aK`DvaCx>*L|BQ$K z59{-S$I#LTaQs(jJ&Nf+q4g-H99NK$SVCrXyFkb3(FDpT^eltAkA)4Pcs!<B+rDfn zomSl)+-Dz^O>Ev9rKVr{=vDX<_s8k8<)^g6Vou?3!h&(bSf?9h?B8fI*nJuR~pS zonw>PSe*#>O0)S$5ZQVs&*~Gsivnt}6C}6G4p2gb!K#tL<9~fP7M$I@^)46#gZ_6{ z%jc2sb}6}XQ4Xj~qKw+#QFT;0k4cN>WJB)l;dHTN<TuTr4(GWVg?he5%A{HGMD5bN zr1&MO>4N`NNQyh6F=tG(8>o9?KNgZdZg?CK7$SUh9Iz+41+Fi*IMn^mXY2JJy7*>s zFV2qxR8EW!;{uLM`&+;g?`mWZdPeSr4(oLfjYjN%$zcPTXxc0@O4rXN;s=h_VZ%f! zpS|l#gl648ThFOKd*=tzhBe;bFhmd#cUzGD{XO`B<ift2CMq}jDWeZ&?!+3yPee{` zSYt@LIh9F<by;{4sE3AC_AqPg83rXIBq7jR4#!cIn9ACllo)gT^)|el2A2DEk0E(8 zibOjZox1$F*q{Eiwa4-(@}ne6ge_h=#%~0KbQn3WEh!hVpe?p}Y|G>am_~x-y4;O` zG9GVEn91+&C$OHSzGc!b$+ro&rAl$g({`{g5gV+12KSxf_P3rp$p3x(K>4{0yataZ z`<;_x&g~&{%E0=QWinbuP98-iQ}k|Rt))O@{$p)53i^@lLJQ57%0^k$Ro<MQrq)B+ z!HARGf<wclp(ziPTwR{_i6FxAC&qa#zthMr>5pSEkHk6N#TwY=6**t!`!Y4Y)>5Ch z7Yv6%>TW%z$4~eNcHuiCPg!<@I4JSfs9B!92s&lU!AxJTf~~>VJ-A10yxZ!T{-!2F z?=?eCaZcc=sxaz9E{pfzSAA!afA01^O8&iOZ>s!BIr9A3$>Is_v-@Kb&VuJEg}H*8 zSGKpc%oXX%JSQDbzK-Mlsi&!VuUp2m{_Jm#oyQMNJh<eK`#l1gpz{avEqQuLV~?O7 zCA5#V6a@%&CRRT}41A^Tqo)(NIE|K6Xe33sI~bHu0-kCI5(PYomgAB%S@w#zhsUo2 z#DtZEM+O1L8$_=Y`e%9(_D8Kvg#kYXeN=D)0=?_Rgpap31E_Yf#@}MgMUUGD8G8Qt zy6V_GVDr#_6G*gHz@_>4T4(GZ8y8)cF$2e3`y~UbK(q&wyS`#FN<%wlOhS1MMjU1U zECw$bN>=NK#T!6~bw}tEuVjjpM-PVrSU_@MZ7(Q!A{5A+6Q?#EP5?t-GO!K7xdW}E zs-Z|XzqFwQsVmYPD@-<)Cpa=4;dm{nGkR7L@%nIi(HcS}Jbe2c9GnXscCxe&D*tC@ zz$}^%fDAzRs43on_i>Llf<~?~=A)*7WNC&>b|}>?I1-IWc>rdi`AC6Hx(Jh>-WePo zP?$e>D2e6%e3B#<a|&*79KAG5v0KDbkV}}T6>~!z^Q6jihsuDPJ;F58V0W$x&sE;C z+s|c~-6_XxvyKp-+RUu+FCOTB%EZyfmW>fW{ol$4szPNlV>iPXpR|;Y#6pUt<`{Kt z2;y|x6vL6N)=F`t>_!FX09-WyjU)t<v&~*3leRp>kLqSJIYU7D!Yh|`{{uptxoxBN zd17)Nab!?~S}KDirxHhuRIS0TcIr<UoJ4`S0#b?5-jcCOFi7C8C%-!#M<6TaXH%r; zoY}auY!2uRcZWCau7nHCi=$uJUCO@pF3z}Kxr*)9!dQ<uV0YLPctg-h1}teV-A}$0 z{T7YwU7zBK(P-rXa#$Ml_*~`{o=>nF=VwFPL>~w=bPU^V0WF&6+e&bZ06K0v&8=LM zO%48XueWwtSAJ|h>iDbE{Vn{3i8oEi&1EpT!0!8(*n3I?8Ioo5^|8l!wts#A{?GpB z|7{xj=jaCj(EmRAK;SeLKNdj|74n~>e@rR`s;y;Xk4eR)Ag9tcBiU3YXu7SnVltgW zzfL#~Ybqm)&-&dc`gY|YC%5nE#-uO%bg``YH(K?MnmM>!`mhwLqgFpdjYcVs_^x)T z-h=^|G~Ya(Ui+*)o^IXm%VSIYPR~;PZR2`@`JX>l-xV8Yy8>@Lcrb*go&l6cm(JnQ zX<H+3#v2USrDa9dcA}srwo*=mKc%(OFE(upiN_))fWA=M&vBt#zy6<k<-gpC{8z#z z4b)YxrflF5hFy;VFb<%gIj+m1ylLj&?nLvu==f5ZoTQ(E8H}FWq+TS(N)PGU|8ghF zMb5rc!uZ38Z*>))zkm1VR~^j@>?^(mnT&fZj&0bqpdBrFSOqgk1~8vBO)*8pu@i;G zxBOfp6~wY;LsUsLr3e8-Wg$~N3YriOwlaL*Qyl?Zsn)qYdCIej@g%{yNy-?hmF`*f zsNK<YFoZiOrbt4DdW}kt_{Rto-p0yo13>RD-<RM^>>edX$J4EF`()9s$SpAJkPHap z;QSy)3Y-7n>-g7tm$2QWhdN6fR*sLDbxv2$->EP%$j}EP5}hyhBOD|zO7x#IUBDwD z93|WLYe^e0CJo0=e!bOV7qsQI&bc3$%E@jLv$VL-JA^cz7HU0|*XGr_E1bkvyV!o@ zNn|TeY7}$PPr(&yz(Cd4PWIM1<x1GpR*XmGsXD&>Af#O{k}T@v(hj;(a?y)-;&8e1 z`{C?dl*w$9W%M|8Nn+Yd2!Qan;i!upj?%!gcP-jIvMjnusKs}C2eGoykqHVyBJppv zxzOxRYzi(`&70nxFYl=hGx1GBhQUuXy|NCCroF-6WNG<JB4qZ>)$6o+6diZ;Ue~zX zf(FN`m3P<hpEkU;d7jnSy?6Ox1&r@G_xEr3<Jx(zbPa$-KWDP&_m;JIQMReq!YgH# zzpz*M4_&U|jU^;^vrdQUzJoS2jqOcs-54qF&D&2aHzb=M(ythd_;GYeZwf2yBs4Hf z?umEe1ASdi`a=mm?h^i1d3upC6+KSc;gcd=v^|RwaX)m!sx0Y#T=VACM#7dC{H7{t zV8=?WqN&L5&2z^M!YOXa8>jT!Rkims+J|)n`PEI@`?KIyi^#1W$>oq%MM%qnjAY5L z*{vI$`hya&O!U=)Mi<8mH!}%LPu_;pTK;A&hz$9I=dc^zWl$6T$K=Mun{tL+2@F|j zZ!Y5sjOax4Dty;tP1~{sLoN%#XVNntv6`obvf5U-0^L4p{dFDtF?vnN50hi9<4n3o zIX;oWpHW%k(&`y!OYY)K(JY{`%y&3W4z5tAdEyo;`T!b_o}9eEl{p=6(c6YtA2gBG zs!!lgu_TK{3xt}`Z1GrZGY4A5p=0^k<XZ@^y`ENh^~OiHI*o1g+2)sEX;Up{;uZPj zkjH7)a%0JE!FWciNtHO4%<);$<Yw0MXmj5Q9tR=<J}|zGp=6Sz33m4@cq78{W}B{g zEPC&UON{j=>*2TlNS>r5_&37!FELQ*QZ0NBzIz3+4z&25%=$<#JJnZK%hY_KlgWiQ zD;anWDNo`OaCcUjCVPc(-J#b6-w{MVqySpBK5lMn^U9YsqtT{T&lUZ^7S-J>OcW;^ zRBGHSPhXKkf&y)F{pOX0mes1gLQ1Wi^2Ug5a2`_VUqpud!nEKE*roPQoJ}_Fn~+{^ zRek;gLDM$7a3r-;>EQ3;)2^vf-kq9gH$6{xgP2GfP9^Y<8h>)Jsv^-blpK5(Sz07% z?6^Th;0LuO|L$c;(uoF<&g6C{+SC^_BT5ctu_ad;%agP^9SS|OHU0!rksNL%DDroy zyjWf0X_n9_RIC<0zR`TD9na^`Bl~78initr4)r{(cJec~RToWECt0JP60&`GUv)ts zvglBlS~^>ez?dcJ#f&OXrJ?TqXu;Pxl<GH=VZuZXNDtpp1*d_l>o96{%72_z96{o+ zM9MfPMqV05*SH-sY;sg1DkAN+>tvq5u*jD4RzKwxxBCOQ(2vr->p;-mgOi138;tBy z!QuAKp0ZeBq5z<w{ZH2Z-{zG64?pNba|7@IsQxQGxsg_u4F0R<K@wVLys<B$bW?5J z9p-qLw@;<4WXwt-S5UtG9=S=9jQgx^lsIj71WkFgumJ8=iORxz3As=8aG1ywmD^RM z#7TIMrWyt(!C;+#9&XQ(X)4~SSze0%{*OYu!T5lAYa1ip3Vv~Siv1wf2n9rzvfy*s z)n5GF*u3Hhqz>~tSmTo?)I4;AN{L~!cXu8%HJ_TsZ@L-sV{9eBry@)Hh@ReyX_Hq_ zAK;gugk$kG<(|4!OH1stLk06{Tr0X(rPX4cx58NVEN*?|Zd-R1F4FQ{*n^$|H%jTV z!29j^H*T31R_~*%-Z1?B204i)k@U2D=pl}bfta4(RXzbyYPe)N|JX6lzry2+-NZ*m zMrW8OQcA!Xi2(Xo_6r8M;jQrsS9pV3MAHHSgJc1ur5Gwe2V|Q3H}O#do`4LmSPIoR zg-A-Ev(vWxJMsOG+y^Hxh~8|@N@~2EV8yl^7L~0v(Q`$cc#4rxuQXW(rSQEN8t@$^ zHE#SK3jnR?Zl6vN@FPmr)bHdV`{nLF7GTfN`jAK-<ULAe1w(^TSQQXeQ}`6g9ThkN ztf~tDCE-9`Tyz+Us~XOP;)KUD#jzyv1bybJ$CKcAtoXsTCFodSm_Ml0hd~}*w0jbP z$Z|QY&9hM=s%xk_J*{dO#X{98{b%%<qNxB90aE`J8Brp&P^efU=0Dcr{}e7t@rhUV zyBJRMV<}LDcv|s!=JGcul$~f9h>EFf0b9M_jtUz%xnjPjEGM3WDV|)Qv&X{ac(_Pr ztX9D4v2e*z4MnHB>ZmhJ(8Wdqf;#J0Vob67bAEQ78NR`oucPZ*Y*??lT0}|9eJc&` z0MxwO4Aw2O=wa@bp!F&VkHE*jxv}J#YqpTRxcTwxySCB@TI^FdWI;~rQA{#_!Ik(C z{|H*%6VK%h*~_CbvOs|BzdT0gp3TZrvmFNrxK7L_+Tj+hs+p=Q5F3z3V~q#o(49Bm zfdT79BIQQoUwz&8{4w+(L^_Jd-Uxi|n3eVkw`?hDi2o3qLycH!cAiP{!mG3VNiAC7 zYQRk<Ya$xA4jO<j5#g;7glkz%6<}B~ZWfN>jEbcf-N2f2@N9_y1=m~WSWo~7WlLm< z9lF*)g}KM3xSYhW4TV+vYS}~~zPIx6q(m{B$&Fu~_O1HqdR76H4K)?1*V3E^83tS| z2AL|vUaVOb{*RI2Q7E6lQ4Q)qan{3rnC1d1oU8J@#yO8v>H$L7RDp-JM@1puPL7IU z=n~k_22C6gLt;qTaap41>2WzinX9%U(aWGFt$un4$ywufdQx2y!*yCyk!5zunK;dO zz-1Q_f#PZzf8hGk(6Q|DrLlWA9>s2_xprFL1LQty8M#o8$yfiYe%3ZE<jT{g!nJ<Z zvAF!RA!EMD21Tii1VoWG<V0ZNw<I#jQxDF&cu+6xN}%wyTH4}U-}QoBIpsL4B8im^ zU=e%<A%p6ivKx&2jWrb!Xuap3>byu=rl+_&l(}5vsX_f{++3CY*6M_8EfHYmmOQ3O zcHgU^O)i3LA0X37*8Dh)({K=&!EOVMr;hf0gF8(?;ygNO^L#?%KzRe<O+%Fq(alK1 z=p!4P*?<tOuh!xU9h--AR-xOQR_7HaFdH2M+b{qInlgJ?g2tU-Fo=fDB}~|iBw<Jb zbDKVW(DiL#cs6jwSxP%Q!gU{m@WOI=SpZ-%4J#C5VhiB9Td6f5L=T87_qj$>)Cg(V zs^{^M?bno?c?#4jA)eSPd<PN#QhyaX#OWd><4Fq|?B^v^9JG=jZn*p-z%%-^Rj~Q% zJ8E%m>})(C?s5x2G-s(4;0bp&6aies=<>S82yUML^PL+8h$0pUfugPtgHxmy%k($O z+wSEN9+POz$$Xar3Q8RGD^HIs2VeD)SfLXl#Sx+M*2iXaqb9)KgQN?!_h~Dv5ZOpI zrzw1CPyr^EDu5cVAv9s3Xb&0?PG4d}DxhOQi;RiapoC)nU0>hVY>i%!yELQh$VMKL zUo!(Kq3BwGoNcoSNfzNj0JIxpJ#iKW<|uhp1y{hL9t03plv)T_0kD|}qX<~|Z9>fD zFsQ9CmM3xHlWi;G%Hy$`A$9(<3NOC>)QOiY*tIGY!h#wBrRAu3jA{UwP!v1=@#HB9 ztfjmmk$m*eW?e|@LJ{jzwuS*Y{-C)9!!53p28~fGd;ENI+H%$j`%t0G#j=Vt;W1AA zwVSN&QPw(xuN4xEE_#D_RRXc5obpts+TrR|LfJjja+WTJ&hb_92&I{)1Cv^Fc+0}; z9a^qF3whu27oJW`5}IV{8;RlkN4xxw^l_lc|CjVlD_-f>io^bI()X{P?VlS?mG~U_ z_}{8+|L)l=CiNKE06A>Y1&ZyJGx?9ww^8c@`-mp>Xaqj?Y$y!XbZX0gdbTpmGIiER z>3i(iM6?U@9;L6@s7oD7<88xQflW`5<<#58<qq4;$6FQS5;iF{%E4%{ESJsqup}4i zhFYahu{LP;_|x63TEmgAX&pcTt$R~BYV!0JjMu{`?<WcL(%wphfV>(5XhBrHeYn26 zg*cNU@5y>M#mzPv6lWg|`^CssknA_2^`7+f@mZVp@L6y*dMa0N{mqv$9O2jv@j8WC zl`55o&T!hkAA^md<;%i=pI0^QW7yx{yp!2u0qgfYXv!kpXl`*FKf_)*x5)>Ggez}H zz_0`XKoHw8RU~O|CZ-qZx#3Ps`D=D)EY#-fMl55N2}LMdRn2ZZ&mpEkf<RHUb)xXH z(_WI;;XN5|*%ikuXGcNV9zw2>iI5A-sJ5S`DSEP>uA}^q^cguHWSThC9{gMStYSD1 zb9CC6ra6Z}k%<BcvZ;r8!--5|0uv_aV|kSprH*77H77@Tu)n!g0yQA&<I)(m_~Wv8 zQPgpH@?$;}sHd#0%tex(R<jy*2u{$#q3xOk&Sq&qp<at{q=2{jbybBk`2+Z*p=I91 zwXu5(%r4Ym5`R!q-`}fBln5ABE%uq`RG}V0PCnj(JaTe*x{33?boScRyT64K*Hsn| zL0r^GBI|lIiTpmrO>?NgcCe^klz1lyG|ap3cC8;KT)s;MkD$6-WBMHOo8L-I^H#kz z6R2+)M_rEmRG#Lqe{jI@=-I0>y{rj^hB)#Y3*@u$I-?WU39z--P0>+La9vLkPFQ@& zqVW8LIpUhU8;<M6(^tjkLAw(Lrf;!EQBIRb`sLM1dE*v*Ctkn=G|QMx6DKczIa>Gu zY*#GS`>5Ah>}`hDUTTeNcHN9d02V3f+TWIkh$Eym1%0}&lo&ksAG}<qkOG=-JBROv zf!j$z16*sPA%9wSk(9||B@;Z}_iN$A=?Xlt^BZqVzHYTC;)@#y@((yCrztSqYWr#~ zyAJQF4h?TG_2oKmm35xMr!HO<+okMcFg9-q1(y$tq2tyM@U(VcL{dK-3YN<XCY&KL zxduvFbfmilR+(*o^N!vF;y(fO&4MB6PS2liw$KK>qJ9G*3Ea`x2dF@-LB4pj8Xzl3 zP)pUgE;`kVh2qa?jCeD=rC<U(j3>V<dT22Ti5}XmARAE}O9v?yGZ^bDEv4^&ACwUN zCE5OavH$+hK}sZ~VHiDH7mT%4`^a@JUS95a%WZiU>IqvQez5S0qMiPtljn<hg!IP~ z=Lt8fOThZ-BO7OPTn0?eQR2)4#6N_}1ps+~w5tOAORQxsE5}3qF}eyatVE8&6*fJ2 zu^?(bMxs1d^dixKL<6^`a342jXuH3J9px<IcRrBGF+hZ`EIIbXc8qsR;3<W`Fp)U4 zkZ4MTV+O6+0vM9FGB1G3u7~TXaTR@NGuJIFwo4vGY0JMamN0IAZdloE3+AU_XMnqF zJ?tIi9p@xkj1Rj`C>-)`3q;xOyWzA`?v+G6#l`$qO7Kg8eA$Gx(>!@M&hXaa+(S@} z!YR$e5K7O!AguAzTPV(%+Wz3!vCjYxjr3ro8tajdGAO({|7HlWSA4^X=ZYM1t2K{U z=9&Pypm9Y_a4-Pya;ko~kN9{}j}i7S&qhHMd_C_YIDNK3c9c&_3lu68{wykRFMaec zhDG8^=|mQ0mKoO|YqfQ~J4h}_$tr8)s7=rosVUv@0J2f%Syy9*Z*Sb&&(awSt3@RB z>V017=pQsxv)Ku^=7yKq(%K468ET2(FSHy9MhPYu$m&Dr?2m;cKlKZfE?^rxspWHq z8{e5Wn7_<1heQZ+&r}WtSBlZ<Pa#zRMY_Hm(?<`3I5Gg?Yg|18OG<>QQu7-UHx^bJ zp(e)J>bce|eOxD!(Qj+0)VuQEPn;b^C}Jib=G9(>GBxrn3Qsj)`QglBWQbv8vMKME zQ2ycC_~kPjl_r|(p|R?AK(G2Vpy<w}vfZi}UA^nwCb4!?r46vYZ{*Vw!UOu78fqJ! z#Cn$E5n5IR_*1o{2g-T_Kl5<X*wJ`axH6FZYrzX&iF-&ZlDtD~w}e<~K(}Ql$b-b( z_|JFLQ$}0r{g8?hROWzfL+cw7;7d66m{h|OB)OA0ciUlSr`5ju#ZrgYnc1N+kNxHN z+Aorlv)DcQh58BD>9th5<1@N|Or+djZ-l4R4(r1`QbJoO{aj@N=dk;QY!gHB(&!%B zQQ(xuyX&lXsrW+aJ=0F2zIiKd4kC_`E;CMt%KXHscp~dRW<1}u7v17Hie0XKTw7IU zu=75Yrl6jI%XH+gY&bsgjH5#&cT})zov54V&0lqQR6Q+B)~>c)D2WjUNYS0@<@e58 zNOacm;=>I4elE2nf2|r|`C_*IbGiFnr~Lmb_w@kH7f=8o|94&nz{VWO8q6CObHtEW zdLW~LoV#u;*EtXszj{R}GSyloxxwW6TJ^?uGM!Do%%Zl9bt;?Bx|LY$%1F*cY$*dE zuc%6Glr7N`Q3)Jt)O}jAop?KIuaX;5FkHaZ$+c8(B;Hh~HfyC#sNQ6uhB3uhZ|LHG z2S&vbl_;?innvf5)o=C&UY6laUR7y|FnEdLwSqGhjl30C?^^?7HX<8r;-@uCJrAb% zdw#OIL>Nt!bm@@slHUm;>ln+;UL^H=b(wh)2mEFtv8z}i4aw`pz|G8O>(WeemdDMi zWJ>jpx0~7M^sQ^j<mS<CJ&WXr#p}_I?TvyUj6X9T<ZTR$)94lU{Ji$XMU)KSUh2^z zI54%tyS493>+=~Whb)h47!-iI9aOLI9*00EJo~*hUWpCOK^d$1ci>h8LHoHrbvW=( zG#GkzDCPPg^fJww2FwJ`WR~x=DphwoyK<b=CRS<<ch^9u5Tx6N0q!-1&{U8E;R0$( zg!Ep~McWa-luaYGO-1PD>Zwi+&BumfD32SzVrGge&qU2|6sIeq3oxm*Y?u&od6vxE zMM^*viJ7CK0%y4rkDW^4o_A<S8olEfWHdL>#oDe$v&=U7Ob!VzQ!uQt4Pi4yflR@> z9aV9HqHw1gGUDCJN>3}WBSZRI%7U`%=!a7dIK$FvW?7Y<Fpj_Hoe+!CKtI}G478Do z)|9)=8o_CZcUQ~lMv7fsjU2!KoI)cnnGq+#THTlub`h)3&`*b3!(3{5zo*jx;-=L0 zDw>+5S$Fxhm;?(Env4j^nZJmD?Q^F442+3iz4c<EK8sF-3N5mGAw??VLK=@jT%pLg zg*aL|?wl|y8x$f;At-1kV`zC%Bcp1+*QOz50FR1`6rHLd5hV9Zu#L_;8i%<c2OT>S zSABJg%Y@C6YhHbVikK_3NDn2OE1-u`{wqg%+#s8$$Dob-Ky4d5>!4AVlfI9d>!3fX zre$W&uX6virJQihBG>!N*^4RVL2Ev##cmjz!Op<CdxseEIC<owDmbwlGN?O7lcJG4 zPU|HGL9)!&O^)lF+H`{(X;dVH!tTcK&h@Rc3a)2L9ADe4F^%`?o(rXLt9$X$eDQ8% z7cbkRc$tH~6S@qJK~0K1cSBJme){dku=sk(r&2VyqXmwtl5|s97J39B*<r1Rq>w=} zu6j?3Xx+>938?Jb9DJ5^y~(}_F>sLy-HSZLn_-pwj^ecJ=huxdo2xK6;CtNJVb{&H zjI`<$+{^(Rys`P1LcaP)s@Blm$tTW{MYdzs9&<&kEhA>_+H&uYIZ@VncrV-Jr5P(E zxb9M|etLnWcQ64jB^KV+<p~QUt0I`VgyR4VqoZsR*Ks<DHYB|Mgq&vA@g~zYBxDt1 zd_k>o^+;vmQ4VE*;z**CR5|rRj<QhQT#}8HtxyzWg5W2jWLJZ7x^iz7$u_~1z<pc# z8Tf>oa3oE;Y7G4hhw9V6t%;sz%#44;kdo-zbUD)%Y)>aAwS#=pue$fyRn$;=c{dp~ znyj2yWhkTGo6MHPN**mW65S7vEy;8xpQTzl>_3LJ{w-gm|CX-?n<eE%Sp#!<XoLuY ztQH%t$yhq%vQ&x7ZlV~tfXJLkfl4<KFR}f1ThUfIm01q}-I;im)bfJeez(kF%F+Vh zevE=cTuU)*^_sQeP}Bi3jlW#IP`$HG1;F6iCQlg-CuT)wQ2xJKd+WcbqW)iW4-7Lj zLkWt6(g=t_*Qj)N$Iy*PH#0OygNihYfJk>UbV>*Ul0!&$r*nDEb6@9v@A>)s345=- z*81#s=9%N@WZ>Ig95jS7k-Yh+TJoRYiY=uyi2l5m-n-vLLiCSSz&ZJ-Xqt#uh?b(~ z&hxzq%vA<Td{1BFzZH+BHV~M=9f(;<N>OS&nTRtue|&XuUd35iu3?-?0K}RA;s}sS zvfuB=Ige%28B`v!T9tfylY}!WYp$>J9`O=`z7ti@S}B@Egej18Vbnl5SYMwa_sfzM z%`Xb72F?8|KI)IJQZ^~M6Mg`Puc`xYm#+gnR#W|WKrRZh47sjZ+E8b_H2H#@BaB5M z(-D*XVVEV;<52%2L=Z=}I|b0uBABbR5vKLX*6V(RdGOA&voEsbIwuUly2?U-%sEOU znEhEQITWPsE$glL75HnIy&(@g>SwWGsmE}B&e34i`N462$^L@#JByC|m&Xb*jJeCK zpSGQ93_e=(%3Gvbm|Nu}Sw!dMeV}mWx6X7*>t_wrkNUzA^q%BTZme;fcV2w)oi>f# zGDi1N>}He~j0<|Jzn1+kSJy81i$8~5nnFja-RGq6t?%Kf&VQHS%-^uOX4bhC&wE+2 z5gqa$bX<ewzX#&cB}XLV;lsZhYBvmUKF_@q?0hZ#wP-G}M({OyM?d|soSpd(Hm~_g z^UpPQ_Om7M+gOn-?~GbP3agldX9R2ke9!w^PNRLIId0CbSsq{S4Zbb?0v3x3%eQnL zVDSeYe^>gIpKh&LSk(8;`%h&=Y3)?7oZOp_&f9hcoJrG+X}iu>4016;W8q3J02~7F z)|nmu6zp8W8y4L6e{o+R8Fcb6W@yW_F*2O4qHapyb}Vs@tv=!Nd!AUrN7NC9&OICI z4!PsSxmruPPf*_4`FbUV`5Aw|Tt2I{JGOa-Tn~RzBmd;=)88rk{eOPHCmj_V6ROKp z3=U@=6rD#YE?Ye}tqu9IRZzUiBWnANy7c@^)-EXc`EQ{w=d3-{_vaVc)6440<}^YW zD6_0P<UR*`IS>0-vVZBIkD&;UTMS*f45TQIBFp=_%K0<(tLgr|A4z^gZGMd0<GLe+ zr&EUU;-_=EiveeiB}D(u=Rc{oo~^lM-(GEHFN$-;IqnBs?M{vSyE&?Avv~POikT9) zInGwXxsb#mEe`^eazJ0nV=Y;}BJru10CGJvA%j{l_#_)bo*Ii)Rtu(aM7&5#gp>O6 zg%IXpppPQksZB;h_+oO2ZR9$!Ei3f=L%F10eVq(f2N8V#lbHYSkwE$XPBePbYm{6- zel;B4ZO>FB1Uv`jnB$;dL70U&<U;KKb0oa_awYZuI}&j4e7U`0$a}zZOMEHnEl>y3 zvu6N|^#Jq*#Vz~MzrXtXc!8SuV^&+(BLIvO)+~&tzC8Q`SQ|p&=a^|EsgD;KZ@Y6T zqX_9UD<h**RDoAYIWstzP*Z@FyH;zUwtT6R&8}3zmVC1l9IB*FPRssk=zGZ6<AtGy z@3Tb$G=asO<hE~smykgIUzVlhoW-O)v?UEyyR+<)cW~U;N;_DVJ=^46PB6R-SR1(M zntJCnH~My4Ci=d1Z=AKR{?k*oaV{Mu&?vTpcl`YL6I8Gue(&<@vUX~XA=!ONK?Pvl zc(QH8y=~z3->Gc2UpD@|B#-0nsdRaFel`lO3~mq1D<T0;`T(kEON{(|g|OVP-%cB| z;jvNpi^2Rnv<xWvt8gZN+An#JW4?YkXN-v>nAQk*F$rY~npx7zjbK#91DFe#>XVc3 z1?<d{sRZO61sCuIf3|-zBgbqmVShp8aYeF0&Lrz<zV_KV@XOlWe_R4vI-YCCTDq%& zzK-{&OB$xc^IPwnM9@{lW3ALgc?e+15^eimkTs5%Ycv;$WMBJ;bnUT7^xKoORd`xS zWm+JO!}&GtOAmf>z!T32*6b(2$yXG{Tq2Q6F&g^pUqZH(^}haSIE`j42-X(N4lgbG z$WZ$AcQtGA&WALO9J8wid&4{xQTsQ=F56D}i=ITh_4Cn&&JC++>Aa2WwSIf`YmI}> z^@o#Bo;DxVrt`L5w9>uR2c(!2&>%8Lmv(&0VwWsvFI6m>NYtONomlqayR3Vv83$-G z#pY)nv<^4Vx|xZnVE-Q#wS6~v#{uO3{Z9X*GsYC5==7-mCmFDe)}$gc_^;+4sK%#y z%@WHIZvQv~)PHw%eKG`KBHs4e9FgphO5gsf0#%ggcYG;4L;+k1H;Qngetcu3Kuy@* zNRANDK$Ry+I0io}nku7M;nw0x0Fb4O_|aR0Nbc!6F)tOoa(n6@O%Fai$8q_E(QkAz z91aks<?U?u*njT+<AuveM=*&fw^7~RQvZkBKzltOXX}BFQ0uja56atz3&=m^iyE9v z4F6C!&7#-8WBRI{-h{>&o@*>7p&U+blApIPP$rVybTtbfM~u)on@9wRY)%F;a;>){ zTv!gHL)e8!N}9hO9?%Ukn%){0UB|3cIgG^qtGm4>w|Z(d@}TbDzkHAL2SKGRY)nDZ zAUy;UTEw2^O?vb{-{${C{!RcS3V7nu;`}d%(0>-@PO}Ks<^10ZV}y^PEQ-35m!w4A zp{ud~VQJ+5H&pqbh2gUpAohX%mJP%IkG!O+U?lrLn#KRfOEO;=>oljHSoWqX|97Ui zgDR`+ONum?$I1|$(e!svrD`gkv>jEX9H#4=;WLR?#k$h@ChrwOr4`SdpLKvrCKbm; zZhM=<{6}sMOQt7<TtuZ@eG@<a45q$tSWr5#8t(mg-C7el{!9V*c*iv{ZCSKy7QY<+ zsrbLlFCZdI1wKz(y#zZ#@PZl>J|F`QHc^y5>_bTs7XnOQ<z_z;u$O5(hH1KVW^}&C zGOGUD=9~g}NgZ*SYSF@KBUNQe@6Ne&3NH?vkMsG4U;I&qFa-!D3Ve1`A=jdHg)?z{ zl5LQ_lb2Ar{+_k`c_~fq&-f<~;rk5`x*u^uqLmiT9@rKAHo3ZB)Ta>L_t6(u{tH9Y z4{zG^2;vfaGzX9ae;D&<0gOfx(|^u#Ch-9S_oF_r-$9isn+v$mOm_WO;)T*<_lEE5 zkJ86?zXAZdawIEPKCM;;%Bfa%l$;=UeTj(l%a;PXZ>Pw}x9oA~c6;ZaI!n2cY(*O~ z;LCo6jH1u@EKrEL{iua4;ly7Q6i@?!arM*k;Bn|RhEz_9u6B^Jw<R3634|SmrvdIh zCg6>RLN&+Y6pbfup&s^+^Vnpxb_#W2wvHc$1h%>Lz9X2{;R(x7G+uFudGyE4ipoeF zJFPXE9Kvs3GT@J@`4h@24ESJVZ0Mvs)DBK>CJg|`<YxTz=`(YQ|4u&rI{vVn<qevE zg(LUkRsBXMOjaq^6hQc3;A{6*8S>Y0V6Xk+t&$c@QjhS^EXndee!LcVmIDuYZ0i54 zcaAV+DFCoc`f6cxC0OJN4K&Jc5@;VBV6G<wmo>u<zbAN+Zk_GinK5G39!wH;?MYvM z>G+YKv>UzrdTyBp`l_Vn^9kG^P5$Gpi}-`pfFDXY_`tnXu}a81A@(I95ff$e({`L( zc<JjpDtDqmQpKG+Gsatwgj&E~t%@@bUy5y*4q$o;aP7+_4ERe-3Xc=-IxNEp3Z5Nz zzq`tBtlsk>M0=1{@D^0R3<sc$kXzBCCBi>Uuz^!6qNLwLf{Qzx_h(atfp-Jjxl{cP zJBI0xyc-fChzRp!ph1<d6>zo;2+;(O5){KxV$7f?n5<p{a=->Emxz|YMZY0iGz;U? zI>t5g-=|cI&cLDRgQw=aCcy)6$aSFA!9pNN97v;{*SZDe62ZiQROnCXhI!`NP#|8D znX0`b09Ui(^Uh2`)78>&9u_}psU(Av<+W0Fp_$l$2i{mn2mTT{8S}8>7YgBHlqz@d z+iQD8H+wJ9e3v1?C+2cB8Z?9_-wNL6N8(-y$>5{>(a{lpjOANiO}Jr1zyl;MMrN8# zmcW@P=Sp8H0R&j)k)lY5^O&HV4}oboL;&8gYcAVxvat!*GtZ2;_$9{(${}!ijtUYA zZ;Z%z98^v#O=O>w+7iQ!V>cS+x(a#TR!Hhaa`=H>*(c}4Ui6)X+Fa@&4E88N&0g`2 zrHOS#F|ZUvi!4?#YVG(^slkK}ue%?*dk&)N_o&|2)8om8m-HfF<kv@I^#1uh*IMyB zIIqyv0P=}e>UOMp6~QI&S5j0YlzMT)QkFsv+ZT8>o(-rW*IiQx9rY=x-=jaiWUZ)@ zt3^xuHOTESY1eA<b+D0%XTWWR?$e5xs}dJJhN{17twr`b#NAaR=_FQYpbu0Vh$y(# z2$3Y=Zq(oELz0<9hNBK%LBI{KVIX)YGmcxToHCc{URBw!w5yQs>%wA=@K9ZC095*( zYnVzNCgt)ZuaxqxEGq|K(|Q&IDL0OA4JCZ;vP|VCGDWDxjLT8USK@0=S*(S|>3pZ` z5%5T^;DGXX$AdGf45kn>n!)KFk+X_~*kVg|#XkcEXO*cxi>(C*{|x({RVCpe?=c|~ z#qDyLK5FR732x;j1fpMRv`oHBL$jf<1YjHk*Aiyk!+t`wwa4ENoV1u5%Z?Fz;(r{G zuhJ1;N-ItiD~%|!M~fz(fBRkM5X;TXR>7`#c~oX#{86J<(InRH&>3?w6PM*c2ycEQ zD_qIJsCL%Zofb^CGBF;#=LZe8BZ6(lZgI|}n;tY$mkM<=4Fbj5Jvc~majPf(M6(G8 zD)%a)@k+u4hn7hFE;^Y=D<Wkbr`NXxWu2BweP^#Bz4@fn-!QmB%KoPEO!Zy9B4Hd7 zpvX%BT42kOFOG)JLMn1Ok-N%qYgrM|zM6`*2R*fdx}tic>zeiMv8iw=E$x4p?jnI4 zC-lzgT^xCKgo&3&P+<DHB|c%T<gItoMc<oI%w7(A4_9TK581%j|8xc2bNhs6{6}bi z=mRpYDqZsCixiD@6%yde?W7y$Hk|Px->kA!1x@uNfhc8FViWo2_0$oMJM&a(igbT& z>D)n;@ygxqIK}oVPbVimTaUhZ?Q%yFdlfd5)|N*o@0inFPg@gw35|%{u}<!ux)i4T zX!du<-tc;6I`CdiRZH><5KjMxwc2_=94AEl_1uO^UE@^jF6BkB(2kB*z6I6(-FsQM z7#94^LGK(O>bHPAtwTdq4ua`!>e`y8+oNt1Iwl>LVDa@`>~T9PA=frkBhS&BnTK(H zH!DnUv$`o6T)72TRynY5Aun|Hl5rj3c+b^PgaS;(NwYU=LL<V_I$dsxTSnhGWiJOV z`;sAjn2kuOtJ<L9lYG(n#g0hdiA%Xti8FQDK6K+`)$nPFU&}TE+c@2+a#oSvvSTaR zG&4SYR@2n7>oO(sIymbnm*zI%IY;~0X<Xm8xB0*eSTF{v3f_^pJ&05l^XYmN=Pr~* zpAhfAN^Q#DNR;_kL>Rr0*n0VO>SiBB(?O2^)_VwOJ%9=aY=(UC9ccP@I%nOyGXCgt zrgK66qh!OpM<pn)>0u%r6MBK*Z!+b>0Fl>r;yx*+ur>A|NMT#cNr9x}AIa9U<br=G zu4S%6>)<tCvVYiO{L$+-MM&V+8Ue_XbYh*dJqPTAgrzd=lH!91kc`bR699`0h95{G z)Gpb*!vvA9VF5U1$T3|2%MOOaB>^-tuK@XDJqWyE2#I7Tm_|Y)jVU&eunQD@VE~I> z@GG-`>WF{@o8Z;<fTr^RZ+6^v*}!zKKyi@cV}#hAE(#BZ`x+1;U;@jaflEPOnpBls zS)`jZN?Irw_Z15CH{=S63w8m{WW8xdL-8X+^Jq}=-a*>lVX}pQhLE?GZP-;^7<YZR zBR;@U82n^9Jbfv6Ap#~x6KG@Z?v)xSLhgq92<MF%QWoEGv;gPD0n#MWmv9uMa2J7v zg#$<DxHx7(CtkiZOitp3;RN^rx9mYrVH&SeA71w2*toI{3&OyNAW&ZfE(&;o08{ft z`)@?$aD<v%gcNf`G|C0P#gAx8z3(pPzWB+#y$+N)?&oV0BKFSx@hE4*G$pQWC_Zgy zunk|79>``nx*r6L%1X}2g^t>I7t}`?UWCbB1WD#dtk^z$?P3Hb2ZeZn3nSvTI%BWA z;$A1jwbjSZOugsoi?=rOd2$|%KjxQZlkhUaJ#(Cr&j$DLLCh#^9KKnYEMMsA25PC$ zzo^%LyDw3mBepdRVB+(YLGsY|M}ZTg&uIg4p<u;}L|Klcuj@&GesW5$cPv)W4{Muj z_6|=0fK((9f09jT|AHehnjmAB;=_&`Ps{Kz5=MXsl|w{R$VcA0405yjP@(rBYC1?Y zG6@&;K{yv+77kVQfkkY@)%D>(6QZW^0WkdIYq?PKD445VqS)t8N)gFbpMq-(KFONl z!eO{oIezo9DbO(>qRY$Q%bf%n2$R3Jy%8<NgoBcezC6dNxCl}j<t*AT%#a6$*F#`> zusnI#nQjt!A<mEA(G)&uki_U02e{w7B9SZpDVv7heWCz#8eU>L@_vS3?<bL{fDV1C z*Y`<)QDPv6$O}e<%NZj~{z)#v%XbP;-b`7WMt$`LUg;rCy}@MI)Yx3XWVZefT*8q! ziCN4W(RPt2)6|DM-@{7_!Lk>Cj5jK{K6dX<*!7>ZyK-?V*^H_4PdHbUL`Y%|Sz<mG zm;{pe*LO<o3s*itxA@4wW%5`(j-V5E7`Y2r$;Foy<_${Kq2us=4woE0M@im!l%|n9 zTrgLH;B+DHYM(Ec8(%_&BAH;`U(W*}-d~^3AXj|e19~WES{|NkP9Ud`!VIM~0O~K# zm{b$)=lcf03ED?<#6h1EIF+_9^2|l@)7$ez<?|sR5+EUmot<R5(gHxf(vEgCi_Z7- zEs!<K?};jaBoYrL5dUU^aUI}{gYf#{#O{P2{TmBou)e_@(|Lb-3&Rp}G<`{MKqOoR zt}p|t#6N{uSKk%B6+i|G`VbI+DFqh<szMX@AqXp6h?DrJXbFp|4SwWa71~4>{6v#D z6y>njWqo{2Fpc=pWl-GBR@B;8;0`6}E+?#mW%fKM`4w%|m-fSQD>$OR2%bnjK2x&b zd;fQ1L1UU9?)Q@IP%1M@y~W1T9eb)Jks?oph^F3Wy9Q-v1NZm0@&*)2M-|G>ugU<? zdzTNsdvTS`Y?Xo1%L$)Q;nGE{a3$O}mQ#pUNQ{;5lovt<W$_g&9u8LAdtY&5??pFT z!SbV=v8fF9q>{C%lG3lzd&Z6LTAZx6^5u0IFV>-;kB<aaR5b=8nLVh2H<2`GR7uU2 z3cfGs1%UBU(gOsUN)zc>Iq9}bskC9uyl=H_TD5#rwK5T)PFJHTTB##iTN7QQP~-x* z5ci^MRJLo>L~FDZYh8(otVQz;(yNuWYgCD9VElD~igopb5u|<v^69mX+cnN~wYJxF zF@6OePx1|ZR4X}<fh+KHV0E$S4Hj4Rst+2Bp1>l2#>`Q{G{eSpy87Uz!mPpSRVG*! zf@}rRSgDww@gvXcx&gotG-C(=Sfly#CNy0}O?sXe5wPn*25xU^rgLeZZRQtlh8om6 z%#t24!QS)LRH>1*Z8y&i#*fnFL}4}Svx$g-1my}th57W>ri&JwqT2D<>SI1w>yz3o z!?xSV#{TGPyZ3d*O{6CPFbQwavTOqny}xiMksGXaBB~8AM3agI?9k;br`M%i*F;~V zY5o1k{WI*JG$<Rk0|$*H8SN}F-gMj<vuN4T15(DFYE{DyzG827?hJcTl6^EOwOEaR zI@hzgPC*(xJ)ldEuS*XAq#cU|VmeI+(T`U;Rbt%K6Y!+Oy1QrE<%v5q6dROpx{Qcj z;oMzXN<YGy+6ZrIHPT-gXY?@8bZZ)Q$to4oE4AMft1&F@@g#m{I@crPSiDcvamLgk z>d_l)<l;Ej^VaAG<xTrrEL{!ttG1AvzMYS~Qq8?C%{8u$J?FUnX~l0f0U(3`kktAS z^#aB(*5FJ8_!IG`HxC@v0_rY!kNANxgXZM)P8*}%;*7!dS^#jto7M&cIk@0NJT!69 z{*SuUn8C*8p+Dhxx`;2}XI;Q(8Y#LkDx)(<sR1=KG-u=l-x<Vt2ZAC&oB*JL07STS z^c8z*V(Md>f6hM~>A8p3Lj0doj1z_@&(veL-QG8ZKHwg~p?6$#{PK&q_tw82F<6H? zKiYM#8^aBA-l5DS1{`IY35*A=m3n~$64KkTk7qxBu>O>7HV{DO*-MX%4GtgV)J47T zVWJ=ZOO02Cb@Wd5?*lM^5D)A(cTP6|NYYRAx{#e?I#PGY8F<DO#Fdi#$A2}FUFWo% zGX0*}CLd^+&?}J&EAGuIBKn3b1dxSAQpDHrhEq71CJCUu+owN2sg2WP)H3dG|Jq4o za)t<Sf#cimPWsP_8PfN}&XD1v3KKLY0R-<4^=}YBMR$HG?shU<Y%F_=3_&v40sz-J zlP3rG<L{>8Z~wgI=?+)wj~yTbgC?z<$h=B$0&-fqaAwNs8C*!Fv$-Zij3;mtg-bH~ zE9Pg@+sQ7`WVd{C{|?A{0_OT|$zl|yQ=KMH(L~InV613WtMR;9I{|<uyJDKV#gKJl zGw1r93I^sg3IfPJi~l}U<N!I%?-)}}m(0)Y&SU5omYqmfV`r>MfQ7qqSw0AWoZqF# z$Q~}tD$gy7FZKi!tSIwzA!l)35waiP%@AR5OqO21!W;%*@B<6}F~Pdfyj>X5brK*i z2Na6=b1!RI614=0!}K~8(C__b;DvoJX~{#+XqPOD3{!G1%s-G=^dh{={Ufx@TvS4U zat_+ITUL}7R*rU;iFor(l^5{Lrt{z&lL;$It$*>BRwYRn{AbucI!&D!6Kg1o8)dEG zEd5nu_^a@M-CSZiA2F4dISCnkY(M<hk@T;n2nqO=yYL{16v^*1wTUwfsV#PH+NX5c zZ*SR>kZhL;COAjBueSMdfi!iPbT@}&=3w!C>)+VcC4c+PJd@4DPo&ESo4#4|czY{O zt%cuIwhFSgiWXLjvzE#vwkn*r5+b&0oVO3=m;Fn(n<Tc|T32#OSGyRtdjfZ20=GN% zHU>?$e(vqu%i2Lm>{c#pS3B=g$L*fP7BmfS?_jnU{_T$LZFTbQt(fetFDzi<=E@iL z=Kk&BFzi1q-Tk<?cV;qwk%hTZ*;`xKpS<07j>}&O>^xODz{}oK<=x#e*&!M^XmvU` z<~{touuH`_dynyeF#C|s^pF($cPX%dU}XOhcAB2?a7f~i6Z_}M+oKaK>CscNnP+bc z*!Pe47pDZ{4_-(fh>jdHXK!<>?usy;IL#khrX9bGKk+X)u^2dk@1N+CoSJi;K2SZ? zb2?RxJ~h~%G%Cw8!JcYMo^10T(@LINGLD;N=UKF!Da@Ziug+XX&aBA}Z5NM}P0yKl z&T$mZ{r5)$8FP?~7r5dVz4{m7Pe&r3W<<AL%+Fo4UtT1P3?-4JrkGwf`d|8fzDye# z$jJVbg}qFFcqJx$l}FZ}|2DZW`zoaQivQ15X;5!DSwf}cwY|~xjrVo^Vs~R(eDmV9 z>dkc<?M=siXII<%o}im&88?mfH$$c!!%rhd8E@~4-8$*rPGZs1*pcv=wp+ZpTZfBV z%-go*k>FL+e_MY4*i!#(Ew=2K2Jd124bx#+gs>-!&1Yo+7uk22N^lH37>|TODphUi zbvOyVL@2HLvQ#uRy(<n{m9Z`G_U7`MMq{-v=$>+x)Mt&q3gP=kcR?~L)*|n?off)2 zYp$zgi3j`xKhWAx`y%aQKG8SEESJO*D-mW-wWjrX$5y60O?z9X)VSr2-qYE6oku4c z=(y#+V^FJkmuESkvuD)kvAfWn?&YZe&2~I`f=;h+_6{2*l*!OLG{5T#q5SLjadR;# zo=2Bu=dPG=FjG7TLT~VLs!x$K;$dbQV$CaEyDgmF@D4KjhP~CuCrPW>o@)ufLKwt~ zcKd_EL>HVcE?n1sW=hJ+-MCwA_$C|vH8Q^T+?!`ql-!-)JFQ>-nJt?g_{4i|t2b$6 z&*Y!~)#;N;LFcw7{<pWc*gCSdYG5c@5{FERuYC>dsPO9h^Oc{k2-x%ZUP68s9kAoR zSS^1;w%_QIN9Hr*B1NexMP390DURh+7=}KRxvy<NUUOgF_fUr3YjrH=!S`+TFAqal zD&_9#ub+Q;lx$fk4^4EhWX1pRzEa@{DD-F`<l{u8;?st~BSlm_Rh7~U6p^OV^AXFc zpHshXT$Kga^NybjwWL(3h@VsK4D%kZzEFGh_efI_4wZh1RsZ$;`C#?Iu$Y#*JbPHo zSZg#L>=$Rn*J@4G3a*m@IZ4(Ut(4a_u3DP9R;Q1&erVNb>)Y^b{N}Lu#y_Rw<Uyfp z9K`xziY)-Ic3M8nDoM}c6Ft=*mJe0}2I86g6b5!>PRTQmOS)?fpVhD?8NTgpp_pUp zW)+-g`?*VQ?6Jt2WXv!hR%b&0cRta??>vm$l>YRuAcFF?g&ct*TT8&)Cy}W)BcT46 zXcoaP0b8bJ%@<nv#~n^?5i6M$zj99;(qMTarIKiwth+~QMWt;mY`tM5L2mu|tx23U zrBhGC`l35SqD^*07Rd%#7@LUQ@0c@~-M4H=>?Ubucq7(+FmElv{zsh&@iuYIn#c~i zxfJGDF;e^9k?^NXlT+<PR)SOAI)uoX;BUU@{wendM-hR;Nl_Q-OV4WY7a$t3!`vND z*t>4V^Qd=t^byTR87!&^u7iT61a4sdbuss3F-e&FnChoUcN}HemeX)8XoAO-O?=$J z?2)Md_>t{;z|+}hPHLJRk9S%w$`Dvp&lNk_1<Ajkyjm{*WkoP}Y@U8?^&Km#d+N6< zyxuCY-&QB)f7Qdz=z6^VMlzs#>Qh<3IbOt~_~rUkQ{d@dZ?^O8_=+iZ?o9FotcJ8@ z#`q9>!z)-v#fU7KrXF%I;LD8KQ=X{c@!<0ld&*)%=(G%=4acuw6w0BqkIV=HJYVnT zsf7tyn0Xjoy#Cw`6M2#MXwdQE;ls62OHp?fvH<+&OaiizZzlA}Kf6h>XedPunweA5 zpLMNBsYl~~{o+#WEse5zCS<t!xUCugAz%2IiN%fb{h#<xUtY<?I%w(A`5ns$B`L-= z<XX_Tc*xGIs>e?+uQ=XZ$lBp)2!yb(R1x2&lVba&_dZmanVx`Ku2m)}c|x02+f82S zmqPOQB};az)Bdqgjg;cY-)xn96g0m*fBD1GsyuLAaH%28yMiVAiO1Kb3yg+e;|(!) zfIKI{S0=SHMeCWU+g%Et!skzB)-Tfe2W9^{duw5n*iN$SKHFL+tIqo0)!GR2*gq&$ zT7Jl$iH>?`l0WXf?MN&#|GC6<c`su(gMA;<PwTTbu5@jrBzb#T;%hySR@=1(FVP*v z(5G+_Xm6a+M(6sOBx{lz+iG0t{EU8l@`d(8p$w6YD*qB?UM_B-IoS6X*SD9?o>+ZP zHj1WA?Mab;L9L|hWY3ZTktq<3osyE)8jJ{}D%_{!djIh1UL*s*i+D|(e5OKM-i+<{ zuxDFZ$GX}~cRK#2ar=dwv`^XL9x@i)iuykvFjp@~mpC}78}>45*VihSdiXdPtGeqp zu4<PtFK-*&T<MbG>F|cII(F1w2{y8MI)pnZVlC(m`TI)oDv~qRtQMK|hr(Sdq^#_9 zM6X}|jQ(5sRawoh)74-?XQxW{x00rz=*!>1VKr5^s!naLhI7t4HS|1OdVaGn=6%EJ zI!jdFop<W5ZXMK_oEEyI)4llX`nP`EL)D|s)p#dgw#i`0*=yu@9_N{Ev%J4^#*m*0 zdp?cow$(n>{5AVU56$~yeyxDrS?QZ-g|=&Iiy+NYQy^O%UH;ew^~W1y$g0==&eEmq z;SEAm##@gv|A2ufgPYifHi0fsCqmpv4yLQv#jIl)Rp((&C8^Q9Wd80w=jF0nw_eZZ zymw8G{uZih-X@}Jha3SJPnn?iKfL*;n;46oQ(&P{>R0^uP42CY8YWz)QEjq31tqJ# z0jc|>H|+W~e{Ph^;&cGfde5hV!sKPA%ujVQxAaewt6}2$!_mGkw3hvC##S#m{np$j zHXc3`g&L>@29D~sIc}IgYUDs#S7$;3DqhQ`Wf<hMIvO$?Dz4CuKisYSKr_F|5HypK zD{x#W&ts{Xtkn{2QuE$W*-EQdr@A8R!`CPrJ0o_PsW(d=W!En^<FpN?t*%ZHF#$VI zSw%V8tp!XnNT_UOMV-1B{#2G2^EwtN&CWX8)tR0-xeRK}@iTihy!GA7{AM^WX5}?H zce|G}oHkUma8j}vyY9{Cv~ayPR?UC%7K>c`v8c@K-9F-b@SW9Y$<fMt^5MUOdYKys z%7TkTZWDnR8-E0ysbR19zelL+ycy;Zg?>L**Az17DrL0HkQMK-^+d+~A=}GbQ{G29 zCv)o(rqZM8@1irHgv@<#krxT?-11i*uKRXKO?=}$mFEj4m!_HER3kspzM0!r%f6cU z5$I8T+`pBKe?4(mI96LlPyIHii9<r&QzGCsl}nJ{>}hF%;mQ1d9TE?C{_0%h5B<L3 zl<4gI2?^lec^HqC5nxgE7QfH1AEoP`PD^&#t0+O2^7Ll@Y5Zl*)7Ha`_?y*NlI(+> znJ3?-ZZ?JYFMn5=oRkK&Y^rBpjZ9%%l}kqa_AJ``X0Ef8(XwKj9`RSpbc;%TLAP8p zDJ1W9vd)JkDNn+l=5qlEJRtyn`nk+^=e_*(z*9;a+L2fjrViS;k)B@#k1mdaHg8hj zYMv6AhdDaFAp#Jns~2svL=q>*6g`yqJ)%$mj&g)UQ3-fhKco}@#K7P@4Q*X+$qq1l zuTcnq2A)hqxNOmc&2VBC^lE3@Qy+A&8uH*8;syX5(-0H}awYoeNk6*fI?3@Oyb}(m zrNV!r2j!AOjZ~o@#w5`@Ha&j^3D$!Hd=O`RJRlOzBlMb5tAkakeZwu8j2I`_CE@`X zNjKNQW!5otO<_qJiDh(bwtzvL4%#Oynpwm;S>)f8S|q0-#hj3m7jHU59h1aD#RdK} z9}-Eu>gwd3YkeWy^(S3SRI7{Wk<=!ggw#ZbJWG;-k%XL*lyaVw%uBdzig@2wae1&b z{Zg06rD)q-Cck1ggTC||?(SjcHoetE{hg!@QLzSGKndM#MAc1wLSfP+Y6|W_Xmy)S zzy+5=Y(iyhGeU&bWEej8*v7~Jm=Jh-k8MVe{am8MPLI=Ea@vbtx4UaNRN5sb@tZ}X zTd1rEO4i*{#KThdzIvlqMsHejZ-8UCdsn-kV`9DqB*-y5a84F!B#V+t^lugpk?Ql& zk_&&>mmkuH6@JzimDd;U-Wz<<8yPAaJ10l^sPDada!heA@?k&OJGuBd*@V2_^s3$u z4-=Da<YG=_6Z85>?c|dkDN|D9Kg{(LSM-1C>JL@w4|_O3xY?gB)}Ns?@NHH8z576R z=s=E^!uOPf{Feg-QVPWr3SaUDN~;ITv_x`=74en^d_v{jCi<(j1}iKFzozsRh7OkO z$Yonn=7<dzH!I?B4m6w$G=c})v<91t2U?m3T3-&;PsmnkDOF|k_lPCb#K<-h%QxjI zp;HD29}W$15B&tg2E}@7tA&43DP!@KMz|F_EQcm;$bP+)9lw#C2vxq;`}s?Z(jrvU zwD~7?R2s{(^s_#_Y4Ic;)10&<g}3-p<rc2;L|tXgarnx6m@8^{IYVX3Qig%MXKGt| zXK47caG0ZE_+VnV^SI+Fr|L1)$gbn-)01Hfu<Dso{Gof&X`bq7`N%aGsm*~0)Z=Qw z@E^m1O(#S)henP^C4hR+-8R}BfAg#%1mz7#0Z42WiV+qGNRNW4<MF8R^^l{lZz$Ah z@pWkNwfMrc03-uERFg@ROq}dxAGpL%RMR$uAoCTqBPEUW7}l=|3r1?zgYRpTf#pI} zVQRoMaMuP6aT$fOjy*NIqauD$Nrx#i0Z=P&+e?jIK0H+UD4&rAD&f~_?r~lM5LRlV zfoT30Arq1o4%WH|Rln$ddP-_9^-Bv407yI?j3!jOv$TnV3J+lC(|kjXFX26w>!%?` z9Zx9)LiOQ+H&hj=Ch&QZ+utKmfJXC+FeW~fXxPN=1(?oi>`4n!DO2M`#V8K|G&73; z_#h3Q-&+@8%^Y=9;cq_b$a5-6t&Ik00Lg|9#l8vEMmIff(cVL90;%I#^!OYY^=F(d z0=K_QH76IE8!a6t*AWwS<02|Rs1mI4ylY~$s~LJb{PuU85<-evtJ64UWFbS<%PQ{H zlHyJ@wl+G&vNRQFd>1*T+Tx&#I@LYTOYU;eeJeeUL3D)i>s|U!WBs+Kh0XM$J*J~i zV<Wq#qiS^H#7X17QI>5Bm%3>sl8~0Hh$L%I2)~OUP0@GH(NE)l^Wm1nZ1hhi9w2b? zCyN?li9eG|J@bWi<}3e9p7hK&?U{V5nF5cQ!myd|A7+Za&HSjDDW*3Fn~o?wohglt z@J8!n&`|$+DueXoveTJzr}m0n693VNI9kqczbI?)3@bcl>tbhPm!Atfih#60{Q#sq z9+DguY1ucsfPu!*zG(cG98eCmx-$*)g$+oD(KSzXDaUqa&gK?T`fbdh^bDJS8~wq| z_0({QG(h{bA%I-?@A-&wp7}rJVF*kFkDHOeA*dqE2uL-;+K1vw+0On6ATa`f1oV8V zeR2RSvX9^BE-8tT180bJVG3asgo%J^5xHX`8mWz705U+&*o$d?Yu+dhKq}Bij$A|C z@xkH^5vWL`Df)SDCMe(ncGiQwg@I(@(6?%+8{-Ij7)nYHYJv}P?h7M@L*8<LWci>h zaFmB$gcDO3MJk@#UFG*Ep5_LgF+9u(6W$hvLpW)AD;?p%7r}CX@(@~bQwt%5g%h%c z!Qc==HjKWI8R0M<5fj*X8uE`CL*9ydDYrx~6Y)@D34aeoIUELESOg|baRd<5);Krf z=7g<a;)QUJKJ&NeMNVGKEy)Uq!2+y<z(PC`cP2Zqrx}H{IeQ?+%{vr4xybGr>OBn+ z`G<6<M^Q|g`oe?%{ap6&4p*EuyA_YH(F=8wGjkORHPnN8Z0OT4KsD;k+yIFBsHt*3 z-mNjz7l6pSENRF<X$3&!XUiVb%laG3PkAl4*evd9h+djtAXygt_$WL0vXG~lSe&^5 zg9VL5goa)y9mf1=K9p?~rC|c4wMN{s;!R~*Ju5YLK3I7f2~}G#(?DP}WXxPV%^dYY zX<#VkdLwFqU>bzYeT2;ewZGh?Hn;QP3NE1xo?usRgj+pGpd7*itlE^WxIiq-TCJ&N ztaSyfL>N%WEE~;xHa;d+SeCer==_cM;kGe>8?jj%F=w`MA8maW!c~D#`P5KXYKUha zu_^#~%R$YBLfsKi)dR3I0-E}9^9?@4+Z*aE1a|g@rVT?p<-*?B+Iby-?GO>3NP;(N zrbbAx?Ew@(<I!D41OkAekckAj5ehj!Egf;K9Lfu^z+E$CHi<CWFm+Z72j@fhc|mG= zOKfZ5_$pQoYPghgmNaoIEu{{3>(9GqiDp})Re{iyLO24KM0EZdjRGJUs3hC#cHX~T zo}n7f7QU?*{R>k7Kg10Kd9(&`=Yz79BOm2sOd}oKb9P2`P$Q(fHEd97xe(DnjFYW{ zv$um0Bn&H{WA)b7w)r1GE)nt5+KRXo@%zlQO9vzffWp=wz5o)cvic4`?Eb=%laQr$ z>#79?;&A|$H@SN-OX@SQ@rJpZ5LnM;Y2z$ZBVl8C53oi%T15h8(+)tm(^%H-jLP=x z@b0`PLQM~9rRU%>?D(JuGrX{myKenf2*f;T+MJJ~H(9#32C<cJyoET81+LJQ2fM-6 zi5YF*IXh7Xu36p9jA|%0p$K&(u24b<?I&FMzCG^z9S=RQEX-Uo95M3o702`vO2UjZ z-f6;Q3Hou}*E=*^;E;X9nd9kS$^uu;0-Gmg2=1~Yj`btXDOb$}h!V$Uau3)nVG~<a z80{nkHZKnskPJ0PKvA|(Pk6+e>2OZ~aNB@*svX;=+5xsuZ*=$@81x4wOv@!gSl7<m z#lEB#FAWdr1w^IE-Hmk6znRIGnV}{acRdW`n#Y0<64qAgVvfMsl3D4>3ggd@pvwVi z(uQf8I@gr$x-o?dAj9wWBzfVfMuMd@1c1TAEc!eg5W%$YaJRlNk{s(745w5oX4jsf zP6-eep<PxPoCiV>6Sg%c^oo<qYW13jV=Ia+&RlBL^dCQFLk5QxYGYE46x_g&4ttR4 zdQqzc6ZS#?4vbrUC|Ku|zchkY0M9t`wEo`t%$bGTxdjmE$Pnp(Rr~m=Q`*c^a+jOU z2>}4)0#Ng5$TeQL#xz8kx6>mv;thP?^#H5^GgDu)q=tm6vRMOqU<aWHT^YyjQiS)X z^I$<dXQ3l^#ue&GuRv9B5Y(I4#NwAsFe$>qTquMt-@{eV3y?X#rN8sZgc0|yckcmu zsgPxfGkra@Jf5!~;|f(A!fE}CISxU*Z)@wd^x6dKpcnc$a$TF$j!JdOxDZFHFjVj^ zF)B68VcO>A)&{;{(erN?x6P|gb;AYvmyPDAzRo|U%|Ei|=I7MSFqzFT)_-KmZ|u|c zsNii}IK(wp1da(!kvT4+bw^?DrV_BDEmXBWTpSyYeUlpQIcn#PfM(a)sWOF2Jq=I& z7-iIl=hO$y4}{9}hI#231tKB9MnuBK0!nUvL>wRYo&ya8p@3N;r$td57-OBboeCi^ zIf#xbPNz1C8R<xG1L~v(d7qgFv11W!VX9Dk=k0P3Z3QU0#p9PVRSY>45Jde}5Hes_ z%MoT{mPw&?>mV0&-<}lqs~}epbCVN@;lO8->T>&JP^-i?njXo={En?sjtq$}`xvjZ zsVjIbGH0$2G};ii-e<(42&k#6>qmP0hO->&EKdsa(}6M~K}qRKp8&^F(N9|(0J|w( zv{pWfr18BZ=P%<r9ur~J2=HuWeO%fd-t;M-oZhRD^1IEa+L9O0n0qp+Emy<1eDzwU zAJncMNEd-vG!s;%PmI{90qq~#<@SHKJSI&Y9~kz?O`cIG0xv^L-b9RZPE^xLzubIZ znvodHCd2DU%MPyeSWPK)=HdH2K(0niS72MeFWtF1Li0A;WL52)`IE5Et9$5@Z-Nva zq{;8x`SD`;gUMz<IS;hLzgxC*Z<lDo6!uHlAB9mGL@tCKnbqfp)A#f)MKDy-EUL}9 zbo8;L@&!ln?blx{i|#t&stYYu<Eo18dcTel+K+VWdnrPJJ0d#yFlk6M%V?ZLOvaPa zg0~?w<m>wb+F(V|tBbE>B0%2Ch$Qxo)rn8FO7me$vny&~OLuC#WXpIrAk3cWQQJV4 z<+FUBEc>8_MpbS@uS);jVF`3mnjAEfCD%@MOe1)x7dkB5{*dy!+hZOsjc;9Hc?$)B z(V-;VQ3E!Kc@)w1iTv&O%td*DwO*u@kL5s-ZV~1W9Q=}9$L;fcq9X0yb@d2xJa5R- z<SOb)q6mI_aLe+VItf8bCO%zEqbfeF_kv1fHpe24|Ghca5C62d)dIMlQ}Pr4bizSr z6Limu{mAu%X|Ct2rQ=)AVxqe?8oRXzxSPP8x|`qjazma*b#wU-Gs8-JD?0A1?n}+< zVjNUCfjtUZjd<&Lwne)<%uq*c)kzr1L!}J9g`S3);%CDI+eWTk;*3|vKSi$}zWh2H zS^1a^8TnXAl&=+^3~08+B@>&j?j!{iukbBJfz@9sBFzs8JUGv(eENRxtm2?kl-n#= zc`q^J@sj@{_0Q)$adYZ21FmlcF(@L5`ZV9QKkUmJ2Mxn50nZn_SGsvfeTw6r1U9UG zSRAZh&XBxw<Yk6Ph^&9`8eU&ZFpaBU%@cL@UHfYBK0>kImiKD=FxW(7rMZdWa;;!6 ztMRV1gP8<ShMC4cXqR?q*!uiwSY$J`EUxJ^Hvam}gNX<UpVcPZ{p)SCLs8>-#gBO3 z<_(8C;4XVH%lG2Y$RdOpyFeKvdfCq0+P2P8LzGYx7dVy9cqn$BQ!#|&Hhfpzy`wI9 zLS2r$Zpz6wDrld32Mam4Mx4B^e?_+No=*0<i=DROWk7RC7_VclsMrd@vx+xzQVP9~ zYEkh{#A~pucd}EZV{!hpoU*%mhC)Y)WC0t@jJh3A$*ZyWAb(r{1t1@d9+GiUl)g8) zc}&|W$KJUc<vO#%bVG68aul_Xv<B0!a!0lj|5MelabLuLYAbVw2eT^tieUI7DErEU z&(lLJdk2Fr>&x^?sFsNFApvJoZ{}En2TLC7ZegF~vU=>XVjfGZpzM)TlB>HIBNN&8 zeg&1IpwCTT@v*YKSXkv@d``7Y`GuUK;;^gthw5+KA(sP!!7iaK+}6<e`-&6~C_mGz z_HfdoUdv?Q+*fL56F5YXc{_H}&kXg#KGQP$Z{RZSPea6#BFR{jG#Pho*(H)V>KwQd z8PD=&?_po@^M%RB{JUX?<6a3q|CpG3=mKRYSC9*#aAkDS;&@|rIT|XHq6(Alm0&U$ zi?pwf!#AF1<iAo6iPlO;e7PY{HqaUX90!qF*|I!6=S{*n&ST##l%^^A6{T_Vg=*eb z<=sGk3YS*lOX*B??dXZvE3NOc#$3xWzM63w)J32C?PYxi)WY)Ji+HTIUO$={tN1rj zBurwbKVq*_P=u{1aSZsOH-?Iq&se5PzEc5SnT@pUX-E6tI#8YZs<z3Hmm{fnOuy;X z`9H7C#tGoIWWLt(QLC*?QSP;Ru^l%wU{RH6C2PaEt?z}LtlUHISZh9+88Dx$K7u>h zni}f=&ho4(Id!ykN}v55_pz$NiRUd3-OQ}LXH8cukF$+~(Va-Oe$aT=(TvV;<4mA# zQ?11DgW>Govyb)j-8@d;@6?8SI(2`-oIFN|jQ5|PH~hvcbNu$+Xv{>nw!eGNubXJ` zqVcRg70=nNN_74NBGhzE?c(*6Zejg3O~WaDDQf$N!RGQ5dbfrz{I+R<B)P5=@83Zf zzu2N}@p38F%~;xm<i|2~ReiVrhsX2xW~X@+YI_7)-(fP=zU1FkQAqrImJl+x;)UPP zx5IRl7+bu``ogDQ&bcxn+tHGfS$_at>YDPw(dvomWv^lQQA)^=6^BJbp9RD%>F3<) zbFzk?#yW0knLAd3*Qo;zGF2Zp{nyyzFNfUn-7;}wZG?M$M#Cjue)&8Xqm96!E<|^6 zrIPE>YBv7**!nX6h0|u^p<7Q}_p`z`JofyX^%MCL{6(52TiR8Pze@x8i!FGz^~W10 zYg_qC-AcBNj~l02|M8dm(39xAyc#P;KnjvecC21B{TU9djj<8iveWdNXm1s$tt#1d za%-Ah_=gp!@8sEgx9vOK-P2W(Te9a-B|7t~RG@i<N8fe4Y2mC@u=TiPKj64&u~?w) z>saiLCuK7x^Q^l0u3-*&)wDz!B-F*sdl;qJJhf(m_ceZZGuEwng#qg=LBo5L=vA@I zCMi6iS$g!L>fsd4h|r62&g0MH&1(W}mqYTU$C*T>e<iTOqanN}xgpnoae9S+C6}H! z95rvMlu?d-<vsm=SGlJlcvbPK^t5Cf7ckzx8t>#i6VPwjv6d8_8JBP_?#<YCwz-;W z;q@wyZ`t#dOrAL|J#RT~*)L=e0Qg7&9q-I2H%b3F%J_@!C#{FBZKA8p@m_73tw$f* zng>)sPrW-jGY_-8#5TyDUXCTVp5#l4Z)uiY{ce&!C=L?ev3Pp@XT0^SHll9(ZQ1qw qaqD?2R{Vf9`x-;pcF`j#ag<zkBS;c-IZS2*{~xy9|I@7_`u_k2>Om6# literal 0 HcmV?d00001 diff --git a/docs/images/designer/tests/failing.png b/docs/images/designer/tests/failing.png new file mode 100644 index 0000000000000000000000000000000000000000..96f8f14842b79669753a0a755e14cd5b91d1fd52 GIT binary patch literal 7689 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 Q&0IiLNmH@vmG#H}1r{70^Z)<= literal 0 HcmV?d00001 diff --git a/docs/images/designer/tests/import.gif b/docs/images/designer/tests/import.gif new file mode 100644 index 0000000000000000000000000000000000000000..4aac308cce25e005d4f7c0170e6c07ae679b4f40 GIT binary patch literal 251411 zcmV(+K;6GbNk%w1VGaZc0`~wh0RI3A1_cbhOArbO6bS_v5Dyoi)*QiBA0a9rBPk*v zA|fR$C>skYEH)~0WiB&6E;(l|nanUXLNO*5F)}qWKwdJY<}*fNG&x2zN@q2lyf;^r zI6O-@RDd{NsW~$+Ic~r@KS?@3N;^t@JA~RiJV!k;Dm^_=JwaDJ#pgdnP(VddKu2Lf zgw{bzYeA6JLPt|VqSQl5S3^ozMNnr(J48l2SVm2PMqP+Tf6GTWB}ZtUNI5e|S7S+i zX-ZpXOHfoxd$de@q)%36P>;+|l;TjBu2hz;RzWjZI$>HhHd;+oT3TLOkFQ#v*ju2l zTsuTuOFLYBw_TRRURF+Dd6r;ae_*reV`N`tNlRsCYHDn3Z9X+^q|<LfMsZD0a#mb& zdVq7D!gPb8c8;ic$MAWUt9q~1d~|Ajo7Q}{q<wB*eV(p<OE-SJ-G76Be}<8OSVw@Z z!-Ruog^rMjWKNBNf{>G%k&us(xx$ga<&oC)lAxxNroocB&y}E(n6B-anVFncH=Sls zo}8PYprE0AV4{4iqQustprfO?%A|Qnq}=kQVLGLxqot~{rj>)Jw6&?z;j3I@tgoi5 z(7&;-tg*4NvR#9-jbyW~p0l{Zw1k_qkI1#IzqYlww_#|vgL}AUI=Gx^xTT=FrGvb! ziM+L<yu7-+-|W4IO}>3dzQ4Y{#>u|y`M=EKz>EjLzqY`@z`?=6!oa1&vxmi%Eyc#g z#+FUTV`Iq3$jQmc%T`;=!m7>1yw1$a�Zy*yYgc=F-s7((?Gzy|2^3(bRlr)RAJ; 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	s-3Q?DcT?M!c6o5y+kP$hO4`7fA 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%0AFo4JOm52ZNLt(I&02lm8$*G=+i<|z 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�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 literal 0 HcmV?d00001 diff --git a/docs/images/designer/tests/load.gif b/docs/images/designer/tests/load.gif new file mode 100644 index 0000000000000000000000000000000000000000..79b56a62bf6f20a41216792250f14589c99ce2f3 GIT binary patch literal 87311 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Ձ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 literal 0 HcmV?d00001 diff --git a/docs/images/designer/tests/property.gif b/docs/images/designer/tests/property.gif new file mode 100644 index 0000000000000000000000000000000000000000..0178084e6abc240d90941985b3168ee9be9470b7 GIT binary patch literal 164420 zcmWhzXHXN&7EMn`C_$-Gq!%ehItUu7bV5g@H$yc7A|gV75Ky`l0TCmD6a_<*j-hu5 z(yO6^?Lz@YMe}@TW@rEG?9A@nd*|*s=ZcAuhNdSKatrhWZ~?#spin5*PBSraDRC)9 z2^q{e1=VvEQ;N!$G1!O;$|g!0Udl?!%I3++))W=P>*`UXntB$RZY5eiO<I&-oshOm zs%DpLvM-yH^o%0)Onvo3O7){V3@&OKYIqvP(~Xo>uUs*`LVjnir(y0wGEaD8Ieyp5 z#1yB7!v$wrYj{}ukZg>+ZKC3B(&uanXYK6l9B!36+;4Dn^>qvibEGUd>3d(bkGz)O z<l=JG)!M>M%f#)XmRoFsTg9Tgx3}lxE?=wb_^2{`<A%Sfy8pY30AHWrOKKt04{rot zzww~>M&arW+84rQlbhuWp@f^EH}8d}zPVMi9${g2+tciJ;j7y(y6>8+-zCOHx2_~6 zknR`OJir;I(7&cd1*WIOr#JVd53FWbt7SZ2&ZuW(EWOP1Hpz^%f0&(@UAdh@{gV6g zLvHow{6{YfUN#m~GYVdRd0bdf^sM~J(;^BfkdhZmp-`TcP)eM&O6uO1v~-oU?msX6 zhqAI46)z^&UMzemZyl_dS+0z-t$bNs$!LGMcJ%7bm71FBn(m#~%~h}4`>Afa)KDz- zc|5hHpW5}6+A~Uh*I!#(Tj%6mUtQSXqt^JkripCZlniWobgPAYuH{WbYZ$SuwWV!( zzHR=$_76Wh@4LV4Xs7){-yp4jtgEZLtFNy+_<HxNn4Wiwz1z!ueSHJHZwCHhuxD^^ za46S%h*mSyT{Sc`G~#e=gk&^A%@`egJDzPdo^3ZVJ~sLJXsRP?>K~@(rpuIO3b|%h z4rVI?=H9Q*?JmyGFD#6;EiNuD%?&T@ZZ5xxS{W^0`Es~g>cn6$)&?@yR_N>N>l;g* z8}D~E7z>-@1)H0jTQ$DhefM@g@9lg!+BsqF?QZUU_^`LX`C)hZ(?1;l`ts$=x6f<e zzI{6wB_8~@cQ|<a@Lkr?NZ`@#yQ8l^j*dPa{loXEqaTOg7oYrKRR1_(9`AG>AME~Y z#{B%c@be#j|NeEj_WO9__pgJ$e@~c9rYI9-X=rDwuZuHOQpA9P002PrCj^T8H_QJU zfd8in0Ko)sA_R@8l&%EC>2ofF)Mq_OXmQgb<JywG6h7sE<-ywL0~sRv4+Kr>N{6y# zY^z*`>dHnQVb1e-;60I&*WSpe?xE|;C!S&xkV2*n6_d}6v(LE>H&jlQvs^#799JJO zBZNzn0z6N?;*g3W<g>Iiel&v$d>|eVzo}koB5VvlF>4Ajszg*eucX-T&0Zm%J^C8z z#UL3zsNo6%Y;y`jV!=yamDW9cXwfpt%g#eDdqy&(9BY~Z$>POw9D!bdhxI#oNa8Mk zVAGq=OU+>)SH}d@-4b}dBb$7?Zfwwqr%|t{yPQ%`FgL-e0gv9?805CTfY563O7wNV z!R!}yy68Xk+*XlV(yr?GRbFWKCgg3?pWnv^AKy>BW&Rg$YnO;Ut)Uu+wYQ}}pl9$N zKv#n`QM4}1LA%5R{?57_!3n+q%fH2Ggw;#@%*G`K<F0|N-sMQtSQnR6+`@{KXZ5XL zy+r6XjMe_WyODu~$x4_qIm1s|vZ#5A#A#SRJjE4ExsVko6hB!25|e*7AU-Q9vLYTV zA3t=<kHzlHBdE13+WU#2u@pyu-U|bfl;v92LWj->zel0({CBV%2G6d9y0!cyq7yFZ z4e|;RXW`s^EIG8ITdQ}j7ED^)HU>Emz6pWYb|(w&tCM$RO6SsAcPg{=91KM=rkP!y zR|U`E62bzV{lRxKjE0x<^<i?KsJ%RapF#}T8yw@oU$)Q*bW?s#E)GSFtu)GZB@LC4 zzt&rEP1B}JyrlHpYHE7wKI5_do2voEAt6vXk7Byfxfck^%bNDMnG~%5LAMjWIP)qe zOXwG|AA@3k)c*4w-mXY@|CHosL{y5PSSIN0snQpLD;Gwwk*GoHV4|pcQE-Go(C_5F z*s{m}4auS;o{9$wy*wD#{_*KxLRwOe?gmo}oT<kf6f_vHu|xVA{qE<Bk+JgeNsu_a zOPp||IR!pEUw8MlBa(7F=>N5oS2QoBC~ghr{#?p`e$8`lh@XeTef#QYI&<uexR#U0 zxfIVQX`Xo@AKBD8A=OQyAg7Ub;U3|)OZKG1=VLSMl0~DZw>9|2-$+Rp$sz}4wq6d1 z75g>Iu00zW^}C0i3;F%IdB^P)9U<tS5@#!Mm0J>)(<{=*eG4w0#1&RsEH3Y4J%mtC zU~DfRyUhxEu$AA_?8=tYK3BQnJ)wU*4V>lgOWzbxA99HNw!+w$_)Fwof^REsc)P3L z_xdLLbbfcIU?Eo$d0il_@Y7u7f24q@Z!PrjOFl1|3Yi`^-#vk;4|cIf5fs}|XiIq- zR00Y&k?PXRDK_GyFUKj-Z!UA=lE_#Uy<3H+DV^uasUe!5Tz?BVaWLz7)$Yko$g@?@ z#m{w#hLtHKZ(kHELiq9X$TGlQt@-);Dwi^^hCCqtbZ4#}_8!y@z#Q@+T=*Pd<UQ-4 zv#HMocZ>(L>PWYx1ugBJZ{>VcWsiN3HCMr>|Ma7Es@3*y#~DR~7vct4gik;1xG&r? zhAf{qg2-OuX8j?>f2qz~Bt_zO_xFK;N=r_4KmwoKTya<2yR-*bJGnS~|97g1s~C>N zgD;J@WC1$*j^+VA8;^ROImjPWLHviN@alY*l;v09yc^I5REaaS6DM%qFEs81sr74d zJ=gbysoxiBVI|~!0!CLf5P5aJ6lobtN9+0KwRU)L-r}48(R$1*o~O$cbKs-}Q8s6+ zJ{e~%y|mt_lCo5?$s#)4E&36OX?+Kba{+ZNCW+xJXvv;L`3IEchbHeH79N&juSqFC z8RELUI+FF=Jii;mGLU?38}sutUtgxNaDTAx-95Riq+#)1QjFy_UMJVToj**A{jPiT zq_Xp<N}*o^w=clD_H3n{n*w+q=E=!fofbc^{wdE{ReT>EhQ9yqP3uuLVJ5?r6PGQ% z=Tl0T@D;oAQ)hEjS2=p-G#YeM6k3YC|KY$CT!nkl*Ijk$_PQsZdw#KMN5K8OZp%wQ z3JpjWUvrPz<b8fbp|c7r_4b^3b=f~IDAfdKot2yM^*y4bFeUfhVRF32bB>J}{YOnS zwi?2Ul4Bg#jb;H808c6{8)58mDROHt>X1NxSdl08s=&BH(3)>E>PH)c?YtR6WcA^R z3g%TkuW?M@KueIB&sN&&=pD27NtsQZ!qxy5#f$ef4Adk%t<SsCZIX7^f6x$?7{Y%q zJs84GUFdWwDQ$?sa_zXAZ=6cLZM(*H_qa!dy*4@a-5TfP<6ard+6SM_(s|mB`!MOX zsn^Xn&MY1GYmC>X-yYo%{(U@v9lsz*Hs2Hz_&I27S@-b1;HK2YpF_Cxx}0+Jt#j9Y z4m*w4<u#3NDc=1#;=x{@KVZJCG?fqVv#c+ibJ><``^g+52rE6_G2hWz`Z*psUSIrU zbm!9VpA$rwQX$x4SMRRoc(SERHrv>)(ZyernduFs(iVHBj#2cy@$fS4F@KG~UsDwJ z#)>NzA8a1~nzrv(sd9APv21f5dX?Vz>bk{8=cQk>&9k*tVPk=EZ-31heQBg7S$y&m z_&q=P;#*DjSdakt_W}X`rlH*8bHKIVi|KA^ZyvJ+d))ZF#9(h~9<T@z4s2WQ{__3x z<k**pw%;rJFOFKggVJs!_Xx}&>Q%puZQo0{w(>f?i3Ydaj~8g47-5GCh3+Q^(gEmC z3_afAn<(C(p5ZNYB9~h<n`n+cuNZnDUs;jl=^`l9#Ek4xk2X)cqM<*$x(_*j=JU3? zgeOZ7Ad<>4eo*}TWCxq{t!_aSCRkL$UCn2t8ClDE)9z&5o@YQ=f{x0vZ3k^;!Z3r{ z9Ks|K)V9cgTJaa}U>6TQoBn=@0Nn%0w`&M7`p@wM%O9;vf4;!aw(^np*9mqYF3Tnj z%?j%zX_>A~T=4*VD>1!GU6gfw-%z;u!g2T67=baq1dZXfWc8rug0Z|mv-@;Y*^=YI z(r*n}1iz9LSoJrjDf%DXt=L^8K;MI921MkEi3-G$ua*uMmt0fR90*>gUhl&++b18m zr+R&slO8y)-NoY8AjZF0(KkDkmAaXdz+0T(%aoy7rQhh)J83um`_26Vi`7X<-@LKW zVW3NxSTlhA2CbVdL<Fox1+x86_W|U?@zmH0R7f%THnN$>I!~O*BX|KIZ)qqRjg3?N zrj<H}EgDJ{LGsd&+agg|DRu@OA$o;<fdK4au(gSRHYss}yK%43Z2vBAngBVc!J!5~ zTJx|+Vjy$WgiQc@6B_8iK>AUE;{-Mf0HlTh6QGBuF~ACb5nEVR77Dza%8HYUK0kZ! zv<6G*KHC%#k&Ht%ViC%4RuVnBhyj1Q&sI!FD)ghWiEOL;$o73yDG@Ox!d^~9w9`-| zM$!d!mbW-myfHfo!KTi12qVDZAtDenDpU&xB<w@^sIZ`Ym<0pmF9NZqLam6vfXpzn zZDLjPgIDtpYG2&uB!Dnza1S9a4$j_2j9O+Sn4^6cGl3K$N9sOk2}@EWrnC;G9MK^} z3Y#njN~E!#Vz7$M`%Gp6U*XtOv5A)IK$qs!WeSR$aPxo;IX#Ckqq1#d6FSgrd~}q5 zQ^W-_8=Vj{g(E9Vvp>fof9<l!Jz^!Hlfs;mZqIwY2e1tg5pRhZ3g3}22-ajq@+KYm zSA&g)iB;M5^B_Qg2)H)}=1u_mV_;7a@SB-H8?28v6{<!I3)y~v;m=mm%uaoAJ6bww zjY)%gV%bF;+4ImT(gctYHWBB*;evsDqkxDa>@qu`ODs8hd*H=ga2o@h&wy|{rs*2p zJcUD66Itx8r}93^-t}NPFA{o51G0-rw2zF~*-!tf5v`ENnvF$d6A>f;n{V?i;%-I} z0V(E42AL$KMkc+-AY(8r*$j9)fGwH83ejY1r@={BL<|F7M2Xhhj`%(R3!#98DM0B= zfIkg(9Rm#TfSm@w1BvQqFkl{f7S$-b;p*czcOHAg;-YuFcz4;juiQLKNw@pX)=CA| zVbaVOvYXIFo;zL>RG=Rnx_}0sO3Ko8;JAVTvpxdz5aR@~cR1li-pnEBRcfAre?*5z z1fJK|ZQg4gi~K8dkF({`CjHSmgT>pJJzX;&a-Z!jI%|`d!8(+jOk`_kBwcn0(`JBP z+%F^$VKOZ6U<S~E{*cN0%-bXO2Klkz;xpl2&*FK!4VoS+<YlKm%6)qb_q@*L!sk0j z1q)Fh_sg)$wwAa=vT4%+9rRl)w1npatpDL}r7?1v=+D<_to&GZ<6n2p9<Z+;-$|py zf1rV$QF3)>i;wnL{>miXF?o8=gfg(tRt`w|Z;0hRk*yd<fqzJDr^DMtl8T6IQ-nuT zjQm=W&{anA5E@lz5?eGxvBLqM7(-bYu{SVKWjY{$0xM+h#=4^)3m{7#YE|a^dZzZ% zi}(1Zs3UuwNQyKCNEY$EH2+*-Hs|SFC1$_!nKOqYCjF8|8g4sV3~+06KgDtmq?HNg z#KImYv2aqrZHrz91Sls4Y=ui$!yrWV0ndK<%o7pO=;~+&%K!tOILLBv9}#^ASuDct z6;<H>D`tp@h#?{dlGp+qYi?_X(W&{#=$Lttr&}N3L37C&%{~HmVuLZDGiZ<suHx?w zlobHfyj_8$041nkRdi+UB9;9&^`*v*^HNdHdu+ov)|?$*o|M`zEZz=U@xo@cn>h9X z9Gj?9$-sW-7g_cJBAe)Ot;2V=Z{^-BCNXd(|7%4lcDhK`1;6OY@_M?*lOI(+Aw&?c z8Rm`q7uyF$d0}TOVK-s5HWwT1eutg9SUHbDmZOuOi!`XhSi^Q%0(O1OUO=S@z#u@Q zncQvrr8gnJ-|RX7?B&?s(*LbY()OcVxe{aX#wQpJ{VRRj5Y|Mx)=XXs3ccIxwe1%t z*PQaAIa8qJVOzlci!CnO&G-FU3fo$W1pITCS~|%s)~MFfYppM?U4MGF6(`mD{AFv+ z?^bGxZ>2yR%Wx~JSzGhtw$>Ey`nI;m{%w`JZQU2!TbJ5;A7{}7+6UU&M^UX%N<Lkn z<K4xMDKlg>8a4m8W3jDcd8uRdcL#$h(7ArGbMso~_TA3i$DJSAIzI(=R%4N~OP${? zzCFD5_WRwp$B*CsYI}RK^!D%Xw}4NbrNoY}0yJ1O4N*ixw$oVKY5)ChpBCskrOh%x zr}0F0@fCF)-esM8*(H3^B_h}@rrj;!(p`(|k`C%V*WN9^+^x9WQH=$h*6w+C4Rt=c zN8_Yht*A$Px#!YJ4|cTYVtbFSORrIMuc3U8N_(&IGA)}3b0@-_0ev>+eYS#qj;wuw zbG<IFx{I)gd+2^I?S3DZe!u8`d{MuTIiiT(7jn{15F7~A9tcmRq1$_vT?YRA?hW&R z$D9mA&<A4V2jfl#@EDe;qCp@twYr$vn0_*tDLC{{dnm_cC`&LV_|;%x`%uyHQ1Qu- zaP&Z=d>2LgEuH`mNbQd%!pfG1_skGs$H+SEkp`EMH_;=_MI)^)BU~nknv)Tl;Apq@ z=z~|i&&`K>T{`i&g3;yC@srWq`!H(e==3tYd><)!f-I-Qr<cc8PsSL6<E-+-1KJ(y zpE{D{J0dW{@1n<Rg2v{}yB9~tzPL<$kDmDSk>&nE*Rjj!R_f?+Dy#@YpH70Y?n59t zbYuq|JU0Aid1$|AZ0Ur~<vPi+0>{t*XI6mD=m{R7fz6W%`foZOdrwM-MU)1(Ngck) zfII(scYch8{m*0+Q*iQ|_N2;_DJ`8*SoP$kF@Ppx@?u)AsKUEs!Or@9XcQf(W{z@3 zvs5z>&P1p)16C$7z4Q^8k=fCVhD2d|S07Jb!}dBq>1biFlrcI=sK5#$2@9Bgk3#(( z?384iDni3AS5J!WLp~3%V05Omo}dzcKsp9!xeTZk0D6ruvmu9+MY9lAI@EN!545NA zga(?aW?w(eW{q`Re=_^&_rmJk`THHv6ynU9+#I;Qvp{FYd4I9vI`YX_XEJ3{lRz#d zLeHc@EAA~^a+wxW=xo6tSkNrB45SwoSVmmt*oT+^Kx}}8mEXvG0+3RT6yE>06-xXx z%RJM3WmX9FnuwACz@AhiO+Ao<Y2f-NGlp|Zn*wmmXBH<6ixmxk@hE5=1Bl}0Vm`Cr z>8pQ=P=08j-Dl_-Gy+ufwkH^<vcG6R&)vAT@=mBz?GMR;%GgAq(iu=q5lG#=<y)B$ zWdQ6%zBBjp(z%#kDiO{~1&VgAqAsm&Rj<7_+t?oKC<K7y_MuK#hy&pLYTK%wVrSJp z#L5FALID~JL!~X>nh@WgxS*VA03j^Wuyb93b(yK%*+76w5|H`(fG7`SOXl+YOQg65 zbnYW^vlXHC37JF(q!4GTXdn*^Dh9B#l0s6Tfpue+!`ybL#FY@@Y&8>u9O>BEzq{<n zAjRw>9^V_Azlf~ZN4hJ5j|*n01eUv&z4dfBiHca3dw*VN>oS8ynlgz<n>*t==X?f! zHD;oj3U)xR<C8m{bnYz3%~7gn8W|sJXdefHt5bzgZR0yjFOec1&@vqAbta00o_O{b zQ9<dr;e?z~U|ASpxu!I>bayS|(#H)HDx3&)1Z-IRfw)n@H-b0T)25s+{il<Pl4d|T zD2#OWy@$meA)S)dxLskwuG=2V>&(vsf3`h7f6n$mf~@vWQkOrZlk0-^zMd?E21h>? zMiq4KvAq5I+T-iG&fL7&*Vhabk$o{V4T(65TK$V)q<5TWo;_H7{Ep~~s-{dvWB+>_ zJiV>mSw#dn5kOeX*mXD1BTJMv5&T*N#RC9qQ2;?T+Xw<kQuxpW4HBmUq{cfo*<dD- zpY3iO)f1qsXds3N9<%_91HkV7D>VeD3IU`=2VTG-sRYFEy=BAO$OOW7(M(Vy5oNId zk`oQ>a#O^e1!@*|y!gUmUo)w&0%YB<N!|xv`uwi;(sVQZ(?m^20}YCQ4^$HQF3ebA zbS#Iy|BlT>T`aEpDU2fBI8J`uQA1FDq_|q^(Zj|L7Q%v%mzEI#uqYPF3s^AL_$BLs z)C->S<$%0qAj2~umorzbJD@L!9qCl4HS-VTGSx^gjeLh=L((19K!7;VI`9DSr}uv` zXol?g!MFF_jYJkUs_2ceA1Y|jt=Jy`YZPw=LeprFaw}06!lz;PjB;wtNbV|+$1cvJ zZ06-vKQ0<yt>{`exz@ZtRMJns(plPdO*ZZv&#QlbFP&0QD3H%4fro5t{c^o8wK}vw zl#?Z|0`B2ltYVS^&vaI}X*#_z%-X{)Yu@p0c;=&Ag)cv5|6tmu8qG@2NfdDW;?jES z^J?E?$N$_q@BR6pfHB$k=uTwg?SK3coxoNxxNUPapb{$A=#r}kHOq#T<trLLkVG4# z+O+H&d$4fxynsElyF)(+I7+lBW4f*BtxbQ+g~a*X&C5}WD|X_jrn}s?VNJJ@y-6y* zWk?<!iz)$MXvz9Cq*<(;_JNQW_r%1RZ<F{9oN|12RcCDBujAk7Uq?Rze6ipZ0b6Ab zRVN6Kz0Aw4Mr^=U3y_^lix^m^>I@ZW8z5SiyZa)gOsf&ESpsodSN5lEoLZz{QMAZJ z9x><VEC~S3Qe@R7%Y`qkT#bb14`q#QB@+yB>maz}2YgS4vQjdnx8RJ)7YXM=s#s%o zz)uiNuKJ{;%F%MK=hFGN5M}cV0}}P-$`hk<lKglZwEU{DAez;V{pwz>qffVmy1h~M zsM4s)#;aU?L4(X3n{ThGnDQ2U|B8e{&<HL8>lIf^<MdLp(B09~-<uc{dv^GM@7!7! zvS8S>*3M33^K>3hZv0n!r*pX}3QZny4|3{{vGtDbvC!|YY3$-}=1opr>?N`h(x6HZ zqg_B8pL2ZK!}AUM>%9v>ceg}WeEivZNd&y4C_lQlbZp5(`Mxf{`Qq$~L(W0wxJ{1u zBVEB)de0u1phagM<QNk++?rbtLSSFljk~kYj+?Hte5Dd@q<ft2Z+=x3dQ*Z$n9n$1 zInCx9j@x9iamXby@L{QB%pYj8U4=%Du1O*OcQsH=s7>=!7$<NsHFvtOwqK4Y@-oj_ zV-hk%DzQsUgnRq<F;5H0$)R|p*wQ~B<fKSddG6HaQz`D|i*+NZbAD~XP4CHVujgoJ zjCxLKPwwW7aD`V^Il)@js?GaO8Fyf<&R4z05R{8TWLRY{N{A0%wfx*YYby@iQEi$t zTe8Hv+EWh|H^7_NhDud>$rA|wx=Iq-fTT8;L3x~NwvINA3+P}MOt~1jmXzV^<ehPr z^}L1ru^2?oJYF8EE_ETY5<$TV_Jzk~oMCly=)s;s|Cr`Tkvp^dN%^9^zjof$yyp>j z>6MB1x$b@q4rxK_5=G(6>lNmb<LGKGgYKIVgb9hoZh$xih{{G-9gKs(mdyj~y*-TR zH(=BiB7g~RP_poL16M6T;4x-;Y0lrL-!kpDW&c|O%v+W;a`lUaIlr`J(X>M|x3CDM zRKrPgujeE#19)LVpU4?~Y1_?pR?%H|c*&-Q8t|)$EotOJF(5%&a6`g>#DlL-!$^tU zDiB2j@w5X#{0&~VW8M0!uDWnBj0iZ~`)LTFOK~B2J!;`)4pLyJnU0eaWy2WC5yi>* z2#A^j@R7vokD`KO&by^33sWutOk^B)?hK2C@XNZMvxhiDsfusxCP)`nM7c;Z?!HRJ z89C3^UFz3g{rW{uxe$Qh$?RHLp-yRi7FEhQCz6iqzIAF!8-TQm)H`KKLQc#ZiL@}+ z5+7%(on~MvAU-#F9}j}Gf`|P=Y^zKae3a3GL`2;4eao{v$%&UD#n{(90jyF$tN&c+ zc}$X-o~cJoUZgGd;kOKkaTg_c)jWD%YsdLiV;w}sP*r~8#W-fs%r?`u#Fw+=cRIO< zrGVAW`k;sF6<vV`(#_S7ua|1qBVliph;UCaQ+W6litmM|0-yo7M6Kxpp*R>l8pM6> z!`Pj@5lhnZM1FKZ`F|aL0j!C*kY#SQWpfL~x}O;~gq!i_ivWfzdQ$N;ZWeO-0ba6k zX|;lKskyzI*Y@VsY2lm_xlFSXvEREcZWrLuJPs%WLwOua=7`H;A9otUk*Q}4F369b ze2n^rcwq34(%?>pTE_J`7Z}Ql;mXd*%5nz2*iI4hNPD(l<!364e!P{d7#2rQg{O(Z z-pO1C1LON7jdhWF(TNmXOTz8rAr|qXEr``Vsh5wKh-@7=-EJDh=N|`qzsZAma1%$i zoJP7d@NjoJabB}>DvDVkpZ@u~`X%Wa&*4Lct{@laTq+plf?j*vf4>hKRM+&bFaC4} zUohHVr8jHwV{K1uD!&K1GsG9rR0!xY)g|fISR+ks-tlQlnQAEd&h<(gUFgR&omNPj zK~5F~lS308n4K73IF)H|$929V-c3}>c|jsBFbids)6FYGJ7X8hw1)pBnd&0C!C(nW z4oK$|cb2)yjg`a&i@G@^=!qltEApSbR4*&FMiNG(`a!13c(U;|VUw8&^@3`Bx7k;{ z_+O5+;>AER$jSRSRPVBp2SkUuWUMyS3AYX_$Sn%i3hd%~Y8?lBY|tmtEe_u4od7;; z2eDaVKu`l+DV964$YlEXdMXjP+ml$f<mG9XL;*`^pzV%5Tz{ZJsLRAIUhPR9mHl6> zk?8{N{6r$2rAtldjzi_uhrNk-BC@d61&>?-jzOJfBSw!*%sD^$+J3R7QoxAChoHCB zWS}VZ`*oZW0&PG6^8@$d4IebbkwhRW4D+-63{mEf;4O%XOl}Uo8vrhnl$zwUGD7^E zIVHZd&N~oUNP1HhQ7Iv*z|cjYu{DVTzkt`UnJ@T7z(%&H9<q_j1DBiRs00s5ljZQ} zP~97_a2nuypM9Jb^*rJpk1Ll$;!6Qs%A>Pd>g}I+9-d~Mv5`z0_*~M|Ax^b%^!c+o z@zP97NB2P<Yuh;gmA2Q1?K@rzzP&zo0<_lFkslH@{U7G-{$MDr8~FNtAXqK3dal*^ z-Hg9|YRiDw$*0zxrq}%N#cy#bH>*g8)z*_k{fV^dHx2HeDoYuVBQ5jW#@r9Tydcc< zK6BK~)9(A~bM~gFb@#8v&G;`dj~~jdKCZ~iXU2aql=3mY>@V%q&g&>37>)PIKHfy} z>_?aixyCHs`QUiAukKFbhBN5TdbZa^{Z7dK)6m<U6Y)`2w@lLB=4;h8h#eL)G$hUf z&RLo`o5dNLtgs|iam;Y@2wY78a5cTpKK1@FgmHkXN5$>dcfvlUG<vu7WOB^t3!v}o z0844IYdOD?Gf=E;ZTn#FdhM-mr1L~Yw*xSoOT7K`tCm4pQD}X~<CK!gRPLWy&Yrp) zT-kfJUBZXDC3<g>C!KBcmwrb+(-4U-T(~IYa{1afh`0!e_oPdfghZrbdz}PiPs-7P zx<44w-t{$HrQH_}Q%de6n&QFBVY=KeHJD1_J?bR=3LI1%2U4BR*XZrJSl=yYUaUQh z(ra%2Z(mPWLU%+Q0z2$cSJ7Xf>#1$F8<2X9dz)$5y{6``bT)guYkOO;kW+%aST0?? z`CbjyO4ju*YlA*JyFPm#!)BVnrJ%k>4Xo~FxnhHMOd-iA)i4!o@R``@4(a#c>i3lB z_hRj@;_P#^>-Y8P_j}dp*xv1G4s*+gEa*Z48;mGjMigC=%O~0EuP#~c_S%XJgsKdL z84QHm4czh>2s<R1Fd&4SfjgxGQS##WRGRCwY$#(O=5QePWWa}Rc-KJQQiOB~J4mt{ zO!OHfhYu!^1`{PnkrIOs8U~puy~aviSKf>arXLPwK!!58{&C}pY0JtF4Tf^;hH`y| z^1`v%KJxSRZwpF?3LAzV_YM_J4?Wo&Dn1-~3K^zw4L_3@4nL!a&nK7K4VU>0zX%^L zCk<ER3|E#8S2Ya3>>YkJJzTvxTyr@58ZtuV8mW~SsZ$v#Cy{%yhe~`#-h_`dkw%(x zMp{ZoS{uw-B%t|4q}wv^5DeT)w9Va^+$AyEtuoqUFxqQ3+UGOcA3i!j8Xe3T9V#6i zZWtYj9(AXnZ8S#44@V~;V|1>uNr|y{Dq~XyW0iJhwOymL;bU{8vH6^_h0?LbhOwny zi{9zcc9lF+3`iYIVupJY`F4$ZMB03glQ!+fw|vI8!^d|><GVTId!^$a8pc2Nj(?gS z|GYW=<&|ZeV9hkw#8-)lZz>Z91`~&NR+TPeKE@Cnkz`MV;GCd1K%!^!ggtG-lQHpE zkQ{Jqb-e-x+=7K1!$Q#iXm)s*2OV~c4o{>ba_KB(bYvqP)kkNYp|fq#*^lTP&`C7+ zBqy8oe(%7Gp)7HHoE8?yP_caSZJaN6lD};7Oyi_L-y|Q@YTRW)_{h2{I?-f5K~(ac znCd%m!*>$)?<9TSN!@xUo%l{B?VU+v;tN(A*}ix3Gw&3(-iemIn{=_jCr|t&O?VO^ z%24tjK^XIoAlVCV`xk<{&PN7U!@%~q(0#L0GgCTSQ<sjWE<>lW+|#;=xYMdUS|UI_ z0)%5QOLqSeZz5SRciN<E+O%=n?6W04IdT7F((=fzEE;OXNc0w&u~D6|HJq`tpRxCy zakw?(m^kB<YkzeMYK2cMW1X>nGUK{6<90OTu0wY2n4z;y{nVcFwwU^@ZL4-<rI9;z zgAW!`VSCX67v_Z1>zfUlnGN2W4LNc^&)BWX=Z$41DANFX6%e7w>28rW<G$(JiF1*; zb9eeI@$;ireRF4@K-`RB`2D$9=sb~oK2CBzUUfdfaGqp8pXlpEe$sE^G<@	Jy?s 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� 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 literal 0 HcmV?d00001 diff --git a/docs/images/designer/tests/toolbar.png b/docs/images/designer/tests/toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..8728ce7730dcc0fd7ceac615278eb907957c0814 GIT binary patch literal 10841 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 O1r%k~WU8e;2LB&e>>1hs literal 0 HcmV?d00001 diff --git a/docs/images/designer/usages.gif b/docs/images/designer/usages.gif new file mode 100644 index 0000000000000000000000000000000000000000..d637f46f14326ee3b383bbfe5cdb20e1309f4c2b GIT binary patch literal 72909 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≷2w`=#MO=vu*=Hma}$e)Bst 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Ⓢ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℘nHiW156x-6g}}ER0B&+|p2C>1=*| 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 literal 0 HcmV?d00001 diff --git a/docs/pages/pmd/userdocs/extending/designer_reference.md b/docs/pages/pmd/userdocs/extending/designer_reference.md new file mode 100644 index 0000000000..de1293707f --- /dev/null +++ b/docs/pages/pmd/userdocs/extending/designer_reference.md @@ -0,0 +1,254 @@ +--- +title: The rule designer +short_title: Rule designer +tags: [extending, userdocs] +summary: "Learn about the usage and features of the rule designer." +last_updated: August 2019 (6.18.0) +permalink: pmd_userdocs_extending_designer_reference.html +author: Clément Fournier <clement.fournier76@gmail.com> +--- + +## Installing, running, updating + +The designer is part of PMD's binary distributions. To **install a distribution**, see the [documentation page about installing PMD](pmd_userdocs_installation.html). + +The app needs JRE 1.8 or above to run. Be aware that on JRE 11+, the JavaFX distribution should be installed separately. Visit the [JavaFX download page](https://gluonhq.com/products/javafx/) to download a distribution, extract it, and set the JAVAFX_HOME environment variable. + +If the bin directory of your PMD distribution is on your shell's path, then you can **launch the app** with + + run.sh designer on Linux/ OSX + designer.bat on Windows + + +{% include note.html content="pmd-ui.jar is not a runnable jar, because it doesn't include any PMD language module, or PMD Core. " %} + + +This is to allow easy updating, and let you choose the dependencies you're interested in. +The available language modules are those on the classpath of the app's JVM. That's why it's recommended to use the standard PMD startup scripts, which setup the classpath with the available PMD libraries. + + +### Updating + +The latest version of the designer currently **works with PMD 6.12.0 and above**. You can simply replace pmd-ui-6.X.Y.jar with the [latest build](https://github.com/pmd/pmd-designer/releases) in the installation folder of your PMD distribution, and run it normally. Note that updating may cause some persisted state to get lost, for example the code snippet. + + +# Usage reference + + +The rule designer is both a tool to inspect the tree on which PMD rules run on, and to write XPath rules in an integrated manner. This page describes the features that enable this. + + +## AST inspection + + +![Designer top UI](images/designer/designer-top.png) + + +You can enter source code in the middle zone. +* Make sure to select the correct language and version for your source code: + * Language is set app-wide with the blue button in the menu-bar + * If the language has several language versions, you can select a specific one with the choicebox just above the code area +* If the source is valid using this setting, the tree to the right will update to display the AST of the code +* When selecting a node, the left panel updates with information about a node + +### Selecting nodes + +There are several ways to focus a node for inspection: +* **From the tree view:** just click on an item + * Since 6.16.0, the tree view is also searchable: press CTRL+F when it's focused, or click on the `Search` button and enter a search query. You can cycle through results with `CTRL+TAB` or `CTRL+F3`, and cycle back with `CTRL+SHIFT+TAB` or `CTRL+SHIFT+F3` +* **From the crumb bar:** the crumb bar below the code area shows the ancestors of the currently selected node, and is empty if you have no selection: + +{% details Ancestor crumb bar demo %} + +![Ancestor crumb bar demo](images/designer/parents-bar.gif) + +{% enddetails %} + + +* **From the source code:** maintain **CTRL** for a second until the code area becomes mostly blue. Then, each node you hover over on the code area will be selected automatically. Example: + +{% details CTRL-hover selection demo %} + +![CTRL-hover selection demo](images/designer/hover-selection.gif) + +{% enddetails %} + +### Node inspection + +The left panel displays the following information: + +* **XPath attributes:** this basically are all the attributes available in XPath queries. Those attributes are wrappers around a Java getter, so you can obtain documentation on the relevant Javadoc (that's not yet integrated into the designer) +* **Metrics:** for nodes that support it, the values of metrics are displayed in this panel +* **Scopes:** This is java specific and displays some representation of the symbol table. You mostly don't need it. If you select eg a variable id, its usages are already highlighted automatically without opening the panel: + +![Usages highlight example](images/designer/usages.gif) + + +## XPath rule design + + +The bottom part of the UI is dedicated to designing XPath rules: + +![Bottom UI](images/designer/bottom-ui.png) + + +The center is an XPath expression. As you type it, the matched nodes are updated on the right, and highlighted on the code area. Autocompletion is available on some languages. + +Note: you can keep several rules in the editor (there's a tab for each of them). + +### Rule properties + +Above the XPath expression area, the **"Properties"** button allows you to [define new properties](pmd_userdocs_extending_defining_properties.html#for-xpath-rules) for your prototype rule. You can also edit the existing properties. + +When you click on it, a small popup appears: + +![Property definition popup](images/designer/property-defs.png) + +The popup contains in the center a list of currently defined properties, displaying their name and expected type. + +* **Adding**: the "Add property" button adds a row to the table +* **Deleting**: each item has a "Trash" button to delete the property +* **Editing**: each property can be further edited by clicking on the "Ellipsis" button on the right + +#### Editing properties + +The edition menu of a property looks like the following: + +![Property edition popup](images/designer/property-edit.png) + +* You can edit the name, description, expected type, and default value of the property +* All this information is exported with the rule definition (see [Exporting to an XML rule](#exporting-to-an-xml-rule)) +* The default value is used unless you're editing a test case, and you set a custom value for the test case. TODO link + +### Exporting to an XML rule + +The little **export icon** next to the gear icon opens a menu to export your rule. This menu lets you fill-in the metadata necessary for an XPath rule to be included in a ruleset. + +{% details Rule export demo %} + + +![Rule export demo](images/designer/export-example.gif) + +{% enddetails %} + +## Testing a rule + +PMD has its own XML format to describe rule tests and execute them using our test framework. The designer includes a test editor, which allows you to edit such files or create a new one directly as you edit the rule. This is what the panel left of the XPath expression area is for. + +See also [the test framework documentation](pmd_userdocs_extending_testing.html). + +### Testing model + +A rule test describes +* the configuration of the rule +* the source on which to run +* the expected violations +* a description (to name the test) + +When executing a test, the rule is run on the source with the given configuration, then the violations it finds are compared to the expected ones. + +### Adding tests + +Tests can be added in one of four ways: +* **From an XML file:** if you already have a test XML file for your tests, you can load all the tests it defines easily. + +{% details Test import demo %} + +![Test import example](images/designer/tests/import.gif) + +{% enddetails %} + + +* **From the current source:** A new test case with a default configuration is created, with the source that is currently in the editor + +* **With an empty source:** A new test case with a default configuration is created, with an empty source file. You must edit the source yourself then. + +* **From an existing test case:** Each test case list item has a "Copy" button which duplicates the test and loads the new one. + +### Test status + +In the designer, the test panel is a list of test cases. Their status (passing, failing, error, unknown) is color coded. + +{% details Test status color coding examples %} + +All tests passing (green): + +![All green](images/designer/tests/all-green.png) + +A failing test (orange): + +![Failing](images/designer/tests/failing.png) + +{% enddetails %} + +### Loading a test case + +Each test has a piece of source, which you can edit independently of the others, when the test is **loaded in the editor**. Additional rule configuration options can be chosen when the test is loaded. + +Loading is done with the **Load** button: + + +{% details Test loading demo %} + +![Test loading demo](images/designer/tests/load.gif) + +{% enddetails %} + + +Only one test case may be loaded at a time. If the loaded test is unloaded, the editor reverts back to the state it had before the first test case was loaded. + +### Editing a loaded test case + +When a test is loaded, *the source you edit in the code area is the source of the test*. Changes are independent from other tests, and from the piece of source that was previously in the editor. + +When a test is loaded, an additional toolbar shows up at the top of the code area: + +![Failing](images/designer/tests/toolbar.png) + +#### Expected violations + +The **"Expected violations"** button is used to add or edit the expected violations. + +Initially the list of violations is empty. You can add violations by **dragging and dropping nodes** onto the button or its popup, from any control that displays nodes. For example: + +{% details Adding a violation demo %} + + +![Add violation gif](images/designer/tests/add-violation.gif) + +{% enddetails %} + +#### Test case rule configuration + +Rule properties can be configured for each test case independently using the **"Property mapping"** button. For example: + +{% details Test rule property demo %} + +![Configure properties demo](images/designer/tests/property.gif) + +{% enddetails %} + +This configuration will be used when executing the test to check its status. + +### Exporting tests + +When you're done editing tests, it's a good idea to save the test file to an XML file. Exporting is done using the **"Export"** button above the list of test cases: + +{% details Test export demo %} + +![Test export demo](images/designer/tests/export.gif) + +{% enddetails %} + +Note that the exported file does not contain any information about the rule. The rule must be in a ruleset file somewhere else. + +If you want to use PMD's test framework to use the test file in your build, please refer to the conventions explained in [the test framework documentation](pmd_userdocs_extending_testing.html#where-to-place-the-test-code). + + + + + + + + + From 959c98c906611e1061bc8ba14508ade8eef14b4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 1 Aug 2019 00:57:58 +0200 Subject: [PATCH 355/371] Fix dead link detection for image links --- .../net/sourceforge/pmd/docs/DeadLinksChecker.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java index ca2e400942..256872ea05 100644 --- a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java +++ b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java @@ -49,7 +49,7 @@ public class DeadLinksChecker { private static final boolean CHECK_EXTERNAL_LINKS = Boolean.parseBoolean(System.getProperty(CHECK_EXTERNAL_LINKS_PROPERTY)); // Markdown-Link: something in []'s followed by something in ()'s - private static final Pattern LOCAL_LINK_PATTERN = Pattern.compile("\\[.*?\\]\\((.*?)\\)"); + private static final Pattern LOCAL_LINK_PATTERN = Pattern.compile("(!?)\\[.*?\\]\\((.*?)\\)"); // Markdown permalink-header and captions private static final Pattern MD_HEADER_PERMALINK = Pattern.compile("permalink:\\s*(.*)"); @@ -78,8 +78,10 @@ public class DeadLinksChecker { public void checkDeadLinks(Path rootDirectory) { final Path pagesDirectory = rootDirectory.resolve("docs/pages"); + final Path docsDirectory = rootDirectory.resolve("docs"); if (!Files.isDirectory(pagesDirectory)) { + // docsDirectory is implicitly checked by this statement too LOG.severe("can't check for dead links, didn't find \"pages\" directory at: " + pagesDirectory); System.exit(1); } @@ -111,7 +113,8 @@ public class DeadLinksChecker { linkCheck: while (matcher.find()) { final String linkText = matcher.group(); - final String linkTarget = matcher.group(1); + final boolean isImageLink = !matcher.group(1).isEmpty(); + final String linkTarget = matcher.group(2); boolean linkOk; if (linkTarget.charAt(0) == '/') { @@ -168,7 +171,12 @@ public class DeadLinksChecker { continue; } - linkOk = linkTarget.isEmpty() || htmlPages.contains(linkTarget); + if (isImageLink) { + Path localResource = docsDirectory.resolve(linkTarget); + linkOk = Files.exists(localResource); + } else { + linkOk = linkTarget.isEmpty() || htmlPages.contains(linkTarget); + } } if (!linkOk) { From 46a8d87fb7a76a187e6f959171a67eee9562075c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Thu, 1 Aug 2019 01:37:32 +0200 Subject: [PATCH 356/371] Try to fix confused image reference Build of #1956 is failing but just on macosx... See https://travis-ci.org/pmd/pmd/jobs/566211322 Idk what's the problem, maybe it's because '(?!)' looks like a negative lookahead --- .../main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java index 256872ea05..1ab25d40a6 100644 --- a/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java +++ b/pmd-doc/src/main/java/net/sourceforge/pmd/docs/DeadLinksChecker.java @@ -49,7 +49,7 @@ public class DeadLinksChecker { private static final boolean CHECK_EXTERNAL_LINKS = Boolean.parseBoolean(System.getProperty(CHECK_EXTERNAL_LINKS_PROPERTY)); // Markdown-Link: something in []'s followed by something in ()'s - private static final Pattern LOCAL_LINK_PATTERN = Pattern.compile("(!?)\\[.*?\\]\\((.*?)\\)"); + private static final Pattern LOCAL_LINK_PATTERN = Pattern.compile("(!)?\\[.*?]\\((.*?)\\)"); // Markdown permalink-header and captions private static final Pattern MD_HEADER_PERMALINK = Pattern.compile("permalink:\\s*(.*)"); @@ -113,7 +113,7 @@ public class DeadLinksChecker { linkCheck: while (matcher.find()) { final String linkText = matcher.group(); - final boolean isImageLink = !matcher.group(1).isEmpty(); + final boolean isImageLink = matcher.group(1) != null; final String linkTarget = matcher.group(2); boolean linkOk; From f9d8898f7ad998fa55872a5aa55235eaf16652a4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 4 Aug 2019 10:29:35 +0200 Subject: [PATCH 357/371] [java] Fix FP for UnnecessaryFQNRule with sub packages --- .../UnnecessaryFullyQualifiedNameRule.java | 12 ++++++++++-- .../unnecessaryfullyqualifiedname/TestClass.java | 11 +++++++++++ .../subpackage/MyClass.java | 10 ++++++++++ .../xml/UnnecessaryFullyQualifiedName.xml | 15 +++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/unnecessaryfullyqualifiedname/TestClass.java create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/unnecessaryfullyqualifiedname/subpackage/MyClass.java diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java index fd248a50f9..66e892edb0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java @@ -184,7 +184,7 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { if (matches.isEmpty()) { if (isJavaLangImplicit(node)) { addViolation(data, node, new Object[] { node.getImage(), "java.lang.*", "implicit "}); - } else if (isSamePackage(name)) { + } else if (isSamePackage(node, name)) { addViolation(data, node, new Object[] { node.getImage(), currentPackage + ".*", "same package "}); } } else { @@ -240,7 +240,15 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { return false; } - private boolean isSamePackage(String name) { + private boolean isSamePackage(TypeNode node, String name) { + if (node.getType() != null) { + // with type resolution we can do an exact package match + Package packageOfType = node.getType().getPackage(); + if (packageOfType != null) { + return node.getType().getPackage().getName().equals(currentPackage); + } + } + int i = name.lastIndexOf('.'); while (i > 0) { name = name.substring(0, i); diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/unnecessaryfullyqualifiedname/TestClass.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/unnecessaryfullyqualifiedname/TestClass.java new file mode 100644 index 0000000000..814ff50461 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/unnecessaryfullyqualifiedname/TestClass.java @@ -0,0 +1,11 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.java.rule.codestyle.unnecessaryfullyqualifiedname; + + + +public class TestClass { + +} diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/unnecessaryfullyqualifiedname/subpackage/MyClass.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/unnecessaryfullyqualifiedname/subpackage/MyClass.java new file mode 100644 index 0000000000..035b8728b1 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/codestyle/unnecessaryfullyqualifiedname/subpackage/MyClass.java @@ -0,0 +1,10 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.java.rule.codestyle.unnecessaryfullyqualifiedname.subpackage; + + +public class MyClass { + +} diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml index 25a35a57dc..034f13910c 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml @@ -575,4 +575,19 @@ class length { ]]></code> </test-code> + <test-code> + <description>False positive when subpackage is referenced</description> + <expected-problems>1</expected-problems> + <expected-linenumbers>6</expected-linenumbers> + <code><![CDATA[ +package net.sourceforge.pmd.lang.java.rule.codestyle.unnecessaryfullyqualifiedname; + +public class FQNTest { + public void foo() { + new net.sourceforge.pmd.lang.java.rule.codestyle.unnecessaryfullyqualifiedname.subpackage.MyClass(); // no violation + new net.sourceforge.pmd.lang.java.rule.codestyle.unnecessaryfullyqualifiedname.TestClass(); // violation + } +} + ]]></code> + </test-code> </test-data> From 1b7d0f857634d5fd96fe6200946cd128ae80cbd6 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sun, 4 Aug 2019 10:40:46 +0200 Subject: [PATCH 358/371] Update release notes, fixes #1951 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 5f63319150..4ce1108fbd 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* java-codestyle: + * [#1951](https://github.com/pmd/pmd/issues/1951): \[java] UnnecessaryFullyQualifiedName rule triggered when variable name clashes with package name + ### API Changes #### Deprecated APIs From 56a99794177012f7ae69fb2690decfde8396e8fb Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Sun, 4 Aug 2019 14:23:52 -0300 Subject: [PATCH 359/371] Documentation changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Juan Martín Sotuyo Dodero <juansotuyo@gmail.com> --- pmd-swift/src/main/resources/category/swift/bestpractices.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml index 037dd27794..e8d30354e6 100644 --- a/pmd-swift/src/main/resources/category/swift/bestpractices.xml +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -29,8 +29,8 @@ Rules which enforce generally accepted best practices. externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_bestpractices.html#unavailablefunction"> <description> Due to Objective-C and Swift interoperability some functions are often required to be implemented but - aren't really needed. Is extremely common that the sole implementation of the functions consist of throwing - a fatal error. Marking this functions as unavailable prevents them from being executed while still making + aren't really needed. It is extremely common that the sole implementation of the functions consist of throwing + a fatal error. Marking these functions as unavailable prevents them from being executed while still making the compiler happy. </description> <priority>3</priority> From 0f89950bfc22ea46934e7b773a848b5f6d7ce5e7 Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Sun, 4 Aug 2019 14:49:45 -0300 Subject: [PATCH 360/371] PR Review --- docs/pages/pmd/rules/swift/bestpractices.md | 17 +++++++++++++++-- .../bestpractices/UnavailableFunctionRule.java | 4 ++-- .../resources/category/swift/bestpractices.xml | 12 ++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/docs/pages/pmd/rules/swift/bestpractices.md b/docs/pages/pmd/rules/swift/bestpractices.md index 7c3deadd09..ff05637a8d 100644 --- a/docs/pages/pmd/rules/swift/bestpractices.md +++ b/docs/pages/pmd/rules/swift/bestpractices.md @@ -33,12 +33,25 @@ It's difficult to review the auto-generated code and allow concurrent modificati **Priority:** Medium (3) Due to Objective-C and Swift interoperability some functions are often required to be implemented but -aren't really needed. Is extremely common that the sole implementation of the functions consist of throwing -a fatal error. Marking this functions as unavailable prevents them from being executed while still making +aren't really needed. It is extremely common that the sole implementation of the functions consist of throwing +a fatal error. Marking these functions as unavailable prevents them from being executed while still making the compiler happy. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.swift.rule.bestpractices.UnavailableFunctionRule](https://github.com/pmd/pmd/blob/master/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java) +**Example(s):** + +``` swift +required init?(coder _: NSCoder) { // violation, no unavailable attribute added to the function declaration + fatalError("init(coder:) has not been implemented") +} + +@available(*, unavailable) // no violation +required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") +} +``` + **Use this rule by referencing it:** ``` xml <rule ref="category/swift/bestpractices.xml/UnavailableFunction" /> diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java index 9daa297273..21d71465ed 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java @@ -46,7 +46,7 @@ public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { return null; } - private Boolean shouldIncludeUnavailableModifier(final SwiftParser.CodeBlockContext ctx) { + private boolean shouldIncludeUnavailableModifier(final SwiftParser.CodeBlockContext ctx) { if (ctx == null || ctx.statements() == null) { return false; } @@ -56,7 +56,7 @@ public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { return statements.size() == 1 && FATAL_ERROR.equals(statements.get(0).getStart().getText()); } - private Boolean hasUnavailableModifier(final List<SwiftParser.AttributeContext> attributes) { + private boolean hasUnavailableModifier(final List<SwiftParser.AttributeContext> attributes) { return attributes.stream().anyMatch(atr -> AVAILABLE_UNAVAILABLE.equals(atr.getText())); } } diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml index e8d30354e6..d9bef9c21e 100644 --- a/pmd-swift/src/main/resources/category/swift/bestpractices.xml +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -34,5 +34,17 @@ Rules which enforce generally accepted best practices. the compiler happy. </description> <priority>3</priority> + <example> + <![CDATA[ +required init?(coder _: NSCoder) { // violation, no unavailable attribute added to the function declaration + fatalError("init(coder:) has not been implemented") +} + +@available(*, unavailable) // no violation +required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") +} +]]> + </example> </rule> </ruleset> From 89ede940d32e37f7e98c06c0c6ad14d956ce25db Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Sun, 4 Aug 2019 15:25:30 -0300 Subject: [PATCH 361/371] Addressed some PR comments --- docs/pages/pmd/rules/swift.md | 5 ++- docs/pages/pmd/rules/swift/bestpractices.md | 15 +++++++ docs/pages/pmd/rules/swift/errorprone.md | 41 ++++++++++++++++++- .../category/swift/bestpractices.xml | 12 ++++++ .../resources/category/swift/errorprone.xml | 16 ++++++++ 5 files changed, 85 insertions(+), 4 deletions(-) diff --git a/docs/pages/pmd/rules/swift.md b/docs/pages/pmd/rules/swift.md index 47e34a46c7..9bce958a67 100644 --- a/docs/pages/pmd/rules/swift.md +++ b/docs/pages/pmd/rules/swift.md @@ -11,11 +11,12 @@ folder: pmd/rules {% include callout.html content="Rules which enforce generally accepted best practices." %} -* [ProhibitedInterfaceBuilder](pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder): Creating views using Interface Builder should be avoided. +* [ProhibitedInterfaceBuilder](pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder): Creating views using Interface Builder should be avoided. Defining views by code allow... ## Error Prone {% include callout.html content="Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors." %} -* [ForceTry](pmd_rules_swift_errorprone.html#forcetry): Force tries should be avoided. +* [ForceCast](pmd_rules_swift_errorprone.html#forcecast): Force casts should be avoided. This may lead to a crash if it's not used carefully. Fo... +* [ForceTry](pmd_rules_swift_errorprone.html#forcetry): Force tries should be avoided. If the code being wrapped happens to raise and exception, our appl... diff --git a/docs/pages/pmd/rules/swift/bestpractices.md b/docs/pages/pmd/rules/swift/bestpractices.md index abc5bab0c7..280901e7fc 100644 --- a/docs/pages/pmd/rules/swift/bestpractices.md +++ b/docs/pages/pmd/rules/swift/bestpractices.md @@ -16,9 +16,24 @@ language: Swift **Priority:** Medium High (2) Creating views using Interface Builder should be avoided. +Defining views by code allows the compiler to detect issues that otherwise will be runtime errors. +It's difficult to review the auto-generated code and allow concurrent modifications of those files. +Consider building views programmatically. **This rule is defined by the following Java class:** [net.sourceforge.pmd.lang.swift.rule.bestpractices.ProhibitedInterfaceBuilderRule](https://github.com/pmd/pmd/blob/master/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java) +**Example(s):** + +``` swift +{%raw%}class ViewController: UIViewController { + @IBOutlet var label: UILabel! // violation, referencing a IBOutlet +} + +class ViewController: UIViewController { + var label: UILabel! +}{%endraw%} +``` + **Use this rule by referencing it:** ``` xml <rule ref="category/swift/bestpractices.xml/ProhibitedInterfaceBuilder" /> diff --git a/docs/pages/pmd/rules/swift/errorprone.md b/docs/pages/pmd/rules/swift/errorprone.md index d94255a80a..555ff0a4ed 100644 --- a/docs/pages/pmd/rules/swift/errorprone.md +++ b/docs/pages/pmd/rules/swift/errorprone.md @@ -5,23 +5,60 @@ permalink: pmd_rules_swift_errorprone.html folder: pmd/rules/swift sidebaractiveurl: /pmd_rules_swift.html editmepath: ../pmd-swift/src/main/resources/category/swift/errorprone.xml -keywords: Error Prone, ForceTry +keywords: Error Prone, ForceCast, ForceTry language: Swift --- <!-- DO NOT EDIT THIS FILE. This file is generated from file ../pmd-swift/src/main/resources/category/swift/errorprone.xml. --> +## ForceCast + +**Since:** PMD 7.0 + +**Priority:** Medium (3) + +Force casts should be avoided. This may lead to a crash if it's not used carefully. +For example assuming a JSON property has a given type, or your reused Cell has a certain contract. +Consider using conditional casting and handling the resulting optional. + +**This rule is defined by the following XPath expression:** +``` xpath +//TypeCastingOperatorContext[starts-with(@Text,'as!')] +``` + +**Example(s):** + +``` swift +{%raw%}NSNumber() as! Int // violation, force casting + +NSNumber() as? Int // no violation{%endraw%} +``` + +**Use this rule by referencing it:** +``` xml +<rule ref="category/swift/errorprone.xml/ForceCast" /> +``` + ## ForceTry **Since:** PMD 7.0 **Priority:** Medium (3) -Force tries should be avoided. +Force tries should be avoided. If the code being wrapped happens to raise and exception, our application will crash. +Consider using a conditional try and handling the resulting optional, or wrapping the try statement in a do-catch block. **This rule is defined by the following XPath expression:** ``` xpath //TryOperatorContext[@Text='try!'] ``` +**Example(s):** + +``` swift +{%raw%}let x = try! someThrowingFunction() // violation, force trying + +let x = try? someThrowingFunction() // no violation{%endraw%} +``` + **Use this rule by referencing it:** ``` xml <rule ref="category/swift/errorprone.xml/ForceTry" /> diff --git a/pmd-swift/src/main/resources/category/swift/bestpractices.xml b/pmd-swift/src/main/resources/category/swift/bestpractices.xml index 194910248e..0b6067994f 100644 --- a/pmd-swift/src/main/resources/category/swift/bestpractices.xml +++ b/pmd-swift/src/main/resources/category/swift/bestpractices.xml @@ -18,7 +18,19 @@ Rules which enforce generally accepted best practices. Creating views using Interface Builder should be avoided. Defining views by code allows the compiler to detect issues that otherwise will be runtime errors. It's difficult to review the auto-generated code and allow concurrent modifications of those files. + Consider building views programmatically. </description> <priority>2</priority> + <example> + <![CDATA[ +class ViewController: UIViewController { + @IBOutlet var label: UILabel! // violation, referencing a IBOutlet +} + +class ViewController: UIViewController { + var label: UILabel! +} +]]> + </example> </rule> </ruleset> diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml index 857555d3be..f1f0c6e015 100644 --- a/pmd-swift/src/main/resources/category/swift/errorprone.xml +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -18,6 +18,7 @@ <description> Force casts should be avoided. This may lead to a crash if it's not used carefully. For example assuming a JSON property has a given type, or your reused Cell has a certain contract. + Consider using conditional casting and handling the resulting optional. </description> <priority>3</priority> <properties> @@ -30,6 +31,13 @@ </property> <property name="version" value="2.0"/> </properties> + <example> + <![CDATA[ +NSNumber() as! Int // violation, force casting + +NSNumber() as? Int // no violation +]]> + </example> </rule> <rule name="ForceTry" @@ -40,6 +48,7 @@ externalInfoUrl="http://pmd.github.io/pmd/pmd_rules_swift_errorprone.html#forcetry"> <description> Force tries should be avoided. If the code being wrapped happens to raise and exception, our application will crash. + Consider using a conditional try and handling the resulting optional, or wrapping the try statement in a do-catch block. </description> <priority>3</priority> <properties> @@ -52,5 +61,12 @@ </property> <property name="version" value="2.0"/> </properties> + <example> + <![CDATA[ +let x = try! someThrowingFunction() // violation, force trying + +let x = try? someThrowingFunction() // no violation +]]> + </example> </rule> </ruleset> \ No newline at end of file From 85404876f4ca2a712ce655403752225558ad7370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= <clement.fournier76@gmail.com> Date: Mon, 5 Aug 2019 15:49:02 +0200 Subject: [PATCH 362/371] Fix swift source generation bound to process-sources By convention it should be the phase generate-sources --- pmd-swift/pom.xml | 13 +++++++------ pom.xml | 2 ++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 4ca080ae2d..1a36cd7acf 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -16,14 +16,19 @@ <build> <plugins> + <plugin> + <!-- this needs to run before the ant task --> + <groupId>org.antlr</groupId> + <artifactId>antlr4-maven-plugin</artifactId> + </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <inherited>true</inherited> <executions> <execution> - <id>process-sources</id> - <phase>process-sources</phase> + <id>antlr-generation</id> + <phase>generate-sources</phase> <configuration> <target> <ant antfile="src/main/ant/antlr4.xml"> @@ -37,10 +42,6 @@ </execution> </executions> </plugin> - <plugin> - <groupId>org.antlr</groupId> - <artifactId>antlr4-maven-plugin</artifactId> - </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> diff --git a/pom.xml b/pom.xml index 0fdb148c96..f61d60702c 100644 --- a/pom.xml +++ b/pom.xml @@ -304,6 +304,8 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code <goals> <goal>antlr4</goal> </goals> + <!-- This is default but let's be clear --> + <phase>generate-sources</phase> </execution> </executions> </plugin> From 4a2943510ce0c2a563e50c82ac81fe9483300eeb Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Fri, 9 Aug 2019 21:37:46 +0200 Subject: [PATCH 363/371] Fix excludes when creating src dist zip The biggest part was the "vendor/**" stuff from ruby. This is created during the build and should not be part of the source distribution. Also added a test to assert that some sensitive data from .travis/ doesn't accidentally leak. --- .../src/main/resources/assemblies/pmd-src.xml | 26 ++++++++++++++----- .../pmd/it/SourceDistributionIT.java | 23 +++++++++++++++- .../sourceforge/pmd/it/ZipFileExtractor.java | 23 ++++++++++++++++ 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/pmd-dist/src/main/resources/assemblies/pmd-src.xml b/pmd-dist/src/main/resources/assemblies/pmd-src.xml index 8c8820d03c..a049343e8a 100644 --- a/pmd-dist/src/main/resources/assemblies/pmd-src.xml +++ b/pmd-dist/src/main/resources/assemblies/pmd-src.xml @@ -11,22 +11,36 @@ <fileSets> <fileSet> - <useDefaultExcludes>true</useDefaultExcludes> + <useDefaultExcludes>false</useDefaultExcludes> <directory>${project.basedir}/..</directory> <outputDirectory>/</outputDirectory> <excludes> + <exclude>.git/**</exclude> <exclude>**/target/**</exclude> <exclude>**/bin/**</exclude> - <exclude>**/.settings</exclude> + + <exclude>**/.settings/**</exclude> <exclude>**/.project</exclude> <exclude>**/.classpath</exclude> <exclude>**/.checkstyle</exclude> <exclude>**/.pmd</exclude> + <exclude>**/.pmdruleset.xml</exclude> <exclude>**/.ruleset</exclude> - <exclude>**/.git</exclude> - <exclude>**/.travis/secrets.tar</exclude> - <exclude>**/.travis/id_rsa</exclude> - <exclude>**/.travis/*.gpg</exclude> + <exclude>**/.idea/**</exclude> + <exclude>**/*.iml</exclude> + + <exclude>.travis/secrets.tar</exclude> + <exclude>.travis/id_rsa</exclude> + <exclude>.travis/*.gpg</exclude> + + <exclude>.bundle/**</exclude> + <exclude>vendor/**</exclude> + <exclude>Gemfile.lock</exclude> + <exclude>docs/.bundle/**</exclude> + <exclude>docs/vendor/**</exclude> + <exclude>docs/_site/**</exclude> + + <exclude>pmd-core/dependency-reduced-pom.xml</exclude> </excludes> <directoryMode>0755</directoryMode> <fileMode>0644</fileMode> diff --git a/pmd-dist/src/test/java/net/sourceforge/pmd/it/SourceDistributionIT.java b/pmd-dist/src/test/java/net/sourceforge/pmd/it/SourceDistributionIT.java index 0564cb0433..d483644813 100644 --- a/pmd-dist/src/test/java/net/sourceforge/pmd/it/SourceDistributionIT.java +++ b/pmd-dist/src/test/java/net/sourceforge/pmd/it/SourceDistributionIT.java @@ -7,18 +7,39 @@ package net.sourceforge.pmd.it; import static org.junit.Assert.assertTrue; import java.io.File; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; +import org.junit.Assert; import org.junit.Test; import net.sourceforge.pmd.PMDVersion; public class SourceDistributionIT { + private static final String BASE_PATH = "pmd-src-" + PMDVersion.VERSION; + private static final Pattern GPG_PATTERN = Pattern.compile(Pattern.quote(BASE_PATH + "/.travis/") + ".+\\.[gG][pP][gG]"); + private File getSourceDistribution() { - return new File(".", "target/pmd-src-" + PMDVersion.VERSION + ".zip"); + return new File(".", "target/" + BASE_PATH + ".zip"); } @Test public void testFileExistence() { assertTrue(getSourceDistribution().exists()); } + + @Test + public void verifyExclusions() throws Exception { + Set<String> exclusions = new HashSet<>(); + exclusions.add(BASE_PATH + "/.travis/secrets.tar"); + exclusions.add(BASE_PATH + "/.travis/id_rsa"); + List<String> files = ZipFileExtractor.readZipFile(getSourceDistribution().toPath()); + + for (String file : files) { + Assert.assertFalse("File " + file + " must not be included", exclusions.contains(file) + || GPG_PATTERN.matcher(file).matches()); + } + } } diff --git a/pmd-dist/src/test/java/net/sourceforge/pmd/it/ZipFileExtractor.java b/pmd-dist/src/test/java/net/sourceforge/pmd/it/ZipFileExtractor.java index 0e024dda14..d31051fd04 100644 --- a/pmd-dist/src/test/java/net/sourceforge/pmd/it/ZipFileExtractor.java +++ b/pmd-dist/src/test/java/net/sourceforge/pmd/it/ZipFileExtractor.java @@ -11,7 +11,9 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Enumeration; +import java.util.List; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipFile; @@ -59,4 +61,25 @@ public class ZipFileExtractor { zip.close(); } } + + /** + * Compiles a list of all the files/directories contained in the given zip file. + * @param zipPath the zip file to look into + * @return list of all entries + * @throws Exception if any error happens during read of the zip file + */ + public static List<String> readZipFile(Path zipPath) throws Exception { + List<String> result = new ArrayList<>(); + ZipFile zip = new ZipFile(zipPath.toFile()); + try { + Enumeration<ZipArchiveEntry> entries = zip.getEntries(); + while (entries.hasMoreElements()) { + ZipArchiveEntry entry = entries.nextElement(); + result.add(entry.getName()); + } + } finally { + zip.close(); + } + return result; + } } From 331a9f941d676ebd72e3453a78e0053f6882bc49 Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 10 Aug 2019 22:14:27 +0200 Subject: [PATCH 364/371] (doc) Improve css for displaying details/summary tag --- docs/css/pmd-customstyles.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/css/pmd-customstyles.css b/docs/css/pmd-customstyles.css index 136529ec4c..2738de8db1 100644 --- a/docs/css/pmd-customstyles.css +++ b/docs/css/pmd-customstyles.css @@ -40,6 +40,8 @@ details summary { border-radius: 3px; padding: 5px 10px; outline: none; + cursor: pointer; + display: list-item; } details summary::after { From fc9a3cd5a036971c5e26dba046040620abadf95d Mon Sep 17 00:00:00 2001 From: Andreas Dangel <andreas.dangel@pmd-code.org> Date: Sat, 10 Aug 2019 22:21:06 +0200 Subject: [PATCH 365/371] Update release notes - add rule designer documentation --- docs/pages/release_notes.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 5f63319150..fbef9c5376 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,6 +14,12 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### New rule designer documentation + +The documentation for the rule designer is now available on the main PMD documentation page: +[Rule Designer Reference](pmd_userdocs_extending_designer_reference.html). Check it out to learn +about the usage and features of the rule designer. + ### Fixed Issues ### API Changes From 76c1af5e5e6dfe398e5c0fd0f1d3ea2eeb7ffe99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Mon, 12 Aug 2019 00:36:27 -0300 Subject: [PATCH 366/371] Filter out terminal nodes --- .../net/sourceforge/pmd/lang/ast/AntlrBaseNode.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java index f3440f0f7c..021e10663e 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java @@ -4,6 +4,8 @@ package net.sourceforge.pmd.lang.ast; +import java.util.stream.Stream; + import org.antlr.v4.runtime.ParserRuleContext; import net.sourceforge.pmd.lang.dfa.DataFlowNode; @@ -84,9 +86,9 @@ public class AntlrBaseNode extends ParserRuleContext implements AntlrNode { @Override public Node jjtGetChild(final int index) { try { - return (Node) children.get(index); + return (Node) childrenStream().skip(index).findFirst().orElse(null); } catch (final ClassCastException e) { - return new AntlrBaseNode(); + throw new IllegalArgumentException("Accessing invalid Antlr node", e); } } @@ -97,7 +99,11 @@ public class AntlrBaseNode extends ParserRuleContext implements AntlrNode { @Override public int jjtGetNumChildren() { - return children == null ? 0 : children.size(); + return (int) childrenStream().count(); + } + + private Stream<Node> childrenStream() { + return children == null ? Stream.empty() : children.stream().filter(e -> e instanceof Node).map(e -> (Node) e); } // TODO: should we make it abstract due to the comment in AbstractNode ? From 53eba5549cfc398ef562398b8f803b4b598c0d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Mon, 12 Aug 2019 01:25:42 -0300 Subject: [PATCH 367/371] Fix RuleChain indexation - Remove Context suffix from Antlr grammar XPath names --- pmd-core/src/main/java/net/sourceforge/pmd/Rule.java | 6 ++++-- .../pmd/lang/antlr/AbstractAntlrVisitor.java | 9 ++++++--- .../net/sourceforge/pmd/lang/ast/AntlrBaseNode.java | 3 ++- .../net/sourceforge/pmd/lang/rule/AbstractRule.java | 12 +++++++++--- .../ProhibitedInterfaceBuilderRule.java | 12 ++++++++++-- .../src/main/resources/category/swift/errorprone.xml | 4 ++-- 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java b/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java index 00f4272a0f..c8a7328a8f 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java @@ -421,10 +421,12 @@ public interface Rule extends PropertySource { void addRuleChainVisit(Class<? extends Node> nodeClass); /** - * Adds an AST node by name to be visited by the Rule on the RuleChain. + * Adds an AST node by XPath name to be visited by the Rule on the RuleChain. * * @param astNodeName - * the AST node to add to the RuleChain visit list as string + * the XPath name of the node to add to the RuleChain visit list + * + * @see Node#getXPathNodeName() */ void addRuleChainVisit(String astNodeName); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java index 99d62a03fb..2a8c7a832e 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AbstractAntlrVisitor.java @@ -28,17 +28,20 @@ public abstract class AbstractAntlrVisitor<T> extends AbstractRule implements Pa @Override public T visit(ParseTree tree) { + if (tree instanceof AntlrBaseNode) { + return visit((AntlrBaseNode) tree); + } return tree.accept(this); } @Override public T visitChildren(RuleNode node) { T result = this.defaultResult(); - int n = node.getChildCount(); + final int n = node.getChildCount(); for (int i = 0; i < n && this.shouldVisitNextChild(node, result); ++i) { - ParseTree c = node.getChild(i); - T childResult = c.accept(this); + final ParseTree c = node.getChild(i); + final T childResult = visit(c); result = this.aggregateResult(result, childResult); } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java index 021e10663e..c3db1237e2 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AntlrBaseNode.java @@ -109,6 +109,7 @@ public class AntlrBaseNode extends ParserRuleContext implements AntlrNode { // TODO: should we make it abstract due to the comment in AbstractNode ? @Override public String getXPathNodeName() { - return getClass().getSimpleName(); + final String simpleName = getClass().getSimpleName(); + return simpleName.substring(0, simpleName.length() - "Context".length()); } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java index af4ddbf1b0..0c9bc0923a 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java @@ -317,11 +317,17 @@ public abstract class AbstractRule extends AbstractPropertySource implements Rul @Override public void addRuleChainVisit(Class<? extends Node> nodeClass) { - if (!nodeClass.getSimpleName().startsWith("AST")) { + // FIXME : These assume the implementation of getXPathNodeName() for all nodes… + final String simpleName = nodeClass.getSimpleName(); + + if (simpleName.startsWith("AST")) { // JavaCC node // Classes under the Comment hierarchy and stuff need to be refactored in the Java AST - throw new IllegalArgumentException("Node class does not start with 'AST' prefix: " + nodeClass); + addRuleChainVisit(nodeClass.getSimpleName().substring("AST".length())); + } else if (nodeClass.getSimpleName().endsWith("Context")) { // Antlr node + addRuleChainVisit(nodeClass.getSimpleName().substring(0, simpleName.length() - "Context".length())); + } else { + throw new IllegalArgumentException("Node class does not start with 'AST' prefix nor ends with 'Context' suffix: " + nodeClass); } - addRuleChainVisit(nodeClass.getSimpleName().substring("AST".length())); } @Override diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java index dad3efe9df..41cc4226d2 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java @@ -9,14 +9,22 @@ import java.util.List; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.swift.AbstractSwiftRule; import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser.FunctionHeadContext; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser.VariableDeclarationHeadContext; public class ProhibitedInterfaceBuilderRule extends AbstractSwiftRule<Boolean> { private static final String IBACTION = "@IBAction"; private static final String IBOUTLET = "@IBOutlet"; + public ProhibitedInterfaceBuilderRule() { + super(); + addRuleChainVisit(FunctionHeadContext.class); + addRuleChainVisit(VariableDeclarationHeadContext.class); + } + @Override - public Boolean visitFunctionHead(SwiftParser.FunctionHeadContext ctx) { + public Boolean visitFunctionHead(FunctionHeadContext ctx) { if (ctx == null || ctx.attributes() == null) { return false; } @@ -25,7 +33,7 @@ public class ProhibitedInterfaceBuilderRule extends AbstractSwiftRule<Boolean> { } @Override - public Boolean visitVariableDeclarationHead(final SwiftParser.VariableDeclarationHeadContext ctx) { + public Boolean visitVariableDeclarationHead(final VariableDeclarationHeadContext ctx) { if (ctx == null || ctx.attributes() == null) { return false; } diff --git a/pmd-swift/src/main/resources/category/swift/errorprone.xml b/pmd-swift/src/main/resources/category/swift/errorprone.xml index f1f0c6e015..288b3ed278 100644 --- a/pmd-swift/src/main/resources/category/swift/errorprone.xml +++ b/pmd-swift/src/main/resources/category/swift/errorprone.xml @@ -25,7 +25,7 @@ <property name="xpath"> <value> <![CDATA[ -//TypeCastingOperatorContext[starts-with(@Text,'as!')] +//TypeCastingOperator[starts-with(@Text,'as!')] ]]> </value> </property> @@ -55,7 +55,7 @@ NSNumber() as? Int // no violation <property name="xpath"> <value> <![CDATA[ -//TryOperatorContext[@Text='try!'] +//TryOperator[@Text='try!'] ]]> </value> </property> From af72ddda9dc3b66a5942e9fdd72ca20291ff4cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Tue, 13 Aug 2019 17:24:21 -0300 Subject: [PATCH 368/371] Update changelog, refs #1877 --- docs/pages/7_0_0_release_notes.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/pages/7_0_0_release_notes.md b/docs/pages/7_0_0_release_notes.md index d4f21b7c07..9761a82500 100644 --- a/docs/pages/7_0_0_release_notes.md +++ b/docs/pages/7_0_0_release_notes.md @@ -19,6 +19,17 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Swift support + +PMD now fully supports Swift, not only for CPD, but we are pleased to announce we are shipping a number of rules starting with PMD 7. + +* {% rule "swift/errorprone/ForceCast" %} (`swift-errorprone`) flags all force casts, making sure you are defensively considering all types. + Having the application crash shouldn't be an option. +* {% rule "swift/errorprone/ForceTry" %} (`swift-errorprone`) flags all force tries, making sure you are defensively handling exceptions. + Having the application crash shouldn't be an option. +* {% rule "swift/bestpractices/ProhibitedInterfaceBuilder" %} (`swift-bestpractices`) flags any usage of interface builder. Interface builder + files are prone to merge conflicts, and are impossible to code review, so larger teams usually try to avoid it or reduce it's usage. + ### Fixed Issues ### API Changes @@ -37,6 +48,7 @@ This is a {{ site.pmd.release_type }} release. * [#1658](https://github.com/pmd/pmd/pull/1658): \[core] Node support for Antlr-based languages - [Matías Fraga](https://github.com/matifraga) * [#1698](https://github.com/pmd/pmd/pull/1698): \[core] [swift] Antlr Base Parser adapter and Swift Implementation - [Lucas Soncini](https://github.com/lsoncini) * [#1774](https://github.com/pmd/pmd/pull/1774): \[core] Antlr visitor rules - [Lucas Soncini](https://github.com/lsoncini) +* [#1877](https://github.com/pmd/pmd/pull/1877): \[swift] Feature/swift rules - [Matias Fraga](https://github.com/matifraga) {% endtocmaker %} From 6281f81ea98ecbbd7ade1ff2c2ff0147529279b7 Mon Sep 17 00:00:00 2001 From: Tomi De Lucca <tomas.delucca@mercadolibre.com> Date: Tue, 13 Aug 2019 23:46:51 -0300 Subject: [PATCH 369/371] Adding to rulechain --- .../rule/bestpractices/UnavailableFunctionRule.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java index 21d71465ed..5033ac773a 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/UnavailableFunctionRule.java @@ -8,14 +8,22 @@ import java.util.List; import net.sourceforge.pmd.lang.swift.AbstractSwiftRule; import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser.FunctionDeclarationContext; +import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser.InitializerDeclarationContext; public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { private static final String AVAILABLE_UNAVAILABLE = "@available(*,unavailable)"; private static final String FATAL_ERROR = "fatalError"; + public UnavailableFunctionRule() { + super(); + addRuleChainVisit(FunctionDeclarationContext.class); + addRuleChainVisit(InitializerDeclarationContext.class); + } + @Override - public Void visitFunctionDeclaration(final SwiftParser.FunctionDeclarationContext ctx) { + public Void visitFunctionDeclaration(final FunctionDeclarationContext ctx) { if (ctx == null) { return null; } @@ -31,7 +39,7 @@ public class UnavailableFunctionRule extends AbstractSwiftRule<Void> { } @Override - public Void visitInitializerDeclaration(final SwiftParser.InitializerDeclarationContext ctx) { + public Void visitInitializerDeclaration(final InitializerDeclarationContext ctx) { if (ctx == null) { return null; } From a46aef3b40fe8dce96a531fdcb95538fd133ad75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Wed, 14 Aug 2019 14:44:26 -0300 Subject: [PATCH 370/371] Use Void in ProhibitedInterfaceBuilderRule --- .../ProhibitedInterfaceBuilderRule.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java index 41cc4226d2..494c92e0a9 100644 --- a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/rule/bestpractices/ProhibitedInterfaceBuilderRule.java @@ -12,7 +12,7 @@ import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser; import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser.FunctionHeadContext; import net.sourceforge.pmd.lang.swift.antlr4.SwiftParser.VariableDeclarationHeadContext; -public class ProhibitedInterfaceBuilderRule extends AbstractSwiftRule<Boolean> { +public class ProhibitedInterfaceBuilderRule extends AbstractSwiftRule<Void> { private static final String IBACTION = "@IBAction"; private static final String IBOUTLET = "@IBOutlet"; @@ -24,24 +24,24 @@ public class ProhibitedInterfaceBuilderRule extends AbstractSwiftRule<Boolean> { } @Override - public Boolean visitFunctionHead(FunctionHeadContext ctx) { + public Void visitFunctionHead(FunctionHeadContext ctx) { if (ctx == null || ctx.attributes() == null) { - return false; + return null; } return visitDeclarationHead(ctx, ctx.attributes().attribute(), IBACTION); } @Override - public Boolean visitVariableDeclarationHead(final VariableDeclarationHeadContext ctx) { + public Void visitVariableDeclarationHead(final VariableDeclarationHeadContext ctx) { if (ctx == null || ctx.attributes() == null) { - return false; + return null; } return visitDeclarationHead(ctx, ctx.attributes().attribute(), IBOUTLET); } - private boolean visitDeclarationHead(final Node node, final List<SwiftParser.AttributeContext> attributes, + private Void visitDeclarationHead(final Node node, final List<SwiftParser.AttributeContext> attributes, final String match) { final boolean violate = attributes.stream().anyMatch(atr -> match.equals(atr.getText())); @@ -49,6 +49,6 @@ public class ProhibitedInterfaceBuilderRule extends AbstractSwiftRule<Boolean> { addViolation(data, node); } - return violate; + return null; } } From 6f805dabb629917ced58b815b72ba98ae1e4a814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Wed, 14 Aug 2019 14:44:42 -0300 Subject: [PATCH 371/371] Update changelog, refs #1882 --- docs/pages/7_0_0_release_notes.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/pages/7_0_0_release_notes.md b/docs/pages/7_0_0_release_notes.md index 9761a82500..b044ecaa4d 100644 --- a/docs/pages/7_0_0_release_notes.md +++ b/docs/pages/7_0_0_release_notes.md @@ -19,9 +19,17 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy +#### Full Antlr support + +Languages backed by an Antlr grammar are now fully supported. This means, it's now possible not only to use Antlr grammars for CPD, +but we can actually build full-fledged PMD rules for them as well. Both the traditional Java visitor rules, and the simpler +XPath rules are available to users. + +We expect this to enable both our dev team and external contributors to largely extend PMD usage for more languages. + #### Swift support -PMD now fully supports Swift, not only for CPD, but we are pleased to announce we are shipping a number of rules starting with PMD 7. +Given the full Antlr support, PMD now fully supports Swift. We are pleased to announce we are shipping a number of rules starting with PMD 7. * {% rule "swift/errorprone/ForceCast" %} (`swift-errorprone`) flags all force casts, making sure you are defensively considering all types. Having the application crash shouldn't be an option. @@ -29,6 +37,8 @@ PMD now fully supports Swift, not only for CPD, but we are pleased to announce w Having the application crash shouldn't be an option. * {% rule "swift/bestpractices/ProhibitedInterfaceBuilder" %} (`swift-bestpractices`) flags any usage of interface builder. Interface builder files are prone to merge conflicts, and are impossible to code review, so larger teams usually try to avoid it or reduce it's usage. +* {% rule "swift/bestpractices/UnavailableFunction" %} (`swift-bestpractices`) flags any function throwing a `fatalError` not marked as + `@available(*, unavailable)` to ensure no calls are actually performed in the codebase. ### Fixed Issues @@ -49,6 +59,7 @@ PMD now fully supports Swift, not only for CPD, but we are pleased to announce w * [#1698](https://github.com/pmd/pmd/pull/1698): \[core] [swift] Antlr Base Parser adapter and Swift Implementation - [Lucas Soncini](https://github.com/lsoncini) * [#1774](https://github.com/pmd/pmd/pull/1774): \[core] Antlr visitor rules - [Lucas Soncini](https://github.com/lsoncini) * [#1877](https://github.com/pmd/pmd/pull/1877): \[swift] Feature/swift rules - [Matias Fraga](https://github.com/matifraga) +* [#1882](https://github.com/pmd/pmd/pull/1882): \[swift] UnavailableFunction Swift rule - [Tomás de Lucca](https://github.com/tomidelucca) {% endtocmaker %}