Completion after $ in string literal works correctly for classes and objects

This commit is contained in:
Valentin Kipyatkov
2015-03-06 16:30:53 +03:00
parent de7b4dc681
commit 3e85b97e1a
6 changed files with 21 additions and 6 deletions
@@ -16,10 +16,7 @@
package org.jetbrains.kotlin.idea.completion
import com.intellij.codeInsight.completion.CompletionProgressIndicator
import com.intellij.codeInsight.completion.CompletionService
import com.intellij.codeInsight.completion.InsertionContext
import com.intellij.codeInsight.completion.PrefixMatcher
import com.intellij.codeInsight.completion.*
import com.intellij.codeInsight.lookup.*
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.util.Key
@@ -72,7 +69,9 @@ fun LookupElement.withReceiverCast(): LookupElement {
fun LookupElement.withBracesSurrounding(): LookupElement {
return object: LookupElementDecorator<LookupElement>(this) {
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()
context.getDocument().insertString(tailOffset, "}")
@@ -25,6 +25,7 @@ import com.intellij.codeInsight.lookup.LookupElementDecorator
import com.intellij.codeInsight.lookup.LookupElementPresentation
import com.intellij.openapi.util.TextRange
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
@@ -70,7 +71,7 @@ class LookupElementsCollector(
lookupElement = lookupElement.withReceiverCast()
}
if (surroundCallsWithBraces && descriptor is FunctionDescriptor) {
if (surroundCallsWithBraces && (descriptor is FunctionDescriptor || descriptor is ClassifierDescriptor)) {
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>}"
}
@@ -70,6 +70,10 @@ public class CompletionMultifileHandlerTest extends KotlinCompletionTestCase {
doTest();
}
public void testObjectInStringTemplate() throws Exception {
doTest();
}
public void doTest() throws Exception {
String fileName = getTestName(false);