Skip to content

Latest commit

 

History

History
1601 lines (1579 loc) · 322 KB

credits.md

File metadata and controls

1601 lines (1579 loc) · 322 KB
title permalink
Credits
pmd_projectdocs_credits.html

✨ Contributors

Thanks goes to these wonderful people (emoji key):

0xflotus
0xflotus

💻 🐛
1henni
1henni

🐛
219sansim
219sansim

💻
ALiNew
ALiNew

🐛
ASBrouwers
ASBrouwers

💻
Abhijit Sarkar
Abhijit Sarkar

🐛
Abhishek Kumar
Abhishek Kumar

🐛
Adam
Adam

🐛
Adam Carroll
Adam Carroll

🐛
Adam Obuchowicz
Adam Obuchowicz

🐛
Adrian Price
Adrian Price

🐛
Adrien Lecharpentier
Adrien Lecharpentier

🐛
Aidan Harding
Aidan Harding

🐛
Akshat Bahety
Akshat Bahety

💻 🐛
Akshay Thapa
Akshay Thapa

🐛
Alan Buttars
Alan Buttars

🐛
Alan Hohn
Alan Hohn

🐛
Alberto Fernández
Alberto Fernández

💻 🐛
Alex
Alex

💻
Alex
Alex

🐛
Alex Rentz
Alex Rentz

🐛
Alex Saveau
Alex Saveau

🐛
Alex Shesterov
Alex Shesterov

💻 🐛
Alexey Markevich
Alexey Markevich

🐛
Alexey Naumov
Alexey Naumov

🐛
Alexey Yudichev
Alexey Yudichev

🐛
Alix
Alix

🐛
Alix
Alix

🐛
Amish Shah
Amish Shah

🐛
Amit Prasad
Amit Prasad

🐛
Amitosh Swain Mahapatra
Amitosh Swain Mahapatra

🐛
Anand Subramanian
Anand Subramanian

💻 🐛
Anastasiia Koba
Anastasiia Koba

💻
Anatoly Trosinenko
Anatoly Trosinenko

💻 🐛
Andi Pabst
Andi Pabst

💻 🐛
Andrea
Andrea

🐛
Andrea Aime
Andrea Aime

🐛
Andreas Dangel
Andreas Dangel

💻 📖 🐛 🚧
Andreas Deininger
Andreas Deininger

📖
Andreas Markussen
Andreas Markussen

🐛
Andreas Schmid
Andreas Schmid

🐛
Andreas Turban
Andreas Turban

🐛
Andrei Paikin
Andrei Paikin

🐛
Andrew
Andrew

🐛
Andrew Green
Andrew Green

🐛
Andrey Bozhko
Andrey Bozhko

📖
Andrey Fomin
Andrey Fomin

🐛
Andrey Hitrin
Andrey Hitrin

🐛
Andrey Mochalov
Andrey Mochalov

💻 🐛
Andro72
Andro72

🐛
Andrwyw
Andrwyw

🐛
Andrés Catalán
Andrés Catalán

🐛
Andy Goossens
Andy Goossens

🐛
Andy Pattenden
Andy Pattenden

🐛
Andy Ray
Andy Ray

🐛
Andy Robinson
Andy Robinson

🐛
Andy-2639
Andy-2639

🐛
Ankush Somani
Ankush Somani

🐛
Anmol Kumar
Anmol Kumar

🐛
Anthony Whitford
Anthony Whitford

🐛
AnthonyKot
AnthonyKot

🐛
Aravind Hegde
Aravind Hegde

🐛
Arda Aslan
Arda Aslan

🐛
Ari Fogel
Ari Fogel

🐛
Arnaud Jeansen
Arnaud Jeansen

💻 🐛
Arpit Koolwal
Arpit Koolwal

🐛
Artem
Artem

💻 🐛
Artem
Artem

🐛
Artem Sheremet
Artem Sheremet

🐛
Artur
Artur

🐛
Artur Bosch
Artur Bosch

🐛
Artur Dryomov
Artur Dryomov

🐛
Artur Ossowski
Artur Ossowski

🐛
AshTheMash
AshTheMash

🐛
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

🐛
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 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

🐛
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

🐛
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 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

🐛
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

🐛
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

🐛
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

🐛
ColColonCleaner
ColColonCleaner

🐛
Colin Ingarfield
Colin Ingarfield

🐛
Craig Andrews
Craig Andrews

🐛
Craig Muchinsky
Craig Muchinsky

🐛
Cyril
Cyril

💻 🐛
Dale
Dale

💻
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

🐛
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 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

🐛
Dawid Ciok
Dawid Ciok

🐛 💻
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

🐛
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

🐛
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

🐛
Elder S.
Elder S.

🐛
Eldrick Wega
Eldrick Wega

📖
Emile
Emile

🐛
Eric
Eric

🐛
Eric Kintzer
Eric Kintzer

🐛
Eric Perret
Eric Perret

🐛
Eric Squires
Eric Squires

🐛
Erich L Foster
Erich L Foster

🐛
Erik Bleske
Erik Bleske

🐛
Erik C. Thauvin
Erik C. Thauvin

📖
Ernst Reissner
Ernst Reissner

🐛
Ewan Tempero
Ewan Tempero

🐛
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

💻 🐛
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

🐛
Gary Gregory
Gary Gregory

🐛
Genoud Magloire
Genoud Magloire

🐛
Geoffrey555
Geoffrey555

🐛
Georg Romstorfer
Georg Romstorfer

🐛
Gio
Gio

🐛
Gol
Gol

🐛
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

🐛
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

🐛
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

🐛
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_

🐛
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

🐛
James Harrison
James Harrison

🐛 💻
Jan
Jan

🐛
Jan Aertgeerts
Jan Aertgeerts

💻 🐛
Jan Brümmer
Jan Brümmer

🐛
Jan Tříska
Jan Tříska

🐛
Jan-Lukas Else
Jan-Lukas Else

🐛
Jason Qiu
Jason Qiu

💻 📖
Jason Williams
Jason Williams

🐛
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 May
Jeff May

🐛
Jens Gerdes
Jens Gerdes

🐛
Jeroen Borgers
Jeroen Borgers

🐛 💻 📢
Jeroen van Wilgenburg
Jeroen van Wilgenburg

📖
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

🐛
John Zhang
John Zhang

🐛
John-Teng
John-Teng

💻 🐛
Jon Moroney
Jon Moroney

💻 🐛
Jonas Geiregat
Jonas Geiregat

🐛
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

🐛
Josh Feingold
Josh Feingold

💻 🐛
Josh Holthaus
Josh Holthaus

🐛
Joshua S Arquilevich
Joshua S Arquilevich

🐛
João Dinis Ferreira
João Dinis Ferreira

📖
João Ferreira
João Ferreira

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

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

💻 📖 🐛 🚧
Juan Pablo Civile
Juan Pablo Civile

🐛
Julian Voronetsky
Julian Voronetsky

🐛
Julien
Julien

🐛
Julius
Julius

🐛
JustPRV
JustPRV

🐛
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

🐛
Kev
Kev

🐛
Keve Müller
Keve Müller

🐛
Kevin Guerra
Kevin Guerra

💻
Kevin Jones
Kevin Jones

🐛 💻
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

🐛
LaLucid
LaLucid

💻
Larry Diamond
Larry Diamond

💻 🐛
Lars Knickrehm
Lars Knickrehm

🐛
Laurent Bovet
Laurent Bovet

🐛 💻
Leo Gutierrez
Leo Gutierrez

🐛
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

🐛
Lucas Silva
Lucas Silva

🐛
Lucas Soncini
Lucas Soncini

💻 🐛
Luis Alcantar
Luis Alcantar

💻
Lukasz Slonina
Lukasz Slonina

🐛
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

🐛
Manfred Koch
Manfred Koch

🐛
Manuel Moya Ferrer
Manuel Moya Ferrer

💻 🐛
Manuel Ryan
Manuel Ryan

🐛
Marat Vyshegorodtsev
Marat Vyshegorodtsev

🐛
Marcel Härle
Marcel Härle

🐛
Marcello Fialho
Marcello Fialho

🐛
Marcin Dąbrowski
Marcin Dąbrowski

💻
Marcin 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

🐛
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

🐛
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 Nelson
Matt Nelson

🐛
Matthew Amos
Matthew Amos

🐛
Matthew Duggan
Matthew Duggan

🐛
Matthew Hall
Matthew Hall

🐛
Matías Fraga
Matías Fraga

💻 🐛
Maxime Robert
Maxime Robert

💻 🐛
MetaBF
MetaBF

🐛
Michael
Michael

🐛
Michael Bell
Michael Bell

🐛
Michael Bernstein
Michael Bernstein

🐛
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

🐛
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

🐛
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

🐛
Nathan Braun
Nathan Braun

🐛
Nathan Reynolds
Nathan Reynolds

🐛
Nathan Reynolds
Nathan Reynolds

🐛
Nathanaël
Nathanaël

🐛
Naveen
Naveen

💻
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

📖
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

💻
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

🐛
Oleksii Dykov
Oleksii Dykov

💻 🐛
Oliver Eikemeier
Oliver Eikemeier

🐛
Oliver Siegmar
Oliver Siegmar

💵
Olivier Parent
Olivier Parent

💻 🐛
Ollie Abbey
Ollie Abbey

💻 🐛
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

🐛
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 Cudmore
Peter Cudmore

🐛
Peter Kasson
Peter Kasson

🐛
Peter Kofler
Peter Kofler

🐛
Peter Paul Bakker
Peter Paul Bakker

💻
Peter Rader
Peter Rader

🐛
Pham Hai Trung
Pham Hai Trung

🐛
Philip Graf
Philip Graf

💻 🐛
Philip 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

💻 🐛 📖
Pranay Jaiswal
Pranay Jaiswal

🐛
Prasad Kamath
Prasad Kamath

🐛
Prasanna
Prasanna

🐛
Presh-AR
Presh-AR

🐛
Puneet1726
Puneet1726

🐛
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

🐛
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

🐛
RishabhDeep Singh
RishabhDeep Singh

🐛
Robbie Martinus
Robbie Martinus

💻 🐛
Robert Henry
Robert Henry

🐛
Robert Mihaly
Robert Mihaly

🐛
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

🐛
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

🐛
Saladoc
Saladoc

🐛
Salesforce Bob Lightning
Salesforce Bob Lightning

🐛
Sam Carlberg
Sam Carlberg

🐛
Sashko
Sashko

💻
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

🐛
Seren
Seren

🐛 💻
Sergey Gorbaty
Sergey Gorbaty

🐛
Sergey Kozlov
Sergey Kozlov

🐛
Sergey Yanzin
Sergey Yanzin

💻 🐛
Seth Wilcox
Seth Wilcox

💻
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 Endrullis
Stefan Endrullis

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

🐛
Stefan Wolf
Stefan Wolf

🐛
Stephan H. Wissel
Stephan H. Wissel

🐛
Stephen
Stephen

🐛
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

🐛
Suvashri
Suvashri

📖
SwatiBGupta1110
SwatiBGupta1110

🐛
SyedThoufich
SyedThoufich

🐛
Szymon Sasin
Szymon Sasin

🐛
T-chuangxin
T-chuangxin

🐛
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

🐛
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

🐛
Thunderforge
Thunderforge

💻 🐛
Tim van der Lippe
Tim van der Lippe

🐛
Tobias Weimer
Tobias Weimer

💻 🐛
Tom Copeland
Tom Copeland

🐛 💻 📖
Tom Daly
Tom Daly

🐛
Tomer Figenblat
Tomer Figenblat

🐛
Tomi De Lucca
Tomi De Lucca

💻 🐛
Torsten Kleiber
Torsten Kleiber

🐛
TrackerSB
TrackerSB

🐛
Tyson Stewart
Tyson Stewart

🐛
Ullrich Hafner
Ullrich Hafner

🐛
Utku Cuhadaroglu
Utku Cuhadaroglu

💻 🐛
Valentin Brandl
Valentin Brandl

🐛
Valeria
Valeria

🐛
Valery Yatsynovich
Valery Yatsynovich

📖
Vasily Anisimov
Vasily Anisimov

🐛
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

🐛
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

🐛
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

🐛
Woongsik Choi
Woongsik Choi

🐛
XenoAmess
XenoAmess

💻 🐛
Yang
Yang

💻
YaroslavTER
YaroslavTER

🐛
Yasar Shaikh
Yasar Shaikh

💻
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

🐛
andrey81inmd
andrey81inmd

💻 🐛
anicoara
anicoara

🐛
arunprasathav
arunprasathav

🐛
asiercamara
asiercamara

🐛
astillich-igniti
astillich-igniti

💻
avesolovksyy
avesolovksyy

🐛
avishvat
avishvat

🐛
avivmu
avivmu

🐛
axelbarfod1
axelbarfod1

🐛
b-3-n
b-3-n

🐛
balbhadra9
balbhadra9

🐛
base23de
base23de

🐛
bergander
bergander

🐛 💻
berkam
berkam

💻 🐛
breizh31
breizh31

🐛
caesarkim
caesarkim

🐛
carolyujing
carolyujing

🐛
cbfiddle
cbfiddle

🐛
cesares-basilico
cesares-basilico

🐛
chrite
chrite

🐛
ciufudean
ciufudean

📖
cobratbq
cobratbq

🐛
coladict
coladict

🐛
cosmoJFH
cosmoJFH

🐛
cristalp
cristalp

🐛
crunsk
crunsk

🐛
cwholmes
cwholmes

🐛
cyberjj999
cyberjj999

🐛
cyw3
cyw3

🐛 📖
d1ss0nanz
d1ss0nanz

🐛
dague1
dague1

📖
dalizi007
dalizi007

💻
danbrycefairsailcom
danbrycefairsailcom

🐛
dariansanity
dariansanity

🐛
darrenmiliband
darrenmiliband

🐛
davidburstrom
davidburstrom

🐛
dbirkman-paloalto
dbirkman-paloalto

🐛
deepak-patra
deepak-patra

🐛
dependabot[bot]
dependabot[bot]

💻 🐛
dinesh150
dinesh150

🐛
diziaq
diziaq

🐛
dreaminpast123
dreaminpast123

🐛
duanyanan
duanyanan

🐛
dutt-sanjay
dutt-sanjay

🐛
dylanleung
dylanleung

🐛
dzeigler
dzeigler

🐛
eant60
eant60

🐛
ekkirala
ekkirala

🐛
emersonmoura
emersonmoura

🐛
emouty
emouty

💻
eugenepugach
eugenepugach

🐛
fairy
fairy

🐛
filiprafalowicz
filiprafalowicz

💻
flxbl-io
flxbl-io

💵
foxmason
foxmason

🐛
frankegabor
frankegabor

🐛
frankl
frankl

🐛
freafrea
freafrea

🐛
fsapatin
fsapatin

🐛
gracia19
gracia19

🐛
guo fei
guo fei

🐛
gurmsc5
gurmsc5

🐛
gwilymatgearset
gwilymatgearset

💻 🐛
haigsn
haigsn

🐛
hemanshu070
hemanshu070

🐛
henrik242
henrik242

🐛
hongpuwu
hongpuwu

🐛
hvbtup
hvbtup

💻 🐛
igniti GmbH
igniti GmbH

🐛
ilovezfs
ilovezfs

🐛
itaigilo
itaigilo

🐛
jakivey32
jakivey32

🐛
jbennett2091
jbennett2091

🐛
jcamerin
jcamerin

🐛
jkeener1
jkeener1

🐛
jmetertea
jmetertea

🐛
johnra2
johnra2

💻
josemanuelrolon
josemanuelrolon

💻 🐛
kabroxiko
kabroxiko

💻 🐛
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

💻 🐛
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

🐛
screamingfrog
screamingfrog

💵
sebbASF
sebbASF

🐛
sergeygorbaty
sergeygorbaty

💻
shilko2013
shilko2013

🐛
shiomiyan
shiomiyan

📖
simeonKondr
simeonKondr

🐛
snajberk
snajberk

🐛
sniperrifle2004
sniperrifle2004

🐛
snuyanzin
snuyanzin

🐛 💻
soyodream
soyodream

🐛
sratz
sratz

🐛
stonio
stonio

🐛
sturton
sturton

💻 🐛
sudharmohan
sudharmohan

🐛
suruchidawar
suruchidawar

🐛
svenfinitiv
svenfinitiv

🐛
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

🐛
任贵杰
任贵杰

🐛
茅延安
茅延安

💻

Previous Contributors

These are collected contributors before we moved to github.

Founders

According to the book PMD Applied the following people are the founders of PMD:

  • Tom Copeland (@tcopeland) - PMD core, lead developer, JDeveloper plugin, initial Gel plugin, initial jEdit plugin, IDEAJ integration, BlueJ extension
  • David Dixon-Peugh - PMD core, much of the early work on the grammar, initial Emacs plugin
  • David Craine - JBuilder plugin

Committers

  • Philippe Herlin - Eclipse plugin, fixed bugs in RuleSetFactory
  • Nascif Abousalh Neto - Emacs plugin
  • Jiger Patel - jEdit plugin
  • Alan Ezust - jEdit plugin
  • Ole-Martin Mork - NetBeans plugin
  • Miguel Griffa - PMD core, over a dozen rules, lots of documentation, and other improvements all over the place
  • Allan Caplan - PMD core, six rules, lots of bugfixes and improvements to the PMD core
  • Radim Kubacki - Netbeans plugin, OptimizableToArrayCallRule suggestion, bug reports
  • Tomasz Slota - Netbeans plugin
  • Andrey Lumyanski - Gel plugin
  • Johan Nagels - PMD core, JSP support
  • Brian Remedios - PMD core, properties subsystem, lots of CPD UI improvements, Eclipse plugin improvements
  • Xavier Le Vourch - PMD core, numerous bug fixes, UselessStringValueOf, UnnecessaryWrapperObjectCreation, SimplifyBooleanAssertion
  • Sven Jacob - DFA subsystem, Eclipse plugin
  • Wouter Zelle - Lots of bugfixes and cleanups, JUnit test XML design, introduced java.util.logging, BrokenNullCheck, NonThreadSafeSingleton, DefaultPackage rule, UselessOverridingMethod, ProperLogger, AvoidPrintStackTrace, SimplifyConditional
  • Ryan Gustafson - PMD core, assists with Eclipse plugin
  • Torsten Kleiber - JDeveloper plugin
  • Romain Pelisse - Various bugfix patches, restructured CPD tokenizers, patch to remove redundant rule, added Fortran tokenizer, DoNotExtendJavaLangError, JspEncoding, MDBAndSessionBeanNamingConvention, RemoteSessionInterfaceNamingConvention, LocalInterfaceSessionNamingConvention, LocalHomeNamingConvention, RemoteInterfaceNamingConvention, AvoidFinalLocalVariable, ClassWithOnlyPrivateConstructorsShouldBeFinal, TooManyStaticImports, DoNotCallSystemExit, StaticEJBFieldShouldBeFinal

Committers emeritus

  • Gunnlaugur Thor Briem - NetBeans plugin, Maven build script fixes, bug report on JavaCC parser's use of java.lang.Error
  • Tom Burke - Eclipse plugin
  • Alex Chaffee - various bugfixes and features
  • Siegfried Goeschl - original Maven plugin, various bugfixes and features
  • Don Leckie - The PMD GUI
  • Rich Kilmer - logo design
  • Paul Kendall - various bugfixes and features
  • Colin Wilson-Salt - NetBeans plugin team
  • Brant Gurganus - JCreator integration, Swing GUI work

Significant contributors

  • Pieter Vanraemdonck - JSP grammar/integration/documentation, DontNestJsfInJstlIteration, NoLongScripts, NoScriptlets, NoInlineStyleInformation, NoClassAttribute, NoJspForward
  • Raik Schroeder - data flow analysis layer, YAHTMLRenderer
  • Steve Hawkins - rewrite of CPD based on Karp-Rabin string matching
  • Daniel Sheppard - XPath engine integration concept and implementation, advice on Jaxen extension function naming
  • Brian Ewins - complete rewrite of CPD based on the Burrows-Wheeler transform, fixed DocumentNavigator bug

Contributors

  • Andy Throgmorton - New XPath getCommentOn function, new rule DontCallThreadRun, fix for rule UseArraysAsList
  • Nicolas Dordet - Fixed an issue on CloseResource
  • Juan Jesús García de Soria - Rework CPD algorithm
  • Sergey Pariev - Fixed an ugly ArrayIndexOutOfBoundsException in CPD for Ruby
  • Chris Heister - Reported and noted proper fix for bug in IDEAJ renderer operations
  • Ralf Wagner - Reported bug in UselessOperationOnImmutable, reported and noted proper fix for broken XSLT
  • Caroline Rioux - Reported bug in ImmutableField
  • Miroslav Šulc - Reported bug in CloneMethodMustImplementCloneable
  • Thomas Steininger - Noticed redundant rule
  • Thomas Leplus - Contributed new rules LogicInversion, ExtendsObject, UselessParentheses, EmptyInitializer, EmptyStatementBlock, CheckSkipResult.Rewrote UselessStringValueOf, nice patch for ClassCastExceptionWithToArray
  • Paul Sundling - A nice documentation patch for ruleset links
  • Matt Koch - Added more detail to PMD XML report
  • Richard Hands - Fixed CPD symlink confusion
  • Oleg Skrypnyuk - reported a Java 1.5 grammar bug
  • Jeff Campbell - Found bug and suggested fix for problem with XMLRenderer and SuppressWarnings("PMD") annotations
  • Kris Jurka - CPD patch to accept ".C" as a filename extension for C/C++ files
  • Florian Deissenboeck - reported several Java 1.5 grammar bugs
  • Maarten ter Huurne - BooleanGetMethodName, AddEmptyString, Noticed misspelling in AvoidArrayLoops rule
  • Lukas Theussl - Patch to bring Maven configuration files up to date
  • Jason Bennett - Rewrite of annotation-based warning suppression to allow for rule-specific suppression, noticed useless line in XSLT scripts, fix for UnnecessaryLocalBeforeReturn, wrote NPathComplexity rule, patches to improve CyclomaticComplexity rule, Implemented: UseCollectionIsEmpty, NcssTypeCount, NcssMethodCount, NcssConstructor, Patch to detect comparison with new Object
  • Brent Fisher - Fixed report backslash bug, SummaryHTML report improvements
  • Larry Brigman - Reported symlink bug in CPD
  • Harald Rohan - Reported bug in CPD GUI
  • Stephan Classens - Patch for file closing bug, noted missing varargs setting in ASTFormalParameter
  • piair - Implemented StringBufferInstantiationWithChar, AvoidUsingOctalValues
  • Christopher Eagan - Reported bug in VariableNamingConventions
  • Fabio Insaccanebbia - Improvement for UseArraysAsList, UnusedNullCheckInEquals, MisplacedNullCheck, UselessOperationOnImmutable, AvoidArrayLoops, UseArraysAsList, AvoidConstantsInterface, AvoidDecimalLiteralsInBigDecimalConstructor, ClassCastExceptionWithToArray, BigIntegerInstantiation
  • Stefan Seidel - Reported Java 1.5 parsing bug
  • Aaron Optimizer Digulla - Tweaks to pmd.bat
  • Peter Van de Voorde - Rewrote the 'create rule XML' functionality in the designer utility
  • Josh Devins - Reported bug with annotation parsing
  • Alan Berg - Reported bug in Ant task
  • George Thomas - Wrote AvoidRethrowingException rule, new AvoidLosingExceptionInformation rule
  • Robert Simmons - Reported bug in optimizations package along with suggestions for fix
  • Brian Remedios - display cleanup of CPD GUI, code cleanup of StringUtil and various rules, cleanup of rule designer, code cleanup of net.sourceforge.pmd.ant.Formatter.java, code improvements to Eclipse plugin, created AbstractPoorMethodCall and refactored UseIndexOfChar
  • Max Tardiveau - A nice XML to HTML stylesheet for CPD.
  • Ernst Reissner - reported IdempotentOperations bug, reported CloneThrowsCloneNotSupportedException bug, reported Java 1.5 parsing bug, suggested InstantiationToGetClass, bug reports for UnusedPrivateField/CloseConnectionRule/ConstructorCallsOverridableMethodRule, and bug report and documentation suggestions for UseSingletonRule
  • Maarten Coene - bug report for UnnecessaryConversionTemporary
  • Jorn Stampehl - Reported bug in UnusedModifier, reported and fixed bugs in JUnitTestsShouldContainAsserts/CyclomaticComplexity/TooManyFields, noticed redundancy of ExplicitCallToFinalize, reported bug in AvoidCallingFinalize, reported bug in JUnitAssertionsShouldIncludeMessage, reported bug in bug report on JUnitTestsShouldContainAsserts
  • Ulrich Kriegel - reported Ant task documentation bug
  • Jarkko Hietaniemin - rewrote most of cpd.sh, many C grammar improvements, several CPD documentation suggestions, noted missing CPD scripts in binary release
  • Adam Zell - Reported bug in UselessOverridingMethod
  • Daniel Serodio - Reported bug in ExceptionSignatureDeclaration
  • John Redford - Reported bug in AvoidProtectedFieldInFinalClass
  • D'Arcy Smith - Reported bug in UncommentedEmptyConstructor, reported missing RuleViolation methods
  • Paul Field - Fixed bug in MissingBreakInSwitch, reported a bug in DontImportJavaLang
  • Attila Korompai - A nice patch to add messages to the NOPMD feature
  • Levent Gurses - Suggested JSP support for the copy/paste detector
  • Neil Cafferkey - Reported a typo in AssignmentInOperand
  • Noel Grandin - bug report for ImmutableField, bug report for MissingStaticMethodInNonInstantiatableClass, bug report for MissingBreakInSwitch, EqualsNull rule, bug report for IfElseStmtsMustUseBracesRule
  • Olaf Heimburger - wrote the UseProperClassLoader rule, code changes to get JDeveloper plugin working under JDev 10.1.3 EA, reported a possible NPE in ReportTree
  • Mohammad Farooq - Reported new JavaNCSS URL
  • Jeff Jensen - Reported missing XML schema references in documentation, wrote new XML schema, reported missing schema refs in example rulesets, suggested posting XML schema on PMD site, discussion of 'comments in catch block' feature, suggested description attribute in property element
  • Christopher Stach - bug report for VariableNamingConventions, bug report for CallSuperInConstructor, many bug reports for rules that didn't handle Java 1.5 constructs
  • Matthew Harrah - noticed missing element in UseCorrectExceptionLogging definition, script bug report
  • Mike Kaufman - Reported abug in UnnecessaryCaseChange
  • Elliotte Rusty Harold - reported bug in UseAssertSameInsteadOfAssertTrue, suggested creating a new ruleset containing rules in each release, UncommentedEmptyConstructor suggestions, noted missed case for UnusedFormalParameter, documentation suggestions, reported mistake in UnnecessaryLocalBeforeReturn message, bug report 1371757 for misleading AvoidSynchronizedAtMethodLevel example, bug report 1293277 for duplicated rule messages, bug report for ConstructorCallsOverridableMethod, suggestion for improving command line interface, misspelling report, suggestion for improving Designer startup script, "how to make a ruleset" documentation suggestions, noticed outdated Xerces jars, script renaming suggestions, UseLocaleWithCaseConversions rule suggestion
  • David Karr - reported stale XPath documentation
  • Dawid Weiss - Reported bug in UnusedPrivateMethod
  • Shao Lo - Reported bug in CPD
  • Mathieu Champlon - Added language support to the CPD Ant task
  • Uroshnor - Reported bug in UseNotifyAllInsteadOfNotify
  • Jan Koops - Noted missing data in MemberValuePair nodes, bug report for JBuilder plugin
  • Will Sargent - Implemented AvoidThreadGroup, AvoidThrowingCertainExceptionTypesRule, AvoidCatchingNPERule, ExceptionAsFlowControlRule, URL updates for 'Similar projects' page
  • Benoit Xhenseval - noted Maven plugin bug (http://jira.codehaus.org/browse/MPPMD-24), bug report for UnusedPrivateMethod, suggestion to add elapsed time to XML report, bug report for ImmutableField, many bug reports (with good failure cases!), Ant task patch and bug report, XSLT patch, suggestion for improving XML report
  • Barak Naveh - Reported and fixed bug in CallSuperInConstructor
  • Bhatia Saurabh - Reported a grammar bug, reported a bug in UseStringBufferLength
  • Chris Erskine - found bad link, documentation suggestions
  • mhilpert - Reported bugs in UseIndexOfChar and LoggerIsNotStaticFinal
  • David Corley - Priority filtering XSLT, reported release packaging problem, implemented nifty Javascript folding for XML report, demo is here, suggestion for min priority on the command line
  • Jon Doh - Reported parser bug
  • Brian R - suggestions for improving UseIndexOfChar, documentation suggestion
  • Didier Duquennoy - bug reports for InefficientStringBuffering/ConsecutiveLiteralAppends/AppendCharacterWithChar, several bug reports for InefficientStringBuffering, bug report for ImmutableField, suggestions for improving Benchmark utility, bug report for InefficientStringBuffering, bug report for AvoidConcateningNonLiteralsInStringBuffer, reported a missed hit for EqualsNull, bug report for MissingStaticMethodInNonInstantiatableClass, pmd-netbeans feedback
  • Paul Smith - patch to fix Ant task 'minimum priority' attribute
  • Erik Thauvin - reported IDEA integration problem
  • John Kenny - reported bug in ConsecutiveLiteralAppends
  • Tom Judge - patch for fix to C/C++ multiline literal support for CPD, patch for including .cc files in C++ CPD checks, patch for JDK compatibility problems
  • Sean Mountcastle - reported documentation bug
  • Greg Broderick - provided patch for 'minimum priority' support
  • George Sexton - Bug report 1379701 for CompareObjectsWithEquals, suggested new rule for Additional String Concatenation Warnings in StringBuffer.
  • Johan Stuyts - improvements to UncommentedEmptyConstructor, nice patch for UncommentedEmptyConstructor and UncommentedEmptyMethod, patch to allow empty catch blocks with comments in them, patch to clean up build environment
  • Bruce Kelly - bug report 1378358 for StringInstantiation, bug report 1376756 for UselessOverridingMethod, bug report 1376760 for InefficientStringBuffering
  • Isaac Babsky - tweak for pmd.bat
  • Hendrik Maryns - reported bug 1375290 for SuppressWarnings facility
  • Wim Deblauwe - suggested UseAssertNullInsteadOfAssertTrue, bug report 1373510 for UseAssertSameInsteadOfAssertTrue, suggested putting property names/values in generated docs, UselessOverridingMethod, reported bug in JUnitTestsShouldContainAsserts, front page and "how to make a ruleset" patches, noted problems with web site rule index, bug report for JUnitTestsShouldContainAsserts, Clover license coordination and implementation, UseCorrectExceptionLogging, coordinated and coded a much nicer asXML() implementation, suggested cleanup of UnusedFormalParameter, Javadoc patch, SystemPrintln bug report, helped get Ant task and CLI squared away with Java 1.5 params, Java 1.5-specific bug reports, suggested improvements for ExceptionSignatureDeclaration
  • Sean Montgomery - bug report 1371980 for InefficientStringBuffering
  • Jean-Marc Vanel - suggested enhancements to the PMD scoreboard
  • Andriy Rozeluk - suggested UseStringBufferLength, bug report 1306180 for AvoidConcatenatingNonLiteralsInStringBuffer, reported bug 1293157 for UnusedPrivateMethod, suggested UnnecessaryCaseChange, bug report for SimplifyConditional, suggested UnnecessaryLocalBeforeReturn, suggestions for improving BooleanInstantiation, UnnecessaryReturn, AvoidDuplicateLiterals RFEs and bug reports, various other RFEs and thoughtful discussions as well
  • Bruno Juillet - suggested reporting suppressed warnings, bug report for missing package/class/method names, patch for Ant task's excludeMarker attribute, bug report on ruleset overrides
  • Derek Hofmann - suggestion for adding --skip-duplicate-files option for CPD, bug report for CPD skipping header files when in C/C++ mode
  • Mark Holczhammer - bug report for InefficientStringBuffering
  • Raja Rajan - 2 bug reports for CompareObjectswithEquals
  • Jeff Chamblee - suggested better message for UnnecessaryCaseChange, bug report for CompareObjectsWithEquals
  • Dave Brosius - suggested MisleadingVariableName rule, a couple of nice patches to clean up some string handling inefficiencies, non-static class usages, and unclosed streams/readers - found with Findbugs, I daresay :-)
  • Chris Grindstaff - fixed SWTException when Eclipse plugin is run on a file with syntax error
  • Eduard Naum - fixed JDK 1.3 runtime problems in Eclipse plugin
  • Jacques Lebourgeois - fix for UTF8 characters in Eclipse plugin
  • dvholten - suggestions for improving OverrideBothEqualsAndHashcode, formatting suggestions for HTML report, test cases for ConstructorCallsOverridableMethod, reported several NullAssignment bugs
  • Brian Duff - helped get Oracle JDeveloper plugin working
  • Sivakumar Mambakkam - bug report 1314086 for missing name in SimpleRuleSetNameMapper
  • Rodrigo Ruiz - bug report 1312723 for FieldDeclaration nodes inside interfaces, bug report 1312754 for pmd.bat option handling, bug report 1312720 (and code fix!) for DefaultPackage, bug report 1309235 for TooManyFields
  • Lori Olson - JBuilder plugin suggestions and prerelease tests, found copy/paste bug in rule descriptions
  • Thomas Dudziak - bug report 1304739 for StringInstantiation
  • Pieter Bloemendaal - reported JDK 1.3 parsing bug 1292609, command line docs bug report, bug report for UnusedPrivateMethod, found typo in ArrayIsStoredDirectly, bug report for AvoidReassigningParametersRule
  • shawn2005 - documentation bug report
  • Andrew Taylor - bug report for StringInstantiation
  • S. David Pullara - bug report for AvoidConcateningNonLiteralsInStringBuffer, bug report for ImmutableField
  • Maarten Bodewes - bug report for ImmutableField
  • Peter Frandsen - PackageCase rule, NoPackage rule
  • Noureddine Bekrar - French translation of some PMD documentation
  • Martin Jost - bug report for JDeveloper plugin
  • Guillaume Boudreau - patches to fix problems with CPD's FileFinder and NTFS and SCCS
  • Sylvain Veyrie - bug report for MethodReturnsInternalArray
  • Randy Ray - bug report for ArrayIsStoredDirectly
  • Klaus - Suggestion for improving UseSingleton
  • Nicolai Czempin - Bug report for UnnecessaryParentheses, various rule suggestions, additional PMD backronyms
  • Kevin Routley - reported Ant task dependency problem, reported problems with RuleSetFactory unit tests
  • Dennis Klemann - noted that errors were missing from text report, reported Java 1.5 parsing bug with ExceptionSignatureDeclaration, reported fix for pmd.bat problem
  • Tor Norbye - Suggested CompareObjectsWithEquals
  • Thomas Skariah - bug reports for MethodArgumentCouldBeFinal and AvoidReassigningParameters
  • Tom Parker - bug report for MethodReturnsInternalArray, found missed case in NullAssignment, suggested addition to UnnecessaryBooleanAssertion, suggested splitting up AvoidThrowingCertainExceptionTypes, AvoidInstantiatingObjectsInLoops bug report, AtLeastOneConstructor bug report
  • Ian Flanigan - reported CPD JNLP breakage
  • Glen Cordrey - Reported bug involved JavaCC string handling
  • Oto 'tapik' Buchta - Patched XMLRenderer for UTF8 support
  • Arent-Jan Banck - Reported bug with Java 1.5 annotation handling
  • Fred Hartman - Reported exact location of bug in TooManyFields, fixed bug in UnnecessaryBooleanAssertion
  • Andreas Ehn - Reported bug with Java 1.5 generics parsing
  • Eric Olander - SingularField, SimplifyConditional fix, UseStringBufferForStringAppends, CollapsibleIfStatements, AvoidInstanceofChecksInCatchClause, AssignmentToNonFinalStatic rule, nice patch for DFAPanel cleanup, AvoidProtectedFieldInFinalClass, ImmutableFieldRule, noticed missing image in Postfix nodes
  • Tomas Gustavsson - reported pmd-web breakage
  • Payal Subhash - Tweaks to CSVRenderer
  • Christophe Mourette - Reported JDK 1.3 problem with XMLRenderer
  • Alex Givant - caught documentation bug
  • Luke Francl - suggested UnnecessaryParentheses rule, numerous high quality feature suggestions and bug reports
  • David Hovemeyer - reported missing labelled stmt images, a nice patch to let PMD process code in jar/zip files
  • Peter 'Bruno' Kofler - reported bug #1146116 for JUnitTestsShouldIncludeAssert
  • Zev Blut - nice patch to add Ruby support to CPD
  • Christopher Judd - a nice patch to the XSLT that adds a summary
  • John Meagher - suggested the rule 'MissingSerialVersionUID' and provided the implementation for it
  • John Austin - patch to fix mispeling in Eclipse plugin message
  • Paddy Fagan - reported bug in StatisticalRule
  • Leszek Migdal - reported documentation mistake for Eclipse plugin
  • Hakan Civelek - an order-of-magnitude optimization to the SystemOutPrintln rule
  • John Heintz - Added "any language" support to CPD.
  • Harald Gurres - cleaned up the symbol table code with a very nice patch
  • Matthias Kerkhoff - CPD suggestions, several bug reports
  • Chris Riesbeck - identified some dead code in RuleSet
  • Lars Gregori - reported a bug in the Ant task docs
  • Todd Wright - reported bug in EmptyStatementNotInLoop, XPath port of AtLeastOneConstructorRule, ConfusingTernaryExpression rule, reported missing ASTUnaryExpressionNotPlusMinus nodes
  • Conrad Roche - UnusedModifier bug report, other bug reports
  • Mike Thome - NOPMD implementation concept, BadComparisonRule suggestion
  • Ken Foskey - C++ parser bug report, cpd.sh
  • ehowe - a nice patch to include rule priority in the XML report
  • aryanto - reported a broken reference in the 'favorites' ruleset.
  • Archimedes Trajano - suggested SimpleDateFormatNeedsLocale
  • Joerg Kurt Wegner - bug report for UnusedLocalVariable
  • Bruno - Reported bug with TooManyFields, SuspiciousEqualsMethodName
  • Philippe Couton - bug report for ExceptionAsFlowControl, OverrideBothEqualsAndHashcodeRule bug report, UseSingletonRule improvements, JUnitStaticSuiteRule improvements
  • Paul Rowe - suggestion for improving MethodWithSameNameAsEnclosingClass, bug reports for SimplifyBooleanExpressions and UnusedLocalVariable
  • Enno Derksen - enhancements to VariableNamingConventionsRule
  • Michael Haggerty - bug reports for FinalizeDoesNotCallSuperFinalize and UnusedModifier
  • Phil Shaw - documentation suggestions
  • Sreenivasa Viswanadha - reminded me to use BufferedInputStreams, grammar cleanup for Ctrl-Z problem
  • Austin Moore - Integration with Omnicore's CodeGuide IDE
  • Matt Inger - CloneMethodMustImplementCloneable, CloneThrowsCloneNotSupportedException
  • Morgan Schweers - Javascript highlighter for the PMD scoreboard
  • Brandon Franklin - bug report for BeanMembersShouldSerializeRule, many PMD scoreboard ideas
  • Bertrand Mollinier Toublet - Bug report which led to platform character set encoding enhancement
  • Choi Ki Soo - Found bug in XMLRenderer
  • Gero Wedemann - Found bug in RuleSetFactory XPath message variable substitution
  • Adrian Papari - Wrote the PapariTextRenderer
  • Curt Cox - some additions to the 'Similar Projects' page
  • Michael Griffel - bug fix for XMLRenderer
  • Doug Tillman - correction to finalizers.xml examples
  • Luis Alberto Domínguez Ruiz - bug report for IfElseStmtsMustUseBracesRule
  • Chad Loder - SuspiciousOctalEscapeRule, EmptyStatementNotInLoop, SuspiciousHashcodeMethodName, NonCaseLabelInSwitchStatement, DefaultLabelNotLastInSwitchStmt, NonStaticInitializer, ExplicitCallToFinalize, MethodWithSameNameAsEnclosingClassRuleTest, FinalizeDoesNotCallSuperFinalize, FinalizeOverloaded, FinalizeOnlyCallsSuperFinalize, UnconditionalIfStatement, AvoidDollarSigns, EmptyStaticInitializer, EmptyFinalizerMethod rule, DontImportSun rule, improvements to ASTBooleanLiteral
  • Maik Schreiber - AccessNode bug report, other bug reports
  • Lokesh Gupta - improvements to the AST viewer
  • Jesse Glick - improvements to VariableNamingConventionsRule, patch for UnusedModifierRule, bug fix for VariableNameDeclarations rule, an excellent discussion on the UnnecessaryConstructorRule
  • Nicolas Liochon - CloneShouldCallSuperCloneRule implementation
  • Slava Pestov - Suggestions for jEdit plugin enhancements.
  • Olivier Mengué - Diagnosed and patched XML report character encoding problems
  • Hariolf Häfele - PMD-JDeveloper plugin bug reports
  • Vladimir Bossicard - suggested AbstractNamingRule, test package organization suggestions, VBHTMLRenderer, numerous feature requests and bug reports, several rule suggestions derived from JUnit-Addons, evangelism :-)
  • Ken Foskey - noticed bad link
  • Stephan Janssen - promoted PMD for JJGuidelines
  • Ron Sidi - bug reports
  • David Koontz - suggestions for tweaking PMD command line options
  • Jeff Epstein - TextPad integration and tests
  • Gabe Johnson - CloseConnectionRule
  • Roelof Vuurboom - posted report of QStudio analysis of PMD
  • Jeff Anderson - node finding utility code
  • Boris Gruschko - regression test suites, nifty AST/XPath viewer
  • Trevor Harmon - rewrote XSLT script
  • Vadim Nasardinov - xdocs cleanup, run.sh cleanup
  • Sigiswald Madou - bug report
  • Dan Tullis - bug report
  • George Menhorn - CPD bug reports and suggestions
  • Paul Roebuck - Ant build improvement, several bug reports
  • Jon A. Maxwell - Bug report
  • Erik Lee - Bug report
  • Joerg K. Wegner - PMD scoreboard suggestions
  • Chris Webster - fix (and test) for UnnecessaryConstructorRule, BooleanInstantiation rule
  • Colin Simmonds - detailed bug reports
  • Trond Andersen - AvoidCatchingThrowable, ExceptionSignatureDeclaration, ExceptionTypeChecking
  • Bernd Jansen - grammar modification
  • Jarle Naess - bug report
  • Jeff Anderson - VariableNamingConventionsRule, MethodNamingConventionsRule, ClassNamingConventionsRule
  • Frank van Puffelen - documentation suggestions
  • mcclain looney - patch for CPD GUI, bug reports
  • Ralf Hauser - Various documentation suggestions, cygwin-run.sh
  • Pablo Casado - Bug report for UseSingletonRule
  • Frank Hardisty - BeanMembersShouldSerializeRule
  • Randall Schulz - bug report for LooseCouplingRule
  • Wim Bervoets - bug report for the PMD Ant task
  • Niels Peter Strandberg - various tweaks to the PMD Swing UI
  • Ian Shef - documentation updates, bug reports on the Gel IDE plugin
  • Astro Jetson Jr - a tweak for the ShortVariableNameRule
  • Paul King - a complete rewrite of the Gel plugin
  • Gael Marziou - "exclude" rule feature request, bug reports
  • Philippe T'Seyen - refactoring and cleanup of the CPD Ant task, an XML renderer (with unit tests!) for CPD
  • Michael Montuori - bug reports on the Gel IDE plugin
  • Michael Hosier - bug reports on the Gel IDE plugin
  • Richard Jenson - CPD on Win32 troubleshooting
  • Daniel Bruguier - CPD on Win32 troubleshooting
  • Mario Claerhout - CPD optimizations and suggestions
  • Sameer Nanda - CPD Ant task bug report
  • Nanne Baars - grammar suggestions, rule suggestions
  • Adam Nemeth - bug fixes for UnnecessaryConstructorRule
  • Andrew Glover - the CPDTask, ExcessivePublicCountRule, CouplingBetweenObjectsRule, ExcessiveImportsRule, documentation tweaks
  • Robert Leland - bug report
  • Carl Gilbert - AccessorClassGenerationRule, DoubleCheckedLockingRule, ConstructorCallsOverridableMethodRule, bug reports, feature requests, and documentation improvements
  • Dave Fuller - improved resource loading code (packaged in a nice diff, too!)
  • David Whitmore - parser bug report
  • David Campbell - detailed bugs reports, Ant task refactoring, documentation tweaks
  • Michael Sutherland - bug report in IfStmtMustUseBracesRule
  • Egon Willighagen - PMD scoreboard suggestion
  • Adam Nemeth - bug report on missing final attribute for local variable declarations
  • Frederic Harper - bug report and subsequent troubleshooting
  • Mats Henricson - an XSLT script and several bug reports
  • Martin Cooper - feature suggestions
  • Bruce Mayhew - feedback on the jEdit plugin
  • Juergen Ebert - feature suggestions and pmd-netbeans feedback
  • J.D. Fagan - feature suggestions
  • William McArthur - ForLoopShouldBeWhileLoop rule
  • Ales Bukovsky - pmd-netbeans feedback
  • Stefan Bodewig - bug report
  • Sean Sullivan - rule suggestions
  • Dale Vissar - rule suggestions
  • Alina Copeland - PMD scoreboard formulas, pmd-dcpd optimizations
  • Vincent Massol - bug reports, design suggestions, feature suggestions, Maven guidance
  • Peter Donald - design suggestions
  • Liam Holohan - bug reports
  • Ralph Schaer - bug reports and verification
  • Damian O'Neill - Ant task patches
  • Sebastian Raffel - Great job on the Eclipse PMD perspective, new views and dataflow analysis support
  • Ebu - Eclipse smoothed icons
  • Jacques Lebourgeois - Eclipse fix malformed UTF-8 characters
  • Chris Grindstaff - Eclipse fix SWTException when PMD is run on a file with syntax error
  • jmichelberger - wrote Byte/Short/Long Instantiation migration rules
  • Edwin Chan - Support for -auxclasspath for use with Type Resolution
  • Jared Bunting - Patch to add ASTAnnotationMethodDeclaration to Java AST
  • Lucian Ciufudean - RedundantFieldInitializerRule
  • Andreas Dangel - GodClass and LawOfDemeter rules, several bugfixes and cleanup
  • Riku Nykanen - patch improving TooManyMethods rule
  • Tammo van Lessen - new rule GuardDebugLogging for Jakarta Commons Logging ruleset.
  • Steven Christou - patch improving DoNotCallSystemExit rule
  • Cd-Man - patch to improve CPD performance
  • Suresh - new rule DontUseFloatTypeForLoopIndices
  • Dinesh Bolkensteyn and SonarSource - Java 7 grammar support
  • Tom Wheeler - contribute a launch script for CPD GUI
  • Remi Delmas - change CPD CLI to return a non null value when code duplication is found.
  • Victor Bucutea - Improved JSP parser to be less strict with not valid XML documents (like HTML).
  • Prabhjot Singh - Fixed bug 3484404: Invalid NPath calculation in return statement.
  • Roman - Fixed bug 3546093: Type resolution very slow for big project.
  • Florian Bauer - Add C# support for CPD.
  • Matthew Short - Support in CPD for IgnoreAnnotations and SuppressWarnings("CPD-START").
  • Simon Gijsen - contributing a PMD logo with a modern look.
  • Yiannis Paschalidis - Fixed bug #968 Issues with JUnit4 @Test annotation with expected exception
  • Jaroslav Snajberk - Make the comment required rule working.
  • Mat Booth - #1109 Patch to build with Javacc 5.0
  • Stuart Turton - for PLSQL support. See also pldoc
  • Andrey Utis - for adding Apache Velocity as a new language and writing up a howto for adding new languages JavaCC.
  • Alan Hohn - for adding Standard and modified cyclomatic complexity rules
  • Jan van Nunen - for adding CPD support for Matlab, Objective-C, Python, Scala and various bug fixes
  • Juan Martín Sotuyo Dodero - for many bugfixes/pull requests improving Java grammar and performance

Organizations

MicroDoc for sponsoring PMD development. MicroDoc is a software business serving an international customer base. Since 1991 MicroDoc has grown into a technology oriented software engineering and professional services company. Our focus on complex software technology and software infrastructure made us a well respected partner for large corporations and even for other software businesses.
AE for the JSP integration and especially for writing the JSP grammar.
DARPA for funding the Ultra*Log and Cougaar effort which spawned PMD.
SourceForge for providing hosting services for PMD.
RefactorIT for letting their software be used free-of-charge on PMD code (OpenSource Community License)
QA-Systems for sending in some handy utilities for PMD and shipping PMD inside their QStudio product
Vanward Technologies for using PMD inside their Convergence product
Cenqua for giving us a free Clover license and doing a nice FishEye run.
YourKit is kindly supporting open source projects with its full-featured Java Profiler. YourKit, LLC is creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at YourKit's leading software products: YourKit Java Profiler and YourKit .NET Profiler.
Bijzonder Bezig for giving the PMD logo a modern look.