store cached Java file stub in the userdata of a JetFile (project specific), not of VirtualFile (app global)

This commit is contained in:
Dmitry Jemerov
2015-08-27 19:41:56 +02:00
parent 1a47d6754d
commit 19eea4bf4e
@@ -379,7 +379,7 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
@NotNull VirtualFile virtualFile, @NotNull VirtualFile virtualFile,
@Nullable final JetClassOrObject decompiledClassOrObject @Nullable final JetClassOrObject decompiledClassOrObject
) { ) {
final PsiJavaFileStubImpl javaFileStub = getOrCreateJavaFileStub(virtualFile); final PsiJavaFileStubImpl javaFileStub = getOrCreateJavaFileStub(decompiledKotlinFile, virtualFile);
if (javaFileStub == null) { if (javaFileStub == null) {
return null; return null;
} }
@@ -423,15 +423,17 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
} }
@Nullable @Nullable
private static PsiJavaFileStubImpl getOrCreateJavaFileStub(@NotNull VirtualFile virtualFile) { private static PsiJavaFileStubImpl getOrCreateJavaFileStub(
CachedJavaStub cachedJavaStub = virtualFile.getUserData(cachedJavaStubKey); @NotNull JetFile decompiledKotlinFile,
@NotNull VirtualFile virtualFile) {
CachedJavaStub cachedJavaStub = decompiledKotlinFile.getUserData(cachedJavaStubKey);
long fileModificationStamp = virtualFile.getModificationStamp(); long fileModificationStamp = virtualFile.getModificationStamp();
if (cachedJavaStub != null && cachedJavaStub.modificationStamp == fileModificationStamp) { if (cachedJavaStub != null && cachedJavaStub.modificationStamp == fileModificationStamp) {
return cachedJavaStub.javaFileStub; return cachedJavaStub.javaFileStub;
} }
PsiJavaFileStubImpl stub = (PsiJavaFileStubImpl) createStub(virtualFile); PsiJavaFileStubImpl stub = (PsiJavaFileStubImpl) createStub(virtualFile);
if (stub != null) { if (stub != null) {
virtualFile.putUserData(cachedJavaStubKey, new CachedJavaStub(fileModificationStamp, stub)); decompiledKotlinFile.putUserData(cachedJavaStubKey, new CachedJavaStub(fileModificationStamp, stub));
} }
return stub; return stub;
} }