From d49178ae5f251fa0d7868f88fd70fedbc1061079 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sun, 14 May 2023 11:05:30 +0200 Subject: [PATCH] [java] New Rule: Use Explicit Types Fixes #2847 --- docs/pages/release_notes.md | 2 + docs/pages/release_notes_pmd7.md | 1 + .../main/resources/rulesets/releases/700.xml | 1 + .../resources/category/java/bestpractices.xml | 28 +++++++++++ .../bestpractices/UseExplicitTypesTest.java | 11 +++++ .../bestpractices/xml/UseExplicitTypes.xml | 48 +++++++++++++++++++ 6 files changed, 91 insertions(+) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UseExplicitTypesTest.java create mode 100644 pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UseExplicitTypes.xml diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 40a27a2f68b..f27eaac12c5 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -182,6 +182,7 @@ Contributors: [Wener](https://github.com/wener-tiobe) (@wener-tiobe) * {% rule apex/design/UnusedMethod %} finds unused methods in your code. **Java** +* {% rule java/bestpractices/UseExplicitTypes %} reports usages of `var` keyword, which was introduced with Java 10. * {% rule java/codestyle/UnnecessaryBoxing %} reports boxing and unboxing conversions that may be made implicit. **Kotlin** @@ -453,6 +454,7 @@ Language specific fixes: * [#2806](https://github.com/pmd/pmd/issues/2806): \[java] SwitchStmtsShouldHaveDefault false-positive with Java 14 switch non-fallthrough branches * [#2822](https://github.com/pmd/pmd/issues/2822): \[java] LooseCoupling rule: Extend to cover user defined implementations and interfaces * [#2843](https://github.com/pmd/pmd/pull/2843): \[java] Fix UnusedAssignment FP with field accesses + * [#2847](https://github.com/pmd/pmd/issues/2847): \[java] New Rule: Use Explicit Types * [#2882](https://github.com/pmd/pmd/issues/2882): \[java] UseTryWithResources - false negative for explicit close * [#2883](https://github.com/pmd/pmd/issues/2883): \[java] JUnitAssertionsShouldIncludeMessage false positive with method call * [#2890](https://github.com/pmd/pmd/issues/2890): \[java] UnusedPrivateMethod false positive with generics diff --git a/docs/pages/release_notes_pmd7.md b/docs/pages/release_notes_pmd7.md index 76df0bb2a03..93e75fe377a 100644 --- a/docs/pages/release_notes_pmd7.md +++ b/docs/pages/release_notes_pmd7.md @@ -537,6 +537,7 @@ Related issue: [[core] Explicitly name all language versions (#4120)](https://gi * {% rule apex/design/UnusedMethod %} finds unused methods in your code. **Java** +* {% rule java/bestpractices/UseExplicitTypes %} reports usages of `var` keyword, which was introduced with Java 10. * {% rule java/codestyle/UnnecessaryBoxing %} reports boxing and unboxing conversions that may be made implicit. **Kotlin** diff --git a/pmd-core/src/main/resources/rulesets/releases/700.xml b/pmd-core/src/main/resources/rulesets/releases/700.xml index 46465531331..fb1e1fe9594 100644 --- a/pmd-core/src/main/resources/rulesets/releases/700.xml +++ b/pmd-core/src/main/resources/rulesets/releases/700.xml @@ -10,6 +10,7 @@ This ruleset contains links to rules that are new in PMD v7.0.0 + diff --git a/pmd-java/src/main/resources/category/java/bestpractices.xml b/pmd-java/src/main/resources/category/java/bestpractices.xml index 728ab98c9b3..cb8612daca7 100644 --- a/pmd-java/src/main/resources/category/java/bestpractices.xml +++ b/pmd-java/src/main/resources/category/java/bestpractices.xml @@ -1688,6 +1688,34 @@ public class Foo { + + +Java 10 introduced the `var` keyword. This reduces the amount of typing but decreases the reading comprehension of the +code. + + 3 + + + + + + + + + + + + + + + quadrat = (var x) -> x*x; + } + + private String getFoo() { + return "a"; + } +} +]]> + + + No vars anywhere + 4 + 5,6,8,9 + + + + + Allow literals + true + 2 + 8,9 + + + + + Allow constructor calls + true + 3 + 5,6,8 + + +