From ccae693ed26abaaab46f2d2e8f58060642cc96a9 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 2 Jun 2014 19:53:03 +0400 Subject: [PATCH] JDR: Remove some usages of JavaClassResolver#resolveClassByFqName in LazyJavaAnnotationDescriptor --- .../java/structure/impl/JavaAnnotationImpl.java | 16 ++++++++++++++-- .../descriptors/LazyJavaAnnotationDescriptor.kt | 7 +++---- .../resolve/java/structure/JavaAnnotation.java | 3 +++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaAnnotationImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaAnnotationImpl.java index f0d6150ba26..015ef71f027 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaAnnotationImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaAnnotationImpl.java @@ -16,12 +16,12 @@ package org.jetbrains.jet.lang.resolve.java.structure.impl; -import com.intellij.psi.PsiAnnotation; -import com.intellij.psi.PsiAnnotationMemberValue; +import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotation; import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotationArgument; +import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -53,4 +53,16 @@ public class JavaAnnotationImpl extends JavaElementImpl implement String qualifiedName = getPsi().getQualifiedName(); return qualifiedName == null ? null : new FqName(qualifiedName); } + + @Nullable + @Override + public JavaClass resolve() { + PsiJavaCodeReferenceElement referenceElement = getPsi().getNameReferenceElement(); + if (referenceElement == null) return null; + + PsiElement resolved = referenceElement.resolve(); + if (!(resolved instanceof PsiClass)) return null; + + return new JavaClassImpl((PsiClass) resolved); + } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt index fdb8c33901e..09852199649 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt @@ -64,7 +64,7 @@ class LazyJavaAnnotationDescriptor( val fqName = _fqName() if (fqName == null) return@createLazyValue ErrorUtils.createErrorType("No fqName: $javaAnnotation") val annotationClass = JavaToKotlinClassMap.getInstance().mapKotlinClass(fqName, TypeUsage.MEMBER_SIGNATURE_INVARIANT) - ?: c.javaClassResolver.resolveClassByFqName(fqName) + ?: javaAnnotation.resolve()?.let { javaClass -> c.javaClassResolver.resolveClass(javaClass) } annotationClass?.getDefaultType() ?: ErrorUtils.createErrorType(fqName.asString()) } @@ -145,10 +145,9 @@ class LazyJavaAnnotationDescriptor( if (!element.isEnumEntry()) return null - val fqName = element.getContainingClass().getFqName() - if (fqName == null) return null + val containingJavaClass = element.getContainingClass() - val enumClass = c.javaClassResolver.resolveClassByFqName(fqName) + val enumClass = c.javaClassResolver.resolveClass(containingJavaClass) if (enumClass == null) return null val classifier = enumClass.getUnsubstitutedInnerClassesScope().getClassifier(element.getName()) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaAnnotation.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaAnnotation.java index e5444f7e99e..30403a892e2 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaAnnotation.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaAnnotation.java @@ -32,4 +32,7 @@ public interface JavaAnnotation extends JavaElement { @Nullable FqName getFqName(); + + @Nullable + JavaClass resolve(); }