Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1.x] Handle parsing of non-problems in JavaErrorParser #1455

Merged
merged 3 commits into from
Oct 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,17 @@ class JavaErrorParser(relativeDir: File = new File(new File(".").getAbsolutePath
()
}

val nonProblem: Parser[Unit] = {
val skipLine =
("Loading source file" | "Constructing Javadoc information") ~ """[^\r\n]*(\r\n|\n)?""".r
rep(skipLine) ^^ (_ => ())
}

val potentialProblem: Parser[Problem] =
warningMessage | errorMessage | noteMessage | javacError | javacWarning

val javacOutput: Parser[Seq[Problem]] = rep(potentialProblem) <~ opt(outputSumamry)
val javacOutput: Parser[Seq[Problem]] =
opt(nonProblem) ~> rep(potentialProblem) <~ opt(outputSumamry)

/**
* Example:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class JavaErrorParserSpec extends UnitSpec with Diagrams {
"The JavaErrorParser" should "be able to parse Linux errors" in parseSampleLinux()
it should "be able to parse windows file names" in parseWindowsFile()
it should "be able to parse windows errors" in parseSampleWindows()
it should "be able to parse javac non-problems" in parseSampleNonProblem()
it should "be able to parse javac warnings" in parseJavacWarning()
it should "be able to parse javac errors" in parseSampleJavac()
it should "register the position of errors" in parseErrorPosition()
Expand All @@ -47,6 +48,14 @@ class JavaErrorParserSpec extends UnitSpec with Diagrams {
problems(0).position.sourcePath.get shouldBe (windowsFile)
}

def parseSampleNonProblem() = {
val parser = new JavaErrorParser()
val logger = ConsoleLogger()
val problems = parser.parseProblems(sampleNonProblemMessage, logger)

assert(problems.size == 2)
}

def parseWindowsFile() = {
val parser = new JavaErrorParser()
parser.parse(parser.fileAndLineNo, sampleWindowsMessage) match {
Expand Down Expand Up @@ -198,6 +207,21 @@ class JavaErrorParserSpec extends UnitSpec with Diagrams {
|return baz();
""".stripMargin

def sampleNonProblemMessage =
raw"""
|Loading source file D:\Repos\zinc\internal\zinc-compile-core\target\jvm-2.13\test-classes\sbt\internal\inc\javac\test1.java...
|Constructing Javadoc information...
|D:\Repos\zinc\internal\zinc-compile-core\target\jvm-2.13\test-classes\sbt\internal\inc\javac\test1.java:14: error: class Test is public, should be declared in a file named Test.java
|public class Test {
| ^
|D:\Repos\zinc\internal\zinc-compile-core\target\jvm-2.13\test-classes\sbt\internal\inc\javac\test1.java:15: error: cannot find symbol
| public NotFound foo() { return 5; }
| ^
| symbol: class NotFound
| location: class Test
|2 errors
""".stripMargin.trim

def sampleJavacWarning =
"warning: [options] system modules path not set in conjunction with -source 17"

Expand Down