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-compiler" scope="TEST" />
|
||||||
<orderEntry type="module" module-name="android-extensions-idea" scope="TEST" />
|
<orderEntry type="module" module-name="android-extensions-idea" scope="TEST" />
|
||||||
<orderEntry type="library" name="markdown" level="project" />
|
<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="idea-test-framework" scope="TEST" />
|
||||||
<orderEntry type="module" module-name="js.serializer" />
|
<orderEntry type="module" module-name="js.serializer" />
|
||||||
<orderEntry type="module" module-name="daemon-client" />
|
<orderEntry type="module" module-name="daemon-client" />
|
||||||
|
|||||||
+22
-2
@@ -16,23 +16,43 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.references
|
package org.jetbrains.kotlin.idea.references
|
||||||
|
|
||||||
|
import com.intellij.codeInsight.lookup.LookupElement
|
||||||
import com.intellij.patterns.PlatformPatterns
|
import com.intellij.patterns.PlatformPatterns
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiReference
|
import com.intellij.psi.PsiReference
|
||||||
import com.intellij.psi.PsiReferenceRegistrar
|
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.FilePathReferenceProvider
|
||||||
|
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference
|
||||||
import com.intellij.util.ProcessingContext
|
import com.intellij.util.ProcessingContext
|
||||||
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
|
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getContentRange
|
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.psi.psiUtil.plainContent
|
||||||
|
import org.jetbrains.kotlin.idea.completion.KotlinCompletionCharFilter
|
||||||
|
|
||||||
class KotlinFilePathReferenceContributor : AbstractKotlinReferenceContributor() {
|
class KotlinFilePathReferenceContributor : AbstractKotlinReferenceContributor() {
|
||||||
object KotlinFilePathReferenceProvider : FilePathReferenceProvider() {
|
object KotlinFilePathReferenceProvider : FilePathReferenceProvider() {
|
||||||
override fun getReferencesByElement(element: PsiElement, context: ProcessingContext): Array<out PsiReference> {
|
override fun getReferencesByElement(element: PsiElement, context: ProcessingContext): Array<out PsiReference> {
|
||||||
if (element !is KtStringTemplateExpression) return PsiReference.EMPTY_ARRAY
|
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)
|
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