diff --git a/java/ql/consistency-queries/diags.ql b/java/ql/consistency-queries/diags.ql index 799d089e471..6d96dd2eb96 100644 --- a/java/ql/consistency-queries/diags.ql +++ b/java/ql/consistency-queries/diags.ql @@ -28,7 +28,8 @@ string diagnosticMessage(Diagnostic d) { // something is fixed. query predicate unusedDiagnosticException(DiagnosticException de) { not exists(de.getException()) } -query predicate unexpectedDiagnostic(Diagnostic d, string s) { +query predicate unexpectedDiagnostic(Compilation c, int f, int i, Diagnostic d, string s) { + d.getCompilationInfo(c, f, i) and s = diagnosticMessage(d) and not d = any(DiagnosticException de).getException() } diff --git a/java/ql/lib/change-notes/2023-07-14-getCompilationInfo.md b/java/ql/lib/change-notes/2023-07-14-getCompilationInfo.md new file mode 100644 index 00000000000..bb86f479b3d --- /dev/null +++ b/java/ql/lib/change-notes/2023-07-14-getCompilationInfo.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* A `Diagnostic.getCompilationInfo()` predicate has been added. diff --git a/java/ql/lib/semmle/code/java/Diagnostics.qll b/java/ql/lib/semmle/code/java/Diagnostics.qll index e6e16b4e07c..0134b32c5c0 100644 --- a/java/ql/lib/semmle/code/java/Diagnostics.qll +++ b/java/ql/lib/semmle/code/java/Diagnostics.qll @@ -9,6 +9,11 @@ class Diagnostic extends @diagnostic { /** Gets the compilation that generated this diagnostic. */ Compilation getCompilation() { diagnostic_for(this, result, _, _) } + /** Gets the compilation information for this diagnostic. */ + predicate getCompilationInfo(Compilation c, int fileNumber, int diagnosticNumber) { + diagnostic_for(this, c, fileNumber, diagnosticNumber) + } + /** * Gets the program that generated this diagnostic. */