Do not use LanguageVersionSettings.languageVersion directly

This commit is contained in:
Alexander Udalov
2017-02-03 13:21:50 +03:00
parent b784680fe2
commit 389ddf26b3
4 changed files with 11 additions and 8 deletions
@@ -51,7 +51,6 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
import org.jetbrains.kotlin.codegen.when.SwitchCodegen; import org.jetbrains.kotlin.codegen.when.SwitchCodegen;
import org.jetbrains.kotlin.codegen.when.SwitchCodegenUtil; import org.jetbrains.kotlin.codegen.when.SwitchCodegenUtil;
import org.jetbrains.kotlin.config.ApiVersion; import org.jetbrains.kotlin.config.ApiVersion;
import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor; import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor;
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor; import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor;
@@ -145,8 +144,6 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
private boolean shouldMarkLineNumbers = true; private boolean shouldMarkLineNumbers = true;
private int finallyDepth = 0; private int finallyDepth = 0;
private static final ApiVersion apiVersion1_1 = ApiVersion.createByLanguageVersion(LanguageVersion.KOTLIN_1_1);
public ExpressionCodegen( public ExpressionCodegen(
@NotNull MethodVisitor mv, @NotNull MethodVisitor mv,
@NotNull FrameMap frameMap, @NotNull FrameMap frameMap,
@@ -3656,8 +3653,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
// of version 1.0 is used and the user forgot to explicitly specify language version / API version. // 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" // This should be enabled when/if we decide to drop support for "-language-version 1.0" / "-api-version 1.0"
//noinspection ConstantConditions, PointlessBooleanExpression //noinspection ConstantConditions, PointlessBooleanExpression
if (false && state.getLanguageVersionSettings().getLanguageVersion() != LanguageVersion.KOTLIN_1_0 && if (false && state.getLanguageVersionSettings().getApiVersion().compareTo(ApiVersion.KOTLIN_1_1) >= 0) {
state.getLanguageVersionSettings().getApiVersion().compareTo(apiVersion1_1) >= 0) {
return StackValue.operation(Type.BOOLEAN_TYPE, new Function1<InstructionAdapter, Unit>() { return StackValue.operation(Type.BOOLEAN_TYPE, new Function1<InstructionAdapter, Unit>() {
@Override @Override
public Unit invoke(InstructionAdapter v) { public Unit invoke(InstructionAdapter v) {
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.resolve.jvm package org.jetbrains.kotlin.resolve.jvm
import org.jetbrains.kotlin.builtins.KotlinBuiltIns 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.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
@@ -29,7 +29,8 @@ import org.jetbrains.kotlin.serialization.deserialization.PLATFORM_DEPENDENT_ANN
object JvmDelegationFilter : DelegationFilter { object JvmDelegationFilter : DelegationFilter {
override fun filter(interfaceMember: CallableMemberDescriptor, languageVersionSettings: LanguageVersionSettings): Boolean { 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 //We always have only one implementation otherwise it's an error in kotlin and java
val realMember = DescriptorUtils.unwrapFakeOverride(interfaceMember) val realMember = DescriptorUtils.unwrapFakeOverride(interfaceMember)
return !isJavaDefaultMethod(realMember) && !isBuiltInMemberMappedToJavaDefault(realMember) return !isJavaDefaultMethod(realMember) && !isBuiltInMemberMappedToJavaDefault(realMember)
@@ -34,6 +34,9 @@ class ApiVersion private constructor(
override fun toString() = versionString override fun toString() = versionString
companion object { companion object {
@JvmField
val KOTLIN_1_1 = createByLanguageVersion(LanguageVersion.KOTLIN_1_1)
@JvmField @JvmField
val LATEST: ApiVersion = createByLanguageVersion(LanguageVersion.Companion.LATEST) val LATEST: ApiVersion = createByLanguageVersion(LanguageVersion.Companion.LATEST)
@@ -41,6 +41,7 @@ enum class LanguageFeature(val sinceVersion: LanguageVersion?, val hintUrl: Stri
RefinedSamAdaptersPriority(KOTLIN_1_1), RefinedSamAdaptersPriority(KOTLIN_1_1),
SafeCallBoundSmartCasts(KOTLIN_1_1), SafeCallBoundSmartCasts(KOTLIN_1_1),
TypeInferenceOnGenericsForCallableReferences(KOTLIN_1_1), TypeInferenceOnGenericsForCallableReferences(KOTLIN_1_1),
NoDelegationToJavaDefaultInterfaceMembers(KOTLIN_1_1),
// Experimental features // Experimental features
MultiPlatformProjects(null), MultiPlatformProjects(null),
@@ -89,8 +90,10 @@ enum class LanguageVersion(val major: Int, val minor: Int) : DescriptionAware {
interface LanguageVersionSettings { interface LanguageVersionSettings {
fun supportsFeature(feature: LanguageFeature): Boolean fun supportsFeature(feature: LanguageFeature): Boolean
val languageVersion: LanguageVersion
val apiVersion: ApiVersion 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( class LanguageVersionSettingsImpl @JvmOverloads constructor(