Skip to content

Commit

Permalink
[compiler] Update zinc to version 1.10.1 and add tests for javac comp…
Browse files Browse the repository at this point in the history
…iler error position information #SCL-22799 fixed

- sbt/zinc#1373
  • Loading branch information
vasilmkd authored and unkarjedy committed Aug 12, 2024
1 parent ac425c0 commit a0f402f
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 1 deletion.
2 changes: 1 addition & 1 deletion project/dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ object Versions {
// run runtimeDependencies/update manually
val sbtVersion: String = Sbt.latest
val bloopVersion = "1.5.6"
val zincVersion = "1.10.0"
val zincVersion = "1.10.1"

// ATTENTION: check the comment in `Common.newProjectWithKotlin` when updating this version
val intellijVersion = "242.19890.5"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package org.jetbrains.plugins.scala.compiler.zinc

import com.intellij.compiler.CompilerMessageImpl
import com.intellij.openapi.compiler.CompilerMessageCategory
import com.intellij.openapi.module.ModuleManager
import com.intellij.testFramework.CompilerTester
import org.jetbrains.plugins.scala.CompilationTests
import org.jetbrains.plugins.scala.compiler.data.IncrementalityType
import org.jetbrains.plugins.scala.project.settings.ScalaCompilerConfiguration
import org.junit.Assert.{assertEquals, assertTrue}
import org.junit.experimental.categories.Category

import scala.jdk.CollectionConverters._

@Category(Array(classOf[CompilationTests]))
class JavacErrorsPositionTest extends ZincTestBase {

def testJavacErrorsPosition_Zinc(): Unit = {
runJavacErrorsPositionTest(IncrementalityType.SBT)
}

def testJavacErrorsPosition_IDEA(): Unit = {
runJavacErrorsPositionTest(IncrementalityType.IDEA)
}

private def runJavacErrorsPositionTest(incrementality: IncrementalityType): Unit = {
createProjectSubDirs("project", "src/main/java")
createProjectSubFile("project/build.properties", "sbt.version=1.10.1")
createProjectSubFile("src/main/java/StringFactorial.java",
"""import java.math.BigInteger;
|
|public final class StringFactorial {
| public static String factorial(String n) {
| BigInteger fact = BigInteger.ONE;
| for (BigInteger N = new BigInteger(n); N.compareTo(BigInteger.ZERO) > 0; N--) {
| fact *= N;
| }
| return fact;
| }
|}
|""".stripMargin)
createProjectConfig(
"""lazy val root = project.in(file("."))
| .settings(scalaVersion := "2.13.14")
|""".stripMargin)

importProject(false)
ScalaCompilerConfiguration.instanceIn(myProject).incrementalityType = incrementality
val modules = ModuleManager.getInstance(myProject).getModules
rootModule = modules.find(_.getName == "root").orNull
compiler = new CompilerTester(myProject, java.util.Arrays.asList(modules: _*), null, false)

val errors = compiler.make().asScala.toSeq.filter(_.getCategory == CompilerMessageCategory.ERROR)
assertEquals(3, errors.size)

val Seq(error1, error2, error3) = errors.map { case impl: CompilerMessageImpl => impl }

val message1 = error1.getMessage
assertTrue(message1.contains("bad operand type") && message1.contains("BigInteger for unary operator '--'"))
assertEquals(6, error1.getLine)
assertEquals(83, error1.getColumn)

assertTrue(error2.getMessage.contains("bad operand types for binary operator '*'"))
assertEquals(7, error2.getLine)
assertEquals(18, error2.getColumn)

val message3 = error3.getMessage
assertTrue(message3.contains("incompatible types: ") && message3.contains("BigInteger cannot be converted to ") && message3.contains("String"))
assertEquals(9, error3.getLine)
assertEquals(16, error3.getColumn)
}
}

0 comments on commit a0f402f

Please sign in to comment.