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 e7246c4844c..18e92eaaa83 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java @@ -26,7 +26,6 @@ import com.intellij.psi.ClassFileViewProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; -import com.intellij.psi.impl.PsiManagerImpl; import com.intellij.psi.impl.compiled.ClsFileImpl; import com.intellij.psi.impl.java.stubs.PsiJavaFileStub; import com.intellij.psi.impl.java.stubs.impl.PsiJavaFileStubImpl; @@ -359,20 +358,19 @@ public class KotlinJavaFileStubProvider files) { + public 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.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightClassForPackage.java index 04616850c72..94b7dc58e9a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightClassForPackage.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightClassForPackage.java @@ -20,11 +20,14 @@ import com.google.common.collect.Sets; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.psi.impl.compiled.ClsFileImpl; import com.intellij.psi.impl.light.LightEmptyImplementsList; import com.intellij.psi.impl.light.LightModifierList; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.stubs.PsiClassHolderFileStub; import com.intellij.psi.util.CachedValue; import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; @@ -137,6 +140,7 @@ public class KotlinLightClassForPackage extends KotlinWrappingLightClass impleme private final CachedValue lightClassDataCache; private final PsiModifierList modifierList; private final LightEmptyImplementsList implementsList; + private final ClsFileImpl packageClsFile; private KotlinLightClassForPackage( @NotNull PsiManager manager, @@ -154,6 +158,22 @@ public class KotlinLightClassForPackage extends KotlinWrappingLightClass impleme this.files = Sets.newHashSet(files); // needed for hashCode this.hashCode = computeHashCode(); this.lightClassDataCache = FileStubCache.getInstance(getProject()).get(packageFqName, searchScope); + + VirtualFile virtualFile = KotlinJavaFileStubProvider.getRepresentativeVirtualFile(files); + packageClsFile = new ClsFileImpl(new ClassFileViewProvider(PsiManager.getInstance(getProject()), virtualFile)) { + @NotNull + @Override + public PsiClassHolderFileStub getStub() { + return ((ClsFileImpl) getDelegate().getContainingFile()).getStub(); + } + + @NotNull + @Override + public String getPackageName() { + return KotlinLightClassForPackage.this.packageFqName.asString(); + } + }; + packageClsFile.setPhysical(false); } @Nullable @@ -219,6 +239,11 @@ public class KotlinLightClassForPackage extends KotlinWrappingLightClass impleme return null; } + @Override + public PsiFile getContainingFile() { + return packageClsFile; + } + @Override public boolean hasTypeParameters() { return false;