From 324d2e042acdea88223c4d7738933be23b7ed5a6 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 12 Mar 2024 11:40:06 +0100 Subject: [PATCH] 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. --- .../intersectionWithMappedSignature.fir.kt | 38 ------------------- .../intersectionWithMappedSignature.kt | 9 ++--- ...rsectionWithMappedSignature.overrides.txt} | 1 - ...riangleWithFlexibleTypeAndSubstitution4.kt | 2 +- .../test/directives/DiagnosticsDirectives.kt | 9 ----- .../handlers/ClassicDiagnosticsHandler.kt | 31 --------------- .../test/runners/AbstractDiagnosticTest.kt | 2 - .../runners/AbstractForeignAnnotationsTest.kt | 3 -- .../AbstractParcelizeDiagnosticTest.kt | 2 - 9 files changed, 5 insertions(+), 92 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.fir.kt rename compiler/testData/diagnostics/tests/j+k/collectionOverrides/{intersectionWithMappedSignature.fir.overrides.txt => intersectionWithMappedSignature.overrides.txt} (99%) diff --git a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.fir.kt b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.fir.kt deleted file mode 100644 index 89d92746df4..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.fir.kt +++ /dev/null @@ -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(), 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(), 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 -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.kt b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.kt index 5a8fea977a8..74dacf3ca6c 100644 --- a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.kt +++ b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FULL_JDK // SCOPE_DUMP: B1:remove, B2:remove // FILE: Java1.java @@ -8,14 +9,12 @@ public interface Java1 { // FILE: testRemove.kt import java.util.* -// CONFLICTING_JVM_DECLARATIONS in K1 is only reported with old backend, not with K1. -class B1 : ArrayList(), Java1 { - override fun remove(element: Int?): Boolean { +class B1 : ArrayList(), 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(), Java1 { } @@ -35,4 +34,4 @@ public abstract class MyString implements CharSequence { // FILE: testRenamed.kt abstract class B3 : MyString(), Java2 { override fun get(i: Int?): Char? = null -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.fir.overrides.txt b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.overrides.txt similarity index 99% rename from compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.fir.overrides.txt rename to compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.overrides.txt index c87e7c46eab..4fc0f4fcb14 100644 --- a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.fir.overrides.txt +++ b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/intersectionWithMappedSignature.overrides.txt @@ -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 [id: 11] [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] - diff --git a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.kt b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.kt index 0ad3bb19a39..386c703848e 100644 --- a/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.kt +++ b/compiler/testData/diagnostics/tests/j+k/primitiveOverrides/triangleWithFlexibleTypeAndSubstitution4.kt @@ -21,7 +21,7 @@ open class C : A() interface D : B -class E : C(), D +class E : C(), D fun main() { E().foo(42) diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/DiagnosticsDirectives.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/DiagnosticsDirectives.kt index 7aeb469c246..84dd4f01dd1 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/DiagnosticsDirectives.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/DiagnosticsDirectives.kt @@ -5,7 +5,6 @@ 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.model.SimpleDirectivesContainer import org.jetbrains.kotlin.test.frontend.classic.handlers.ConstantValuesHandler @@ -54,14 +53,6 @@ object DiagnosticsDirectives : SimpleDirectivesContainer() { """.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( description = """ Dump declaration from packages listed in directive diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/handlers/ClassicDiagnosticsHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/handlers/ClassicDiagnosticsHandler.kt index 4c64362e151..477e9e74e25 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/handlers/ClassicDiagnosticsHandler.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/handlers/ClassicDiagnosticsHandler.kt @@ -5,24 +5,17 @@ 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.utils.CheckerTestUtil 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.diagnostics.Diagnostic 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.resolve.AnalyzingUtils import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl import org.jetbrains.kotlin.test.directives.AdditionalFilesDirectives import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives 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.model.DirectivesContainer 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 } } - if (allDiagnostics.none { it.severity == Severity.ERROR }) { - allDiagnostics = allDiagnostics + computeJvmSignatureDiagnostics(info) - } - val diagnosticsPerFile = allDiagnostics.groupBy { it.psiFile } val withNewInferenceModeEnabled = testServices.withNewInferenceModeEnabled() val configuration = reporter.createConfiguration(module) @@ -76,26 +65,6 @@ class ClassicDiagnosticsHandler(testServices: TestServices) : ClassicFrontendAna } } - private fun computeJvmSignatureDiagnostics(info: ClassicFrontendOutputArtifact): Set { - 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() - 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( configuration: DiagnosticsRenderingConfiguration, module: TestModule, diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt index a7143516e57..60c8c20807b 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticTest.kt @@ -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.DiagnosticsDirectives.CHECK_COMPILE_TIME_VALUES 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.USE_PSI_CLASS_FILES_READING import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_REFLECT @@ -56,7 +55,6 @@ abstract class AbstractDiagnosticTest : AbstractKotlinCompilerTest() { defaultDirectives { +USE_PSI_CLASS_FILES_READING - +REPORT_JVM_DIAGNOSTICS_ON_FRONTEND } enableMetaInfoHandler() diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractForeignAnnotationsTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractForeignAnnotationsTest.kt index d73076432a1..707459ea43d 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractForeignAnnotationsTest.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractForeignAnnotationsTest.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep import org.jetbrains.kotlin.test.builders.classicFrontendStep 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.ForeignAnnotationsDirectives.ANNOTATIONS_PATH 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.preprocessors.ExternalAnnotationsSourcePreprocessor 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.configuration.* import org.jetbrains.kotlin.test.services.jvm.ForeignAnnotationAgainstCompiledJavaTestSuppressor @@ -48,7 +46,6 @@ abstract class AbstractForeignAnnotationsTestBase(private val kind: ForeignAnnot } defaultDirectives { - +REPORT_JVM_DIAGNOSTICS_ON_FRONTEND +WITH_FOREIGN_ANNOTATIONS if (kind.compiledJava) { +ALL_JAVA_AS_BINARY diff --git a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeDiagnosticTest.kt b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeDiagnosticTest.kt index 3e1c082110e..b09dd3577ff 100644 --- a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeDiagnosticTest.kt +++ b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeDiagnosticTest.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep import org.jetbrains.kotlin.test.builders.classicFrontendStep 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.frontend.classic.ClassicFrontendFailingTestSuppressor import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler @@ -32,7 +31,6 @@ abstract class AbstractParcelizeDiagnosticTest : AbstractKotlinCompilerTest() { defaultDirectives { +USE_PSI_CLASS_FILES_READING - +REPORT_JVM_DIAGNOSTICS_ON_FRONTEND DIAGNOSTICS with listOf("-UNUSED_PARAMETER", "-PRE_RELEASE_CLASS") }