diff --git a/idea/idea.iml b/idea/idea.iml index 80f037f3c40..d1133b53984 100644 --- a/idea/idea.iml +++ b/idea/idea.iml @@ -42,7 +42,7 @@ - + diff --git a/idea/src/org/jetbrains/kotlin/idea/references/KotlinFilePathReferenceContributor.kt b/idea/src/org/jetbrains/kotlin/idea/references/KotlinFilePathReferenceContributor.kt index 48bdc30fdcd..d344bd857a3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/references/KotlinFilePathReferenceContributor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/references/KotlinFilePathReferenceContributor.kt @@ -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 { 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 { + return super.getVariants() + .map { + (it as? LookupElement)?.apply { + putUserData(KotlinCompletionCharFilter.SUPPRESS_ITEM_SELECTION_BY_CHARS_ON_TYPING, Unit) + } ?: it + } + .toTypedArray() + } + } + } + else it + } + .toTypedArray() } }