diff --git a/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java b/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java index b07f20df3b5a..0c5c1ee2ac2e 100644 --- a/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java +++ b/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java @@ -18,6 +18,7 @@ package com.intellij.core; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.roots.FileIndexFacade; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.impl.compiled.ClsFileImpl; @@ -44,7 +45,9 @@ public class CoreJavaDirectoryService extends JavaDirectoryService { public PsiClass[] getClasses(@NotNull PsiDirectory dir) { LOG.assertTrue(dir.isValid()); - boolean onlyCompiled = FileIndexFacade.getInstance(dir.getProject()).isInLibraryClasses(dir.getVirtualFile()); + FileIndexFacade index = FileIndexFacade.getInstance(dir.getProject()); + VirtualFile virtualDir = dir.getVirtualFile(); + boolean onlyCompiled = index.isInLibraryClasses(virtualDir) && !index.isInSourceContent(virtualDir); List classes = null; for (PsiFile file : dir.getFiles()) { diff --git a/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClasses.java b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClasses.java new file mode 100644 index 000000000000..8c379ae4ef97 --- /dev/null +++ b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClasses.java @@ -0,0 +1,3 @@ +public class ModuleSourceAsLibraryClasses { + ModuleSourceAsLibraryClassesDep field; +} diff --git a/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClassesDep.java b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClassesDep.java new file mode 100644 index 000000000000..bf6b0cacb16c --- /dev/null +++ b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibraryClassesDep.java @@ -0,0 +1,16 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +public class ModuleSourceAsLibraryClassesDep {} diff --git a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveClassTest.java b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveClassTest.java index a71da6b32ee6..4c925fe931b2 100644 --- a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveClassTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveClassTest.java @@ -23,6 +23,7 @@ import com.intellij.openapi.module.StdModuleTypes; import com.intellij.openapi.roots.ModuleRootModificationUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.packageDependencies.DependenciesBuilder; import com.intellij.psi.*; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.PsiTestUtil; @@ -181,6 +182,23 @@ public class ResolveClassTest extends ResolveTestCase { assertInstanceOf(ref.resolve(), PsiClass.class); } + public void testModuleSourceAsLibraryClasses() throws Exception { + final PsiReference ref = configure(); + PsiFile psiFile = ref.getElement().getContainingFile(); + final VirtualFile file = psiFile.getVirtualFile(); + assertNotNull(file); + createFile(myModule, file.getParent(), "ModuleSourceAsLibraryClassesDep.java", loadFile("class/ModuleSourceAsLibraryClassesDep.java")); + ModuleRootModificationUtil.addModuleLibrary(myModule, "lib", Collections.singletonList(file.getParent().getUrl()), Collections.emptyList()); + //need this to ensure that PsiJavaFileBaseImpl.myResolveCache is filled to reproduce IDEA-91309 + DependenciesBuilder.analyzeFileDependencies(psiFile, new DependenciesBuilder.DependencyProcessor() { + @Override + public void process(PsiElement place, PsiElement dependency) { + } + }); + assertInstanceOf(ref.resolve(), PsiClass.class); + } + + public void testStaticImportInTheSameClass() throws Exception { PsiReference ref = configure(); long start = System.currentTimeMillis();