From b7808ba24d0404c0b2cc3c273597e60e9f0883ae Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 15 Jun 2018 14:21:17 +0200 Subject: [PATCH] Pass JvmTarget to KotlinTypeMapper Also use KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT instead of false in FileRankingCalculator --- .../KotlinToJvmSignatureMapperImpl.kt | 3 ++- ...FactoryForDuplicateSignatureDiagnostics.kt | 5 +++-- .../kotlin/codegen/state/GenerationState.kt | 3 +-- .../codegen/state/KotlinTypeMapper.java | 22 ++++++------------- .../idea/debugger/FileRankingCalculator.kt | 8 +++++-- .../parcel/ParcelableDeclarationChecker.kt | 9 ++++---- .../IdeaKotlinUastResolveProviderService.kt | 9 ++++---- .../CliKotlinUastResolveProviderService.kt | 3 ++- 8 files changed, 31 insertions(+), 31 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/KotlinToJvmSignatureMapperImpl.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/KotlinToJvmSignatureMapperImpl.kt index 3bfb68dae3f..84645b1d30c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/KotlinToJvmSignatureMapperImpl.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/KotlinToJvmSignatureMapperImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.codegen.signature import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.resolve.BindingContext @@ -17,7 +18,7 @@ class KotlinToJvmSignatureMapperImpl : KotlinToJvmSignatureMapper { // We use empty BindingContext, because it is only used by KotlinTypeMapper for purposes irrelevant to the needs of this class private val typeMapper = KotlinTypeMapper( BindingContext.EMPTY, ClassBuilderMode.LIGHT_CLASSES, - IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, + IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, JvmTarget.DEFAULT, KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, false ) 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 bef7647e1e5..b91b946301a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/BuilderFactoryForDuplicateSignatureDiagnostics.kt @@ -10,6 +10,7 @@ import com.intellij.util.containers.MultiMap import org.jetbrains.kotlin.codegen.ClassBuilderFactory import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.SignatureCollectingClassBuilderFactory +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE @@ -54,8 +55,8 @@ class BuilderFactoryForDuplicateSignatureDiagnostics( // Avoid errors when some classes are not loaded for some reason private val typeMapper = KotlinTypeMapper( - bindingContext, ClassBuilderMode.LIGHT_CLASSES, IncompatibleClassTracker.DoNothing, moduleName, false, isReleaseCoroutines, - isIrBackend + bindingContext, ClassBuilderMode.LIGHT_CLASSES, IncompatibleClassTracker.DoNothing, moduleName, JvmTarget.DEFAULT, + isReleaseCoroutines, isIrBackend ) private val reportDiagnosticsTasks = ArrayList<() -> Unit>() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index c11d672f41c..32ad21a5f51 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -172,7 +172,6 @@ class GenerationState private constructor( val languageVersionSettings = configuration.languageVersionSettings val target = configuration.get(JVMConfigurationKeys.JVM_TARGET) ?: JvmTarget.DEFAULT - val isJvm8Target: Boolean = target == JvmTarget.JVM_1_8 val moduleName: String = moduleName ?: JvmCodegenUtil.getModuleName(module) val classBuilderMode: ClassBuilderMode = builderFactory.classBuilderMode @@ -187,7 +186,7 @@ class GenerationState private constructor( classBuilderMode, IncompatibleClassTrackerImpl(extraJvmDiagnosticsTrace), this.moduleName, - isJvm8Target, + target, configuration.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines), isIrBackend ) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java index 1dbecfe92c1..33cebbb3b58 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.codegen.inline.FictitiousArrayConstructor; import org.jetbrains.kotlin.codegen.signature.AsmTypeFactory; import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter; import org.jetbrains.kotlin.codegen.signature.JvmSignatureWriter; +import org.jetbrains.kotlin.config.JvmTarget; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.LocalVariableAccessorDescriptor; import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor; @@ -85,9 +86,9 @@ public class KotlinTypeMapper { private final ClassBuilderMode classBuilderMode; private final IncompatibleClassTracker incompatibleClassTracker; private final String moduleName; - private final boolean isJvm8Target; + private final JvmTarget jvmTarget; private final boolean isReleaseCoroutines; - private boolean isIrBackend; + private final boolean isIrBackend; private final TypeMappingConfiguration typeMappingConfiguration = new TypeMappingConfiguration() { @NotNull @@ -157,17 +158,7 @@ public class KotlinTypeMapper { @NotNull ClassBuilderMode classBuilderMode, @NotNull IncompatibleClassTracker incompatibleClassTracker, @NotNull String moduleName, - boolean isJvm8Target - ) { - this(bindingContext, classBuilderMode, incompatibleClassTracker, moduleName, isJvm8Target, false, false); - } - - public KotlinTypeMapper( - @NotNull BindingContext bindingContext, - @NotNull ClassBuilderMode classBuilderMode, - @NotNull IncompatibleClassTracker incompatibleClassTracker, - @NotNull String moduleName, - boolean isJvm8Target, + @NotNull JvmTarget jvmTarget, boolean isReleaseCoroutines, boolean isIrBackend ) { @@ -175,7 +166,7 @@ public class KotlinTypeMapper { this.classBuilderMode = classBuilderMode; this.incompatibleClassTracker = incompatibleClassTracker; this.moduleName = moduleName; - this.isJvm8Target = isJvm8Target; + this.jvmTarget = jvmTarget; this.isReleaseCoroutines = isReleaseCoroutines; this.isIrBackend = isIrBackend; } @@ -954,7 +945,8 @@ public class KotlinTypeMapper { return new CallableMethod( owner, ownerForDefaultImpl, defaultImplDesc, signature, invokeOpcode, thisClass, dispatchReceiverKotlinType, receiverParameterType, extensionReceiverKotlinType, calleeType, returnKotlinType, - isJvm8Target ? isInterfaceMember : invokeOpcode == INVOKEINTERFACE, isDefaultMethodInInterface + jvmTarget.compareTo(JvmTarget.JVM_1_8) >= 0 ? isInterfaceMember : invokeOpcode == INVOKEINTERFACE, + isDefaultMethodInInterface ); } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/FileRankingCalculator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/FileRankingCalculator.kt index 5583c39a94c..d8f97cf3f24 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/FileRankingCalculator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/FileRankingCalculator.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -417,7 +418,10 @@ abstract class FileRankingCalculator( } private fun makeTypeMapper(bindingContext: BindingContext): KotlinTypeMapper { - return KotlinTypeMapper(bindingContext, ClassBuilderMode.LIGHT_CLASSES, IncompatibleClassTracker.DoNothing, "debugger", false) + return KotlinTypeMapper( + bindingContext, ClassBuilderMode.LIGHT_CLASSES, IncompatibleClassTracker.DoNothing, "debugger", JvmTarget.DEFAULT, + KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, false + ) } companion object { @@ -429,4 +433,4 @@ private fun String.simpleName() = substringAfterLast('.').substringAfterLast('$' private fun PsiElement.getLine(): Int { return DiagnosticUtils.getLineAndColumnInPsiFile(containingFile, textRange).line -} \ No newline at end of file +} diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableDeclarationChecker.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableDeclarationChecker.kt index 9a7100ce06a..a828a1d6ede 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableDeclarationChecker.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableDeclarationChecker.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.FrameMap import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor @@ -27,8 +28,8 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker +import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.jvm.annotations.findJvmFieldAnnotation @@ -184,9 +185,9 @@ class ParcelableDeclarationChecker : DeclarationChecker { ClassBuilderMode.FULL, IncompatibleClassTracker.DoNothing, descriptor.module.name.asString(), - /* isJvm8Target */ false, - /* isReleaseCoroutines */ KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, - /* isIrBackend*/false + JvmTarget.DEFAULT, + KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, + false ) for (parameter in primaryConstructor?.valueParameters.orEmpty()) { diff --git a/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt b/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt index 11ee84abb65..0c312b9dc67 100644 --- a/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt +++ b/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt @@ -20,16 +20,17 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.project.TargetPlatformDetector +import org.jetbrains.kotlin.idea.project.languageVersionSettings +import org.jetbrains.kotlin.idea.util.module import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.uast.kotlin.KotlinUastResolveProviderService -import org.jetbrains.kotlin.idea.project.TargetPlatformDetector -import org.jetbrains.kotlin.idea.project.languageVersionSettings -import org.jetbrains.kotlin.idea.util.module class IdeaKotlinUastResolveProviderService : KotlinUastResolveProviderService { override fun getBindingContext(element: KtElement) = element.analyze(BodyResolveMode.PARTIAL) @@ -37,7 +38,7 @@ class IdeaKotlinUastResolveProviderService : KotlinUastResolveProviderService { override fun getTypeMapper(element: KtElement): KotlinTypeMapper? { return KotlinTypeMapper( getBindingContext(element), ClassBuilderMode.LIGHT_CLASSES, - IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, + IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, JvmTarget.DEFAULT, KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, false ) } diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/CliKotlinUastResolveProviderService.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/CliKotlinUastResolveProviderService.kt index 7c96af79c62..0db0dc8b0de 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/CliKotlinUastResolveProviderService.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/CliKotlinUastResolveProviderService.kt @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.container.ComponentProvider @@ -56,7 +57,7 @@ class UastAnalysisHandlerExtension : AnalysisHandlerExtension { val typeMapper = KotlinTypeMapper( bindingContext, ClassBuilderMode.LIGHT_CLASSES, - IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, + IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, JvmTarget.DEFAULT, KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT, false ) this.typeMapper = typeMapper