From 2d58bd571ee183a94b55f73dbc37527c46c3665a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 9 Aug 2013 20:18:23 +0400 Subject: [PATCH] Extract JavaResolverPsiUtils Will contain PSI-specific JDR utilities --- .../resolve/java/DescriptorResolverUtils.java | 22 ++++------- .../resolve/java/JavaResolverPsiUtils.java | 38 +++++++++++++++++++ .../java/resolver/JavaNamespaceResolver.java | 4 +- .../resolve/java/scope/JavaPackageScope.java | 2 +- .../caches/JetFromJavaDescriptorHelper.java | 4 +- .../completion/DescriptorLookupConverter.java | 6 +-- .../completion/JetTypesCompletionHelper.java | 4 +- .../importOptimizer/JetImportOptimizer.java | 4 +- 8 files changed, 58 insertions(+), 26 deletions(-) create mode 100644 compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaResolverPsiUtils.java diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java index c0fb6eb0c5f..ae3b55329cc 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.lang.resolve.java; import com.google.common.collect.ImmutableSet; -import com.intellij.psi.PsiClass; import com.intellij.psi.impl.compiled.ClsClassImpl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -38,30 +37,25 @@ public final class DescriptorResolverUtils { private DescriptorResolverUtils() { } - public static boolean isCompiledKotlinPackageClass(@NotNull PsiClass psiClass) { - if (psiClass instanceof ClsClassImpl) { - JavaClass javaClass = new JavaClass(psiClass); + public static boolean isCompiledKotlinPackageClass(@NotNull JavaClass javaClass) { + if (javaClass.getPsi() instanceof ClsClassImpl) { FqName fqName = javaClass.getFqName(); if (fqName != null && PackageClassUtils.isPackageClassFqName(fqName)) { - return hasAnnotation(javaClass, JvmAnnotationNames.KOTLIN_PACKAGE.getFqName()); + return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_PACKAGE.getFqName().asString()) != null; } } return false; } - public static boolean isCompiledKotlinClass(@NotNull PsiClass psiClass) { - if (psiClass instanceof ClsClassImpl) { - return hasAnnotation(new JavaClass(psiClass), JvmAnnotationNames.KOTLIN_CLASS.getFqName()); + public static boolean isCompiledKotlinClass(@NotNull JavaClass javaClass) { + if (javaClass.getPsi() instanceof ClsClassImpl) { + return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_CLASS.getFqName().asString()) != null; } return false; } - public static boolean hasAnnotation(@NotNull JavaClass javaClass, @NotNull FqName annotationFqName) { - return javaClass.findAnnotation(annotationFqName.asString()) != null; - } - - public static boolean isCompiledKotlinClassOrPackageClass(@NotNull PsiClass psiClass) { - return isCompiledKotlinClass(psiClass) || isCompiledKotlinPackageClass(psiClass); + public static boolean isCompiledKotlinClassOrPackageClass(@NotNull JavaClass javaClass) { + return isCompiledKotlinClass(javaClass) || isCompiledKotlinPackageClass(javaClass); } @NotNull diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaResolverPsiUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaResolverPsiUtils.java new file mode 100644 index 00000000000..72829c8ea76 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaResolverPsiUtils.java @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.java; + +import com.intellij.psi.PsiClass; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; + +public class JavaResolverPsiUtils { + private JavaResolverPsiUtils() { + } + + public static boolean isCompiledKotlinClass(@NotNull PsiClass psiClass) { + return DescriptorResolverUtils.isCompiledKotlinClass(new JavaClass(psiClass)); + } + + public static boolean isCompiledKotlinPackageClass(@NotNull PsiClass psiClass) { + return DescriptorResolverUtils.isCompiledKotlinPackageClass(new JavaClass(psiClass)); + } + + public static boolean isCompiledKotlinClassOrPackageClass(@NotNull PsiClass psiClass) { + return isCompiledKotlinClass(psiClass) || isCompiledKotlinPackageClass(psiClass); + } +} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java index 3270b659155..49c8e525776 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java @@ -178,7 +178,7 @@ public final class JavaNamespaceResolver { return null; } - if (DescriptorResolverUtils.isCompiledKotlinClassOrPackageClass(javaClass.getPsi())) { + if (DescriptorResolverUtils.isCompiledKotlinClassOrPackageClass(javaClass)) { return null; } if (!hasStaticMembers(javaClass)) { @@ -253,7 +253,7 @@ public final class JavaNamespaceResolver { Collection classes = DescriptorResolverUtils.filterDuplicateClasses(javaPackage.getClasses()); List result = new ArrayList(classes.size()); for (JavaClass javaClass : classes) { - if (DescriptorResolverUtils.isCompiledKotlinClass(javaClass.getPsi())) { + if (DescriptorResolverUtils.isCompiledKotlinClass(javaClass)) { result.add(javaClass.getName()); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java index 9b09a2bb865..db1cee01bf5 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java @@ -95,7 +95,7 @@ public final class JavaPackageScope extends JavaBaseScope { } for (JavaClass javaClass : DescriptorResolverUtils.filterDuplicateClasses(javaPackage.getClasses())) { - if (DescriptorResolverUtils.isCompiledKotlinPackageClass(javaClass.getPsi())) continue; + if (DescriptorResolverUtils.isCompiledKotlinPackageClass(javaClass)) continue; if (javaClass.getPsi() instanceof JetJavaMirrorMarker) continue; diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java index 59cb0c1e830..fe185cc0b39 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java @@ -28,7 +28,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.descriptors.serialization.*; import org.jetbrains.jet.lang.descriptors.ClassKind; -import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; +import org.jetbrains.jet.lang.resolve.java.JavaResolverPsiUtils; import org.jetbrains.jet.lang.resolve.java.resolver.KotlinClassFileHeader; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -138,7 +138,7 @@ public class JetFromJavaDescriptorHelper { FqName classFQN = new FqName(qualifiedName); - if (DescriptorResolverUtils.isCompiledKotlinPackageClass(containingClass)) { + if (JavaResolverPsiUtils.isCompiledKotlinPackageClass(containingClass)) { FqName classParentFQN = QualifiedNamesUtil.withoutLastSegment(classFQN); return QualifiedNamesUtil.combine(classParentFQN, Name.identifier(method.getName())); } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java b/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java index 5c051a6dd4f..6058334de9f 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java @@ -32,7 +32,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; +import org.jetbrains.jet.lang.resolve.java.JavaResolverPsiUtils; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -129,14 +129,14 @@ public final class DescriptorLookupConverter { private static LookupElement createJavaLookupElementIfPossible(@NotNull PsiElement declaration, @NotNull DeclarationDescriptor descriptor) { if (declaration instanceof PsiClass) { PsiClass psiClass = (PsiClass) declaration; - if (!DescriptorResolverUtils.isCompiledKotlinClassOrPackageClass(psiClass)) { + if (!JavaResolverPsiUtils.isCompiledKotlinClassOrPackageClass(psiClass)) { return setCustomInsertHandler(new JavaPsiClassReferenceElement(psiClass)); } } if (declaration instanceof PsiMember) { PsiClass containingClass = ((PsiMember) declaration).getContainingClass(); - if (containingClass != null && !DescriptorResolverUtils.isCompiledKotlinClassOrPackageClass(containingClass)) { + if (containingClass != null && !JavaResolverPsiUtils.isCompiledKotlinClassOrPackageClass(containingClass)) { if (declaration instanceof PsiMethod) { InsertHandler handler = getInsertHandler(descriptor); assert handler != null: "Special kotlin handler is expected for function: " + declaration.getText() + " and descriptor" + DescriptorRenderer.TEXT.render(descriptor); diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetTypesCompletionHelper.java b/idea/src/org/jetbrains/jet/plugin/completion/JetTypesCompletionHelper.java index c6e5867491d..77e3c9fce2a 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetTypesCompletionHelper.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetTypesCompletionHelper.java @@ -26,7 +26,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.asJava.KotlinLightClass; import org.jetbrains.jet.lang.descriptors.ClassKind; import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; +import org.jetbrains.jet.lang.resolve.java.JavaResolverPsiUtils; import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -92,7 +92,7 @@ public class JetTypesCompletionHelper { return true; } - if (DescriptorResolverUtils.isCompiledKotlinClass(aClass)) { + if (JavaResolverPsiUtils.isCompiledKotlinClass(aClass)) { if (JetFromJavaDescriptorHelper.getCompiledClassKind(aClass) != ClassKind.CLASS_OBJECT) { String qualifiedName = aClass.getQualifiedName(); if (qualifiedName != null) { diff --git a/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java b/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java index 5976d749118..23a88befa92 100644 --- a/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java +++ b/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java @@ -31,7 +31,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; -import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; +import org.jetbrains.jet.lang.resolve.java.JavaResolverPsiUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; @@ -283,7 +283,7 @@ public class JetImportOptimizer implements ImportOptimizer { if (memberName == null) { return null; } - if (DescriptorResolverUtils.isCompiledKotlinPackageClass(containingClass)) { + if (JavaResolverPsiUtils.isCompiledKotlinPackageClass(containingClass)) { return QualifiedNamesUtil.combine(classFQN.parent(), Name.identifier(memberName)); } else {