From 9ce8420491a85bb6ed35587ea0bef3a69a890703 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 18 Mar 2021 22:24:14 +0300 Subject: [PATCH] FIR: introduce not implemented checker --- .../resolve/diagnostics/abstractSuperCall.kt | 2 +- .../properties/kotlinOverridesJavaComplex.kt | 2 +- .../diagnostics/FirDiagnosticsList.kt | 17 +++ .../fir/analysis/diagnostics/FirErrors.kt | 4 + .../FirNotImplementedOverrideChecker.kt | 116 ++++++++++++++++++ .../diagnostics/FirDefaultErrorMessages.kt | 29 +++++ .../diagnostics/FirDiagnosticRenderers.kt | 6 + .../fir/checkers/CommonDeclarationCheckers.kt | 1 + .../rendering/notImplementedMembers.fir.kt | 4 +- .../tests/declarationChecks/kt1141.fir.kt | 4 +- .../tests/declarationChecks/kt559.fir.kt | 30 ----- .../tests/declarationChecks/kt559.kt | 1 + .../delegation/DelegationAndOverriding.fir.kt | 4 +- .../irrelevantImplMutableList.fir.kt | 2 +- .../irrelevantImplMutableListKotlin.fir.kt | 2 +- .../tests/j+k/kt6720_abstractProperty.fir.kt | 2 +- .../modifiers/const/applicability.fir.kt | 2 +- ...ideMethodsFromInterfaceInCommonCode.fir.kt | 28 ----- ...verrideMethodsFromInterfaceInCommonCode.kt | 1 + .../override/AbstractFunNotImplemented.fir.kt | 6 - .../override/AbstractFunNotImplemented.kt | 1 + .../override/AbstractValNotImplemented.fir.kt | 6 - .../override/AbstractValNotImplemented.kt | 1 + .../override/AbstractVarNotImplemented.fir.kt | 6 - .../override/AbstractVarNotImplemented.kt | 1 + .../tests/override/NonGenerics.fir.kt | 8 +- .../diagnostics/tests/override/kt12358.fir.kt | 9 -- .../diagnostics/tests/override/kt12358.kt | 1 + .../diagnostics/tests/override/kt12467.fir.kt | 14 --- .../diagnostics/tests/override/kt12467.kt | 1 + .../diagnostics/tests/override/kt2052.fir.kt | 10 -- .../diagnostics/tests/override/kt2052.kt | 1 + .../tests/override/kt4763property.fir.kt | 2 +- .../overrideMemberFromFinalClass.fir.kt | 2 +- .../tests/platformTypes/rawOverrides.fir.kt | 2 +- .../platformTypes/rawSamOverrides.fir.kt | 2 +- ...ertypeDifferentParameterNullability.fir.kt | 8 +- .../tests/resolve/HiddenDeclarations.fir.kt | 2 +- .../jvmRecordDescriptorStructure.fir.kt | 2 +- .../kSuspendFunctionAsSupertype.fir.kt | 2 +- .../coroutines/suspendOverridability.fir.kt | 2 +- .../abstract-classes/p-2/neg/1.1.fir.kt | 4 +- .../abstract-classes/p-2/neg/1.10.fir.kt | 6 +- .../abstract-classes/p-2/neg/1.3.fir.kt | 2 +- .../abstract-classes/p-2/neg/1.4.fir.kt | 8 +- .../descriptors/java/JavaVisibilities.kt | 5 + .../kotlin/descriptors/Visibility.kt | 4 + .../diagnostics/KtFirDataClassConverters.kt | 32 +++++ .../api/fir/diagnostics/KtFirDiagnostics.kt | 24 ++++ .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 36 ++++++ 50 files changed, 320 insertions(+), 147 deletions(-) create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirNotImplementedOverrideChecker.kt delete mode 100644 compiler/testData/diagnostics/tests/declarationChecks/kt559.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/multiplatform/headerClass/dontOverrideMethodsFromInterfaceInCommonCode.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/override/kt12358.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/override/kt12467.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/override/kt2052.fir.kt diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/abstractSuperCall.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/abstractSuperCall.kt index 4c7e16469db..0582968491c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/abstractSuperCall.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/abstractSuperCall.kt @@ -16,7 +16,7 @@ abstract class A : C() { } } -class B : A() { +class B : A() { override fun f() { } diff --git a/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.kt b/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.kt index 764cc3c8833..45f222974e2 100644 --- a/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.kt +++ b/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.kt @@ -39,7 +39,7 @@ public class LightMember : Member, Light() { override fun getName(): String = "Light" } -public class LightClassWrapper : Light(), Klass { +public class LightClassWrapper : Light(), Klass { fun test() = typeParameters.single() } 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 355a72d19cc..a2a88b9995a 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 @@ -291,6 +291,23 @@ object DIAGNOSTICS_LIST : DiagnosticList() { parameter("containingClassName") } + val ABSTRACT_MEMBER_NOT_IMPLEMENTED by error(PositioningStrategy.DECLARATION_NAME) { + parameter>("classOrObject") + parameter>("missingDeclaration") + } + val ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED by error(PositioningStrategy.DECLARATION_NAME) { + parameter>("classOrObject") + parameter>("missingDeclaration") + } + val MANY_IMPL_MEMBER_NOT_IMPLEMENTED by error(PositioningStrategy.DECLARATION_NAME) { + parameter>("classOrObject") + parameter>("missingDeclaration") + } + val MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED by error(PositioningStrategy.DECLARATION_NAME) { + parameter>("classOrObject") + parameter>("missingDeclaration") + } + val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error(PositioningStrategy.DECLARATION_RETURN_TYPE) { parameter("function") parameter("superFunction") 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 3ddf5ad6838..4d81dcb5e31 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 @@ -208,6 +208,10 @@ object FirErrors { val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val OVERRIDING_FINAL_MEMBER by error2, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER) + val ABSTRACT_MEMBER_NOT_IMPLEMENTED by error2, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) + val ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED by error2, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) + val MANY_IMPL_MEMBER_NOT_IMPLEMENTED by error2, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) + val MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED by error2, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error2(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error2(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) val VAR_TYPE_MISMATCH_ON_OVERRIDE by error2(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirNotImplementedOverrideChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirNotImplementedOverrideChecker.kt new file mode 100644 index 00000000000..b466658a104 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirNotImplementedOverrideChecker.kt @@ -0,0 +1,116 @@ +/* + * 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.declaration + +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.FirFakeSourceElementKind +import org.jetbrains.kotlin.fir.HASHCODE_NAME +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClass +import org.jetbrains.kotlin.fir.analysis.checkers.modality +import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope +import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.fir.types.isNullableAny +import org.jetbrains.kotlin.util.OperatorNameConventions + +object FirNotImplementedOverrideChecker : FirClassChecker() { + + override fun check(declaration: FirClass<*>, context: CheckerContext, reporter: DiagnosticReporter) { + // TODO: kt4763Property: reporting on `object` literal causes invalid error in test...FirDiagnosticHandler + if (declaration !is FirRegularClass) return + + val source = declaration.source ?: return + if (source.kind is FirFakeSourceElementKind) return + val modality = declaration.modality() + if (modality == Modality.ABSTRACT || modality == Modality.SEALED) return + if (declaration.isExpect) return + val classKind = declaration.classKind + // TODO: we should check enum entries (probably as anonymous objects, see above) + if (classKind == ClassKind.ANNOTATION_CLASS || classKind == ClassKind.ENUM_CLASS) return + + val classScope = declaration.unsubstitutedScope( + context.session, context.sessionHolder.scopeSession, withForcedTypeCalculator = false + ) + + val notImplementedSymbols = mutableListOf>() + val classPackage = declaration.symbol.classId.packageFqName + + fun FirCallableMemberDeclaration<*>.isInvisible(): Boolean { + if (visibility == Visibilities.Private || + !visibility.visibleFromPackage(classPackage, symbol.callableId.packageName) + ) return true + if (visibility == Visibilities.Internal && + session !== declaration.session + ) return true + return false + } + + fun FirCallableMemberDeclaration<*>.shouldBeImplemented(): Boolean { + if (!isAbstract) return false + val containingClass = getContainingClass(context) + if (containingClass === declaration) return false + if (containingClass is FirRegularClass && containingClass.isExpect) return false + return true + } + + for (name in classScope.getCallableNames()) { + classScope.processFunctionsByName(name) { namedFunctionSymbol -> + val simpleFunction = namedFunctionSymbol.fir + if (!simpleFunction.shouldBeImplemented()) return@processFunctionsByName + // TODO: private & package-private functions / properties require another diagnostic + // (INVISIBLE_ABSTRACT_MEMBER_FROM_SUPER) + if (simpleFunction.isInvisible()) return@processFunctionsByName + + if (declaration.isData && simpleFunction.matchesDataClassSyntheticMemberSignatures) return@processFunctionsByName + + // TODO: suspend function overridden by a Java class in the middle is not properly regarded as an override + if (simpleFunction.isSuspend) return@processFunctionsByName + notImplementedSymbols += namedFunctionSymbol + } + classScope.processPropertiesByName(name) { propertySymbol -> + val property = propertySymbol.fir as? FirProperty ?: return@processPropertiesByName + if (!property.shouldBeImplemented()) return@processPropertiesByName + if (property.isInvisible()) return@processPropertiesByName + + notImplementedSymbols += propertySymbol + } + } + + if (notImplementedSymbols.isNotEmpty()) { + val notImplemented = notImplementedSymbols.first().fir + if (notImplemented.isFromInterface(context)) { + reporter.reportOn(source, FirErrors.ABSTRACT_MEMBER_NOT_IMPLEMENTED, declaration, notImplemented, context) + } else { + reporter.reportOn(source, FirErrors.ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED, declaration, notImplemented, context) + } + } + } + + private fun FirCallableDeclaration<*>.isFromInterface(context: CheckerContext): Boolean = + (getContainingClass(context) as? FirRegularClass)?.isInterface == true + + private val FirSimpleFunction.matchesDataClassSyntheticMemberSignatures: Boolean + get() = (this.name == OperatorNameConventions.EQUALS && matchesEqualsSignature) || + (this.name == HASHCODE_NAME && matchesHashCodeSignature) || + (this.name == OperatorNameConventions.TO_STRING && matchesToStringSignature) + + // NB: we intentionally do not check return types + private val FirSimpleFunction.matchesEqualsSignature: Boolean + get() = valueParameters.size == 1 && valueParameters[0].returnTypeRef.coneType.isNullableAny + + private val FirSimpleFunction.matchesHashCodeSignature: Boolean + get() = valueParameters.isEmpty() + + private val FirSimpleFunction.matchesToStringSignature: Boolean + get() = valueParameters.isEmpty() +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt index 5daa93faf2e..798d6d6bd93 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FQ_N import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.NAME import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.NULLABLE_STRING import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.PROPERTY_NAME +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_CLASS_OR_OBJECT import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOLS @@ -21,9 +22,11 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.TO_S import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.VISIBILITY import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.WHEN_MISSING_CASES import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSENCE_OF_PRIMARY_CONSTRUCTOR_FOR_INLINE_CLASS +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSTRACT_DELEGATED_PROPERTY import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSTRACT_FUNCTION_WITH_BODY +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSTRACT_MEMBER_NOT_IMPLEMENTED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSTRACT_PROPERTY_WITH_GETTER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABSTRACT_PROPERTY_WITH_INITIALIZER @@ -117,6 +120,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.LOCAL_ANNOTATION_ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.LOCAL_INTERFACE_NOT_ALLOWED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.LOCAL_OBJECT_NOT_ALLOWED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MANY_COMPANION_OBJECTS +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MANY_IMPL_MEMBER_NOT_IMPLEMENTED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_VAL_ON_ANNOTATION_PARAMETER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_VARARG_PARAMETERS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED @@ -455,6 +459,31 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension { TO_STRING ) + map.put( + ABSTRACT_MEMBER_NOT_IMPLEMENTED, + "{0} is not abstract and does not implement abstract member {1}", + RENDER_CLASS_OR_OBJECT, + FQ_NAMES_IN_TYPES + ) + map.put( + ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED, + "{0} is not abstract and does not implement abstract base class member {1}", + RENDER_CLASS_OR_OBJECT, + FQ_NAMES_IN_TYPES + ) + map.put( + MANY_IMPL_MEMBER_NOT_IMPLEMENTED, + "{0} must override {1} because it inherits many implementations of it", + RENDER_CLASS_OR_OBJECT, + FQ_NAMES_IN_TYPES + ) + map.put( + MANY_IMPL_MEMBER_NOT_IMPLEMENTED, + "{0} must override {1} because it inherits multiple interface methods of it", + RENDER_CLASS_OR_OBJECT, + FQ_NAMES_IN_TYPES + ) + map.put( RETURN_TYPE_MISMATCH_ON_OVERRIDE, "Return type of ''{0}'' is not a subtype of the return type of the overridden member ''{1}''", diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt index 858c77573bb..06ffd08ad26 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt @@ -77,6 +77,12 @@ object FirDiagnosticRenderers { name.asString() } + val RENDER_CLASS_OR_OBJECT = Renderer { firClass: FirClass<*> -> + val name = firClass.classId.relativeClassName.asString() + val classOrObject = if (firClass is FirRegularClass) "Class" else "Object" + "$classOrObject $name" + } + val RENDER_TYPE = Renderer { t: ConeKotlinType -> // TODO: need a way to tune granuality, e.g., without parameter names in functional types. t.render() diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CommonDeclarationCheckers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CommonDeclarationCheckers.kt index 8ebc705f4f2..0ac037f7846 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CommonDeclarationCheckers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CommonDeclarationCheckers.kt @@ -40,6 +40,7 @@ object CommonDeclarationCheckers : DeclarationCheckers() { override val classCheckers: Set = setOf( FirOverrideChecker, + FirNotImplementedOverrideChecker, FirThrowableSubclassChecker, FirOpenMemberChecker, ) diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.fir.kt b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.fir.kt index 490a2df7c96..1aa58d30f08 100644 --- a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.fir.kt @@ -23,8 +23,8 @@ abstract class D { abstract val d: @An Int } -class E : D(), A -class F : A +class E : D(), A +class F : A @An interface G { diff --git a/compiler/testData/diagnostics/tests/declarationChecks/kt1141.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/kt1141.fir.kt index bf8bdff235d..3a78cf9adad 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/kt1141.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/kt1141.fir.kt @@ -12,9 +12,9 @@ fun foo() { x.foo() } -object Rr : SomeTrait {} +object Rr : SomeTrait {} -class C : SomeTrait {} +class C : SomeTrait {} fun foo2() { val r = object : Runnable {} //no error diff --git a/compiler/testData/diagnostics/tests/declarationChecks/kt559.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/kt559.fir.kt deleted file mode 100644 index 8ad56c8ea24..00000000000 --- a/compiler/testData/diagnostics/tests/declarationChecks/kt559.fir.kt +++ /dev/null @@ -1,30 +0,0 @@ -//KT-559 Forbid abstract method call through super - -package kt559 - -abstract class A { - abstract val i : Int - - abstract fun foo() : Int - - fun fff() {} -} - -abstract class D(): A() { - override val i : Int = 34 -} - -class C() : D() { - fun test() { - super.i - } -} - -class B() : A() { - override fun foo(): Int { - super.i - - super.fff() //everything is ok - return super.foo() - } -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/declarationChecks/kt559.kt b/compiler/testData/diagnostics/tests/declarationChecks/kt559.kt index 63288a77791..7ac745da65a 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/kt559.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/kt559.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL //KT-559 Forbid abstract method call through super package kt559 diff --git a/compiler/testData/diagnostics/tests/delegation/DelegationAndOverriding.fir.kt b/compiler/testData/diagnostics/tests/delegation/DelegationAndOverriding.fir.kt index 0f8abd5ae75..9ef3a0cfb89 100644 --- a/compiler/testData/diagnostics/tests/delegation/DelegationAndOverriding.fir.kt +++ b/compiler/testData/diagnostics/tests/delegation/DelegationAndOverriding.fir.kt @@ -5,11 +5,11 @@ interface T { val v : Int } -open class Br(t : T) : T { +open class Br(t : T) : T { } -class Br3(t : T) : Br(t) { +class Br3(t : T) : Br(t) { } diff --git a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableList.fir.kt b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableList.fir.kt index 68b8dad2acd..a05a08eca6a 100644 --- a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableList.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableList.fir.kt @@ -108,7 +108,7 @@ public class A extends AImpl implements List { } // FILE: X.kt -class X : A() +class X : A() fun main() { val x = X() diff --git a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableListKotlin.fir.kt b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableListKotlin.fir.kt index 4c7f99d2c13..98e9889af42 100644 --- a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableListKotlin.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableListKotlin.fir.kt @@ -95,7 +95,7 @@ public class A extends AImpl implements List { } // FILE: X.kt -class X : A() +class X : A() fun main() { val x = X() diff --git a/compiler/testData/diagnostics/tests/j+k/kt6720_abstractProperty.fir.kt b/compiler/testData/diagnostics/tests/j+k/kt6720_abstractProperty.fir.kt index 988e5ec6549..2ea24204005 100644 --- a/compiler/testData/diagnostics/tests/j+k/kt6720_abstractProperty.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/kt6720_abstractProperty.fir.kt @@ -11,7 +11,7 @@ public abstract class B implements A { // FILE: C.kt -class C : B() +class C : B() fun main() { C().a diff --git a/compiler/testData/diagnostics/tests/modifiers/const/applicability.fir.kt b/compiler/testData/diagnostics/tests/modifiers/const/applicability.fir.kt index e60620ff353..0915c220c1d 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/applicability.fir.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/applicability.fir.kt @@ -24,7 +24,7 @@ abstract class C { } } -object D : C() { +object D : C() { override const val x: Int = 9 const val inObject = 10 diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/dontOverrideMethodsFromInterfaceInCommonCode.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/dontOverrideMethodsFromInterfaceInCommonCode.fir.kt deleted file mode 100644 index 6aba00b82ad..00000000000 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/dontOverrideMethodsFromInterfaceInCommonCode.fir.kt +++ /dev/null @@ -1,28 +0,0 @@ -// !LANGUAGE: +MultiPlatformProjects -// MODULE: m1-common -// FILE: common.kt - -interface Foo { - fun foo() -} - -expect class ImplicitFoo : Foo - -expect class ExplicitFoo : Foo { - override fun foo() -} - -expect class ImplicitFooCheck : Foo - -// MODULE: m2-jvm(m1-common) -// FILE: jvm.kt - -actual class ImplicitFoo : Foo { - override fun foo() {} -} - -actual class ExplicitFoo : Foo { - actual override fun foo() {} -} - -actual class ImplicitFooCheck : Foo \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/dontOverrideMethodsFromInterfaceInCommonCode.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/dontOverrideMethodsFromInterfaceInCommonCode.kt index 5f8e04bd584..628118196a8 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/dontOverrideMethodsFromInterfaceInCommonCode.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/dontOverrideMethodsFromInterfaceInCommonCode.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +MultiPlatformProjects // MODULE: m1-common // FILE: common.kt diff --git a/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.fir.kt b/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.fir.kt deleted file mode 100644 index 1059e1aae84..00000000000 --- a/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -abstract class A { - abstract fun foo(): Int -} - -class B() : A() { -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.kt b/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.kt index 2b74895453e..9a4ca11ee20 100644 --- a/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.kt +++ b/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class A { abstract fun foo(): Int } diff --git a/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.fir.kt b/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.fir.kt deleted file mode 100644 index 813af28f460..00000000000 --- a/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -abstract class A { - abstract val i: Int -} - -class B() : A() { -} diff --git a/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.kt b/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.kt index 657e761ca49..44bd6ce4009 100644 --- a/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.kt +++ b/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class A { abstract val i: Int } diff --git a/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.fir.kt b/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.fir.kt deleted file mode 100644 index 27305d3b2fa..00000000000 --- a/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -abstract class A { - abstract var i: Int -} - -class B() : A() { -} diff --git a/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.kt b/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.kt index df976efe482..51203b2b4a2 100644 --- a/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.kt +++ b/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class A { abstract var i: Int } diff --git a/compiler/testData/diagnostics/tests/override/NonGenerics.fir.kt b/compiler/testData/diagnostics/tests/override/NonGenerics.fir.kt index 4d62a6854ba..1f259df7adf 100644 --- a/compiler/testData/diagnostics/tests/override/NonGenerics.fir.kt +++ b/compiler/testData/diagnostics/tests/override/NonGenerics.fir.kt @@ -21,21 +21,21 @@ open class MyClass() : MyTrait, MyAbstractClass() { class MyChildClass() : MyClass() {} -class MyIllegalClass : MyTrait, MyAbstractClass() {} +class MyIllegalClass : MyTrait, MyAbstractClass() {} -class MyIllegalClass2() : MyTrait, MyAbstractClass() { +class MyIllegalClass2() : MyTrait, MyAbstractClass() { override fun foo() {} override val pr : Unit = Unit override val prr : Unit = Unit } -class MyIllegalClass3() : MyTrait, MyAbstractClass() { +class MyIllegalClass3() : MyTrait, MyAbstractClass() { override fun bar() {} override val pr : Unit = Unit override val prr : Unit = Unit } -class MyIllegalClass4() : MyTrait, MyAbstractClass() { +class MyIllegalClass4() : MyTrait, MyAbstractClass() { fun foo() {} val pr : Unit override fun other() {} diff --git a/compiler/testData/diagnostics/tests/override/kt12358.fir.kt b/compiler/testData/diagnostics/tests/override/kt12358.fir.kt deleted file mode 100644 index 74b73cf0ba5..00000000000 --- a/compiler/testData/diagnostics/tests/override/kt12358.fir.kt +++ /dev/null @@ -1,9 +0,0 @@ -abstract class A { - abstract override fun toString(): String -} - -interface B - -abstract class C : A(), B - -class Test : C() diff --git a/compiler/testData/diagnostics/tests/override/kt12358.kt b/compiler/testData/diagnostics/tests/override/kt12358.kt index 3b815e8408f..24b18367b84 100644 --- a/compiler/testData/diagnostics/tests/override/kt12358.kt +++ b/compiler/testData/diagnostics/tests/override/kt12358.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class A { abstract override fun toString(): String } diff --git a/compiler/testData/diagnostics/tests/override/kt12467.fir.kt b/compiler/testData/diagnostics/tests/override/kt12467.fir.kt deleted file mode 100644 index a6028721b18..00000000000 --- a/compiler/testData/diagnostics/tests/override/kt12467.fir.kt +++ /dev/null @@ -1,14 +0,0 @@ -interface A { - fun test() { - } -} - -interface B : A { - override fun test() -} - -interface C : A - -interface D : C, B - -class K : D diff --git a/compiler/testData/diagnostics/tests/override/kt12467.kt b/compiler/testData/diagnostics/tests/override/kt12467.kt index 0e1e026b3d2..795e3ef9c54 100644 --- a/compiler/testData/diagnostics/tests/override/kt12467.kt +++ b/compiler/testData/diagnostics/tests/override/kt12467.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun test() { } diff --git a/compiler/testData/diagnostics/tests/override/kt2052.fir.kt b/compiler/testData/diagnostics/tests/override/kt2052.fir.kt deleted file mode 100644 index 6b263071aa5..00000000000 --- a/compiler/testData/diagnostics/tests/override/kt2052.fir.kt +++ /dev/null @@ -1,10 +0,0 @@ -interface Runnable { - fun run() -} - -class C { - fun f() { - class MyRunnable(): Runnable { - } - } -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/override/kt2052.kt b/compiler/testData/diagnostics/tests/override/kt2052.kt index 4bd747ddc11..c26ff5fe4c1 100644 --- a/compiler/testData/diagnostics/tests/override/kt2052.kt +++ b/compiler/testData/diagnostics/tests/override/kt2052.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Runnable { fun run() } diff --git a/compiler/testData/diagnostics/tests/override/kt4763property.fir.kt b/compiler/testData/diagnostics/tests/override/kt4763property.fir.kt index e14e07a22f3..4d965b07528 100644 --- a/compiler/testData/diagnostics/tests/override/kt4763property.fir.kt +++ b/compiler/testData/diagnostics/tests/override/kt4763property.fir.kt @@ -6,6 +6,6 @@ open class Q { val x: Int = 42 } -class R : P, Q() +class R : P, Q() val s: Q = object : Q(), P {} diff --git a/compiler/testData/diagnostics/tests/override/overrideMemberFromFinalClass.fir.kt b/compiler/testData/diagnostics/tests/override/overrideMemberFromFinalClass.fir.kt index 1de65fcccc4..5e5f2b41812 100644 --- a/compiler/testData/diagnostics/tests/override/overrideMemberFromFinalClass.fir.kt +++ b/compiler/testData/diagnostics/tests/override/overrideMemberFromFinalClass.fir.kt @@ -22,7 +22,7 @@ abstract class A2 { abstract fun foo() } -class B2 : A2() +class B2 : A2() class C2 : B2() { override fun foo() {} } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawOverrides.fir.kt b/compiler/testData/diagnostics/tests/platformTypes/rawOverrides.fir.kt index 6dab60f9d3d..2923b6e0549 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawOverrides.fir.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawOverrides.fir.kt @@ -33,7 +33,7 @@ class E : D(), B { override fun bar(x: CharSequence?, y: List<*>?): String = "" } -class E2 : B { +class E2 : B { override fun foo(x: Any, y: List): String = "" } diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawSamOverrides.fir.kt b/compiler/testData/diagnostics/tests/platformTypes/rawSamOverrides.fir.kt index ce1dd6cabcd..bfd6557874e 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/rawSamOverrides.fir.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/rawSamOverrides.fir.kt @@ -36,6 +36,6 @@ class E1 : C.D(), B { override fun foo(x: Any, y: Fun) {} } -class E2 : B { +class E2 : B { override fun foo(x: Any, y: Fun) {} } diff --git a/compiler/testData/diagnostics/tests/platformTypes/typeEnhancement/supertypeDifferentParameterNullability.fir.kt b/compiler/testData/diagnostics/tests/platformTypes/typeEnhancement/supertypeDifferentParameterNullability.fir.kt index d7cb1f069f0..2dcd146db9a 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/typeEnhancement/supertypeDifferentParameterNullability.fir.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/typeEnhancement/supertypeDifferentParameterNullability.fir.kt @@ -14,20 +14,20 @@ public interface B { // FILE: C.kt -class C1 : A, B { +class C1 : A, B { override fun foo(x: String) {} } -class C2 : A, B { +class C2 : A, B { override fun foo(x: String?) {} } interface I : A, B -class C3 : I { +class C3 : I { override fun foo(x: String) {} } -class C4 : I { +class C4 : I { override fun foo(x: String?) {} } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.fir.kt b/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.fir.kt index 6dc7b1e0692..d926d7909b9 100644 --- a/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.fir.kt +++ b/compiler/testData/diagnostics/tests/resolve/HiddenDeclarations.fir.kt @@ -57,7 +57,7 @@ interface I { fun foo2() } -class X : I { +class X : I { override fun foo1() { } } diff --git a/compiler/testData/diagnostics/tests/testsWithJava15/jvmRecord/jvmRecordDescriptorStructure.fir.kt b/compiler/testData/diagnostics/tests/testsWithJava15/jvmRecord/jvmRecordDescriptorStructure.fir.kt index 6d691424021..f2c687829c5 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava15/jvmRecord/jvmRecordDescriptorStructure.fir.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava15/jvmRecord/jvmRecordDescriptorStructure.fir.kt @@ -10,5 +10,5 @@ class BasicRecord(val x: String) data class BasicDataRecord(val x: String) @JvmRecord -class BasicRecordWithSuperClass(val x: String) : Record() +class BasicRecordWithSuperClass(val x: String) : Record() diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/kSuspendFunctionAsSupertype.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/kSuspendFunctionAsSupertype.fir.kt index ad940515d8c..ec1c040f115 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/kSuspendFunctionAsSupertype.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/kSuspendFunctionAsSupertype.fir.kt @@ -2,4 +2,4 @@ import kotlin.reflect.* -class A: KSuspendFunction0 {} \ No newline at end of file +class A: KSuspendFunction0 {} diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendOverridability.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendOverridability.fir.kt index fb98c19ac93..a830cbed5f3 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendOverridability.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendOverridability.fir.kt @@ -24,7 +24,7 @@ interface C : A { } } -class D : J { +class D : J { suspend override fun foo() { } diff --git a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.1.fir.kt b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.1.fir.kt index 6686fdbde50..374f07d6606 100644 --- a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.1.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.1.fir.kt @@ -67,7 +67,7 @@ fun case3() { ImplBaseCase3() } -class ImplBaseCase3() : Base() { +class ImplBaseCase3() : Base() { override var b: Any get() = TODO() set(value) {} @@ -95,7 +95,7 @@ fun case4() { ImplBaseCase4() } -class ImplBaseCase4() : Base() { +class ImplBaseCase4() : Base() { override var b: Any get() = TODO() set(value) {} diff --git a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.10.fir.kt b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.10.fir.kt index 71081ce10e0..961f7fee104 100644 --- a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.10.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.10.fir.kt @@ -26,7 +26,7 @@ class Case2Outer { } inner - class A() : Case2Base() { + class A() : Case2Base() { } } @@ -36,7 +36,7 @@ fun case3() { object : CaseOuter.CaseBase() {}.outerFoo() } -class B() : CaseOuter.CaseBase() {} +class B() : CaseOuter.CaseBase() {} sealed class CaseOuter { val v = "v" @@ -46,6 +46,6 @@ sealed class CaseOuter { abstract fun foo(): String } - class A() : CaseBase() { + class A() : CaseBase() { } } diff --git a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.3.fir.kt b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.3.fir.kt index 3f25c0fadc5..46120b76c07 100644 --- a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.3.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.3.fir.kt @@ -41,7 +41,7 @@ class Case2(override val a: String, override var b: class ImplBase1 : MainClass.Base1() {} } class MainClass { diff --git a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.4.fir.kt b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.4.fir.kt index e29283c0f0c..445d979cfd6 100644 --- a/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.4.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.4.fir.kt @@ -30,7 +30,7 @@ class Case1 { inner - class ImplBase2_1 : ImplBase2() { + class ImplBase2_1 : ImplBase2() { override var b: CharSequence = "" override fun boo(x: Int) {} } @@ -80,7 +80,7 @@ abstract class BaseCase3{ * NOTE: abstract class implements kotlin interface */ -class Case4(a: String) : BaseCase4(a) {} +class Case4(a: String) : BaseCase4(a) {} interface InterfaceCase4 { fun foo(): String @@ -97,7 +97,7 @@ abstract class BaseCase4(val a: String) : InterfaceCase4 {} * NOTE: abstract class implements java interface */ -class Case5(a: String) : BaseCase5(a) {} +class Case5(a: String) : BaseCase5(a) {} abstract class BaseCase5(val a: String) : java.util.Deque {} @@ -106,6 +106,6 @@ abstract class BaseCase5(val a: String) : java.util.Deque {} * NOTE: abstract class implements java abstract class */ -class Case6(a: String) : BaseCase6(a) {} +class Case6(a: String) : BaseCase6(a) {} abstract class BaseCase6(val a: String) : java.util.AbstractCollection() {} diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/descriptors/java/JavaVisibilities.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/descriptors/java/JavaVisibilities.kt index ba61a7e7f51..0ef56ff1e15 100644 --- a/core/compiler.common.jvm/src/org/jetbrains/kotlin/descriptors/java/JavaVisibilities.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/descriptors/java/JavaVisibilities.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.descriptors.java import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.name.FqName object JavaVisibilities { object PackageVisibility : Visibility("package", isPublicAPI = false) { @@ -32,6 +33,10 @@ object JavaVisibilities { override fun customEffectiveVisibility(): EffectiveVisibility? { return EffectiveVisibility.PackagePrivate } + + override fun visibleFromPackage(fromPackage: FqName, myPackage: FqName): Boolean { + return fromPackage == myPackage + } } object ProtectedStaticVisibility : Visibility("protected_static", isPublicAPI = true) { diff --git a/core/compiler.common/src/org/jetbrains/kotlin/descriptors/Visibility.kt b/core/compiler.common/src/org/jetbrains/kotlin/descriptors/Visibility.kt index ab3dcd81ada..873cd0b746b 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/descriptors/Visibility.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/descriptors/Visibility.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.descriptors +import org.jetbrains.kotlin.name.FqName + abstract class Visibility protected constructor( val name: String, val isPublicAPI: Boolean @@ -27,4 +29,6 @@ abstract class Visibility protected constructor( // Should be overloaded in Java visibilities open fun customEffectiveVisibility(): EffectiveVisibility? = null + + open fun visibleFromPackage(fromPackage: FqName, myPackage: FqName): Boolean = true } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index f7093066fa6..2b60ef07674 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -880,6 +880,38 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.ABSTRACT_MEMBER_NOT_IMPLEMENTED) { firDiagnostic -> + AbstractMemberNotImplementedImpl( + firSymbolBuilder.buildClassLikeSymbol(firDiagnostic.a), + firSymbolBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration), + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED) { firDiagnostic -> + AbstractClassMemberNotImplementedImpl( + firSymbolBuilder.buildClassLikeSymbol(firDiagnostic.a), + firSymbolBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration), + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.MANY_IMPL_MEMBER_NOT_IMPLEMENTED) { firDiagnostic -> + ManyImplMemberNotImplementedImpl( + firSymbolBuilder.buildClassLikeSymbol(firDiagnostic.a), + firSymbolBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration), + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED) { firDiagnostic -> + ManyInterfacesMemberNotImplementedImpl( + firSymbolBuilder.buildClassLikeSymbol(firDiagnostic.a), + firSymbolBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration), + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } add(FirErrors.RETURN_TYPE_MISMATCH_ON_OVERRIDE) { firDiagnostic -> ReturnTypeMismatchOnOverrideImpl( firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt index c9c81b6966c..3f0406144fe 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt @@ -625,6 +625,30 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract val containingClassName: Name } + abstract class AbstractMemberNotImplemented : KtFirDiagnostic() { + override val diagnosticClass get() = AbstractMemberNotImplemented::class + abstract val classOrObject: KtClassLikeSymbol + abstract val missingDeclaration: KtCallableSymbol + } + + abstract class AbstractClassMemberNotImplemented : KtFirDiagnostic() { + override val diagnosticClass get() = AbstractClassMemberNotImplemented::class + abstract val classOrObject: KtClassLikeSymbol + abstract val missingDeclaration: KtCallableSymbol + } + + abstract class ManyImplMemberNotImplemented : KtFirDiagnostic() { + override val diagnosticClass get() = ManyImplMemberNotImplemented::class + abstract val classOrObject: KtClassLikeSymbol + abstract val missingDeclaration: KtCallableSymbol + } + + abstract class ManyInterfacesMemberNotImplemented : KtFirDiagnostic() { + override val diagnosticClass get() = ManyInterfacesMemberNotImplemented::class + abstract val classOrObject: KtClassLikeSymbol + abstract val missingDeclaration: KtCallableSymbol + } + abstract class ReturnTypeMismatchOnOverride : KtFirDiagnostic() { override val diagnosticClass get() = ReturnTypeMismatchOnOverride::class abstract val function: KtSymbol diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index bea8645439b..58d4f95e38d 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -1007,6 +1007,42 @@ internal class OverridingFinalMemberImpl( override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) } +internal class AbstractMemberNotImplementedImpl( + override val classOrObject: KtClassLikeSymbol, + override val missingDeclaration: KtCallableSymbol, + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.AbstractMemberNotImplemented(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class AbstractClassMemberNotImplementedImpl( + override val classOrObject: KtClassLikeSymbol, + override val missingDeclaration: KtCallableSymbol, + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.AbstractClassMemberNotImplemented(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class ManyImplMemberNotImplementedImpl( + override val classOrObject: KtClassLikeSymbol, + override val missingDeclaration: KtCallableSymbol, + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.ManyImplMemberNotImplemented(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class ManyInterfacesMemberNotImplementedImpl( + override val classOrObject: KtClassLikeSymbol, + override val missingDeclaration: KtCallableSymbol, + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.ManyInterfacesMemberNotImplemented(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + internal class ReturnTypeMismatchOnOverrideImpl( override val function: KtSymbol, override val superFunction: KtSymbol,