@@ -65,13 +65,10 @@ private Finding transformErrorType(FileType fileType, ErrorType errorType) {
6565
6666 Finding finding = new Finding ();
6767 finding .setDescription (String .format ("%s: %s" , getName (), errorType .getMessage ()));
68+ finding .setFingerprint (createFingerprint (fileType , errorType ));
6869 finding .setSeverity (getSeverity (errorType .getSeverity ()));
6970 finding .setPath (getRepositoryRelativePath (fileType ));
7071 finding .setLine (getLineNumber (errorType ));
71-
72- // Checkstyle doesn't provide any fingerprints, so we create our own one
73- autoGenerateFingerprint (finding );
74-
7572 return finding ;
7673
7774 }
@@ -94,18 +91,32 @@ private Severity getSeverity(String severity) {
9491 }
9592 }
9693
97- private void autoGenerateFingerprint ( Finding finding ) {
94+ private String createFingerprint ( FileType fileType , ErrorType errorType ) {
9895
9996 try {
10097
101- String key = String .format ("%s:%s:%d" ,
102- finding .getDescription (), finding .getPath (), finding .getLine ());
98+ /*
99+ * The fingerprint is created from:
100+ * - file path
101+ * - severity
102+ * - message text
103+ * - column index (which will most likely not change for a finding)
104+ *
105+ * We do NOT use:
106+ * - line number (will change if code is added/removed above or below the finding)
107+ */
108+ String key = String .format ("%s:%s:%s:%s" ,
109+ getRepositoryRelativePath (fileType ),
110+ errorType .getSeverity (),
111+ errorType .getMessage (),
112+ errorType .getColumn ()
113+ );
103114
104115 MessageDigest sha1Digest = MessageDigest .getInstance ("SHA256" );
105116 sha1Digest .update (key .getBytes (StandardCharsets .UTF_8 ));
106117 byte [] digest = sha1Digest .digest ();
107118
108- finding . setFingerprint ( DatatypeConverter .printHexBinary (digest ).toLowerCase (Locale .ROOT ) );
119+ return DatatypeConverter .printHexBinary (digest ).toLowerCase (Locale .ROOT );
109120
110121 } catch (NoSuchAlgorithmException e ) {
111122 throw new RuntimeException (e );
0 commit comments