Add LanguageVersionSettings to KotlinTypeMapper

KotlinTypeMapper clients should use proper LanguageVersionSettings when
possible.
This commit is contained in:
Dmitry Petrov
2018-11-21 09:16:04 +03:00
parent 5636227857
commit b3ce2eea39
9 changed files with 32 additions and 16 deletions
@@ -18,7 +18,8 @@ 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, JvmTarget.DEFAULT, KotlinTypeMapper.RELEASE_COROUTINES_DEFAULT,
IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, JvmTarget.DEFAULT,
KotlinTypeMapper.LANGUAGE_VERSION_SETTINGS_DEFAULT, // TODO use proper LanguageVersionSettings
false
)
@@ -11,6 +11,7 @@ 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.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE
@@ -48,7 +49,7 @@ class BuilderFactoryForDuplicateSignatureDiagnostics(
bindingContext: BindingContext,
private val diagnostics: DiagnosticSink,
moduleName: String,
isReleaseCoroutines: Boolean,
languageVersionSettings: LanguageVersionSettings,
shouldGenerate: (JvmDeclarationOrigin) -> Boolean,
isIrBackend: Boolean
) : SignatureCollectingClassBuilderFactory(builderFactory, shouldGenerate) {
@@ -56,7 +57,7 @@ class BuilderFactoryForDuplicateSignatureDiagnostics(
// Avoid errors when some classes are not loaded for some reason
private val typeMapper = KotlinTypeMapper(
bindingContext, ClassBuilderMode.LIGHT_CLASSES, IncompatibleClassTracker.DoNothing, moduleName, JvmTarget.DEFAULT,
isReleaseCoroutines, isIrBackend
languageVersionSettings, isIrBackend
)
private val reportDiagnosticsTasks = ArrayList<() -> Unit>()
@@ -192,7 +192,7 @@ class GenerationState private constructor(
IncompatibleClassTrackerImpl(extraJvmDiagnosticsTrace),
this.moduleName,
target,
configuration.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines),
languageVersionSettings,
isIrBackend
)
val intrinsics: IntrinsicMethods = run {
@@ -260,8 +260,7 @@ class GenerationState private constructor(
},
{
BuilderFactoryForDuplicateSignatureDiagnostics(
it, this.bindingContext, diagnostics, this.moduleName,
isReleaseCoroutines = languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines),
it, this.bindingContext, diagnostics, this.moduleName, this.languageVersionSettings,
shouldGenerate = { !shouldOnlyCollectSignatures(it) },
isIrBackend = isIrBackend
).apply { duplicateSignatureFactory = this }
@@ -25,6 +25,9 @@ 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.config.LanguageFeature;
import org.jetbrains.kotlin.config.LanguageVersionSettings;
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.impl.LocalVariableAccessorDescriptor;
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor;
@@ -84,6 +87,7 @@ public class KotlinTypeMapper {
private final IncompatibleClassTracker incompatibleClassTracker;
private final String moduleName;
private final JvmTarget jvmTarget;
private final LanguageVersionSettings languageVersionSettings;
private final boolean isReleaseCoroutines;
private final boolean isIrBackend;
@@ -156,7 +160,7 @@ public class KotlinTypeMapper {
@NotNull IncompatibleClassTracker incompatibleClassTracker,
@NotNull String moduleName,
@NotNull JvmTarget jvmTarget,
boolean isReleaseCoroutines,
@NotNull LanguageVersionSettings languageVersionSettings,
boolean isIrBackend
) {
this.bindingContext = bindingContext;
@@ -164,11 +168,15 @@ public class KotlinTypeMapper {
this.incompatibleClassTracker = incompatibleClassTracker;
this.moduleName = moduleName;
this.jvmTarget = jvmTarget;
this.isReleaseCoroutines = isReleaseCoroutines;
this.languageVersionSettings = languageVersionSettings;
this.isReleaseCoroutines = languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines);
this.isIrBackend = isIrBackend;
}
public static final boolean RELEASE_COROUTINES_DEFAULT = false;
/**
* Use proper LanguageVersionSettings where possible.
*/
public static final LanguageVersionSettings LANGUAGE_VERSION_SETTINGS_DEFAULT = LanguageVersionSettingsImpl.DEFAULT;
@NotNull
public BindingContext getBindingContext() {