diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java index 964227144fb9..2826dfcf52d3 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubTreeLoaderImpl.java @@ -55,22 +55,11 @@ public class StubTreeLoaderImpl extends StubTreeLoader { try { final FileContent fc = new FileContentImpl(vFile, vFile.contentsToByteArray()); fc.putUserData(IndexingDataKeys.PROJECT, project); - if (psiFile != null) { - fc.putUserData(IndexingDataKeys.PSI_FILE, psiFile); - if (!vFile.getFileType().isBinary()) { - fc.putUserData(IndexingDataKeys.FILE_TEXT_CONTENT_KEY, psiFile.getViewProvider().getContents()); - } - psiFile.putUserData(PsiFileImpl.BUILDING_STUB, true); - } - Stub element; - try { - element = StubTreeBuilder.buildStubTree(fc); - } - finally { - if (psiFile != null) { - psiFile.putUserData(PsiFileImpl.BUILDING_STUB, null); - } + if (psiFile != null && !vFile.getFileType().isBinary()) { + fc.putUserData(IndexingDataKeys.FILE_TEXT_CONTENT_KEY, psiFile.getViewProvider().getContents()); + // but don't reuse psiFile itself to avoid loading its contents. If we load AST, the stub will be thrown out anyway. } + Stub element = StubTreeBuilder.buildStubTree(fc); if (element instanceof PsiFileStub) { StubTree tree = new StubTree((PsiFileStub)element); tree.setDebugInfo("created from file content"); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStubsTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStubsTest.groovy index d9e0d00b66f0..92a0786dc0b1 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStubsTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStubsTest.groovy @@ -66,6 +66,7 @@ class GroovyStubsTest extends LightCodeInsightFixtureTestCase { DumbServiceImpl.getInstance(project).setDumb(true); try { assertOneElement(((GroovyFile) fooFile).classes); + assertFalse(fooFile.isContentsLoaded()); } finally { DumbServiceImpl.getInstance(project).setDumb(false); diff --git a/python/testSrc/com/jetbrains/python/PyStubsTest.java b/python/testSrc/com/jetbrains/python/PyStubsTest.java index 474e5581cfb2..e04f064752cf 100644 --- a/python/testSrc/com/jetbrains/python/PyStubsTest.java +++ b/python/testSrc/com/jetbrains/python/PyStubsTest.java @@ -396,6 +396,7 @@ public class PyStubsTest extends PyTestCase { DumbServiceImpl.getInstance(project).setDumb(true); try { assertEquals(1, ((PyFile) fooPyFile).getTopLevelClasses().size()); + assertFalse(fooPyFile.isContentsLoaded()); } finally { DumbServiceImpl.getInstance(project).setDumb(false);