Specify type: escape with backticks if need
#KT-29677 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
1a818970c3
commit
240ff08069
@@ -33,12 +33,14 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
|||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
import org.jetbrains.kotlin.idea.core.ShortenReferences
|
import org.jetbrains.kotlin.idea.core.ShortenReferences
|
||||||
import org.jetbrains.kotlin.idea.core.setType
|
import org.jetbrains.kotlin.idea.core.setType
|
||||||
|
import org.jetbrains.kotlin.idea.core.unquote
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||||
import org.jetbrains.kotlin.idea.util.getResolvableApproximations
|
import org.jetbrains.kotlin.idea.util.getResolvableApproximations
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
@@ -183,7 +185,18 @@ class SpecifyTypeExplicitlyIntention : SelfTargetingRangeIntention<KtCallableDec
|
|||||||
items: List<KotlinType>, defaultItem: KotlinType
|
items: List<KotlinType>, defaultItem: KotlinType
|
||||||
) : ChooseValueExpression<KotlinType>(items, defaultItem) {
|
) : ChooseValueExpression<KotlinType>(items, defaultItem) {
|
||||||
override fun getLookupString(element: KotlinType) = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_NO_ANNOTATIONS.renderType(element)
|
override fun getLookupString(element: KotlinType) = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_NO_ANNOTATIONS.renderType(element)
|
||||||
override fun getResult(element: KotlinType) = IdeDescriptorRenderers.SOURCE_CODE.renderType(element)
|
|
||||||
|
override fun getResult(element: KotlinType): String {
|
||||||
|
val renderType = IdeDescriptorRenderers.SOURCE_CODE.renderType(element)
|
||||||
|
val descriptor = element.constructor.declarationDescriptor
|
||||||
|
if (descriptor?.name?.asString() == renderType) {
|
||||||
|
val className = (DescriptorToSourceUtils.descriptorToDeclaration(descriptor) as? KtClass)?.nameIdentifier?.text
|
||||||
|
if (className != null && className != className.unquote()) {
|
||||||
|
return className
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return renderType
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addTypeAnnotation(editor: Editor?, declaration: KtCallableDeclaration, exprType: KotlinType) {
|
fun addTypeAnnotation(editor: Editor?, declaration: KtCallableDeclaration, exprType: KotlinType) {
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
class `1`
|
||||||
|
val x<caret> = `1`()
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
class `1`
|
||||||
|
val x: `1` = `1`()
|
||||||
@@ -16216,6 +16216,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
runTest("idea/testData/intentions/specifyTypeExplicitly/anonymousObject.kt");
|
runTest("idea/testData/intentions/specifyTypeExplicitly/anonymousObject.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("backticked.kt")
|
||||||
|
public void testBackticked() throws Exception {
|
||||||
|
runTest("idea/testData/intentions/specifyTypeExplicitly/backticked.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("badCaretPosition.kt")
|
@TestMetadata("badCaretPosition.kt")
|
||||||
public void testBadCaretPosition() throws Exception {
|
public void testBadCaretPosition() throws Exception {
|
||||||
runTest("idea/testData/intentions/specifyTypeExplicitly/badCaretPosition.kt");
|
runTest("idea/testData/intentions/specifyTypeExplicitly/badCaretPosition.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user