Skip to content

Commit 33d5313

Browse files
committed
fix: catch StringIndexOutOfBoundsException in the module reference contributer
see #176
1 parent 466d0bc commit 33d5313

File tree

1 file changed

+27
-17
lines changed

1 file changed

+27
-17
lines changed

src/main/kotlin/com/emberjs/resolver/EmberModuleReferenceContributor.kt

+27-17
Original file line numberDiff line numberDiff line change
@@ -58,27 +58,37 @@ class EmberModuleReferenceContributor : JSModuleReferenceContributor {
5858
.flatMap { listOfNotNull(it.findChild("app"), it.findChild("addon"), it.findChild("addon-test-support")) }
5959
.map { JSExactFileReference(host, TextRange.create(offset, offset + packageName.length), listOf(it.path), null) }
6060

61-
val refs = object : FileReferenceSet(importPath, host, offset + packageName.length + 1, provider, false, true, DialectDetector.JAVASCRIPT_FILE_TYPES_ARRAY) {
62-
override fun createFileReference(range: TextRange, index: Int, text: String?): FileReference {
63-
return object : JSModuleReference(text, index, range, this, null, true) {
64-
override fun innerResolveInContext(referenceText: String, psiFileSystemItem: PsiFileSystemItem, resolveResults: MutableCollection<ResolveResult>?, b: Boolean) {
65-
super.innerResolveInContext(referenceText, psiFileSystemItem, resolveResults, b)
66-
67-
// don't suggest the current file, e.g. when navigating from /app to /addon
68-
resolveResults?.removeAll { it.element?.containingFile == host.containingFile }
69-
}
61+
val refs : FileReferenceSet
62+
val startInElement = offset + packageName.length + 1
63+
64+
try {
65+
refs = object : FileReferenceSet(importPath, host, startInElement, provider, false, true, DialectDetector.JAVASCRIPT_FILE_TYPES_ARRAY) {
66+
override fun createFileReference(range: TextRange, index: Int, text: String?): FileReference {
67+
return object : JSModuleReference(text, index, range, this, null, true) {
68+
override fun innerResolveInContext(referenceText: String, psiFileSystemItem: PsiFileSystemItem, resolveResults: MutableCollection<ResolveResult>?, b: Boolean) {
69+
super.innerResolveInContext(referenceText, psiFileSystemItem, resolveResults, b)
70+
71+
// don't suggest the current file, e.g. when navigating from /app to /addon
72+
resolveResults?.removeAll { it.element?.containingFile == host.containingFile }
73+
}
7074

71-
override fun isAllowFolders() = false
75+
override fun isAllowFolders() = false
76+
}
7277
}
73-
}
7478

75-
override fun computeDefaultContexts(): MutableCollection<PsiFileSystemItem> {
76-
return roots
77-
.flatMap { it.multiResolve(false).asIterable() }
78-
.map { it.element }
79-
.filterIsInstance(PsiFileSystemItem::class.java)
80-
.toMutableList()
79+
override fun computeDefaultContexts(): MutableCollection<PsiFileSystemItem> {
80+
return roots
81+
.flatMap { it.multiResolve(false).asIterable() }
82+
.map { it.element }
83+
.filterIsInstance(PsiFileSystemItem::class.java)
84+
.toMutableList()
85+
}
8186
}
87+
} catch (e: StringIndexOutOfBoundsException) {
88+
// TODO: this sometimes happens if startInElement is >= importPath.length but we don't exactly know why.
89+
println("Error in EmberModuleReferenceContributor for importPath: \"$importPath\" (starting at $startInElement). " +
90+
"This is a known issue and can be ignored. See https://github.com/Turbo87/intellij-emberjs/issues/176")
91+
return arrayOf()
8292
}
8393

8494
return (roots + refs.allReferences).toTypedArray()

0 commit comments

Comments
 (0)