Completion after $ in string literal works correctly for classes and objects
This commit is contained in:
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.completion
|
package org.jetbrains.kotlin.idea.completion
|
||||||
|
|
||||||
import com.intellij.codeInsight.completion.CompletionProgressIndicator
|
import com.intellij.codeInsight.completion.*
|
||||||
import com.intellij.codeInsight.completion.CompletionService
|
|
||||||
import com.intellij.codeInsight.completion.InsertionContext
|
|
||||||
import com.intellij.codeInsight.completion.PrefixMatcher
|
|
||||||
import com.intellij.codeInsight.lookup.*
|
import com.intellij.codeInsight.lookup.*
|
||||||
import com.intellij.openapi.progress.ProcessCanceledException
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
@@ -72,7 +69,9 @@ fun LookupElement.withReceiverCast(): LookupElement {
|
|||||||
fun LookupElement.withBracesSurrounding(): LookupElement {
|
fun LookupElement.withBracesSurrounding(): LookupElement {
|
||||||
return object: LookupElementDecorator<LookupElement>(this) {
|
return object: LookupElementDecorator<LookupElement>(this) {
|
||||||
override fun handleInsert(context: InsertionContext) {
|
override fun handleInsert(context: InsertionContext) {
|
||||||
context.getDocument().insertString(context.getStartOffset(), "{")
|
val startOffset = context.getStartOffset()
|
||||||
|
context.getDocument().insertString(startOffset, "{")
|
||||||
|
context.getOffsetMap().addOffset(CompletionInitializationContext.START_OFFSET, startOffset + 1)
|
||||||
|
|
||||||
val tailOffset = context.getTailOffset()
|
val tailOffset = context.getTailOffset()
|
||||||
context.getDocument().insertString(tailOffset, "}")
|
context.getDocument().insertString(tailOffset, "}")
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.intellij.codeInsight.lookup.LookupElementDecorator
|
|||||||
import com.intellij.codeInsight.lookup.LookupElementPresentation
|
import com.intellij.codeInsight.lookup.LookupElementPresentation
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
@@ -70,7 +71,7 @@ class LookupElementsCollector(
|
|||||||
lookupElement = lookupElement.withReceiverCast()
|
lookupElement = lookupElement.withReceiverCast()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (surroundCallsWithBraces && descriptor is FunctionDescriptor) {
|
if (surroundCallsWithBraces && (descriptor is FunctionDescriptor || descriptor is ClassifierDescriptor)) {
|
||||||
lookupElement = lookupElement.withBracesSurrounding()
|
lookupElement = lookupElement.withBracesSurrounding()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
fun foo(): String {
|
||||||
|
val s = "$OOO<caret>"
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
package ppp
|
||||||
|
|
||||||
|
object OOOOO
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import ppp.OOOOO
|
||||||
|
|
||||||
|
fun foo(): String {
|
||||||
|
val s = "${OOOOO<caret>}"
|
||||||
|
}
|
||||||
+4
@@ -70,6 +70,10 @@ public class CompletionMultifileHandlerTest extends KotlinCompletionTestCase {
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testObjectInStringTemplate() throws Exception {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void doTest() throws Exception {
|
public void doTest() throws Exception {
|
||||||
String fileName = getTestName(false);
|
String fileName = getTestName(false);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user