diff --git a/.all-contributorsrc b/.all-contributorsrc index 28d946f30a..8d11a3745a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7819,6 +7819,33 @@ "contributions": [ "bug" ] + }, + { + "login": "gudzpoz", + "name": "gudzpoz", + "avatar_url": "https://avatars.githubusercontent.com/u/14026120?v=4", + "profile": "https://kyo.iroiro.party/", + "contributions": [ + "bug" + ] + }, + { + "login": "phansys", + "name": "Javier Spagnoletti", + "avatar_url": "https://avatars.githubusercontent.com/u/1231441?v=4", + "profile": "https://github.com/phansys", + "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/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/) diff --git a/antlr4-wrapper.xml b/antlr4-wrapper.xml index 7a82734022..c3e4527f9f 100644 --- a/antlr4-wrapper.xml +++ b/antlr4-wrapper.xml @@ -11,10 +11,11 @@ - root-node-name: name of the root node without prefix (eg "TopLevel"), will be made to implement RootNode See AntlrGeneratedParserBase - --> + + @@ -32,14 +33,100 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -72,7 +159,9 @@ tofile="${parser-file}"/> - + + @@ -83,7 +172,9 @@ - + + diff --git a/docs/pages/pmd/projectdocs/credits.md b/docs/pages/pmd/projectdocs/credits.md index 4795947746..0a1cd02cb0 100644 --- a/docs/pages/pmd/projectdocs/credits.md +++ b/docs/pages/pmd/projectdocs/credits.md @@ -110,1004 +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 Jensen
Jeff Jensen

๐Ÿ› + 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

๐Ÿ› - JerritEic
JerritEic

๐Ÿ’ป ๐Ÿ“– ๐Ÿ› + 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

๐Ÿ› - John Karp
John Karp

๐Ÿ› + 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

๐Ÿ’ป ๐Ÿ› - Jordan
Jordan

๐Ÿ› + 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 Heenan
Joseph Heenan

๐Ÿ› + 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

๐Ÿ› - Juan Martรญn Sotuyo Dodero
Juan Martรญn Sotuyo Dodero

๐Ÿ’ป ๐Ÿ“– ๐Ÿ› ๐Ÿšง + 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

๐Ÿ’ป - Jรถrn Huxhorn
Jรถrn Huxhorn

๐Ÿ› + 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

๐Ÿ› - Kazuma Watanabe
Kazuma Watanabe

๐Ÿ› + 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

๐Ÿ› - Kieran Black
Kieran Black

๐Ÿ› + 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

๐Ÿ› ๐Ÿ’ป - Kunal Thanki
Kunal Thanki

๐Ÿ› + 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

๐Ÿ’ป - Liam Sharp
Liam Sharp

๐Ÿ› + 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

๐Ÿ› - Lucas
Lucas

๐Ÿ› + 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

๐Ÿ› - Lynn
Lynn

๐Ÿ’ป ๐Ÿ› + 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

๐Ÿ’ป ๐Ÿ› - Maksim Moiseikin
Maksim Moiseikin

๐Ÿ› + 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

๐Ÿ› - Marcin Dฤ…browski
Marcin Dฤ…browski

๐Ÿ’ป + 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

๐Ÿ› - Markus Rathgeb
Markus Rathgeb

๐Ÿ› + 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

๐Ÿ› - MatFl
MatFl

๐Ÿ› + 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 Harrah
Matt Harrah

๐Ÿ› + 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

๐Ÿ’ป ๐Ÿ› - Maxime Robert
Maxime Robert

๐Ÿ’ป ๐Ÿ› + 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 Dombrowski
Michael Dombrowski

๐Ÿ› + 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

๐Ÿ› - Michal Kordas
Michal Kordas

๐Ÿ› + 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

๐Ÿ› - Mitch Spano
Mitch Spano

๐Ÿ› + 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

๐Ÿ› - Nakul Sharma
Nakul Sharma

๐Ÿ› + 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

๐Ÿ› - Neha-Dhonde
Neha-Dhonde

๐Ÿ› + 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 Vuillamy
Nicolas Vuillamy

๐Ÿ“– + 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

๐Ÿ› - Nirvik Patel
Nirvik Patel

๐Ÿ’ป + 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 Pavlenko
Oleg Pavlenko

๐Ÿ› + 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

๐Ÿ› - OverDrone
OverDrone

๐Ÿ› + 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 Miฤka
Pavel Miฤka

๐Ÿ› + 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 Chittum
Peter Chittum

๐Ÿ’ป ๐Ÿ› + 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

๐Ÿ› - Philip Graf
Philip Graf

๐Ÿ’ป ๐Ÿ› + 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

๐Ÿ› - Piotrek ลปygieล‚o
Piotrek ลปygieล‚o

๐Ÿ’ป ๐Ÿ› ๐Ÿ“– + 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

๐Ÿ› - Rafael Cortรชs
Rafael Cortรชs

๐Ÿ› + 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

๐Ÿ› - Reda Benhemmouche
Reda Benhemmouche

๐Ÿ› + 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

๐Ÿ› - Rishabh Jain
Rishabh Jain

๐Ÿ› + 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 Russell
Robert Russell

๐Ÿ› + 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

๐Ÿ› - Rodolfo Noviski
Rodolfo Noviski

๐Ÿ› + 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

๐Ÿ› - Saksham Handu
Saksham Handu

๐Ÿ› + 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

๐Ÿ› - Scott Kennedy
Scott Kennedy

๐Ÿ› + 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 Schwarz
Sebastian Schwarz

๐Ÿ› + 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

๐Ÿ› ๐Ÿ’ป - Shubham
Shubham

๐Ÿ’ป ๐Ÿ› + 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 Bohn
Stefan Bohn

๐Ÿ› + 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 Friedrich
Stephen Friedrich

๐Ÿ› + 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

๐Ÿ› - Suren Abrahamyan
Suren Abrahamyan

๐Ÿ› + 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

๐Ÿ› - TIOBE Software
TIOBE Software

๐Ÿ’ป ๐Ÿ› + 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

๐Ÿ› - Theodoor
Theodoor

๐Ÿ› + 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

๐Ÿ› - Thu Vo
Thu Vo

๐Ÿ› + 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

๐Ÿ› - Tomer Figenblat
Tomer Figenblat

๐Ÿ› + 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

๐Ÿ› - Utku Cuhadaroglu
Utku Cuhadaroglu

๐Ÿ’ป ๐Ÿ› + 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

๐Ÿ› - Vickenty Fesunov
Vickenty Fesunov

๐Ÿ› + 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

๐Ÿ› - Vishv_Android
Vishv_Android

๐Ÿ› + 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

๐Ÿ› - Waqas Ahmed
Waqas Ahmed

๐Ÿ› + 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

๐Ÿ› - Wim Deblauwe
Wim Deblauwe

๐Ÿ› + 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

๐Ÿ’ป ๐Ÿ› - YuJin Kim
YuJin Kim

๐Ÿ› + 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

๐Ÿ› - andreoss
andreoss

๐Ÿ› + alexmodis
alexmodis

๐Ÿ› + andreoss
andreoss

๐Ÿ› andrey81inmd
andrey81inmd

๐Ÿ’ป ๐Ÿ› anicoara
anicoara

๐Ÿ› arunprasathav
arunprasathav

๐Ÿ› asiercamara
asiercamara

๐Ÿ› astillich-igniti
astillich-igniti

๐Ÿ’ป - avesolovksyy
avesolovksyy

๐Ÿ› - avishvat
avishvat

๐Ÿ› + avesolovksyy
avesolovksyy

๐Ÿ› + avishvat
avishvat

๐Ÿ› avivmu
avivmu

๐Ÿ› axelbarfod1
axelbarfod1

๐Ÿ› b-3-n
b-3-n

๐Ÿ› balbhadra9
balbhadra9

๐Ÿ› base23de
base23de

๐Ÿ› - bergander
bergander

๐Ÿ› ๐Ÿ’ป - berkam
berkam

๐Ÿ’ป ๐Ÿ› + bergander
bergander

๐Ÿ› ๐Ÿ’ป + berkam
berkam

๐Ÿ’ป ๐Ÿ› breizh31
breizh31

๐Ÿ› caesarkim
caesarkim

๐Ÿ› carolyujing
carolyujing

๐Ÿ› cbfiddle
cbfiddle

๐Ÿ› cesares-basilico
cesares-basilico

๐Ÿ› - chrite
chrite

๐Ÿ› - ciufudean
ciufudean

๐Ÿ“– + chrite
chrite

๐Ÿ› + ciufudean
ciufudean

๐Ÿ“– cobratbq
cobratbq

๐Ÿ› coladict
coladict

๐Ÿ› cosmoJFH
cosmoJFH

๐Ÿ› cristalp
cristalp

๐Ÿ› crunsk
crunsk

๐Ÿ› - cwholmes
cwholmes

๐Ÿ› - cyberjj999
cyberjj999

๐Ÿ› + cwholmes
cwholmes

๐Ÿ› + cyberjj999
cyberjj999

๐Ÿ› cyw3
cyw3

๐Ÿ› ๐Ÿ“– d1ss0nanz
d1ss0nanz

๐Ÿ› dague1
dague1

๐Ÿ“– dalizi007
dalizi007

๐Ÿ’ป danbrycefairsailcom
danbrycefairsailcom

๐Ÿ› - dariansanity
dariansanity

๐Ÿ› - darrenmiliband
darrenmiliband

๐Ÿ› + dariansanity
dariansanity

๐Ÿ› + darrenmiliband
darrenmiliband

๐Ÿ› davidburstrom
davidburstrom

๐Ÿ› dbirkman-paloalto
dbirkman-paloalto

๐Ÿ› deepak-patra
deepak-patra

๐Ÿ› dependabot[bot]
dependabot[bot]

๐Ÿ’ป ๐Ÿ› dinesh150
dinesh150

๐Ÿ› - diziaq
diziaq

๐Ÿ› - dreaminpast123
dreaminpast123

๐Ÿ› + diziaq
diziaq

๐Ÿ› + dreaminpast123
dreaminpast123

๐Ÿ› duanyanan
duanyanan

๐Ÿ› dutt-sanjay
dutt-sanjay

๐Ÿ› duursma
duursma

๐Ÿ’ป dylanleung
dylanleung

๐Ÿ› dzeigler
dzeigler

๐Ÿ› - eant60
eant60

๐Ÿ› - ekkirala
ekkirala

๐Ÿ› + eant60
eant60

๐Ÿ› + ekkirala
ekkirala

๐Ÿ› emersonmoura
emersonmoura

๐Ÿ› emouty
emouty

๐Ÿ’ป eugenepugach
eugenepugach

๐Ÿ› fairy
fairy

๐Ÿ› filiprafalowicz
filiprafalowicz

๐Ÿ’ป - flxbl-io
flxbl-io

๐Ÿ’ต - foxmason
foxmason

๐Ÿ› + flxbl-io
flxbl-io

๐Ÿ’ต + foxmason
foxmason

๐Ÿ› frankegabor
frankegabor

๐Ÿ› frankl
frankl

๐Ÿ› freafrea
freafrea

๐Ÿ› fsapatin
fsapatin

๐Ÿ› gearsethenry
gearsethenry

๐Ÿ› - gracia19
gracia19

๐Ÿ› - guo fei
guo fei

๐Ÿ› + gracia19
gracia19

๐Ÿ› + gudzpoz
gudzpoz

๐Ÿ› + guo fei
guo fei

๐Ÿ› gurmsc5
gurmsc5

๐Ÿ› gwilymatgearset
gwilymatgearset

๐Ÿ’ป ๐Ÿ› haigsn
haigsn

๐Ÿ› hemanshu070
hemanshu070

๐Ÿ› + + henrik242
henrik242

๐Ÿ› hongpuwu
hongpuwu

๐Ÿ› hvbtup
hvbtup

๐Ÿ’ป ๐Ÿ› - - igniti GmbH
igniti GmbH

๐Ÿ› ilovezfs
ilovezfs

๐Ÿ› imax-erik
imax-erik

๐Ÿ› itaigilo
itaigilo

๐Ÿ› + + jakivey32
jakivey32

๐Ÿ› jbennett2091
jbennett2091

๐Ÿ› jcamerin
jcamerin

๐Ÿ› - - jkeener1
jkeener1

๐Ÿ› jmetertea
jmetertea

๐Ÿ› johnra2
johnra2

๐Ÿ’ป johnzhao9
johnzhao9

๐Ÿ› + + josemanuelrolon
josemanuelrolon

๐Ÿ’ป ๐Ÿ› kabroxiko
kabroxiko

๐Ÿ’ป ๐Ÿ› karthikaiyasamy
karthikaiyasamy

๐Ÿ“– - - karwer
karwer

๐Ÿ› kaulonline
kaulonline

๐Ÿ› kdaemonv
kdaemonv

๐Ÿ› kdebski85
kdebski85

๐Ÿ› ๐Ÿ’ป + + kenji21
kenji21

๐Ÿ’ป ๐Ÿ› kfranic
kfranic

๐Ÿ› khalidkh
khalidkh

๐Ÿ› - - koalalam
koalalam

๐Ÿ› krzyk
krzyk

๐Ÿ› lasselindqvist
lasselindqvist

๐Ÿ› lgemeinhardt
lgemeinhardt

๐Ÿ› + + lihuaib
lihuaib

๐Ÿ› liqingjun123
liqingjun123

๐Ÿ› lonelyma1021
lonelyma1021

๐Ÿ› - - lpeddy
lpeddy

๐Ÿ› lujiefsi
lujiefsi

๐Ÿ’ป lukelukes
lukelukes

๐Ÿ’ป lyriccoder
lyriccoder

๐Ÿ› + + marcelmore
marcelmore

๐Ÿ› matchbox
matchbox

๐Ÿ› matthiaskraaz
matthiaskraaz

๐Ÿ› - - meandonlyme
meandonlyme

๐Ÿ› mikesive
mikesive

๐Ÿ› milossesic
milossesic

๐Ÿ› mluckam
mluckam

๐Ÿ’ป ๐Ÿ› + + mohan-chinnappan-n
mohan-chinnappan-n

๐Ÿ’ป mriddell95
mriddell95

๐Ÿ› mrlzh
mrlzh

๐Ÿ› - - msloan
msloan

๐Ÿ› mucharlaravalika
mucharlaravalika

๐Ÿ› mvenneman
mvenneman

๐Ÿ› nareshl119
nareshl119

๐Ÿ› + + nicolas-harraudeau-sonarsource
nicolas-harraudeau-sonarsource

๐Ÿ› noerremark
noerremark

๐Ÿ› novsirion
novsirion

๐Ÿ› - - nwcm
nwcm

๐Ÿ“– ๐Ÿ› ๐Ÿ’ป oggboy
oggboy

๐Ÿ› oinume
oinume

๐Ÿ› orimarko
orimarko

๐Ÿ’ป ๐Ÿ› + + pablogomez2197
pablogomez2197

๐Ÿ› pacvz
pacvz

๐Ÿ’ป pallavi agarwal
pallavi agarwal

๐Ÿ› - - parksungrin
parksungrin

๐Ÿ› patpatpat123
patpatpat123

๐Ÿ› patriksevallius
patriksevallius

๐Ÿ› pbrajesh1
pbrajesh1

๐Ÿ› + + phoenix384
phoenix384

๐Ÿ› piotrszymanski-sc
piotrszymanski-sc

๐Ÿ’ป plan3d
plan3d

๐Ÿ› - - poojasix
poojasix

๐Ÿ› prabhushrikant
prabhushrikant

๐Ÿ› pujitha8783
pujitha8783

๐Ÿ› r-r-a-j
r-r-a-j

๐Ÿ› + + raghujayjunk
raghujayjunk

๐Ÿ› rajeshveera
rajeshveera

๐Ÿ› rajeswarreddy88
rajeswarreddy88

๐Ÿ› - - recdevs
recdevs

๐Ÿ› reudismam
reudismam

๐Ÿ’ป ๐Ÿ› rijkt
rijkt

๐Ÿ› rillig-tk
rillig-tk

๐Ÿ› + + rmohan20
rmohan20

๐Ÿ’ป ๐Ÿ› rnveach
rnveach

๐Ÿ› rxmicro
rxmicro

๐Ÿ› - - ryan-gustafson
ryan-gustafson

๐Ÿ’ป ๐Ÿ› sabi0
sabi0

๐Ÿ› scais
scais

๐Ÿ› schosin
schosin

๐Ÿ› + + screamingfrog
screamingfrog

๐Ÿ’ต sebbASF
sebbASF

๐Ÿ› sergeygorbaty
sergeygorbaty

๐Ÿ’ป - - shilko2013
shilko2013

๐Ÿ› shiomiyan
shiomiyan

๐Ÿ“– simeonKondr
simeonKondr

๐Ÿ› snajberk
snajberk

๐Ÿ› + + sniperrifle2004
sniperrifle2004

๐Ÿ› snuyanzin
snuyanzin

๐Ÿ› ๐Ÿ’ป soloturn
soloturn

๐Ÿ› - - soyodream
soyodream

๐Ÿ› sratz
sratz

๐Ÿ› stonio
stonio

๐Ÿ› sturton
sturton

๐Ÿ’ป ๐Ÿ› + + sudharmohan
sudharmohan

๐Ÿ› suruchidawar
suruchidawar

๐Ÿ› svenfinitiv
svenfinitiv

๐Ÿ› - - szymanp23
szymanp23

๐Ÿ› ๐Ÿ’ป tashiscool
tashiscool

๐Ÿ› test-git-hook
test-git-hook

๐Ÿ› testation21
testation21

๐Ÿ’ป ๐Ÿ› + + thanosa
thanosa

๐Ÿ› tiandiyixian
tiandiyixian

๐Ÿ› tobwoerk
tobwoerk

๐Ÿ› - - tprouvot
tprouvot

๐Ÿ› ๐Ÿ’ป trentchilders
trentchilders

๐Ÿ› triandicAnt
triandicAnt

๐Ÿ› trishul14
trishul14

๐Ÿ› + + tsui
tsui

๐Ÿ› wangzitom12306
wangzitom12306

๐Ÿ› winhkey
winhkey

๐Ÿ› - - witherspore
witherspore

๐Ÿ› wjljack
wjljack

๐Ÿ› wuchiuwong
wuchiuwong

๐Ÿ› xingsong
xingsong

๐Ÿ› + + xioayuge
xioayuge

๐Ÿ› xnYi9wRezm
xnYi9wRezm

๐Ÿ’ป ๐Ÿ› xuanuy
xuanuy

๐Ÿ› - - xyf0921
xyf0921

๐Ÿ› yalechen-cyw3
yalechen-cyw3

๐Ÿ› yasuharu-sato
yasuharu-sato

๐Ÿ› zenglian
zenglian

๐Ÿ› + + zgrzyt93
zgrzyt93

๐Ÿ’ป ๐Ÿ› zh3ng
zh3ng

๐Ÿ› zt_soft
zt_soft

๐Ÿ› - - ztt79
ztt79

๐Ÿ› zzzzfeng
zzzzfeng

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

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

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

๐Ÿ’ป diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index d5d1238fcc..5c5329437e 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -21,27 +21,45 @@ This is a {{ site.pmd.release_type }} release. * {% rule java/bestpractices/UnitTestShouldUseBeforeAnnotation %} (Java Best Practices) now also considers JUnit 5 and TestNG tests. #### 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/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`. +* 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. ### ๐Ÿ› 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-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() ### ๐Ÿšจ 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) -* [#5241](https://github.com/pmd/pmd/pull/5241): \Ignore javacc code in coverage report - [Juan Martรญn Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod) +* [#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): 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) +* [#5278](https://github.com/pmd/pmd/pull/5278): \[java] CouplingBetweenObjects: improve violation message - [Andreas Dangel](https://github.com/adangel) (@adangel) {% endtocmaker %} 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-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 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/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/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-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/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/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..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<>(); @@ -204,6 +205,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 +501,12 @@ public class CloseResourceRule extends AbstractJavaRule { return tryStatement == null || !isVariableSpecifiedInTryWithResource(varId, tryStatement); } + private boolean isDefaultFileSystem(ASTVariableId varId) { + @Nullable + ASTExpression initializer = varId.getInitializer(); + return FILESYSTEMS_GET_DEFAULT.matchesCall(initializer); + } + 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/main/resources/category/java/bestpractices.xml b/pmd-java/src/main/resources/category/java/bestpractices.xml index cd51508131..1a85431b37 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 - + 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 @@ -1292,6 +1296,36 @@ public class MyTestCase { + + + 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. + + Note: This rule was named JUnitTestsShouldIncludeAssert before PMD 7.7.0. + + 3 + + + + + 3 @@ -1366,6 +1402,8 @@ as long as you are following this convention to name the methods. tests in the class, respectively. * TestNG provides the annotations `@BeforeMethod` and `@BeforeClass` to execute methods before each test or before tests in the class, respectively. + +Note: This rule was named JUnit4TestShouldUseBeforeAnnotation before PMD 7.7.0. 3 @@ -1418,6 +1456,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 @@ -1461,34 +1501,6 @@ public class MyTest { - - - 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 - - - - - -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 - - 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/main/resources/rulesets/java/quickstart.xml b/pmd-java/src/main/resources/rulesets/java/quickstart.xml index 97eb2742da..3ac03a493c 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 @@ + + + + + + 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/ast/jdkversiontests/java21/RecordPatterns.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/jdkversiontests/java21/RecordPatterns.java index bf944eace8..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 @@ -97,4 +97,14 @@ public class RecordPatterns { System.out.println("String " + s); } } + + + record Empty(){} + void foo(Object o) { + 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 04bed57df7..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 @@ -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,73 @@ | +- 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 = 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[] 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 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..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 @@ -34,6 +34,18 @@ public class Foo { ]]> + + Should not match for boxed Boolean on multiple parameters by default (#5253) + 0 + + + Should not match on methods annotated with @Override 0 @@ -60,4 +72,93 @@ public class Foo { } ]]> + + + Bad name with boxed Boolean (#5253) + 1 + + + + + Good name with boxed Boolean (#5253) + 0 + + + + + Should not match for boxed Boolean on methods annotated with @Override (#5253) + 0 + + + + + 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 + + + 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) + + + + #5067: FileSystems.getDefault() can't be closed + 0 + 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 8f0474ab59..fd7181a348 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 @@ -118,10 +118,12 @@ 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 + 1.0b3 + ${project.build.directory}/generated-sources/antlr4 ${project.basedir}/../antlr4-wrapper.xml @@ -167,6 +169,11 @@ ant ${ant.version} + + ant-contrib + ant-contrib + ${ant-contrib.version} + @@ -963,7 +970,7 @@ org.junit.platform junit-platform-suite - 1.10.2 + 1.11.2 test @@ -1092,13 +1099,13 @@ 3.25.5 - org.junit.platform junit-platform-commons - 1.8.2 + 1.11.2 test