diff --git a/.all-contributorsrc b/.all-contributorsrc index 118eeb1acc..398fbbf078 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7126,6 +7126,44 @@ "bug", "code" ] + }, + { + "login": "nirvikpatel", + "name": "Nirvik Patel", + "avatar_url": "https://avatars.githubusercontent.com/u/76862984?v=4", + "profile": "https://github.com/nirvikpatel", + "contributions": [ + "code" + ] + }, + { + "login": "mohui1999", + "name": "Seren", + "avatar_url": "https://avatars.githubusercontent.com/u/46819179?v=4", + "profile": "https://github.com/mohui1999", + "contributions": [ + "bug", + "code" + ] + }, + { + "login": "nwcm", + "name": "nwcm", + "avatar_url": "https://avatars.githubusercontent.com/u/111259588?v=4", + "profile": "https://github.com/nwcm", + "contributions": [ + "doc" + ] + }, + { + "login": "PimvanderLoos", + "name": "Pim van der Loos", + "avatar_url": "https://avatars.githubusercontent.com/u/3114723?v=4", + "profile": "https://github.com/PimvanderLoos", + "contributions": [ + "code", + "test" + ] } ], "contributorsPerLine": 7, diff --git a/.ci/build.sh b/.ci/build.sh index 2ed082bbe1..480b19307e 100755 --- a/.ci/build.sh +++ b/.ci/build.sh @@ -179,6 +179,11 @@ function pmd_ci_deploy_build_artifacts() { # Deploy to sourceforge files https://sourceforge.net/projects/pmd/files/pmd/ pmd_ci_sourceforge_uploadFile "pmd/${PMD_CI_MAVEN_PROJECT_VERSION}" "pmd-dist/target/pmd-bin-${PMD_CI_MAVEN_PROJECT_VERSION}.zip" pmd_ci_sourceforge_uploadFile "pmd/${PMD_CI_MAVEN_PROJECT_VERSION}" "pmd-dist/target/pmd-src-${PMD_CI_MAVEN_PROJECT_VERSION}.zip" + # Deploy SBOM + cp pmd-dist/target/bom.xml "pmd-dist/target/pmd-${PMD_CI_MAVEN_PROJECT_VERSION}-cyclonedx.xml" + cp pmd-dist/target/bom.json "pmd-dist/target/pmd-${PMD_CI_MAVEN_PROJECT_VERSION}-cyclonedx.json" + pmd_ci_sourceforge_uploadFile "pmd/${PMD_CI_MAVEN_PROJECT_VERSION}" "pmd-dist/target/pmd-${PMD_CI_MAVEN_PROJECT_VERSION}-cyclonedx.xml" + pmd_ci_sourceforge_uploadFile "pmd/${PMD_CI_MAVEN_PROJECT_VERSION}" "pmd-dist/target/pmd-${PMD_CI_MAVEN_PROJECT_VERSION}-cyclonedx.json" if pmd_ci_maven_isReleaseBuild; then # create a draft github release @@ -188,6 +193,9 @@ function pmd_ci_deploy_build_artifacts() { # Deploy to github releases pmd_ci_gh_releases_uploadAsset "$GH_RELEASE" "pmd-dist/target/pmd-bin-${PMD_CI_MAVEN_PROJECT_VERSION}.zip" pmd_ci_gh_releases_uploadAsset "$GH_RELEASE" "pmd-dist/target/pmd-src-${PMD_CI_MAVEN_PROJECT_VERSION}.zip" + # Deploy SBOM + pmd_ci_gh_releases_uploadAsset "$GH_RELEASE" "pmd-dist/target/pmd-${PMD_CI_MAVEN_PROJECT_VERSION}-cyclonedx.xml" + pmd_ci_gh_releases_uploadAsset "$GH_RELEASE" "pmd-dist/target/pmd-${PMD_CI_MAVEN_PROJECT_VERSION}-cyclonedx.json" fi } diff --git a/docs/pages/pmd/devdocs/major_contributions/adding_a_new_antlr_based_language.md b/docs/pages/pmd/devdocs/major_contributions/adding_a_new_antlr_based_language.md index 4ee9585405..a2faa0967e 100644 --- a/docs/pages/pmd/devdocs/major_contributions/adding_a_new_antlr_based_language.md +++ b/docs/pages/pmd/devdocs/major_contributions/adding_a_new_antlr_based_language.md @@ -52,6 +52,12 @@ definitely don't come for free. It is much effort and requires perseverance to i ## 1. Start with a new sub-module * See pmd-swift for examples. +* Make sure to add your new module to the parent pom as `` entry, so that it is built alongside the + other languages. +* Also add your new module to the dependencies list in "pmd-languages-deps/pom.xml", so that the new language + is automatically available in the binary distribution (pmd-dist) as well as for the shell-completion + in the pmd-cli module. + ## 2. Implement an AST parser for your language * ANTLR will generate the parser for you based on the grammar file. The grammar file needs to be placed in the diff --git a/docs/pages/pmd/devdocs/major_contributions/adding_a_new_javacc_based_language.md b/docs/pages/pmd/devdocs/major_contributions/adding_a_new_javacc_based_language.md index 1e4e523b1c..5cf6c66757 100644 --- a/docs/pages/pmd/devdocs/major_contributions/adding_a_new_javacc_based_language.md +++ b/docs/pages/pmd/devdocs/major_contributions/adding_a_new_javacc_based_language.md @@ -35,7 +35,12 @@ definitely don't come for free. It is much effort and requires perseverance to i ## 1. Start with a new sub-module -* See pmd-java or pmd-vm for examples. +* See pmd-java or pmd-vm for examples. +* Make sure to add your new module to the parent pom as `` entry, so that it is built alongside the + other languages. +* Also add your new module to the dependencies list in "pmd-languages-deps/pom.xml", so that the new language + is automatically available in the binary distribution (pmd-dist) as well as for the shell-completion + in the pmd-cli module. ## 2. Implement an AST parser for your language * Ideally an AST parser should be implemented as a JJT file *(see VmParser.jjt or Java.jjt for example)* diff --git a/docs/pages/pmd/devdocs/major_contributions/adding_new_cpd_language.md b/docs/pages/pmd/devdocs/major_contributions/adding_new_cpd_language.md index 4590867fa8..5d6b2b4784 100644 --- a/docs/pages/pmd/devdocs/major_contributions/adding_new_cpd_language.md +++ b/docs/pages/pmd/devdocs/major_contributions/adding_new_cpd_language.md @@ -17,6 +17,12 @@ Happily for you, to add CPD support for a new language is now easier than ever! All you need to do is follow this few steps: 1. Create a new module for your language, you can take [the Golang module](https://github.com/pmd/pmd/tree/master/pmd-go) as an example + * Make sure to add your new module to the parent pom as `` entry, so that it is built alongside the + other languages. + * Also add your new module to the dependencies list in "pmd-languages-deps/pom.xml", so that the new language + is automatically available in the binary distribution (pmd-dist) as well as for the shell-completion + in the pmd-cli module. + 2. Create a Tokenizer - For Antlr grammars you can take the grammar from [here](https://github.com/antlr/grammars-v4) and extend [AntlrTokenizer](https://github.com/pmd/pmd/blob/master/pmd-core/src/main/java/net/sourceforge/pmd/cpd/internal/AntlrTokenizer.java) taking Go as an example diff --git a/docs/pages/pmd/projectdocs/credits.md b/docs/pages/pmd/projectdocs/credits.md index 8318f60afe..18ef84958e 100644 --- a/docs/pages/pmd/projectdocs/credits.md +++ b/docs/pages/pmd/projectdocs/credits.md @@ -545,468 +545,474 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Niranjan Harpale

πŸ› +
Nirvik Patel

πŸ’»
Noah Sussman

πŸ›
Noah0120

πŸ›
Noam Tamim

πŸ›
Noel Grandin

πŸ›
Olaf Haalstra

πŸ›
Oleg Andreych

πŸ’» πŸ› -
Oleg Pavlenko

πŸ› +
Oleg Pavlenko

πŸ›
Oleksii Dykov

πŸ’» πŸ›
Oliver Eikemeier

πŸ›
Oliver Siegmar

πŸ’΅
Olivier Parent

πŸ’» πŸ›
Ollie Abbey

πŸ’» πŸ›
OverDrone

πŸ› -
Ozan Gulle

πŸ’» πŸ› +
Ozan Gulle

πŸ’» πŸ›
PUNEET JAIN

πŸ›
Parbati Bose

πŸ›
Paul Berg

πŸ›
Paul Guyot

πŸ’»
Pavel Bludov

πŸ›
Pavel Mička

πŸ› -
Pedro Nuno Santos

πŸ› +
Pedro Nuno Santos

πŸ›
Pedro Rijo

πŸ›
Pelisse Romain

πŸ’» πŸ“– πŸ›
Per Abich

πŸ’»
Pete Davids

πŸ›
Peter Bruin

πŸ›
Peter Chittum

πŸ’» πŸ› -
Peter Cudmore

πŸ› +
Peter Cudmore

πŸ›
Peter Kasson

πŸ›
Peter Kofler

πŸ›
Peter Paul Bakker

πŸ’»
Pham Hai Trung

πŸ›
Philip Graf

πŸ’» πŸ›
Philip Hachey

πŸ› -
Philippe Ozil

πŸ› +
Philippe Ozil

πŸ›
Phinehas Artemix

πŸ›
Phokham Nonava

πŸ› +
Pim van der Loos

πŸ’» ⚠️
Piotr SzymaΕ„ski

πŸ›
Piotrek Ε»ygieΕ‚o

πŸ’» πŸ› πŸ“–
Pranay Jaiswal

πŸ› -
Prasad Kamath

πŸ› -
Prasanna

πŸ› +
Prasad Kamath

πŸ› +
Prasanna

πŸ›
Presh-AR

πŸ›
Puneet1726

πŸ›
Rafael CortΓͺs

πŸ›
RaheemShaik999

πŸ›
RajeshR

πŸ’» πŸ› -
Ramachandra Mohan

πŸ› -
Ramel0921

πŸ› +
Ramachandra Mohan

πŸ› +
Ramel0921

πŸ›
Raquel Pau

πŸ›
Ravikiran Janardhana

πŸ›
Reda Benhemmouche

πŸ›
Renato Oliveira

πŸ’» πŸ›
Rich DiCroce

πŸ› -
Riot R1cket

πŸ› -
Rishabh Jain

πŸ› +
Riot R1cket

πŸ› +
Rishabh Jain

πŸ›
RishabhDeep Singh

πŸ›
Robbie Martinus

πŸ’» πŸ›
Robert Henry

πŸ›
Robert Mihaly

πŸ›
Robert Painsi

πŸ› -
Robert Russell

πŸ› -
Robert SΓΆsemann

πŸ’» πŸ“– πŸ“’ πŸ› +
Robert Russell

πŸ› +
Robert SΓΆsemann

πŸ’» πŸ“– πŸ“’ πŸ›
Robert Whitebit

πŸ›
Robin Richtsfeld

πŸ›
Robin Stocker

πŸ’» πŸ›
Robin Wils

πŸ›
RochusOest

πŸ› -
Rodolfo Noviski

πŸ› -
Rodrigo Casara

πŸ› +
Rodolfo Noviski

πŸ› +
Rodrigo Casara

πŸ›
Rodrigo Fernandes

πŸ›
Roman Salvador

πŸ’» πŸ›
Ronald Blaschke

πŸ›
RΓ³bert Papp

πŸ›
Saikat Sengupta

πŸ› -
Saksham Handu

πŸ› -
Saladoc

πŸ› +
Saksham Handu

πŸ› +
Saladoc

πŸ›
Salesforce Bob Lightning

πŸ›
Sam Carlberg

πŸ›
Satoshi Kubo

πŸ›
Scott Kennedy

πŸ›
Scott Wells

πŸ› πŸ’» -
Scrsloota

πŸ’» -
Sebastian BΓΆgl

πŸ› +
Scrsloota

πŸ’» +
Sebastian BΓΆgl

πŸ›
Sebastian Schuberth

πŸ›
Sebastian Schwarz

πŸ› +
Seren

πŸ› πŸ’»
Sergey Gorbaty

πŸ›
Sergey Kozlov

πŸ› + +
Sergey Yanzin

πŸ’» πŸ›
Seth Wilcox

πŸ’»
Shubham

πŸ’» πŸ› - -
Simon Abykov

πŸ’» πŸ›
Simon Xiao

πŸ›
Srinivasan Venkatachalam

πŸ›
Stanislav Gromov

πŸ› + +
Stanislav Myachenkov

πŸ’»
Stefan Birkner

πŸ›
Stefan Bohn

πŸ› - -
Stefan Endrullis

πŸ›
Stefan KlΓΆss-Schuster

πŸ›
Stefan Wolf

πŸ›
Stephan H. Wissel

πŸ› + +
Stephen

πŸ›
Stephen Friedrich

πŸ›
Steve Babula

πŸ’» - -
Steven Stearns

πŸ› πŸ’»
Stexxe

πŸ›
Stian LΓ₯gstad

πŸ›
StuartClayton5

πŸ› + +
Supun Arunoda

πŸ›
Suren Abrahamyan

πŸ›
Suvashri

πŸ“– - -
SwatiBGupta1110

πŸ›
SyedThoufich

πŸ›
Szymon Sasin

πŸ›
T-chuangxin

πŸ› + +
TERAI Atsuhiro

πŸ›
TIOBE Software

πŸ’» πŸ›
Tarush Singh

πŸ’» - -
Taylor Smock

πŸ›
Techeira DamiΓ‘n

πŸ’» πŸ›
Ted Husted

πŸ›
TehBakker

πŸ› + +
The Gitter Badger

πŸ›
Theodoor

πŸ›
Thiago Henrique HΓΌpner

πŸ› - -
Thibault Meyer

πŸ›
Thomas GΓΌttler

πŸ›
Thomas Jones-Low

πŸ›
Thomas Smith

πŸ’» πŸ› + +
ThrawnCA

πŸ›
Thunderforge

πŸ’» πŸ›
Tim van der Lippe

πŸ› - -
Tobias Weimer

πŸ’» πŸ›
Tom Copeland

πŸ› πŸ’» πŸ“–
Tom Daly

πŸ›
Tomer Figenblat

πŸ› + +
Tomi De Lucca

πŸ’» πŸ›
Torsten Kleiber

πŸ›
TrackerSB

πŸ› - -
Tyson Stewart

πŸ›
Ullrich Hafner

πŸ›
Utku Cuhadaroglu

πŸ’» πŸ›
Valentin Brandl

πŸ› + +
Valeria

πŸ›
Valery Yatsynovich

πŸ“–
Vasily Anisimov

πŸ› - -
Vibhor Goyal

πŸ›
Vickenty Fesunov

πŸ›
Victor NoΓ«l

πŸ›
Vincent Galloy

πŸ’» + +
Vincent HUYNH

πŸ›
Vincent Maurin

πŸ›
Vincent Privat

πŸ› - -
Vishhwas

πŸ›
Vitaly

πŸ›
Vitaly Polonetsky

πŸ›
Vojtech Polivka

πŸ› + +
Vsevolod Zholobov

πŸ›
Vyom Yadav

πŸ’»
Wang Shidong

πŸ› - -
Waqas Ahmed

πŸ›
Wayne J. Earl

πŸ›
Wchenghui

πŸ›
Will Winder

πŸ› + +
William Brockhus

πŸ’» πŸ›
Wilson Kurniawan

πŸ›
Wim Deblauwe

πŸ› - -
Woongsik Choi

πŸ›
XenoAmess

πŸ’» πŸ›
Yang

πŸ’»
YaroslavTER

πŸ› + +
Yasar Shaikh

πŸ’»
Young Chan

πŸ’» πŸ›
YuJin Kim

πŸ› - -
Yuri Dolzhenko

πŸ›
Yurii Dubinka

πŸ›
Zoltan Farkas

πŸ›
Zustin

πŸ› + +
aaronhurst-google

πŸ› πŸ’»
alexmodis

πŸ›
andreoss

πŸ› - -
andrey81inmd

πŸ’» πŸ›
anicoara

πŸ›
arunprasathav

πŸ›
asiercamara

πŸ› + +
astillich-igniti

πŸ’»
avesolovksyy

πŸ›
avishvat

πŸ› - -
avivmu

πŸ›
axelbarfod1

πŸ›
b-3-n

πŸ›
balbhadra9

πŸ› + +
base23de

πŸ›
bergander

πŸ›
berkam

πŸ’» πŸ› - -
breizh31

πŸ›
caesarkim

πŸ›
carolyujing

πŸ›
cbfiddle

πŸ› + +
cesares-basilico

πŸ›
chrite

πŸ›
cobratbq

πŸ› - -
coladict

πŸ›
cosmoJFH

πŸ›
cristalp

πŸ›
crunsk

πŸ› + +
cwholmes

πŸ›
cyberjj999

πŸ›
cyw3

πŸ› - -
d1ss0nanz

πŸ›
dague1

πŸ“–
dalizi007

πŸ’»
danbrycefairsailcom

πŸ› + +
dariansanity

πŸ›
darrenmiliband

πŸ›
davidburstrom

πŸ› - -
dbirkman-paloalto

πŸ›
deepak-patra

πŸ›
dependabot[bot]

πŸ’» πŸ›
dinesh150

πŸ› + +
diziaq

πŸ›
dreaminpast123

πŸ›
duanyanan

πŸ› - -
dutt-sanjay

πŸ›
dylanleung

πŸ›
dzeigler

πŸ›
ekkirala

πŸ› + +
emersonmoura

πŸ›
fairy

πŸ›
filiprafalowicz

πŸ’» - -
foxmason

πŸ›
frankegabor

πŸ›
frankl

πŸ›
freafrea

πŸ› + +
fsapatin

πŸ›
gracia19

πŸ›
guo fei

πŸ› - -
gurmsc5

πŸ›
gwilymatgearset

πŸ’» πŸ›
haigsn

πŸ›
hemanshu070

πŸ› + +
henrik242

πŸ›
hongpuwu

πŸ›
hvbtup

πŸ’» πŸ› - -
igniti GmbH

πŸ›
ilovezfs

πŸ›
itaigilo

πŸ›
jakivey32

πŸ› + +
jbennett2091

πŸ›
jcamerin

πŸ›
jkeener1

πŸ› - -
jmetertea

πŸ›
johnra2

πŸ’»
josemanuelrolon

πŸ’» πŸ›
kabroxiko

πŸ’» πŸ› + +
karwer

πŸ›
kaulonline

πŸ›
kdaemonv

πŸ› - -
kdebski85

πŸ› πŸ’»
kenji21

πŸ’» πŸ›
kfranic

πŸ›
khalidkh

πŸ› + +
koalalam

πŸ›
krzyk

πŸ›
lasselindqvist

πŸ› - -
lgemeinhardt

πŸ›
lihuaib

πŸ›
lonelyma1021

πŸ›
lpeddy

πŸ› + +
lujiefsi

πŸ’»
lukelukes

πŸ’»
lyriccoder

πŸ› - -
marcelmore

πŸ›
matchbox

πŸ›
matthiaskraaz

πŸ›
meandonlyme

πŸ› + +
mikesive

πŸ›
milossesic

πŸ›
mluckam

πŸ’» - -
mohan-chinnappan-n

πŸ’»
mriddell95

πŸ›
mrlzh

πŸ›
msloan

πŸ› + +
mucharlaravalika

πŸ›
mvenneman

πŸ›
nareshl119

πŸ› - -
nicolas-harraudeau-sonarsource

πŸ›
noerremark

πŸ›
novsirion

πŸ› +
nwcm

πŸ“– + +
oggboy

πŸ›
oinume

πŸ›
orimarko

πŸ’» πŸ›
pacvz

πŸ’» - -
pallavi agarwal

πŸ›
parksungrin

πŸ›
patpatpat123

πŸ› + +
patriksevallius

πŸ›
pbrajesh1

πŸ›
phoenix384

πŸ›
piotrszymanski-sc

πŸ’» - -
plan3d

πŸ›
poojasix

πŸ›
prabhushrikant

πŸ› + +
pujitha8783

πŸ›
r-r-a-j

πŸ›
raghujayjunk

πŸ›
rajeshveera

πŸ› - -
rajeswarreddy88

πŸ›
recdevs

πŸ›
reudismam

πŸ’» πŸ› + +
rijkt

πŸ›
rillig-tk

πŸ›
rmohan20

πŸ’» πŸ›
rnveach

πŸ› - -
rxmicro

πŸ›
ryan-gustafson

πŸ’» πŸ›
sabi0

πŸ› + +
scais

πŸ›
sebbASF

πŸ›
sergeygorbaty

πŸ’»
shilko2013

πŸ› - -
shiomiyan

πŸ“–
simeonKondr

πŸ›
snajberk

πŸ› + +
sniperrifle2004

πŸ›
snuyanzin

πŸ› πŸ’»
sratz

πŸ›
stonio

πŸ› - -
sturton

πŸ’» πŸ›
sudharmohan

πŸ›
suruchidawar

πŸ› + +
svenfinitiv

πŸ›
tashiscool

πŸ›
test-git-hook

πŸ›
testation21

πŸ’» πŸ› - -
thanosa

πŸ›
tiandiyixian

πŸ›
tobwoerk

πŸ› + +
tprouvot

πŸ› πŸ’»
trentchilders

πŸ›
triandicAnt

πŸ›
trishul14

πŸ› - -
tsui

πŸ›
winhkey

πŸ›
witherspore

πŸ› + +
wjljack

πŸ›
wuchiuwong

πŸ›
xingsong

πŸ›
xioayuge

πŸ› - -
xnYi9wRezm

πŸ’» πŸ›
xuanuy

πŸ›
xyf0921

πŸ› + +
yalechen-cyw3

πŸ›
yasuharu-sato

πŸ›
zenglian

πŸ›
zgrzyt93

πŸ’» πŸ› - -
zh3ng

πŸ›
zt_soft

πŸ›
ztt79

πŸ› + +
zzzzfeng

πŸ›
ÁrpÑd MagosÑnyi

πŸ›
任贡杰

πŸ› diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 326c7f4c5f..79cea5a43b 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -40,7 +40,14 @@ This section lists the most important changes from the last release candidate. The remaining section describe the complete release notes for 7.0.0. #### Fixed issues -* [#4438](https://github.com/pmd/pmd/issues/4438): \[doc] Documentation links in VS Code are outdated +* documentation + * [#4438](https://github.com/pmd/pmd/issues/4438): \[doc] Documentation links in VS Code are outdated +* miscellaneous + * [#4462](https://github.com/pmd/pmd/issues/4462): Provide Software Bill of Materials (SBOM) +* java-codestyle + * [#4273](https://github.com/pmd/pmd/issues/4273): \[java] CommentDefaultAccessModifier ignoredAnnotations should include "org.junit.jupiter.api.extension.RegisterExtension" by default +* java-errorprone + * [#4449](https://github.com/pmd/pmd/issues/4449): \[java] AvoidAccessibilityAlteration: Possible false positive in AvoidAccessibilityAlteration rule when using Lambda expression ### πŸš€ Major Features and Enhancements @@ -205,6 +212,7 @@ See [Detailed Release Notes for PMD 7]({{ baseurl }}pmd_release_notes_pmd7.html) * [#2497](https://github.com/pmd/pmd/issues/2497): PMD 7 Logo page * [#2498](https://github.com/pmd/pmd/issues/2498): Update PMD 7 Logo in documentation * [#3797](https://github.com/pmd/pmd/issues/3797): \[all] Use JUnit5 + * [#4462](https://github.com/pmd/pmd/issues/4462): Provide Software Bill of Materials (SBOM) * ant * [#4080](https://github.com/pmd/pmd/issues/4080): \[ant] Split off Ant integration into a new submodule * core @@ -329,6 +337,7 @@ Language specific fixes: * [#3221](https://github.com/pmd/pmd/issues/3221): \[java] PrematureDeclaration false positive for unused variables * [#3238](https://github.com/pmd/pmd/issues/3238): \[java] Improve ExprContext, fix FNs of UnnecessaryCast * [#3500](https://github.com/pmd/pmd/pull/3500): \[java] UnnecessaryBoxing - check for Integer.valueOf(String) calls + * [#4273](https://github.com/pmd/pmd/issues/4273): \[java] CommentDefaultAccessModifier ignoredAnnotations should include "org.junit.jupiter.api.extension.RegisterExtension" by default * [#4357](https://github.com/pmd/pmd/pull/4357): \[java] Fix IllegalStateException in UseDiamondOperator rule * java-design * [#1014](https://github.com/pmd/pmd/issues/1014): \[java] LawOfDemeter: False positive with lambda expression @@ -343,6 +352,7 @@ Language specific fixes: * [#3754](https://github.com/pmd/pmd/issues/3754): \[java] SingularField false positive with read in while condition * [#3786](https://github.com/pmd/pmd/issues/3786): \[java] SimplifyBooleanReturns should consider operator precedence * [#4238](https://github.com/pmd/pmd/pull/4238): \[java] Make LawOfDemeter not use the rulechain + * [#4254](https://github.com/pmd/pmd/issues/4254): \[java] ImmutableField - false positive with Lombok @Setter * java-documentation * [#4369](https://github.com/pmd/pmd/pull/4369): \[java] Improve CommentSize * [#4416](https://github.com/pmd/pmd/pull/4416): \[java] Fix reported line number in CommentContentRule @@ -364,10 +374,12 @@ Language specific fixes: * [#3351](https://github.com/pmd/pmd/issues/3351): \[java] ConstructorCallsOverridableMethod ignores abstract methods * [#3400](https://github.com/pmd/pmd/issues/3400): \[java] AvoidUsingOctalValues FN with underscores * [#4356](https://github.com/pmd/pmd/pull/4356): \[java] Fix NPE in CloseResourceRule + * [#4449](https://github.com/pmd/pmd/issues/4449): \[java] AvoidAccessibilityAlteration: Possible false positive in AvoidAccessibilityAlteration rule when using Lambda expression * java-multithreading * [#2537](https://github.com/pmd/pmd/issues/2537): \[java] DontCallThreadRun can't detect the case that call run() in `this.run()` * [#2538](https://github.com/pmd/pmd/issues/2538): \[java] DontCallThreadRun can't detect the case that call run() in `foo.bar.run()` * [#2577](https://github.com/pmd/pmd/issues/2577): \[java] UseNotifyAllInsteadOfNotify falsely detect a special case with argument: `foo.notify(bar)` + * [#4483](https://github.com/pmd/pmd/issues/4483): \[java] NonThreadSafeSingleton false positive with double-checked locking * java-performance * [#1224](https://github.com/pmd/pmd/issues/1224): \[java] InefficientEmptyStringCheck false negative in anonymous class * [#2587](https://github.com/pmd/pmd/issues/2587): \[java] AvoidArrayLoops could also check for list copy through iterated List.add() @@ -394,6 +406,10 @@ Language specific fixes: * [#3866](https://github.com/pmd/pmd/pull/3866): \[core] Add CLI Progress Bar - [@JerritEic](https://github.com/JerritEic) (@JerritEic) * [#4412](https://github.com/pmd/pmd/pull/4412): \[doc] Added new error msg to ConstantsInInterface - [David Ljunggren](https://github.com/dague1) (@dague1) * [#4428](https://github.com/pmd/pmd/pull/4428): \[apex] ApexBadCrypto bug fix for #4427 - inline detection of hard coded values - [Steven Stearns](https://github.com/sfdcsteve) (@sfdcsteve) +* [#4444](https://github.com/pmd/pmd/pull/4444): \[java] CommentDefaultAccessModifier - ignore org.junit.jupiter.api.extension.RegisterExtension by default - [Nirvik Patel](https://github.com/nirvikpatel) (@nirvikpatel) +* [#4450](https://github.com/pmd/pmd/pull/4450): \[java] Fix #4449 AvoidAccessibilityAlteration: Correctly handle Lambda expressions in PrivilegedAction scenarios - [Seren](https://github.com/mohui1999) (@mohui1999) +* [#4452](https://github.com/pmd/pmd/pull/4452): \[doc] Update PMD_APEX_ROOT_DIRECTORY documentation reference - [nwcm](https://github.com/nwcm) (@nwcm) +* [#4474](https://github.com/pmd/pmd/pull/4474): \[java] ImmutableField: False positive with lombok (fixes #4254) - [Pim van der Loos](https://github.com/PimvanderLoos) (@PimvanderLoos) ### πŸ“ˆ Stats * 4416 commits diff --git a/pmd-apex/src/main/resources/category/apex/design.xml b/pmd-apex/src/main/resources/category/apex/design.xml index 6f34471e41..f00fbe652e 100644 --- a/pmd-apex/src/main/resources/category/apex/design.xml +++ b/pmd-apex/src/main/resources/category/apex/design.xml @@ -48,13 +48,13 @@ Avoid having unused methods since they make understanding and maintaining code h This rule finds not only unused private methods, but public methods as well. [ApexLink](https://github.com/nawforce/ApexLink) is used to make this possible and this needs -additional configuration. The environment variable `PMD_APEX_ROOTDIRECTORY` needs to be set prior to executing +additional configuration. The environment variable `PMD_APEX_ROOT_DIRECTORY` needs to be set prior to executing PMD. With this variable the root directory of the Salesforce metadata, where `sfdx-project.json` resides, is specified. ApexLink can then load all the classes in the project and figure out, whether a method is used or not. -For an accurate analysis it is important that the `PMD_APEX_ROOTDIRECTORY` contains a complete set of metadata that +For an accurate analysis it is important that the `PMD_APEX_ROOT_DIRECTORY` contains a complete set of metadata that may be referenced from the Apex source code, such as Custom Objects, Visualforce Pages, Flows and Labels. The -`PMD_APEX_ROOTDIRECTORY` directory must contain a `sfdx-project.json`, but metadata may be either in the +`PMD_APEX_ROOT_DIRECTORY` directory must contain a `sfdx-project.json`, but metadata may be either in the [SFDX Source format](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_source_file_format.htm) or the older MDAPI format. The `packageDirectories` entries in `sfdx-project.json` are used to determine which directories to search for metadata, if a `.forceignore` file is present it will be respected. diff --git a/pmd-cli/pom.xml b/pmd-cli/pom.xml index 5d65824a77..a144afdd06 100644 --- a/pmd-cli/pom.xml +++ b/pmd-cli/pom.xml @@ -78,168 +78,15 @@ ${project.version} - - + net.sourceforge.pmd - pmd-apex - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-cpp - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-cs - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-dart - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-fortran - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-gherkin - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-go - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-groovy - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-html - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-lua - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-java - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-javascript - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-jsp - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-kotlin - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-matlab - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-modelica - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-perl - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-objectivec - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-php - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-plsql - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-python - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-ruby - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-scala_2.13 - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-swift - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-visualforce - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-vm - ${project.version} - runtime - - - net.sourceforge.pmd - pmd-xml + pmd-languages-deps ${project.version} + pom runtime diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 554b2cb809..43bc6c06d8 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -126,7 +126,7 @@ net.sourceforge.pmd - pmd-apex + pmd-core ${project.version} @@ -142,136 +142,11 @@ sh completion - - net.sourceforge.pmd - pmd-core - ${project.version} - net.sourceforge.pmd pmd-ant ${project.version} - - net.sourceforge.pmd - pmd-cpp - ${project.version} - - - net.sourceforge.pmd - pmd-cs - ${project.version} - - - net.sourceforge.pmd - pmd-dart - ${project.version} - - - net.sourceforge.pmd - pmd-fortran - ${project.version} - - - net.sourceforge.pmd - pmd-gherkin - ${project.version} - - - net.sourceforge.pmd - pmd-go - ${project.version} - - - net.sourceforge.pmd - pmd-groovy - ${project.version} - - - net.sourceforge.pmd - pmd-html - ${project.version} - - - net.sourceforge.pmd - pmd-lua - ${project.version} - - - net.sourceforge.pmd - pmd-java - ${project.version} - - - net.sourceforge.pmd - pmd-javascript - ${project.version} - - - net.sourceforge.pmd - pmd-jsp - ${project.version} - - - net.sourceforge.pmd - pmd-kotlin - ${project.version} - - - net.sourceforge.pmd - pmd-matlab - ${project.version} - - - net.sourceforge.pmd - pmd-modelica - ${project.version} - - - net.sourceforge.pmd - pmd-perl - ${project.version} - - - net.sourceforge.pmd - pmd-objectivec - ${project.version} - - - net.sourceforge.pmd - pmd-php - ${project.version} - - - net.sourceforge.pmd - pmd-plsql - ${project.version} - - - net.sourceforge.pmd - pmd-python - ${project.version} - - - net.sourceforge.pmd - pmd-ruby - ${project.version} - - - net.sourceforge.pmd - pmd-scala_2.13 - ${project.version} - - - net.sourceforge.pmd - pmd-swift - ${project.version} - - - net.sourceforge.pmd - pmd-tsql - ${project.version} - net.sourceforge.pmd pmd-ui @@ -279,20 +154,11 @@ net.sourceforge.pmd - pmd-visualforce + pmd-languages-deps ${project.version} + pom + runtime - - net.sourceforge.pmd - pmd-vm - ${project.version} - - - net.sourceforge.pmd - pmd-xml - ${project.version} - - org.slf4j diff --git a/pmd-dist/src/main/resources/assemblies/pmd-bin.xml b/pmd-dist/src/main/resources/assemblies/pmd-bin.xml index 2215aa3265..8d67eb9662 100644 --- a/pmd-dist/src/main/resources/assemblies/pmd-bin.xml +++ b/pmd-dist/src/main/resources/assemblies/pmd-bin.xml @@ -53,6 +53,19 @@ + + + target/bom.xml + sbom + pmd-${project.version}-cyclonedx.xml + + + target/bom.json + sbom + pmd-${project.version}-cyclonedx.json + + + @@ -71,7 +84,9 @@ runtime + net.sourceforge.pmd:pmd-apex-jorje:pom net.sourceforge.pmd:pmd-cli:sh:completion:* + net.sourceforge.pmd:pmd-languages-deps:pom lib 0755 diff --git a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java index c1331cbd67..569c17e5cd 100644 --- a/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java +++ b/pmd-dist/src/test/java/net/sourceforge/pmd/it/BinaryDistributionIT.java @@ -87,6 +87,8 @@ class BinaryDistributionIT extends AbstractBinaryDistributionTest { result.add(basedir + "shell/pmd-completion.sh"); result.add(basedir + "lib/pmd-core-" + PMDVersion.VERSION + ".jar"); result.add(basedir + "lib/pmd-java-" + PMDVersion.VERSION + ".jar"); + result.add(basedir + "sbom/pmd-" + PMDVersion.VERSION + "-cyclonedx.xml"); + result.add(basedir + "sbom/pmd-" + PMDVersion.VERSION + "-cyclonedx.json"); return result; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java index 99ff4091b6..e52cd79816 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/CommentDefaultAccessModifierRule.java @@ -53,6 +53,7 @@ public class CommentDefaultAccessModifierRule extends AbstractJavaRulechainRule "android.support.annotation.VisibleForTesting", "co.elastic.clients.util.VisibleForTesting", "org.junit.jupiter.api.Test", + "org.junit.jupiter.api.extension.RegisterExtension", "org.junit.jupiter.api.ParameterizedTest", "org.junit.jupiter.api.RepeatedTest", "org.junit.jupiter.api.TestFactory", diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ImmutableFieldRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ImmutableFieldRule.java index ecd65ef8b6..9a72491009 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ImmutableFieldRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ImmutableFieldRule.java @@ -43,6 +43,12 @@ public class ImmutableFieldRule extends AbstractJavaRulechainRule { "lombok.Value" ); + private static final Set INVALIDATING_FIELD_ANNOT = + setOf( + "lombok.Getter", + "lombok.Setter" + ); + public ImmutableFieldRule() { super(ASTFieldDeclaration.class); definePropertyDescriptor(IGNORED_ANNOTS); @@ -55,6 +61,7 @@ public class ImmutableFieldRule extends AbstractJavaRulechainRule { if (field.getEffectiveVisibility().isAtMost(Visibility.V_PRIVATE) && !field.getModifiers().hasAny(JModifier.VOLATILE, JModifier.STATIC, JModifier.FINAL) && !JavaAstUtils.hasAnyAnnotation(enclosingType, INVALIDATING_CLASS_ANNOT) + && !JavaAstUtils.hasAnyAnnotation(field, INVALIDATING_FIELD_ANNOT) && !JavaAstUtils.hasAnyAnnotation(field, getProperty(IGNORED_ANNOTS))) { DataflowResult dataflow = DataflowPass.getDataflowResult(field.getRoot()); diff --git a/pmd-java/src/main/resources/category/java/design.xml b/pmd-java/src/main/resources/category/java/design.xml index ead5ceb07c..e69ded8f7e 100644 --- a/pmd-java/src/main/resources/category/java/design.xml +++ b/pmd-java/src/main/resources/category/java/design.xml @@ -1349,12 +1349,12 @@ Limitations: We can only check private fields for now. public class Foo { private int x; // this will be reported - public void foo(int y) { + public int foo(int y) { x = y + 5; // assigned before any read return x; } - public void fooOk(int y) { + public int fooOk(int y) { int z = y + 5; // might as well be a local like here return z; } diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index c141a2eb81..c888a021ff 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -87,6 +87,8 @@ suppression methods (e.g. by using `@SuppressWarnings` annotation). [not(ancestor::ConstructorCall[1][pmd-java:typeIs('java.security.PrivilegedAction')]/AnonymousClassDeclaration)] (: exclude inner privileged action classes :) [not(ancestor::ClassOrInterfaceDeclaration[1][pmd-java:typeIs('java.security.PrivilegedAction')])] + (: exclude privileged action lambdas :) + [not(ancestor::LambdaExpression[pmd-java:typeIs('java.security.PrivilegedAction')])] ]]> diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml index a779a6b17b..1138d32aec 100755 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/CommentDefaultAccessModifier.xml @@ -454,7 +454,7 @@ public enum MyEnum { - #3859 [java] CommentDefaultAccessModifier is triggered in JUnit5 method and it was conflicting with rule JUnit5TestShouldBePackagePrivate + #3859 #4273 [java] CommentDefaultAccessModifier is triggered in JUnit5 method and it was conflicting with rule JUnit5TestShouldBePackagePrivate 0 diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ImmutableField.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ImmutableField.xml index 3c6dd6a849..5fec5f311f 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ImmutableField.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/ImmutableField.xml @@ -415,7 +415,7 @@ public class CombinersTest { - #410 [java] ImmutableField: False positive with lombok + #410 [java] ImmutableField: False positive with lombok on class 0 + + #4254 [java] ImmutableField: False positive with lombok on field + 0 + + + #855 [java] ImmutableField: False positive within lambda 0 diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidAccessibilityAlteration.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidAccessibilityAlteration.xml index b20329d34b..3e650c070c 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidAccessibilityAlteration.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidAccessibilityAlteration.xml @@ -184,4 +184,39 @@ public class Violation { } ]]> - \ No newline at end of file + + + #4449 setAccessible is ok in LambdaExpression + 0 + constructor = this.getClass().getDeclaredConstructor(String.class); + + // deliberate accessibility alteration + String privateField = AccessController.doPrivileged((PrivilegedAction)() -> { + try { + Field field = Violation.class.getDeclaredField("aPrivateField"); + field.setAccessible(true); //no violation + return (String) field.get(null); + } catch (ReflectiveOperationException | SecurityException e) { + throw new RuntimeException(e); + } + }); + } + } + + ]]> + + + + + diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/NonThreadSafeSingleton.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/NonThreadSafeSingleton.xml index 23a897b482..9a177239f3 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/NonThreadSafeSingleton.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/multithreading/xml/NonThreadSafeSingleton.xml @@ -176,7 +176,7 @@ class A extends B { - False positive with correct double checked pattern + False positive with correct double-checked pattern #4483 0 + + 4.0.0 + + net.sourceforge.pmd + pmd + 7.0.0-SNAPSHOT + + + pmd-languages-deps + pom + PMD Languages Dependencies + + + + net.sourceforge.pmd + pmd-apex + ${project.version} + + + net.sourceforge.pmd + pmd-cpp + ${project.version} + + + net.sourceforge.pmd + pmd-cs + ${project.version} + + + net.sourceforge.pmd + pmd-dart + ${project.version} + + + net.sourceforge.pmd + pmd-fortran + ${project.version} + + + net.sourceforge.pmd + pmd-gherkin + ${project.version} + + + net.sourceforge.pmd + pmd-go + ${project.version} + + + net.sourceforge.pmd + pmd-groovy + ${project.version} + + + net.sourceforge.pmd + pmd-html + ${project.version} + + + net.sourceforge.pmd + pmd-java + ${project.version} + + + net.sourceforge.pmd + pmd-javascript + ${project.version} + + + net.sourceforge.pmd + pmd-jsp + ${project.version} + + + net.sourceforge.pmd + pmd-kotlin + ${project.version} + + + net.sourceforge.pmd + pmd-lua + ${project.version} + + + net.sourceforge.pmd + pmd-matlab + ${project.version} + + + net.sourceforge.pmd + pmd-modelica + ${project.version} + + + net.sourceforge.pmd + pmd-objectivec + ${project.version} + + + net.sourceforge.pmd + pmd-perl + ${project.version} + + + net.sourceforge.pmd + pmd-php + ${project.version} + + + net.sourceforge.pmd + pmd-plsql + ${project.version} + + + net.sourceforge.pmd + pmd-python + ${project.version} + + + net.sourceforge.pmd + pmd-ruby + ${project.version} + + + net.sourceforge.pmd + pmd-scala_2.13 + ${project.version} + + + net.sourceforge.pmd + pmd-swift + ${project.version} + + + net.sourceforge.pmd + pmd-tsql + ${project.version} + + + net.sourceforge.pmd + pmd-visualforce + ${project.version} + + + net.sourceforge.pmd + pmd-vm + ${project.version} + + + net.sourceforge.pmd + pmd-xml + ${project.version} + + + diff --git a/pom.xml b/pom.xml index 9f963eb5c2..6aac2ad744 100644 --- a/pom.xml +++ b/pom.xml @@ -436,7 +436,7 @@ - true + false 100 1.${java.version} @@ -503,6 +503,11 @@ jacoco-maven-plugin 0.8.8 + + org.cyclonedx + cyclonedx-maven-plugin + 2.7.6 + @@ -624,6 +629,26 @@ https://oss.sonatype.org/ + + org.cyclonedx + cyclonedx-maven-plugin + + + package + + makeAggregateBom + + + + + + + org.ow2.asm + asm + 9.5 + + + @@ -1185,5 +1210,6 @@ pmd-vm pmd-xml pmd-ant + pmd-languages-deps