From ddb1eb8dd8c9eada9a10ac112c7d3bcd9ad8988c Mon Sep 17 00:00:00 2001 From: lukasgraef Date: Sat, 21 Sep 2024 16:03:36 +0200 Subject: [PATCH 01/33] [java] Fix #5067: CloseResource: False positive for FileSystems.getDefault() --- .../java/rule/errorprone/CloseResourceRule.java | 7 +++++++ .../java/rule/errorprone/xml/CloseResource.xml | 14 ++++++++++++++ 2 files changed, 21 insertions(+) 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 c3aa18a459..28c432a075 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 @@ -204,6 +204,7 @@ public class CloseResourceRule extends AbstractJavaRule { .filter(this::isVariableNotSpecifiedInTryWithResource) .filter(var -> isResourceTypeOrSubtype(var) || isNodeInstanceOfResourceType(getTypeOfVariable(var))) .filterNot(var -> var.isAnnotationPresent("lombok.Cleanup")) + .filterNot(this::isDefaultFileSystem) .toList(); for (ASTVariableId var : vars) { @@ -499,6 +500,12 @@ public class CloseResourceRule extends AbstractJavaRule { return tryStatement == null || !isVariableSpecifiedInTryWithResource(varId, tryStatement); } + private boolean isDefaultFileSystem(ASTVariableId varId) { + @Nullable + ASTExpression initializer = varId.getInitializer(); + return initializer != null && initializer.getText().contentEquals("FileSystems.getDefault()"); + } + private boolean isVariableSpecifiedInTryWithResource(ASTVariableId varId, ASTTryStatement tryWithResource) { // skip own resources - these are definitively closed if (tryWithResource.getResources().descendants(ASTVariableId.class).toList().contains(varId)) { 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 f0e32dbfd4..ac1c35d401 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 @@ -2044,6 +2044,20 @@ public class CastedParameter { // doesn't need to be closed, it's still a paramter… } } +} + ]]> + + + #5067: FileSystems.getDefault() can't be closed + 0 + From 39b8bdf17103b3b01b0501778e48ba6b9554e110 Mon Sep 17 00:00:00 2001 From: lukasgraef Date: Mon, 30 Sep 2024 20:13:01 +0200 Subject: [PATCH 02/33] Review Finding: Check for type java.nio.FileSystems --- .../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 28c432a075..440998cc8e 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 @@ -503,7 +503,7 @@ public class CloseResourceRule extends AbstractJavaRule { private boolean isDefaultFileSystem(ASTVariableId varId) { @Nullable ASTExpression initializer = varId.getInitializer(); - return initializer != null && initializer.getText().contentEquals("FileSystems.getDefault()"); + return initializer != null && InvocationMatcher.parse("java.nio.file.FileSystems#getDefault()").matchesCall(initializer); } private boolean isVariableSpecifiedInTryWithResource(ASTVariableId varId, ASTTryStatement tryWithResource) { From 7dcab3f189bb5b446c4ed97667907da2a24991c4 Mon Sep 17 00:00:00 2001 From: lukasgraef Date: Mon, 30 Sep 2024 20:48:20 +0200 Subject: [PATCH 03/33] Fix static analysis findings --- .../pmd/lang/java/rule/errorprone/CloseResourceRule.java | 3 ++- 1 file changed, 2 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 440998cc8e..f7caef91b6 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 @@ -108,6 +108,7 @@ public class CloseResourceRule extends AbstractJavaRule { .desc("Detect if 'close' (or other closeTargets) is called outside of a finally-block").defaultValue(false).build(); private static final InvocationMatcher OBJECTS_NON_NULL = InvocationMatcher.parse("java.util.Objects#nonNull(_)"); + private static final InvocationMatcher FILESYSTEMS_GET_DEFAULT = InvocationMatcher.parse("java.nio.file.FileSystems#getDefault()"); private final Set types = new HashSet<>(); private final Set simpleTypes = new HashSet<>(); @@ -503,7 +504,7 @@ public class CloseResourceRule extends AbstractJavaRule { private boolean isDefaultFileSystem(ASTVariableId varId) { @Nullable ASTExpression initializer = varId.getInitializer(); - return initializer != null && InvocationMatcher.parse("java.nio.file.FileSystems#getDefault()").matchesCall(initializer); + return FILESYSTEMS_GET_DEFAULT.matchesCall(initializer); } private boolean isVariableSpecifiedInTryWithResource(ASTVariableId varId, ASTTryStatement tryWithResource) { From 7d4961f3033d65476f8a0fdf42101edf540c0c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Thu, 3 Oct 2024 17:47:01 -0300 Subject: [PATCH 04/33] Update README.md Point coveralls to main branch --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a4fde521c..8d215b233a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/pmd/pmd/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/pmd/pmd/actions) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/net.sourceforge.pmd/pmd/badge.svg)](https://maven-badges.herokuapp.com/maven-central/net.sourceforge.pmd/pmd) [![Reproducible Builds](https://img.shields.io/badge/Reproducible_Builds-ok-green?labelColor=blue)](https://github.com/jvm-repo-rebuild/reproducible-central/tree/master/content/net/sourceforge/pmd#readme) -[![Coverage Status](https://coveralls.io/repos/github/pmd/pmd/badge.svg)](https://coveralls.io/github/pmd/pmd) +[![Coverage Status](https://coveralls.io/repos/github/pmd/pmd/badge.svg?branch=main)](https://coveralls.io/github/pmd/pmd?branch=main) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/ea550046a02344ec850553476c4aa2ca)](https://app.codacy.com/organizations/gh/pmd/dashboard) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](code_of_conduct.md) [![Documentation (latest)](https://img.shields.io/badge/docs-latest-green)](https://docs.pmd-code.org/latest/) From 9fbaa4fbfb7f3d3cf32e82cefc61697995d46c27 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 4 Oct 2024 09:25:21 +0200 Subject: [PATCH 05/33] [java] Update quickstart.xml with renamed UnitTest* rules --- .../src/main/resources/rulesets/java/quickstart.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pmd-java/src/main/resources/rulesets/java/quickstart.xml b/pmd-java/src/main/resources/rulesets/java/quickstart.xml index 97eb2742da..8c8af377ab 100644 --- a/pmd-java/src/main/resources/rulesets/java/quickstart.xml +++ b/pmd-java/src/main/resources/rulesets/java/quickstart.xml @@ -24,13 +24,7 @@ - - - - - - @@ -45,6 +39,12 @@ + + + + + + From c0023dd94209513ec02459250bcdc16806f1a08c Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 4 Oct 2024 09:32:55 +0200 Subject: [PATCH 06/33] [java] Rename UnitTestShouldIncludeAssert again to make it consistent and always use singular "UnitTest" Follow-up on #4532 and #4965 --- docs/pages/release_notes.md | 6 +- .../JUnitTestsShouldIncludeAssertRule.java | 4 +- ...a => UnitTestShouldIncludeAssertRule.java} | 4 +- .../resources/category/java/bestpractices.xml | 58 +++++++++---------- .../resources/rulesets/java/quickstart.xml | 2 +- ...a => UnitTestShouldIncludeAssertTest.java} | 2 +- ...rt.xml => UnitTestShouldIncludeAssert.xml} | 0 7 files changed, 38 insertions(+), 38 deletions(-) rename pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/{UnitTestsShouldIncludeAssertRule.java => UnitTestShouldIncludeAssertRule.java} (93%) rename pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/{UnitTestsShouldIncludeAssertTest.java => UnitTestShouldIncludeAssertTest.java} (79%) rename pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/{UnitTestsShouldIncludeAssert.xml => UnitTestShouldIncludeAssert.xml} (100%) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 0068c0480d..7c5ba5a430 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -20,12 +20,12 @@ This is a {{ site.pmd.release_type }} release. Several rules for unit testing have been renamed to better reflect their actual scope. Lots of them were called after JUnit / JUnit 4, even when they applied to JUnit 5 and / or TestNG. +* {% rule java/bestpractices/UnitTestAssertionsShouldIncludeMessage %} (Java Best Practices) has been renamed from `JUnitAssertionsShouldIncludeMessage`. +* {% rule java/bestpractices/UnitTestContainsTooManyAsserts %} (Java Best Practices) has been renamed from `JUnitTestContainsTooManyAsserts`. +* {% rule java/bestpractices/UnitTestShouldIncludeAssert %} (Java Best Practices) has been renamed from `JUnitTestsShouldIncludeAssert`. * {% rule java/bestpractices/UnitTestShouldUseAfterAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseAfterAnnotation`. * {% rule java/bestpractices/UnitTestShouldUseBeforeAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseBeforeAnnotation`. * {% rule java/bestpractices/UnitTestShouldUseTestAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseTestAnnotation`. -* {% rule java/bestpractices/UnitTestAssertionsShouldIncludeMessage %} (Java Best Practices) has been renamed from `JUnitAssertionsShouldIncludeMessage`. -* {% rule java/bestpractices/UnitTestContainsTooManyAsserts %} (Java Best Practices) has been renamed from `JUnitTestContainsTooManyAsserts`. -* {% rule java/bestpractices/UnitTestsShouldIncludeAssert %} (Java Best Practices) has been renamed from `JUnitTestsShouldIncludeAssert`. The old rule names still work but are deprecated. diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/JUnitTestsShouldIncludeAssertRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/JUnitTestsShouldIncludeAssertRule.java index ad20f3cca5..452e67d033 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/JUnitTestsShouldIncludeAssertRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/JUnitTestsShouldIncludeAssertRule.java @@ -5,9 +5,9 @@ package net.sourceforge.pmd.lang.java.rule.bestpractices; /** - * @deprecated The rule was renamed {@link UnitTestsShouldIncludeAssertRule} + * @deprecated The rule was renamed {@link UnitTestShouldIncludeAssertRule} */ @Deprecated -public class JUnitTestsShouldIncludeAssertRule extends UnitTestsShouldIncludeAssertRule { +public class JUnitTestsShouldIncludeAssertRule extends UnitTestShouldIncludeAssertRule { } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestsShouldIncludeAssertRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestShouldIncludeAssertRule.java similarity index 93% rename from pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestsShouldIncludeAssertRule.java rename to pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestShouldIncludeAssertRule.java index 867ae52504..dc21c4fb1a 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestsShouldIncludeAssertRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestShouldIncludeAssertRule.java @@ -15,7 +15,7 @@ import net.sourceforge.pmd.lang.java.rule.internal.TestFrameworksUtil; import net.sourceforge.pmd.properties.PropertyDescriptor; import net.sourceforge.pmd.properties.PropertyFactory; -public class UnitTestsShouldIncludeAssertRule extends AbstractJavaRulechainRule { +public class UnitTestShouldIncludeAssertRule extends AbstractJavaRulechainRule { private static final PropertyDescriptor> EXTRA_ASSERT_METHOD_NAMES = PropertyFactory.stringProperty("extraAssertMethodNames") @@ -24,7 +24,7 @@ public class UnitTestsShouldIncludeAssertRule extends AbstractJavaRulechainRule .emptyDefaultValue() .build(); - public UnitTestsShouldIncludeAssertRule() { + public UnitTestShouldIncludeAssertRule() { super(ASTMethodDeclaration.class); definePropertyDescriptor(EXTRA_ASSERT_METHOD_NAMES); } diff --git a/pmd-java/src/main/resources/category/java/bestpractices.xml b/pmd-java/src/main/resources/category/java/bestpractices.xml index 2698fbab73..aa2f4e7255 100644 --- a/pmd-java/src/main/resources/category/java/bestpractices.xml +++ b/pmd-java/src/main/resources/category/java/bestpractices.xml @@ -748,7 +748,7 @@ class MyTest { // not public, that's fine - + + + + Unit tests should include at least one assertion. This makes the tests more robust, and using assert + with messages provide the developer a clearer idea of what the test does. + + This rule checks for JUnit (3, 4 and 5) and TestNG Tests. + + 3 + + + + + - - - Unit tests should include at least one assertion. This makes the tests more robust, and using assert - with messages provide the developer a clearer idea of what the test does. - - This rule checks for JUnit (3, 4 and 5) and TestNG Tests. - - 3 - - - - - --> + - diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestsShouldIncludeAssertTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestShouldIncludeAssertTest.java similarity index 79% rename from pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestsShouldIncludeAssertTest.java rename to pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestShouldIncludeAssertTest.java index b76c92f615..bab5134261 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestsShouldIncludeAssertTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnitTestShouldIncludeAssertTest.java @@ -6,6 +6,6 @@ package net.sourceforge.pmd.lang.java.rule.bestpractices; import net.sourceforge.pmd.test.PmdRuleTst; -class UnitTestsShouldIncludeAssertTest extends PmdRuleTst { +class UnitTestShouldIncludeAssertTest extends PmdRuleTst { // no additional unit tests } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnitTestsShouldIncludeAssert.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnitTestShouldIncludeAssert.xml similarity index 100% rename from pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnitTestsShouldIncludeAssert.xml rename to pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnitTestShouldIncludeAssert.xml From 07cd250a74f196ca97dc479d2bca9321df95814e Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 4 Oct 2024 10:00:53 +0200 Subject: [PATCH 07/33] Fix release_notes.md --- 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 7c5ba5a430..6f89cebd47 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -37,7 +37,7 @@ The old rule names still work but are deprecated. ### ✨ Merged pull requests * [#4965](https://github.com/pmd/pmd/pull/4965): \[java] Rename JUnit rules with overly restrictive names - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) -* [#5241](https://github.com/pmd/pmd/pull/5241): \Ignore javacc code in coverage report - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) +* [#5241](https://github.com/pmd/pmd/pull/5241): Ignore javacc code in coverage report - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) {% endtocmaker %} From d2c42d24260ef43be9ff7228762c5d2baf04248a Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 4 Oct 2024 10:05:48 +0200 Subject: [PATCH 08/33] [doc] Update release notes (#5067, #5225) --- 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 6f89cebd47..08ed81281f 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -32,11 +32,14 @@ The old rule names still work but are deprecated. ### 🐛 Fixed Issues * java * [#4532](https://github.com/pmd/pmd/issues/4532): \[java] Rule misnomer for JUnit* rules +* java-errorprone + * [#5067](https://github.com/pmd/pmd/issues/5067): \[java] CloseResource: False positive for FileSystems.getDefault() ### 🚨 API Changes ### ✨ Merged pull requests * [#4965](https://github.com/pmd/pmd/pull/4965): \[java] Rename JUnit rules with overly restrictive names - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) +* [#5225](https://github.com/pmd/pmd/pull/5225): \[java] Fix #5067: CloseResource: False positive for FileSystems.getDefault() - [Lukas Gräf](https://github.com/lukasgraef) (@lukasgraef) * [#5241](https://github.com/pmd/pmd/pull/5241): Ignore javacc code in coverage report - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) {% endtocmaker %} From a0818d5ab2669dfd7f6bf8ca9e0ec8d8e0148b5d Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 4 Oct 2024 15:54:21 +0200 Subject: [PATCH 09/33] [doc] Document renamed/old rule names --- docs/pages/release_notes.md | 8 ++++++++ .../main/resources/category/java/bestpractices.xml | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 08ed81281f..197b7a4aec 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -36,6 +36,14 @@ The old rule names still work but are deprecated. * [#5067](https://github.com/pmd/pmd/issues/5067): \[java] CloseResource: False positive for FileSystems.getDefault() ### 🚨 API Changes +* java-bestpractices + * The old rule name `JUnit4TestShouldUseAfterAnnotation` has been deprecated. Use the new name {% rule java/bestpractices/UnitTestShouldUseAfterAnnotation %} instead. + * The old rule name `JUnit4TestShouldUseBeforeAnnotation` has been deprecated. Use the new name {% rule java/bestpractices/UnitTestShouldUseBeforeAnnotation %} instead. + * The old rule name `JUnit4TestShouldUseTestAnnotation` has been deprecated. Use the new name {% rule java/bestpractices/UnitTestShouldUseTestAnnotation %} instead. + * The old rule name `JUnitAssertionsShouldIncludeMessage` has been deprecated. Use the new name {% rule java/bestpractices/UnitTestAssertionsShouldIncludeMessage %} instead. + * The old rule name `JUnitTestContainsTooManyAsserts` has been deprecated. Use the new name {% rule java/bestpractices/UnitTestContainsTooManyAsserts %} instead. + * The old rule name `JUnitTestsShouldIncludeAssert` has been deprecated. Use the new name {% rule java/bestpractices/UnitTestShouldIncludeAssert %} instead. + ### ✨ Merged pull requests * [#4965](https://github.com/pmd/pmd/pull/4965): \[java] Rename JUnit rules with overly restrictive names - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) diff --git a/pmd-java/src/main/resources/category/java/bestpractices.xml b/pmd-java/src/main/resources/category/java/bestpractices.xml index aa2f4e7255..03b23ad1ca 100644 --- a/pmd-java/src/main/resources/category/java/bestpractices.xml +++ b/pmd-java/src/main/resources/category/java/bestpractices.xml @@ -1239,6 +1239,8 @@ Unit assertions should include an informative message - i.e., use the three-argu `assertEquals()`, not the two-argument version. This rule supports tests using JUnit (3, 4 and 5) and TestNG. + +Note: This rule was named JUnitAssertionsShouldIncludeMessage before PMD 7.7.0. 3 @@ -1268,6 +1270,8 @@ public class Foo { Customize the maximum number of assertions used by this Rule to suit your needs. This rule checks for JUnit (3, 4 and 5) and TestNG Tests. + + Note: This rule was named JUnitTestContainsTooManyAsserts before PMD 7.7.0. 3 @@ -1303,6 +1307,8 @@ public class MyTestCase { with messages provide the developer a clearer idea of what the test does. This rule checks for JUnit (3, 4 and 5) and TestNG Tests. + + Note: This rule was named JUnitTestsShouldIncludeAssert before PMD 7.7.0. 3 @@ -1333,6 +1339,8 @@ public class Foo { JUnit 4 will only execute methods annotated with `@After` after running each test. JUnit 5 introduced `@AfterEach` and `@AfterAll` annotations to execute methods after each test or after all tests in the class, respectively. + + Note: This rule was named JUnit4TestShouldUseAfterAnnotation before PMD 7.7.0. 3 @@ -1380,6 +1388,8 @@ public class MyTest2 { JUnit 4 will only execute methods annotated with `@Before` before all tests. JUnit 5 introduced `@BeforeEach` and `@BeforeAll` annotations to execute methods before each test or before all tests in the class, respectively. + + Note: This rule was named JUnit4TestShouldUseBeforeAnnotation before PMD 7.7.0. 3 @@ -1426,6 +1436,8 @@ public class MyTest2 { In JUnit 4, only methods annotated with the `@Test` annotation are executed. In JUnit 5, one of the following annotations should be used for tests: `@Test`, `@RepeatedTest`, `@TestFactory`, `@TestTemplate` or `@ParameterizedTest`. In TestNG, only methods annotated with the `@Test` annotation are executed. + + Note: This rule was named JUnit4TestShouldUseTestAnnotation before PMD 7.7.0. 3 From 00bf6fe2f7e67e75cd4db863378a50e0533952b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 6 Oct 2024 17:21:30 -0300 Subject: [PATCH 10/33] Fix @since for @Generated --- .../src/main/java/net/sourceforge/pmd/annotation/Generated.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/annotation/Generated.java b/pmd-core/src/main/java/net/sourceforge/pmd/annotation/Generated.java index ab9b46f465..7dc0d2a253 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/annotation/Generated.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/annotation/Generated.java @@ -11,7 +11,7 @@ import java.lang.annotation.RetentionPolicy; /** * Marks a class as generated code, and therefore to be ignored for code coverage purposes. * - * @since 7.6.0 + * @since 7.7.0 */ @Retention(RetentionPolicy.CLASS) @Documented From 93a019765dd8031b3ee13b9f76c0a7af6afc3eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 6 Oct 2024 17:24:42 -0300 Subject: [PATCH 11/33] Fix incorrect properties --- antlr4-wrapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/antlr4-wrapper.xml b/antlr4-wrapper.xml index 7a82734022..6153c751db 100644 --- a/antlr4-wrapper.xml +++ b/antlr4-wrapper.xml @@ -32,10 +32,10 @@ - + - + From ca71d765538dc00d971050a504a4d2a72b458053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 6 Oct 2024 19:48:30 -0300 Subject: [PATCH 12/33] Include up-to-date-check to Antlr4 cpd - Prevent unnecessary re-runs --- antlr4-wrapper.xml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/antlr4-wrapper.xml b/antlr4-wrapper.xml index 6153c751db..4036aa009a 100644 --- a/antlr4-wrapper.xml +++ b/antlr4-wrapper.xml @@ -15,6 +15,7 @@ --> + @@ -40,6 +41,20 @@ + + + + + + + + + + + + + @@ -72,7 +87,9 @@ tofile="${parser-file}"/> - + + From e3cd599da22e039b282323af44a2d1775a337474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 6 Oct 2024 19:58:43 -0300 Subject: [PATCH 13/33] Add @Generated annotations to cpd Antlr languages --- antlr4-wrapper.xml | 78 +++++++++++++++++++++++++++++++++++++++++++++- pmd-cs/pom.xml | 1 + pmd-dart/pom.xml | 1 + pmd-go/pom.xml | 1 + pmd-lua/pom.xml | 1 + pom.xml | 8 +++++ 6 files changed, 89 insertions(+), 1 deletion(-) diff --git a/antlr4-wrapper.xml b/antlr4-wrapper.xml index 4036aa009a..b17002f40a 100644 --- a/antlr4-wrapper.xml +++ b/antlr4-wrapper.xml @@ -12,7 +12,14 @@ See AntlrGeneratedParserBase + It also uses the following maven properties: + - ant.contrib.jar: Location of the ant-contrib jar --> + + + + + @@ -55,6 +62,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87,7 +163,7 @@ tofile="${parser-file}"/> - + diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index 0eec39f809..f4879ed0e7 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -30,6 +30,7 @@ + diff --git a/pmd-dart/pom.xml b/pmd-dart/pom.xml index 496115127b..f772795832 100644 --- a/pmd-dart/pom.xml +++ b/pmd-dart/pom.xml @@ -30,6 +30,7 @@ + diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index 4df297ebc9..cf47e5217c 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -30,6 +30,7 @@ + diff --git a/pmd-lua/pom.xml b/pmd-lua/pom.xml index f3a24be6d3..c8adda151f 100644 --- a/pmd-lua/pom.xml +++ b/pmd-lua/pom.xml @@ -30,6 +30,7 @@ + diff --git a/pom.xml b/pom.xml index 8f0474ab59..0f41e68e7d 100644 --- a/pom.xml +++ b/pom.xml @@ -122,6 +122,9 @@ ${project.build.directory}/generated-sources/javacc ${project.basedir}/../javacc-wrapper.xml + 1.0b3 + ${settings.localRepository}/ant-contrib/ant-contrib/${ant-contrib.version}/ant-contrib-${ant-contrib.version}.jar + ${project.build.directory}/generated-sources/antlr4 ${project.basedir}/../antlr4-wrapper.xml @@ -167,6 +170,11 @@ ant ${ant.version} + + ant-contrib + ant-contrib + ${ant-contrib.version} + From 31018611c65db4f699c0f745a5a65de540214e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 6 Oct 2024 20:07:37 -0300 Subject: [PATCH 14/33] Add missing lexer properties --- antlr4-wrapper.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/antlr4-wrapper.xml b/antlr4-wrapper.xml index b17002f40a..da0ed3799e 100644 --- a/antlr4-wrapper.xml +++ b/antlr4-wrapper.xml @@ -48,6 +48,9 @@ + + + From f68130eaf9e95c836b682ef068736e9edd209cc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 6 Oct 2024 20:07:47 -0300 Subject: [PATCH 15/33] Annotate Antlr generated classes for PMD languages --- antlr4-wrapper.xml | 4 +++- pmd-kotlin/pom.xml | 1 + pmd-swift/pom.xml | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/antlr4-wrapper.xml b/antlr4-wrapper.xml index da0ed3799e..0832bd9bc0 100644 --- a/antlr4-wrapper.xml +++ b/antlr4-wrapper.xml @@ -179,7 +179,9 @@ public class ${lexer-name}'/> - + + diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index 40f19513de..5e9dbf2e80 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -43,6 +43,7 @@ + diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 023fa8dd39..0c50cdc818 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -42,6 +42,7 @@ + From 2c1a7f026e6ba4d06d73118b44599b617445fccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 7 Oct 2024 16:40:37 +0200 Subject: [PATCH 16/33] Fix NPE with empty pattern list --- pmd-java/etc/grammar/Java.jjt | 4 +- .../java21/RecordPatterns.java | 9 ++ .../jdkversiontests/java21/RecordPatterns.txt | 104 ++++++++++++------ 3 files changed, 79 insertions(+), 38 deletions(-) diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index ef9406b9c3..630520f4e7 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -1889,13 +1889,13 @@ void RecordPattern(): (Annotation())* ReferenceType() RecordStructurePattern() } -void RecordStructurePattern() #void: +void RecordStructurePattern() #PatternList: {} { "(" [ ComponentPatternList() ] ")" } -void ComponentPatternList() #PatternList : +void ComponentPatternList() #void : {} { ComponentPattern() ( "," ComponentPattern() )* diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java index bf944eace8..318c0e0134 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java @@ -97,4 +97,13 @@ public class RecordPatterns { System.out.println("String " + s); } } + + + record Empty(){} + void foo(Object o) { + boolean x = o instanceof Empty; + x = o instanceof Empty(); + } + + ; } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.txt b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.txt index 04bed57df7..7c71e3a2b4 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.txt +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.txt @@ -1,7 +1,7 @@ +- CompilationUnit[@PackageName = ""] +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "RecordPatterns", @CanonicalName = "RecordPatterns", @EffectiveVisibility = Visibility.V_PUBLIC, @Enum = false, @Final = false, @Interface = false, @Local = false, @Nested = false, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "RecordPatterns", @Static = false, @TopLevel = true, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PUBLIC] +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC), @ExplicitModifiers = (JModifier.PUBLIC)] - +- ClassBody[@Empty = false, @Size = 18] + +- ClassBody[@Empty = false, @Size = 21] +- RecordDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "RecordPatterns$Point", @CanonicalName = "RecordPatterns.Point", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = true, @RegularClass = false, @RegularInterface = false, @SimpleName = "Point", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE] | +- ModifierList[@EffectiveModifiers = (JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()] | +- RecordComponentList[@Empty = false, @Size = 2, @Varargs = false] @@ -512,38 +512,70 @@ | +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "String ", @Empty = false, @Image = "\"String \"", @Length = 7, @LiteralText = "\"String \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false] | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false] +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "test4", @Overridden = false, @Static = false, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = true] - +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] - +- VoidType[] - +- FormalParameters[@Empty = false, @Size = 1] - | +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL] - | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] - | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Box"] - | | +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1] - | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Box"] - | | +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1] - | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"] - | +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "bo", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL] - +- Block[@Empty = false, @Size = 1, @containsComment = false] - +- IfStatement[@Else = false] - +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false] - | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "bo", @Name = "bo", @ParenthesisDepth = 0, @Parenthesized = false] - | +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] - | +- RecordPattern[] - | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Box"] - | +- PatternList[@Empty = false, @Size = 1] - | +- RecordPattern[] - | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Box"] - | +- PatternList[@Empty = false, @Size = 1] - | +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE] - | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] - | +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "s", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_LOCAL] - +- Block[@Empty = false, @Size = 1, @containsComment = false] - +- ExpressionStatement[] - +- MethodCall[@CompileTimeConstant = false, @Image = "println", @MethodName = "println", @ParenthesisDepth = 0, @Parenthesized = false] - +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "out", @Name = "out", @ParenthesisDepth = 0, @Parenthesized = false] - | +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] - | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "System"] - +- ArgumentList[@Empty = false, @Size = 1] - +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false] - +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "String ", @Empty = false, @Image = "\"String \"", @Length = 7, @LiteralText = "\"String \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false] - +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false] + | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] + | +- VoidType[] + | +- FormalParameters[@Empty = false, @Size = 1] + | | +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL] + | | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] + | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Box"] + | | | +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1] + | | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Box"] + | | | +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1] + | | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"] + | | +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "bo", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL] + | +- Block[@Empty = false, @Size = 1, @containsComment = false] + | +- IfStatement[@Else = false] + | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "bo", @Name = "bo", @ParenthesisDepth = 0, @Parenthesized = false] + | | +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- RecordPattern[] + | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Box"] + | | +- PatternList[@Empty = false, @Size = 1] + | | +- RecordPattern[] + | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Box"] + | | +- PatternList[@Empty = false, @Size = 1] + | | +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE] + | | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] + | | +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "s", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_LOCAL] + | +- Block[@Empty = false, @Size = 1, @containsComment = false] + | +- ExpressionStatement[] + | +- MethodCall[@CompileTimeConstant = false, @Image = "println", @MethodName = "println", @ParenthesisDepth = 0, @Parenthesized = false] + | +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "out", @Name = "out", @ParenthesisDepth = 0, @Parenthesized = false] + | | +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "System"] + | +- ArgumentList[@Empty = false, @Size = 1] + | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false] + | +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "String ", @Empty = false, @Image = "\"String \"", @Length = 7, @LiteralText = "\"String \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false] + | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false] + +- RecordDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "RecordPatterns$Empty", @CanonicalName = "RecordPatterns.Empty", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = true, @RegularClass = false, @RegularInterface = false, @SimpleName = "Empty", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE] + | +- ModifierList[@EffectiveModifiers = (JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()] + | +- RecordComponentList[@Empty = true, @Size = 0, @Varargs = false] + | +- RecordBody[@Empty = true, @Size = 0] + +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "foo", @Overridden = false, @Static = false, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = true] + | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] + | +- VoidType[] + | +- FormalParameters[@Empty = false, @Size = 1] + | | +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL] + | | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] + | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"] + | | +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "o", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL] + | +- Block[@Empty = false, @Size = 2, @containsComment = false] + | +- LocalVariableDeclaration[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @TypeInferred = false, @Visibility = Visibility.V_LOCAL] + | | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] + | | +- PrimitiveType[@Kind = PrimitiveTypeKind.BOOLEAN] + | | +- VariableDeclarator[@Initializer = true, @Name = "x"] + | | +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = true, @Name = "x", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL] + | | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "o", @Name = "o", @ParenthesisDepth = 0, @Parenthesized = false] + | | +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Empty"] + | +- ExpressionStatement[] + | +- AssignmentExpression[@CompileTimeConstant = false, @Compound = false, @Operator = AssignmentOp.ASSIGN, @ParenthesisDepth = 0, @Parenthesized = false] + | +- VariableAccess[@AccessType = AccessType.WRITE, @CompileTimeConstant = false, @Image = "x", @Name = "x", @ParenthesisDepth = 0, @Parenthesized = false] + | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false] + | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "o", @Name = "o", @ParenthesisDepth = 0, @Parenthesized = false] + | +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] + | +- RecordPattern[] + | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Empty"] + | +- PatternList[@Empty = true, @Size = 0] + +- EmptyDeclaration[] From b724b4dd33971ea0bdf45660c9107bd2e2ff95b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 7 Oct 2024 18:18:32 +0200 Subject: [PATCH 17/33] Fix DataflowPassTest --- .../java21/RecordPatterns.java | 5 ++- .../jdkversiontests/java21/RecordPatterns.txt | 41 ++++++++++--------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java index 318c0e0134..36b02e94d8 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java @@ -101,8 +101,9 @@ public class RecordPatterns { record Empty(){} void foo(Object o) { - boolean x = o instanceof Empty; - x = o instanceof Empty(); + if (o instanceof Empty + || o instanceof Empty()) + System.out.println("Empty " + o); } ; diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.txt b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.txt index 7c71e3a2b4..44dc24bba6 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.txt +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.txt @@ -559,23 +559,26 @@ | | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"] | | +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "o", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL] - | +- Block[@Empty = false, @Size = 2, @containsComment = false] - | +- LocalVariableDeclaration[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @TypeInferred = false, @Visibility = Visibility.V_LOCAL] - | | +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()] - | | +- PrimitiveType[@Kind = PrimitiveTypeKind.BOOLEAN] - | | +- VariableDeclarator[@Initializer = true, @Name = "x"] - | | +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = true, @Name = "x", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL] - | | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false] - | | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "o", @Name = "o", @ParenthesisDepth = 0, @Parenthesized = false] - | | +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] - | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Empty"] - | +- ExpressionStatement[] - | +- AssignmentExpression[@CompileTimeConstant = false, @Compound = false, @Operator = AssignmentOp.ASSIGN, @ParenthesisDepth = 0, @Parenthesized = false] - | +- VariableAccess[@AccessType = AccessType.WRITE, @CompileTimeConstant = false, @Image = "x", @Name = "x", @ParenthesisDepth = 0, @Parenthesized = false] - | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false] - | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "o", @Name = "o", @ParenthesisDepth = 0, @Parenthesized = false] - | +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] - | +- RecordPattern[] - | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Empty"] - | +- PatternList[@Empty = true, @Size = 0] + | +- Block[@Empty = false, @Size = 1, @containsComment = false] + | +- IfStatement[@Else = false] + | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.CONDITIONAL_OR, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false] + | | | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "o", @Name = "o", @ParenthesisDepth = 0, @Parenthesized = false] + | | | +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] + | | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Empty"] + | | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "o", @Name = "o", @ParenthesisDepth = 0, @Parenthesized = false] + | | +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- RecordPattern[] + | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Empty"] + | | +- PatternList[@Empty = true, @Size = 0] + | +- ExpressionStatement[] + | +- MethodCall[@CompileTimeConstant = false, @Image = "println", @MethodName = "println", @ParenthesisDepth = 0, @Parenthesized = false] + | +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "out", @Name = "out", @ParenthesisDepth = 0, @Parenthesized = false] + | | +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false] + | | +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "System"] + | +- ArgumentList[@Empty = false, @Size = 1] + | +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false] + | +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Empty ", @Empty = false, @Image = "\"Empty \"", @Length = 6, @LiteralText = "\"Empty \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false] + | +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "o", @Name = "o", @ParenthesisDepth = 0, @Parenthesized = false] +- EmptyDeclaration[] From 54dfabea9bc70f22d8fe547e4993841d6a1cf739 Mon Sep 17 00:00:00 2001 From: Aryant Tripathi Date: Wed, 9 Oct 2024 10:00:02 +0530 Subject: [PATCH 18/33] Support Boolean wrapper class for BooleanGetMethodName rule (#5253) --- .../main/resources/category/java/codestyle.xml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/pmd-java/src/main/resources/category/java/codestyle.xml b/pmd-java/src/main/resources/category/java/codestyle.xml index d525b0df9c..7f16e0177d 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -172,32 +172,33 @@ public class SomeJNIClass { -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. + Methods that return boolean or 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. 4 - - From 8b2af2db8a6b3e006a39d38b4f2538012f15f913 Mon Sep 17 00:00:00 2001 From: Aryant Tripathi Date: Thu, 10 Oct 2024 20:44:06 +0530 Subject: [PATCH 19/33] Support wrapper class in BooleanGetMethodName rule (#5253) - Updated XPath rule to include both primitive and wrapper class: (PrimitiveType[@Kind = 'boolean'] or ClassType[pmd-java:typeIs('java.lang.Boolean')]) - Added test cases to ensure that methods returning are also flagged correctly. - Ensured the rule enforces consistent method naming for both primitive and wrapper types. --- .../resources/category/java/codestyle.xml | 2 +- .../codestyle/xml/BooleanGetMethodName.xml | 60 +++++++++++++++++++ 2 files changed, 61 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 7f16e0177d..5b382db9bc 100644 --- a/pmd-java/src/main/resources/category/java/codestyle.xml +++ b/pmd-java/src/main/resources/category/java/codestyle.xml @@ -187,7 +187,7 @@ public class SomeJNIClass { //MethodDeclaration [starts-with(@Name, 'get')] [@Arity = 0 or $checkParameterizedMethods = true()] - [ (PrimitiveType[@Kind = 'boolean'] or ReferenceType[@Type = 'Boolean']) and @Overridden = false() ] + [ (PrimitiveType[@Kind = 'boolean'] or ClassType[pmd-java:typeIs('java.lang.Boolean')]) and @Overridden = false() ] ]]> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml index c0eee19a2f..648afbf32b 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml @@ -34,6 +34,16 @@ public class Foo { ]]> + + Should not match on multiple parameters by default + 0 + + + Should not match on methods annotated with @Override 0 @@ -60,4 +70,54 @@ public class Foo { } ]]> + + + Bad name + 1 + + + + + Good name + 0 + + + + + Should not match on methods annotated with @Override + 0 + + + + + + + Should match on multiple parameters when checkParameterizedMethods = true + true + 1 + + + From fbde9b967f2194975546141a78ffa9df726ea5d3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 11 Oct 2024 12:35:19 +0200 Subject: [PATCH 20/33] [doc] Update release notes (#5261, #5264) --- 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 197b7a4aec..4b87f9bfae 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -32,6 +32,7 @@ The old rule names still work but are deprecated. ### 🐛 Fixed Issues * java * [#4532](https://github.com/pmd/pmd/issues/4532): \[java] Rule misnomer for JUnit* rules + * [#5261](https://github.com/pmd/pmd/issues/5261): \[java] Record patterns with empty deconstructor lists lead to NPE * java-errorprone * [#5067](https://github.com/pmd/pmd/issues/5067): \[java] CloseResource: False positive for FileSystems.getDefault() @@ -49,6 +50,7 @@ The old rule names still work but are deprecated. * [#4965](https://github.com/pmd/pmd/pull/4965): \[java] Rename JUnit rules with overly restrictive names - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) * [#5225](https://github.com/pmd/pmd/pull/5225): \[java] Fix #5067: CloseResource: False positive for FileSystems.getDefault() - [Lukas Gräf](https://github.com/lukasgraef) (@lukasgraef) * [#5241](https://github.com/pmd/pmd/pull/5241): Ignore javacc code in coverage report - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) +* [#5264](https://github.com/pmd/pmd/pull/5264): \[java] Fix NPE with empty pattern list - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) {% endtocmaker %} From 7655cfc63bb1b7dfdea2298beec0ae30215bb5e5 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 11 Oct 2024 12:35:45 +0200 Subject: [PATCH 21/33] Add @gudzpoz as a contributor --- .all-contributorsrc | 9 ++++++ docs/pages/pmd/projectdocs/credits.md | 41 ++++++++++++++------------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 28d946f30a..e04c9b717b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7819,6 +7819,15 @@ "contributions": [ "bug" ] + }, + { + "login": "gudzpoz", + "name": "gudzpoz", + "avatar_url": "https://avatars.githubusercontent.com/u/14026120?v=4", + "profile": "https://kyo.iroiro.party/", + "contributions": [ + "bug" + ] } ], "contributorsPerLine": 7, diff --git a/docs/pages/pmd/projectdocs/credits.md b/docs/pages/pmd/projectdocs/credits.md index 4795947746..04fbc8f37a 100644 --- a/docs/pages/pmd/projectdocs/credits.md +++ b/docs/pages/pmd/projectdocs/credits.md @@ -930,180 +930,181 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d fsapatin
fsapatin

🐛 gearsethenry
gearsethenry

🐛 gracia19
gracia19

🐛 - guo fei
guo fei

🐛 + gudzpoz
gudzpoz

🐛 + guo fei
guo fei

🐛 gurmsc5
gurmsc5

🐛 gwilymatgearset
gwilymatgearset

💻 🐛 haigsn
haigsn

🐛 hemanshu070
hemanshu070

🐛 henrik242
henrik242

🐛 hongpuwu
hongpuwu

🐛 - hvbtup
hvbtup

💻 🐛 + hvbtup
hvbtup

💻 🐛 igniti GmbH
igniti GmbH

🐛 ilovezfs
ilovezfs

🐛 imax-erik
imax-erik

🐛 itaigilo
itaigilo

🐛 jakivey32
jakivey32

🐛 jbennett2091
jbennett2091

🐛 - jcamerin
jcamerin

🐛 + jcamerin
jcamerin

🐛 jkeener1
jkeener1

🐛 jmetertea
jmetertea

🐛 johnra2
johnra2

💻 johnzhao9
johnzhao9

🐛 josemanuelrolon
josemanuelrolon

💻 🐛 kabroxiko
kabroxiko

💻 🐛 - karthikaiyasamy
karthikaiyasamy

📖 + karthikaiyasamy
karthikaiyasamy

📖 karwer
karwer

🐛 kaulonline
kaulonline

🐛 kdaemonv
kdaemonv

🐛 kdebski85
kdebski85

🐛 💻 kenji21
kenji21

💻 🐛 kfranic
kfranic

🐛 - khalidkh
khalidkh

🐛 + khalidkh
khalidkh

🐛 koalalam
koalalam

🐛 krzyk
krzyk

🐛 lasselindqvist
lasselindqvist

🐛 lgemeinhardt
lgemeinhardt

🐛 lihuaib
lihuaib

🐛 liqingjun123
liqingjun123

🐛 - lonelyma1021
lonelyma1021

🐛 + lonelyma1021
lonelyma1021

🐛 lpeddy
lpeddy

🐛 lujiefsi
lujiefsi

💻 lukelukes
lukelukes

💻 lyriccoder
lyriccoder

🐛 marcelmore
marcelmore

🐛 matchbox
matchbox

🐛 - matthiaskraaz
matthiaskraaz

🐛 + matthiaskraaz
matthiaskraaz

🐛 meandonlyme
meandonlyme

🐛 mikesive
mikesive

🐛 milossesic
milossesic

🐛 mluckam
mluckam

💻 🐛 mohan-chinnappan-n
mohan-chinnappan-n

💻 mriddell95
mriddell95

🐛 - mrlzh
mrlzh

🐛 + mrlzh
mrlzh

🐛 msloan
msloan

🐛 mucharlaravalika
mucharlaravalika

🐛 mvenneman
mvenneman

🐛 nareshl119
nareshl119

🐛 nicolas-harraudeau-sonarsource
nicolas-harraudeau-sonarsource

🐛 noerremark
noerremark

🐛 - novsirion
novsirion

🐛 + novsirion
novsirion

🐛 nwcm
nwcm

📖 🐛 💻 oggboy
oggboy

🐛 oinume
oinume

🐛 orimarko
orimarko

💻 🐛 pablogomez2197
pablogomez2197

🐛 pacvz
pacvz

💻 - pallavi agarwal
pallavi agarwal

🐛 + pallavi agarwal
pallavi agarwal

🐛 parksungrin
parksungrin

🐛 patpatpat123
patpatpat123

🐛 patriksevallius
patriksevallius

🐛 pbrajesh1
pbrajesh1

🐛 phoenix384
phoenix384

🐛 piotrszymanski-sc
piotrszymanski-sc

💻 - plan3d
plan3d

🐛 + plan3d
plan3d

🐛 poojasix
poojasix

🐛 prabhushrikant
prabhushrikant

🐛 pujitha8783
pujitha8783

🐛 r-r-a-j
r-r-a-j

🐛 raghujayjunk
raghujayjunk

🐛 rajeshveera
rajeshveera

🐛 - rajeswarreddy88
rajeswarreddy88

🐛 + rajeswarreddy88
rajeswarreddy88

🐛 recdevs
recdevs

🐛 reudismam
reudismam

💻 🐛 rijkt
rijkt

🐛 rillig-tk
rillig-tk

🐛 rmohan20
rmohan20

💻 🐛 rnveach
rnveach

🐛 - rxmicro
rxmicro

🐛 + rxmicro
rxmicro

🐛 ryan-gustafson
ryan-gustafson

💻 🐛 sabi0
sabi0

🐛 scais
scais

🐛 schosin
schosin

🐛 screamingfrog
screamingfrog

💵 sebbASF
sebbASF

🐛 - sergeygorbaty
sergeygorbaty

💻 + sergeygorbaty
sergeygorbaty

💻 shilko2013
shilko2013

🐛 shiomiyan
shiomiyan

📖 simeonKondr
simeonKondr

🐛 snajberk
snajberk

🐛 sniperrifle2004
sniperrifle2004

🐛 snuyanzin
snuyanzin

🐛 💻 - soloturn
soloturn

🐛 + soloturn
soloturn

🐛 soyodream
soyodream

🐛 sratz
sratz

🐛 stonio
stonio

🐛 sturton
sturton

💻 🐛 sudharmohan
sudharmohan

🐛 suruchidawar
suruchidawar

🐛 - svenfinitiv
svenfinitiv

🐛 + svenfinitiv
svenfinitiv

🐛 szymanp23
szymanp23

🐛 💻 tashiscool
tashiscool

🐛 test-git-hook
test-git-hook

🐛 testation21
testation21

💻 🐛 thanosa
thanosa

🐛 tiandiyixian
tiandiyixian

🐛 - tobwoerk
tobwoerk

🐛 + tobwoerk
tobwoerk

🐛 tprouvot
tprouvot

🐛 💻 trentchilders
trentchilders

🐛 triandicAnt
triandicAnt

🐛 trishul14
trishul14

🐛 tsui
tsui

🐛 wangzitom12306
wangzitom12306

🐛 - winhkey
winhkey

🐛 + winhkey
winhkey

🐛 witherspore
witherspore

🐛 wjljack
wjljack

🐛 wuchiuwong
wuchiuwong

🐛 xingsong
xingsong

🐛 xioayuge
xioayuge

🐛 xnYi9wRezm
xnYi9wRezm

💻 🐛 - xuanuy
xuanuy

🐛 + xuanuy
xuanuy

🐛 xyf0921
xyf0921

🐛 yalechen-cyw3
yalechen-cyw3

🐛 yasuharu-sato
yasuharu-sato

🐛 zenglian
zenglian

🐛 zgrzyt93
zgrzyt93

💻 🐛 zh3ng
zh3ng

🐛 - zt_soft
zt_soft

🐛 + zt_soft
zt_soft

🐛 ztt79
ztt79

🐛 zzzzfeng
zzzzfeng

🐛 Árpád Magosányi
Árpád Magosányi

🐛 From 8ac55e7ad706d6095653e5a0e168e5eb4a822411 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 11 Oct 2024 16:42:42 +0200 Subject: [PATCH 22/33] Bump org.junit from 5.8.2 to 5.11.2 (#5274) Also update junit-platform from 1.10.2 to 1.11.2 - Supersedes and closes #5260 - Supersedes and closes #5259 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 8f0474ab59..9d4e2061ab 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ ${maven.compiler.test.target} 1.9.24 5.9.1 - 5.8.2 + 5.11.2 1.9.20 5.0 @@ -963,7 +963,7 @@ org.junit.platform junit-platform-suite - 1.10.2 + 1.11.2 test @@ -1092,13 +1092,13 @@ 3.25.5 - org.junit.platform junit-platform-commons - 1.8.2 + 1.11.2 test From ed6312e3baa48e783cd8e0891b0243af13dc1fd4 Mon Sep 17 00:00:00 2001 From: Aryant Tripathi Date: Fri, 11 Oct 2024 22:29:42 +0530 Subject: [PATCH 23/33] Support wrapper class in BooleanGetMethodName rule (#5253)\n \n - Updated XPath rule to include both primitive and wrapper class:\n (PrimitiveType[@Kind = 'boolean'] or ClassType[pmd-java:typeIs('java.lang.Boolean')])\n - Added test cases to ensure that methods returning are also flagged correctly.\n - Ensured the rule enforces consistent method naming for both primitive and wrapper types. --- .../codestyle/xml/BooleanGetMethodName.xml | 59 ++++++++++++++++--- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml index 648afbf32b..09e067a271 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml @@ -35,11 +35,13 @@ public class Foo { - Should not match on multiple parameters by default + Should not match for boxed Boolean on multiple parameters by default (#5253) 0 @@ -72,11 +74,13 @@ public class Foo { - Bad name + Bad name with boxed Boolean (#5253) 1 @@ -86,13 +90,15 @@ public class Foo { 0 - Should not match on methods annotated with @Override + Should not match for boxed Boolean on methods annotated with @Override (#5253) 0 - - - Should match on multiple parameters when checkParameterizedMethods = true + Should match for boxed Boolean on multiple parameters when checkParameterizedMethods = true (#5253) true 1 + + Should match for boxed Boolean on multiple parameters when checkParameterizedMethods = true (#5253) + true + 1 + + + + + Custom Boolean type (#5253) + 0 + + + + + Custom Boolean type with returning value (#5253) + 0 + + + From 9077c6a71f14946285aafaaa81d93dff85000d39 Mon Sep 17 00:00:00 2001 From: Aryant Tripathi Date: Fri, 11 Oct 2024 22:34:07 +0530 Subject: [PATCH 24/33] Support wrapper class in BooleanGetMethodName rule (#5253)\n \n - Updated XPath rule to include both primitive and wrapper class:\n (PrimitiveType[@Kind = 'boolean'] or ClassType[pmd-java:typeIs('java.lang.Boolean')])\n - Added test cases to ensure that methods returning are also flagged correctly.\n - Ensured the rule enforces consistent method naming for both primitive and wrapper types. --- .../pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml index 09e067a271..6231601d6d 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/BooleanGetMethodName.xml @@ -86,7 +86,7 @@ public class Foo { - Good name + Good name with boxed Boolean (#5253) 0 Date: Sat, 12 Oct 2024 18:01:21 +0200 Subject: [PATCH 25/33] [doc] Update release notes (#5253, #5269) --- 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 4b87f9bfae..e6c419b789 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -33,6 +33,8 @@ The old rule names still work but are deprecated. * java * [#4532](https://github.com/pmd/pmd/issues/4532): \[java] Rule misnomer for JUnit* rules * [#5261](https://github.com/pmd/pmd/issues/5261): \[java] Record patterns with empty deconstructor lists lead to NPE +* java-codestyle + * [#5253](https://github.com/pmd/pmd/issues/5253): \[java] BooleanGetMethodName: False-negatives with `Boolean` wrapper * java-errorprone * [#5067](https://github.com/pmd/pmd/issues/5067): \[java] CloseResource: False positive for FileSystems.getDefault() @@ -51,6 +53,7 @@ The old rule names still work but are deprecated. * [#5225](https://github.com/pmd/pmd/pull/5225): \[java] Fix #5067: CloseResource: False positive for FileSystems.getDefault() - [Lukas Gräf](https://github.com/lukasgraef) (@lukasgraef) * [#5241](https://github.com/pmd/pmd/pull/5241): Ignore javacc code in coverage report - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) * [#5264](https://github.com/pmd/pmd/pull/5264): \[java] Fix NPE with empty pattern list - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) +* [#5269](https://github.com/pmd/pmd/pull/5269): \[java] Fix #5253: Support Boolean wrapper class for BooleanGetMethodName rule - [Aryant Tripathi](https://github.com/Aryant-Tripathi) (@Aryant-Tripathi) {% endtocmaker %} From 47a59b1810d73572108d0e34e89ae8dccc5fbe16 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 12 Oct 2024 18:01:45 +0200 Subject: [PATCH 26/33] Add @phansys as a contributor --- .all-contributorsrc | 9 ++ docs/pages/pmd/projectdocs/credits.md | 167 +++++++++++++------------- 2 files changed, 93 insertions(+), 83 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index e04c9b717b..24f01443b1 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7828,6 +7828,15 @@ "contributions": [ "bug" ] + }, + { + "login": "phansys", + "name": "Javier Spagnoletti", + "avatar_url": "https://avatars.githubusercontent.com/u/1231441?v=4", + "profile": "https://github.com/phansys", + "contributions": [ + "bug" + ] } ], "contributorsPerLine": 7, diff --git a/docs/pages/pmd/projectdocs/credits.md b/docs/pages/pmd/projectdocs/credits.md index 04fbc8f37a..2ea476a44a 100644 --- a/docs/pages/pmd/projectdocs/credits.md +++ b/docs/pages/pmd/projectdocs/credits.md @@ -359,751 +359,752 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Jason Qiu
Jason Qiu

💻 📖 Jason Williams
Jason Williams

🐛 + Javier Spagnoletti
Javier Spagnoletti

🐛 Jean-Paul Mayer
Jean-Paul Mayer

🐛 Jean-Simon Larochelle
Jean-Simon Larochelle

🐛 Jeff Bartolotta
Jeff Bartolotta

💻 🐛 Jeff Hube
Jeff Hube

💻 🐛 - Jeff Jensen
Jeff Jensen

🐛 + Jeff Jensen
Jeff Jensen

🐛 Jeff May
Jeff May

🐛 Jens Gerdes
Jens Gerdes

🐛 Jeroen Borgers
Jeroen Borgers

🐛 💻 📢 Jeroen Meijer
Jeroen Meijer

🐛 Jeroen van Wilgenburg
Jeroen van Wilgenburg

📖 Jerome Russ
Jerome Russ

🐛 - JerritEic
JerritEic

💻 📖 🐛 + JerritEic
JerritEic

💻 📖 🐛 Jiri Pejchal
Jiri Pejchal

🐛 Jithin Sunny
Jithin Sunny

🐛 Jiří Škorpil
Jiří Škorpil

🐛 Joao Machado
Joao Machado

🐛 Jochen Krauss
Jochen Krauss

🐛 Johan Hammar
Johan Hammar

🐛 - John Karp
John Karp

🐛 + John Karp
John Karp

🐛 John Zhang
John Zhang

🐛 John-Teng
John-Teng

💻 🐛 Jon Moroney
Jon Moroney

💻 🐛 Jonas Geiregat
Jonas Geiregat

🐛 Jonas Keßler
Jonas Keßler

🐛 Jonathan Wiesel
Jonathan Wiesel

💻 🐛 - Jordan
Jordan

🐛 + Jordan
Jordan

🐛 Jordi Llach
Jordi Llach

🐛 Jorge Solórzano
Jorge Solórzano

🐛 JorneVL
JorneVL

🐛 Jose Palafox
Jose Palafox

🐛 Jose Stovall
Jose Stovall

🐛 Joseph
Joseph

💻 - Joseph Heenan
Joseph Heenan

🐛 + Joseph Heenan
Joseph Heenan

🐛 Josh Feingold
Josh Feingold

💻 🐛 Josh Holthaus
Josh Holthaus

🐛 Joshua S Arquilevich
Joshua S Arquilevich

🐛 João Dinis Ferreira
João Dinis Ferreira

📖 João Ferreira
João Ferreira

💻 🐛 João Pedro Schmitt
João Pedro Schmitt

🐛 - Juan Martín Sotuyo Dodero
Juan Martín Sotuyo Dodero

💻 📖 🐛 🚧 + Juan Martín Sotuyo Dodero
Juan Martín Sotuyo Dodero

💻 📖 🐛 🚧 Juan Pablo Civile
Juan Pablo Civile

🐛 Julian Voronetsky
Julian Voronetsky

🐛 Julien
Julien

🐛 Julius
Julius

🐛 JustPRV
JustPRV

🐛 Justin Stroud
Justin Stroud

💻 - Jörn Huxhorn
Jörn Huxhorn

🐛 + Jörn Huxhorn
Jörn Huxhorn

🐛 KThompso
KThompso

🐛 Kai Amundsen
Kai Amundsen

🐛 Karel Vervaeke
Karel Vervaeke

🐛 Karl-Andero Mere
Karl-Andero Mere

🐛 Karl-Philipp Richter
Karl-Philipp Richter

🐛 Karsten Silz
Karsten Silz

🐛 - Kazuma Watanabe
Kazuma Watanabe

🐛 + Kazuma Watanabe
Kazuma Watanabe

🐛 Kev
Kev

🐛 Keve Müller
Keve Müller

🐛 Kevin Guerra
Kevin Guerra

💻 Kevin Jones
Kevin Jones

🐛 💻 Kevin Poorman
Kevin Poorman

🐛 Kevin Wayne
Kevin Wayne

🐛 - Kieran Black
Kieran Black

🐛 + Kieran Black
Kieran Black

🐛 Kirill Zubov
Kirill Zubov

🐛 Kirk Clemens
Kirk Clemens

💻 🐛 Klaus Hartl
Klaus Hartl

🐛 Koen Van Looveren
Koen Van Looveren

🐛 Kris Scheibe
Kris Scheibe

💻 🐛 Krystian Dabrowski
Krystian Dabrowski

🐛 💻 - Kunal Thanki
Kunal Thanki

🐛 + Kunal Thanki
Kunal Thanki

🐛 LaLucid
LaLucid

💻 Larry Diamond
Larry Diamond

💻 🐛 Lars Knickrehm
Lars Knickrehm

🐛 Laurent Bovet
Laurent Bovet

🐛 💻 Leo Gutierrez
Leo Gutierrez

🐛 LiGaOg
LiGaOg

💻 - Liam Sharp
Liam Sharp

🐛 + Liam Sharp
Liam Sharp

🐛 Lintsi
Lintsi

🐛 Linus Fernandes
Linus Fernandes

🐛 Lixon Lookose
Lixon Lookose

🐛 Logesh
Logesh

🐛 Lorenzo Gabriele
Lorenzo Gabriele

🐛 Loïc Ledoyen
Loïc Ledoyen

🐛 - Lucas
Lucas

🐛 + Lucas
Lucas

🐛 Lucas Silva
Lucas Silva

🐛 Lucas Soncini
Lucas Soncini

💻 🐛 Luis Alcantar
Luis Alcantar

💻 Lukas Gräf
Lukas Gräf

💻 Lukasz Slonina
Lukasz Slonina

🐛 Lukebray
Lukebray

🐛 - Lynn
Lynn

💻 🐛 + Lynn
Lynn

💻 🐛 Lyor Goldstein
Lyor Goldstein

🐛 MCMicS
MCMicS

🐛 Macarse
Macarse

🐛 Machine account for PMD
Machine account for PMD

💻 Maciek Siemczyk
Maciek Siemczyk

🐛 Maikel Steneker
Maikel Steneker

💻 🐛 - Maksim Moiseikin
Maksim Moiseikin

🐛 + Maksim Moiseikin
Maksim Moiseikin

🐛 Manfred Koch
Manfred Koch

🐛 Manuel Moya Ferrer
Manuel Moya Ferrer

💻 🐛 Manuel Ryan
Manuel Ryan

🐛 Marat Vyshegorodtsev
Marat Vyshegorodtsev

🐛 Marcel Härle
Marcel Härle

🐛 Marcello Fialho
Marcello Fialho

🐛 - Marcin Dąbrowski
Marcin Dąbrowski

💻 + Marcin Dąbrowski
Marcin Dąbrowski

💻 Marcin Rataj
Marcin Rataj

🐛 Marcono1234
Marcono1234

🐛 Mark Adamcin
Mark Adamcin

🐛 Mark Hall
Mark Hall

💻 🐛 Mark Kolich
Mark Kolich

🐛 Mark Pritchard
Mark Pritchard

🐛 - Markus Rathgeb
Markus Rathgeb

🐛 + Markus Rathgeb
Markus Rathgeb

🐛 Marquis Wang
Marquis Wang

🐛 MartGit
MartGit

🐛 Martin Feldsztejn
Martin Feldsztejn

🐛 Martin Lehmann
Martin Lehmann

🐛 Martin Spamer
Martin Spamer

🐛 Martin Tarjányi
Martin Tarjányi

🐛 - MatFl
MatFl

🐛 + MatFl
MatFl

🐛 Mateusz Stefanski
Mateusz Stefanski

🐛 Mathieu Gouin
Mathieu Gouin

🐛 MatiasComercio
MatiasComercio

💻 🐛 Matt Benson
Matt Benson

🐛 Matt De Poorter
Matt De Poorter

🐛 Matt Hargett
Matt Hargett

💻 💵 - Matt Harrah
Matt Harrah

🐛 + Matt Harrah
Matt Harrah

🐛 Matt Nelson
Matt Nelson

🐛 Matthew Amos
Matthew Amos

🐛 Matthew Duggan
Matthew Duggan

🐛 Matthew Hall
Matthew Hall

🐛 Matthew Rossner
Matthew Rossner

🐛 Matías Fraga
Matías Fraga

💻 🐛 - Maxime Robert
Maxime Robert

💻 🐛 + Maxime Robert
Maxime Robert

💻 🐛 MetaBF
MetaBF

🐛 Metin Dagcilar
Metin Dagcilar

🐛 Michael
Michael

🐛 Michael Bell
Michael Bell

🐛 Michael Bernstein
Michael Bernstein

🐛 Michael Clay
Michael Clay

🐛 - Michael Dombrowski
Michael Dombrowski

🐛 + Michael Dombrowski
Michael Dombrowski

🐛 Michael Hausegger
Michael Hausegger

🐛 Michael Hoefer
Michael Hoefer

🐛 Michael Kolesnikov
Michael Kolesnikov

🐛 Michael Möbius
Michael Möbius

🐛 Michael N. Lipp
Michael N. Lipp

🐛 Michael Pellegrini
Michael Pellegrini

🐛 - Michal Kordas
Michal Kordas

🐛 + Michal Kordas
Michal Kordas

🐛 Michał Borek
Michał Borek

🐛 Michał Kuliński
Michał Kuliński

🐛 Miguel Núñez Díaz-Montes
Miguel Núñez Díaz-Montes

🐛 Mihai Ionut
Mihai Ionut

🐛 Mikhail Kuchma
Mikhail Kuchma

🐛 Mirek Hankus
Mirek Hankus

🐛 - Mitch Spano
Mitch Spano

🐛 + Mitch Spano
Mitch Spano

🐛 Mladjan Gadzic
Mladjan Gadzic

🐛 MrAngry52
MrAngry52

🐛 Muminur Choudhury
Muminur Choudhury

🐛 Mykhailo Palahuta
Mykhailo Palahuta

💻 🐛 Nagendra Kumar Singh
Nagendra Kumar Singh

🐛 Nahuel Barrios
Nahuel Barrios

🐛 - Nakul Sharma
Nakul Sharma

🐛 + Nakul Sharma
Nakul Sharma

🐛 Nathan Braun
Nathan Braun

🐛 Nathan Reynolds
Nathan Reynolds

🐛 Nathan Reynolds
Nathan Reynolds

🐛 Nathanaël
Nathanaël

🐛 Naveen
Naveen

💻 Nazdravi
Nazdravi

🐛 - Neha-Dhonde
Neha-Dhonde

🐛 + Neha-Dhonde
Neha-Dhonde

🐛 Nicholas Doyle
Nicholas Doyle

🐛 Nick Butcher
Nick Butcher

🐛 Nico Gallinal
Nico Gallinal

🐛 Nicola Dal Maso
Nicola Dal Maso

🐛 Nicolas Filotto
Nicolas Filotto

💻 Nicolas Vervelle
Nicolas Vervelle

🐛 - Nicolas Vuillamy
Nicolas Vuillamy

📖 + Nicolas Vuillamy
Nicolas Vuillamy

📖 Nikita Chursin
Nikita Chursin

🐛 Niklas Baudy
Niklas Baudy

🐛 Nikolas Havrikov
Nikolas Havrikov

🐛 Nilesh Virkar
Nilesh Virkar

🐛 Nimit Patel
Nimit Patel

🐛 Niranjan Harpale
Niranjan Harpale

🐛 - Nirvik Patel
Nirvik Patel

💻 + Nirvik Patel
Nirvik Patel

💻 Noah Sussman
Noah Sussman

🐛 Noah0120
Noah0120

🐛 Noam Tamim
Noam Tamim

🐛 Noel Grandin
Noel Grandin

🐛 Olaf Haalstra
Olaf Haalstra

🐛 Oleg Andreych
Oleg Andreych

💻 🐛 - Oleg Pavlenko
Oleg Pavlenko

🐛 + Oleg Pavlenko
Oleg Pavlenko

🐛 Oleksii Dykov
Oleksii Dykov

💻 🐛 Oliver Eikemeier
Oliver Eikemeier

🐛 Oliver Siegmar
Oliver Siegmar

💵 Olivier Parent
Olivier Parent

💻 🐛 Ollie Abbey
Ollie Abbey

💻 🐛 Ondrej Kratochvil
Ondrej Kratochvil

🐛 - OverDrone
OverDrone

🐛 + OverDrone
OverDrone

🐛 Ozan Gulle
Ozan Gulle

💻 🐛 PUNEET JAIN
PUNEET JAIN

🐛 Parbati Bose
Parbati Bose

🐛 Paul Berg
Paul Berg

🐛 Paul Guyot
Paul Guyot

💻 Pavel Bludov
Pavel Bludov

🐛 - Pavel Mička
Pavel Mička

🐛 + Pavel Mička
Pavel Mička

🐛 Pedro Nuno Santos
Pedro Nuno Santos

🐛 Pedro Rijo
Pedro Rijo

🐛 Pelisse Romain
Pelisse Romain

💻 📖 🐛 Per Abich
Per Abich

💻 Pete Davids
Pete Davids

🐛 Peter Bruin
Peter Bruin

🐛 - Peter Chittum
Peter Chittum

💻 🐛 + Peter Chittum
Peter Chittum

💻 🐛 Peter Cudmore
Peter Cudmore

🐛 Peter Kasson
Peter Kasson

🐛 Peter Kofler
Peter Kofler

🐛 Peter Paul Bakker
Peter Paul Bakker

💻 Peter Rader
Peter Rader

🐛 Pham Hai Trung
Pham Hai Trung

🐛 - Philip Graf
Philip Graf

💻 🐛 + Philip Graf
Philip Graf

💻 🐛 Philip Hachey
Philip Hachey

🐛 Philippe Ozil
Philippe Ozil

🐛 Phinehas Artemix
Phinehas Artemix

🐛 Phokham Nonava
Phokham Nonava

🐛 Pim van der Loos
Pim van der Loos

💻 ⚠️ Piotr Szymański
Piotr Szymański

🐛 - Piotrek Żygieło
Piotrek Żygieło

💻 🐛 📖 + Piotrek Żygieło
Piotrek Żygieło

💻 🐛 📖 Pranay Jaiswal
Pranay Jaiswal

🐛 Prasad Kamath
Prasad Kamath

🐛 Prasanna
Prasanna

🐛 Presh-AR
Presh-AR

🐛 Puneet1726
Puneet1726

🐛 RBRi
RBRi

🐛 - Rafael Cortês
Rafael Cortês

🐛 + Rafael Cortês
Rafael Cortês

🐛 RaheemShaik999
RaheemShaik999

🐛 RajeshR
RajeshR

💻 🐛 Ramachandra Mohan
Ramachandra Mohan

🐛 Ramel0921
Ramel0921

🐛 Raquel Pau
Raquel Pau

🐛 Ravikiran Janardhana
Ravikiran Janardhana

🐛 - Reda Benhemmouche
Reda Benhemmouche

🐛 + Reda Benhemmouche
Reda Benhemmouche

🐛 Reinhard Schiedermeier
Reinhard Schiedermeier

🐛 Renato Oliveira
Renato Oliveira

💻 🐛 Rich DiCroce
Rich DiCroce

🐛 Richard Corfield
Richard Corfield

💻 Richard Corfield
Richard Corfield

🐛 💻 Riot R1cket
Riot R1cket

🐛 - Rishabh Jain
Rishabh Jain

🐛 + Rishabh Jain
Rishabh Jain

🐛 RishabhDeep Singh
RishabhDeep Singh

🐛 Rob Baillie
Rob Baillie

🐛 Robbie Martinus
Robbie Martinus

💻 🐛 Robert Henry
Robert Henry

🐛 Robert Mihaly
Robert Mihaly

🐛 Robert Painsi
Robert Painsi

🐛 - Robert Russell
Robert Russell

🐛 + Robert Russell
Robert Russell

🐛 Robert Sösemann
Robert Sösemann

💻 📖 📢 🐛 Robert Whitebit
Robert Whitebit

🐛 Robin Richtsfeld
Robin Richtsfeld

🐛 Robin Stocker
Robin Stocker

💻 🐛 Robin Wils
Robin Wils

🐛 RochusOest
RochusOest

🐛 - Rodolfo Noviski
Rodolfo Noviski

🐛 + Rodolfo Noviski
Rodolfo Noviski

🐛 Rodrigo Casara
Rodrigo Casara

🐛 Rodrigo Fernandes
Rodrigo Fernandes

🐛 Roman Salvador
Roman Salvador

💻 🐛 Ronald Blaschke
Ronald Blaschke

🐛 Róbert Papp
Róbert Papp

🐛 Saikat Sengupta
Saikat Sengupta

🐛 - Saksham Handu
Saksham Handu

🐛 + Saksham Handu
Saksham Handu

🐛 Saladoc
Saladoc

🐛 Salesforce Bob Lightning
Salesforce Bob Lightning

🐛 Sam Carlberg
Sam Carlberg

🐛 Sascha Riemer
Sascha Riemer

🐛 Sashko
Sashko

💻 Satoshi Kubo
Satoshi Kubo

🐛 - Scott Kennedy
Scott Kennedy

🐛 + Scott Kennedy
Scott Kennedy

🐛 Scott Wells
Scott Wells

🐛 💻 Scrates1
Scrates1

🐛 💻 Scrsloota
Scrsloota

💻 Sebastian Bögl
Sebastian Bögl

🐛 Sebastian Davids
Sebastian Davids

🐛 Sebastian Schuberth
Sebastian Schuberth

🐛 - Sebastian Schwarz
Sebastian Schwarz

🐛 + Sebastian Schwarz
Sebastian Schwarz

🐛 Seren
Seren

🐛 💻 Sergey Gorbaty
Sergey Gorbaty

🐛 Sergey Kozlov
Sergey Kozlov

🐛 Sergey Yanzin
Sergey Yanzin

💻 🐛 Seth Wilcox
Seth Wilcox

💻 Shai Bennathan
Shai Bennathan

🐛 💻 - Shubham
Shubham

💻 🐛 + Shubham
Shubham

💻 🐛 Simon Abykov
Simon Abykov

💻 🐛 Simon Xiao
Simon Xiao

🐛 Srinivasan Venkatachalam
Srinivasan Venkatachalam

🐛 Stanislav Gromov
Stanislav Gromov

🐛 Stanislav Myachenkov
Stanislav Myachenkov

💻 Stefan Birkner
Stefan Birkner

🐛 - Stefan Bohn
Stefan Bohn

🐛 + Stefan Bohn
Stefan Bohn

🐛 Stefan Endrullis
Stefan Endrullis

🐛 Stefan Klöss-Schuster
Stefan Klöss-Schuster

🐛 Stefan Wolf
Stefan Wolf

🐛 Stephan H. Wissel
Stephan H. Wissel

🐛 Stephen
Stephen

🐛 Stephen Carter
Stephen Carter

🐛 - Stephen Friedrich
Stephen Friedrich

🐛 + Stephen Friedrich
Stephen Friedrich

🐛 Steve Babula
Steve Babula

💻 Steven Stearns
Steven Stearns

🐛 💻 Stexxe
Stexxe

🐛 Stian Lågstad
Stian Lågstad

🐛 StuartClayton5
StuartClayton5

🐛 Supun Arunoda
Supun Arunoda

🐛 - Suren Abrahamyan
Suren Abrahamyan

🐛 + Suren Abrahamyan
Suren Abrahamyan

🐛 Suvashri
Suvashri

📖 SwatiBGupta1110
SwatiBGupta1110

🐛 SyedThoufich
SyedThoufich

🐛 Szymon Sasin
Szymon Sasin

🐛 T-chuangxin
T-chuangxin

🐛 TERAI Atsuhiro
TERAI Atsuhiro

🐛 - TIOBE Software
TIOBE Software

💻 🐛 + TIOBE Software
TIOBE Software

💻 🐛 Tarush Singh
Tarush Singh

💻 Taylor Smock
Taylor Smock

🐛 Techeira Damián
Techeira Damián

💻 🐛 Ted Husted
Ted Husted

🐛 TehBakker
TehBakker

🐛 The Gitter Badger
The Gitter Badger

🐛 - Theodoor
Theodoor

🐛 + Theodoor
Theodoor

🐛 Thiago Henrique Hüpner
Thiago Henrique Hüpner

🐛 Thibault Meyer
Thibault Meyer

🐛 Thomas Güttler
Thomas Güttler

🐛 Thomas Jones-Low
Thomas Jones-Low

🐛 Thomas Smith
Thomas Smith

💻 🐛 ThrawnCA
ThrawnCA

🐛 - Thu Vo
Thu Vo

🐛 + Thu Vo
Thu Vo

🐛 Thunderforge
Thunderforge

💻 🐛 Tim van der Lippe
Tim van der Lippe

🐛 Tobias Weimer
Tobias Weimer

💻 🐛 Tom Copeland
Tom Copeland

🐛 💻 📖 Tom Daly
Tom Daly

🐛 Tomas
Tomas

🐛 - Tomer Figenblat
Tomer Figenblat

🐛 + Tomer Figenblat
Tomer Figenblat

🐛 Tomi De Lucca
Tomi De Lucca

💻 🐛 Tony
Tony

📖 Torsten Kleiber
Torsten Kleiber

🐛 TrackerSB
TrackerSB

🐛 Tyson Stewart
Tyson Stewart

🐛 Ullrich Hafner
Ullrich Hafner

🐛 - Utku Cuhadaroglu
Utku Cuhadaroglu

💻 🐛 + Utku Cuhadaroglu
Utku Cuhadaroglu

💻 🐛 Valentin Brandl
Valentin Brandl

🐛 Valeria
Valeria

🐛 Valery Yatsynovich
Valery Yatsynovich

📖 Vasily Anisimov
Vasily Anisimov

🐛 Vedant Chokshi
Vedant Chokshi

🐛 Vibhor Goyal
Vibhor Goyal

🐛 - Vickenty Fesunov
Vickenty Fesunov

🐛 + Vickenty Fesunov
Vickenty Fesunov

🐛 Victor Noël
Victor Noël

🐛 Vincent Galloy
Vincent Galloy

💻 Vincent HUYNH
Vincent HUYNH

🐛 Vincent Maurin
Vincent Maurin

🐛 Vincent Privat
Vincent Privat

🐛 Vishhwas
Vishhwas

🐛 - Vishv_Android
Vishv_Android

🐛 + Vishv_Android
Vishv_Android

🐛 Vitaly
Vitaly

🐛 Vitaly Polonetsky
Vitaly Polonetsky

🐛 Vojtech Polivka
Vojtech Polivka

🐛 Vsevolod Zholobov
Vsevolod Zholobov

🐛 Vyom Yadav
Vyom Yadav

💻 Wang Shidong
Wang Shidong

🐛 - Waqas Ahmed
Waqas Ahmed

🐛 + Waqas Ahmed
Waqas Ahmed

🐛 Wayne J. Earl
Wayne J. Earl

🐛 Wchenghui
Wchenghui

🐛 Wener
Wener

💻 Will Winder
Will Winder

🐛 William Brockhus
William Brockhus

💻 🐛 Wilson Kurniawan
Wilson Kurniawan

🐛 - Wim Deblauwe
Wim Deblauwe

🐛 + Wim Deblauwe
Wim Deblauwe

🐛 Woongsik Choi
Woongsik Choi

🐛 XenoAmess
XenoAmess

💻 🐛 Yang
Yang

💻 YaroslavTER
YaroslavTER

🐛 Yasar Shaikh
Yasar Shaikh

💻 Young Chan
Young Chan

💻 🐛 - YuJin Kim
YuJin Kim

🐛 + YuJin Kim
YuJin Kim

🐛 Yuri Dolzhenko
Yuri Dolzhenko

🐛 Yurii Dubinka
Yurii Dubinka

🐛 Zoltan Farkas
Zoltan Farkas

🐛 Zustin
Zustin

🐛 aaronhurst-google
aaronhurst-google

🐛 💻 alexmodis
alexmodis

🐛 - andreoss
andreoss

🐛 + andreoss
andreoss

🐛 andrey81inmd
andrey81inmd

💻 🐛 anicoara
anicoara

🐛 arunprasathav
arunprasathav

🐛 asiercamara
asiercamara

🐛 astillich-igniti
astillich-igniti

💻 avesolovksyy
avesolovksyy

🐛 - avishvat
avishvat

🐛 + avishvat
avishvat

🐛 avivmu
avivmu

🐛 axelbarfod1
axelbarfod1

🐛 b-3-n
b-3-n

🐛 balbhadra9
balbhadra9

🐛 base23de
base23de

🐛 bergander
bergander

🐛 💻 - berkam
berkam

💻 🐛 + berkam
berkam

💻 🐛 breizh31
breizh31

🐛 caesarkim
caesarkim

🐛 carolyujing
carolyujing

🐛 cbfiddle
cbfiddle

🐛 cesares-basilico
cesares-basilico

🐛 chrite
chrite

🐛 - ciufudean
ciufudean

📖 + ciufudean
ciufudean

📖 cobratbq
cobratbq

🐛 coladict
coladict

🐛 cosmoJFH
cosmoJFH

🐛 cristalp
cristalp

🐛 crunsk
crunsk

🐛 cwholmes
cwholmes

🐛 - cyberjj999
cyberjj999

🐛 + cyberjj999
cyberjj999

🐛 cyw3
cyw3

🐛 📖 d1ss0nanz
d1ss0nanz

🐛 dague1
dague1

📖 dalizi007
dalizi007

💻 danbrycefairsailcom
danbrycefairsailcom

🐛 dariansanity
dariansanity

🐛 - darrenmiliband
darrenmiliband

🐛 + darrenmiliband
darrenmiliband

🐛 davidburstrom
davidburstrom

🐛 dbirkman-paloalto
dbirkman-paloalto

🐛 deepak-patra
deepak-patra

🐛 dependabot[bot]
dependabot[bot]

💻 🐛 dinesh150
dinesh150

🐛 diziaq
diziaq

🐛 - dreaminpast123
dreaminpast123

🐛 + dreaminpast123
dreaminpast123

🐛 duanyanan
duanyanan

🐛 dutt-sanjay
dutt-sanjay

🐛 duursma
duursma

💻 dylanleung
dylanleung

🐛 dzeigler
dzeigler

🐛 eant60
eant60

🐛 - ekkirala
ekkirala

🐛 + ekkirala
ekkirala

🐛 emersonmoura
emersonmoura

🐛 emouty
emouty

💻 eugenepugach
eugenepugach

🐛 fairy
fairy

🐛 filiprafalowicz
filiprafalowicz

💻 flxbl-io
flxbl-io

💵 - foxmason
foxmason

🐛 + foxmason
foxmason

🐛 frankegabor
frankegabor

🐛 frankl
frankl

🐛 freafrea
freafrea

🐛 fsapatin
fsapatin

🐛 gearsethenry
gearsethenry

🐛 gracia19
gracia19

🐛 - gudzpoz
gudzpoz

🐛 + gudzpoz
gudzpoz

🐛 guo fei
guo fei

🐛 gurmsc5
gurmsc5

🐛 gwilymatgearset
gwilymatgearset

💻 🐛 haigsn
haigsn

🐛 hemanshu070
hemanshu070

🐛 henrik242
henrik242

🐛 - hongpuwu
hongpuwu

🐛 + hongpuwu
hongpuwu

🐛 hvbtup
hvbtup

💻 🐛 igniti GmbH
igniti GmbH

🐛 ilovezfs
ilovezfs

🐛 imax-erik
imax-erik

🐛 itaigilo
itaigilo

🐛 jakivey32
jakivey32

🐛 - jbennett2091
jbennett2091

🐛 + jbennett2091
jbennett2091

🐛 jcamerin
jcamerin

🐛 jkeener1
jkeener1

🐛 jmetertea
jmetertea

🐛 johnra2
johnra2

💻 johnzhao9
johnzhao9

🐛 josemanuelrolon
josemanuelrolon

💻 🐛 - kabroxiko
kabroxiko

💻 🐛 + kabroxiko
kabroxiko

💻 🐛 karthikaiyasamy
karthikaiyasamy

📖 karwer
karwer

🐛 kaulonline
kaulonline

🐛 kdaemonv
kdaemonv

🐛 kdebski85
kdebski85

🐛 💻 kenji21
kenji21

💻 🐛 - kfranic
kfranic

🐛 + kfranic
kfranic

🐛 khalidkh
khalidkh

🐛 koalalam
koalalam

🐛 krzyk
krzyk

🐛 lasselindqvist
lasselindqvist

🐛 lgemeinhardt
lgemeinhardt

🐛 lihuaib
lihuaib

🐛 - liqingjun123
liqingjun123

🐛 + liqingjun123
liqingjun123

🐛 lonelyma1021
lonelyma1021

🐛 lpeddy
lpeddy

🐛 lujiefsi
lujiefsi

💻 lukelukes
lukelukes

💻 lyriccoder
lyriccoder

🐛 marcelmore
marcelmore

🐛 - matchbox
matchbox

🐛 + matchbox
matchbox

🐛 matthiaskraaz
matthiaskraaz

🐛 meandonlyme
meandonlyme

🐛 mikesive
mikesive

🐛 milossesic
milossesic

🐛 mluckam
mluckam

💻 🐛 mohan-chinnappan-n
mohan-chinnappan-n

💻 - mriddell95
mriddell95

🐛 + mriddell95
mriddell95

🐛 mrlzh
mrlzh

🐛 msloan
msloan

🐛 mucharlaravalika
mucharlaravalika

🐛 mvenneman
mvenneman

🐛 nareshl119
nareshl119

🐛 nicolas-harraudeau-sonarsource
nicolas-harraudeau-sonarsource

🐛 - noerremark
noerremark

🐛 + noerremark
noerremark

🐛 novsirion
novsirion

🐛 nwcm
nwcm

📖 🐛 💻 oggboy
oggboy

🐛 oinume
oinume

🐛 orimarko
orimarko

💻 🐛 pablogomez2197
pablogomez2197

🐛 - pacvz
pacvz

💻 + pacvz
pacvz

💻 pallavi agarwal
pallavi agarwal

🐛 parksungrin
parksungrin

🐛 patpatpat123
patpatpat123

🐛 patriksevallius
patriksevallius

🐛 pbrajesh1
pbrajesh1

🐛 phoenix384
phoenix384

🐛 - piotrszymanski-sc
piotrszymanski-sc

💻 + piotrszymanski-sc
piotrszymanski-sc

💻 plan3d
plan3d

🐛 poojasix
poojasix

🐛 prabhushrikant
prabhushrikant

🐛 pujitha8783
pujitha8783

🐛 r-r-a-j
r-r-a-j

🐛 raghujayjunk
raghujayjunk

🐛 - rajeshveera
rajeshveera

🐛 + rajeshveera
rajeshveera

🐛 rajeswarreddy88
rajeswarreddy88

🐛 recdevs
recdevs

🐛 reudismam
reudismam

💻 🐛 rijkt
rijkt

🐛 rillig-tk
rillig-tk

🐛 rmohan20
rmohan20

💻 🐛 - rnveach
rnveach

🐛 + rnveach
rnveach

🐛 rxmicro
rxmicro

🐛 ryan-gustafson
ryan-gustafson

💻 🐛 sabi0
sabi0

🐛 scais
scais

🐛 schosin
schosin

🐛 screamingfrog
screamingfrog

💵 - sebbASF
sebbASF

🐛 + sebbASF
sebbASF

🐛 sergeygorbaty
sergeygorbaty

💻 shilko2013
shilko2013

🐛 shiomiyan
shiomiyan

📖 simeonKondr
simeonKondr

🐛 snajberk
snajberk

🐛 sniperrifle2004
sniperrifle2004

🐛 - snuyanzin
snuyanzin

🐛 💻 + snuyanzin
snuyanzin

🐛 💻 soloturn
soloturn

🐛 soyodream
soyodream

🐛 sratz
sratz

🐛 stonio
stonio

🐛 sturton
sturton

💻 🐛 sudharmohan
sudharmohan

🐛 - suruchidawar
suruchidawar

🐛 + suruchidawar
suruchidawar

🐛 svenfinitiv
svenfinitiv

🐛 szymanp23
szymanp23

🐛 💻 tashiscool
tashiscool

🐛 test-git-hook
test-git-hook

🐛 testation21
testation21

💻 🐛 thanosa
thanosa

🐛 - tiandiyixian
tiandiyixian

🐛 + tiandiyixian
tiandiyixian

🐛 tobwoerk
tobwoerk

🐛 tprouvot
tprouvot

🐛 💻 trentchilders
trentchilders

🐛 triandicAnt
triandicAnt

🐛 trishul14
trishul14

🐛 tsui
tsui

🐛 - wangzitom12306
wangzitom12306

🐛 + wangzitom12306
wangzitom12306

🐛 winhkey
winhkey

🐛 witherspore
witherspore

🐛 wjljack
wjljack

🐛 wuchiuwong
wuchiuwong

🐛 xingsong
xingsong

🐛 xioayuge
xioayuge

🐛 - xnYi9wRezm
xnYi9wRezm

💻 🐛 + xnYi9wRezm
xnYi9wRezm

💻 🐛 xuanuy
xuanuy

🐛 xyf0921
xyf0921

🐛 yalechen-cyw3
yalechen-cyw3

🐛 yasuharu-sato
yasuharu-sato

🐛 zenglian
zenglian

🐛 zgrzyt93
zgrzyt93

💻 🐛 - zh3ng
zh3ng

🐛 + zh3ng
zh3ng

🐛 zt_soft
zt_soft

🐛 ztt79
ztt79

🐛 zzzzfeng
zzzzfeng

🐛 From 85e0695ca608d35cb2112c9d374add5674b5710b Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 12 Oct 2024 18:02:07 +0200 Subject: [PATCH 27/33] Add @Aryant-Tripathi as a contributor --- .all-contributorsrc | 9 ++ docs/pages/pmd/projectdocs/credits.md | 225 +++++++++++++------------- 2 files changed, 123 insertions(+), 111 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 24f01443b1..8d11a3745a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7837,6 +7837,15 @@ "contributions": [ "bug" ] + }, + { + "login": "Aryant-Tripathi", + "name": "Aryant Tripathi", + "avatar_url": "https://avatars.githubusercontent.com/u/60316716?v=4", + "profile": "https://github.com/Aryant-Tripathi", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/docs/pages/pmd/projectdocs/credits.md b/docs/pages/pmd/projectdocs/credits.md index 2ea476a44a..0a1cd02cb0 100644 --- a/docs/pages/pmd/projectdocs/credits.md +++ b/docs/pages/pmd/projectdocs/credits.md @@ -110,1006 +110,1009 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Artur Bosch
Artur Bosch

🐛 Artur Dryomov
Artur Dryomov

🐛 Artur Ossowski
Artur Ossowski

🐛 + Aryant Tripathi
Aryant Tripathi

💻 AshTheMash
AshTheMash

🐛 - Ashish Rana
Ashish Rana

🐛 + Ashish Rana
Ashish Rana

🐛 Atul Kaushal
Atul Kaushal

🐛 August Boland
August Boland

🐛 Aurel Hudec
Aurel Hudec

🐛 Austin
Austin

🐛 Austin Shalit
Austin Shalit

🐛 Austin Tice
Austin Tice

🐛 - Ayoub Kaanich
Ayoub Kaanich

🐛 + Ayoub Kaanich
Ayoub Kaanich

🐛 BBG
BBG

💻 📖 🐛 Bailey Tjiong
Bailey Tjiong

💻 Barthélemy L.
Barthélemy L.

🐛 Basavaraj K N
Basavaraj K N

🐛 Basil Peace
Basil Peace

🐛 Belle
Belle

🐛 - Ben Lerner
Ben Lerner

🐛 + Ben Lerner
Ben Lerner

🐛 Ben Manes
Ben Manes

🐛 Ben McCann
Ben McCann

🐛 Bendegúz Nagy
Bendegúz Nagy

🐛 Bennet S Yee
Bennet S Yee

🐛 Benoit Lacelle
Benoit Lacelle

🐛 Bernardo Macêdo
Bernardo Macêdo

🐛 - Bernd Farka
Bernd Farka

🐛 + Bernd Farka
Bernd Farka

🐛 Betina Cynthia Mamani
Betina Cynthia Mamani

🐛 Bhanu Prakash Pamidi
Bhanu Prakash Pamidi

💻 🐛 Bhargav Thanki
Bhargav Thanki

🐛 Binu R J
Binu R J

🐛 Björn Kautler
Björn Kautler

💻 🐛 Blightbuster
Blightbuster

🐛 - Bo Zhang
Bo Zhang

🐛 + Bo Zhang
Bo Zhang

🐛 Bob "Wombat" Hogg
Bob "Wombat" Hogg

🐛 Bobby Wertman
Bobby Wertman

🐛 Bolarinwa Saheed Olayemi
Bolarinwa Saheed Olayemi

💻 🐛 Boris Petrov
Boris Petrov

🐛 Brad Kent
Brad Kent

🐛 Brandon Mikeska
Brandon Mikeska

🐛 - Brian Batronis
Brian Batronis

🐛 + Brian Batronis
Brian Batronis

🐛 Brian Johnson
Brian Johnson

🐛 Brice Dutheil
Brice Dutheil

💻 🐛 Bruno Ferreira
Bruno Ferreira

🐛 Bruno Harbulot
Bruno Harbulot

🐛 Bruno Ritz
Bruno Ritz

🐛 BurovnikovEvgeniy
BurovnikovEvgeniy

🐛 - Cameron Donaldson
Cameron Donaldson

🐛 + Cameron Donaldson
Cameron Donaldson

🐛 Carlos Macasaet
Carlos Macasaet

🐛 Carsten Otto
Carsten Otto

🐛 Charlie Housh
Charlie Housh

🐛 Charlie Jonas
Charlie Jonas

🐛 Chas Honton
Chas Honton

🐛 💻 Chen Yang
Chen Yang

🐛 - Chotu
Chotu

🐛 + Chotu
Chotu

🐛 Chris Smith
Chris Smith

🐛 Chris Toomey
Chris Toomey

🐛 Christian Hujer
Christian Hujer

🐛 Christian Pontesegger
Christian Pontesegger

🐛 ChristianWulf
ChristianWulf

🐛 Christofer Dutz
Christofer Dutz

💻 - Christoffer Anselm
Christoffer Anselm

🐛 + Christoffer Anselm
Christoffer Anselm

🐛 Christophe Vidal
Christophe Vidal

🐛 Christopher Dancy
Christopher Dancy

🐛 Clemens Prill
Clemens Prill

🐛 Clint Chester
Clint Chester

💻 🐛 Clément Fournier
Clément Fournier

💻 📖 🐛 🚧 Codacy Badger
Codacy Badger

🐛 - Code-Nil
Code-Nil

🐛 + Code-Nil
Code-Nil

🐛 ColColonCleaner
ColColonCleaner

🐛 Colin Ingarfield
Colin Ingarfield

🐛 Craig Andrews
Craig Andrews

🐛 Craig Muchinsky
Craig Muchinsky

🐛 Cyril
Cyril

💻 🐛 Dale
Dale

💻 - Damien Jiang
Damien Jiang

🐛 + Damien Jiang
Damien Jiang

🐛 Dan Berindei
Dan Berindei

🐛 Dan Rollo
Dan Rollo

🐛 Dan Ziemba
Dan Ziemba

🐛 Daniel Gredler
Daniel Gredler

💻 🐛 Daniel Jipa
Daniel Jipa

🐛 Daniel Paul Searles
Daniel Paul Searles

💻 - Daniel Reigada
Daniel Reigada

🐛 + Daniel Reigada
Daniel Reigada

🐛 Danilo Pianini
Danilo Pianini

🐛 Darko
Darko

🐛 David
David

🐛 David Atkinson
David Atkinson

🐛 David Burström
David Burström

💻 🐛 David Goaté
David Goaté

🐛 - David Golpira
David Golpira

🐛 + David Golpira
David Golpira

🐛 David Kovařík
David Kovařík

🐛 David M. Karr (fullname at gmail.com)
David M. Karr (fullname at gmail.com)

🐛 David Renz
David Renz

💻 🐛 David Renz
David Renz

🐛 David Schach
David Schach

🐛 💻 📖 Dawid Ciok
Dawid Ciok

🐛 💻 - Debamoy Datta
Debamoy Datta

💻 + Debamoy Datta
Debamoy Datta

💻 Deleted user
Deleted user

🐛 Dell Green
Dell Green

🐛 Dem Pilafian
Dem Pilafian

🐛 Den
Den

🐛 Denis Borovikov
Denis Borovikov

💻 🐛 Dennie Reniers
Dennie Reniers

💻 🐛 - Dennis Kieselhorst
Dennis Kieselhorst

🐛 + Dennis Kieselhorst
Dennis Kieselhorst

🐛 Derek P. Moore
Derek P. Moore

🐛 Dichotomia
Dichotomia

🐛 Dionisio Cortés Fernández
Dionisio Cortés Fernández

💻 🐛 Dmitri Bourlatchkov
Dmitri Bourlatchkov

🐛 Dmitriy Kuzmin
Dmitriy Kuzmin

🐛 Dmytro Dashenkov
Dmytro Dashenkov

🐛 - Dr. Christian Kohlschütter
Dr. Christian Kohlschütter

🐛 + Dr. Christian Kohlschütter
Dr. Christian Kohlschütter

🐛 Drew Hall
Drew Hall

🐛 Dumitru Postoronca
Dumitru Postoronca

🐛 Dylan Adams
Dylan Adams

🐛 Eden Hao
Eden Hao

🐛 Edward Klimoshenko
Edward Klimoshenko

🐛 💻 Egor Bredikhin
Egor Bredikhin

🐛 - Elan P. Kugelmass
Elan P. Kugelmass

🐛 + Elan P. Kugelmass
Elan P. Kugelmass

🐛 Elder S.
Elder S.

🐛 Eldrick Wega
Eldrick Wega

📖 Emile
Emile

🐛 Eric
Eric

🐛 Eric Kintzer
Eric Kintzer

🐛 Eric Perret
Eric Perret

🐛 - Eric Squires
Eric Squires

🐛 + Eric Squires
Eric Squires

🐛 Erich L Foster
Erich L Foster

🐛 Erik Bleske
Erik Bleske

🐛 Erik C. Thauvin
Erik C. Thauvin

📖 Ernst Reissner
Ernst Reissner

🐛 Ethan Sargent
Ethan Sargent

🐛 Ewan Tempero
Ewan Tempero

🐛 - F.W. Dekker
F.W. Dekker

🐛 + F.W. Dekker
F.W. Dekker

🐛 FSchliephacke
FSchliephacke

🐛 Facundo
Facundo

🐛 Federico Giust
Federico Giust

🐛 Fedor Sherstobitov
Fedor Sherstobitov

🐛 Felix Lampe
Felix Lampe

🐛 Filip Golonka
Filip Golonka

🐛 - Filipe Esperandio
Filipe Esperandio

💻 🐛 + Filipe Esperandio
Filipe Esperandio

💻 🐛 Filippo Nova
Filippo Nova

🐛 Francesco la Torre
Francesco la Torre

🐛 Francisco Duarte
Francisco Duarte

🐛 Frieder Bluemle
Frieder Bluemle

🐛 Frits Jalvingh
Frits Jalvingh

💻 🐛 G. Bazior
G. Bazior

🐛 - Gabe Henkes
Gabe Henkes

🐛 + Gabe Henkes
Gabe Henkes

🐛 Gary Gregory
Gary Gregory

🐛 Genoud Magloire
Genoud Magloire

🐛 Geoffrey555
Geoffrey555

🐛 Georg Romstorfer
Georg Romstorfer

🐛 Gili Tzabari
Gili Tzabari

🐛 Gio
Gio

🐛 - Gol
Gol

🐛 + Gol
Gol

🐛 Gold856
Gold856

🐛 💻 Gonzalo Exequiel Ibars Ingman
Gonzalo Exequiel Ibars Ingman

💻 🐛 GooDer
GooDer

🐛 Gregor Riegler
Gregor Riegler

🐛 Grzegorz Olszewski
Grzegorz Olszewski

🐛 Gunther Schrijvers
Gunther Schrijvers

💻 🐛 - Gustavo Krieger
Gustavo Krieger

🐛 + Gustavo Krieger
Gustavo Krieger

🐛 Guy Elsmore-Paddock
Guy Elsmore-Paddock

🐛 Görkem Mülayim
Görkem Mülayim

🐛 Hanzel Godinez
Hanzel Godinez

🐛 Haoliang Chen
Haoliang Chen

🐛 Harsh Kukreja
Harsh Kukreja

🐛 Hassan ALAMI
Hassan ALAMI

🐛 - Heber
Heber

🐛 + Heber
Heber

🐛 Henning Schmiedehausen
Henning Schmiedehausen

💻 🐛 Henning von Bargen
Henning von Bargen

💻 Hervé Boutemy
Hervé Boutemy

🐛 Himanshu Pandey
Himanshu Pandey

🐛 Hokwang Lee
Hokwang Lee

🐛 Hooperbloob
Hooperbloob

💻 - Hung PHAN
Hung PHAN

🐛 + Hung PHAN
Hung PHAN

🐛 IDoCodingStuffs
IDoCodingStuffs

💻 🐛 Iccen Gan
Iccen Gan

🐛 Ignacio Mariano Tirabasso
Ignacio Mariano Tirabasso

🐛 Igor Melnichenko
Igor Melnichenko

🐛 Igor Moreno
Igor Moreno

🐛 Intelesis-MS
Intelesis-MS

🐛 - Iroha_
Iroha_

🐛 + Iroha_
Iroha_

🐛 Ishan Srivastava
Ishan Srivastava

🐛 Ivan Vakhrushev
Ivan Vakhrushev

🐛 Ivano Guerini
Ivano Guerini

🐛 Ivar Andreas Bonsaksen
Ivar Andreas Bonsaksen

🐛 Ivo Šmíd
Ivo Šmíd

🐛 JJengility
JJengility

🐛 - Jake Hemmerle
Jake Hemmerle

🐛 + Jake Hemmerle
Jake Hemmerle

🐛 James Harrison
James Harrison

🐛 💻 Jamie Bisotti
Jamie Bisotti

🐛 Jan
Jan

🐛 Jan Aertgeerts
Jan Aertgeerts

💻 🐛 Jan Brümmer
Jan Brümmer

🐛 Jan Tříska
Jan Tříska

🐛 - Jan-Lukas Else
Jan-Lukas Else

🐛 + Jan-Lukas Else
Jan-Lukas Else

🐛 Jason Qiu
Jason Qiu

💻 📖 Jason Williams
Jason Williams

🐛 Javier Spagnoletti
Javier Spagnoletti

🐛 Jean-Paul Mayer
Jean-Paul Mayer

🐛 Jean-Simon Larochelle
Jean-Simon Larochelle

🐛 Jeff Bartolotta
Jeff Bartolotta

💻 🐛 - Jeff Hube
Jeff Hube

💻 🐛 + Jeff Hube
Jeff Hube

💻 🐛 Jeff Jensen
Jeff Jensen

🐛 Jeff May
Jeff May

🐛 Jens Gerdes
Jens Gerdes

🐛 Jeroen Borgers
Jeroen Borgers

🐛 💻 📢 Jeroen Meijer
Jeroen Meijer

🐛 Jeroen van Wilgenburg
Jeroen van Wilgenburg

📖 - Jerome Russ
Jerome Russ

🐛 + Jerome Russ
Jerome Russ

🐛 JerritEic
JerritEic

💻 📖 🐛 Jiri Pejchal
Jiri Pejchal

🐛 Jithin Sunny
Jithin Sunny

🐛 Jiří Škorpil
Jiří Škorpil

🐛 Joao Machado
Joao Machado

🐛 Jochen Krauss
Jochen Krauss

🐛 - Johan Hammar
Johan Hammar

🐛 + Johan Hammar
Johan Hammar

🐛 John Karp
John Karp

🐛 John Zhang
John Zhang

🐛 John-Teng
John-Teng

💻 🐛 Jon Moroney
Jon Moroney

💻 🐛 Jonas Geiregat
Jonas Geiregat

🐛 Jonas Keßler
Jonas Keßler

🐛 - Jonathan Wiesel
Jonathan Wiesel

💻 🐛 + Jonathan Wiesel
Jonathan Wiesel

💻 🐛 Jordan
Jordan

🐛 Jordi Llach
Jordi Llach

🐛 Jorge Solórzano
Jorge Solórzano

🐛 JorneVL
JorneVL

🐛 Jose Palafox
Jose Palafox

🐛 Jose Stovall
Jose Stovall

🐛 - Joseph
Joseph

💻 + Joseph
Joseph

💻 Joseph Heenan
Joseph Heenan

🐛 Josh Feingold
Josh Feingold

💻 🐛 Josh Holthaus
Josh Holthaus

🐛 Joshua S Arquilevich
Joshua S Arquilevich

🐛 João Dinis Ferreira
João Dinis Ferreira

📖 João Ferreira
João Ferreira

💻 🐛 - João Pedro Schmitt
João Pedro Schmitt

🐛 + João Pedro Schmitt
João Pedro Schmitt

🐛 Juan Martín Sotuyo Dodero
Juan Martín Sotuyo Dodero

💻 📖 🐛 🚧 Juan Pablo Civile
Juan Pablo Civile

🐛 Julian Voronetsky
Julian Voronetsky

🐛 Julien
Julien

🐛 Julius
Julius

🐛 JustPRV
JustPRV

🐛 - Justin Stroud
Justin Stroud

💻 + Justin Stroud
Justin Stroud

💻 Jörn Huxhorn
Jörn Huxhorn

🐛 KThompso
KThompso

🐛 Kai Amundsen
Kai Amundsen

🐛 Karel Vervaeke
Karel Vervaeke

🐛 Karl-Andero Mere
Karl-Andero Mere

🐛 Karl-Philipp Richter
Karl-Philipp Richter

🐛 - Karsten Silz
Karsten Silz

🐛 + Karsten Silz
Karsten Silz

🐛 Kazuma Watanabe
Kazuma Watanabe

🐛 Kev
Kev

🐛 Keve Müller
Keve Müller

🐛 Kevin Guerra
Kevin Guerra

💻 Kevin Jones
Kevin Jones

🐛 💻 Kevin Poorman
Kevin Poorman

🐛 - Kevin Wayne
Kevin Wayne

🐛 + Kevin Wayne
Kevin Wayne

🐛 Kieran Black
Kieran Black

🐛 Kirill Zubov
Kirill Zubov

🐛 Kirk Clemens
Kirk Clemens

💻 🐛 Klaus Hartl
Klaus Hartl

🐛 Koen Van Looveren
Koen Van Looveren

🐛 Kris Scheibe
Kris Scheibe

💻 🐛 - Krystian Dabrowski
Krystian Dabrowski

🐛 💻 + Krystian Dabrowski
Krystian Dabrowski

🐛 💻 Kunal Thanki
Kunal Thanki

🐛 LaLucid
LaLucid

💻 Larry Diamond
Larry Diamond

💻 🐛 Lars Knickrehm
Lars Knickrehm

🐛 Laurent Bovet
Laurent Bovet

🐛 💻 Leo Gutierrez
Leo Gutierrez

🐛 - LiGaOg
LiGaOg

💻 + LiGaOg
LiGaOg

💻 Liam Sharp
Liam Sharp

🐛 Lintsi
Lintsi

🐛 Linus Fernandes
Linus Fernandes

🐛 Lixon Lookose
Lixon Lookose

🐛 Logesh
Logesh

🐛 Lorenzo Gabriele
Lorenzo Gabriele

🐛 - Loïc Ledoyen
Loïc Ledoyen

🐛 + Loïc Ledoyen
Loïc Ledoyen

🐛 Lucas
Lucas

🐛 Lucas Silva
Lucas Silva

🐛 Lucas Soncini
Lucas Soncini

💻 🐛 Luis Alcantar
Luis Alcantar

💻 Lukas Gräf
Lukas Gräf

💻 Lukasz Slonina
Lukasz Slonina

🐛 - Lukebray
Lukebray

🐛 + Lukebray
Lukebray

🐛 Lynn
Lynn

💻 🐛 Lyor Goldstein
Lyor Goldstein

🐛 MCMicS
MCMicS

🐛 Macarse
Macarse

🐛 Machine account for PMD
Machine account for PMD

💻 Maciek Siemczyk
Maciek Siemczyk

🐛 - Maikel Steneker
Maikel Steneker

💻 🐛 + Maikel Steneker
Maikel Steneker

💻 🐛 Maksim Moiseikin
Maksim Moiseikin

🐛 Manfred Koch
Manfred Koch

🐛 Manuel Moya Ferrer
Manuel Moya Ferrer

💻 🐛 Manuel Ryan
Manuel Ryan

🐛 Marat Vyshegorodtsev
Marat Vyshegorodtsev

🐛 Marcel Härle
Marcel Härle

🐛 - Marcello Fialho
Marcello Fialho

🐛 + Marcello Fialho
Marcello Fialho

🐛 Marcin Dąbrowski
Marcin Dąbrowski

💻 Marcin Rataj
Marcin Rataj

🐛 Marcono1234
Marcono1234

🐛 Mark Adamcin
Mark Adamcin

🐛 Mark Hall
Mark Hall

💻 🐛 Mark Kolich
Mark Kolich

🐛 - Mark Pritchard
Mark Pritchard

🐛 + Mark Pritchard
Mark Pritchard

🐛 Markus Rathgeb
Markus Rathgeb

🐛 Marquis Wang
Marquis Wang

🐛 MartGit
MartGit

🐛 Martin Feldsztejn
Martin Feldsztejn

🐛 Martin Lehmann
Martin Lehmann

🐛 Martin Spamer
Martin Spamer

🐛 - Martin Tarjányi
Martin Tarjányi

🐛 + Martin Tarjányi
Martin Tarjányi

🐛 MatFl
MatFl

🐛 Mateusz Stefanski
Mateusz Stefanski

🐛 Mathieu Gouin
Mathieu Gouin

🐛 MatiasComercio
MatiasComercio

💻 🐛 Matt Benson
Matt Benson

🐛 Matt De Poorter
Matt De Poorter

🐛 - Matt Hargett
Matt Hargett

💻 💵 + Matt Hargett
Matt Hargett

💻 💵 Matt Harrah
Matt Harrah

🐛 Matt Nelson
Matt Nelson

🐛 Matthew Amos
Matthew Amos

🐛 Matthew Duggan
Matthew Duggan

🐛 Matthew Hall
Matthew Hall

🐛 Matthew Rossner
Matthew Rossner

🐛 - Matías Fraga
Matías Fraga

💻 🐛 + Matías Fraga
Matías Fraga

💻 🐛 Maxime Robert
Maxime Robert

💻 🐛 MetaBF
MetaBF

🐛 Metin Dagcilar
Metin Dagcilar

🐛 Michael
Michael

🐛 Michael Bell
Michael Bell

🐛 Michael Bernstein
Michael Bernstein

🐛 - Michael Clay
Michael Clay

🐛 + Michael Clay
Michael Clay

🐛 Michael Dombrowski
Michael Dombrowski

🐛 Michael Hausegger
Michael Hausegger

🐛 Michael Hoefer
Michael Hoefer

🐛 Michael Kolesnikov
Michael Kolesnikov

🐛 Michael Möbius
Michael Möbius

🐛 Michael N. Lipp
Michael N. Lipp

🐛 - Michael Pellegrini
Michael Pellegrini

🐛 + Michael Pellegrini
Michael Pellegrini

🐛 Michal Kordas
Michal Kordas

🐛 Michał Borek
Michał Borek

🐛 Michał Kuliński
Michał Kuliński

🐛 Miguel Núñez Díaz-Montes
Miguel Núñez Díaz-Montes

🐛 Mihai Ionut
Mihai Ionut

🐛 Mikhail Kuchma
Mikhail Kuchma

🐛 - Mirek Hankus
Mirek Hankus

🐛 + Mirek Hankus
Mirek Hankus

🐛 Mitch Spano
Mitch Spano

🐛 Mladjan Gadzic
Mladjan Gadzic

🐛 MrAngry52
MrAngry52

🐛 Muminur Choudhury
Muminur Choudhury

🐛 Mykhailo Palahuta
Mykhailo Palahuta

💻 🐛 Nagendra Kumar Singh
Nagendra Kumar Singh

🐛 - Nahuel Barrios
Nahuel Barrios

🐛 + Nahuel Barrios
Nahuel Barrios

🐛 Nakul Sharma
Nakul Sharma

🐛 Nathan Braun
Nathan Braun

🐛 Nathan Reynolds
Nathan Reynolds

🐛 Nathan Reynolds
Nathan Reynolds

🐛 Nathanaël
Nathanaël

🐛 Naveen
Naveen

💻 - Nazdravi
Nazdravi

🐛 + Nazdravi
Nazdravi

🐛 Neha-Dhonde
Neha-Dhonde

🐛 Nicholas Doyle
Nicholas Doyle

🐛 Nick Butcher
Nick Butcher

🐛 Nico Gallinal
Nico Gallinal

🐛 Nicola Dal Maso
Nicola Dal Maso

🐛 Nicolas Filotto
Nicolas Filotto

💻 - Nicolas Vervelle
Nicolas Vervelle

🐛 + Nicolas Vervelle
Nicolas Vervelle

🐛 Nicolas Vuillamy
Nicolas Vuillamy

📖 Nikita Chursin
Nikita Chursin

🐛 Niklas Baudy
Niklas Baudy

🐛 Nikolas Havrikov
Nikolas Havrikov

🐛 Nilesh Virkar
Nilesh Virkar

🐛 Nimit Patel
Nimit Patel

🐛 - Niranjan Harpale
Niranjan Harpale

🐛 + Niranjan Harpale
Niranjan Harpale

🐛 Nirvik Patel
Nirvik Patel

💻 Noah Sussman
Noah Sussman

🐛 Noah0120
Noah0120

🐛 Noam Tamim
Noam Tamim

🐛 Noel Grandin
Noel Grandin

🐛 Olaf Haalstra
Olaf Haalstra

🐛 - Oleg Andreych
Oleg Andreych

💻 🐛 + Oleg Andreych
Oleg Andreych

💻 🐛 Oleg Pavlenko
Oleg Pavlenko

🐛 Oleksii Dykov
Oleksii Dykov

💻 🐛 Oliver Eikemeier
Oliver Eikemeier

🐛 Oliver Siegmar
Oliver Siegmar

💵 Olivier Parent
Olivier Parent

💻 🐛 Ollie Abbey
Ollie Abbey

💻 🐛 - Ondrej Kratochvil
Ondrej Kratochvil

🐛 + Ondrej Kratochvil
Ondrej Kratochvil

🐛 OverDrone
OverDrone

🐛 Ozan Gulle
Ozan Gulle

💻 🐛 PUNEET JAIN
PUNEET JAIN

🐛 Parbati Bose
Parbati Bose

🐛 Paul Berg
Paul Berg

🐛 Paul Guyot
Paul Guyot

💻 - Pavel Bludov
Pavel Bludov

🐛 + Pavel Bludov
Pavel Bludov

🐛 Pavel Mička
Pavel Mička

🐛 Pedro Nuno Santos
Pedro Nuno Santos

🐛 Pedro Rijo
Pedro Rijo

🐛 Pelisse Romain
Pelisse Romain

💻 📖 🐛 Per Abich
Per Abich

💻 Pete Davids
Pete Davids

🐛 - Peter Bruin
Peter Bruin

🐛 + Peter Bruin
Peter Bruin

🐛 Peter Chittum
Peter Chittum

💻 🐛 Peter Cudmore
Peter Cudmore

🐛 Peter Kasson
Peter Kasson

🐛 Peter Kofler
Peter Kofler

🐛 Peter Paul Bakker
Peter Paul Bakker

💻 Peter Rader
Peter Rader

🐛 - Pham Hai Trung
Pham Hai Trung

🐛 + Pham Hai Trung
Pham Hai Trung

🐛 Philip Graf
Philip Graf

💻 🐛 Philip Hachey
Philip Hachey

🐛 Philippe Ozil
Philippe Ozil

🐛 Phinehas Artemix
Phinehas Artemix

🐛 Phokham Nonava
Phokham Nonava

🐛 Pim van der Loos
Pim van der Loos

💻 ⚠️ - Piotr Szymański
Piotr Szymański

🐛 + Piotr Szymański
Piotr Szymański

🐛 Piotrek Żygieło
Piotrek Żygieło

💻 🐛 📖 Pranay Jaiswal
Pranay Jaiswal

🐛 Prasad Kamath
Prasad Kamath

🐛 Prasanna
Prasanna

🐛 Presh-AR
Presh-AR

🐛 Puneet1726
Puneet1726

🐛 - RBRi
RBRi

🐛 + RBRi
RBRi

🐛 Rafael Cortês
Rafael Cortês

🐛 RaheemShaik999
RaheemShaik999

🐛 RajeshR
RajeshR

💻 🐛 Ramachandra Mohan
Ramachandra Mohan

🐛 Ramel0921
Ramel0921

🐛 Raquel Pau
Raquel Pau

🐛 - Ravikiran Janardhana
Ravikiran Janardhana

🐛 + Ravikiran Janardhana
Ravikiran Janardhana

🐛 Reda Benhemmouche
Reda Benhemmouche

🐛 Reinhard Schiedermeier
Reinhard Schiedermeier

🐛 Renato Oliveira
Renato Oliveira

💻 🐛 Rich DiCroce
Rich DiCroce

🐛 Richard Corfield
Richard Corfield

💻 Richard Corfield
Richard Corfield

🐛 💻 - Riot R1cket
Riot R1cket

🐛 + Riot R1cket
Riot R1cket

🐛 Rishabh Jain
Rishabh Jain

🐛 RishabhDeep Singh
RishabhDeep Singh

🐛 Rob Baillie
Rob Baillie

🐛 Robbie Martinus
Robbie Martinus

💻 🐛 Robert Henry
Robert Henry

🐛 Robert Mihaly
Robert Mihaly

🐛 - Robert Painsi
Robert Painsi

🐛 + Robert Painsi
Robert Painsi

🐛 Robert Russell
Robert Russell

🐛 Robert Sösemann
Robert Sösemann

💻 📖 📢 🐛 Robert Whitebit
Robert Whitebit

🐛 Robin Richtsfeld
Robin Richtsfeld

🐛 Robin Stocker
Robin Stocker

💻 🐛 Robin Wils
Robin Wils

🐛 - RochusOest
RochusOest

🐛 + RochusOest
RochusOest

🐛 Rodolfo Noviski
Rodolfo Noviski

🐛 Rodrigo Casara
Rodrigo Casara

🐛 Rodrigo Fernandes
Rodrigo Fernandes

🐛 Roman Salvador
Roman Salvador

💻 🐛 Ronald Blaschke
Ronald Blaschke

🐛 Róbert Papp
Róbert Papp

🐛 - Saikat Sengupta
Saikat Sengupta

🐛 + Saikat Sengupta
Saikat Sengupta

🐛 Saksham Handu
Saksham Handu

🐛 Saladoc
Saladoc

🐛 Salesforce Bob Lightning
Salesforce Bob Lightning

🐛 Sam Carlberg
Sam Carlberg

🐛 Sascha Riemer
Sascha Riemer

🐛 Sashko
Sashko

💻 - Satoshi Kubo
Satoshi Kubo

🐛 + Satoshi Kubo
Satoshi Kubo

🐛 Scott Kennedy
Scott Kennedy

🐛 Scott Wells
Scott Wells

🐛 💻 Scrates1
Scrates1

🐛 💻 Scrsloota
Scrsloota

💻 Sebastian Bögl
Sebastian Bögl

🐛 Sebastian Davids
Sebastian Davids

🐛 - Sebastian Schuberth
Sebastian Schuberth

🐛 + Sebastian Schuberth
Sebastian Schuberth

🐛 Sebastian Schwarz
Sebastian Schwarz

🐛 Seren
Seren

🐛 💻 Sergey Gorbaty
Sergey Gorbaty

🐛 Sergey Kozlov
Sergey Kozlov

🐛 Sergey Yanzin
Sergey Yanzin

💻 🐛 Seth Wilcox
Seth Wilcox

💻 - Shai Bennathan
Shai Bennathan

🐛 💻 + Shai Bennathan
Shai Bennathan

🐛 💻 Shubham
Shubham

💻 🐛 Simon Abykov
Simon Abykov

💻 🐛 Simon Xiao
Simon Xiao

🐛 Srinivasan Venkatachalam
Srinivasan Venkatachalam

🐛 Stanislav Gromov
Stanislav Gromov

🐛 Stanislav Myachenkov
Stanislav Myachenkov

💻 - Stefan Birkner
Stefan Birkner

🐛 + Stefan Birkner
Stefan Birkner

🐛 Stefan Bohn
Stefan Bohn

🐛 Stefan Endrullis
Stefan Endrullis

🐛 Stefan Klöss-Schuster
Stefan Klöss-Schuster

🐛 Stefan Wolf
Stefan Wolf

🐛 Stephan H. Wissel
Stephan H. Wissel

🐛 Stephen
Stephen

🐛 - Stephen Carter
Stephen Carter

🐛 + Stephen Carter
Stephen Carter

🐛 Stephen Friedrich
Stephen Friedrich

🐛 Steve Babula
Steve Babula

💻 Steven Stearns
Steven Stearns

🐛 💻 Stexxe
Stexxe

🐛 Stian Lågstad
Stian Lågstad

🐛 StuartClayton5
StuartClayton5

🐛 - Supun Arunoda
Supun Arunoda

🐛 + Supun Arunoda
Supun Arunoda

🐛 Suren Abrahamyan
Suren Abrahamyan

🐛 Suvashri
Suvashri

📖 SwatiBGupta1110
SwatiBGupta1110

🐛 SyedThoufich
SyedThoufich

🐛 Szymon Sasin
Szymon Sasin

🐛 T-chuangxin
T-chuangxin

🐛 - TERAI Atsuhiro
TERAI Atsuhiro

🐛 + TERAI Atsuhiro
TERAI Atsuhiro

🐛 TIOBE Software
TIOBE Software

💻 🐛 Tarush Singh
Tarush Singh

💻 Taylor Smock
Taylor Smock

🐛 Techeira Damián
Techeira Damián

💻 🐛 Ted Husted
Ted Husted

🐛 TehBakker
TehBakker

🐛 - The Gitter Badger
The Gitter Badger

🐛 + The Gitter Badger
The Gitter Badger

🐛 Theodoor
Theodoor

🐛 Thiago Henrique Hüpner
Thiago Henrique Hüpner

🐛 Thibault Meyer
Thibault Meyer

🐛 Thomas Güttler
Thomas Güttler

🐛 Thomas Jones-Low
Thomas Jones-Low

🐛 Thomas Smith
Thomas Smith

💻 🐛 - ThrawnCA
ThrawnCA

🐛 + ThrawnCA
ThrawnCA

🐛 Thu Vo
Thu Vo

🐛 Thunderforge
Thunderforge

💻 🐛 Tim van der Lippe
Tim van der Lippe

🐛 Tobias Weimer
Tobias Weimer

💻 🐛 Tom Copeland
Tom Copeland

🐛 💻 📖 Tom Daly
Tom Daly

🐛 - Tomas
Tomas

🐛 + Tomas
Tomas

🐛 Tomer Figenblat
Tomer Figenblat

🐛 Tomi De Lucca
Tomi De Lucca

💻 🐛 Tony
Tony

📖 Torsten Kleiber
Torsten Kleiber

🐛 TrackerSB
TrackerSB

🐛 Tyson Stewart
Tyson Stewart

🐛 - Ullrich Hafner
Ullrich Hafner

🐛 + Ullrich Hafner
Ullrich Hafner

🐛 Utku Cuhadaroglu
Utku Cuhadaroglu

💻 🐛 Valentin Brandl
Valentin Brandl

🐛 Valeria
Valeria

🐛 Valery Yatsynovich
Valery Yatsynovich

📖 Vasily Anisimov
Vasily Anisimov

🐛 Vedant Chokshi
Vedant Chokshi

🐛 - Vibhor Goyal
Vibhor Goyal

🐛 + Vibhor Goyal
Vibhor Goyal

🐛 Vickenty Fesunov
Vickenty Fesunov

🐛 Victor Noël
Victor Noël

🐛 Vincent Galloy
Vincent Galloy

💻 Vincent HUYNH
Vincent HUYNH

🐛 Vincent Maurin
Vincent Maurin

🐛 Vincent Privat
Vincent Privat

🐛 - Vishhwas
Vishhwas

🐛 + Vishhwas
Vishhwas

🐛 Vishv_Android
Vishv_Android

🐛 Vitaly
Vitaly

🐛 Vitaly Polonetsky
Vitaly Polonetsky

🐛 Vojtech Polivka
Vojtech Polivka

🐛 Vsevolod Zholobov
Vsevolod Zholobov

🐛 Vyom Yadav
Vyom Yadav

💻 - Wang Shidong
Wang Shidong

🐛 + Wang Shidong
Wang Shidong

🐛 Waqas Ahmed
Waqas Ahmed

🐛 Wayne J. Earl
Wayne J. Earl

🐛 Wchenghui
Wchenghui

🐛 Wener
Wener

💻 Will Winder
Will Winder

🐛 William Brockhus
William Brockhus

💻 🐛 - Wilson Kurniawan
Wilson Kurniawan

🐛 + Wilson Kurniawan
Wilson Kurniawan

🐛 Wim Deblauwe
Wim Deblauwe

🐛 Woongsik Choi
Woongsik Choi

🐛 XenoAmess
XenoAmess

💻 🐛 Yang
Yang

💻 YaroslavTER
YaroslavTER

🐛 Yasar Shaikh
Yasar Shaikh

💻 - Young Chan
Young Chan

💻 🐛 + Young Chan
Young Chan

💻 🐛 YuJin Kim
YuJin Kim

🐛 Yuri Dolzhenko
Yuri Dolzhenko

🐛 Yurii Dubinka
Yurii Dubinka

🐛 Zoltan Farkas
Zoltan Farkas

🐛 Zustin
Zustin

🐛 aaronhurst-google
aaronhurst-google

🐛 💻 - alexmodis
alexmodis

🐛 + alexmodis
alexmodis

🐛 andreoss
andreoss

🐛 andrey81inmd
andrey81inmd

💻 🐛 anicoara
anicoara

🐛 arunprasathav
arunprasathav

🐛 asiercamara
asiercamara

🐛 astillich-igniti
astillich-igniti

💻 - avesolovksyy
avesolovksyy

🐛 + avesolovksyy
avesolovksyy

🐛 avishvat
avishvat

🐛 avivmu
avivmu

🐛 axelbarfod1
axelbarfod1

🐛 b-3-n
b-3-n

🐛 balbhadra9
balbhadra9

🐛 base23de
base23de

🐛 - bergander
bergander

🐛 💻 + bergander
bergander

🐛 💻 berkam
berkam

💻 🐛 breizh31
breizh31

🐛 caesarkim
caesarkim

🐛 carolyujing
carolyujing

🐛 cbfiddle
cbfiddle

🐛 cesares-basilico
cesares-basilico

🐛 - chrite
chrite

🐛 + chrite
chrite

🐛 ciufudean
ciufudean

📖 cobratbq
cobratbq

🐛 coladict
coladict

🐛 cosmoJFH
cosmoJFH

🐛 cristalp
cristalp

🐛 crunsk
crunsk

🐛 - cwholmes
cwholmes

🐛 + cwholmes
cwholmes

🐛 cyberjj999
cyberjj999

🐛 cyw3
cyw3

🐛 📖 d1ss0nanz
d1ss0nanz

🐛 dague1
dague1

📖 dalizi007
dalizi007

💻 danbrycefairsailcom
danbrycefairsailcom

🐛 - dariansanity
dariansanity

🐛 + dariansanity
dariansanity

🐛 darrenmiliband
darrenmiliband

🐛 davidburstrom
davidburstrom

🐛 dbirkman-paloalto
dbirkman-paloalto

🐛 deepak-patra
deepak-patra

🐛 dependabot[bot]
dependabot[bot]

💻 🐛 dinesh150
dinesh150

🐛 - diziaq
diziaq

🐛 + diziaq
diziaq

🐛 dreaminpast123
dreaminpast123

🐛 duanyanan
duanyanan

🐛 dutt-sanjay
dutt-sanjay

🐛 duursma
duursma

💻 dylanleung
dylanleung

🐛 dzeigler
dzeigler

🐛 - eant60
eant60

🐛 + eant60
eant60

🐛 ekkirala
ekkirala

🐛 emersonmoura
emersonmoura

🐛 emouty
emouty

💻 eugenepugach
eugenepugach

🐛 fairy
fairy

🐛 filiprafalowicz
filiprafalowicz

💻 - flxbl-io
flxbl-io

💵 + flxbl-io
flxbl-io

💵 foxmason
foxmason

🐛 frankegabor
frankegabor

🐛 frankl
frankl

🐛 freafrea
freafrea

🐛 fsapatin
fsapatin

🐛 gearsethenry
gearsethenry

🐛 - gracia19
gracia19

🐛 + gracia19
gracia19

🐛 gudzpoz
gudzpoz

🐛 guo fei
guo fei

🐛 gurmsc5
gurmsc5

🐛 gwilymatgearset
gwilymatgearset

💻 🐛 haigsn
haigsn

🐛 hemanshu070
hemanshu070

🐛 - henrik242
henrik242

🐛 + henrik242
henrik242

🐛 hongpuwu
hongpuwu

🐛 hvbtup
hvbtup

💻 🐛 igniti GmbH
igniti GmbH

🐛 ilovezfs
ilovezfs

🐛 imax-erik
imax-erik

🐛 itaigilo
itaigilo

🐛 - jakivey32
jakivey32

🐛 + jakivey32
jakivey32

🐛 jbennett2091
jbennett2091

🐛 jcamerin
jcamerin

🐛 jkeener1
jkeener1

🐛 jmetertea
jmetertea

🐛 johnra2
johnra2

💻 johnzhao9
johnzhao9

🐛 - josemanuelrolon
josemanuelrolon

💻 🐛 + josemanuelrolon
josemanuelrolon

💻 🐛 kabroxiko
kabroxiko

💻 🐛 karthikaiyasamy
karthikaiyasamy

📖 karwer
karwer

🐛 kaulonline
kaulonline

🐛 kdaemonv
kdaemonv

🐛 kdebski85
kdebski85

🐛 💻 - kenji21
kenji21

💻 🐛 + kenji21
kenji21

💻 🐛 kfranic
kfranic

🐛 khalidkh
khalidkh

🐛 koalalam
koalalam

🐛 krzyk
krzyk

🐛 lasselindqvist
lasselindqvist

🐛 lgemeinhardt
lgemeinhardt

🐛 - lihuaib
lihuaib

🐛 + lihuaib
lihuaib

🐛 liqingjun123
liqingjun123

🐛 lonelyma1021
lonelyma1021

🐛 lpeddy
lpeddy

🐛 lujiefsi
lujiefsi

💻 lukelukes
lukelukes

💻 lyriccoder
lyriccoder

🐛 - marcelmore
marcelmore

🐛 + marcelmore
marcelmore

🐛 matchbox
matchbox

🐛 matthiaskraaz
matthiaskraaz

🐛 meandonlyme
meandonlyme

🐛 mikesive
mikesive

🐛 milossesic
milossesic

🐛 mluckam
mluckam

💻 🐛 - mohan-chinnappan-n
mohan-chinnappan-n

💻 + mohan-chinnappan-n
mohan-chinnappan-n

💻 mriddell95
mriddell95

🐛 mrlzh
mrlzh

🐛 msloan
msloan

🐛 mucharlaravalika
mucharlaravalika

🐛 mvenneman
mvenneman

🐛 nareshl119
nareshl119

🐛 - nicolas-harraudeau-sonarsource
nicolas-harraudeau-sonarsource

🐛 + nicolas-harraudeau-sonarsource
nicolas-harraudeau-sonarsource

🐛 noerremark
noerremark

🐛 novsirion
novsirion

🐛 nwcm
nwcm

📖 🐛 💻 oggboy
oggboy

🐛 oinume
oinume

🐛 orimarko
orimarko

💻 🐛 - pablogomez2197
pablogomez2197

🐛 + pablogomez2197
pablogomez2197

🐛 pacvz
pacvz

💻 pallavi agarwal
pallavi agarwal

🐛 parksungrin
parksungrin

🐛 patpatpat123
patpatpat123

🐛 patriksevallius
patriksevallius

🐛 pbrajesh1
pbrajesh1

🐛 - phoenix384
phoenix384

🐛 + phoenix384
phoenix384

🐛 piotrszymanski-sc
piotrszymanski-sc

💻 plan3d
plan3d

🐛 poojasix
poojasix

🐛 prabhushrikant
prabhushrikant

🐛 pujitha8783
pujitha8783

🐛 r-r-a-j
r-r-a-j

🐛 - raghujayjunk
raghujayjunk

🐛 + raghujayjunk
raghujayjunk

🐛 rajeshveera
rajeshveera

🐛 rajeswarreddy88
rajeswarreddy88

🐛 recdevs
recdevs

🐛 reudismam
reudismam

💻 🐛 rijkt
rijkt

🐛 rillig-tk
rillig-tk

🐛 - rmohan20
rmohan20

💻 🐛 + rmohan20
rmohan20

💻 🐛 rnveach
rnveach

🐛 rxmicro
rxmicro

🐛 ryan-gustafson
ryan-gustafson

💻 🐛 sabi0
sabi0

🐛 scais
scais

🐛 schosin
schosin

🐛 - screamingfrog
screamingfrog

💵 + screamingfrog
screamingfrog

💵 sebbASF
sebbASF

🐛 sergeygorbaty
sergeygorbaty

💻 shilko2013
shilko2013

🐛 shiomiyan
shiomiyan

📖 simeonKondr
simeonKondr

🐛 snajberk
snajberk

🐛 - sniperrifle2004
sniperrifle2004

🐛 + sniperrifle2004
sniperrifle2004

🐛 snuyanzin
snuyanzin

🐛 💻 soloturn
soloturn

🐛 soyodream
soyodream

🐛 sratz
sratz

🐛 stonio
stonio

🐛 sturton
sturton

💻 🐛 - sudharmohan
sudharmohan

🐛 + sudharmohan
sudharmohan

🐛 suruchidawar
suruchidawar

🐛 svenfinitiv
svenfinitiv

🐛 szymanp23
szymanp23

🐛 💻 tashiscool
tashiscool

🐛 test-git-hook
test-git-hook

🐛 testation21
testation21

💻 🐛 - thanosa
thanosa

🐛 + thanosa
thanosa

🐛 tiandiyixian
tiandiyixian

🐛 tobwoerk
tobwoerk

🐛 tprouvot
tprouvot

🐛 💻 trentchilders
trentchilders

🐛 triandicAnt
triandicAnt

🐛 trishul14
trishul14

🐛 - tsui
tsui

🐛 + tsui
tsui

🐛 wangzitom12306
wangzitom12306

🐛 winhkey
winhkey

🐛 witherspore
witherspore

🐛 wjljack
wjljack

🐛 wuchiuwong
wuchiuwong

🐛 xingsong
xingsong

🐛 - xioayuge
xioayuge

🐛 + xioayuge
xioayuge

🐛 xnYi9wRezm
xnYi9wRezm

💻 🐛 xuanuy
xuanuy

🐛 xyf0921
xyf0921

🐛 yalechen-cyw3
yalechen-cyw3

🐛 yasuharu-sato
yasuharu-sato

🐛 zenglian
zenglian

🐛 - zgrzyt93
zgrzyt93

💻 🐛 + zgrzyt93
zgrzyt93

💻 🐛 zh3ng
zh3ng

🐛 zt_soft
zt_soft

🐛 ztt79
ztt79

🐛 zzzzfeng
zzzzfeng

🐛 Árpád Magosányi
Árpád Magosányi

🐛 任贵杰
任贵杰

🐛 + + 茅延安
茅延安

💻 From ab1976382af7be6b424a5500a2ce5dc84e645238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sat, 12 Oct 2024 17:28:18 -0300 Subject: [PATCH 28/33] Remove ant.contrib.jar property --- antlr4-wrapper.xml | 9 +-------- pmd-cs/pom.xml | 1 - pmd-dart/pom.xml | 1 - pmd-go/pom.xml | 1 - pmd-kotlin/pom.xml | 1 - pmd-lua/pom.xml | 1 - pmd-swift/pom.xml | 1 - pom.xml | 1 - 8 files changed, 1 insertion(+), 15 deletions(-) diff --git a/antlr4-wrapper.xml b/antlr4-wrapper.xml index 0832bd9bc0..c3e4527f9f 100644 --- a/antlr4-wrapper.xml +++ b/antlr4-wrapper.xml @@ -11,15 +11,8 @@ - root-node-name: name of the root node without prefix (eg "TopLevel"), will be made to implement RootNode See AntlrGeneratedParserBase - - It also uses the following maven properties: - - ant.contrib.jar: Location of the ant-contrib jar --> - - - - - + diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index f4879ed0e7..0eec39f809 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -30,7 +30,6 @@ - diff --git a/pmd-dart/pom.xml b/pmd-dart/pom.xml index f772795832..496115127b 100644 --- a/pmd-dart/pom.xml +++ b/pmd-dart/pom.xml @@ -30,7 +30,6 @@ - diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index cf47e5217c..4df297ebc9 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -30,7 +30,6 @@ - diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index 5e9dbf2e80..40f19513de 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -43,7 +43,6 @@ - diff --git a/pmd-lua/pom.xml b/pmd-lua/pom.xml index c8adda151f..f3a24be6d3 100644 --- a/pmd-lua/pom.xml +++ b/pmd-lua/pom.xml @@ -30,7 +30,6 @@ - diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 0c50cdc818..023fa8dd39 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -42,7 +42,6 @@ - diff --git a/pom.xml b/pom.xml index 0f41e68e7d..871775ff54 100644 --- a/pom.xml +++ b/pom.xml @@ -123,7 +123,6 @@ ${project.basedir}/../javacc-wrapper.xml 1.0b3 - ${settings.localRepository}/ant-contrib/ant-contrib/${ant-contrib.version}/ant-contrib-${ant-contrib.version}.jar ${project.build.directory}/generated-sources/antlr4 ${project.basedir}/../antlr4-wrapper.xml From f834b8744de723ec38a41de0f73990521b79abf4 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sun, 13 Oct 2024 12:26:31 +0200 Subject: [PATCH 29/33] [doc] Update release notes (#5258) --- 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 197b7a4aec..98d61841ae 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -49,6 +49,7 @@ The old rule names still work but are deprecated. * [#4965](https://github.com/pmd/pmd/pull/4965): \[java] Rename JUnit rules with overly restrictive names - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) * [#5225](https://github.com/pmd/pmd/pull/5225): \[java] Fix #5067: CloseResource: False positive for FileSystems.getDefault() - [Lukas Gräf](https://github.com/lukasgraef) (@lukasgraef) * [#5241](https://github.com/pmd/pmd/pull/5241): Ignore javacc code in coverage report - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) +* [#5258](https://github.com/pmd/pmd/pull/5258): Ignore generated antlr classes in coverage reports - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) {% endtocmaker %} From 867b142ee4dfe47115fc5658266be5761c71d315 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sun, 13 Oct 2024 12:03:17 +0200 Subject: [PATCH 30/33] Use plugin-classpath to simplify javacc-wrapper.xml javacc is on the antrun plugin's classpath. The javacc jar file doesn't need to be copied explicitly. --- javacc-wrapper.xml | 20 +++++--------------- pmd-cpp/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-modelica/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-velocity/pom.xml | 2 +- pmd-visualforce/pom.xml | 2 +- pom.xml | 2 +- 13 files changed, 17 insertions(+), 27 deletions(-) diff --git a/javacc-wrapper.xml b/javacc-wrapper.xml index 05837e96ba..cde14d0ae1 100644 --- a/javacc-wrapper.xml +++ b/javacc-wrapper.xml @@ -25,9 +25,9 @@ It also uses the following maven properties: - javacc.outputDirectory: Directory in which to root the generated package tree - - javacc.jar: JAR of JavaCC in the local maven repository + - plugin-classpath: The classpath of maven-antrun-plugin with javacc.jar dependency + Provided by maven via "" - some properties of project.build - --> @@ -40,8 +40,6 @@ - - @@ -84,7 +82,7 @@ + depends="checkUpToDate,init,jjtree,jjtree-ersatz,javacc,adapt-generated,default-visitor" /> @@ -104,9 +102,6 @@ - - - @@ -117,11 +112,6 @@ - - - - - + classpath="${plugin-classpath}"> @@ -148,7 +138,7 @@ + classpath="${plugin-classpath}"> diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index adbfbd8e3c..a42c4f850a 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -34,10 +34,10 @@ + - diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index d8131b8d65..2d82829d15 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -105,7 +105,7 @@ - + diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index 5e4506efd4..ea4d55938d 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -47,10 +47,10 @@ + - diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 9f1d3fb223..790d5353f8 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -40,7 +40,7 @@ - + diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index 373fa78a8d..42a69e2497 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -34,10 +34,10 @@ + - diff --git a/pmd-modelica/pom.xml b/pmd-modelica/pom.xml index 639c224e2c..d551bc25a1 100644 --- a/pmd-modelica/pom.xml +++ b/pmd-modelica/pom.xml @@ -64,7 +64,7 @@ - + diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index 66818f1a47..197c6dac58 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -34,10 +34,10 @@ + - diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index 2e6ad097a4..26a5614255 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -40,7 +40,7 @@ - + diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index 85b6643126..30326faeeb 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -34,10 +34,10 @@ + - diff --git a/pmd-velocity/pom.xml b/pmd-velocity/pom.xml index 6cb54b0cd5..905cd6b41c 100644 --- a/pmd-velocity/pom.xml +++ b/pmd-velocity/pom.xml @@ -43,7 +43,7 @@ - + diff --git a/pmd-visualforce/pom.xml b/pmd-visualforce/pom.xml index 7ae874578d..164795a623 100644 --- a/pmd-visualforce/pom.xml +++ b/pmd-visualforce/pom.xml @@ -47,7 +47,7 @@ - + diff --git a/pom.xml b/pom.xml index 67269e26ad..fd7181a348 100644 --- a/pom.xml +++ b/pom.xml @@ -118,7 +118,7 @@ 27 7.2.0 - ${settings.localRepository}/net/java/dev/javacc/javacc/${javacc.version}/javacc-${javacc.version}.jar + ${project.build.directory}/generated-sources/javacc ${project.basedir}/../javacc-wrapper.xml From 5ffb9531917fbc83344c98a9921b3fb340c633de Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 18 Oct 2024 09:40:02 +0200 Subject: [PATCH 31/33] [java] CouplingBetweenObjects: improve violation message When we add the actual count to the message, we can more easily verify that the rule works as expected. --- .../lang/java/rule/design/CouplingBetweenObjectsRule.java | 6 +++--- pmd-java/src/main/resources/category/java/design.xml | 2 +- .../lang/java/rule/design/xml/CouplingBetweenObjects.xml | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CouplingBetweenObjectsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CouplingBetweenObjectsRule.java index 527477529c..230e0861c7 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CouplingBetweenObjectsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/CouplingBetweenObjectsRule.java @@ -52,9 +52,9 @@ public class CouplingBetweenObjectsRule extends AbstractJavaRule { public Object visit(ASTCompilationUnit cu, Object data) { super.visit(cu, data); - if (couplingCount > getProperty(THRESHOLD_DESCRIPTOR)) { - asCtx(data).addViolation(cu, - "A value of " + couplingCount + " may denote a high amount of coupling within the class"); + Integer threshold = getProperty(THRESHOLD_DESCRIPTOR); + if (couplingCount > threshold) { + asCtx(data).addViolation(cu, couplingCount, threshold); } couplingCount = 0; diff --git a/pmd-java/src/main/resources/category/java/design.xml b/pmd-java/src/main/resources/category/java/design.xml index 37ca5dc3cd..d235d4239b 100644 --- a/pmd-java/src/main/resources/category/java/design.xml +++ b/pmd-java/src/main/resources/category/java/design.xml @@ -377,7 +377,7 @@ class Foo { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CouplingBetweenObjects.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CouplingBetweenObjects.xml index 28b2e0abaf..49a39332f1 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CouplingBetweenObjects.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/CouplingBetweenObjects.xml @@ -9,6 +9,9 @@ 2 1 1 + + A value of 3 may denote a high amount of coupling within the class (threshold: 2) + 2 1 1 + + A value of 3 may denote a high amount of coupling within the class (threshold: 2) + Date: Fri, 18 Oct 2024 15:36:28 +0200 Subject: [PATCH 32/33] [doc] Update release notes --- docs/pages/release_notes.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index c80d7c0cc2..83abd066f1 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -17,15 +17,14 @@ This is a {{ site.pmd.release_type }} release. ### 🌟 Rule Changes #### Renamed Rules -Several rules for unit testing have been renamed to better reflect their actual scope. Lots of them were called -after JUnit / JUnit 4, even when they applied to JUnit 5 and / or TestNG. - -* {% rule java/bestpractices/UnitTestAssertionsShouldIncludeMessage %} (Java Best Practices) has been renamed from `JUnitAssertionsShouldIncludeMessage`. -* {% rule java/bestpractices/UnitTestContainsTooManyAsserts %} (Java Best Practices) has been renamed from `JUnitTestContainsTooManyAsserts`. -* {% rule java/bestpractices/UnitTestShouldIncludeAssert %} (Java Best Practices) has been renamed from `JUnitTestsShouldIncludeAssert`. -* {% rule java/bestpractices/UnitTestShouldUseAfterAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseAfterAnnotation`. -* {% rule java/bestpractices/UnitTestShouldUseBeforeAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseBeforeAnnotation`. -* {% rule java/bestpractices/UnitTestShouldUseTestAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseTestAnnotation`. +* Several rules for unit testing have been renamed to better reflect their actual scope. Lots of them were called + after JUnit / JUnit 4, even when they applied to JUnit 5 and / or TestNG. + * {% rule java/bestpractices/UnitTestAssertionsShouldIncludeMessage %} (Java Best Practices) has been renamed from `JUnitAssertionsShouldIncludeMessage`. + * {% rule java/bestpractices/UnitTestContainsTooManyAsserts %} (Java Best Practices) has been renamed from `JUnitTestContainsTooManyAsserts`. + * {% rule java/bestpractices/UnitTestShouldIncludeAssert %} (Java Best Practices) has been renamed from `JUnitTestsShouldIncludeAssert`. + * {% rule java/bestpractices/UnitTestShouldUseAfterAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseAfterAnnotation`. + * {% rule java/bestpractices/UnitTestShouldUseBeforeAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseBeforeAnnotation`. + * {% rule java/bestpractices/UnitTestShouldUseTestAnnotation %} (Java Best Practices) has been renamed from `JUnit4TestShouldUseTestAnnotation`. The old rule names still work but are deprecated. @@ -49,12 +48,13 @@ The old rule names still work but are deprecated. ### ✨ Merged pull requests -* [#4965](https://github.com/pmd/pmd/pull/4965): \[java] Rename JUnit rules with overly restrictive names - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) -* [#5225](https://github.com/pmd/pmd/pull/5225): \[java] Fix #5067: CloseResource: False positive for FileSystems.getDefault() - [Lukas Gräf](https://github.com/lukasgraef) (@lukasgraef) +* [#4965](https://github.com/pmd/pmd/pull/4965): Fix #4532: \[java] Rename JUnit rules with overly restrictive names - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) +* [#5225](https://github.com/pmd/pmd/pull/5225): Fix #5067: \[java] CloseResource: False positive for FileSystems.getDefault() - [Lukas Gräf](https://github.com/lukasgraef) (@lukasgraef) * [#5241](https://github.com/pmd/pmd/pull/5241): Ignore javacc code in coverage report - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) * [#5258](https://github.com/pmd/pmd/pull/5258): Ignore generated antlr classes in coverage reports - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) -* [#5264](https://github.com/pmd/pmd/pull/5264): \[java] Fix NPE with empty pattern list - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) -* [#5269](https://github.com/pmd/pmd/pull/5269): \[java] Fix #5253: Support Boolean wrapper class for BooleanGetMethodName rule - [Aryant Tripathi](https://github.com/Aryant-Tripathi) (@Aryant-Tripathi) +* [#5264](https://github.com/pmd/pmd/pull/5264): Fix #5261: \[java] Fix NPE with empty pattern list - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) +* [#5269](https://github.com/pmd/pmd/pull/5269): Fix #5253: \[java] Support Boolean wrapper class for BooleanGetMethodName rule - [Aryant Tripathi](https://github.com/Aryant-Tripathi) (@Aryant-Tripathi) +* [#5275](https://github.com/pmd/pmd/pull/5275): Use plugin-classpath to simplify javacc-wrapper.xml - [Andreas Dangel](https://github.com/adangel) (@adangel) {% endtocmaker %} From f0375d61dd8987eada67ae7d584a3e1dcc3b680a Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 18 Oct 2024 15:39:52 +0200 Subject: [PATCH 33/33] [doc] Update release notes (#5278) --- 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 c80d7c0cc2..a160b83a88 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -55,6 +55,7 @@ The old rule names still work but are deprecated. * [#5258](https://github.com/pmd/pmd/pull/5258): Ignore generated antlr classes in coverage reports - [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) * [#5264](https://github.com/pmd/pmd/pull/5264): \[java] Fix NPE with empty pattern list - [Clément Fournier](https://github.com/oowekyala) (@oowekyala) * [#5269](https://github.com/pmd/pmd/pull/5269): \[java] Fix #5253: Support Boolean wrapper class for BooleanGetMethodName rule - [Aryant Tripathi](https://github.com/Aryant-Tripathi) (@Aryant-Tripathi) +* [#5278](https://github.com/pmd/pmd/pull/5278): \[java] CouplingBetweenObjects: improve violation message - [Andreas Dangel](https://github.com/adangel) (@adangel) {% endtocmaker %}