From de22bfbde90aa4e49d748670e20e8045667a1f4d Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 6 Feb 2015 16:15:09 +0300 Subject: [PATCH] Refactoring: extract method createFakeClsFile --- .../asJava/KotlinJavaFileStubProvider.java | 33 +++++++++++++++---- .../asJava/KotlinLightClassForPackage.kt | 12 ++----- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java index 18e92eaaa83..ca035e3bf93 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java @@ -38,6 +38,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.LightVirtualFile; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Stack; +import kotlin.Function0; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.codegen.CompilationErrorHandler; @@ -302,7 +303,7 @@ public class KotlinJavaFileStubProvider files, + @NotNull final Function0 fileStubProvider + ) { PsiManager manager = PsiManager.getInstance(project); - final PsiJavaFileStubImpl javaFileStub = new PsiJavaFileStubImpl(packageFqName.asString(), true); - javaFileStub.setPsiFactory(new ClsWrapperStubPsiFactory()); - + VirtualFile virtualFile = getRepresentativeVirtualFile(files); ClsFileImpl fakeFile = new ClsFileImpl(new ClassFileViewProvider(manager, virtualFile)) { @NotNull @Override public PsiClassHolderFileStub getStub() { - return javaFileStub; + return fileStubProvider.invoke(); } @NotNull @@ -373,12 +377,27 @@ public class KotlinJavaFileStubProvider files) { + final PsiJavaFileStubImpl javaFileStub = new PsiJavaFileStubImpl(packageFqName.asString(), true); + javaFileStub.setPsiFactory(new ClsWrapperStubPsiFactory()); + + ClsFileImpl fakeFile = createFakeClsFile(project, packageFqName, files, new Function0() { + @Override + public PsiClassHolderFileStub invoke() { + return javaFileStub; + } + }); + javaFileStub.setPsi(fakeFile); return javaFileStub; } @NotNull - public static VirtualFile getRepresentativeVirtualFile(@NotNull Collection files) { + private static VirtualFile getRepresentativeVirtualFile(@NotNull Collection files) { JetFile firstFile = files.iterator().next(); VirtualFile virtualFile = files.size() == 1 ? firstFile.getVirtualFile() : new LightVirtualFile(); assert virtualFile != null : "No virtual file for " + firstFile; diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightClassForPackage.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightClassForPackage.kt index 0423e233be7..c71a369922f 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightClassForPackage.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightClassForPackage.kt @@ -96,16 +96,8 @@ public class KotlinLightClassForPackage private( private val implementsList: LightEmptyImplementsList = LightEmptyImplementsList(manager) - private val packageClsFile: ClsFileImpl - - { - val virtualFile = KotlinJavaFileStubProvider.getRepresentativeVirtualFile(files) - packageClsFile = object : ClsFileImpl(ClassFileViewProvider(PsiManager.getInstance(getProject()), virtualFile)) { - override fun getStub() = (getDelegate().getContainingFile() as ClsFileImpl).getStub() - override fun getPackageName() = this@KotlinLightClassForPackage.packageFqName.asString() - } - - packageClsFile.setPhysical(false) + private val packageClsFile: ClsFileImpl = KotlinJavaFileStubProvider.createFakeClsFile(manager.getProject(), packageClassFqName, files) { + (getDelegate().getContainingFile() as ClsFileImpl).getStub() } override fun getOrigin(): JetClassOrObject? = null