diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt index 1d8d3f2a9f7..b9b546a47a1 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt @@ -118,7 +118,12 @@ class BuilderFactoryForDuplicateSignatureDiagnostics( if (elementToReportOn == null) return // TODO: it'd be better to report this error without any element at all val data = ConflictingJvmDeclarationsData(classInternalName, classOrigin, rawSignature, origins) - diagnostics.report(ErrorsJvm.ACCIDENTAL_OVERRIDE.on(elementToReportOn, data)) + if (memberElement != null) { + diagnostics.report(ErrorsJvm.ACCIDENTAL_OVERRIDE.on(elementToReportOn, data)) + } + else { + diagnostics.report(ErrorsJvm.CONFLICTING_INHERITED_JVM_DECLARATIONS.on(elementToReportOn, data)) + } } } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java index 14ce10e0ee2..6c3a5bf4683 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java @@ -45,6 +45,7 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension { static { MAP.put(ErrorsJvm.CONFLICTING_JVM_DECLARATIONS, "Platform declaration clash: {0}", CONFLICTING_JVM_DECLARATIONS_DATA); MAP.put(ErrorsJvm.ACCIDENTAL_OVERRIDE, "Accidental override: {0}", CONFLICTING_JVM_DECLARATIONS_DATA); + MAP.put(ErrorsJvm.CONFLICTING_INHERITED_JVM_DECLARATIONS, "Inherited platform declarations clash: {0}", CONFLICTING_JVM_DECLARATIONS_DATA); MAP.put(ErrorsJvm.JVM_STATIC_NOT_IN_OBJECT, "Only functions in named objects and companion objects of classes can be annotated with 'JvmStatic'"); MAP.put(ErrorsJvm.OVERRIDE_CANNOT_BE_STATIC, "Override member cannot be 'JvmStatic' in object"); MAP.put(ErrorsJvm.OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS, "''JvmOverloads'' annotation has no effect for methods without default arguments"); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/ErrorsJvm.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/ErrorsJvm.java index c9b410a86df..bc9ac213ce8 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/ErrorsJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/ErrorsJvm.java @@ -39,6 +39,8 @@ public interface ErrorsJvm { DiagnosticFactory1 ACCIDENTAL_OVERRIDE = DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); + DiagnosticFactory1 CONFLICTING_INHERITED_JVM_DECLARATIONS = + DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); DiagnosticFactory0 OVERRIDE_CANNOT_BE_STATIC = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); DiagnosticFactory0 JVM_STATIC_NOT_IN_OBJECT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 596254a9e36..c950824329e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -309,8 +309,13 @@ public interface Errors { DiagnosticFactory2 ABSTRACT_MEMBER_NOT_IMPLEMENTED = DiagnosticFactory2.create(ERROR, DECLARATION_NAME); + DiagnosticFactory2 ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED = + DiagnosticFactory2.create(ERROR, DECLARATION_NAME); DiagnosticFactory2 MANY_IMPL_MEMBER_NOT_IMPLEMENTED = DiagnosticFactory2.create(ERROR, DECLARATION_NAME); + DiagnosticFactory2 MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED = + DiagnosticFactory2.create(ERROR, DECLARATION_NAME); + DiagnosticFactory1> AMBIGUOUS_ANONYMOUS_TYPE_INFERRED = DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 24f0b9b00f4..14e5e7b419c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -559,9 +559,13 @@ public class DefaultErrorMessages { MAP.put(ABSTRACT_MEMBER_NOT_IMPLEMENTED, "{0} must be declared abstract or implement abstract member {1}", RENDER_CLASS_OR_OBJECT, FQ_NAMES_IN_TYPES); + MAP.put(ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED, "{0} must be declared abstract or 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_INTERFACES_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(CONFLICTING_OVERLOADS, "''{0}'' is already defined in {1}", COMPACT_WITH_MODIFIERS, STRING); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java index b3afba995e7..12aa580d0d3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java @@ -21,6 +21,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.intellij.psi.PsiElement; import com.intellij.util.Function; +import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.LinkedMultiMap; import com.intellij.util.containers.MultiMap; @@ -34,7 +35,6 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; -import org.jetbrains.kotlin.lexer.JetToken; import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.*; @@ -269,32 +269,49 @@ public class OverrideResolver { // More than one implementation or no implementations at all Set abstractNoImpl = Sets.newLinkedHashSet(); Set manyImpl = Sets.newLinkedHashSet(); - collectMissingImplementations(classDescriptor, abstractNoImpl, manyImpl); + Set abstractInBaseClassNoImpl = Sets.newLinkedHashSet(); + Set conflictingInterfaceOverrides = Sets.newLinkedHashSet(); + collectMissingImplementations(classDescriptor, + abstractNoImpl, manyImpl, + abstractInBaseClassNoImpl, conflictingInterfaceOverrides); - if (!manyImpl.isEmpty()) { - trace.report(MANY_IMPL_MEMBER_NOT_IMPLEMENTED.on(klass, klass, manyImpl.iterator().next())); + if (!classCanHaveAbstractMembers(classDescriptor)) { + if (!abstractInBaseClassNoImpl.isEmpty()) { + trace.report(ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED.on(klass, klass, abstractInBaseClassNoImpl.iterator().next())); + } + else if (!abstractNoImpl.isEmpty()) { + trace.report(ABSTRACT_MEMBER_NOT_IMPLEMENTED.on(klass, klass, abstractNoImpl.iterator().next())); + } } - if (!classCanHaveAbstractMembers(classDescriptor) && !abstractNoImpl.isEmpty()) { - trace.report(ABSTRACT_MEMBER_NOT_IMPLEMENTED.on(klass, klass, abstractNoImpl.iterator().next())); + if (!conflictingInterfaceOverrides.isEmpty()) { + trace.report(MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED.on(klass, klass, conflictingInterfaceOverrides.iterator().next())); + } + else if (!manyImpl.isEmpty()) { + trace.report(MANY_IMPL_MEMBER_NOT_IMPLEMENTED.on(klass, klass, manyImpl.iterator().next())); } } @NotNull public static Set getMissingImplementations(@NotNull ClassDescriptor classDescriptor) { - Set result = new LinkedHashSet(); - collectMissingImplementations(classDescriptor, result, result); - return result; + Set shouldImplement = new LinkedHashSet(); + Set dontCare = new HashSet(); + collectMissingImplementations(classDescriptor, shouldImplement, shouldImplement, dontCare, dontCare); + return shouldImplement; } private static void collectMissingImplementations( @NotNull ClassDescriptor classDescriptor, @NotNull Set abstractNoImpl, - @NotNull Set manyImpl + @NotNull Set manyImpl, + @NotNull Set abstractInBaseClassNoImpl, + @NotNull Set conflictingInterfaceOverrides ) { for (DeclarationDescriptor member : classDescriptor.getDefaultType().getMemberScope().getAllDescriptors()) { if (member instanceof CallableMemberDescriptor) { - collectMissingImplementations((CallableMemberDescriptor) member, abstractNoImpl, manyImpl); + collectMissingImplementations((CallableMemberDescriptor) member, + abstractNoImpl, manyImpl, + abstractInBaseClassNoImpl, conflictingInterfaceOverrides); } } } @@ -302,14 +319,16 @@ public class OverrideResolver { private static void collectMissingImplementations( @NotNull CallableMemberDescriptor descriptor, @NotNull Set abstractNoImpl, - @NotNull Set manyImpl + @NotNull Set manyImpl, + @NotNull Set abstractInBaseClassNoImpl, + @NotNull Set conflictingInterfaceOverrides ) { if (descriptor.getKind().isReal()) return; if (descriptor.getVisibility() == Visibilities.INVISIBLE_FAKE) return; Collection directOverridden = descriptor.getOverriddenDescriptors(); if (directOverridden.size() == 0) { - throw new IllegalStateException("A 'fake override' must override something"); + throw new IllegalStateException("A 'fake override' " + descriptor.getName().asString() + " must override something"); } // collects map from the directly overridden descriptor to the set of declarations: @@ -324,6 +343,8 @@ public class OverrideResolver { Set relevantDirectlyOverridden = getRelevantDirectlyOverridden(overriddenDeclarationsByDirectParent, allFilteredOverriddenDeclarations); + collectJava8MissingOverrides(relevantDirectlyOverridden, abstractInBaseClassNoImpl, conflictingInterfaceOverrides); + List implementations = collectImplementations(relevantDirectlyOverridden); if (implementations.size() == 1 && isReturnTypeOkForOverride(descriptor, implementations.get(0))) return; @@ -342,6 +363,49 @@ public class OverrideResolver { } } + private static void collectJava8MissingOverrides( + Set relevantDirectlyOverridden, + @NotNull Set abstractInBaseClassNoImpl, + @NotNull Set conflictingInterfaceOverrides + ) { + // Java 8: + // -- class should implement an abstract member of a super-class, + // even if relevant default implementation is provided in one of the super-interfaces; + // -- inheriting multiple override equivalent methods from an interface is a conflict + // regardless of 'default' vs 'abstract'. + + boolean overridesClassMember = false; + boolean overridesNonAbstractInterfaceMember = false; + CallableMemberDescriptor overridesAbstractInBaseClass = null; + List overriddenInterfaceMembers = new SmartList(); + for (CallableMemberDescriptor overridden : relevantDirectlyOverridden) { + DeclarationDescriptor containingDeclaration = overridden.getContainingDeclaration(); + if (containingDeclaration instanceof ClassDescriptor) { + ClassDescriptor baseClassOrInterface = (ClassDescriptor) containingDeclaration; + if (baseClassOrInterface.getKind() == ClassKind.CLASS) { + overridesClassMember = true; + if (overridden.getModality() == Modality.ABSTRACT) { + overridesAbstractInBaseClass = overridden; + } + } + else if (baseClassOrInterface.getKind() == ClassKind.INTERFACE) { + overriddenInterfaceMembers.add(overridden); + if (overridden.getModality() != Modality.ABSTRACT) { + overridesNonAbstractInterfaceMember = true; + } + } + } + } + + if (overridesAbstractInBaseClass != null) { + abstractInBaseClassNoImpl.add(overridesAbstractInBaseClass); + } + + if (!overridesClassMember && overridesNonAbstractInterfaceMember && overriddenInterfaceMembers.size() > 1) { + conflictingInterfaceOverrides.addAll(overriddenInterfaceMembers); + } + } + @NotNull private static List collectImplementations(@NotNull Set relevantDirectlyOverridden) { List result = new ArrayList(relevantDirectlyOverridden.size()); diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/duplicateJvmSignatureUtil.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/duplicateJvmSignatureUtil.kt index c8c9c087f8c..dde918904c9 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/duplicateJvmSignatureUtil.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/duplicateJvmSignatureUtil.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.diagnostics.Errors.* import org.jetbrains.kotlin.diagnostics.DiagnosticFactory.* import org.jetbrains.kotlin.diagnostics.DiagnosticFactory import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics, moduleScope: GlobalSearchScope): Diagnostics? { fun getDiagnosticsForPackage(file: JetFile): Diagnostics? { @@ -86,7 +87,7 @@ class FilteredJvmDiagnostics(val jvmDiagnostics: Diagnostics, val otherDiagnosti } override fun forElement(psiElement: PsiElement): Collection { - val jvmDiagnosticFactories = setOf(CONFLICTING_JVM_DECLARATIONS, ACCIDENTAL_OVERRIDE) + val jvmDiagnosticFactories = setOf(CONFLICTING_JVM_DECLARATIONS, ACCIDENTAL_OVERRIDE, CONFLICTING_INHERITED_JVM_DECLARATIONS) fun Diagnostic.data() = cast(this, jvmDiagnosticFactories).getA() val (conflicting, other) = jvmDiagnostics.forElement(psiElement).partition { it.getFactory() in jvmDiagnosticFactories } if (alreadyReported(psiElement)) { @@ -110,9 +111,10 @@ class FilteredJvmDiagnostics(val jvmDiagnostics: Diagnostics, val otherDiagnosti other -> me != other && ( // in case of implementation copied from a super trait there will be both diagnostics on the same signature - me.getFactory() == ACCIDENTAL_OVERRIDE && other.getFactory() == CONFLICTING_JVM_DECLARATIONS - // there are paris of corresponding signatures that frequently clash simultaneously: package facade & part, trait and trait-impl - || other.data() higherThan me.data() + other.factory == ErrorsJvm.CONFLICTING_JVM_DECLARATIONS && (me.factory == ACCIDENTAL_OVERRIDE || + me.factory == CONFLICTING_INHERITED_JVM_DECLARATIONS) + // there are paris of corresponding signatures that frequently clash simultaneously: package facade & part, trait and trait-impl + || other.data() higherThan me.data() ) } } diff --git a/compiler/testData/codegen/box/bridges/complexTraitImpl.kt b/compiler/testData/codegen/box/bridges/complexTraitImpl.kt index ff38790023b..6ab6737b8a1 100644 --- a/compiler/testData/codegen/box/bridges/complexTraitImpl.kt +++ b/compiler/testData/codegen/box/bridges/complexTraitImpl.kt @@ -9,7 +9,9 @@ interface B { fun foo(): ArrayList = ArrayList(Arrays.asList("B")) } -open class C : A(), B +open class C : A(), B { + override fun foo(): ArrayList = super.foo() +} interface D { fun foo(): Collection diff --git a/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt b/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt deleted file mode 100644 index ed98372c3ff..00000000000 --- a/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt +++ /dev/null @@ -1,30 +0,0 @@ -interface A { - fun foo(t: T): String -} - -interface B { - fun foo(t: Int) = "B" -} - -class Z1 : A, B - -class Z2 : B, A - -fun box(): String { - val z1 = Z1() - val z2 = Z2() - val z1a: A = z1 - val z1b: B = z1 - val z2a: A = z2 - val z2b: B = z2 - - return when { - z1.foo( 0) != "B" -> "Fail #1" - z1a.foo( 0) != "B" -> "Fail #2" - z1b.foo( 0) != "B" -> "Fail #3" - z2.foo( 0) != "B" -> "Fail #4" - z2a.foo( 0) != "B" -> "Fail #5" - z2b.foo( 0) != "B" -> "Fail #6" - else -> "OK" - } -} \ No newline at end of file diff --git a/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt b/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt deleted file mode 100644 index 69751512658..00000000000 --- a/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt +++ /dev/null @@ -1,30 +0,0 @@ -interface A { - fun foo(t: T): String -} - -interface B { - fun foo(a: T) = "B" -} - -class Z1 : A, B - -class Z2 : B, A - -fun box(): String { - val z1 = Z1() - val z2 = Z2() - val z1a: A = z1 - val z1b: B = z1 - val z2a: A = z2 - val z2b: B = z2 - - return when { - z1.foo( 0) != "B" -> "Fail #1" - z1a.foo( 0) != "B" -> "Fail #2" - z1b.foo( 0) != "B" -> "Fail #3" - z2.foo( 0) != "B" -> "Fail #4" - z2a.foo( 0) != "B" -> "Fail #5" - z2b.foo( 0) != "B" -> "Fail #6" - else -> "OK" - } -} \ No newline at end of file diff --git a/compiler/testData/codegen/box/bridges/fakeOverrideOfPropertySetterInTraitImpl.kt b/compiler/testData/codegen/box/bridges/fakeOverrideOfPropertySetterInTraitImpl.kt deleted file mode 100644 index eed49f27531..00000000000 --- a/compiler/testData/codegen/box/bridges/fakeOverrideOfPropertySetterInTraitImpl.kt +++ /dev/null @@ -1,25 +0,0 @@ -var result = "" - -interface A { - var foo: String - get() = result - set(value) { - result += value - } -} - -abstract class B { - abstract var foo: Any -} - -class C : A, B() - -fun box(): String { - val c = C() - c.foo = "1" - val b: B = c - val a: A = c - b.foo = "2" - a.foo = "3" - return if (result == "123") "OK" else "Fail: $result" -} diff --git a/compiler/testData/codegen/box/bridges/fakeOverrideWithImplementationInTrait.kt b/compiler/testData/codegen/box/bridges/fakeOverrideWithImplementationInTrait.kt deleted file mode 100644 index 4e1231396fa..00000000000 --- a/compiler/testData/codegen/box/bridges/fakeOverrideWithImplementationInTrait.kt +++ /dev/null @@ -1,20 +0,0 @@ -interface A { - fun foo(): String = "A" -} - -interface B { - fun foo(): Any -} - -class C : A, B - -fun box(): String { - val c = C() - var result = "" - val b: B = c - val a: A = c - result += c.foo() - result += b.foo() - result += a.foo() - return if (result == "AAA") "OK" else "Fail: $result" -} diff --git a/compiler/testData/codegen/box/builtinsProperties/bridges.kt b/compiler/testData/codegen/box/builtinsProperties/bridges.kt index 2dffb290490..6f0a1c8ba5a 100644 --- a/compiler/testData/codegen/box/builtinsProperties/bridges.kt +++ b/compiler/testData/codegen/box/builtinsProperties/bridges.kt @@ -9,6 +9,8 @@ class B0 : Collection, A0 { override fun contains(o: String) = throw UnsupportedOperationException() override fun iterator() = throw UnsupportedOperationException() override fun containsAll(c: Collection) = throw UnsupportedOperationException() + override val size: Int + get() = super.size } open class A1 { @@ -45,6 +47,8 @@ class B4 : Collection, I4 { override fun contains(o: String) = throw UnsupportedOperationException() override fun iterator() = throw UnsupportedOperationException() override fun containsAll(c: Collection) = throw UnsupportedOperationException() + override val size: Int + get() = super.size } interface I5 : Collection { diff --git a/compiler/testData/codegen/box/classes/kt2477.kt b/compiler/testData/codegen/box/classes/kt2477.kt index dcac7569a1a..8f45431717c 100644 --- a/compiler/testData/codegen/box/classes/kt2477.kt +++ b/compiler/testData/codegen/box/classes/kt2477.kt @@ -10,8 +10,8 @@ interface B { get() = "FAIL" } -abstract class C { - abstract protected val c: String +open class C { + private val c: String = "FAIL" } open class D: C(), A, B { diff --git a/compiler/testData/codegen/bytecodeText/interfaces/firstInheritedMethodIsAbstract.kt b/compiler/testData/codegen/bytecodeText/interfaces/firstInheritedMethodIsAbstract.kt index 78f3ebcb85e..971fa09646d 100644 --- a/compiler/testData/codegen/bytecodeText/interfaces/firstInheritedMethodIsAbstract.kt +++ b/compiler/testData/codegen/bytecodeText/interfaces/firstInheritedMethodIsAbstract.kt @@ -6,7 +6,9 @@ interface B { fun foo(): String = "OK" } -interface C : A, B +interface C : A, B { + override fun foo(): String = super.foo() +} // There's no 'foo' in A$DefaultImpls, proguard and other tools may fail if we generate calls to it // 0 INVOKESTATIC A\$DefaultImpls.foo diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/noWarningsOnJavaKotlinInheritance/noWarningsOnJavaKotlinInheritance.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/noWarningsOnJavaKotlinInheritance/noWarningsOnJavaKotlinInheritance.kt index bc617c7f74c..f92523206a0 100644 --- a/compiler/testData/compileKotlinAgainstCustomBinaries/noWarningsOnJavaKotlinInheritance/noWarningsOnJavaKotlinInheritance.kt +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/noWarningsOnJavaKotlinInheritance/noWarningsOnJavaKotlinInheritance.kt @@ -11,4 +11,8 @@ interface KotlinTrait { public fun foo(someOtherName: Int) {} } -class BothTraitsSubclass : JavaInterface, KotlinTrait +class BothTraitsSubclass : JavaInterface, KotlinTrait { + override fun foo(someOtherName: Int) { + super.foo(someOtherName) + } +} diff --git a/compiler/testData/diagnostics/tests/declarationChecks/kt559.kt b/compiler/testData/diagnostics/tests/declarationChecks/kt559.kt index a3e440caa9c..ea48a2a953e 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/kt559.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/kt559.kt @@ -14,17 +14,17 @@ abstract class D(): A() { override val i : Int = 34 } -class C() : D() { +class C() : D() { fun test() { super.i } } -class B() : A() { +class B() : A() { override fun foo(): Int { super.i super.fff() //everything is ok return super.foo() //no error!! } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegation/DelegationAndOverriding.kt b/compiler/testData/diagnostics/tests/delegation/DelegationAndOverriding.kt index 51859a91f2b..1868a537585 100644 --- a/compiler/testData/diagnostics/tests/delegation/DelegationAndOverriding.kt +++ b/compiler/testData/diagnostics/tests/delegation/DelegationAndOverriding.kt @@ -9,7 +9,7 @@ open class Br(t : T } -class Br3(t : T) : Br(t) { +class Br3(t : T) : Br(t) { } @@ -35,4 +35,4 @@ open class GC1(g : G) : G by g { open class GC2(g : G) : GC1(g) { -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegation/Delegation_MultipleDelegates.kt b/compiler/testData/diagnostics/tests/delegation/Delegation_MultipleDelegates.kt index 26501f0de2e..5955a9e68af 100644 --- a/compiler/testData/diagnostics/tests/delegation/Delegation_MultipleDelegates.kt +++ b/compiler/testData/diagnostics/tests/delegation/Delegation_MultipleDelegates.kt @@ -14,6 +14,6 @@ interface TwoImpl : Two { public override fun foo() = 2 } -class Test1() : TwoImpl, OneImpl {} +class Test1() : TwoImpl, OneImpl {} class Test2(a : One) : One by a, Two {} class Test3(a : One, b : Two) : Two by b, One by a {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/j+k/kt6720_abstractProperty.kt b/compiler/testData/diagnostics/tests/j+k/kt6720_abstractProperty.kt index f092b608f92..2f58657094a 100644 --- a/compiler/testData/diagnostics/tests/j+k/kt6720_abstractProperty.kt +++ b/compiler/testData/diagnostics/tests/j+k/kt6720_abstractProperty.kt @@ -11,8 +11,8 @@ public abstract class B implements A { // FILE: C.kt -class C : B() +class C : B() fun main() { C().a -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/java8Overrides/abstractBaseClassMemberNotImplemented.kt b/compiler/testData/diagnostics/tests/java8Overrides/abstractBaseClassMemberNotImplemented.kt new file mode 100644 index 00000000000..0b1c69a3d3b --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/abstractBaseClassMemberNotImplemented.kt @@ -0,0 +1,9 @@ +abstract class ALeft { + abstract fun foo() +} + +interface IRight { + fun foo() {} +} + +class CDerived : ALeft(), IRight \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/java8Overrides/abstractBaseClassMemberNotImplemented.txt b/compiler/testData/diagnostics/tests/java8Overrides/abstractBaseClassMemberNotImplemented.txt new file mode 100644 index 00000000000..94ece016db7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/abstractBaseClassMemberNotImplemented.txt @@ -0,0 +1,24 @@ +package + +public abstract class ALeft { + public constructor ALeft() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class CDerived : ALeft, IRight { + public constructor CDerived() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface IRight { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/java8Overrides/abstractVsAbstract.kt b/compiler/testData/diagnostics/tests/java8Overrides/abstractVsAbstract.kt new file mode 100644 index 00000000000..3e26c7b7b96 --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/abstractVsAbstract.kt @@ -0,0 +1,13 @@ +interface ILeft { + fun foo() +} + +interface IRight { + fun foo() +} + +interface IDerived : ILeft, IRight + +class CDerived : ILeft, IRight + +abstract class ADerived : ILeft, IRight \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/java8Overrides/abstractVsAbstract.txt b/compiler/testData/diagnostics/tests/java8Overrides/abstractVsAbstract.txt new file mode 100644 index 00000000000..e14385dbc2b --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/abstractVsAbstract.txt @@ -0,0 +1,38 @@ +package + +public abstract class ADerived : ILeft, IRight { + public constructor ADerived() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class CDerived : ILeft, IRight { + public constructor CDerived() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface IDerived : ILeft, IRight { + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface ILeft { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface IRight { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/java8Overrides/defaultVsAbstract.kt b/compiler/testData/diagnostics/tests/java8Overrides/defaultVsAbstract.kt new file mode 100644 index 00000000000..8c06a401c97 --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/defaultVsAbstract.kt @@ -0,0 +1,13 @@ +interface ILeft { + fun foo() {} +} + +interface IRight { + fun foo() +} + +interface IDerived : ILeft, IRight + +class CDerived : ILeft, IRight + +abstract class ADerived : ILeft, IRight \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/java8Overrides/defaultVsAbstract.txt b/compiler/testData/diagnostics/tests/java8Overrides/defaultVsAbstract.txt new file mode 100644 index 00000000000..ad7cd6c2c14 --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/defaultVsAbstract.txt @@ -0,0 +1,38 @@ +package + +public abstract class ADerived : ILeft, IRight { + public constructor ADerived() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class CDerived : ILeft, IRight { + public constructor CDerived() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface IDerived : ILeft, IRight { + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface ILeft { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface IRight { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/java8Overrides/singleRelevantDefault.kt b/compiler/testData/diagnostics/tests/java8Overrides/singleRelevantDefault.kt new file mode 100644 index 00000000000..9fd93ea94b2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/singleRelevantDefault.kt @@ -0,0 +1,9 @@ +interface ITop { + fun foo() {} +} + +interface ILeft : ITop + +interface IRight : ITop + +interface IDerived : ILeft, IRight \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/java8Overrides/singleRelevantDefault.txt b/compiler/testData/diagnostics/tests/java8Overrides/singleRelevantDefault.txt new file mode 100644 index 00000000000..b440155463a --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/singleRelevantDefault.txt @@ -0,0 +1,29 @@ +package + +public interface IDerived : ILeft, IRight { + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface ILeft : ITop { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface IRight : ITop { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface ITop { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt b/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt index a5d271cd593..3eb9dd3bfb3 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt @@ -22,7 +22,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/override/AbstractFunNotImplemented.kt b/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.kt index 3e66d7f5c2b..2b74895453e 100644 --- a/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.kt +++ b/compiler/testData/diagnostics/tests/override/AbstractFunNotImplemented.kt @@ -2,5 +2,5 @@ abstract class A { abstract fun foo(): Int } -class B() : A() { -} +class B() : A() { +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.kt b/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.kt index 279bf210af7..657e761ca49 100644 --- a/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.kt +++ b/compiler/testData/diagnostics/tests/override/AbstractValNotImplemented.kt @@ -2,5 +2,5 @@ abstract class A { abstract val i: Int } -class B() : A() { +class B() : A() { } diff --git a/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.kt b/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.kt index 11f5bde2801..df976efe482 100644 --- a/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.kt +++ b/compiler/testData/diagnostics/tests/override/AbstractVarNotImplemented.kt @@ -2,5 +2,5 @@ abstract class A { abstract var i: Int } -class B() : A() { +class B() : A() { } diff --git a/compiler/testData/diagnostics/tests/override/Generics.kt b/compiler/testData/diagnostics/tests/override/Generics.kt index 6813df144a0..2d042fa9527 100644 --- a/compiler/testData/diagnostics/tests/override/Generics.kt +++ b/compiler/testData/diagnostics/tests/override/Generics.kt @@ -40,15 +40,15 @@ abstract class MyAbstractClass1 : MyTrait, MyAbstractClass() { override fun bar(t: String) = t } -class MyIllegalGenericClass1 : MyTrait, MyAbstractClass() {} -class MyIllegalGenericClass2(r : R) : MyTrait, MyAbstractClass() { +class MyIllegalGenericClass1 : MyTrait, MyAbstractClass() {} +class MyIllegalGenericClass2(r : R) : MyTrait, MyAbstractClass() { override fun foo(r: R) = r override val pr : R = r } -class MyIllegalClass1 : MyTrait, MyAbstractClass() {} +class MyIllegalClass1 : MyTrait, MyAbstractClass() {} abstract class MyLegalAbstractClass1 : MyTrait, MyAbstractClass() {} -class MyIllegalClass2(t : T) : MyTrait, MyAbstractClass() { +class MyIllegalClass2(t : T) : MyTrait, MyAbstractClass() { fun foo(t: T) = t fun bar(t: T) = t val pr : T = t diff --git a/compiler/testData/diagnostics/tests/override/NonGenerics.kt b/compiler/testData/diagnostics/tests/override/NonGenerics.kt index 30a3688a219..aabfb8b26f4 100644 --- a/compiler/testData/diagnostics/tests/override/NonGenerics.kt +++ b/compiler/testData/diagnostics/tests/override/NonGenerics.kt @@ -21,9 +21,9 @@ 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 @@ -35,7 +35,7 @@ class MyChildClass() : MyClass() {} 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/ParentInheritsManyImplementations.kt b/compiler/testData/diagnostics/tests/override/ParentInheritsManyImplementations.kt index 1d53f7b54bb..75d9920c5c9 100644 --- a/compiler/testData/diagnostics/tests/override/ParentInheritsManyImplementations.kt +++ b/compiler/testData/diagnostics/tests/override/ParentInheritsManyImplementations.kt @@ -8,7 +8,7 @@ interface B { fun foo() = 2 } -open class C : A, B {} +open class C : A, B {} interface E { fun foo(): Int diff --git a/compiler/testData/diagnostics/tests/override/parameterNames/kotlinInheritsBothJavaAndKotlin.kt b/compiler/testData/diagnostics/tests/override/parameterNames/kotlinInheritsBothJavaAndKotlin.kt index 4ce9afec0c8..021256a8568 100644 --- a/compiler/testData/diagnostics/tests/override/parameterNames/kotlinInheritsBothJavaAndKotlin.kt +++ b/compiler/testData/diagnostics/tests/override/parameterNames/kotlinInheritsBothJavaAndKotlin.kt @@ -10,4 +10,4 @@ interface KotlinTrait { public fun foo(someOtherName: Int) {} } -class BothTraitsSubclass : JavaInterface, KotlinTrait +class BothTraitsSubclass : JavaInterface, KotlinTrait \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/platformTypes/typeEnhancement/supertypeDifferentParameterNullability.kt b/compiler/testData/diagnostics/tests/platformTypes/typeEnhancement/supertypeDifferentParameterNullability.kt index f0f8092e51c..c4ac7bba791 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/typeEnhancement/supertypeDifferentParameterNullability.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/typeEnhancement/supertypeDifferentParameterNullability.kt @@ -22,7 +22,7 @@ public interface B { override fun foo(x: String?) {} } -interface I : A, B +interface I : A, B class C3 : I { override fun foo(x: String) {} @@ -30,4 +30,4 @@ interface I : A, B class C4 : I { override fun foo(x: String?) {} -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/regressions/kt302.kt b/compiler/testData/diagnostics/tests/regressions/kt302.kt index 7905dcb3ef8..299fd7fafae 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt302.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt302.kt @@ -10,4 +10,4 @@ interface B { open fun foo() {} } -class C : A, B {} //should be error here +class C : A, B {} //should be error here \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 7563573b39f..2c27deef057 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -9184,6 +9184,60 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { } } + @TestMetadata("compiler/testData/diagnostics/tests/jdk-annotations") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Jdk_annotations extends AbstractJetDiagnosticsTest { + public void testAllFilesPresentInJdk_annotations() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/jdk-annotations"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("ArrayListAndMap.kt") + public void testArrayListAndMap() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/jdk-annotations/ArrayListAndMap.kt"); + doTest(fileName); + } + + @TestMetadata("ArrayListClone.kt") + public void testArrayListClone() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/jdk-annotations/ArrayListClone.kt"); + doTest(fileName); + } + + @TestMetadata("ArrayListToArray.kt") + public void testArrayListToArray() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/jdk-annotations/ArrayListToArray.kt"); + doTest(fileName); + } + + @TestMetadata("compiler/testData/diagnostics/tests/jdk-annotations/sql") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Sql extends AbstractJetDiagnosticsTest { + public void testAllFilesPresentInSql() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/jdk-annotations/sql"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("DriverManager.kt") + public void testDriverManager() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/jdk-annotations/sql/DriverManager.kt"); + doTest(fileName); + } + + @TestMetadata("ResultSet.kt") + public void testResultSet() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/jdk-annotations/sql/ResultSet.kt"); + doTest(fileName); + } + + @TestMetadata("Statement.kt") + public void testStatement() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/jdk-annotations/sql/Statement.kt"); + doTest(fileName); + } + } + } + @TestMetadata("compiler/testData/diagnostics/tests/labels") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java index 42cdfe14b5c..a6cc25b2190 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -454,18 +454,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } - @TestMetadata("fakeGenericContravariantOverride1.kt") - public void testFakeGenericContravariantOverride1() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt"); - doTest(fileName); - } - - @TestMetadata("fakeGenericContravariantOverride2.kt") - public void testFakeGenericContravariantOverride2() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt"); - doTest(fileName); - } - @TestMetadata("fakeGenericCovariantOverride.kt") public void testFakeGenericCovariantOverride() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericCovariantOverride.kt"); @@ -478,24 +466,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } - @TestMetadata("fakeOverrideOfPropertySetterInTraitImpl.kt") - public void testFakeOverrideOfPropertySetterInTraitImpl() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideOfPropertySetterInTraitImpl.kt"); - doTest(fileName); - } - @TestMetadata("fakeOverrideOfTraitImpl.kt") public void testFakeOverrideOfTraitImpl() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideOfTraitImpl.kt"); doTest(fileName); } - @TestMetadata("fakeOverrideWithImplementationInTrait.kt") - public void testFakeOverrideWithImplementationInTrait() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideWithImplementationInTrait.kt"); - doTest(fileName); - } - @TestMetadata("fakeOverrideWithSeveralSuperDeclarations.kt") public void testFakeOverrideWithSeveralSuperDeclarations() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideWithSeveralSuperDeclarations.kt"); diff --git a/idea/testData/diagnosticMessage/wrongReturnTypeInImplementation.kt b/idea/testData/diagnosticMessage/abstractBaseClassMemberNotImplemented.kt similarity index 84% rename from idea/testData/diagnosticMessage/wrongReturnTypeInImplementation.kt rename to idea/testData/diagnosticMessage/abstractBaseClassMemberNotImplemented.kt index 40dd0987d70..609071129d9 100644 --- a/idea/testData/diagnosticMessage/wrongReturnTypeInImplementation.kt +++ b/idea/testData/diagnosticMessage/abstractBaseClassMemberNotImplemented.kt @@ -1,5 +1,5 @@ // !DIAGNOSTICS_NUMBER: 1 -// !DIAGNOSTICS: ABSTRACT_MEMBER_NOT_IMPLEMENTED +// !DIAGNOSTICS: ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED // !MESSAGE_TYPE: TEXT interface T1 diff --git a/idea/testData/diagnosticMessage/abstractBaseClassMemberNotImplemented1.txt b/idea/testData/diagnosticMessage/abstractBaseClassMemberNotImplemented1.txt new file mode 100644 index 00000000000..dc73fbf39d0 --- /dev/null +++ b/idea/testData/diagnosticMessage/abstractBaseClassMemberNotImplemented1.txt @@ -0,0 +1,2 @@ + +Class 'E' must be declared abstract or implement abstract base class member public abstract fun f(): T4 defined in D \ No newline at end of file diff --git a/idea/testData/diagnosticMessage/wrongReturnTypeInImplementation1.txt b/idea/testData/diagnosticMessage/wrongReturnTypeInImplementation1.txt deleted file mode 100644 index be95618029b..00000000000 --- a/idea/testData/diagnosticMessage/wrongReturnTypeInImplementation1.txt +++ /dev/null @@ -1,2 +0,0 @@ - -Class 'E' must be declared abstract or implement abstract member public abstract fun f(): T3 defined in C \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/notEditable.kt b/idea/testData/quickfix/changeSignature/notEditable.kt index e6ed21079d5..460fab40ce1 100644 --- a/idea/testData/quickfix/changeSignature/notEditable.kt +++ b/idea/testData/quickfix/changeSignature/notEditable.kt @@ -1,11 +1,11 @@ // "class org.jetbrains.kotlin.idea.quickfix.RemoveFunctionParametersFix" "false" //ERROR: No value passed for parameter other -interface StringComparable { +abstract class StringComparable { public fun compareTo(other: String): Int = 0 } -class X: Comparable, StringComparable +class X: Comparable, StringComparable() fun main(args: Array) { X().compareTo() diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java index fe280f402fc..731c114df4e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java @@ -31,6 +31,12 @@ import java.util.regex.Pattern; @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTest { + @TestMetadata("abstractBaseClassMemberNotImplemented.kt") + public void testAbstractBaseClassMemberNotImplemented() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/diagnosticMessage/abstractBaseClassMemberNotImplemented.kt"); + doTest(fileName); + } + public void testAllFilesPresentInDiagnosticMessage() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/diagnosticMessage"), Pattern.compile("^(.+)\\.kt$"), false); } @@ -202,10 +208,4 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes String fileName = JetTestUtils.navigationMetadata("idea/testData/diagnosticMessage/upperBoundViolated.kt"); doTest(fileName); } - - @TestMetadata("wrongReturnTypeInImplementation.kt") - public void testWrongReturnTypeInImplementation() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/diagnosticMessage/wrongReturnTypeInImplementation.kt"); - doTest(fileName); - } } diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BridgeTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BridgeTestGenerated.java index 37adce31a2f..9f0172dd596 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BridgeTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BridgeTestGenerated.java @@ -77,18 +77,6 @@ public class BridgeTestGenerated extends AbstractBridgeTest { doTest(fileName); } - @TestMetadata("fakeGenericContravariantOverride1.kt") - public void testFakeGenericContravariantOverride1() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt"); - doTest(fileName); - } - - @TestMetadata("fakeGenericContravariantOverride2.kt") - public void testFakeGenericContravariantOverride2() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt"); - doTest(fileName); - } - @TestMetadata("fakeGenericCovariantOverride.kt") public void testFakeGenericCovariantOverride() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericCovariantOverride.kt"); @@ -101,24 +89,12 @@ public class BridgeTestGenerated extends AbstractBridgeTest { doTest(fileName); } - @TestMetadata("fakeOverrideOfPropertySetterInTraitImpl.kt") - public void testFakeOverrideOfPropertySetterInTraitImpl() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideOfPropertySetterInTraitImpl.kt"); - doTest(fileName); - } - @TestMetadata("fakeOverrideOfTraitImpl.kt") public void testFakeOverrideOfTraitImpl() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideOfTraitImpl.kt"); doTest(fileName); } - @TestMetadata("fakeOverrideWithImplementationInTrait.kt") - public void testFakeOverrideWithImplementationInTrait() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideWithImplementationInTrait.kt"); - doTest(fileName); - } - @TestMetadata("fakeOverrideWithSeveralSuperDeclarations.kt") public void testFakeOverrideWithSeveralSuperDeclarations() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideWithSeveralSuperDeclarations.kt");