Skip to content

Instantly share code, notes, and snippets.

@Turbo87
Created November 15, 2016 12:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Turbo87/c82ff19f332ef372c553a8706a98c548 to your computer and use it in GitHub Desktop.
Save Turbo87/c82ff19f332ef372c553a8706a98c548 to your computer and use it in GitHub Desktop.
trying to understand the JSModuleReferenceContributor class...
class EmberAddonReferenceContributor : JSModuleReferenceContributor {
override fun getCommonJSModuleReferences(unquotedRefText: String, host: PsiElement, offset: Int, provider: PsiReferenceProvider?) =
emptyArray<PsiReference>()
override fun getAllReferences(unquotedRefText: String, host: PsiElement, offset: Int, provider: PsiReferenceProvider?): Array<FileReference> {
return EmberAddonFileReferenceSet(unquotedRefText, host, offset, provider).allReferences
}
override fun isApplicable(host: PsiElement) = host is ES6FromClause
}
class EmberAddonFileReferenceSet(unquotedRefText: String, host: PsiElement, offset: Int, provider: PsiReferenceProvider?) :
FileReferenceSet(unquotedRefText, host, offset, provider, false, true, DialectDetector.JAVASCRIPT_FILE_TYPES_ARRAY) {
override fun useIncludingFileAsContext() = false
override fun computeDefaultContexts(): MutableCollection<PsiFileSystemItem> {
val result = mutableListOf<PsiFileSystemItem>()
if (!this.pathString.startsWith('.')) {
result += this.element.containingFile.originalFile.virtualFile.parents
.map { it.findChild("node_modules") }
.filterNotNull()
.map { element.manager.findDirectory(it) }
.filterNotNull()
}
return result
}
override fun createFileReference(textRange: TextRange, i: Int, text: String): FileReference {
val t = if (i == 0) "$text/addon" else text
return EmberAddonReference(t, i, textRange, this, "ember-addon.js", true)
}
}
class EmberAddonReference(text: String, offset: Int, textRange: TextRange, fileReferenceSet: FileReferenceSet, newFileTemplateName: String, isSoft: Boolean) :
JSFileReference(text, offset, textRange, fileReferenceSet) {
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment