From 7f7f8f7b6a1f5f23ac7af94a5066f1e229e9ed19 Mon Sep 17 00:00:00 2001 From: Oleg Andreych Date: Fri, 26 Aug 2022 00:26:10 +0500 Subject: [PATCH 1/5] False-positive UnnecessaryFullyQualifiedName when nested and non-nested classes with the same name and in the same package are used together #4085 --- .../UnnecessaryFullyQualifiedNameRule.java | 31 ++++++++++++++++--- .../xml/UnnecessaryFullyQualifiedName.xml | 19 ++++++++++++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java index 32bf8fa21c..36773e3a91 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java @@ -17,7 +17,9 @@ import java.util.logging.Logger; import org.apache.commons.lang3.StringUtils; import net.sourceforge.pmd.RuleContext; +import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; +import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit; import net.sourceforge.pmd.lang.java.ast.ASTImportDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTName; import net.sourceforge.pmd.lang.java.ast.ASTNameList; @@ -186,9 +188,11 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { if (matches.isEmpty()) { if (isJavaLangImplicit(node)) { - addViolation(data, node, new Object[] { node.getImage(), "java.lang.*", "implicit "}); + addViolation(data, node, new Object[]{node.getImage(), "java.lang.*", "implicit "}); } else if (isSamePackage(node, name)) { - addViolation(data, node, new Object[] { node.getImage(), currentPackage + ".*", "same package "}); + if (!hasSameSimpleNameInScope(node)) { + addViolation(data, node, new Object[]{node.getImage(), currentPackage + ".*", "same package "}); + } } } else { ASTImportDeclaration firstMatch = findFirstMatch(matches); @@ -199,11 +203,30 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { String importStr = firstMatch.getImportedName() + (firstMatch.isImportOnDemand() ? ".*" : ""); String type = firstMatch.isStatic() ? "static " : ""; - addViolation(data, node, new Object[] { node.getImage(), importStr, type }); + addViolation(data, node, new Object[]{node.getImage(), importStr, type}); } } } + private boolean hasSameSimpleNameInScope(TypeNode node) { + final ASTCompilationUnit root = node.getRoot(); + final List declarationDescendants = root.findDescendantsOfType(ASTClassOrInterfaceDeclaration.class); + final Class nodeType = node.getType(); + + if (nodeType == null) { + return false; + } + + final String nodeSimpleName = nodeType.getSimpleName(); + + for (ASTClassOrInterfaceDeclaration declarationDescendant : declarationDescendants) { + if (nodeSimpleName.equals(declarationDescendant.getSimpleName())) { + return true; + } + } + return false; + } + private ASTImportDeclaration findFirstMatch(List imports) { // first search only static imports ASTImportDeclaration result = null; @@ -404,7 +427,7 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { // Is it a conflict with a class in the same file? final Set qualifiedTypes = node.getScope().getEnclosingScope(SourceFileScope.class) - .getQualifiedTypeNames().keySet(); + .getQualifiedTypeNames().keySet(); for (final String qualified : qualifiedTypes) { int fullLength = qualified.length(); if (qualified.endsWith(unqualifiedName) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml index f95d7bc81e..865f62c789 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml @@ -622,6 +622,25 @@ public class UnnecessaryFullyQualifiedName { ]]> + + False positive when same package inner class is referenced (not enum) + 0 + + + #2098 false positive with annotated package 0 From af30f4cef92d882d253ee2f0c9d5144737412635 Mon Sep 17 00:00:00 2001 From: Oleg Andreych Date: Sun, 18 Sep 2022 15:29:50 +0500 Subject: [PATCH 2/5] False-positive UnnecessaryFullyQualifiedName when nested and non-nested classes with the same name and in the same package are used together #4085 * Regression fix; --- .../UnnecessaryFullyQualifiedNameRule.java | 10 +++++----- .../xml/UnnecessaryFullyQualifiedName.xml | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java index 36773e3a91..5348abca59 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java @@ -188,10 +188,11 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { if (matches.isEmpty()) { if (isJavaLangImplicit(node)) { - addViolation(data, node, new Object[]{node.getImage(), "java.lang.*", "implicit "}); + asCtx(data).addViolation(node, + node.getImage(), "java.lang.*", "implicit "); } else if (isSamePackage(node, name)) { if (!hasSameSimpleNameInScope(node)) { - addViolation(data, node, new Object[]{node.getImage(), currentPackage + ".*", "same package "}); + asCtx(data).addViolation(node, node.getImage(), currentPackage + ".*", "same package "); } } } else { @@ -217,10 +218,9 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { return false; } - final String nodeSimpleName = nodeType.getSimpleName(); - for (ASTClassOrInterfaceDeclaration declarationDescendant : declarationDescendants) { - if (nodeSimpleName.equals(declarationDescendant.getSimpleName())) { + if (nodeType.getSimpleName().equals(declarationDescendant.getSimpleName()) + && !nodeType.getName().equals(declarationDescendant.getQualifiedName().toString())) { return true; } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml index 865f62c789..426bb9b4b6 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml @@ -641,6 +641,21 @@ public class OuterTestClass { ]]> + + Should report fully-qualified name usage of a class in itself. + 1 + 4 + + + #2098 false positive with annotated package 0 From 792fe44d0ba4211d88878183b78d82c57c238169 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 29 Sep 2022 15:54:50 +0200 Subject: [PATCH 3/5] Fixups from review (#4128) --- .../rule/codestyle/UnnecessaryFullyQualifiedNameRule.java | 2 +- .../java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java index 5348abca59..8091d944e3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryFullyQualifiedNameRule.java @@ -204,7 +204,7 @@ public class UnnecessaryFullyQualifiedNameRule extends AbstractJavaRule { String importStr = firstMatch.getImportedName() + (firstMatch.isImportOnDemand() ? ".*" : ""); String type = firstMatch.isStatic() ? "static " : ""; - addViolation(data, node, new Object[]{node.getImage(), importStr, type}); + asCtx(data).addViolation(node, node.getImage(), importStr, type); } } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml index 426bb9b4b6..097e096767 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/UnnecessaryFullyQualifiedName.xml @@ -623,7 +623,7 @@ public class UnnecessaryFullyQualifiedName { - False positive when same package inner class is referenced (not enum) + False positive when same package inner class is referenced (not enum) #4085 0 - Should report fully-qualified name usage of a class in itself. + Should report fully-qualified name usage of a class in itself #4085 1 4 Date: Thu, 29 Sep 2022 16:21:02 +0200 Subject: [PATCH 4/5] Add @OlegAndreych as a contributor --- .all-contributorsrc | 9 +++ docs/pages/pmd/projectdocs/credits.md | 99 ++++++++++++++------------- 2 files changed, 59 insertions(+), 49 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 3120c1af00..5d3b45de5c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -6816,6 +6816,15 @@ "contributions": [ "code" ] + }, + { + "login": "OlegAndreych", + "name": "Oleg Andreych", + "avatar_url": "https://avatars.githubusercontent.com/u/2041351?v=4", + "profile": "https://github.com/OlegAndreych", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/docs/pages/pmd/projectdocs/credits.md b/docs/pages/pmd/projectdocs/credits.md index 53a6336d25..a5e8b64c45 100644 --- a/docs/pages/pmd/projectdocs/credits.md +++ b/docs/pages/pmd/projectdocs/credits.md @@ -530,444 +530,445 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Noam Tamim

๐Ÿ›
Noel Grandin

๐Ÿ›
Olaf Haalstra

๐Ÿ› +
Oleg Andreych

๐Ÿ’ป
Oleg Pavlenko

๐Ÿ›
Oleksii Dykov

๐Ÿ’ป
Oliver Eikemeier

๐Ÿ› -
Olivier Parent

๐Ÿ’ป ๐Ÿ› +
Olivier Parent

๐Ÿ’ป ๐Ÿ›
Ollie Abbey

๐Ÿ’ป ๐Ÿ›
OverDrone

๐Ÿ›
Ozan Gulle

๐Ÿ’ป ๐Ÿ›
PUNEET JAIN

๐Ÿ›
Parbati Bose

๐Ÿ›
Paul Berg

๐Ÿ› -
Pavel Bludov

๐Ÿ› +
Pavel Bludov

๐Ÿ›
Pavel Miฤka

๐Ÿ›
Pedro Nuno Santos

๐Ÿ›
Pedro Rijo

๐Ÿ›
Pelisse Romain

๐Ÿ’ป ๐Ÿ“– ๐Ÿ›
Per Abich

๐Ÿ’ป
Pete Davids

๐Ÿ› -
Peter Bruin

๐Ÿ› +
Peter Bruin

๐Ÿ›
Peter Chittum

๐Ÿ’ป ๐Ÿ›
Peter Cudmore

๐Ÿ›
Peter Kasson

๐Ÿ›
Peter Kofler

๐Ÿ›
Peter Paul Bakker

๐Ÿ’ป
Pham Hai Trung

๐Ÿ› -
Philip Graf

๐Ÿ’ป ๐Ÿ› +
Philip Graf

๐Ÿ’ป ๐Ÿ›
Philip Hachey

๐Ÿ›
Philippe Ozil

๐Ÿ›
Phinehas Artemix

๐Ÿ›
Phokham Nonava

๐Ÿ›
Piotr Szymaล„ski

๐Ÿ›
Piotrek ลปygieล‚o

๐Ÿ’ป ๐Ÿ› -
Pranay Jaiswal

๐Ÿ› +
Pranay Jaiswal

๐Ÿ›
Prasad Kamath

๐Ÿ›
Prasanna

๐Ÿ›
Presh-AR

๐Ÿ›
Puneet1726

๐Ÿ›
Rafael Cortรชs

๐Ÿ›
RaheemShaik999

๐Ÿ› -
RajeshR

๐Ÿ’ป ๐Ÿ› +
RajeshR

๐Ÿ’ป ๐Ÿ›
Ramachandra Mohan

๐Ÿ›
Ramel0921

๐Ÿ›
Raquel Pau

๐Ÿ›
Ravikiran Janardhana

๐Ÿ›
Reda Benhemmouche

๐Ÿ›
Renato Oliveira

๐Ÿ’ป ๐Ÿ› -
Rich DiCroce

๐Ÿ› +
Rich DiCroce

๐Ÿ›
Riot R1cket

๐Ÿ›
Rishabh Jain

๐Ÿ›
RishabhDeep Singh

๐Ÿ›
Robbie Martinus

๐Ÿ’ป ๐Ÿ›
Robert Henry

๐Ÿ›
Robert Painsi

๐Ÿ› -
Robert Russell

๐Ÿ› +
Robert Russell

๐Ÿ›
Robert Sรถsemann

๐Ÿ’ป ๐Ÿ“– ๐Ÿ“ข ๐Ÿ›
Robert Whitebit

๐Ÿ›
Robin Richtsfeld

๐Ÿ›
Robin Stocker

๐Ÿ’ป ๐Ÿ›
Robin Wils

๐Ÿ›
RochusOest

๐Ÿ› -
Rodolfo Noviski

๐Ÿ› +
Rodolfo Noviski

๐Ÿ›
Rodrigo Casara

๐Ÿ›
Rodrigo Fernandes

๐Ÿ›
Roman Salvador

๐Ÿ’ป ๐Ÿ›
Ronald Blaschke

๐Ÿ›
Rรณbert Papp

๐Ÿ›
Saikat Sengupta

๐Ÿ› -
Saksham Handu

๐Ÿ› +
Saksham Handu

๐Ÿ›
Saladoc

๐Ÿ›
Salesforce Bob Lightning

๐Ÿ›
Sam Carlberg

๐Ÿ›
Satoshi Kubo

๐Ÿ›
Scott Kennedy

๐Ÿ›
Scott Wells

๐Ÿ› ๐Ÿ’ป -
Scrsloota

๐Ÿ’ป +
Scrsloota

๐Ÿ’ป
Sebastian Bรถgl

๐Ÿ›
Sebastian Schuberth

๐Ÿ›
Sebastian Schwarz

๐Ÿ›
Sergey Gorbaty

๐Ÿ›
Sergey Kozlov

๐Ÿ›
Sergey Yanzin

๐Ÿ’ป ๐Ÿ› -
Seth Wilcox

๐Ÿ’ป +
Seth Wilcox

๐Ÿ’ป
Shubham

๐Ÿ’ป ๐Ÿ›
Simon Abykov

๐Ÿ’ป
Simon Xiao

๐Ÿ›
Srinivasan Venkatachalam

๐Ÿ›
Stanislav Gromov

๐Ÿ›
Stanislav Myachenkov

๐Ÿ’ป -
Stefan Birkner

๐Ÿ› +
Stefan Birkner

๐Ÿ›
Stefan Bohn

๐Ÿ›
Stefan Endrullis

๐Ÿ›
Stefan Klรถss-Schuster

๐Ÿ›
Stefan Wolf

๐Ÿ›
Stephan H. Wissel

๐Ÿ›
Stephen

๐Ÿ› -
Stephen Friedrich

๐Ÿ› +
Stephen Friedrich

๐Ÿ›
Steve Babula

๐Ÿ’ป
Stexxe

๐Ÿ›
Stian Lรฅgstad

๐Ÿ›
StuartClayton5

๐Ÿ›
Supun Arunoda

๐Ÿ›
Suren Abrahamyan

๐Ÿ› -
SwatiBGupta1110

๐Ÿ› +
SwatiBGupta1110

๐Ÿ›
SyedThoufich

๐Ÿ›
Szymon Sasin

๐Ÿ›
T-chuangxin

๐Ÿ›
TERAI Atsuhiro

๐Ÿ›
TIOBE Software

๐Ÿ’ป ๐Ÿ›
Taylor Smock

๐Ÿ› -
Techeira Damiรกn

๐Ÿ’ป ๐Ÿ› +
Techeira Damiรกn

๐Ÿ’ป ๐Ÿ›
Ted Husted

๐Ÿ›
TehBakker

๐Ÿ›
The Gitter Badger

๐Ÿ›
Theodoor

๐Ÿ›
Thiago Henrique Hรผpner

๐Ÿ›
Thibault Meyer

๐Ÿ› -
Thomas Gรผttler

๐Ÿ› +
Thomas Gรผttler

๐Ÿ›
Thomas Jones-Low

๐Ÿ›
Thomas Smith

๐Ÿ’ป ๐Ÿ›
ThrawnCA

๐Ÿ›
Thunderforge

๐Ÿ’ป ๐Ÿ›
Tim van der Lippe

๐Ÿ›
Tobias Weimer

๐Ÿ’ป ๐Ÿ› -
Tom Daly

๐Ÿ› +
Tom Daly

๐Ÿ›
Tomer Figenblat

๐Ÿ›
Tomi De Lucca

๐Ÿ’ป ๐Ÿ›
Torsten Kleiber

๐Ÿ›
TrackerSB

๐Ÿ›
Ullrich Hafner

๐Ÿ›
Utku Cuhadaroglu

๐Ÿ’ป ๐Ÿ› -
Valentin Brandl

๐Ÿ› +
Valentin Brandl

๐Ÿ›
Valeria

๐Ÿ›
Vasily Anisimov

๐Ÿ›
Vibhor Goyal

๐Ÿ›
Vickenty Fesunov

๐Ÿ›
Victor Noรซl

๐Ÿ›
Vincent Galloy

๐Ÿ’ป -
Vincent HUYNH

๐Ÿ› +
Vincent HUYNH

๐Ÿ›
Vincent Maurin

๐Ÿ›
Vincent Privat

๐Ÿ›
Vishhwas

๐Ÿ›
Vitaly

๐Ÿ›
Vitaly Polonetsky

๐Ÿ›
Vojtech Polivka

๐Ÿ› -
Vsevolod Zholobov

๐Ÿ› +
Vsevolod Zholobov

๐Ÿ›
Vyom Yadav

๐Ÿ’ป
Wang Shidong

๐Ÿ›
Waqas Ahmed

๐Ÿ›
Wayne J. Earl

๐Ÿ›
Wchenghui

๐Ÿ›
Will Winder

๐Ÿ› -
William Brockhus

๐Ÿ’ป ๐Ÿ› +
William Brockhus

๐Ÿ’ป ๐Ÿ›
Wilson Kurniawan

๐Ÿ›
Wim Deblauwe

๐Ÿ›
Woongsik Choi

๐Ÿ›
XenoAmess

๐Ÿ’ป ๐Ÿ›
Yang

๐Ÿ’ป
YaroslavTER

๐Ÿ› -
Young Chan

๐Ÿ’ป ๐Ÿ› +
Young Chan

๐Ÿ’ป ๐Ÿ›
YuJin Kim

๐Ÿ›
Yuri Dolzhenko

๐Ÿ›
Yurii Dubinka

๐Ÿ›
Zoltan Farkas

๐Ÿ›
Zustin

๐Ÿ›
aaronhurst-google

๐Ÿ› ๐Ÿ’ป -
alexmodis

๐Ÿ› +
alexmodis

๐Ÿ›
andreoss

๐Ÿ›
andrey81inmd

๐Ÿ’ป ๐Ÿ›
anicoara

๐Ÿ›
arunprasathav

๐Ÿ›
asiercamara

๐Ÿ›
astillich-igniti

๐Ÿ’ป -
avesolovksyy

๐Ÿ› +
avesolovksyy

๐Ÿ›
avishvat

๐Ÿ›
avivmu

๐Ÿ›
axelbarfod1

๐Ÿ›
b-3-n

๐Ÿ›
balbhadra9

๐Ÿ›
base23de

๐Ÿ› -
bergander

๐Ÿ› +
bergander

๐Ÿ›
berkam

๐Ÿ’ป ๐Ÿ›
breizh31

๐Ÿ›
caesarkim

๐Ÿ›
carolyujing

๐Ÿ›
cesares-basilico

๐Ÿ›
chrite

๐Ÿ› -
cobratbq

๐Ÿ› +
cobratbq

๐Ÿ›
coladict

๐Ÿ›
cosmoJFH

๐Ÿ›
cristalp

๐Ÿ›
crunsk

๐Ÿ›
cwholmes

๐Ÿ›
cyberjj999

๐Ÿ› -
cyw3

๐Ÿ› +
cyw3

๐Ÿ›
d1ss0nanz

๐Ÿ›
dalizi007

๐Ÿ’ป
danbrycefairsailcom

๐Ÿ›
dariansanity

๐Ÿ›
darrenmiliband

๐Ÿ›
davidburstrom

๐Ÿ› -
dbirkman-paloalto

๐Ÿ› +
dbirkman-paloalto

๐Ÿ›
deepak-patra

๐Ÿ›
dependabot[bot]

๐Ÿ’ป ๐Ÿ›
dinesh150

๐Ÿ›
diziaq

๐Ÿ›
dreaminpast123

๐Ÿ›
duanyanan

๐Ÿ› -
dutt-sanjay

๐Ÿ› +
dutt-sanjay

๐Ÿ›
dylanleung

๐Ÿ›
dzeigler

๐Ÿ›
ekkirala

๐Ÿ›
emersonmoura

๐Ÿ›
fairy

๐Ÿ›
filiprafalowicz

๐Ÿ’ป -
foxmason

๐Ÿ› +
foxmason

๐Ÿ›
frankegabor

๐Ÿ›
frankl

๐Ÿ›
freafrea

๐Ÿ›
fsapatin

๐Ÿ›
gracia19

๐Ÿ›
guo fei

๐Ÿ› -
gurmsc5

๐Ÿ› +
gurmsc5

๐Ÿ›
gwilymatgearset

๐Ÿ’ป ๐Ÿ›
haigsn

๐Ÿ›
hemanshu070

๐Ÿ›
henrik242

๐Ÿ›
hongpuwu

๐Ÿ›
hvbtup

๐Ÿ’ป ๐Ÿ› -
igniti GmbH

๐Ÿ› +
igniti GmbH

๐Ÿ›
ilovezfs

๐Ÿ›
itaigilo

๐Ÿ›
jakivey32

๐Ÿ›
jbennett2091

๐Ÿ›
jcamerin

๐Ÿ›
jkeener1

๐Ÿ› -
jmetertea

๐Ÿ› +
jmetertea

๐Ÿ›
johnra2

๐Ÿ’ป
josemanuelrolon

๐Ÿ’ป ๐Ÿ›
kabroxiko

๐Ÿ’ป ๐Ÿ›
karwer

๐Ÿ›
kaulonline

๐Ÿ›
kdaemonv

๐Ÿ› -
kenji21

๐Ÿ’ป ๐Ÿ› +
kenji21

๐Ÿ’ป ๐Ÿ›
kfranic

๐Ÿ›
khalidkh

๐Ÿ›
krzyk

๐Ÿ›
lasselindqvist

๐Ÿ›
lgemeinhardt

๐Ÿ›
lihuaib

๐Ÿ› -
lonelyma1021

๐Ÿ› +
lonelyma1021

๐Ÿ›
lpeddy

๐Ÿ›
lujiefsi

๐Ÿ’ป
lukelukes

๐Ÿ’ป
lyriccoder

๐Ÿ›
marcelmore

๐Ÿ›
matchbox

๐Ÿ› -
matthiaskraaz

๐Ÿ› +
matthiaskraaz

๐Ÿ›
meandonlyme

๐Ÿ›
mikesive

๐Ÿ›
milossesic

๐Ÿ›
mohan-chinnappan-n

๐Ÿ’ป
mriddell95

๐Ÿ›
mrlzh

๐Ÿ› -
msloan

๐Ÿ› +
msloan

๐Ÿ›
mucharlaravalika

๐Ÿ›
mvenneman

๐Ÿ›
nareshl119

๐Ÿ›
nicolas-harraudeau-sonarsource

๐Ÿ›
noerremark

๐Ÿ›
novsirion

๐Ÿ› -
oggboy

๐Ÿ› +
oggboy

๐Ÿ›
oinume

๐Ÿ›
orimarko

๐Ÿ’ป ๐Ÿ›
pacvz

๐Ÿ’ป
pallavi agarwal

๐Ÿ›
parksungrin

๐Ÿ›
patpatpat123

๐Ÿ› -
patriksevallius

๐Ÿ› +
patriksevallius

๐Ÿ›
pbrajesh1

๐Ÿ›
phoenix384

๐Ÿ›
piotrszymanski-sc

๐Ÿ’ป
plan3d

๐Ÿ›
poojasix

๐Ÿ›
prabhushrikant

๐Ÿ› -
pujitha8783

๐Ÿ› +
pujitha8783

๐Ÿ›
r-r-a-j

๐Ÿ›
raghujayjunk

๐Ÿ›
rajeshveera

๐Ÿ›
rajeswarreddy88

๐Ÿ›
recdevs

๐Ÿ›
reudismam

๐Ÿ’ป ๐Ÿ› -
rijkt

๐Ÿ› +
rijkt

๐Ÿ›
rillig-tk

๐Ÿ›
rmohan20

๐Ÿ’ป ๐Ÿ›
rxmicro

๐Ÿ›
ryan-gustafson

๐Ÿ’ป ๐Ÿ›
sabi0

๐Ÿ›
scais

๐Ÿ› -
sebbASF

๐Ÿ› +
sebbASF

๐Ÿ›
sergeygorbaty

๐Ÿ’ป
shilko2013

๐Ÿ›
shiomiyan

๐Ÿ“–
simeonKondr

๐Ÿ›
snajberk

๐Ÿ›
sniperrifle2004

๐Ÿ› -
snuyanzin

๐Ÿ› ๐Ÿ’ป +
snuyanzin

๐Ÿ› ๐Ÿ’ป
sratz

๐Ÿ›
stonio

๐Ÿ›
sturton

๐Ÿ’ป ๐Ÿ›
sudharmohan

๐Ÿ›
suruchidawar

๐Ÿ›
svenfinitiv

๐Ÿ› -
tashiscool

๐Ÿ› +
tashiscool

๐Ÿ›
test-git-hook

๐Ÿ›
testation21

๐Ÿ’ป ๐Ÿ›
thanosa

๐Ÿ›
tiandiyixian

๐Ÿ›
tobwoerk

๐Ÿ›
tprouvot

๐Ÿ› ๐Ÿ’ป -
trentchilders

๐Ÿ› +
trentchilders

๐Ÿ›
triandicAnt

๐Ÿ›
trishul14

๐Ÿ›
tsui

๐Ÿ›
winhkey

๐Ÿ›
witherspore

๐Ÿ›
wjljack

๐Ÿ› -
wuchiuwong

๐Ÿ› +
wuchiuwong

๐Ÿ›
xingsong

๐Ÿ›
xioayuge

๐Ÿ›
xnYi9wRezm

๐Ÿ’ป ๐Ÿ›
xuanuy

๐Ÿ›
xyf0921

๐Ÿ›
yalechen-cyw3

๐Ÿ› -
yasuharu-sato

๐Ÿ› +
yasuharu-sato

๐Ÿ›
zenglian

๐Ÿ›
zgrzyt93

๐Ÿ’ป ๐Ÿ›
zh3ng

๐Ÿ›
zt_soft

๐Ÿ›
ztt79

๐Ÿ›
zzzzfeng

๐Ÿ› -
รrpรกd Magosรกnyi

๐Ÿ› +
รrpรกd Magosรกnyi

๐Ÿ›
ไปป่ดตๆฐ

๐Ÿ›
่Œ…ๅปถๅฎ‰

๐Ÿ’ป From 94d343e63bfd93f89a58c72f3f557014f68b9c3d Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 29 Sep 2022 16:21:32 +0200 Subject: [PATCH 5/5] [doc] Update release notes (#4085, #4128) --- 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 84d0bc0712..f966f06180 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,11 +16,14 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues * [#4116](https://github.com/pmd/pmd/pull/4116): \[core] Missing --file arg in TreeExport CLI example +* java-codestyle + * [#4085](https://github.com/pmd/pmd/issues/4085): \[java] UnnecessaryFullyQualifiedName false positive when nested and non-nested classes with the same name and in the same package are used together ### API Changes ### External Contributions * [#4116](https://github.com/pmd/pmd/pull/4116): \[core] Fix missing --file arg in TreeExport CLI example - [@mohan-chinnappan-n](https://github.com/mohan-chinnappan-n) +* [#4128](https://github.com/pmd/pmd/pull/4128): \[java] Fix False-positive UnnecessaryFullyQualifiedName when nested and non-nestโ€ฆ #4103 - [Oleg Andreych](https://github.com/OlegAndreych) (@OlegAndreych) {% endtocmaker %}