Class TestDiagnosticUtils
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Patternstatic final Stringstatic final Patternstatic final Stringstatic final PatternHow the diagnostics appear in Java source files.static final StringHow the diagnostics appear in Java source files.static final Patternstatic final Stringstatic final Patternstatic final Stringstatic final Patternstatic final String -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic StringcontinuationPart(String originalLine) Returns the continuation part.diagnosticsToString(List<TestDiagnostic> diagnostics) Converts the given diagnostics to strings (as they would appear in a source file individually).formatJavaxToolString(String original, boolean noMsgText) Given a javax diagnostic, return a pair of (trimmed, filename), where "trimmed" is the first line of the message, without the leading filename.static TestDiagnosticLinefromDiagnosticFileLine(String diagnosticLine) Convert a line in a DiagnosticFile to a TestDiagnosticLine.static TestDiagnosticfromDiagnosticFileString(String stringFromDiagnosticFile) Instantiate the diagnostic based on a string that would appear in diagnostic files (i.e.static TestDiagnosticfromJavaFileComment(String filename, long lineNumber, String stringFromJavaFile) Instantiate the diagnostic from a string that would appear in a Java file, e.g.: "error: (message)"static TestDiagnosticLinefromJavaSourceLine(String filename, String line, long lineNumber) Convert a line in a Java source file to a TestDiagnosticLine.static Set<TestDiagnostic> fromJavaxDiagnosticList(List<Diagnostic<? extends JavaFileObject>> javaxDiagnostics, boolean noMsgText) static TestDiagnosticfromJavaxToolsDiagnostic(String diagnosticString, boolean noMsgText) Instantiate a diagnostic from output produced by the Java compiler.static TestDiagnosticfromJSpecifyFileComment(String filename, long lineNumber, String stringFromJavaFile) Instantiate the diagnostic from a JSpecify string that would appear in a Java file, e.g.: "jspecify_some_category".protected static TestDiagnosticfromPatternMatching(Pattern diagnosticPattern, Pattern warningPattern, String filename, @Nullable Long lineNumber, String diagnosticString) Instantiate the diagnostic via pattern-matching against patterns.static StringhandleEndOfLineJavaDiagnostic(String originalLine) Convert an end-of-line diagnostic message to a beginning-of-line one.static booleanisJavaDiagnosticLineContinuation(@Nullable String originalLine) Return true if this line in a Java file continues an expected diagnostic.static booleanisJavaDiagnosticLineStart(String originalLine) Returns true if this line in a Java file indicates an expected diagnostic that might be continued on the next line.static voidremoveDiagnosticsOfKind(DiagnosticKind kind, List<TestDiagnostic> expectedDiagnostics)
-
Field Details
-
DIAGNOSTIC_IN_JAVA_REGEX
How the diagnostics appear in Java source files.- See Also:
-
DIAGNOSTIC_IN_JAVA_PATTERN
How the diagnostics appear in Java source files. -
DIAGNOSTIC_WARNING_IN_JAVA_REGEX
- See Also:
-
DIAGNOSTIC_WARNING_IN_JAVA_PATTERN
-
DIAGNOSTIC_REGEX
- See Also:
-
DIAGNOSTIC_PATTERN
-
DIAGNOSTIC_WARNING_REGEX
- See Also:
-
DIAGNOSTIC_WARNING_PATTERN
-
DIAGNOSTIC_FILE_REGEX
- See Also:
-
DIAGNOSTIC_FILE_PATTERN
-
DIAGNOSTIC_FILE_WARNING_REGEX
- See Also:
-
DIAGNOSTIC_FILE_WARNING_PATTERN
-
-
Constructor Details
-
TestDiagnosticUtils
public TestDiagnosticUtils()
-
-
Method Details
-
fromDiagnosticFileString
Instantiate the diagnostic based on a string that would appear in diagnostic files (i.e. files that only contain line after line of expected diagnostics).- Parameters:
stringFromDiagnosticFile- a single diagnostic string to parse- Returns:
- a new TestDiagnostic
-
fromJavaFileComment
public static TestDiagnostic fromJavaFileComment(String filename, long lineNumber, String stringFromJavaFile) Instantiate the diagnostic from a string that would appear in a Java file, e.g.: "error: (message)"- Parameters:
filename- the file containing the diagnostic (and the error)lineNumber- the line number of the line immediately below the diagnostic comment in the Java filestringFromJavaFile- the string containing the diagnostic- Returns:
- a new TestDiagnostic
-
fromJavaxToolsDiagnostic
Instantiate a diagnostic from output produced by the Java compiler. The resulting diagnostic is never fixable and always has parentheses. -
fromJSpecifyFileComment
public static TestDiagnostic fromJSpecifyFileComment(String filename, long lineNumber, String stringFromJavaFile) Instantiate the diagnostic from a JSpecify string that would appear in a Java file, e.g.: "jspecify_some_category".- Parameters:
filename- the file containing the diagnostic (and the error)lineNumber- the line number of the line immediately below the diagnostic comment in the Java filestringFromJavaFile- the string containing the diagnostic- Returns:
- a new TestDiagnostic
-
fromPatternMatching
protected static TestDiagnostic fromPatternMatching(Pattern diagnosticPattern, Pattern warningPattern, String filename, @Nullable Long lineNumber, String diagnosticString) Instantiate the diagnostic via pattern-matching against patterns.- Parameters:
diagnosticPattern- a pattern that matches any diagnosticwarningPattern- a pattern that matches a warning diagnosticfilename- the file namelineNumber- the line numberdiagnosticString- the string to parse- Returns:
- a diagnostic parsed from the given string
-
formatJavaxToolString
public static org.plumelib.util.IPair<String,String> formatJavaxToolString(String original, boolean noMsgText) Given a javax diagnostic, return a pair of (trimmed, filename), where "trimmed" is the first line of the message, without the leading filename.- Parameters:
original- a javax diagnosticnoMsgText- true if to do work; if false, this returns a pair of (argument, "")- Returns:
- the diagnostic, split into message and filename
-
isJavaDiagnosticLineStart
Returns true if this line in a Java file indicates an expected diagnostic that might be continued on the next line. -
handleEndOfLineJavaDiagnostic
Convert an end-of-line diagnostic message to a beginning-of-line one. Returns the argument unchanged if it does not contain an end-of-line diagnostic message.Most diagnostics in Java files start at the beginning of a line. Occasionally, javac issues a warning about implicit code, such as an implicit constructor, on the line immediately after a curly brace. The only place to put the expected diagnostic message is on the line with the curly brace.
This implementation replaces "{ // ::" by "// ::", converting the end-of-line diagnostic message to a beginning-of-line one that the rest of the code can handle. It is rather specific (to avoid false positive matches, such as when "// ::" is commented out in source code). It could be extended in the future if such an extension is necessary.
-
isJavaDiagnosticLineContinuation
@EnsuresNonNullIf(result=true, expression="#1") public static boolean isJavaDiagnosticLineContinuation(@Nullable String originalLine) Return true if this line in a Java file continues an expected diagnostic. -
continuationPart
Returns the continuation part. The argument is such thatisJavaDiagnosticLineContinuation(java.lang.String)returns true. -
fromJavaSourceLine
Convert a line in a Java source file to a TestDiagnosticLine.The input
lineis possibly the concatenation of multiple source lines, if the diagnostic was split across lines in the source code. -
fromDiagnosticFileLine
Convert a line in a DiagnosticFile to a TestDiagnosticLine. -
fromJavaxDiagnosticList
public static Set<TestDiagnostic> fromJavaxDiagnosticList(List<Diagnostic<? extends JavaFileObject>> javaxDiagnostics, boolean noMsgText) -
diagnosticsToString
Converts the given diagnostics to strings (as they would appear in a source file individually).- Parameters:
diagnostics- a list of diagnostics- Returns:
- a list of the diagnastics as they would appear in a source file
-
removeDiagnosticsOfKind
public static void removeDiagnosticsOfKind(DiagnosticKind kind, List<TestDiagnostic> expectedDiagnostics)
-