Merge branch 'master' into fix-4913

This commit is contained in:
Juan Martín Sotuyo Dodero 2024-04-04 23:18:58 -03:00 committed by GitHub
commit b723da59ac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
180 changed files with 2426 additions and 1040 deletions

View File

@ -7444,6 +7444,15 @@
"contributions": [
"bug"
]
},
{
"login": "emouty",
"name": "emouty",
"avatar_url": "https://avatars.githubusercontent.com/u/16755668?v=4",
"profile": "https://github.com/emouty",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7,

View File

@ -1,10 +1,10 @@
repository: pmd/pmd
pmd:
version: 7.0.1-SNAPSHOT
version: 7.1.0-SNAPSHOT
previous_version: 7.0.0
date: 26-April-2024
release_type: bugfix
release_type: minor
# release types: major, minor, bugfix

View File

@ -874,182 +874,183 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/eant60"><img src="https://avatars.githubusercontent.com/u/41472980?v=4?s=100" width="100px;" alt="eant60"/><br /><sub><b>eant60</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aeant60" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ekkirala"><img src="https://avatars.githubusercontent.com/u/44954455?v=4?s=100" width="100px;" alt="ekkirala"/><br /><sub><b>ekkirala</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aekkirala" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/emersonmoura"><img src="https://avatars.githubusercontent.com/u/5419868?v=4?s=100" width="100px;" alt="emersonmoura"/><br /><sub><b>emersonmoura</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aemersonmoura" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/emouty"><img src="https://avatars.githubusercontent.com/u/16755668?v=4?s=100" width="100px;" alt="emouty"/><br /><sub><b>emouty</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=emouty" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/eugenepugach"><img src="https://avatars.githubusercontent.com/u/133967768?v=4?s=100" width="100px;" alt="eugenepugach"/><br /><sub><b>eugenepugach</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aeugenepugach" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://juejin.cn/user/1063982985642525"><img src="https://avatars.githubusercontent.com/u/24585054?v=4?s=100" width="100px;" alt="fairy"/><br /><sub><b>fairy</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aguxiaonian" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/filiprafalowicz"><img src="https://avatars.githubusercontent.com/u/24355557?v=4?s=100" width="100px;" alt="filiprafalowicz"/><br /><sub><b>filiprafalowicz</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=filiprafalowicz" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/filiprafalowicz"><img src="https://avatars.githubusercontent.com/u/24355557?v=4?s=100" width="100px;" alt="filiprafalowicz"/><br /><sub><b>filiprafalowicz</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=filiprafalowicz" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/flxbl-io"><img src="https://avatars.githubusercontent.com/u/142315319?v=4?s=100" width="100px;" alt="flxbl-io"/><br /><sub><b>flxbl-io</b></sub></a><br /><a href="#financial-flxbl-io" title="Financial">💵</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/foxmason"><img src="https://avatars.githubusercontent.com/u/33361071?v=4?s=100" width="100px;" alt="foxmason"/><br /><sub><b>foxmason</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Afoxmason" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/frankegabor"><img src="https://avatars.githubusercontent.com/u/13273444?v=4?s=100" width="100px;" alt="frankegabor"/><br /><sub><b>frankegabor</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Afrankegabor" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fanlw0816"><img src="https://avatars.githubusercontent.com/u/22781995?v=4?s=100" width="100px;" alt="frankl"/><br /><sub><b>frankl</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Afanlw0816" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/freafrea"><img src="https://avatars.githubusercontent.com/u/39403091?v=4?s=100" width="100px;" alt="freafrea"/><br /><sub><b>freafrea</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Afreafrea" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fsapatin"><img src="https://avatars.githubusercontent.com/u/10675254?v=4?s=100" width="100px;" alt="fsapatin"/><br /><sub><b>fsapatin</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Afsapatin" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gracia19"><img src="https://avatars.githubusercontent.com/u/32557952?v=4?s=100" width="100px;" alt="gracia19"/><br /><sub><b>gracia19</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Agracia19" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gracia19"><img src="https://avatars.githubusercontent.com/u/32557952?v=4?s=100" width="100px;" alt="gracia19"/><br /><sub><b>gracia19</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Agracia19" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ief2009"><img src="https://avatars.githubusercontent.com/u/1955449?v=4?s=100" width="100px;" alt="guo fei"/><br /><sub><b>guo fei</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aief2009" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gurmsc5"><img src="https://avatars.githubusercontent.com/u/26914263?v=4?s=100" width="100px;" alt="gurmsc5"/><br /><sub><b>gurmsc5</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Agurmsc5" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gwilymatgearset"><img src="https://avatars.githubusercontent.com/u/43957113?v=4?s=100" width="100px;" alt="gwilymatgearset"/><br /><sub><b>gwilymatgearset</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=gwilymatgearset" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Agwilymatgearset" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/haigsn"><img src="https://avatars.githubusercontent.com/u/52993319?v=4?s=100" width="100px;" alt="haigsn"/><br /><sub><b>haigsn</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ahaigsn" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hemanshu070"><img src="https://avatars.githubusercontent.com/u/32012651?v=4?s=100" width="100px;" alt="hemanshu070"/><br /><sub><b>hemanshu070</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ahemanshu070" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/henrik242"><img src="https://avatars.githubusercontent.com/u/129931?v=4?s=100" width="100px;" alt="henrik242"/><br /><sub><b>henrik242</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ahenrik242" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hongpuwu"><img src="https://avatars.githubusercontent.com/u/19198552?v=4?s=100" width="100px;" alt="hongpuwu"/><br /><sub><b>hongpuwu</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ahongpuwu" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hongpuwu"><img src="https://avatars.githubusercontent.com/u/19198552?v=4?s=100" width="100px;" alt="hongpuwu"/><br /><sub><b>hongpuwu</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ahongpuwu" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hvbtup"><img src="https://avatars.githubusercontent.com/u/7644776?v=4?s=100" width="100px;" alt="hvbtup"/><br /><sub><b>hvbtup</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=hvbtup" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Ahvbtup" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.igniti.de/"><img src="https://avatars.githubusercontent.com/u/7207145?v=4?s=100" width="100px;" alt="igniti GmbH"/><br /><sub><b>igniti GmbH</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aigniti-gmbh" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ilovezfs"><img src="https://avatars.githubusercontent.com/u/5268928?v=4?s=100" width="100px;" alt="ilovezfs"/><br /><sub><b>ilovezfs</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ailovezfs" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/itaigilo"><img src="https://avatars.githubusercontent.com/u/13402361?v=4?s=100" width="100px;" alt="itaigilo"/><br /><sub><b>itaigilo</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aitaigilo" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jakivey32"><img src="https://avatars.githubusercontent.com/u/36869603?v=4?s=100" width="100px;" alt="jakivey32"/><br /><sub><b>jakivey32</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ajakivey32" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jbennett2091"><img src="https://avatars.githubusercontent.com/u/16721671?v=4?s=100" width="100px;" alt="jbennett2091"/><br /><sub><b>jbennett2091</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ajbennett2091" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jcamerin"><img src="https://avatars.githubusercontent.com/u/7663252?v=4?s=100" width="100px;" alt="jcamerin"/><br /><sub><b>jcamerin</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ajcamerin" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jcamerin"><img src="https://avatars.githubusercontent.com/u/7663252?v=4?s=100" width="100px;" alt="jcamerin"/><br /><sub><b>jcamerin</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ajcamerin" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jkeener1"><img src="https://avatars.githubusercontent.com/u/11696155?v=4?s=100" width="100px;" alt="jkeener1"/><br /><sub><b>jkeener1</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ajkeener1" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jmetertea"><img src="https://avatars.githubusercontent.com/u/33323555?v=4?s=100" width="100px;" alt="jmetertea"/><br /><sub><b>jmetertea</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ajmetertea" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/johnra2"><img src="https://avatars.githubusercontent.com/u/90150885?v=4?s=100" width="100px;" alt="johnra2"/><br /><sub><b>johnra2</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=johnra2" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/josemanuelrolon"><img src="https://avatars.githubusercontent.com/u/1685807?v=4?s=100" width="100px;" alt="josemanuelrolon"/><br /><sub><b>josemanuelrolon</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=josemanuelrolon" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Ajosemanuelrolon" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kabroxiko"><img src="https://avatars.githubusercontent.com/u/20568120?v=4?s=100" width="100px;" alt="kabroxiko"/><br /><sub><b>kabroxiko</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=kabroxiko" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Akabroxiko" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karwer"><img src="https://avatars.githubusercontent.com/u/862540?v=4?s=100" width="100px;" alt="karwer"/><br /><sub><b>karwer</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akarwer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kaulonline"><img src="https://avatars.githubusercontent.com/u/1171723?v=4?s=100" width="100px;" alt="kaulonline"/><br /><sub><b>kaulonline</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akaulonline" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kaulonline"><img src="https://avatars.githubusercontent.com/u/1171723?v=4?s=100" width="100px;" alt="kaulonline"/><br /><sub><b>kaulonline</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akaulonline" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kdaemonv"><img src="https://avatars.githubusercontent.com/u/5984651?v=4?s=100" width="100px;" alt="kdaemonv"/><br /><sub><b>kdaemonv</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akdaemonv" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kdebski85"><img src="https://avatars.githubusercontent.com/u/9674813?v=4?s=100" width="100px;" alt="kdebski85"/><br /><sub><b>kdebski85</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akdebski85" title="Bug reports">🐛</a> <a href="https://github.com/pmd/pmd/commits?author=kdebski85" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kenji21"><img src="https://avatars.githubusercontent.com/u/1105089?v=4?s=100" width="100px;" alt="kenji21"/><br /><sub><b>kenji21</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=kenji21" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Akenji21" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kfranic"><img src="https://avatars.githubusercontent.com/u/26544594?v=4?s=100" width="100px;" alt="kfranic"/><br /><sub><b>kfranic</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akfranic" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/khalidkh"><img src="https://avatars.githubusercontent.com/u/6832066?v=4?s=100" width="100px;" alt="khalidkh"/><br /><sub><b>khalidkh</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akhalidkh" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/koalalam"><img src="https://avatars.githubusercontent.com/u/5452429?v=4?s=100" width="100px;" alt="koalalam"/><br /><sub><b>koalalam</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akoalalam" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/krzyk"><img src="https://avatars.githubusercontent.com/u/105730?v=4?s=100" width="100px;" alt="krzyk"/><br /><sub><b>krzyk</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akrzyk" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/krzyk"><img src="https://avatars.githubusercontent.com/u/105730?v=4?s=100" width="100px;" alt="krzyk"/><br /><sub><b>krzyk</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Akrzyk" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lasselindqvist"><img src="https://avatars.githubusercontent.com/u/13466645?v=4?s=100" width="100px;" alt="lasselindqvist"/><br /><sub><b>lasselindqvist</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Alasselindqvist" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lgemeinhardt"><img src="https://avatars.githubusercontent.com/u/1395165?v=4?s=100" width="100px;" alt="lgemeinhardt"/><br /><sub><b>lgemeinhardt</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Algemeinhardt" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lihuaib"><img src="https://avatars.githubusercontent.com/u/3365643?v=4?s=100" width="100px;" alt="lihuaib"/><br /><sub><b>lihuaib</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Alihuaib" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/liqingjun123"><img src="https://avatars.githubusercontent.com/u/12873992?v=4?s=100" width="100px;" alt="liqingjun123"/><br /><sub><b>liqingjun123</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aliqingjun123" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lonelyma1021"><img src="https://avatars.githubusercontent.com/u/22359014?v=4?s=100" width="100px;" alt="lonelyma1021"/><br /><sub><b>lonelyma1021</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Alonelyma1021" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lpeddy"><img src="https://avatars.githubusercontent.com/u/48803108?v=4?s=100" width="100px;" alt="lpeddy"/><br /><sub><b>lpeddy</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Alpeddy" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://lujie.ac.cn/"><img src="https://avatars.githubusercontent.com/u/2918158?v=4?s=100" width="100px;" alt="lujiefsi"/><br /><sub><b>lujiefsi</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=lujiefsi" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="http://lujie.ac.cn/"><img src="https://avatars.githubusercontent.com/u/2918158?v=4?s=100" width="100px;" alt="lujiefsi"/><br /><sub><b>lujiefsi</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=lujiefsi" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lukelukes"><img src="https://avatars.githubusercontent.com/u/45536418?v=4?s=100" width="100px;" alt="lukelukes"/><br /><sub><b>lukelukes</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=lukelukes" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lyriccoder"><img src="https://avatars.githubusercontent.com/u/20803206?v=4?s=100" width="100px;" alt="lyriccoder"/><br /><sub><b>lyriccoder</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Alyriccoder" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marcelmore"><img src="https://avatars.githubusercontent.com/u/2975481?v=4?s=100" width="100px;" alt="marcelmore"/><br /><sub><b>marcelmore</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amarcelmore" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/matchboxy"><img src="https://avatars.githubusercontent.com/u/6457674?v=4?s=100" width="100px;" alt="matchbox"/><br /><sub><b>matchbox</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amatchboxy" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/matthiaskraaz"><img src="https://avatars.githubusercontent.com/u/5954500?v=4?s=100" width="100px;" alt="matthiaskraaz"/><br /><sub><b>matthiaskraaz</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amatthiaskraaz" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mkeller-ergon"><img src="https://avatars.githubusercontent.com/u/23031669?v=4?s=100" width="100px;" alt="meandonlyme"/><br /><sub><b>meandonlyme</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amkeller-ergon" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mikesive"><img src="https://avatars.githubusercontent.com/u/4043189?v=4?s=100" width="100px;" alt="mikesive"/><br /><sub><b>mikesive</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amikesive" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mikesive"><img src="https://avatars.githubusercontent.com/u/4043189?v=4?s=100" width="100px;" alt="mikesive"/><br /><sub><b>mikesive</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amikesive" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/milossesic"><img src="https://avatars.githubusercontent.com/u/20756244?v=4?s=100" width="100px;" alt="milossesic"/><br /><sub><b>milossesic</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amilossesic" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mluckam"><img src="https://avatars.githubusercontent.com/u/26581168?v=4?s=100" width="100px;" alt="mluckam"/><br /><sub><b>mluckam</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=mluckam" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mohan-chinnappan-n.github.io/about/cv.html"><img src="https://avatars.githubusercontent.com/u/5963194?v=4?s=100" width="100px;" alt="mohan-chinnappan-n"/><br /><sub><b>mohan-chinnappan-n</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=mohan-chinnappan-n" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mriddell95"><img src="https://avatars.githubusercontent.com/u/25618660?v=4?s=100" width="100px;" alt="mriddell95"/><br /><sub><b>mriddell95</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amriddell95" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mrlzh"><img src="https://avatars.githubusercontent.com/u/13222791?v=4?s=100" width="100px;" alt="mrlzh"/><br /><sub><b>mrlzh</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amrlzh" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/msloan"><img src="https://avatars.githubusercontent.com/u/1783723?v=4?s=100" width="100px;" alt="msloan"/><br /><sub><b>msloan</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amsloan" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mucharlaravalika"><img src="https://avatars.githubusercontent.com/u/32505587?v=4?s=100" width="100px;" alt="mucharlaravalika"/><br /><sub><b>mucharlaravalika</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amucharlaravalika" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mucharlaravalika"><img src="https://avatars.githubusercontent.com/u/32505587?v=4?s=100" width="100px;" alt="mucharlaravalika"/><br /><sub><b>mucharlaravalika</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amucharlaravalika" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mvenneman"><img src="https://avatars.githubusercontent.com/u/1266912?v=4?s=100" width="100px;" alt="mvenneman"/><br /><sub><b>mvenneman</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Amvenneman" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nareshl119"><img src="https://avatars.githubusercontent.com/u/39321364?v=4?s=100" width="100px;" alt="nareshl119"/><br /><sub><b>nareshl119</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Anareshl119" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicolas-harraudeau-sonarsource"><img src="https://avatars.githubusercontent.com/u/40498978?v=4?s=100" width="100px;" alt="nicolas-harraudeau-sonarsource"/><br /><sub><b>nicolas-harraudeau-sonarsource</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Anicolas-harraudeau-sonarsource" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/noerremark"><img src="https://avatars.githubusercontent.com/u/4252411?v=4?s=100" width="100px;" alt="noerremark"/><br /><sub><b>noerremark</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Anoerremark" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/novsirion"><img src="https://avatars.githubusercontent.com/u/7797113?v=4?s=100" width="100px;" alt="novsirion"/><br /><sub><b>novsirion</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Anovsirion" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nwcm"><img src="https://avatars.githubusercontent.com/u/111259588?v=4?s=100" width="100px;" alt="nwcm"/><br /><sub><b>nwcm</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=nwcm" title="Documentation">📖</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Anwcm" title="Bug reports">🐛</a> <a href="https://github.com/pmd/pmd/commits?author=nwcm" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/oggboy"><img src="https://avatars.githubusercontent.com/u/4798818?v=4?s=100" width="100px;" alt="oggboy"/><br /><sub><b>oggboy</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aoggboy" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/oggboy"><img src="https://avatars.githubusercontent.com/u/4798818?v=4?s=100" width="100px;" alt="oggboy"/><br /><sub><b>oggboy</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aoggboy" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://journal.lampetty.net/archive/category/in%20English"><img src="https://avatars.githubusercontent.com/u/78990?v=4?s=100" width="100px;" alt="oinume"/><br /><sub><b>oinume</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aoinume" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/orimarko"><img src="https://avatars.githubusercontent.com/u/17137249?v=4?s=100" width="100px;" alt="orimarko"/><br /><sub><b>orimarko</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=orimarko" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Aorimarko" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pacvz"><img src="https://avatars.githubusercontent.com/u/35453365?v=4?s=100" width="100px;" alt="pacvz"/><br /><sub><b>pacvz</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=pacvz" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pagarwal-ignitetech"><img src="https://avatars.githubusercontent.com/u/30888430?v=4?s=100" width="100px;" alt="pallavi agarwal"/><br /><sub><b>pallavi agarwal</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Apagarwal-ignitetech" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/parksungrin"><img src="https://avatars.githubusercontent.com/u/29750262?v=4?s=100" width="100px;" alt="parksungrin"/><br /><sub><b>parksungrin</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aparksungrin" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/patpatpat123"><img src="https://avatars.githubusercontent.com/u/43899031?v=4?s=100" width="100px;" alt="patpatpat123"/><br /><sub><b>patpatpat123</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Apatpatpat123" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/patriksevallius"><img src="https://avatars.githubusercontent.com/u/7291479?v=4?s=100" width="100px;" alt="patriksevallius"/><br /><sub><b>patriksevallius</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Apatriksevallius" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/patriksevallius"><img src="https://avatars.githubusercontent.com/u/7291479?v=4?s=100" width="100px;" alt="patriksevallius"/><br /><sub><b>patriksevallius</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Apatriksevallius" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pbrajesh1"><img src="https://avatars.githubusercontent.com/u/32388299?v=4?s=100" width="100px;" alt="pbrajesh1"/><br /><sub><b>pbrajesh1</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Apbrajesh1" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phoenix384"><img src="https://avatars.githubusercontent.com/u/3883662?v=4?s=100" width="100px;" alt="phoenix384"/><br /><sub><b>phoenix384</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aphoenix384" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/piotrszymanski-sc"><img src="https://avatars.githubusercontent.com/u/71124942?v=4?s=100" width="100px;" alt="piotrszymanski-sc"/><br /><sub><b>piotrszymanski-sc</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=piotrszymanski-sc" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/plan3d"><img src="https://avatars.githubusercontent.com/u/76825073?v=4?s=100" width="100px;" alt="plan3d"/><br /><sub><b>plan3d</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aplan3d" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/poojasix"><img src="https://avatars.githubusercontent.com/u/85337280?v=4?s=100" width="100px;" alt="poojasix"/><br /><sub><b>poojasix</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Apoojasix" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/prabhushrikant"><img src="https://avatars.githubusercontent.com/u/6848200?v=4?s=100" width="100px;" alt="prabhushrikant"/><br /><sub><b>prabhushrikant</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aprabhushrikant" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pujitha8783"><img src="https://avatars.githubusercontent.com/u/20646357?v=4?s=100" width="100px;" alt="pujitha8783"/><br /><sub><b>pujitha8783</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Apujitha8783" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pujitha8783"><img src="https://avatars.githubusercontent.com/u/20646357?v=4?s=100" width="100px;" alt="pujitha8783"/><br /><sub><b>pujitha8783</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Apujitha8783" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/r-r-a-j"><img src="https://avatars.githubusercontent.com/u/33902071?v=4?s=100" width="100px;" alt="r-r-a-j"/><br /><sub><b>r-r-a-j</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ar-r-a-j" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/raghujayjunk"><img src="https://avatars.githubusercontent.com/u/48074475?v=4?s=100" width="100px;" alt="raghujayjunk"/><br /><sub><b>raghujayjunk</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Araghujayjunk" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rajeshveera"><img src="https://avatars.githubusercontent.com/u/1306514?v=4?s=100" width="100px;" alt="rajeshveera"/><br /><sub><b>rajeshveera</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Arajeshveera" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rajeswarreddy88"><img src="https://avatars.githubusercontent.com/u/48543250?v=4?s=100" width="100px;" alt="rajeswarreddy88"/><br /><sub><b>rajeswarreddy88</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Arajeswarreddy88" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/recdevs"><img src="https://avatars.githubusercontent.com/u/63118273?v=4?s=100" width="100px;" alt="recdevs"/><br /><sub><b>recdevs</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Arecdevs" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/reudismam"><img src="https://avatars.githubusercontent.com/u/1970407?v=4?s=100" width="100px;" alt="reudismam"/><br /><sub><b>reudismam</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=reudismam" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Areudismam" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rijkt"><img src="https://avatars.githubusercontent.com/u/56129985?v=4?s=100" width="100px;" alt="rijkt"/><br /><sub><b>rijkt</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Arijkt" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rijkt"><img src="https://avatars.githubusercontent.com/u/56129985?v=4?s=100" width="100px;" alt="rijkt"/><br /><sub><b>rijkt</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Arijkt" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rillig-tk"><img src="https://avatars.githubusercontent.com/u/46376960?v=4?s=100" width="100px;" alt="rillig-tk"/><br /><sub><b>rillig-tk</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Arillig-tk" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rmohan20"><img src="https://avatars.githubusercontent.com/u/58573547?v=4?s=100" width="100px;" alt="rmohan20"/><br /><sub><b>rmohan20</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=rmohan20" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Armohan20" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rnveach"><img src="https://avatars.githubusercontent.com/u/5427943?v=4?s=100" width="100px;" alt="rnveach"/><br /><sub><b>rnveach</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Arnveach" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://rxmicro.io/"><img src="https://avatars.githubusercontent.com/u/54791695?v=4?s=100" width="100px;" alt="rxmicro"/><br /><sub><b>rxmicro</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Arxmicro" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ryan-gustafson"><img src="https://avatars.githubusercontent.com/u/1227016?v=4?s=100" width="100px;" alt="ryan-gustafson"/><br /><sub><b>ryan-gustafson</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=ryan-gustafson" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Aryan-gustafson" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sabi0"><img src="https://avatars.githubusercontent.com/u/11509875?v=4?s=100" width="100px;" alt="sabi0"/><br /><sub><b>sabi0</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asabi0" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/scais"><img src="https://avatars.githubusercontent.com/u/4539192?v=4?s=100" width="100px;" alt="scais"/><br /><sub><b>scais</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ascais" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/scais"><img src="https://avatars.githubusercontent.com/u/4539192?v=4?s=100" width="100px;" alt="scais"/><br /><sub><b>scais</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ascais" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/screamingfrog"><img src="https://avatars.githubusercontent.com/u/845549?v=4?s=100" width="100px;" alt="screamingfrog"/><br /><sub><b>screamingfrog</b></sub></a><br /><a href="#financial-screamingfrog" title="Financial">💵</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sebbASF"><img src="https://avatars.githubusercontent.com/u/16689231?v=4?s=100" width="100px;" alt="sebbASF"/><br /><sub><b>sebbASF</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3AsebbASF" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sergeygorbaty"><img src="https://avatars.githubusercontent.com/u/14813710?v=4?s=100" width="100px;" alt="sergeygorbaty"/><br /><sub><b>sergeygorbaty</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=sergeygorbaty" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/shilko2013"><img src="https://avatars.githubusercontent.com/u/33313482?v=4?s=100" width="100px;" alt="shilko2013"/><br /><sub><b>shilko2013</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ashilko2013" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/shiomiyan"><img src="https://avatars.githubusercontent.com/u/35842766?v=4?s=100" width="100px;" alt="shiomiyan"/><br /><sub><b>shiomiyan</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=shiomiyan" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/simeonKondr"><img src="https://avatars.githubusercontent.com/u/42644177?v=4?s=100" width="100px;" alt="simeonKondr"/><br /><sub><b>simeonKondr</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3AsimeonKondr" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/snajberk"><img src="https://avatars.githubusercontent.com/u/3585281?v=4?s=100" width="100px;" alt="snajberk"/><br /><sub><b>snajberk</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asnajberk" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/snajberk"><img src="https://avatars.githubusercontent.com/u/3585281?v=4?s=100" width="100px;" alt="snajberk"/><br /><sub><b>snajberk</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asnajberk" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sniperrifle2004"><img src="https://avatars.githubusercontent.com/u/18223222?v=4?s=100" width="100px;" alt="sniperrifle2004"/><br /><sub><b>sniperrifle2004</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asniperrifle2004" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/snuyanzin"><img src="https://avatars.githubusercontent.com/u/403174?v=4?s=100" width="100px;" alt="snuyanzin"/><br /><sub><b>snuyanzin</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asnuyanzin" title="Bug reports">🐛</a> <a href="https://github.com/pmd/pmd/commits?author=snuyanzin" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/soyodream"><img src="https://avatars.githubusercontent.com/u/151845313?v=4?s=100" width="100px;" alt="soyodream"/><br /><sub><b>soyodream</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asoyodream" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sratz"><img src="https://avatars.githubusercontent.com/u/14908423?v=4?s=100" width="100px;" alt="sratz"/><br /><sub><b>sratz</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asratz" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/stonio"><img src="https://avatars.githubusercontent.com/u/19952825?v=4?s=100" width="100px;" alt="stonio"/><br /><sub><b>stonio</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Astonio" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sturton"><img src="https://avatars.githubusercontent.com/u/1734891?v=4?s=100" width="100px;" alt="sturton"/><br /><sub><b>sturton</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=sturton" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Asturton" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sudharmohan"><img src="https://avatars.githubusercontent.com/u/16752281?v=4?s=100" width="100px;" alt="sudharmohan"/><br /><sub><b>sudharmohan</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asudharmohan" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sudharmohan"><img src="https://avatars.githubusercontent.com/u/16752281?v=4?s=100" width="100px;" alt="sudharmohan"/><br /><sub><b>sudharmohan</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asudharmohan" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/suruchidawar"><img src="https://avatars.githubusercontent.com/u/30810931?v=4?s=100" width="100px;" alt="suruchidawar"/><br /><sub><b>suruchidawar</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asuruchidawar" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/svenfinitiv"><img src="https://avatars.githubusercontent.com/u/5653724?v=4?s=100" width="100px;" alt="svenfinitiv"/><br /><sub><b>svenfinitiv</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asvenfinitiv" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tashiscool"><img src="https://avatars.githubusercontent.com/u/1057457?v=4?s=100" width="100px;" alt="tashiscool"/><br /><sub><b>tashiscool</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Atashiscool" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/test-git-hook"><img src="https://avatars.githubusercontent.com/u/49142715?v=4?s=100" width="100px;" alt="test-git-hook"/><br /><sub><b>test-git-hook</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Atest-git-hook" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/testation21"><img src="https://avatars.githubusercontent.com/u/47239708?v=4?s=100" width="100px;" alt="testation21"/><br /><sub><b>testation21</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=testation21" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Atestation21" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/thanosa"><img src="https://avatars.githubusercontent.com/u/24596498?v=4?s=100" width="100px;" alt="thanosa"/><br /><sub><b>thanosa</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Athanosa" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tiandiyixian"><img src="https://avatars.githubusercontent.com/u/27055337?v=4?s=100" width="100px;" alt="tiandiyixian"/><br /><sub><b>tiandiyixian</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Atiandiyixian" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tiandiyixian"><img src="https://avatars.githubusercontent.com/u/27055337?v=4?s=100" width="100px;" alt="tiandiyixian"/><br /><sub><b>tiandiyixian</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Atiandiyixian" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tobwoerk"><img src="https://avatars.githubusercontent.com/u/11739442?v=4?s=100" width="100px;" alt="tobwoerk"/><br /><sub><b>tobwoerk</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Atobwoerk" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tprouvot"><img src="https://avatars.githubusercontent.com/u/35368290?v=4?s=100" width="100px;" alt="tprouvot"/><br /><sub><b>tprouvot</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Atprouvot" title="Bug reports">🐛</a> <a href="https://github.com/pmd/pmd/commits?author=tprouvot" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/trentchilders"><img src="https://avatars.githubusercontent.com/u/6664350?v=4?s=100" width="100px;" alt="trentchilders"/><br /><sub><b>trentchilders</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Atrentchilders" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/triandicAnt"><img src="https://avatars.githubusercontent.com/u/2345902?v=4?s=100" width="100px;" alt="triandicAnt"/><br /><sub><b>triandicAnt</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3AtriandicAnt" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/trishul14"><img src="https://avatars.githubusercontent.com/u/24551131?v=4?s=100" width="100px;" alt="trishul14"/><br /><sub><b>trishul14</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Atrishul14" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xmtsui"><img src="https://avatars.githubusercontent.com/u/1542690?v=4?s=100" width="100px;" alt="tsui"/><br /><sub><b>tsui</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Axmtsui" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wangzitom12306"><img src="https://avatars.githubusercontent.com/u/125560621?v=4?s=100" width="100px;" alt="wangzitom12306"/><br /><sub><b>wangzitom12306</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Awangzitom12306" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wangzitom12306"><img src="https://avatars.githubusercontent.com/u/125560621?v=4?s=100" width="100px;" alt="wangzitom12306"/><br /><sub><b>wangzitom12306</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Awangzitom12306" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/winhkey"><img src="https://avatars.githubusercontent.com/u/4877808?v=4?s=100" width="100px;" alt="winhkey"/><br /><sub><b>winhkey</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Awinhkey" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/witherspore"><img src="https://avatars.githubusercontent.com/u/813263?v=4?s=100" width="100px;" alt="witherspore"/><br /><sub><b>witherspore</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Awitherspore" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wjljack"><img src="https://avatars.githubusercontent.com/u/1182478?v=4?s=100" width="100px;" alt="wjljack"/><br /><sub><b>wjljack</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Awjljack" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wuchiuwong"><img src="https://avatars.githubusercontent.com/u/15967553?v=4?s=100" width="100px;" alt="wuchiuwong"/><br /><sub><b>wuchiuwong</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Awuchiuwong" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/songxing10000"><img src="https://avatars.githubusercontent.com/u/10040131?v=4?s=100" width="100px;" alt="xingsong"/><br /><sub><b>xingsong</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Asongxing10000" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xioayuge"><img src="https://avatars.githubusercontent.com/u/45328272?v=4?s=100" width="100px;" alt="xioayuge"/><br /><sub><b>xioayuge</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Axioayuge" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xnYi9wRezm"><img src="https://avatars.githubusercontent.com/u/61201892?v=4?s=100" width="100px;" alt="xnYi9wRezm"/><br /><sub><b>xnYi9wRezm</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=xnYi9wRezm" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3AxnYi9wRezm" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xnYi9wRezm"><img src="https://avatars.githubusercontent.com/u/61201892?v=4?s=100" width="100px;" alt="xnYi9wRezm"/><br /><sub><b>xnYi9wRezm</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=xnYi9wRezm" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3AxnYi9wRezm" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xuanuy"><img src="https://avatars.githubusercontent.com/u/3894777?v=4?s=100" width="100px;" alt="xuanuy"/><br /><sub><b>xuanuy</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Axuanuy" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xyf0921"><img src="https://avatars.githubusercontent.com/u/17350974?v=4?s=100" width="100px;" alt="xyf0921"/><br /><sub><b>xyf0921</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Axyf0921" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yalechen-cyw3"><img src="https://avatars.githubusercontent.com/u/34886223?v=4?s=100" width="100px;" alt="yalechen-cyw3"/><br /><sub><b>yalechen-cyw3</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ayalechen-cyw3" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yasuharu-sato"><img src="https://avatars.githubusercontent.com/u/45546628?v=4?s=100" width="100px;" alt="yasuharu-sato"/><br /><sub><b>yasuharu-sato</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ayasuharu-sato" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zenglian"><img src="https://avatars.githubusercontent.com/u/5268434?v=4?s=100" width="100px;" alt="zenglian"/><br /><sub><b>zenglian</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Azenglian" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zgrzyt93"><img src="https://avatars.githubusercontent.com/u/54275965?v=4?s=100" width="100px;" alt="zgrzyt93"/><br /><sub><b>zgrzyt93</b></sub></a><br /><a href="https://github.com/pmd/pmd/commits?author=zgrzyt93" title="Code">💻</a> <a href="https://github.com/pmd/pmd/issues?q=author%3Azgrzyt93" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zhangxinngang"><img src="https://avatars.githubusercontent.com/u/6891146?v=4?s=100" width="100px;" alt="zh3ng"/><br /><sub><b>zh3ng</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Azhangxinngang" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zhangxinngang"><img src="https://avatars.githubusercontent.com/u/6891146?v=4?s=100" width="100px;" alt="zh3ng"/><br /><sub><b>zh3ng</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Azhangxinngang" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yuchen1013"><img src="https://avatars.githubusercontent.com/u/17316917?v=4?s=100" width="100px;" alt="zt_soft"/><br /><sub><b>zt_soft</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Ayuchen1013" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ztt79"><img src="https://avatars.githubusercontent.com/u/48408552?v=4?s=100" width="100px;" alt="ztt79"/><br /><sub><b>ztt79</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Aztt79" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zzzzfeng"><img src="https://avatars.githubusercontent.com/u/8851007?v=4?s=100" width="100px;" alt="zzzzfeng"/><br /><sub><b>zzzzfeng</b></sub></a><br /><a href="https://github.com/pmd/pmd/issues?q=author%3Azzzzfeng" title="Bug reports">🐛</a></td>

View File

@ -14,16 +14,33 @@ This is a {{ site.pmd.release_type }} release.
### 🚀 New and noteworthy
### 🌟 Rule Changes
* {%rule java/bestpractices/JUnitTestsShouldIncludeAssert %} and {% rule java/bestpractices/JUnitTestContainsTooManyAsserts %}
have a new property named `extraAssertMethodNames`. With this property, you can configure which additional static
methods should be considered as valid verification methods. This allows to use custom mocking or assertion libraries.
### 🐛 Fixed Issues
* core
* [#494](https://github.com/pmd/pmd/issues/494): \[core] Adopt JApiCmp to enforce control over API changes
* cli
* [#4791](https://github.com/pmd/pmd/issues/4791): \[cli] Could not find or load main class
* [#4913](https://github.com/pmd/pmd/issues/4913): \[cli] cpd-gui closes immediately
* apex-errorprone
* [#3953](https://github.com/pmd/pmd/issues/3953): \[apex] EmptyCatchBlock false positive with formal (doc) comments
* java-bestpractices
* [#1084](https://github.com/pmd/pmd/issues/1084): \[java] Allow JUnitTestsShouldIncludeAssert to configure verification methods
* [#4435](https://github.com/pmd/pmd/issues/4435): \[java] \[7.0-rc1] UnusedAssignment for used field
* [#4569](https://github.com/pmd/pmd/issues/4569): \[java] ForLoopCanBeForeach reports on loop `for (int i = 0; i < list.size(); i += 2)`
* [#4618](https://github.com/pmd/pmd/issues/4618): \[java] UnusedAssignment false positive with conditional assignments of fields
* java-codestyle
* [#4881](https://github.com/pmd/pmd/issues/4881): \[java] ClassNamingConventions: interfaces are identified as abstract classes (regression in 7.0.0)
* java-design
* [#3694](https://github.com/pmd/pmd/issues/3694): \[java] SingularField ignores static variables
* [#4873](https://github.com/pmd/pmd/issues/4873): \[java] AvoidCatchingGenericException: Can no longer suppress on the exception itself
* java-errorprone
* [#2056](https://github.com/pmd/pmd/issues/2056): \[java] CloseResource false-positive with URLClassLoader in cast expression
* [#4928](https://github.com/pmd/pmd/issues/4928): \[java] EmptyCatchBlock false negative when allowCommentedBlocks=true
* java-performance
* [#3845](https://github.com/pmd/pmd/issues/3845): \[java] InsufficientStringBufferDeclaration should consider literal expression
* [#4874](https://github.com/pmd/pmd/issues/4874): \[java] StringInstantiation: False-positive when using `new String(charArray)`
@ -33,7 +50,13 @@ This is a {{ site.pmd.release_type }} release.
### 🚨 API Changes
#### Deprecated methods
* {%jdoc java::lang.java.rule.design.SingularFieldRule#mayBeSingular(java::lang.java.ast.ModifierOwner) %} has been deprecated for
removal. The method is only useful for the rule itself and shouldn't be used otherwise.
### ✨ External Contributions
* [#4864](https://github.com/pmd/pmd/pull/4864): Fix #1084 \[Java] add extra assert method names to Junit rules - [Erwan Moutymbo](https://github.com/emouty) (@emouty)
* [#4894](https://github.com/pmd/pmd/pull/4894): Fix #4791 Error caused by space in JDK path - [Scrates1](https://github.com/Scrates1) (@Scrates1)
{% endtocmaker %}

View File

@ -7,7 +7,7 @@
<parent>
<artifactId>pmd</artifactId>
<groupId>net.sourceforge.pmd</groupId>
<version>7.0.1-SNAPSHOT</version>
<version>7.1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -30,6 +30,18 @@
</offlineLinks>
</configuration>
</plugin>
<plugin>
<groupId>com.github.siom79.japicmp</groupId>
<artifactId>japicmp-maven-plugin</artifactId>
<configuration>
<parameter>
<excludes combine.children="append">
<exclude>net.sourceforge.pmd.ant.internal</exclude>
</excludes>
</parameter>
</configuration>
</plugin>
</plugins>
</build>

View File

@ -8,7 +8,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;

View File

@ -7,7 +7,7 @@
<parent>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd</artifactId>
<version>7.0.1-SNAPSHOT</version>
<version>7.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -55,6 +55,20 @@
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.github.siom79.japicmp</groupId>
<artifactId>japicmp-maven-plugin</artifactId>
<configuration>
<parameter>
<excludes combine.children="append">
<exclude>net.sourceforge.pmd.lang.apex.internal</exclude>
<exclude>net.sourceforge.pmd.lang.apex.metrics.internal</exclude>
<exclude>net.sourceforge.pmd.lang.apex.rule.internal</exclude>
</excludes>
</parameter>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>

View File

@ -4,7 +4,6 @@
package net.sourceforge.pmd.lang.apex.ast;
import static java.util.stream.Collectors.toCollection;
import static java.util.stream.Collectors.toList;
import java.util.AbstractList;
@ -43,7 +42,7 @@ final class ApexCommentBuilder {
TextRegion nodeRegion = commentContainer.getTextRegion();
// find the first comment after the start of the container node
int index = Collections.binarySearch(commentInfo.nonDocTokensByStartIndex, nodeRegion.getStartOffset());
int index = Collections.binarySearch(commentInfo.allCommentsByStartIndex, nodeRegion.getStartOffset());
// no exact hit found - this is expected: there is no comment token starting at
// the very same index as the node
@ -52,8 +51,8 @@ final class ApexCommentBuilder {
index = ~index;
// now check whether the next comment after the node is still inside the node
if (index >= 0 && index < commentInfo.nonDocTokensByStartIndex.size()) {
int commentStartIndex = commentInfo.nonDocTokensByStartIndex.get(index);
if (index >= 0 && index < commentInfo.allCommentsByStartIndex.size()) {
int commentStartIndex = commentInfo.allCommentsByStartIndex.get(index);
return nodeRegion.getStartOffset() < commentStartIndex
&& nodeRegion.getEndOffset() >= commentStartIndex;
}
@ -141,19 +140,16 @@ final class ApexCommentBuilder {
private static class CommentInformation {
final Map<Integer, String> suppressMap;
final List<Integer> nonDocTokensByStartIndex;
final List<Integer> allCommentsByStartIndex;
final List<ApexDocToken> docTokens;
CommentInformation(Map<Integer, String> suppressMap, List<Token> allCommentTokens) {
this.suppressMap = suppressMap;
this.docTokens = allCommentTokens.stream()
.filter((token) -> token.getType() == ApexLexer.DOC_COMMENT)
.map((token) -> new ApexDocToken(token))
.filter(token -> token.getType() == ApexLexer.DOC_COMMENT)
.map(ApexDocToken::new)
.collect(toList());
this.nonDocTokensByStartIndex = new TokenListByStartIndex(
allCommentTokens.stream()
.filter((token) -> token.getType() != ApexLexer.DOC_COMMENT)
.collect(toCollection(ArrayList::new)));
this.allCommentsByStartIndex = new TokenListByStartIndex(new ArrayList<>(allCommentTokens));
}
}

View File

@ -9,9 +9,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
import net.sourceforge.pmd.test.lang.rule.AbstractRuleSetFactoryTest;
import net.sourceforge.pmd.lang.rule.RuleSet;
import net.sourceforge.pmd.lang.rule.RuleSetLoader;
import net.sourceforge.pmd.test.lang.rule.AbstractRuleSetFactoryTest;
import com.github.stefanbirkner.systemlambda.SystemLambda;

View File

@ -6,8 +6,8 @@ package net.sourceforge.pmd.lang.apex.cpd;
import org.junit.jupiter.api.Test;
import net.sourceforge.pmd.lang.test.cpd.CpdTextComparisonTest;
import net.sourceforge.pmd.lang.apex.ApexLanguageModule;
import net.sourceforge.pmd.lang.test.cpd.CpdTextComparisonTest;
class ApexCpdLexerTest extends CpdTextComparisonTest {

View File

@ -297,27 +297,27 @@ private class FunctionalityTest {
///////////////////////////////
try {
} catch (Exception e) {
/** NOK: doc comment inside of empty catch block; should be reported */
/** OK: doc comment inside of empty catch block; should be reported */
}
try {
} catch (Exception e) {
/** NOK: doc comment inside of empty catch block;
/** OK: doc comment inside of empty catch block;
* multiple lines
* should be reported
*/
}
try {
} catch (Exception e) { /** NOK: doc comment inside of empty catch block, same line as begin; should be reported */
} catch (Exception e) { /** OK: doc comment inside of empty catch block, same line as begin; should be reported */
}
try {
} catch (Exception e) {
/** NOK: doc comment inside of empty catch block, same line as end; should be reported */ }
/** OK: doc comment inside of empty catch block, same line as end; should be reported */ }
try {
} catch (Exception e) { /** NOK: doc comment inside catch block, same line as begin/end; should be reported */ }
} catch (Exception e) { /** OK: doc comment inside catch block, same line as begin/end; should be reported */ }
}
}
]]></code-fragment>
@ -333,8 +333,8 @@ private class FunctionalityTest {
<test-code>
<description>#3569 - Verify use of allowCommentedBlocks=true, binary search boundaries verification</description>
<rule-property name="allowCommentedBlocks">true</rule-property>
<expected-problems>9</expected-problems>
<expected-linenumbers>19,23,54,58,65,70,78,82,86</expected-linenumbers>
<expected-problems>4</expected-problems>
<expected-linenumbers>19,23,54,58</expected-linenumbers>
<code-ref id="with-comments"/>
</test-code>
</test-data>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd</artifactId>
<version>7.0.1-SNAPSHOT</version>
<version>7.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -20,6 +20,21 @@
<suppressionsLocation>pmd-cli-checkstyle-suppressions.xml</suppressionsLocation>
</configuration>
</plugin>
<plugin>
<groupId>com.github.siom79.japicmp</groupId>
<artifactId>japicmp-maven-plugin</artifactId>
<configuration>
<parameter>
<excludes combine.children="append">
<exclude>net.sourceforge.pmd.cli.internal</exclude>
<exclude>net.sourceforge.pmd.cli.commands.internal</exclude>
<exclude>net.sourceforge.pmd.cli.commands.mixins.internal</exclude>
<exclude>net.sourceforge.pmd.cli.commands.typesupport.internal</exclude>
</excludes>
</parameter>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd</artifactId>
<version>7.0.1-SNAPSHOT</version>
<version>7.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -6,8 +6,8 @@ package net.sourceforge.pmd.lang.coco.cpd;
import org.junit.jupiter.api.Test;
import net.sourceforge.pmd.lang.test.cpd.CpdTextComparisonTest;
import net.sourceforge.pmd.lang.coco.CocoLanguageModule;
import net.sourceforge.pmd.lang.test.cpd.CpdTextComparisonTest;
class CocoCpdLexerTest extends CpdTextComparisonTest {
CocoCpdLexerTest() {

View File

@ -7,7 +7,7 @@
<parent>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd</artifactId>
<version>7.0.1-SNAPSHOT</version>
<version>7.1.0-SNAPSHOT</version>
</parent>
<artifactId>pmd-compat6</artifactId>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd</artifactId>
<version>7.0.1-SNAPSHOT</version>
<version>7.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -76,6 +76,26 @@
<offlineLinks combine.self="override"></offlineLinks>
</configuration>
</plugin>
<plugin>
<groupId>com.github.siom79.japicmp</groupId>
<artifactId>japicmp-maven-plugin</artifactId>
<configuration>
<parameter>
<excludes combine.children="append">
<exclude>net.sourceforge.pmd.internal</exclude>
<exclude>net.sourceforge.pmd.cache.internal</exclude>
<exclude>net.sourceforge.pmd.cpd.internal</exclude>
<exclude>net.sourceforge.pmd.lang.ast.internal</exclude>
<exclude>net.sourceforge.pmd.lang.rule.internal</exclude>
<exclude>net.sourceforge.pmd.lang.rule.xpath.internal</exclude>
<exclude>net.sourceforge.pmd.properties.internal</exclude>
<exclude>net.sourceforge.pmd.renderers.internal</exclude>
<exclude>net.sourceforge.pmd.util.internal</exclude>
</excludes>
</parameter>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>

View File

@ -89,6 +89,7 @@ public abstract class AbstractConfiguration {
throw new IllegalArgumentException(
"Language '" + language.getId() + "' is not registered in " + getLanguageRegistry());
}
checkLanguageIsAcceptable(language);
}
public LanguageRegistry getLanguageRegistry() {
@ -167,6 +168,8 @@ public abstract class AbstractConfiguration {
* @param lang A language
*/
public void setOnlyRecognizeLanguage(Language lang) {
AssertionUtil.requireParamNotNull("language", lang);
checkLanguageIsRegistered(lang);
this.languageVersionDiscoverer.onlyRecognizeLanguages(LanguageRegistry.singleton(lang));
}
@ -177,6 +180,8 @@ public abstract class AbstractConfiguration {
*/
public void setDefaultLanguageVersion(LanguageVersion languageVersion) {
Objects.requireNonNull(languageVersion);
checkLanguageIsRegistered(languageVersion.getLanguage());
languageVersionDiscoverer.setDefaultLanguageVersion(languageVersion);
getLanguageProperties(languageVersion.getLanguage()).setLanguageVersion(languageVersion.getVersion());
}
@ -194,6 +199,15 @@ public abstract class AbstractConfiguration {
}
}
/**
* Check that it is correct to use the given language with this configuration.
*
* @throws UnsupportedOperationException if the language isn't supported.
*/
protected void checkLanguageIsAcceptable(Language lang) throws UnsupportedOperationException {
// do nothing
}
/**
* Get the LanguageVersion of the source file with given name. This depends
* on the fileName extension, and the java version.

View File

@ -24,6 +24,7 @@ import net.sourceforge.pmd.internal.util.ClasspathClassLoader;
import net.sourceforge.pmd.lang.Language;
import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.lang.LanguageVersion;
import net.sourceforge.pmd.lang.PmdCapableLanguage;
import net.sourceforge.pmd.lang.rule.RulePriority;
import net.sourceforge.pmd.lang.rule.RuleSetLoader;
import net.sourceforge.pmd.renderers.Renderer;
@ -472,4 +473,12 @@ public class PMDConfiguration extends AbstractConfiguration {
public void setReportFile(Path reportFile) {
this.reportFile = reportFile;
}
@Override
protected void checkLanguageIsAcceptable(Language lang) throws UnsupportedOperationException {
if (!(lang instanceof PmdCapableLanguage)) {
throw new UnsupportedOperationException("Language " + lang.getId() + " does not support analysis with PMD and cannot be used in a PMDConfiguration. "
+ "You may be able to use it with CPD though.");
}
}
}

View File

@ -20,11 +20,11 @@ import org.slf4j.LoggerFactory;
import net.sourceforge.pmd.AbstractConfiguration;
import net.sourceforge.pmd.cpd.internal.CpdLanguagePropertiesDefaults;
import net.sourceforge.pmd.lang.Language;
import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.util.log.internal.SimpleMessageReporter;
/**
*
* @author Brian Remedios
* @author Romain Pelisse - &lt;belaran@gmail.com&gt;
*/
@ -268,4 +268,13 @@ public class CPDConfiguration extends AbstractConfiguration {
this.failOnViolation = failOnViolation;
}
@Override
protected void checkLanguageIsAcceptable(Language lang) throws UnsupportedOperationException {
if (!(lang instanceof CpdCapableLanguage)) {
throw new UnsupportedOperationException("Language " + lang.getId() + " does not support analysis with CPD and cannot be used in a CPDConfiguration. "
+ "You may be able to use it with PMD though.");
}
}
}

View File

@ -35,7 +35,8 @@ public final class LanguageRegistry implements Iterable<Language> {
private static final Logger LOG = LoggerFactory.getLogger(LanguageRegistry.class);
private static final LanguageRegistry ALL_LANGUAGES =
// test only
static final LanguageRegistry ALL_LANGUAGES =
loadLanguages(LanguageRegistry.class.getClassLoader());
/**

View File

@ -265,7 +265,7 @@ public abstract class PropertyBuilder<B extends PropertyBuilder<B, T>, T> {
* PropertyDescriptor<Set<String>> whitelistSet =
* PropertyFactory.stringProperty("whitelist")
* .desc(...)
* .to(Collectors.toSet())
* .map(Collectors.toSet())
* .emptyDefaultValue()
* .build();
* }</pre>

View File

@ -12,6 +12,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.File;
@ -30,6 +31,8 @@ import org.junit.jupiter.api.io.TempDir;
import net.sourceforge.pmd.cache.internal.FileAnalysisCache;
import net.sourceforge.pmd.cache.internal.NoopAnalysisCache;
import net.sourceforge.pmd.internal.util.ClasspathClassLoader;
import net.sourceforge.pmd.lang.CpdOnlyDummyLanguage;
import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.lang.rule.RulePriority;
import net.sourceforge.pmd.renderers.CSVRenderer;
import net.sourceforge.pmd.renderers.Renderer;
@ -230,4 +233,14 @@ class PmdConfigurationTest {
configuration.setIgnoreIncrementalAnalysis(true);
assertTrue(configuration.getAnalysisCache() instanceof NoopAnalysisCache, "Ignoring incremental analysis should turn the cache into a noop");
}
@Test
void testCpdOnlyLanguage() {
final PMDConfiguration configuration = new PMDConfiguration(LanguageRegistry.CPD);
assertThrows(UnsupportedOperationException.class,
() -> configuration.setOnlyRecognizeLanguage(CpdOnlyDummyLanguage.getInstance()));
assertThrows(UnsupportedOperationException.class,
() -> configuration.setDefaultLanguageVersion(CpdOnlyDummyLanguage.getInstance().getDefaultVersion()));
}
}

View File

@ -9,6 +9,7 @@ import static org.hamcrest.Matchers.instanceOf;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
@ -16,6 +17,9 @@ import java.util.Map;
import org.junit.jupiter.api.Test;
import net.sourceforge.pmd.lang.DummyLanguageNoCapabilities;
import net.sourceforge.pmd.lang.LanguageRegistry;
class CPDConfigurationTest {
@Test
@ -59,4 +63,16 @@ class CPDConfigurationTest {
assertEquals(StandardCharsets.UTF_16.name(), ((XMLRenderer) renderer).getEncoding());
}
@Test
void testCpdNotSupported() {
DummyLanguageNoCapabilities lang = DummyLanguageNoCapabilities.getInstance();
final CPDConfiguration configuration = new CPDConfiguration(LanguageRegistry.singleton(lang));
assertThrows(UnsupportedOperationException.class,
() -> configuration.setOnlyRecognizeLanguage(lang));
assertThrows(UnsupportedOperationException.class,
() -> configuration.setDefaultLanguageVersion(lang.getDefaultVersion()));
}
}

View File

@ -0,0 +1,34 @@
/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang;
import java.util.Objects;
import net.sourceforge.pmd.cpd.AnyCpdLexer;
import net.sourceforge.pmd.cpd.CpdLexer;
import net.sourceforge.pmd.lang.impl.CpdOnlyLanguageModuleBase;
/**
* Dummy language used for testing PMD.
*/
public class CpdOnlyDummyLanguage extends CpdOnlyLanguageModuleBase {
public static final String NAME = "DummyCpdOnly";
public static final String TERSE_NAME = "dummy_cpd_only";
public CpdOnlyDummyLanguage() {
super(LanguageMetadata.withId(TERSE_NAME).name(NAME).extensions("dummy", "txt")
.addDefaultVersion("1.7", "7"));
}
public static CpdOnlyDummyLanguage getInstance() {
return (CpdOnlyDummyLanguage) Objects.requireNonNull(LanguageRegistry.CPD.getLanguageByFullName(NAME));
}
@Override
public CpdLexer createCpdLexer(LanguagePropertyBundle bundle) {
return new AnyCpdLexer();
}
}

View File

@ -0,0 +1,26 @@
/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang;
import java.util.Objects;
/**
* Dummy language used for testing PMD.
*/
public class DummyLanguageNoCapabilities extends LanguageModuleBase {
public static final String NAME = "DummyNoCapabilities";
public static final String TERSE_NAME = "dummy_no_capabilities";
public DummyLanguageNoCapabilities() {
super(LanguageMetadata.withId(TERSE_NAME).name(NAME).extensions("dummyxxx", "txt")
.addDefaultVersion("1.7", "7"));
}
public static DummyLanguageNoCapabilities getInstance() {
return (DummyLanguageNoCapabilities) Objects.requireNonNull(LanguageRegistry.ALL_LANGUAGES.getLanguageByFullName(NAME));
}
}

View File

@ -1,2 +1,4 @@
net.sourceforge.pmd.lang.DummyLanguageModule
net.sourceforge.pmd.lang.Dummy2LanguageModule
net.sourceforge.pmd.lang.CpdOnlyDummyLanguage
net.sourceforge.pmd.lang.DummyLanguageNoCapabilities

View File

@ -7,7 +7,7 @@
<parent>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd</artifactId>
<version>7.0.1-SNAPSHOT</version>
<version>7.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -12,9 +12,9 @@ import org.junit.jupiter.api.Test;
import net.sourceforge.pmd.cpd.CpdLanguageProperties;
import net.sourceforge.pmd.cpd.CpdLexer;
import net.sourceforge.pmd.cpd.Tokens;
import net.sourceforge.pmd.lang.cpp.CppLanguageModule;
import net.sourceforge.pmd.lang.test.cpd.CpdTextComparisonTest;
import net.sourceforge.pmd.lang.test.cpd.LanguagePropertyConfig;
import net.sourceforge.pmd.lang.cpp.CppLanguageModule;
class CppCpdLexerTest extends CpdTextComparisonTest {

View File

@ -7,7 +7,7 @@
<parent>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd</artifactId>
<version>7.0.1-SNAPSHOT</version>
<version>7.1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -10,9 +10,9 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import org.junit.jupiter.api.Test;
import net.sourceforge.pmd.cpd.CpdLanguageProperties;
import net.sourceforge.pmd.lang.ast.LexException;
import net.sourceforge.pmd.lang.test.cpd.CpdTextComparisonTest;
import net.sourceforge.pmd.lang.test.cpd.LanguagePropertyConfig;
import net.sourceforge.pmd.lang.ast.LexException;
class CsCpdLexerTest extends CpdTextComparisonTest {

Some files were not shown because too many files have changed in this diff Show More