diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index 87ff8d91a40..42501e5c4cd 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -1897,6 +1897,13 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN) { firDiagnostic -> + PlatformClassMappedToKotlinImpl( + firDiagnostic.a, + firDiagnostic as KtPsiDiagnostic, + token, + ) + } add(FirErrors.EXTENSION_IN_CLASS_REFERENCE_NOT_ALLOWED) { firDiagnostic -> ExtensionInClassReferenceNotAllowedImpl( firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a.fir), diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index c7c55a90953..332ec13633a 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -1352,6 +1352,11 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = RedundantNullable::class } + abstract class PlatformClassMappedToKotlin : KtFirDiagnostic() { + override val diagnosticClass get() = PlatformClassMappedToKotlin::class + abstract val kotlinClass: FqName + } + abstract class ExtensionInClassReferenceNotAllowed : KtFirDiagnostic() { override val diagnosticClass get() = ExtensionInClassReferenceNotAllowed::class abstract val referencedDeclaration: KtCallableSymbol diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index ee202db804a..1690cc457bc 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -1622,6 +1622,12 @@ internal class RedundantNullableImpl( override val token: ValidityToken, ) : KtFirDiagnostic.RedundantNullable(), KtAbstractFirDiagnostic +internal class PlatformClassMappedToKotlinImpl( + override val kotlinClass: FqName, + override val firDiagnostic: KtPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.PlatformClassMappedToKotlin(), KtAbstractFirDiagnostic + internal class ExtensionInClassReferenceNotAllowedImpl( override val referencedDeclaration: KtCallableSymbol, override val firDiagnostic: KtPsiDiagnostic, diff --git a/compiler/fir/analysis-tests/testData/resolve/inlineClasses/inlineClassDeclaration.kt b/compiler/fir/analysis-tests/testData/resolve/inlineClasses/inlineClassDeclaration.kt index 57cd9d018a3..14557fecc67 100644 --- a/compiler/fir/analysis-tests/testData/resolve/inlineClasses/inlineClassDeclaration.kt +++ b/compiler/fir/analysis-tests/testData/resolve/inlineClasses/inlineClassDeclaration.kt @@ -1,3 +1,4 @@ +// WITH_EXTENDED_CHECKERS class A { inline inner class B(val x: Int) fun foo() { @@ -11,7 +12,7 @@ class A { sealed inline class NotFinalClass3(val x: Int) value class CloneableClass1(val x: Int): Cloneable -inline class CloneableClass2(val x: Int): java.lang.Cloneable +inline class CloneableClass2(val x: Int): java.lang.Cloneable open class Test inline class ExtendTest(val x: Int): Test diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/functionX.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/functionX.kt index ea37c0eabc7..34f2806e9cf 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/functionX.kt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/functionX.kt @@ -1,6 +1,8 @@ -import kotlin.jvm.functions.Function0 +// WITH_EXTENDED_CHECKERS -val x: Function0 = { 42 } +import kotlin.jvm.functions.Function0 + +val x: Function0 = { 42 } val y: Function1 = { it } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/IntersectionWithJavaString.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/IntersectionWithJavaString.kt index af8b5b26b4c..97c328dfdea 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/IntersectionWithJavaString.kt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/IntersectionWithJavaString.kt @@ -1,7 +1,8 @@ // FULL_JDK // ISSUE: KT-48113 +// WITH_EXTENDED_CHECKERS fun collapse(path: String) { - val result = (path as java.lang.String).replace("123", "456") + val result = (path as java.lang.String).replace("123", "456") if (result !== path) {} } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/multiModule/Basic.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/multiModule/Basic.kt index f185a5429b5..a1f3ea71abf 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/multiModule/Basic.kt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/multiModule/Basic.kt @@ -1,3 +1,4 @@ +// WITH_EXTENDED_CHECKERS // MODULE: m1 // FILE: base.kt @@ -5,7 +6,7 @@ package hello class Hello(val msg: String) -class Test(val set: java.util.Set<*>) +class Test(val set: java.util.Set<*>) // MODULE: m2(m1) // FILE: user.kt diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 122894963e6..b9b2fab1487 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -657,6 +657,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { } val REDUNDANT_NULLABLE by warning(PositioningStrategy.REDUNDANT_NULLABLE) + + val PLATFORM_CLASS_MAPPED_TO_KOTLIN by warning(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) { + parameter("kotlinClass") + } } val REFLECTION by object : DiagnosticGroup("Reflection") { diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index e3c8290a804..fc2dc640399 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -396,6 +396,7 @@ object FirErrors { val TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE by error4(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val SMARTCAST_IMPOSSIBLE by error4() val REDUNDANT_NULLABLE by warning0(SourceElementPositioningStrategies.REDUNDANT_NULLABLE) + val PLATFORM_CLASS_MAPPED_TO_KOTLIN by warning1(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) // Reflection val EXTENSION_IN_CLASS_REFERENCE_NOT_ALLOWED by error1>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedDeclarationCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedDeclarationCheckers.kt index d20d2129f59..c28f8272c9d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedDeclarationCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedDeclarationCheckers.kt @@ -11,6 +11,11 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.* import org.jetbrains.kotlin.fir.analysis.checkers.extended.* object ExtendedDeclarationCheckers : DeclarationCheckers() { + override val fileCheckers: Set + get() = setOf( + PlatformClassMappedToKotlinImportsChecker + ) + override val basicDeclarationCheckers: Set get() = setOf( RedundantVisibilityModifierSyntaxChecker, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedTypeCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedTypeCheckers.kt index ab2587e463e..f6fa7002f20 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedTypeCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedTypeCheckers.kt @@ -5,11 +5,13 @@ package org.jetbrains.kotlin.fir.analysis.checkers +import org.jetbrains.kotlin.fir.analysis.checkers.extended.PlatformClassMappedToKotlinTypeRefChecker import org.jetbrains.kotlin.fir.analysis.checkers.extended.RedundantNullableChecker import org.jetbrains.kotlin.fir.analysis.checkers.type.* object ExtendedTypeCheckers : TypeCheckers() { override val typeRefCheckers: Set = setOf( - RedundantNullableChecker + RedundantNullableChecker, + PlatformClassMappedToKotlinTypeRefChecker ) } \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/PlatformClassMappedToKotlinImportsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/PlatformClassMappedToKotlinImportsChecker.kt new file mode 100644 index 00000000000..01c44bedbd6 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/PlatformClassMappedToKotlinImportsChecker.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.checkers.extended + +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirFileChecker +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirResolvedImport +import org.jetbrains.kotlin.fir.scopes.platformClassMapper +import org.jetbrains.kotlin.name.ClassId + +object PlatformClassMappedToKotlinImportsChecker : FirFileChecker() { + override fun check(declaration: FirFile, context: CheckerContext, reporter: DiagnosticReporter) { + declaration.imports.forEach { import -> + val importedFqName = import.importedFqName ?: return + if (importedFqName.isRoot || importedFqName.shortName().asString().isEmpty()) return + val classId = (import as? FirResolvedImport)?.resolvedParentClassId ?: ClassId.topLevel(importedFqName) + if (classId.asSingleFqName() != importedFqName) { + return + } + + val kotlinClass = context.session.platformClassMapper.getCorrespondingKotlinClass(classId) + if (kotlinClass != null) { + reporter.reportOn(import.source, FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN, importedFqName, context) + } + } + } +} \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/PlatformClassMappedToKotlinTypeRefChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/PlatformClassMappedToKotlinTypeRefChecker.kt new file mode 100644 index 00000000000..f2327e3b7a9 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/PlatformClassMappedToKotlinTypeRefChecker.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.checkers.extended + +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.type.FirTypeRefChecker +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.scopes.platformClassMapper +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.classId + +object PlatformClassMappedToKotlinTypeRefChecker : FirTypeRefChecker() { + override fun check(typeRef: FirTypeRef, context: CheckerContext, reporter: DiagnosticReporter) { + if (typeRef is FirResolvedTypeRef) { + val kotlinClass = context.session.platformClassMapper.getCorrespondingKotlinClass(typeRef.type.classId) + if (kotlinClass != null) { + reporter.reportOn(typeRef.source, FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN, kotlinClass.asSingleFqName(), context) + } + } + } +} \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index dac657f1adc..48114651024 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -349,6 +349,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OVERRIDE_BY_INLIN import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OVERRIDE_DEPRECATION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OVERRIDING_FINAL_MEMBER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PACKAGE_CANNOT_BE_IMPORTED +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PRIVATE_CLASS_MEMBER_FROM_INLINE @@ -624,6 +625,7 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { map.put(SINGLETON_IN_SUPERTYPE, "Cannot inherit from a singleton") map.put(NULLABLE_SUPERTYPE, "A supertype cannot be nullable") map.put(REDUNDANT_NULLABLE, "Redundant '?'") + map.put(PLATFORM_CLASS_MAPPED_TO_KOTLIN, "This class shouldn't be used in Kotlin. Use {0} instead.", TO_STRING) map.put(MANY_CLASSES_IN_SUPERTYPE_LIST, "Only one class may appear in a supertype list") map.put(SUPERTYPE_APPEARS_TWICE, "A supertype appears twice") map.put(CLASS_IN_SUPERTYPE_FOR_ENUM, "Enum class cannot inherit from classes") diff --git a/compiler/testData/diagnostics/tests/PackageQualified.fir.kt b/compiler/testData/diagnostics/tests/PackageQualified.fir.kt index 9c2739ef43d..07788fdd66b 100644 --- a/compiler/testData/diagnostics/tests/PackageQualified.fir.kt +++ b/compiler/testData/diagnostics/tests/PackageQualified.fir.kt @@ -1,10 +1,11 @@ -// FILE: a.kt +// WITH_EXTENDED_CHECKERS +// FILE: a.kt package foobar.a import java.* - val a : java.util.List? = null + val a : java.util.List? = null val a2 : util.List? = null val a3 : LinkedList? = null diff --git a/compiler/testData/diagnostics/tests/PackageQualified.kt b/compiler/testData/diagnostics/tests/PackageQualified.kt index 4079d93c9c3..b01ed8e3902 100644 --- a/compiler/testData/diagnostics/tests/PackageQualified.kt +++ b/compiler/testData/diagnostics/tests/PackageQualified.kt @@ -1,5 +1,6 @@ -// FILE: a.kt +// WITH_EXTENDED_CHECKERS +// FILE: a.kt package foobar.a import java.* diff --git a/compiler/testData/diagnostics/tests/ProjectionsInSupertypes.kt b/compiler/testData/diagnostics/tests/ProjectionsInSupertypes.kt index 2a428d0261d..3b342cc6d35 100644 --- a/compiler/testData/diagnostics/tests/ProjectionsInSupertypes.kt +++ b/compiler/testData/diagnostics/tests/ProjectionsInSupertypes.kt @@ -1,3 +1,4 @@ +// WITH_EXTENDED_CHECKERS interface A {} interface B {} interface C {} diff --git a/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.fir.kt b/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.fir.kt deleted file mode 100644 index e7a4bbd2c5f..00000000000 --- a/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.fir.kt +++ /dev/null @@ -1,21 +0,0 @@ -// Fixpoint generic in Java: Enum> -fun test(a : java.lang.annotation.RetentionPolicy) { - -} - -fun test() { - java.util.Collections.emptyList() - val a : Collection? = java.util.Collections.emptyList() -} - -fun test(a : java.lang.Comparable) { - -} - -fun test(a : java.util.ArrayList) { - -} - -fun test(a : java.lang.Class) { - -} diff --git a/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.kt b/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.kt index 6d440cd35e6..5419886d959 100644 --- a/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.kt +++ b/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.kt @@ -1,3 +1,6 @@ +// FIR_IDENTICAL +// !DIAGNOSTICS: -UNUSED_VARIABLE +// WITH_EXTENDED_CHECKERS // Fixpoint generic in Java: Enum> fun test(a : java.lang.annotation.RetentionPolicy) { diff --git a/compiler/testData/diagnostics/tests/ResolveToJava.fir.kt b/compiler/testData/diagnostics/tests/ResolveToJava.fir.kt index 20c9a9e4cbf..ac1de909e49 100644 --- a/compiler/testData/diagnostics/tests/ResolveToJava.fir.kt +++ b/compiler/testData/diagnostics/tests/ResolveToJava.fir.kt @@ -1,6 +1,7 @@ // !CHECK_TYPE // SKIP_JAVAC // FULL_JDK +// WITH_EXTENDED_CHECKERS // FILE: a.kt @@ -9,17 +10,17 @@ import java.util.* import utils.* import java.io.PrintStream -import java.lang.Comparable as Com +import java.lang.Comparable as Com val l : MutableList = ArrayList() -fun test(l : java.util.List) { - val x : java.List - val y : java.util.List - val b : java.lang.Object - val z : java.utils.List +fun test(l : java.util.List) { + val x : java.List + val y : java.util.List + val b : java.lang.Object + val z : java.utils.List - val f : java.io.File? = null + val f : java.io.File? = null Collections.emptyList Collections.emptyList<Int> @@ -32,7 +33,7 @@ fun test(l : java.util.List) { List - val o = "sdf" as Object + val o = "sdf" as Object try { // ... @@ -43,9 +44,9 @@ fun test(l : java.util.List) { PrintStream("sdf") - val c : Com? = null + val c : Com? = null - checkSubtype?>(c) + checkSubtype<java.lang.Comparable?>(c) // Collections.sort(ArrayList()) xxx.Class() diff --git a/compiler/testData/diagnostics/tests/ResolveToJava.kt b/compiler/testData/diagnostics/tests/ResolveToJava.kt index 41451b3c014..c40467e0ca5 100644 --- a/compiler/testData/diagnostics/tests/ResolveToJava.kt +++ b/compiler/testData/diagnostics/tests/ResolveToJava.kt @@ -1,6 +1,7 @@ // !CHECK_TYPE // SKIP_JAVAC // FULL_JDK +// WITH_EXTENDED_CHECKERS // FILE: a.kt diff --git a/compiler/testData/diagnostics/tests/TraitOverrideObjectMethods.fir.kt b/compiler/testData/diagnostics/tests/TraitOverrideObjectMethods.fir.kt index bdac51dc5c4..85d158092a2 100644 --- a/compiler/testData/diagnostics/tests/TraitOverrideObjectMethods.fir.kt +++ b/compiler/testData/diagnostics/tests/TraitOverrideObjectMethods.fir.kt @@ -1,6 +1,7 @@ // JAVAC_EXPECTED_FILE -interface MyTrait: Object { +// WITH_EXTENDED_CHECKERS +interface MyTrait: Object { override fun toString(): String public override fun finalize() - public override fun wait() + public override fun wait() } diff --git a/compiler/testData/diagnostics/tests/TraitOverrideObjectMethods.kt b/compiler/testData/diagnostics/tests/TraitOverrideObjectMethods.kt index c4d1d299e45..cb7995c1053 100644 --- a/compiler/testData/diagnostics/tests/TraitOverrideObjectMethods.kt +++ b/compiler/testData/diagnostics/tests/TraitOverrideObjectMethods.kt @@ -1,4 +1,5 @@ // JAVAC_EXPECTED_FILE +// WITH_EXTENDED_CHECKERS interface MyTrait: Object { override fun toString(): String public override fun finalize() diff --git a/compiler/testData/diagnostics/tests/delegation/DelegationToJavaIface.fir.kt b/compiler/testData/diagnostics/tests/delegation/DelegationToJavaIface.fir.kt index 6175e519d3b..f37772a7de5 100644 --- a/compiler/testData/diagnostics/tests/delegation/DelegationToJavaIface.fir.kt +++ b/compiler/testData/diagnostics/tests/delegation/DelegationToJavaIface.fir.kt @@ -1,4 +1,6 @@ // JAVAC_EXPECTED_FILE +// WITH_EXTENDED_CHECKERS + class TestIface(r : Runnable) : Runnable by r {} -class TestObject(o : Object) : Object by o {} +class TestObject(o : Object) : Object by o {} diff --git a/compiler/testData/diagnostics/tests/delegation/DelegationToJavaIface.kt b/compiler/testData/diagnostics/tests/delegation/DelegationToJavaIface.kt index 570a40e173e..7ccdd29d6e0 100644 --- a/compiler/testData/diagnostics/tests/delegation/DelegationToJavaIface.kt +++ b/compiler/testData/diagnostics/tests/delegation/DelegationToJavaIface.kt @@ -1,4 +1,6 @@ // JAVAC_EXPECTED_FILE +// WITH_EXTENDED_CHECKERS + class TestIface(r : Runnable) : Runnable by r {} class TestObject(o : Object) : Object by o {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/imports/DefaultImportsPriority.fir.kt b/compiler/testData/diagnostics/tests/imports/DefaultImportsPriority.fir.kt deleted file mode 100644 index dcd261d0336..00000000000 --- a/compiler/testData/diagnostics/tests/imports/DefaultImportsPriority.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -import java.lang.reflect.* -import java.util.List - -fun foo( - p1: Array /* should be resolved to kotlin.Array */, - p2: List /* should be resolved to java.util.List */) { } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/imports/DefaultImportsPriority.kt b/compiler/testData/diagnostics/tests/imports/DefaultImportsPriority.kt index 6a93d38c601..369678e64f0 100644 --- a/compiler/testData/diagnostics/tests/imports/DefaultImportsPriority.kt +++ b/compiler/testData/diagnostics/tests/imports/DefaultImportsPriority.kt @@ -1,3 +1,6 @@ +// FIR_IDENTICAL +// WITH_EXTENDED_CHECKERS + import java.lang.reflect.* import java.util.List diff --git a/compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.fir.kt b/compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.fir.kt index af3c1ad5c1a..69ddadcf15d 100644 --- a/compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.fir.kt @@ -1,4 +1,5 @@ // !CHECK_TYPE +// WITH_EXTENDED_CHECKERS package i @@ -7,7 +8,7 @@ import java.util.* import checkSubtype fun Collection.map1(f : (T) -> R) : List {} -fun java.lang.Iterable.map1(f : (T) -> R) : List {} +fun java.lang.Iterable.map1(f : (T) -> R) : List {} fun test(list: List) { val res = list.map1 { it } @@ -16,7 +17,7 @@ fun test(list: List) { } fun Collection.foo() {} -fun java.lang.Iterable.foo() {} +fun java.lang.Iterable.foo() {} fun test1(list: List) { val res = list.foo() diff --git a/compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.kt b/compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.kt index bd87a1cfbbb..535fb9c8868 100644 --- a/compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.kt +++ b/compiler/testData/diagnostics/tests/inference/mostSpecificAfterInference.kt @@ -1,4 +1,5 @@ // !CHECK_TYPE +// WITH_EXTENDED_CHECKERS package i diff --git a/compiler/testData/diagnostics/tests/j+k/kt2606.fir.kt b/compiler/testData/diagnostics/tests/j+k/kt2606.fir.kt deleted file mode 100644 index f362ec33d42..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/kt2606.fir.kt +++ /dev/null @@ -1,11 +0,0 @@ -//KT-2606 Filter java.util.* import -package n - -import java.util.* -import java.lang.annotation.* - -fun bar() : Iterator? { - val i : Iterable - val a : Annotation - return null -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/j+k/kt2606.kt b/compiler/testData/diagnostics/tests/j+k/kt2606.kt index 4ec58443fd6..ce35e333a30 100644 --- a/compiler/testData/diagnostics/tests/j+k/kt2606.kt +++ b/compiler/testData/diagnostics/tests/j+k/kt2606.kt @@ -1,3 +1,6 @@ +// FIR_IDENTICAL +// !DIAGNOSTICS: -UNUSED_VARIABLE +// WITH_EXTENDED_CHECKERS //KT-2606 Filter java.util.* import package n diff --git a/compiler/testData/diagnostics/tests/j+k/kt2641.fir.kt b/compiler/testData/diagnostics/tests/j+k/kt2641.fir.kt index 19abd5e7c48..2036ee75fc8 100644 --- a/compiler/testData/diagnostics/tests/j+k/kt2641.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/kt2641.fir.kt @@ -1,20 +1,21 @@ // !CHECK_TYPE +// WITH_EXTENDED_CHECKERS package a -import java.util.Iterator -import java.lang.Comparable as Comp +import java.util.Iterator +import java.lang.Comparable as Comp import checkSubtype -fun bar(any: Any): java.lang.Iterable? { - val a: java.lang.Comparable? = null - val b: Iterable - val c : Iterator? = null +fun bar(any: Any): java.lang.Iterable? { + val a: java.lang.Comparable? = null + val b: Iterable<Integer> + val c : Iterator? = null - if (any is Iterator<*>) { - checkSubtype>(any) + if (any is Iterator<*>) { + checkSubtype<Iterator<*>>(any) } - any as Iterator<*> + any as Iterator<*> return null } diff --git a/compiler/testData/diagnostics/tests/j+k/kt2641.kt b/compiler/testData/diagnostics/tests/j+k/kt2641.kt index b16912b65dd..5b9eb5c00b3 100644 --- a/compiler/testData/diagnostics/tests/j+k/kt2641.kt +++ b/compiler/testData/diagnostics/tests/j+k/kt2641.kt @@ -1,4 +1,5 @@ // !CHECK_TYPE +// WITH_EXTENDED_CHECKERS package a diff --git a/compiler/testData/diagnostics/tests/nullabilityAndSmartCasts/kt1778.fir.kt b/compiler/testData/diagnostics/tests/nullabilityAndSmartCasts/kt1778.fir.kt index 561121eb688..b85a1fe3067 100644 --- a/compiler/testData/diagnostics/tests/nullabilityAndSmartCasts/kt1778.fir.kt +++ b/compiler/testData/diagnostics/tests/nullabilityAndSmartCasts/kt1778.fir.kt @@ -1,4 +1,5 @@ // !CHECK_TYPE +// WITH_EXTENDED_CHECKERS //KT-1778 Automatically cast error package kt1778 @@ -6,7 +7,7 @@ import checkSubtype fun main(args : Array) { val x = checkSubtype(args[0]) - if(x is java.lang.CharSequence) { + if(x is java.lang.CharSequence) { if ("a" == x) x.length else x.length() // OK if ("a" == x || "b" == x) x.length else x.length() // <– THEN ERROR if ("a" == x && "a" == x) x.length else x.length() // <– ELSE ERROR diff --git a/compiler/testData/diagnostics/tests/nullabilityAndSmartCasts/kt1778.kt b/compiler/testData/diagnostics/tests/nullabilityAndSmartCasts/kt1778.kt index b016144bed1..c541af9013a 100644 --- a/compiler/testData/diagnostics/tests/nullabilityAndSmartCasts/kt1778.kt +++ b/compiler/testData/diagnostics/tests/nullabilityAndSmartCasts/kt1778.kt @@ -1,4 +1,5 @@ // !CHECK_TYPE +// WITH_EXTENDED_CHECKERS //KT-1778 Automatically cast error package kt1778 diff --git a/compiler/testData/diagnostics/tests/nullableTypes/redundantNullable.kt b/compiler/testData/diagnostics/tests/nullableTypes/redundantNullable.kt index b613a783b5c..e3a0a187ab5 100644 --- a/compiler/testData/diagnostics/tests/nullableTypes/redundantNullable.kt +++ b/compiler/testData/diagnostics/tests/nullableTypes/redundantNullable.kt @@ -1,3 +1,4 @@ +// WITH_EXTENDED_CHECKERS class Generic fun redundantNullable( diff --git a/compiler/testData/diagnostics/tests/nullableTypes/redundantNullableInSupertype.kt b/compiler/testData/diagnostics/tests/nullableTypes/redundantNullableInSupertype.kt index 62de851c105..2d7395dfe1d 100644 --- a/compiler/testData/diagnostics/tests/nullableTypes/redundantNullableInSupertype.kt +++ b/compiler/testData/diagnostics/tests/nullableTypes/redundantNullableInSupertype.kt @@ -1,3 +1,4 @@ +// WITH_EXTENDED_CHECKERS interface A interface X: A?? { diff --git a/compiler/testData/diagnostics/tests/regressions/Jet72.fir.kt b/compiler/testData/diagnostics/tests/regressions/Jet72.fir.kt deleted file mode 100644 index bc1521356d2..00000000000 --- a/compiler/testData/diagnostics/tests/regressions/Jet72.fir.kt +++ /dev/null @@ -1,18 +0,0 @@ -// JET-72 Type inference doesn't work when iterating over ArrayList - -import java.util.ArrayList - -abstract class Item(val room: Object) { - abstract val name : String -} - -val items: ArrayList = ArrayList() - -fun test(room : Object) { - for(item: Item? in items) { - if (item?.room === room) { - // item?.room is not null - System.out.println("You see " + item?.name) - } - } -} diff --git a/compiler/testData/diagnostics/tests/regressions/Jet72.kt b/compiler/testData/diagnostics/tests/regressions/Jet72.kt index 2b84212aa4a..16a4f674ac4 100644 --- a/compiler/testData/diagnostics/tests/regressions/Jet72.kt +++ b/compiler/testData/diagnostics/tests/regressions/Jet72.kt @@ -1,3 +1,5 @@ +// FIR_IDENTICAL +// WITH_EXTENDED_CHECKERS // JET-72 Type inference doesn't work when iterating over ArrayList import java.util.ArrayList diff --git a/compiler/testData/diagnostics/tests/regressions/kt334.fir.kt b/compiler/testData/diagnostics/tests/regressions/kt334.fir.kt index 06825f13115..8762c1cb2ed 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt334.fir.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt334.fir.kt @@ -1,8 +1,9 @@ // !CHECK_TYPE +// WITH_EXTENDED_CHECKERS -import java.lang.Comparable as Comparable +import java.lang.Comparable as Comparable -fun f(c: Comparable<*>) { +fun f(c: Comparable<*>) { checkSubtype>(c) - checkSubtype>(c) -} \ No newline at end of file + checkSubtype<java.lang.Comparable<*>>(c) +} diff --git a/compiler/testData/diagnostics/tests/regressions/kt334.kt b/compiler/testData/diagnostics/tests/regressions/kt334.kt index 3451af4ed2b..9a2130f0c61 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt334.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt334.kt @@ -1,4 +1,5 @@ // !CHECK_TYPE +// WITH_EXTENDED_CHECKERS import java.lang.Comparable as Comparable diff --git a/compiler/testData/diagnostics/tests/regressions/kt498.fir.kt b/compiler/testData/diagnostics/tests/regressions/kt498.fir.kt deleted file mode 100644 index 29c44271977..00000000000 --- a/compiler/testData/diagnostics/tests/regressions/kt498.fir.kt +++ /dev/null @@ -1,8 +0,0 @@ -// JAVAC_EXPECTED_FILE -// KT-498 Very strange error in the type checker - -class IdUnavailableException() : Exception() {} - -fun T.getJavaClass() : Class { - return ((this as Object).getClass()) as Class // Some error here, because of Exception() used above. ?!!! -} diff --git a/compiler/testData/diagnostics/tests/regressions/kt498.kt b/compiler/testData/diagnostics/tests/regressions/kt498.kt index 4df3c6fa476..77c546d6d79 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt498.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt498.kt @@ -1,3 +1,5 @@ +// FIR_IDENTICAL +// WITH_EXTENDED_CHECKERS // JAVAC_EXPECTED_FILE // KT-498 Very strange error in the type checker diff --git a/compiler/testData/diagnostics/tests/regressions/kt716.fir.kt b/compiler/testData/diagnostics/tests/regressions/kt716.fir.kt deleted file mode 100644 index 7c87483714c..00000000000 --- a/compiler/testData/diagnostics/tests/regressions/kt716.fir.kt +++ /dev/null @@ -1,16 +0,0 @@ -// KT-716 Type inference failed - -class TypeInfo - -fun typeinfo() : TypeInfo = null as TypeInfo - -fun TypeInfo.getJavaClass() : java.lang.Class { - val t : java.lang.Object = this as java.lang.Object - return t.getClass() as java.lang.Class // inferred type is Object but Serializable was expected -} - -fun getJavaClass() = typeinfo().getJavaClass() - -fun main() { - System.out.println(getJavaClass()) -} diff --git a/compiler/testData/diagnostics/tests/regressions/kt716.kt b/compiler/testData/diagnostics/tests/regressions/kt716.kt index 171d8986fc8..91901b113ad 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt716.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt716.kt @@ -1,3 +1,5 @@ +// FIR_IDENTICAL +// WITH_EXTENDED_CHECKERS // KT-716 Type inference failed class TypeInfo diff --git a/compiler/testData/diagnostics/tests/regressions/resolveSubclassOfList.fir.kt b/compiler/testData/diagnostics/tests/regressions/resolveSubclassOfList.fir.kt deleted file mode 100644 index 3864f5105af..00000000000 --- a/compiler/testData/diagnostics/tests/regressions/resolveSubclassOfList.fir.kt +++ /dev/null @@ -1,7 +0,0 @@ -import java.util.ArrayList - -fun foo(p: java.util.List) { - p.iterator(); // forcing resolve of java.util.List.iterator() - - ArrayList().iterator(); // this provoked exception in SignaturesPropagationData -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/regressions/resolveSubclassOfList.kt b/compiler/testData/diagnostics/tests/regressions/resolveSubclassOfList.kt index 93f595a6f9a..b291496b3f1 100644 --- a/compiler/testData/diagnostics/tests/regressions/resolveSubclassOfList.kt +++ b/compiler/testData/diagnostics/tests/regressions/resolveSubclassOfList.kt @@ -1,3 +1,5 @@ +// FIR_IDENTICAL +// WITH_EXTENDED_CHECKERS import java.util.ArrayList fun foo(p: java.util.List) { diff --git a/compiler/testData/diagnostics/tests/scopes/visibility2.fir.kt b/compiler/testData/diagnostics/tests/scopes/visibility2.fir.kt index c2d2227d2e5..81d23b2c0d2 100644 --- a/compiler/testData/diagnostics/tests/scopes/visibility2.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/visibility2.fir.kt @@ -1,5 +1,7 @@ // !DIAGNOSTICS: -UNUSED_VARIABLE // JAVAC_EXPECTED_FILE +// WITH_EXTENDED_CHECKERS + //FILE:a.kt package a @@ -44,6 +46,6 @@ class Q { } //check that 'toString' can be invoked without specifying return type -class NewClass : java.util.ArrayList() { - public override fun toString() = "a" +class NewClass : java.util.ArrayList<Integer>() { + public override fun toString() = "a" } diff --git a/compiler/testData/diagnostics/tests/scopes/visibility2.kt b/compiler/testData/diagnostics/tests/scopes/visibility2.kt index 85d0603543c..6363af5b456 100644 --- a/compiler/testData/diagnostics/tests/scopes/visibility2.kt +++ b/compiler/testData/diagnostics/tests/scopes/visibility2.kt @@ -1,5 +1,7 @@ // !DIAGNOSTICS: -UNUSED_VARIABLE // JAVAC_EXPECTED_FILE +// WITH_EXTENDED_CHECKERS + //FILE:a.kt package a