From 37b32907ab27043a33e9bdd22b2d8e8bb89eb359 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Tue, 1 Nov 2022 17:42:31 +0100 Subject: [PATCH] Fix a compatibility issue with AnnotationDescriptor The `getSourceForArgument` method should be in the interface, but adding it is a breaking change for Java usages, since the module is not built with -Xjvm-default (KT-54749). Move the method to an extension. This doesn't change the behavior, since it was only ever called on LazyAnnotationDescriptor. --- buildSrc/src/main/kotlin/common-configuration.gradle.kts | 1 + .../kotlin/resolve/lazy/descriptors/LazyAnnotations.kt | 5 ++++- .../kotlin/psi2ir/generators/ConstantValueGeneratorImpl.kt | 1 + .../kotlin/descriptors/annotations/AnnotationDescriptor.kt | 1 - .../descriptors/annotations/AnnotationDescriptorImpl.java | 6 ------ 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/buildSrc/src/main/kotlin/common-configuration.gradle.kts b/buildSrc/src/main/kotlin/common-configuration.gradle.kts index 9f99d5d2059..613d409ae55 100644 --- a/buildSrc/src/main/kotlin/common-configuration.gradle.kts +++ b/buildSrc/src/main/kotlin/common-configuration.gradle.kts @@ -288,4 +288,5 @@ fun skipJvmDefaultAllForModule(path: String): Boolean = // java.lang.IllegalAccessError: tried to access method kotlin.reflect.jvm.internal.impl.types.checker.ClassicTypeSystemContext$substitutionSupertypePolicy$2.( // Lkotlin/reflect/jvm/internal/impl/types/checker/ClassicTypeSystemContext;Lkotlin/reflect/jvm/internal/impl/types/TypeSubstitutor; // )V from class kotlin.reflect.jvm.internal.impl.resolve.OverridingUtilTypeSystemContext + // KT-54749 path == ":core:descriptors" diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyAnnotations.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyAnnotations.kt index 341a75fddec..c0cf6230ac2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyAnnotations.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyAnnotations.kt @@ -125,7 +125,7 @@ class LazyAnnotationDescriptor( valueArgumentsWithSourceInfo.mapValues { it.value.first } } - override fun getSourceForArgument(name: Name): SourceElement = + fun getSourceForArgument(name: Name): SourceElement = valueArgumentsWithSourceInfo[name]?.second ?: SourceElement.NO_SOURCE override fun forceResolveAllContents() { @@ -149,3 +149,6 @@ class LazyAnnotationDescriptor( override fun toString(): String = "${name.asString()} declared in LazyAnnotations.kt" } } + +fun AnnotationDescriptor.getSourceForArgument(name: Name): SourceElement = + (this as? LazyAnnotationDescriptor)?.getSourceForArgument(name) ?: SourceElement.NO_SOURCE diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ConstantValueGeneratorImpl.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ConstantValueGeneratorImpl.kt index 3a16e2c927b..ff81e3fdca9 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ConstantValueGeneratorImpl.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ConstantValueGeneratorImpl.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.resolve.lazy.descriptors.getSourceForArgument import org.jetbrains.kotlin.resolve.source.getPsi class ConstantValueGeneratorImpl( diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor.kt index a740c5fdccc..4a424f7c0fe 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptor.kt @@ -37,7 +37,6 @@ interface AnnotationDescriptor : AnnotationMarker { val source: SourceElement - fun getSourceForArgument(name: Name): SourceElement = SourceElement.NO_SOURCE } val AnnotationDescriptor.abbreviationFqName: FqName? diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptorImpl.java index ab53cbe7a10..826e5236de0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationDescriptorImpl.java @@ -67,12 +67,6 @@ public class AnnotationDescriptorImpl implements AnnotationDescriptor { return source; } - @NotNull - @Override - public SourceElement getSourceForArgument(@NotNull Name name) { - return SourceElement.NO_SOURCE; - } - @Override public String toString() { return DescriptorRenderer.FQ_NAMES_IN_TYPES.renderAnnotation(this, null);