diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 5a9b88570cc..2daabe5891b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -245,7 +245,7 @@ public interface Errors { DiagnosticFactory0 SUPERTYPE_NOT_INITIALIZED = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 DELEGATION_NOT_TO_INTERFACE = DiagnosticFactory0.create(ERROR); - DiagnosticFactory2> DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE = DiagnosticFactory2.create(ERROR); + DiagnosticFactory2> DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE = DiagnosticFactory2.create(WARNING); DiagnosticFactory0 SUPERTYPE_NOT_A_CLASS_OR_INTERFACE = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 SUPERTYPE_IS_EXTENSION_FUNCTION_TYPE = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 SUPERTYPE_IS_SUSPEND_FUNCTION_TYPE = DiagnosticFactory0.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DelegationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DelegationChecker.kt index ac1f70a0dc5..1660d398f8a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DelegationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DelegationChecker.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.resolve.checkers -import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor @@ -40,8 +39,6 @@ class DelegationChecker : DeclarationChecker { bindingContext: BindingContext, languageVersionSettings: LanguageVersionSettings ) { - if (languageVersionSettings.languageVersion == LanguageVersion.KOTLIN_1_0) return - if (descriptor !is ClassDescriptor) return if (declaration !is KtClassOrObject) return diff --git a/compiler/testData/diagnostics/tests/delegation/memberHidesSupertypeOverride/simple1.0.kt b/compiler/testData/diagnostics/tests/delegation/memberHidesSupertypeOverride/simple1.0.kt new file mode 100644 index 00000000000..1e72db76636 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/memberHidesSupertypeOverride/simple1.0.kt @@ -0,0 +1,21 @@ +// !LANGUAGE_VERSION: 1.0 + +public interface Base { + fun getValue(): String + + fun test() = getValue() +} + +class Delegate : Base { + override fun getValue() = "Delegate" +} + +public abstract class MyClass : Base { + override fun test(): String { + return "Class" + } +} + +class A : MyClass(), Base by Delegate() { + override fun getValue() = "Delegate" +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegation/memberHidesSupertypeOverride/simple1.0.txt b/compiler/testData/diagnostics/tests/delegation/memberHidesSupertypeOverride/simple1.0.txt new file mode 100644 index 00000000000..1355d6b325d --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/memberHidesSupertypeOverride/simple1.0.txt @@ -0,0 +1,36 @@ +package + +public final class A : MyClass, Base { + public constructor A() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ fun getValue(): kotlin.String + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*delegation*/ fun test(): kotlin.String + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface Base { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun getValue(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open fun test(): kotlin.String + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Delegate : Base { + public constructor Delegate() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ fun getValue(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun test(): kotlin.String + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public abstract class MyClass : Base { + public constructor MyClass() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun getValue(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ fun test(): kotlin.String + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt b/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt index 732f5eddf17..a169b5ab530 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.MultiTargetPlatform +import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.utils.addIfNotNull import org.junit.Assert @@ -275,6 +276,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava): LanguageVersionSettings? { val apiVersionString = directiveMap[API_VERSION_DIRECTIVE] val directives = directiveMap[LANGUAGE_DIRECTIVE] - if (apiVersionString == null && directives == null) return null + val languageVersionDirective = directiveMap[LANGUAGE_VERSION] + if (apiVersionString == null && directives == null && languageVersionDirective == null) return null val apiVersion = (if (apiVersionString != null) ApiVersion.parse(apiVersionString) else ApiVersion.LATEST) ?: error("Unknown API version: $apiVersionString") val languageFeatures = directives?.let(this::collectLanguageFeatureMap).orEmpty() - return DiagnosticTestLanguageVersionSettings(languageFeatures, apiVersion, LanguageVersion.LATEST) + val languageVersion: LanguageVersion = languageVersionDirective?.let { LanguageVersion.fromVersionString(it) } ?: LanguageVersion.LATEST + + return DiagnosticTestLanguageVersionSettings(languageFeatures, apiVersion, languageVersion) } private fun collectLanguageFeatureMap(directives: String): Map { diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 3ee44026049..c41c47b69ec 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -6462,6 +6462,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("simple1.0.kt") + public void testSimple1_0() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/delegation/memberHidesSupertypeOverride/simple1.0.kt"); + doTest(fileName); + } + @TestMetadata("simpleNoOverride.kt") public void testSimpleNoOverride() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/delegation/memberHidesSupertypeOverride/simpleNoOverride.kt"); diff --git a/idea/testData/quickfix/abstract/manyImpl.kt b/idea/testData/quickfix/abstract/manyImpl.kt index 00643c44bbf..7ff6935649e 100644 --- a/idea/testData/quickfix/abstract/manyImpl.kt +++ b/idea/testData/quickfix/abstract/manyImpl.kt @@ -1,6 +1,5 @@ // "Make 'A' abstract" "false" // ERROR: Class 'X' must override public open fun foo(): Unit defined in X because it inherits many implementations of it -// ERROR: Delegated member 'fun foo(): Unit' hides supertype override: public open fun foo(): Unit defined in E. Please specify proper override explicitly // ACTION: Create test // ACTION: Make internal // ACTION: Make private