Fix navigation to script dependency sources failing

Specifically in case where some lib is in project and script dependencies at the same time
This commit is contained in:
Pavel V. Talanov
2017-09-06 21:38:13 +03:00
parent ebd3ac6dc8
commit deda5e7eee
4 changed files with 24 additions and 9 deletions
@@ -191,17 +191,12 @@ fun getBinaryLibrariesModuleInfos(project: Project, virtualFile: VirtualFile) =
fun getLibrarySourcesModuleInfos(project: Project, virtualFile: VirtualFile) = collectModuleInfosByType<LibrarySourceInfo>(project, virtualFile)
private inline fun <reified T : IdeaModuleInfo> collectModuleInfosByType(project: Project, virtualFile: VirtualFile): Collection<T> {
val orderEntries = ProjectFileIndex.SERVICE.getInstance(project).getOrderEntriesForFile(virtualFile)
val result = linkedSetOf<T?>()
orderEntries.process(project, virtualFile, treatAsLibrarySource = false) {
result.add(it as? T)
val result = linkedSetOf<T>()
processVirtualFile(project, virtualFile, treatAsLibrarySource = false) {
result.addIfNotNull(it as? T)
}
// NOTE: non idea model infos can be obtained this way, like script related infos
// only one though, luckily it covers existing cases
result.add(getModuleInfoByVirtualFile(project, virtualFile) as? T)
return result.filterNotNull()
return result
}
private inline fun <T> List<OrderEntry>.process(
@@ -0,0 +1,7 @@
package test
object KObject {
fun foo() {
}
}
@@ -0,0 +1,7 @@
test.KObject.<caret>foo()
// DEPENDENCIES: classpath:lib-classes; sources:lib-source
// CONFLICTING_MODULE
// REF: (in test.KObject).foo()
// FILE: test/custom.kt
@@ -36,6 +36,12 @@ public class ScriptConfigurationNavigationTestGenerated extends AbstractScriptCo
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/script/definition/navigation"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, false);
}
@TestMetadata("conflictingModule")
public void testConflictingModule() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/script/definition/navigation/conflictingModule/");
doTest(fileName);
}
@TestMetadata("customBaseClass")
public void testCustomBaseClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/script/definition/navigation/customBaseClass/");