Fix IDEA plugin behavior with classes in library sources

In case when some class was contained in sources of some library (in addition
to classes of some library) we incorrectly assumed that its ModuleInfo is
LibrarySourceInfo of that library, because we checked if the file was in
library sources first. Now we check if the file is in library _classes_ first,
and then sources

 #KT-5695 Fixed
This commit is contained in:
Alexander Udalov
2014-08-28 17:24:42 +04:00
parent 2afa51dbde
commit d37727185e
@@ -20,7 +20,6 @@ import com.intellij.psi.PsiElement
import org.jetbrains.jet.lang.resolve.java.jetAsJava.KotlinLightElement import org.jetbrains.jet.lang.resolve.java.jetAsJava.KotlinLightElement
import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.lang.psi.*
import com.intellij.openapi.roots.ProjectFileIndex import com.intellij.openapi.roots.ProjectFileIndex
import com.intellij.openapi.roots.LibraryOrSdkOrderEntry
import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.JdkOrderEntry import com.intellij.openapi.roots.JdkOrderEntry
import org.jetbrains.jet.asJava.FakeLightClassForFileOfPackage import org.jetbrains.jet.asJava.FakeLightClassForFileOfPackage
@@ -70,20 +69,19 @@ private fun getModuleInfoByVirtualFile(project: Project, virtualFile: VirtualFil
val orderEntries = projectFileIndex.getOrderEntriesForFile(virtualFile) val orderEntries = projectFileIndex.getOrderEntriesForFile(virtualFile)
val libraryOrSdkEntries = orderEntries.filterIsInstance(javaClass<LibraryOrSdkOrderEntry>()) @entries for (orderEntry in orderEntries) {
@entries for (libraryOrSdkOrderEntry in libraryOrSdkEntries) { when (orderEntry) {
when (libraryOrSdkOrderEntry) {
is LibraryOrderEntry -> { is LibraryOrderEntry -> {
val library = libraryOrSdkOrderEntry.getLibrary() ?: continue @entries val library = orderEntry.getLibrary() ?: continue @entries
if (projectFileIndex.isInLibrarySource(virtualFile)) { if (projectFileIndex.isInLibraryClasses(virtualFile)) {
return LibrarySourceInfo(project, library)
}
else {
return LibraryInfo(project, library) return LibraryInfo(project, library)
} }
else if (projectFileIndex.isInLibrarySource(virtualFile)) {
return LibrarySourceInfo(project, library)
}
} }
is JdkOrderEntry -> { is JdkOrderEntry -> {
val sdk = libraryOrSdkOrderEntry.getJdk() ?: continue @entries val sdk = orderEntry.getJdk() ?: continue @entries
return SdkInfo(project, sdk) return SdkInfo(project, sdk)
} }
} }