diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmOverridesBackwardCompatibilityHelper.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmOverridesBackwardCompatibilityHelper.kt new file mode 100644 index 00000000000..f4f1838772f --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmOverridesBackwardCompatibilityHelper.kt @@ -0,0 +1,82 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.resolve.jvm + +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor +import org.jetbrains.kotlin.platform.JavaToKotlinClassMap +import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.OverridesBackwardCompatibilityHelper +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe +import org.jetbrains.kotlin.serialization.deserialization.PLATFORM_DEPENDENT_ANNOTATION_FQ_NAME + +object JvmOverridesBackwardCompatibilityHelper : OverridesBackwardCompatibilityHelper { + override fun overrideCanBeOmitted(overridingDescriptor: CallableMemberDescriptor): Boolean { + val visitedDescriptors = hashSetOf() + return overridingDescriptor.overriddenDescriptors.all { + isPlatformSpecificDescriptorThatCanBeImplicitlyOverridden(it, visitedDescriptors) + } + } + + private fun isPlatformSpecificDescriptorThatCanBeImplicitlyOverridden( + overriddenDescriptor: CallableMemberDescriptor, + visitedDescriptors: MutableSet + ): Boolean { + if (overriddenDescriptor.modality == Modality.FINAL) return false + + if (visitedDescriptors.contains(overriddenDescriptor.original)) return true + visitedDescriptors.add(overriddenDescriptor.original) + + when (overriddenDescriptor.kind) { + CallableMemberDescriptor.Kind.DELEGATION, + CallableMemberDescriptor.Kind.FAKE_OVERRIDE -> + return isOverridingOnlyDescriptorsThatCanBeImplicitlyOverridden(overriddenDescriptor, visitedDescriptors) + + CallableMemberDescriptor.Kind.DECLARATION -> { + when { + overriddenDescriptor.annotations.hasAnnotation(PLATFORM_DEPENDENT_ANNOTATION_FQ_NAME) -> + return true + overriddenDescriptor is JavaMethodDescriptor -> { + val containingClass = DescriptorUtils.getContainingClass(overriddenDescriptor) + ?: return false + + if (JavaToKotlinClassMap.INSTANCE.mapKotlinToJava(containingClass.fqNameUnsafe) != null) return true + if (overriddenDescriptor.overriddenDescriptors.isEmpty()) return false + + return isOverridingOnlyDescriptorsThatCanBeImplicitlyOverridden(overriddenDescriptor, visitedDescriptors) + } + else -> + return false + } + + } + + else -> + return false + } + } + + private fun isOverridingOnlyDescriptorsThatCanBeImplicitlyOverridden( + overriddenDescriptor: CallableMemberDescriptor, + visitedDescriptors: MutableSet + ): Boolean = + overriddenDescriptor.overriddenDescriptors.all { + isPlatformSpecificDescriptorThatCanBeImplicitlyOverridden(it, visitedDescriptors) + } + +} \ No newline at end of file diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt index ff31209f052..26489f0f322 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt @@ -24,10 +24,7 @@ import org.jetbrains.kotlin.resolve.PlatformConfigurator import org.jetbrains.kotlin.resolve.calls.checkers.ReifiedTypeParameterSubstitutionChecker import org.jetbrains.kotlin.resolve.checkers.MissingDependencyClassChecker import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker -import org.jetbrains.kotlin.resolve.jvm.JvmDelegationFilter -import org.jetbrains.kotlin.resolve.jvm.JvmOverloadFilter -import org.jetbrains.kotlin.resolve.jvm.JvmTypeSpecificityComparator -import org.jetbrains.kotlin.resolve.jvm.RuntimeAssertionsTypeChecker +import org.jetbrains.kotlin.resolve.jvm.* import org.jetbrains.kotlin.resolve.jvm.checkers.* import org.jetbrains.kotlin.resolve.lazy.DelegationFilter import org.jetbrains.kotlin.synthetic.JavaSyntheticConstructorsProvider @@ -86,7 +83,9 @@ object JvmPlatformConfigurator : PlatformConfigurator( platformToKotlinClassMap = JavaToKotlinClassMap.INSTANCE, - delegationFilter = JvmDelegationFilter + delegationFilter = JvmDelegationFilter, + + overridesBackwardCompatibilityHelper = JvmOverridesBackwardCompatibilityHelper ) { override fun configureModuleComponents(container: StorageComponentContainer) { container.useImpl() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java index 4f655efdea5..bc95ebd6f21 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java @@ -48,9 +48,14 @@ import static org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityI public class OverrideResolver { private final BindingTrace trace; + private final OverridesBackwardCompatibilityHelper overridesBackwardCompatibilityHelper; - public OverrideResolver(@NotNull BindingTrace trace) { + public OverrideResolver( + @NotNull BindingTrace trace, + @NotNull OverridesBackwardCompatibilityHelper overridesBackwardCompatibilityHelper + ) { this.trace = trace; + this.overridesBackwardCompatibilityHelper = overridesBackwardCompatibilityHelper; } public void check(@NotNull TopDownAnalysisContext c) { @@ -650,7 +655,7 @@ public class OverrideResolver { } }); } - else if (!overriddenDescriptors.isEmpty()) { + else if (!overriddenDescriptors.isEmpty() && !overridesBackwardCompatibilityHelper.overrideCanBeOmitted(declared)) { CallableMemberDescriptor overridden = overriddenDescriptors.iterator().next(); trace.report(VIRTUAL_MEMBER_HIDDEN.on(member, declared, overridden, overridden.getContainingDeclaration())); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverridesBackwardCompatibilityHelper.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverridesBackwardCompatibilityHelper.kt new file mode 100644 index 00000000000..fbe3ad6498d --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverridesBackwardCompatibilityHelper.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.resolve + +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor + +interface OverridesBackwardCompatibilityHelper { + fun overrideCanBeOmitted(overridingDescriptor: CallableMemberDescriptor): Boolean + + object DEFAULT : OverridesBackwardCompatibilityHelper { + override fun overrideCanBeOmitted(overridingDescriptor: CallableMemberDescriptor): Boolean = + false + } +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt index 51d457a4607..5e38b56c04e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt @@ -51,7 +51,8 @@ abstract class TargetPlatform(val platformName: String) { override val platformConfigurator = object : PlatformConfigurator( DynamicTypesSettings(), listOf(), listOf(), listOf(), listOf(), listOf(), - IdentifierChecker.DEFAULT, OverloadFilter.DEFAULT, PlatformToKotlinClassMap.EMPTY, DelegationFilter.DEFAULT + IdentifierChecker.DEFAULT, OverloadFilter.DEFAULT, PlatformToKotlinClassMap.EMPTY, DelegationFilter.DEFAULT, + OverridesBackwardCompatibilityHelper.DEFAULT ) { override fun configureModuleComponents(container: StorageComponentContainer) { container.useInstance(SyntheticScopes.Empty) @@ -97,7 +98,8 @@ abstract class PlatformConfigurator( private val identifierChecker: IdentifierChecker, private val overloadFilter: OverloadFilter, private val platformToKotlinClassMap: PlatformToKotlinClassMap, - private val delegationFilter: DelegationFilter + private val delegationFilter: DelegationFilter, + private val overridesBackwardCompatibilityHelper: OverridesBackwardCompatibilityHelper ) { private val declarationCheckers: List = DEFAULT_DECLARATION_CHECKERS + additionalDeclarationCheckers private val callCheckers: List = DEFAULT_CALL_CHECKERS + additionalCallCheckers @@ -117,6 +119,7 @@ abstract class PlatformConfigurator( useInstance(overloadFilter) useInstance(platformToKotlinClassMap) useInstance(delegationFilter) + useInstance(overridesBackwardCompatibilityHelper) } } diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/basic.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/basic.kt new file mode 100644 index 00000000000..8775d553f70 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/basic.kt @@ -0,0 +1,18 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -PLATFORM_CLASS_MAPPED_TO_KOTLIN + +abstract class Test1 : Map { + fun containsKey(key: String): Boolean = TODO() + + fun getOrDefault(key: String, defaultValue: String): String = TODO() +} + +abstract class Test2 : MutableMap { + fun replace(key: String, value: String): String? = TODO() +} + +abstract class Test3 : java.util.AbstractMap() { + fun containsKey(key: String): Boolean = TODO() + + fun replace(key: String, value: String): String? = TODO() +} + diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/basic.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/basic.txt new file mode 100644 index 00000000000..592c40239e7 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/basic.txt @@ -0,0 +1,81 @@ +package + +public abstract class Test1 : kotlin.collections.Map { + public constructor Test1() + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public final override /*1*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + public final override /*1*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public abstract class Test2 : kotlin.collections.MutableMap { + public constructor Test2() + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.MutableSet> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.MutableSet + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.MutableCollection + public abstract override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun compute(/*0*/ p0: kotlin.String, /*1*/ p1: java.util.function.BiFunction): kotlin.String? + public open override /*1*/ /*fake_override*/ fun computeIfAbsent(/*0*/ p0: kotlin.String, /*1*/ p1: java.util.function.Function): kotlin.String + public open override /*1*/ /*fake_override*/ fun computeIfPresent(/*0*/ p0: kotlin.String, /*1*/ p1: java.util.function.BiFunction): kotlin.String? + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun merge(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.String, /*2*/ p2: java.util.function.BiFunction): kotlin.String? + public abstract override /*1*/ /*fake_override*/ fun put(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public abstract override /*1*/ /*fake_override*/ fun putAll(/*0*/ from: kotlin.collections.Map): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun putIfAbsent(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.String): kotlin.String? + public abstract override /*1*/ /*fake_override*/ fun remove(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun remove(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.Boolean + public final override /*1*/ fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun replace(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.String, /*2*/ p2: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun replaceAll(/*0*/ p0: java.util.function.BiFunction): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public abstract class Test3 : java.util.AbstractMap { + public constructor Test3() + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.MutableSet> + invisible_fake final override /*1*/ /*fake_override*/ var keySet: kotlin.collections.(Mutable)Set! + public open override /*1*/ /*fake_override*/ val keys: kotlin.collections.MutableSet + public open override /*1*/ /*fake_override*/ val size: kotlin.Int + invisible_fake final override /*1*/ /*fake_override*/ var values: kotlin.collections.(Mutable)Collection! + public open override /*1*/ /*fake_override*/ val values: kotlin.collections.MutableCollection + public open override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit + protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any! + public open override /*1*/ /*fake_override*/ fun compute(/*0*/ p0: kotlin.String!, /*1*/ p1: java.util.function.BiFunction): kotlin.String? + public open override /*1*/ /*fake_override*/ fun computeIfAbsent(/*0*/ p0: kotlin.String!, /*1*/ p1: java.util.function.Function): kotlin.String! + public open override /*1*/ /*fake_override*/ fun computeIfPresent(/*0*/ p0: kotlin.String!, /*1*/ p1: java.util.function.BiFunction): kotlin.String? + public final override /*1*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String!): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String!): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String!, /*1*/ defaultValue: kotlin.String!): kotlin.String! + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun merge(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.String, /*2*/ p2: java.util.function.BiFunction): kotlin.String? + public open override /*1*/ /*fake_override*/ fun put(/*0*/ key: kotlin.String!, /*1*/ value: kotlin.String!): kotlin.String? + public open override /*1*/ /*fake_override*/ fun putAll(/*0*/ from: kotlin.collections.Map): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun putIfAbsent(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.String!): kotlin.String? + public open override /*1*/ /*fake_override*/ fun remove(/*0*/ key: kotlin.String!): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun remove(/*0*/ key: kotlin.String!, /*1*/ value: kotlin.String!): kotlin.Boolean + public final override /*1*/ fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun replace(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.String!, /*2*/ p2: kotlin.String!): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun replaceAll(/*0*/ p0: java.util.function.BiFunction): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/delegation.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/delegation.kt new file mode 100644 index 00000000000..a4d4ee29353 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/delegation.kt @@ -0,0 +1,32 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -PLATFORM_CLASS_MAPPED_TO_KOTLIN + + +// Default methods from Java interfaces are NOT overridden by delegation. +// So, in the example below 'TestNoDelegationToDefaultMethods#replace' implicitly overrides a method from 'java.util.Map' (which is ok), +// but not a method from 'WithDelegation' (would be an error). +open class WithDelegation(val m: Map) : Map by m + +class TestNoDelegationToDefaultMethods(m: Map): WithDelegation(m) { + fun containsKey(key: String): Boolean = TODO() + + fun getOrDefault(key: String, defaultValue: String): String = TODO() + + fun replace(key: String, value: String): String? = TODO() +} + + + +interface IBaseWithKotlinDeclaration : Map { + fun replace(key: String, value: String): String? +} + +abstract class WithDelegation2(val m: Map) : Map by m, IBaseWithKotlinDeclaration + +abstract class TestNoDelegationToDefaultMethods2(m: Map): WithDelegation2(m) { + fun containsKey(key: String): Boolean = TODO() + + fun getOrDefault(key: String, defaultValue: String): String = TODO() + + // VIRTUAL_MEMBER_HIDDEN: hides member declaration inherited from a Kotlin interface + fun replace(key: String, value: String): String? = TODO() +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/delegation.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/delegation.txt new file mode 100644 index 00000000000..076420e5245 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/delegation.txt @@ -0,0 +1,93 @@ +package + +public interface IBaseWithKotlinDeclaration : kotlin.collections.Map { + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class TestNoDelegationToDefaultMethods : WithDelegation { + public constructor TestNoDelegationToDefaultMethods(/*0*/ m: kotlin.collections.Map) + public open override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public open override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public final override /*1*/ /*fake_override*/ val m: kotlin.collections.Map + public open override /*1*/ /*fake_override*/ val size: kotlin.Int + public open override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public final override /*1*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + public final override /*1*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public final fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public abstract class TestNoDelegationToDefaultMethods2 : WithDelegation2 { + public constructor TestNoDelegationToDefaultMethods2(/*0*/ m: kotlin.collections.Map) + public open override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public open override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public final override /*1*/ /*fake_override*/ val m: kotlin.collections.Map + public open override /*1*/ /*fake_override*/ val size: kotlin.Int + public open override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public final override /*1*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + public final override /*1*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public final override /*1*/ fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class WithDelegation : kotlin.collections.Map { + public constructor WithDelegation(/*0*/ m: kotlin.collections.Map) + public open override /*1*/ /*delegation*/ val entries: kotlin.collections.Set> + public open override /*1*/ /*delegation*/ val keys: kotlin.collections.Set + public final val m: kotlin.collections.Map + public open override /*1*/ /*delegation*/ val size: kotlin.Int + public open override /*1*/ /*delegation*/ val values: kotlin.collections.Collection + public open override /*1*/ /*delegation*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public open override /*1*/ /*delegation*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public open override /*1*/ /*delegation*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*delegation*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*delegation*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public abstract class WithDelegation2 : kotlin.collections.Map, IBaseWithKotlinDeclaration { + public constructor WithDelegation2(/*0*/ m: kotlin.collections.Map) + public open override /*2*/ /*delegation*/ val entries: kotlin.collections.Set> + public open override /*2*/ /*delegation*/ val keys: kotlin.collections.Set + public final val m: kotlin.collections.Map + public open override /*2*/ /*delegation*/ val size: kotlin.Int + public open override /*2*/ /*delegation*/ val values: kotlin.collections.Collection + public open override /*2*/ /*delegation*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public open override /*2*/ /*delegation*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public open override /*2*/ /*delegation*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*2*/ /*delegation*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*delegation*/ fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfaces.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfaces.kt new file mode 100644 index 00000000000..fbff5e5273d --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfaces.kt @@ -0,0 +1,13 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -PLATFORM_CLASS_MAPPED_TO_KOTLIN + +interface IBase : Map + +interface TestDerivedInterfaceHiding : IBase { + fun replace(key: String, value: String): String? +} + +interface TestDerivedInterfaceDefault : IBase { + fun replace(key: String, value: String): String? = TODO() +} + + diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfaces.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfaces.txt new file mode 100644 index 00000000000..cbe766ce7ee --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfaces.txt @@ -0,0 +1,51 @@ +package + +public interface IBase : kotlin.collections.Map { + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface TestDerivedInterfaceDefault : IBase { + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface TestDerivedInterfaceHiding : IBase { + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfacesWithKotlinFun.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfacesWithKotlinFun.kt new file mode 100644 index 00000000000..ea245fa01a3 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfacesWithKotlinFun.kt @@ -0,0 +1,15 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -PLATFORM_CLASS_MAPPED_TO_KOTLIN + +interface IBaseWithKotlinDeclaration : Map { + fun replace(key: String, value: String): String? +} + +interface TestDerivedInterfaceHidingWithKotlinDeclaration : IBaseWithKotlinDeclaration { + // VIRTUAL_MEMBER_HIDDEN: hides member declaration inherited from a Kotlin interface + fun replace(key: String, value: String): String? +} + +interface TestDerivedInterfaceDefaultWithKotlinDeclaration : IBaseWithKotlinDeclaration { + // VIRTUAL_MEMBER_HIDDEN: hides member declaration inherited from a Kotlin interface + fun replace(key: String, value: String): String? = TODO() +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfacesWithKotlinFun.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfacesWithKotlinFun.txt new file mode 100644 index 00000000000..dc5e3a069fd --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfacesWithKotlinFun.txt @@ -0,0 +1,52 @@ +package + +public interface IBaseWithKotlinDeclaration : kotlin.collections.Map { + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface TestDerivedInterfaceDefaultWithKotlinDeclaration : IBaseWithKotlinDeclaration { + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public open override /*1*/ fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface TestDerivedInterfaceHidingWithKotlinDeclaration : IBaseWithKotlinDeclaration { + public abstract override /*1*/ /*fake_override*/ val entries: kotlin.collections.Set> + public abstract override /*1*/ /*fake_override*/ val keys: kotlin.collections.Set + public abstract override /*1*/ /*fake_override*/ val size: kotlin.Int + public abstract override /*1*/ /*fake_override*/ val values: kotlin.collections.Collection + public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + @kotlin.SinceKotlin(version = "1.1") @kotlin.internal.PlatformDependent public open override /*1*/ /*fake_override*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + public abstract override /*1*/ fun replace(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/fillInStackTrace.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/fillInStackTrace.kt new file mode 100644 index 00000000000..31122228549 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/fillInStackTrace.kt @@ -0,0 +1,3 @@ +class ControlFlowException : Exception("") { + fun fillInStackTrace() = this +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/fillInStackTrace.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/fillInStackTrace.txt new file mode 100644 index 00000000000..4b84cc6a344 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/fillInStackTrace.txt @@ -0,0 +1,20 @@ +package + +public final class ControlFlowException : kotlin.Exception /* = java.lang.Exception */ { + public constructor ControlFlowException() + public open override /*1*/ /*fake_override*/ val cause: kotlin.Throwable? + public open override /*1*/ /*fake_override*/ val message: kotlin.String? + public final override /*1*/ /*fake_override*/ fun addSuppressed(/*0*/ p0: kotlin.Throwable!): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final override /*1*/ fun fillInStackTrace(): ControlFlowException + public open override /*1*/ /*fake_override*/ fun getLocalizedMessage(): kotlin.String! + public open override /*1*/ /*fake_override*/ fun getStackTrace(): kotlin.Array<(out) java.lang.StackTraceElement!>! + public final override /*1*/ /*fake_override*/ fun getSuppressed(): kotlin.Array<(out) kotlin.Throwable!>! + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun initCause(/*0*/ p0: kotlin.Throwable!): kotlin.Throwable! + public open override /*1*/ /*fake_override*/ fun printStackTrace(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun printStackTrace(/*0*/ p0: java.io.PrintStream!): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun printStackTrace(/*0*/ p0: java.io.PrintWriter!): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun setStackTrace(/*0*/ p0: kotlin.Array<(out) java.lang.StackTraceElement!>!): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/finalize.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/finalize.kt new file mode 100644 index 00000000000..4023f404640 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/finalize.kt @@ -0,0 +1,10 @@ +enum class TestEnum { + ENTRY; + + fun getDeclaringClass() {} + fun finalize() {} +} + +class TestFinalize { + fun finalize() {} +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/finalize.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/finalize.txt new file mode 100644 index 00000000000..cf3955f6911 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/finalize.txt @@ -0,0 +1,28 @@ +package + +public final enum class TestEnum : kotlin.Enum { + enum entry ENTRY + + private constructor TestEnum() + public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: TestEnum): kotlin.Int + public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final override /*1*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit + public final override /*1*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): kotlin.Unit + public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): TestEnum + public final /*synthesized*/ fun values(): kotlin.Array +} + +public final class TestFinalize { + public constructor TestFinalize() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun finalize(): 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/testsWithJava8/targetedBuiltIns/backwardCompatibility/hashMapGetOrDefault.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/hashMapGetOrDefault.kt new file mode 100644 index 00000000000..0e439e60068 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/hashMapGetOrDefault.kt @@ -0,0 +1,5 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -PLATFORM_CLASS_MAPPED_TO_KOTLIN + +class MyHashMap : java.util.HashMap() { + fun getOrDefault(key: String, defaultValue: String): String = TODO() +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/hashMapGetOrDefault.txt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/hashMapGetOrDefault.txt new file mode 100644 index 00000000000..25f5d549cd3 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/hashMapGetOrDefault.txt @@ -0,0 +1,59 @@ +package + +public final class MyHashMap : java.util.HashMap { + public constructor MyHashMap() + public open override /*1*/ /*fake_override*/ val entries: kotlin.collections.MutableSet> + invisible_fake final override /*1*/ /*fake_override*/ var entrySet: kotlin.collections.(Mutable)Set!>! + invisible_fake final override /*1*/ /*fake_override*/ var keySet: kotlin.collections.(Mutable)Set! + public open override /*1*/ /*fake_override*/ val keys: kotlin.collections.MutableSet + invisible_fake final override /*1*/ /*fake_override*/ val loadFactor: kotlin.Float + invisible_fake final override /*1*/ /*fake_override*/ var modCount: kotlin.Int + invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int + public open override /*1*/ /*fake_override*/ val size: kotlin.Int + invisible_fake final override /*1*/ /*fake_override*/ var table: kotlin.Array<(out) java.util.HashMap.Node!>! + invisible_fake final override /*1*/ /*fake_override*/ var threshold: kotlin.Int + invisible_fake final override /*1*/ /*fake_override*/ var values: kotlin.collections.(Mutable)Collection! + public open override /*1*/ /*fake_override*/ val values: kotlin.collections.MutableCollection + invisible_fake open override /*1*/ /*fake_override*/ fun afterNodeAccess(/*0*/ p0: java.util.HashMap.Node!): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun afterNodeInsertion(/*0*/ p0: kotlin.Boolean): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun afterNodeRemoval(/*0*/ p0: java.util.HashMap.Node!): kotlin.Unit + invisible_fake final override /*1*/ /*fake_override*/ fun capacity(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public open override /*1*/ /*fake_override*/ fun compute(/*0*/ p0: kotlin.String, /*1*/ p1: java.util.function.BiFunction): kotlin.String? + public open override /*1*/ /*fake_override*/ fun computeIfAbsent(/*0*/ p0: kotlin.String, /*1*/ p1: java.util.function.Function): kotlin.String + public open override /*1*/ /*fake_override*/ fun computeIfPresent(/*0*/ p0: kotlin.String, /*1*/ p1: java.util.function.BiFunction): kotlin.String? + public open override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun forEach(/*0*/ p0: java.util.function.BiConsumer): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.String): kotlin.String? + invisible_fake final override /*1*/ /*fake_override*/ fun getNode(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Any!): java.util.HashMap.Node! + public final override /*1*/ fun getOrDefault(/*0*/ key: kotlin.String, /*1*/ defaultValue: kotlin.String): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + invisible_fake open override /*1*/ /*fake_override*/ fun internalWriteEntries(/*0*/ p0: java.io.ObjectOutputStream!): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean + invisible_fake final override /*1*/ /*fake_override*/ fun loadFactor(): kotlin.Float + public open override /*1*/ /*fake_override*/ fun merge(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.String, /*2*/ p2: java.util.function.BiFunction): kotlin.String? + invisible_fake open override /*1*/ /*fake_override*/ fun newNode(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.String!, /*2*/ p2: kotlin.String!, /*3*/ p3: java.util.HashMap.Node!): java.util.HashMap.Node! + invisible_fake open override /*1*/ /*fake_override*/ fun newTreeNode(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.String!, /*2*/ p2: kotlin.String!, /*3*/ p3: java.util.HashMap.Node!): java.util.HashMap.TreeNode! + public open override /*1*/ /*fake_override*/ fun put(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun putAll(/*0*/ from: kotlin.collections.Map): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun putIfAbsent(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.String): kotlin.String? + invisible_fake final override /*1*/ /*fake_override*/ fun putMapEntries(/*0*/ p0: (kotlin.collections.MutableMap..kotlin.collections.Map?), /*1*/ p1: kotlin.Boolean): kotlin.Unit + invisible_fake final override /*1*/ /*fake_override*/ fun putVal(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.String!, /*2*/ p2: kotlin.String!, /*3*/ p3: kotlin.Boolean, /*4*/ p4: kotlin.Boolean): kotlin.String! + invisible_fake open override /*1*/ /*fake_override*/ fun readObject(/*0*/ p0: java.io.ObjectInputStream!): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun reinitialize(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun remove(/*0*/ key: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun remove(/*0*/ key: kotlin.String, /*1*/ value: kotlin.String): kotlin.Boolean + invisible_fake final override /*1*/ /*fake_override*/ fun removeNode(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Any!, /*2*/ p2: kotlin.Any!, /*3*/ p3: kotlin.Boolean, /*4*/ p4: kotlin.Boolean): java.util.HashMap.Node! + public open override /*1*/ /*fake_override*/ fun replace(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.String): kotlin.String? + public open override /*1*/ /*fake_override*/ fun replace(/*0*/ p0: kotlin.String, /*1*/ p1: kotlin.String, /*2*/ p2: kotlin.String): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun replaceAll(/*0*/ p0: java.util.function.BiFunction): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun replacementNode(/*0*/ p0: java.util.HashMap.Node!, /*1*/ p1: java.util.HashMap.Node!): java.util.HashMap.Node! + invisible_fake open override /*1*/ /*fake_override*/ fun replacementTreeNode(/*0*/ p0: java.util.HashMap.Node!, /*1*/ p1: java.util.HashMap.Node!): java.util.HashMap.TreeNode! + invisible_fake final override /*1*/ /*fake_override*/ fun resize(): kotlin.Array<(out) java.util.HashMap.Node!>! + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + invisible_fake final override /*1*/ /*fake_override*/ fun treeifyBin(/*0*/ p0: kotlin.Array<(out) java.util.HashMap.Node!>!, /*1*/ p1: kotlin.Int): kotlin.Unit + invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream!): kotlin.Unit +} diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt index b76a6a47bcb..8b8b0735f9b 100644 --- a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt @@ -7,8 +7,7 @@ class A : java.util.ArrayList() { } class A1 : java.util.ArrayList() { - // TODO: should be allowed - fun stream(): java.util.stream.Stream = super.stream() + fun stream(): java.util.stream.Stream = super.stream() } class B : Throwable("", null, false, false) diff --git a/compiler/tests-java8/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithJava8TestGenerated.java b/compiler/tests-java8/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithJava8TestGenerated.java index 1870f24ba96..9a971b88a23 100644 --- a/compiler/tests-java8/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithJava8TestGenerated.java +++ b/compiler/tests-java8/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithJava8TestGenerated.java @@ -196,5 +196,56 @@ public class DiagnosticsWithJava8TestGenerated extends AbstractDiagnosticsWithFu String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt"); doTest(fileName); } + + @TestMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class BackwardCompatibility extends AbstractDiagnosticsWithFullJdkTest { + public void testAllFilesPresentInBackwardCompatibility() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("basic.kt") + public void testBasic() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/basic.kt"); + doTest(fileName); + } + + @TestMetadata("delegation.kt") + public void testDelegation() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/delegation.kt"); + doTest(fileName); + } + + @TestMetadata("derivedInterfaces.kt") + public void testDerivedInterfaces() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfaces.kt"); + doTest(fileName); + } + + @TestMetadata("derivedInterfacesWithKotlinFun.kt") + public void testDerivedInterfacesWithKotlinFun() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/derivedInterfacesWithKotlinFun.kt"); + doTest(fileName); + } + + @TestMetadata("fillInStackTrace.kt") + public void testFillInStackTrace() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/fillInStackTrace.kt"); + doTest(fileName); + } + + @TestMetadata("finalize.kt") + public void testFinalize() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/finalize.kt"); + doTest(fileName); + } + + @TestMetadata("hashMapGetOrDefault.kt") + public void testHashMapGetOrDefault() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/backwardCompatibility/hashMapGetOrDefault.kt"); + doTest(fileName); + } + } } } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt index 70e289ee5cd..29929b6f8c2 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.js.resolve.diagnostics.* import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap import org.jetbrains.kotlin.resolve.IdentifierChecker import org.jetbrains.kotlin.resolve.OverloadFilter +import org.jetbrains.kotlin.resolve.OverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.resolve.PlatformConfigurator import org.jetbrains.kotlin.resolve.calls.checkers.ReifiedTypeParameterSubstitutionChecker import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker @@ -47,7 +48,8 @@ object JsPlatformConfigurator : PlatformConfigurator( identifierChecker = IdentifierChecker.DEFAULT, overloadFilter = OverloadFilter.DEFAULT, platformToKotlinClassMap = PlatformToKotlinClassMap.EMPTY, - delegationFilter = DelegationFilter.DEFAULT + delegationFilter = DelegationFilter.DEFAULT, + overridesBackwardCompatibilityHelper = OverridesBackwardCompatibilityHelper.DEFAULT ) { override fun configureModuleComponents(container: StorageComponentContainer) { container.useImpl()