From 49a8c7a9472068d61a69e72dd775581750cecb98 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 24 Jul 2015 02:20:36 +0300 Subject: [PATCH] Drop BindingContext.ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT Use AnnotationDescriptor.getSource() instead --- .../jvm/platform/JvmPlatformConfigurator.kt | 2 +- .../kotlin/resolve/BindingContext.java | 4 +--- .../kotlin/resolve/DescriptorToSourceUtils.kt | 18 +++++++++++------- .../kotlin/resolve/ModifiersChecker.java | 2 +- .../kotlin/resolve/OverrideResolver.java | 18 +++++++++--------- .../kotlin/builtins/KotlinBuiltIns.java | 5 ----- 6 files changed, 23 insertions(+), 26 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt index 08919c888e2..4805ee105ec 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt @@ -181,7 +181,7 @@ public class PublicFieldAnnotationChecker: DeclarationChecker { val annotation = descriptor.findPublicFieldAnnotation() ?: return fun report() { - val annotationEntry = bindingContext.get(BindingContext.ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT, annotation) ?: return + val annotationEntry = DescriptorToSourceUtils.getSourceFromAnnotation(annotation) ?: return diagnosticHolder.report(ErrorsJvm.INAPPLICABLE_PUBLIC_FIELD.on(annotationEntry)) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java index 952e2938faf..7d6286ac3f1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java @@ -86,9 +86,7 @@ public interface BindingContext { } }; - WritableSlice ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT = Slices.createSimpleSlice(); - WritableSlice ANNOTATION = - Slices.sliceBuilder().setOpposite(ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT).build(); + WritableSlice ANNOTATION = Slices.createSimpleSlice(); WritableSlice> COMPILE_TIME_VALUE = Slices.createSimpleSlice(); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorToSourceUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorToSourceUtils.kt index 4436d3e17fe..23b9b7f06c7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorToSourceUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorToSourceUtils.kt @@ -17,19 +17,18 @@ package org.jetbrains.kotlin.resolve import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor +import org.jetbrains.kotlin.psi.JetAnnotationEntry import org.jetbrains.kotlin.psi.JetFile -import org.jetbrains.kotlin.resolve.source.* - +import org.jetbrains.kotlin.resolve.source.getPsi import java.util.ArrayList - -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED -import kotlin.platform.* +import kotlin.platform.platformStatic public object DescriptorToSourceUtils { private fun collectEffectiveReferencedDescriptors(result: MutableList, descriptor: DeclarationDescriptor) { @@ -57,6 +56,11 @@ public object DescriptorToSourceUtils { return (descriptor as? DeclarationDescriptorWithSource)?.getSource()?.getPsi() } + platformStatic + public fun getSourceFromAnnotation(descriptor: AnnotationDescriptor): JetAnnotationEntry? { + return descriptor.source.getPsi() as? JetAnnotationEntry + } + // NOTE this is also used by KDoc // Returns PSI element for descriptor. If there are many relevant elements (e.g. it is fake override // with multiple declarations), returns null. It can't find declarations in builtins or decompiled code. diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java index 152541939ba..695b3de2eee 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java @@ -377,7 +377,7 @@ public class ModifiersChecker { AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(new FqName("kotlin.platform.platformName")); if (annotation == null) return; - JetAnnotationEntry annotationEntry = trace.get(BindingContext.ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT, annotation); + JetAnnotationEntry annotationEntry = DescriptorToSourceUtils.getSourceFromAnnotation(annotation); if (annotationEntry == null) return; if (descriptor instanceof FunctionDescriptor && !isRenamableFunction((FunctionDescriptor) descriptor)) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java index 70fb934364e..0672d778104 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java @@ -30,6 +30,7 @@ import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.ReadOnly; +import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.kotlin.lexer.JetTokens; @@ -49,7 +50,6 @@ import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.*; import static org.jetbrains.kotlin.diagnostics.Errors.*; import static org.jetbrains.kotlin.resolve.DescriptorUtils.classCanHaveAbstractMembers; import static org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE; -import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns; public class OverrideResolver { @@ -716,15 +716,15 @@ public class OverrideResolver { } @NotNull - private JetAnnotationEntry findDataAnnotationForDataClass(@NotNull DeclarationDescriptor dataClass) { - ClassDescriptor stdDataClassAnnotation = getBuiltIns(dataClass).getDataClassAnnotation(); - AnnotationDescriptor annotation = dataClass.getAnnotations().findAnnotation(DescriptorUtils.getFqNameSafe(stdDataClassAnnotation)); - if (annotation == null) { - throw new IllegalStateException("No data annotation is found for data class " + dataClass); + private static JetAnnotationEntry findDataAnnotationForDataClass(@NotNull DeclarationDescriptor dataClass) { + AnnotationDescriptor annotation = dataClass.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.data); + if (annotation != null) { + JetAnnotationEntry entry = DescriptorToSourceUtils.getSourceFromAnnotation(annotation); + if (entry != null) { + return entry; + } } - return BindingContextUtils.getNotNull(trace.getBindingContext(), - BindingContext.ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT, - annotation); + throw new IllegalStateException("No data annotation is found for data class " + dataClass); } @Nullable diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 0a8b59de637..4688411d9e2 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -381,11 +381,6 @@ public class KotlinBuiltIns { return getBuiltInClassByName("Cloneable"); } - @NotNull - public ClassDescriptor getDataClassAnnotation() { - return getBuiltInClassByName("data"); - } - @NotNull public ClassDescriptor getDeprecatedAnnotation() { return getBuiltInClassByName("deprecated");