Code Insight: Suppress file reference completion on typing. Disable file references on string literals with escape sequences
This commit is contained in:
+1
-1
@@ -42,7 +42,7 @@
|
||||
<orderEntry type="module" module-name="android-extensions-compiler" scope="TEST" />
|
||||
<orderEntry type="module" module-name="android-extensions-idea" scope="TEST" />
|
||||
<orderEntry type="library" name="markdown" level="project" />
|
||||
<orderEntry type="module" module-name="idea-completion" scope="TEST" />
|
||||
<orderEntry type="module" module-name="idea-completion" />
|
||||
<orderEntry type="module" module-name="idea-test-framework" scope="TEST" />
|
||||
<orderEntry type="module" module-name="js.serializer" />
|
||||
<orderEntry type="module" module-name="daemon-client" />
|
||||
|
||||
+22
-2
@@ -16,23 +16,43 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.references
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElement
|
||||
import com.intellij.patterns.PlatformPatterns
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiReference
|
||||
import com.intellij.psi.PsiReferenceRegistrar
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FilePathReferenceProvider
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference
|
||||
import com.intellij.util.ProcessingContext
|
||||
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getContentRange
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isPlainWithEscapes
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isPlain
|
||||
import org.jetbrains.kotlin.psi.psiUtil.plainContent
|
||||
import org.jetbrains.kotlin.idea.completion.KotlinCompletionCharFilter
|
||||
|
||||
class KotlinFilePathReferenceContributor : AbstractKotlinReferenceContributor() {
|
||||
object KotlinFilePathReferenceProvider : FilePathReferenceProvider() {
|
||||
override fun getReferencesByElement(element: PsiElement, context: ProcessingContext): Array<out PsiReference> {
|
||||
if (element !is KtStringTemplateExpression) return PsiReference.EMPTY_ARRAY
|
||||
if (!element.isPlainWithEscapes()) return PsiReference.EMPTY_ARRAY
|
||||
if (!element.isPlain()) return PsiReference.EMPTY_ARRAY
|
||||
return getReferencesByElement(element, element.plainContent, element.getContentRange().startOffset, true)
|
||||
.map {
|
||||
if (it is FileReference) {
|
||||
object: FileReference(it.fileReferenceSet, it.rangeInElement, it.index, it.text) {
|
||||
override fun getVariants(): Array<out Any> {
|
||||
return super.getVariants()
|
||||
.map {
|
||||
(it as? LookupElement)?.apply {
|
||||
putUserData(KotlinCompletionCharFilter.SUPPRESS_ITEM_SELECTION_BY_CHARS_ON_TYPING, Unit)
|
||||
} ?: it
|
||||
}
|
||||
.toTypedArray()
|
||||
}
|
||||
}
|
||||
}
|
||||
else it
|
||||
}
|
||||
.toTypedArray()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user