From 389ddf26b33546cae74208a468e5eb90bc7c22b7 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 3 Feb 2017 13:21:50 +0300 Subject: [PATCH] Do not use LanguageVersionSettings.languageVersion directly --- .../src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java | 6 +----- .../org/jetbrains/kotlin/resolve/jvm/JvmDelegationFilter.kt | 5 +++-- compiler/util/src/org/jetbrains/kotlin/config/ApiVersion.kt | 3 +++ .../org/jetbrains/kotlin/config/LanguageVersionSettings.kt | 5 ++++- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 970d5139c68..6b455107e11 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -51,7 +51,6 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper; import org.jetbrains.kotlin.codegen.when.SwitchCodegen; import org.jetbrains.kotlin.codegen.when.SwitchCodegenUtil; import org.jetbrains.kotlin.config.ApiVersion; -import org.jetbrains.kotlin.config.LanguageVersion; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor; import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor; @@ -145,8 +144,6 @@ public class ExpressionCodegen extends KtVisitor impleme private boolean shouldMarkLineNumbers = true; private int finallyDepth = 0; - private static final ApiVersion apiVersion1_1 = ApiVersion.createByLanguageVersion(LanguageVersion.KOTLIN_1_1); - public ExpressionCodegen( @NotNull MethodVisitor mv, @NotNull FrameMap frameMap, @@ -3656,8 +3653,7 @@ public class ExpressionCodegen extends KtVisitor impleme // of version 1.0 is used and the user forgot to explicitly specify language version / API version. // This should be enabled when/if we decide to drop support for "-language-version 1.0" / "-api-version 1.0" //noinspection ConstantConditions, PointlessBooleanExpression - if (false && state.getLanguageVersionSettings().getLanguageVersion() != LanguageVersion.KOTLIN_1_0 && - state.getLanguageVersionSettings().getApiVersion().compareTo(apiVersion1_1) >= 0) { + if (false && state.getLanguageVersionSettings().getApiVersion().compareTo(ApiVersion.KOTLIN_1_1) >= 0) { return StackValue.operation(Type.BOOLEAN_TYPE, new Function1() { @Override public Unit invoke(InstructionAdapter v) { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmDelegationFilter.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmDelegationFilter.kt index 07fa2fe4fc0..36577bd980e 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmDelegationFilter.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmDelegationFilter.kt @@ -17,7 +17,7 @@ package org.jetbrains.kotlin.resolve.jvm import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.Modality @@ -29,7 +29,8 @@ import org.jetbrains.kotlin.serialization.deserialization.PLATFORM_DEPENDENT_ANN object JvmDelegationFilter : DelegationFilter { override fun filter(interfaceMember: CallableMemberDescriptor, languageVersionSettings: LanguageVersionSettings): Boolean { - if (languageVersionSettings.languageVersion == LanguageVersion.KOTLIN_1_0) return true + if (!languageVersionSettings.supportsFeature(LanguageFeature.NoDelegationToJavaDefaultInterfaceMembers)) return true + //We always have only one implementation otherwise it's an error in kotlin and java val realMember = DescriptorUtils.unwrapFakeOverride(interfaceMember) return !isJavaDefaultMethod(realMember) && !isBuiltInMemberMappedToJavaDefault(realMember) diff --git a/compiler/util/src/org/jetbrains/kotlin/config/ApiVersion.kt b/compiler/util/src/org/jetbrains/kotlin/config/ApiVersion.kt index 40f55dbc2cc..01fb0bd60c9 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/ApiVersion.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/ApiVersion.kt @@ -34,6 +34,9 @@ class ApiVersion private constructor( override fun toString() = versionString companion object { + @JvmField + val KOTLIN_1_1 = createByLanguageVersion(LanguageVersion.KOTLIN_1_1) + @JvmField val LATEST: ApiVersion = createByLanguageVersion(LanguageVersion.Companion.LATEST) diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 67b672912bf..0ed58b05fd8 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -41,6 +41,7 @@ enum class LanguageFeature(val sinceVersion: LanguageVersion?, val hintUrl: Stri RefinedSamAdaptersPriority(KOTLIN_1_1), SafeCallBoundSmartCasts(KOTLIN_1_1), TypeInferenceOnGenericsForCallableReferences(KOTLIN_1_1), + NoDelegationToJavaDefaultInterfaceMembers(KOTLIN_1_1), // Experimental features MultiPlatformProjects(null), @@ -89,8 +90,10 @@ enum class LanguageVersion(val major: Int, val minor: Int) : DescriptionAware { interface LanguageVersionSettings { fun supportsFeature(feature: LanguageFeature): Boolean - val languageVersion: LanguageVersion val apiVersion: ApiVersion + + // Please do not use this to enable/disable specific features/checks. Instead add a new LanguageFeature entry and call supportsFeature + val languageVersion: LanguageVersion } class LanguageVersionSettingsImpl @JvmOverloads constructor(