From bbb5d4eb0f9d400e945f9dabb68d0daab0d3b31c Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 19 Jan 2017 11:30:52 +0300 Subject: [PATCH] Fix 1.0-compatibility mode for JDK dependendent built-ins Do not report UNSUPPORTED_FEATURE if there is no overridden descriptors E.g. in case of property accessors --- .../jvm/checkers/AdditionalBuiltInsMembersChecker.kt | 3 ++- .../targetedBuiltIns/unsupportedFeature.kt | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/AdditionalBuiltInsMembersChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/AdditionalBuiltInsMembersChecker.kt index b704d3f45b9..df0e36afd30 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/AdditionalBuiltInsMembersChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/AdditionalBuiltInsMembersChecker.kt @@ -56,7 +56,8 @@ object AdditionalBuiltInsMemberOverrideDeclarationChecker : DeclarationChecker { val resultingDescriptor = descriptor as? CallableMemberDescriptor ?: return val overrideKeyword = declaration.modifierList?.getModifier(KtTokens.OVERRIDE_KEYWORD) ?: return - if (resultingDescriptor.original.overriddenDescriptors.all { it.isAdditionalBuiltInMember() }) { + val overriddenDescriptors = resultingDescriptor.original.overriddenDescriptors + if (overriddenDescriptors.isNotEmpty() && overriddenDescriptors.all { it.isAdditionalBuiltInMember() }) { diagnosticHolder.report(Errors.UNSUPPORTED_FEATURE.on(overrideKeyword, LanguageFeature.AdditionalBuiltInsMembers)) } } diff --git a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt index a12cebf01af..65e50f0f1bb 100644 --- a/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt +++ b/compiler/testData/diagnostics/testsWithJava8/targetedBuiltIns/unsupportedFeature.kt @@ -29,3 +29,14 @@ fun foo(x: List, y: Throwable) { // Falls back to extension in stdlib y.printStackTrace() } + +interface X { + fun foo(): Int = 1 + val hidden: Boolean +} + +class Y : X { + // There should not be UNSUPPORTED_FEATURE diagnostic + override fun foo() = 1 + override var hidden: Boolean = true +}