From cea272fb39803767626c12f3e7bffc29f86d5e34 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 19 Jun 2014 17:54:33 +0400 Subject: [PATCH] Moved getPackageFilesWithCallables to frontend.java and reused it. --- .../jetbrains/jet/codegen/PackageCodegen.java | 20 ++-------------- .../resolve/kotlin/PackagePartClassUtils.java | 23 +++++++++++++++++++ .../IncrementalPackageFragmentProvider.kt | 6 ++--- .../jet/asJava/JavaElementFinder.java | 15 ++---------- 4 files changed, 29 insertions(+), 35 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java index 5482b818fb6..23eb167f852 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java @@ -20,7 +20,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Ordering; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; import com.intellij.util.SmartList; @@ -90,7 +89,7 @@ public class PackageCodegen { String className = AsmUtil.internalNameByFqNameWithoutInnerClasses(getPackageClassFqName(fqName)); ClassBuilder v = PackageCodegen.this.state.getFactory() - .newVisitor(Type.getObjectType(className), getPackageFilesWithCallables(files)); + .newVisitor(Type.getObjectType(className), PackagePartClassUtils.getPackageFilesWithCallables(files)); v.defineClass(sourceFile, V1_6, ACC_PUBLIC | ACC_FINAL, className, @@ -114,7 +113,7 @@ public class PackageCodegen { return null; } - List packageFilesWithCallables = getPackageFilesWithCallables(packageFiles); + List packageFilesWithCallables = PackagePartClassUtils.getPackageFilesWithCallables(packageFiles); return packageFilesWithCallables.size() == 1 ? packageFilesWithCallables.get(0) : null; } @@ -358,21 +357,6 @@ public class PackageCodegen { MemberCodegen.genClassOrObject(context, classOrObject, state, null); } - @NotNull - public static List getPackageFilesWithCallables(@NotNull Collection packageFiles) { - return ContainerUtil.filter(packageFiles, new Condition() { - @Override - public boolean value(JetFile packageFile) { - for (JetDeclaration declaration : packageFile.getDeclarations()) { - if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) { - return true; - } - } - return false; - } - }); - } - public void done() { v.done(); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/PackagePartClassUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/PackagePartClassUtils.java index f9ab6a90b15..744a647017c 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/PackagePartClassUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/PackagePartClassUtils.java @@ -16,18 +16,26 @@ package org.jetbrains.jet.lang.resolve.kotlin; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.PathUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; +import org.jetbrains.jet.lang.psi.JetDeclaration; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.psi.JetNamedFunction; +import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.org.objectweb.asm.Type; +import java.util.Collection; +import java.util.List; + import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.getPackageClassFqName; public class PackagePartClassUtils { @@ -70,4 +78,19 @@ public class PackagePartClassUtils { FqName packageFqName = ((PackageFragmentDescriptor) callable.getContainingDeclaration()).getFqName(); return packageFqName.child(BaseDescriptorLoader.getPackagePartClassName(callable)); } + + @NotNull + public static List getPackageFilesWithCallables(@NotNull Collection packageFiles) { + return ContainerUtil.filter(packageFiles, new Condition() { + @Override + public boolean value(JetFile packageFile) { + for (JetDeclaration declaration : packageFile.getDeclarations()) { + if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) { + return true; + } + } + return false; + } + }); + } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt index e5e2296102c..6b2d0e78bf4 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -79,10 +79,8 @@ public class IncrementalPackageFragmentProvider( fqNameToPackageFragment[fqName] = IncrementalPackageFragment(fqName) } - for (source in sourceFiles) { - if (source.getDeclarations().any { it is JetProperty || it is JetNamedFunction }) { - createPackageFragment(source.getPackageFqName()) - } + for (source in PackagePartClassUtils.getPackageFilesWithCallables(sourceFiles)) { + createPackageFragment(source.getPackageFqName()) } for (fqName in incrementalCache.getPackagesWithRemovedFiles(moduleId, sourceFiles)) { diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java index 8ed972c3442..aee4ad28a92 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java @@ -37,6 +37,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.java.JavaPsiFacadeKotlinHacks; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.NamePackage; @@ -141,7 +142,7 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade private void findPackageClass(FqName qualifiedName, GlobalSearchScope scope, List answer) { Collection filesForPackage = lightClassGenerationSupport.findFilesForPackage(qualifiedName, scope); - if (!shouldGeneratePackageClass(filesForPackage)) return; + if (PackagePartClassUtils.getPackageFilesWithCallables(filesForPackage).isEmpty()) return; KotlinLightClassForPackage lightClass = KotlinLightClassForPackage.create(psiManager, qualifiedName, scope, filesForPackage); if (lightClass == null) return; @@ -155,18 +156,6 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade } } - private static boolean shouldGeneratePackageClass(@NotNull Collection packageFiles) { - for (JetFile file : packageFiles) { - for (JetDeclaration declaration : file.getDeclarations()) { - if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) { - return true; - } - } - } - - return false; - } - @NotNull @Override public Set getClassNames(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) {