Tests: do not report backend diagnostics in diagnostic tests

There's a separate test data directory `testsWithJvmBackend` with a
runner that properly invokes the JVM backend and reports diagnostics
from it. All tests where JVM diagnostic presence/absence is important
were copied/moved there in this and previous commits.

The problem with the code removed in this commit is that it invoked some
parts of the _old JVM backend_ and old light classes, which is very far
from what users see in the production compiler at this point. This led
to real issues where we implemented incorrect behavior in K2 based on
the misleading diagnostic report from the K1 test.

The diagnostic in `triangleWithFlexibleTypeAndSubstitution4.kt` was
removed, but there's a copy of this test in `codegen/box/javaInterop`
which fails for K2 (KT-66529).

The diagnostic in `intersectionWithMappedSignature.kt` was removed and
that is OK because at this point CONFLICTING_JVM_DECLARATIONS there
seems like a bug in the old JVM backend.
This commit is contained in:
Alexander Udalov
2024-03-12 11:40:06 +01:00
committed by Space Team
parent 7d6cd8d126
commit 324d2e042a
9 changed files with 5 additions and 92 deletions
@@ -1,38 +0,0 @@
// FULL_JDK
// SCOPE_DUMP: B1:remove, B2:remove
// FILE: Java1.java
public interface Java1 {
Boolean remove(Integer element);
}
// FILE: testRemove.kt
import java.util.*
// CONFLICTING_JVM_DECLARATIONS in K1 is only reported with old backend, not with K1.
class B1 : ArrayList<Int>(), Java1 {
override fun remove(element: Int?): Boolean {
return false
}
}
// CONFLICTING_JVM_DECLARATIONS in K1 is only reported with old backend, not with K1.
class B2 : ArrayList<Int>(), Java1 {
}
// FILE: Java2.java
public interface Java2 {
Character get(Integer i);
}
// FILE: MyString.java
public abstract class MyString implements CharSequence {
@Override
public char charAt(int i) {
return 'c';
}
}
// FILE: testRenamed.kt
abstract class B3 : MyString(), Java2 {
override fun get(i: Int?): Char? = null
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FULL_JDK // FULL_JDK
// SCOPE_DUMP: B1:remove, B2:remove // SCOPE_DUMP: B1:remove, B2:remove
// FILE: Java1.java // FILE: Java1.java
@@ -8,14 +9,12 @@ public interface Java1 {
// FILE: testRemove.kt // FILE: testRemove.kt
import java.util.* import java.util.*
// CONFLICTING_JVM_DECLARATIONS in K1 is only reported with old backend, not with K1. class B1 : ArrayList<Int>(), Java1 {
class <!CONFLICTING_JVM_DECLARATIONS!>B1<!> : ArrayList<Int>(), Java1 { override fun remove(element: Int?): Boolean {
<!CONFLICTING_JVM_DECLARATIONS!>override fun remove(element: Int?): Boolean<!> {
return false return false
} }
} }
// CONFLICTING_JVM_DECLARATIONS in K1 is only reported with old backend, not with K1.
class B2 : ArrayList<Int>(), Java1 { class B2 : ArrayList<Int>(), Java1 {
} }
@@ -35,4 +34,4 @@ public abstract class MyString implements CharSequence {
// FILE: testRenamed.kt // FILE: testRenamed.kt
abstract class B3 : MyString(), Java2 { abstract class B3 : MyString(), Java2 {
override fun get(i: Int?): Char? = null override fun get(i: Int?): Char? = null
} }
@@ -22,4 +22,3 @@ B2:
[SubstitutionOverride(DeclarationSite)]: public abstract override fun remove(element: R|E|): R|kotlin/Boolean| from Substitution scope for [Use site scope of kotlin/collections/MutableCollection] for type kotlin/collections/MutableList<E> [id: 11] [SubstitutionOverride(DeclarationSite)]: public abstract override fun remove(element: R|E|): R|kotlin/Boolean| from Substitution scope for [Use site scope of kotlin/collections/MutableCollection] for type kotlin/collections/MutableList<E> [id: 11]
[Library]: public abstract fun remove(element: R|E|): R|kotlin/Boolean| from Use site scope of kotlin/collections/MutableCollection [id: 8] [Library]: public abstract fun remove(element: R|E|): R|kotlin/Boolean| from Use site scope of kotlin/collections/MutableCollection [id: 8]
[Enhancement]: public abstract fun remove(element: R|kotlin/Int!|): R|kotlin/Boolean!| from Java enhancement scope for /Java1 [id: 13] [Enhancement]: public abstract fun remove(element: R|kotlin/Int!|): R|kotlin/Boolean!| from Java enhancement scope for /Java1 [id: 13]
@@ -21,7 +21,7 @@ open class C : A<Int>()
interface D : B<Int> interface D : B<Int>
class <!CONFLICTING_INHERITED_JVM_DECLARATIONS!>E<!> : C(), D class E : C(), D
fun main() { fun main() {
E().foo(42) E().foo(42)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.test.directives package org.jetbrains.kotlin.test.directives
import org.jetbrains.kotlin.test.backend.handlers.JvmBackendDiagnosticsHandler
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_JAVAC import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_JAVAC
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
import org.jetbrains.kotlin.test.frontend.classic.handlers.ConstantValuesHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.ConstantValuesHandler
@@ -54,14 +53,6 @@ object DiagnosticsDirectives : SimpleDirectivesContainer() {
""".trimIndent() """.trimIndent()
) )
val REPORT_JVM_DIAGNOSTICS_ON_FRONTEND by directive(
description = """
Collect additional jvm specific diagnostics on frontend
Note that this directive is not needed if ${JvmBackendDiagnosticsHandler::class}
is enabled in test
""".trimIndent()
)
val RENDER_PACKAGE by stringDirective( val RENDER_PACKAGE by stringDirective(
description = """ description = """
Dump declaration from packages listed in directive Dump declaration from packages listed in directive
@@ -5,24 +5,17 @@
package org.jetbrains.kotlin.test.frontend.classic.handlers package org.jetbrains.kotlin.test.frontend.classic.handlers
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.checkers.diagnostics.SyntaxErrorDiagnostic import org.jetbrains.kotlin.checkers.diagnostics.SyntaxErrorDiagnostic
import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil
import org.jetbrains.kotlin.checkers.utils.DiagnosticsRenderingConfiguration import org.jetbrains.kotlin.checkers.utils.DiagnosticsRenderingConfiguration
import org.jetbrains.kotlin.cli.jvm.compiler.getJvmSignatureDiagnostics
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.AnalyzingUtils import org.jetbrains.kotlin.resolve.AnalyzingUtils
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl
import org.jetbrains.kotlin.test.directives.AdditionalFilesDirectives import org.jetbrains.kotlin.test.directives.AdditionalFilesDirectives
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.MARK_DYNAMIC_CALLS import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.MARK_DYNAMIC_CALLS
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_JVM_DIAGNOSTICS_ON_FRONTEND
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
@@ -54,10 +47,6 @@ class ClassicDiagnosticsHandler(testServices: TestServices) : ClassicFrontendAna
allDiagnostics = allDiagnostics.filter { it.factory.name != Errors.NEWER_VERSION_IN_SINCE_KOTLIN.name } allDiagnostics = allDiagnostics.filter { it.factory.name != Errors.NEWER_VERSION_IN_SINCE_KOTLIN.name }
} }
if (allDiagnostics.none { it.severity == Severity.ERROR }) {
allDiagnostics = allDiagnostics + computeJvmSignatureDiagnostics(info)
}
val diagnosticsPerFile = allDiagnostics.groupBy { it.psiFile } val diagnosticsPerFile = allDiagnostics.groupBy { it.psiFile }
val withNewInferenceModeEnabled = testServices.withNewInferenceModeEnabled() val withNewInferenceModeEnabled = testServices.withNewInferenceModeEnabled()
val configuration = reporter.createConfiguration(module) val configuration = reporter.createConfiguration(module)
@@ -76,26 +65,6 @@ class ClassicDiagnosticsHandler(testServices: TestServices) : ClassicFrontendAna
} }
} }
private fun computeJvmSignatureDiagnostics(info: ClassicFrontendOutputArtifact): Set<Diagnostic> {
if (testServices.moduleStructure.modules.any { !it.targetPlatform.isJvm() }) return emptySet()
if (REPORT_JVM_DIAGNOSTICS_ON_FRONTEND !in testServices.moduleStructure.allDirectives) return emptySet()
val bindingContext = info.analysisResult.bindingContext
val jvmSignatureDiagnostics = HashSet<Diagnostic>()
for (ktFile in info.ktFiles.values) {
val declarations = PsiTreeUtil.findChildrenOfType(ktFile, KtDeclaration::class.java)
for (declaration in declarations) {
val diagnostics = getJvmSignatureDiagnostics(
declaration,
bindingContext.diagnostics,
) ?: continue
jvmSignatureDiagnostics.addAll(diagnostics.forElement(declaration))
}
}
return jvmSignatureDiagnostics
}
private fun processDebugInfoDiagnostics( private fun processDebugInfoDiagnostics(
configuration: DiagnosticsRenderingConfiguration, configuration: DiagnosticsRenderingConfiguration,
module: TestModule, module: TestModule,
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.test.builders.classicFrontendStep
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.CHECK_COMPILE_TIME_VALUES import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.CHECK_COMPILE_TIME_VALUES
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.DIAGNOSTICS import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.DIAGNOSTICS
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_JVM_DIAGNOSTICS_ON_FRONTEND
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.JDK_KIND import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.JDK_KIND
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_REFLECT import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_REFLECT
@@ -56,7 +55,6 @@ abstract class AbstractDiagnosticTest : AbstractKotlinCompilerTest() {
defaultDirectives { defaultDirectives {
+USE_PSI_CLASS_FILES_READING +USE_PSI_CLASS_FILES_READING
+REPORT_JVM_DIAGNOSTICS_ON_FRONTEND
} }
enableMetaInfoHandler() enableMetaInfoHandler()
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep
import org.jetbrains.kotlin.test.builders.classicFrontendStep import org.jetbrains.kotlin.test.builders.classicFrontendStep
import org.jetbrains.kotlin.test.builders.configureClassicFrontendHandlersStep import org.jetbrains.kotlin.test.builders.configureClassicFrontendHandlersStep
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_JVM_DIAGNOSTICS_ON_FRONTEND
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.SKIP_TXT import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.SKIP_TXT
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.ANNOTATIONS_PATH import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.ANNOTATIONS_PATH
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.ALL_JAVA_AS_BINARY import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.ALL_JAVA_AS_BINARY
@@ -26,7 +25,6 @@ import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.preprocessors.ExternalAnnotationsSourcePreprocessor import org.jetbrains.kotlin.test.preprocessors.ExternalAnnotationsSourcePreprocessor
import org.jetbrains.kotlin.test.preprocessors.JspecifyMarksCleanupPreprocessor import org.jetbrains.kotlin.test.preprocessors.JspecifyMarksCleanupPreprocessor
import org.jetbrains.kotlin.test.services.SourceFilePreprocessor
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.configuration.* import org.jetbrains.kotlin.test.services.configuration.*
import org.jetbrains.kotlin.test.services.jvm.ForeignAnnotationAgainstCompiledJavaTestSuppressor import org.jetbrains.kotlin.test.services.jvm.ForeignAnnotationAgainstCompiledJavaTestSuppressor
@@ -48,7 +46,6 @@ abstract class AbstractForeignAnnotationsTestBase(private val kind: ForeignAnnot
} }
defaultDirectives { defaultDirectives {
+REPORT_JVM_DIAGNOSTICS_ON_FRONTEND
+WITH_FOREIGN_ANNOTATIONS +WITH_FOREIGN_ANNOTATIONS
if (kind.compiledJava) { if (kind.compiledJava) {
+ALL_JAVA_AS_BINARY +ALL_JAVA_AS_BINARY
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep
import org.jetbrains.kotlin.test.builders.classicFrontendStep import org.jetbrains.kotlin.test.builders.classicFrontendStep
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.DIAGNOSTICS import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.DIAGNOSTICS
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_JVM_DIAGNOSTICS_ON_FRONTEND
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFailingTestSuppressor import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFailingTestSuppressor
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler
@@ -32,7 +31,6 @@ abstract class AbstractParcelizeDiagnosticTest : AbstractKotlinCompilerTest() {
defaultDirectives { defaultDirectives {
+USE_PSI_CLASS_FILES_READING +USE_PSI_CLASS_FILES_READING
+REPORT_JVM_DIAGNOSTICS_ON_FRONTEND
DIAGNOSTICS with listOf("-UNUSED_PARAMETER", "-PRE_RELEASE_CLASS") DIAGNOSTICS with listOf("-UNUSED_PARAMETER", "-PRE_RELEASE_CLASS")
} }