KotlinElementActionsFactory uses createAddMethodActions to create properties
This commit is contained in:
+51
-19
@@ -19,17 +19,20 @@ package org.jetbrains.kotlin.idea.quickfix.crossLanguage
|
|||||||
import com.intellij.codeInsight.daemon.QuickFixBundle
|
import com.intellij.codeInsight.daemon.QuickFixBundle
|
||||||
import com.intellij.codeInsight.intention.IntentionAction
|
import com.intellij.codeInsight.intention.IntentionAction
|
||||||
import com.intellij.codeInsight.intention.QuickFixFactory
|
import com.intellij.codeInsight.intention.QuickFixFactory
|
||||||
|
import com.intellij.lang.java.beans.PropertyKind
|
||||||
import com.intellij.lang.jvm.JvmClass
|
import com.intellij.lang.jvm.JvmClass
|
||||||
import com.intellij.lang.jvm.JvmElement
|
import com.intellij.lang.jvm.JvmElement
|
||||||
import com.intellij.lang.jvm.JvmModifier
|
import com.intellij.lang.jvm.JvmModifier
|
||||||
import com.intellij.lang.jvm.JvmModifiersOwner
|
import com.intellij.lang.jvm.JvmModifiersOwner
|
||||||
import com.intellij.lang.jvm.actions.*
|
import com.intellij.lang.jvm.actions.*
|
||||||
|
import com.intellij.lang.jvm.types.JvmType
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.text.StringUtilRt
|
import com.intellij.openapi.util.text.StringUtilRt
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.codeStyle.SuggestedNameInfo
|
import com.intellij.psi.codeStyle.SuggestedNameInfo
|
||||||
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
||||||
|
import com.intellij.psi.util.PropertyUtilBase
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
|
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||||
@@ -144,9 +147,9 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class CreatePropertyFix(
|
class CreatePropertyFix(
|
||||||
private val targetClass: JvmClass,
|
contextElement: KtElement,
|
||||||
contextElement: KtElement,
|
propertyInfo: PropertyInfo,
|
||||||
propertyInfo: PropertyInfo
|
private val classOrFileName: String?
|
||||||
) : CreateCallableFromUsageFix<KtElement>(contextElement, listOf(propertyInfo)) {
|
) : CreateCallableFromUsageFix<KtElement>(contextElement, listOf(propertyInfo)) {
|
||||||
override fun getFamilyName() = "Add property"
|
override fun getFamilyName() = "Add property"
|
||||||
override fun getText(): String {
|
override fun getText(): String {
|
||||||
@@ -157,7 +160,7 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
append("lateinit ")
|
append("lateinit ")
|
||||||
}
|
}
|
||||||
append(if (info.writable) "var" else "val")
|
append(if (info.writable) "var" else "val")
|
||||||
append("' property '${info.name}' to '${targetClass.name}'")
|
append("' property '${info.name}' to '$classOrFileName'")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -324,29 +327,42 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
|
|
||||||
override fun createAddPropertyActions(targetClass: JvmClass, request: MemberRequest.Property): List<IntentionAction> {
|
override fun createAddPropertyActions(targetClass: JvmClass, request: MemberRequest.Property): List<IntentionAction> {
|
||||||
val targetContainer = targetClass.toKtClassOrFile() ?: return emptyList()
|
val targetContainer = targetClass.toKtClassOrFile() ?: return emptyList()
|
||||||
|
return createAddPropertyActions(
|
||||||
|
targetContainer, listOf(request.visibilityModifier),
|
||||||
|
request.propertyType, request.propertyName, request.setterRequired, targetClass.name
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val modifierBuilder = ModifierBuilder(targetContainer).apply { addJvmModifier(request.visibilityModifier) }
|
private fun createAddPropertyActions(
|
||||||
|
targetContainer: KtElement,
|
||||||
|
modifiers: Iterable<JvmModifier>,
|
||||||
|
propertyType: JvmType,
|
||||||
|
propertyName: String,
|
||||||
|
setterRequired: Boolean,
|
||||||
|
classOrFileName: String?
|
||||||
|
): List<IntentionAction> {
|
||||||
|
val modifierBuilder = ModifierBuilder(targetContainer).apply { addJvmModifiers(modifiers) }
|
||||||
if (!modifierBuilder.isValid) return emptyList()
|
if (!modifierBuilder.isValid) return emptyList()
|
||||||
|
|
||||||
val resolutionFacade = targetContainer.getResolutionFacade()
|
val resolutionFacade = targetContainer.getResolutionFacade()
|
||||||
val nullableAnyType = resolutionFacade.moduleDescriptor.builtIns.nullableAnyType
|
val nullableAnyType = resolutionFacade.moduleDescriptor.builtIns.nullableAnyType
|
||||||
val ktType = (request.propertyType as? PsiType)?.resolveToKotlinType(resolutionFacade) ?: nullableAnyType
|
|
||||||
|
val ktType = (propertyType as? PsiType)?.resolveToKotlinType(resolutionFacade) ?: nullableAnyType
|
||||||
val propertyInfo = PropertyInfo(
|
val propertyInfo = PropertyInfo(
|
||||||
request.propertyName,
|
propertyName,
|
||||||
TypeInfo.Empty,
|
TypeInfo.Empty,
|
||||||
TypeInfo(ktType, Variance.INVARIANT),
|
TypeInfo(ktType, Variance.INVARIANT),
|
||||||
request.setterRequired,
|
setterRequired,
|
||||||
listOf(targetContainer),
|
listOf(targetContainer),
|
||||||
modifierList = modifierBuilder.modifierList,
|
modifierList = modifierBuilder.modifierList,
|
||||||
withInitializer = true
|
withInitializer = true
|
||||||
)
|
)
|
||||||
val propertyInfos = if (request.setterRequired) {
|
val propertyInfos = if (setterRequired) {
|
||||||
listOf(propertyInfo, propertyInfo.copyProperty(isLateinitPreferred = true))
|
listOf(propertyInfo, propertyInfo.copyProperty(isLateinitPreferred = true))
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
listOf(propertyInfo)
|
listOf(propertyInfo)
|
||||||
}
|
}
|
||||||
return propertyInfos.map { CreatePropertyFix(targetClass, targetContainer, it) }
|
return propertyInfos.map { CreatePropertyFix(targetContainer, it, classOrFileName) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createAddFieldActions(targetClass: JvmClass, request: CreateFieldRequest): List<IntentionAction> {
|
override fun createAddFieldActions(targetClass: JvmClass, request: CreateFieldRequest): List<IntentionAction> {
|
||||||
@@ -382,7 +398,7 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
else {
|
else {
|
||||||
listOf(propertyInfo(false))
|
listOf(propertyInfo(false))
|
||||||
}
|
}
|
||||||
return propertyInfos.map { CreatePropertyFix(targetClass, targetContainer, it) }
|
return propertyInfos.map { CreatePropertyFix(targetContainer, it, targetClass.name) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createAddMethodActions(targetClass: JvmClass, request: CreateMethodRequest): List<IntentionAction> {
|
override fun createAddMethodActions(targetClass: JvmClass, request: CreateMethodRequest): List<IntentionAction> {
|
||||||
@@ -410,11 +426,27 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
preferEmptyBody = true
|
preferEmptyBody = true
|
||||||
)
|
)
|
||||||
val targetClassName = targetClass.name
|
val targetClassName = targetClass.name
|
||||||
|
|
||||||
val action = object : CreateCallableFromUsageFix<KtElement>(targetContainer, listOf(functionInfo)) {
|
val action = object : CreateCallableFromUsageFix<KtElement>(targetContainer, listOf(functionInfo)) {
|
||||||
override fun getFamilyName() = "Add method"
|
override fun getFamilyName() = "Add method"
|
||||||
override fun getText() = "Add method '$methodName' to '$targetClassName'"
|
override fun getText() = "Add method '$methodName' to '$targetClassName'"
|
||||||
}
|
}
|
||||||
return listOf(action)
|
|
||||||
|
val nameAndKind = PropertyUtilBase.getPropertyNameAndKind(methodName) ?: return listOf(action)
|
||||||
|
|
||||||
|
val propertyType = (request.expectedParameters.singleOrNull()?.expectedTypes ?: request.returnType)
|
||||||
|
.firstOrNull { JvmPsiConversionHelper.getInstance(targetContainer.project).convertType(it.theType) != PsiType.VOID }
|
||||||
|
?: return listOf(action)
|
||||||
|
|
||||||
|
return createAddPropertyActions(
|
||||||
|
targetContainer,
|
||||||
|
request.modifiers,
|
||||||
|
propertyType.theType,
|
||||||
|
nameAndKind.first,
|
||||||
|
nameAndKind.second == PropertyKind.SETTER,
|
||||||
|
targetClass.name
|
||||||
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createAddAnnotationActions(target: JvmModifiersOwner, request: AnnotationRequest): List<IntentionAction> {
|
override fun createAddAnnotationActions(target: JvmModifiersOwner, request: AnnotationRequest): List<IntentionAction> {
|
||||||
|
|||||||
+43
-12
@@ -17,17 +17,19 @@
|
|||||||
package org.jetbrains.kotlin.idea.quickfix.crossLanguage
|
package org.jetbrains.kotlin.idea.quickfix.crossLanguage
|
||||||
|
|
||||||
import com.intellij.codeInsight.daemon.QuickFixBundle
|
import com.intellij.codeInsight.daemon.QuickFixBundle
|
||||||
import com.intellij.codeInsight.daemon.impl.quickfix.CreateParameterFromUsageFix
|
|
||||||
import com.intellij.codeInsight.intention.IntentionAction
|
import com.intellij.codeInsight.intention.IntentionAction
|
||||||
import com.intellij.codeInsight.intention.QuickFixFactory
|
import com.intellij.codeInsight.intention.QuickFixFactory
|
||||||
|
import com.intellij.lang.java.beans.PropertyKind
|
||||||
import com.intellij.lang.jvm.*
|
import com.intellij.lang.jvm.*
|
||||||
import com.intellij.lang.jvm.actions.*
|
import com.intellij.lang.jvm.actions.*
|
||||||
|
import com.intellij.lang.jvm.types.JvmType
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.text.StringUtilRt
|
import com.intellij.openapi.util.text.StringUtilRt
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.codeStyle.SuggestedNameInfo
|
import com.intellij.psi.codeStyle.SuggestedNameInfo
|
||||||
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
||||||
|
import com.intellij.psi.util.PropertyUtilBase
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
|
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||||
@@ -142,9 +144,9 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class CreatePropertyFix(
|
class CreatePropertyFix(
|
||||||
private val targetClass: JvmClass,
|
|
||||||
contextElement: KtElement,
|
contextElement: KtElement,
|
||||||
propertyInfo: PropertyInfo
|
propertyInfo: PropertyInfo,
|
||||||
|
private val classOrFileName: String?
|
||||||
) : CreateCallableFromUsageFix<KtElement>(contextElement, listOf(propertyInfo)) {
|
) : CreateCallableFromUsageFix<KtElement>(contextElement, listOf(propertyInfo)) {
|
||||||
override fun getFamilyName() = "Add property"
|
override fun getFamilyName() = "Add property"
|
||||||
override fun getText(): String {
|
override fun getText(): String {
|
||||||
@@ -155,7 +157,7 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
append("lateinit ")
|
append("lateinit ")
|
||||||
}
|
}
|
||||||
append(if (info.writable) "var" else "val")
|
append(if (info.writable) "var" else "val")
|
||||||
append("' property '${info.name}' to '${targetClass.name}'")
|
append("' property '${info.name}' to '$classOrFileName'")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -322,29 +324,43 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
|
|
||||||
override fun createAddPropertyActions(targetClass: JvmClass, request: MemberRequest.Property): List<IntentionAction> {
|
override fun createAddPropertyActions(targetClass: JvmClass, request: MemberRequest.Property): List<IntentionAction> {
|
||||||
val targetContainer = targetClass.toKtClassOrFile() ?: return emptyList()
|
val targetContainer = targetClass.toKtClassOrFile() ?: return emptyList()
|
||||||
|
return createAddPropertyActions(
|
||||||
|
targetContainer, listOf(request.visibilityModifier),
|
||||||
|
request.propertyType, request.propertyName, request.setterRequired, targetClass.name
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val modifierBuilder = ModifierBuilder(targetContainer).apply { addJvmModifier(request.visibilityModifier) }
|
private fun createAddPropertyActions(
|
||||||
|
targetContainer: KtElement,
|
||||||
|
modifiers: Iterable<JvmModifier>,
|
||||||
|
propertyType: JvmType,
|
||||||
|
propertyName: String,
|
||||||
|
setterRequired: Boolean,
|
||||||
|
classOrFileName: String?
|
||||||
|
): List<IntentionAction> {
|
||||||
|
val modifierBuilder = ModifierBuilder(targetContainer).apply { addJvmModifiers(modifiers) }
|
||||||
if (!modifierBuilder.isValid) return emptyList()
|
if (!modifierBuilder.isValid) return emptyList()
|
||||||
|
|
||||||
val resolutionFacade = targetContainer.getResolutionFacade()
|
val resolutionFacade = targetContainer.getResolutionFacade()
|
||||||
val nullableAnyType = resolutionFacade.moduleDescriptor.builtIns.nullableAnyType
|
val nullableAnyType = resolutionFacade.moduleDescriptor.builtIns.nullableAnyType
|
||||||
val ktType = (request.propertyType as? PsiType)?.resolveToKotlinType(resolutionFacade) ?: nullableAnyType
|
|
||||||
|
val ktType = (propertyType as? PsiType)?.resolveToKotlinType(resolutionFacade) ?: nullableAnyType
|
||||||
val propertyInfo = PropertyInfo(
|
val propertyInfo = PropertyInfo(
|
||||||
request.propertyName,
|
propertyName,
|
||||||
TypeInfo.Empty,
|
TypeInfo.Empty,
|
||||||
TypeInfo(ktType, Variance.INVARIANT),
|
TypeInfo(ktType, Variance.INVARIANT),
|
||||||
request.setterRequired,
|
setterRequired,
|
||||||
listOf(targetContainer),
|
listOf(targetContainer),
|
||||||
modifierList = modifierBuilder.modifierList,
|
modifierList = modifierBuilder.modifierList,
|
||||||
withInitializer = true
|
withInitializer = true
|
||||||
)
|
)
|
||||||
val propertyInfos = if (request.setterRequired) {
|
val propertyInfos = if (setterRequired) {
|
||||||
listOf(propertyInfo, propertyInfo.copyProperty(isLateinitPreferred = true))
|
listOf(propertyInfo, propertyInfo.copyProperty(isLateinitPreferred = true))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
listOf(propertyInfo)
|
listOf(propertyInfo)
|
||||||
}
|
}
|
||||||
return propertyInfos.map { CreatePropertyFix(targetClass, targetContainer, it) }
|
return propertyInfos.map { CreatePropertyFix(targetContainer, it, classOrFileName) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createAddFieldActions(targetClass: JvmClass, request: CreateFieldRequest): List<IntentionAction> {
|
override fun createAddFieldActions(targetClass: JvmClass, request: CreateFieldRequest): List<IntentionAction> {
|
||||||
@@ -380,7 +396,7 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
else {
|
else {
|
||||||
listOf(propertyInfo(false))
|
listOf(propertyInfo(false))
|
||||||
}
|
}
|
||||||
return propertyInfos.map { CreatePropertyFix(targetClass, targetContainer, it) }
|
return propertyInfos.map { CreatePropertyFix(targetContainer, it, targetClass.name) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createAddMethodActions(targetClass: JvmClass, request: CreateMethodRequest): List<IntentionAction> {
|
override fun createAddMethodActions(targetClass: JvmClass, request: CreateMethodRequest): List<IntentionAction> {
|
||||||
@@ -412,7 +428,22 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
override fun getFamilyName() = "Add method"
|
override fun getFamilyName() = "Add method"
|
||||||
override fun getText() = "Add method '$methodName' to '$targetClassName'"
|
override fun getText() = "Add method '$methodName' to '$targetClassName'"
|
||||||
}
|
}
|
||||||
return listOf(action)
|
|
||||||
|
val nameAndKind = PropertyUtilBase.getPropertyNameAndKind(methodName) ?: return listOf(action)
|
||||||
|
|
||||||
|
val propertyType = (request.expectedParameters.singleOrNull()?.expectedTypes ?: request.returnType)
|
||||||
|
.firstOrNull { JvmPsiConversionHelper.getInstance(targetContainer.project).convertType(it.theType) != PsiType.VOID }
|
||||||
|
?: return listOf(action)
|
||||||
|
|
||||||
|
return createAddPropertyActions(
|
||||||
|
targetContainer,
|
||||||
|
request.modifiers,
|
||||||
|
propertyType.theType,
|
||||||
|
nameAndKind.first,
|
||||||
|
nameAndKind.second == PropertyKind.SETTER,
|
||||||
|
targetClass.name
|
||||||
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createAddAnnotationActions(target: JvmModifiersOwner, request: AnnotationRequest): List<IntentionAction> {
|
override fun createAddAnnotationActions(target: JvmModifiersOwner, request: AnnotationRequest): List<IntentionAction> {
|
||||||
|
|||||||
@@ -24,7 +24,10 @@ import com.intellij.lang.jvm.actions.*
|
|||||||
import com.intellij.lang.jvm.types.JvmSubstitutor
|
import com.intellij.lang.jvm.types.JvmSubstitutor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.Pair.pair
|
import com.intellij.openapi.util.Pair.pair
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.PsiJvmSubstitutor
|
||||||
|
import com.intellij.psi.PsiMethod
|
||||||
|
import com.intellij.psi.PsiSubstitutor
|
||||||
|
import com.intellij.psi.PsiType
|
||||||
import com.intellij.psi.codeStyle.SuggestedNameInfo
|
import com.intellij.psi.codeStyle.SuggestedNameInfo
|
||||||
import com.intellij.testFramework.fixtures.CodeInsightTestFixture
|
import com.intellij.testFramework.fixtures.CodeInsightTestFixture
|
||||||
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase
|
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase
|
||||||
@@ -32,8 +35,6 @@ import org.jetbrains.kotlin.asJava.toLightElements
|
|||||||
import org.jetbrains.kotlin.idea.search.allScope
|
import org.jetbrains.kotlin.idea.search.allScope
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
||||||
import org.jetbrains.kotlin.psi.KtModifierListOwner
|
import org.jetbrains.kotlin.psi.KtModifierListOwner
|
||||||
import org.jetbrains.uast.UParameter
|
|
||||||
import org.jetbrains.uast.UastContext
|
|
||||||
import org.jetbrains.uast.toUElement
|
import org.jetbrains.uast.toUElement
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
|
|
||||||
@@ -399,16 +400,16 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
""".trim().trimMargin())
|
""".trim().trimMargin())
|
||||||
|
|
||||||
myFixture.launchAction(
|
myFixture.launchAction(
|
||||||
createPropertyActions(
|
createMethodActions(
|
||||||
myFixture.atCaret(),
|
myFixture.atCaret(),
|
||||||
MemberRequest.Property(
|
SimpleMethodRequest(
|
||||||
propertyName = "baz",
|
project,
|
||||||
visibilityModifier = JvmModifier.PUBLIC,
|
methodName = "setBaz",
|
||||||
propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()),
|
modifiers = listOf(JvmModifier.PUBLIC),
|
||||||
getterRequired = true,
|
returnType = expectedTypes(),
|
||||||
setterRequired = true
|
parameters = expectedParams(PsiType.getTypeByName("java.lang.String", project, project.allScope()))
|
||||||
)
|
)
|
||||||
).findWithText("Add 'var' property 'baz' to 'Foo'")
|
).findWithText("Add 'var' property 'baz' to 'Foo'")
|
||||||
)
|
)
|
||||||
myFixture.checkResult("""
|
myFixture.checkResult("""
|
||||||
|class Foo {
|
|class Foo {
|
||||||
@@ -427,16 +428,16 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
""".trim().trimMargin())
|
""".trim().trimMargin())
|
||||||
|
|
||||||
myFixture.launchAction(
|
myFixture.launchAction(
|
||||||
createPropertyActions(
|
createMethodActions(
|
||||||
myFixture.atCaret(),
|
myFixture.atCaret(),
|
||||||
MemberRequest.Property(
|
SimpleMethodRequest(
|
||||||
propertyName = "baz",
|
project,
|
||||||
visibilityModifier = JvmModifier.PUBLIC,
|
methodName = "setBaz",
|
||||||
propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()),
|
modifiers = listOf(JvmModifier.PUBLIC),
|
||||||
getterRequired = true,
|
returnType = expectedTypes(),
|
||||||
setterRequired = true
|
parameters = expectedParams(PsiType.getTypeByName("java.lang.String", project, project.allScope()))
|
||||||
)
|
)
|
||||||
).findWithText("Add 'lateinit var' property 'baz' to 'Foo'")
|
).findWithText("Add 'lateinit var' property 'baz' to 'Foo'")
|
||||||
)
|
)
|
||||||
myFixture.checkResult("""
|
myFixture.checkResult("""
|
||||||
|class Foo {
|
|class Foo {
|
||||||
@@ -502,10 +503,6 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private fun createPropertyActions(atCaret: JvmClass, property: MemberRequest.Property): List<IntentionAction> =
|
|
||||||
com.intellij.lang.jvm.actions.EP_NAME.extensions.flatMap { it.createAddPropertyActions(atCaret, property) }
|
|
||||||
|
|
||||||
private fun createFieldActions(atCaret: JvmClass, fieldRequest: CreateFieldRequest): List<IntentionAction> =
|
private fun createFieldActions(atCaret: JvmClass, fieldRequest: CreateFieldRequest): List<IntentionAction> =
|
||||||
com.intellij.lang.jvm.actions.EP_NAME.extensions.flatMap { it.createAddFieldActions(atCaret, fieldRequest) }
|
com.intellij.lang.jvm.actions.EP_NAME.extensions.flatMap { it.createAddFieldActions(atCaret, fieldRequest) }
|
||||||
|
|
||||||
@@ -517,16 +514,16 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
""".trim().trimMargin())
|
""".trim().trimMargin())
|
||||||
|
|
||||||
myFixture.launchAction(
|
myFixture.launchAction(
|
||||||
createPropertyActions(
|
createMethodActions(
|
||||||
myFixture.atCaret(),
|
myFixture.atCaret(),
|
||||||
MemberRequest.Property(
|
SimpleMethodRequest(
|
||||||
propertyName = "baz",
|
project,
|
||||||
visibilityModifier = JvmModifier.PUBLIC,
|
methodName = "getBaz",
|
||||||
propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()),
|
modifiers = listOf(JvmModifier.PUBLIC),
|
||||||
getterRequired = true,
|
returnType = expectedTypes(PsiType.getTypeByName("java.lang.String", project, project.allScope())),
|
||||||
setterRequired = false
|
parameters = expectedParams()
|
||||||
)
|
)
|
||||||
).findWithText("Add 'val' property 'baz' to 'Foo'")
|
).findWithText("Add 'val' property 'baz' to 'Foo'")
|
||||||
)
|
)
|
||||||
myFixture.checkResult("""
|
myFixture.checkResult("""
|
||||||
|class Foo {
|
|class Foo {
|
||||||
@@ -537,13 +534,6 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
""".trim().trimMargin(), true)
|
""".trim().trimMargin(), true)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun makeParams(vararg psyTypes: PsiType): List<UParameter> {
|
|
||||||
val uastContext = UastContext(myFixture.project)
|
|
||||||
val factory = JavaPsiFacade.getElementFactory(myFixture.project)
|
|
||||||
val parameters = psyTypes.mapIndexed { index, psiType -> factory.createParameter("param$index", psiType) }
|
|
||||||
return parameters.map { uastContext.convertElement(it, null, UParameter::class.java) as UParameter }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun expectedTypes(vararg psiTypes: PsiType) = psiTypes.map { expectedType(it) }
|
private fun expectedTypes(vararg psiTypes: PsiType) = psiTypes.map { expectedType(it) }
|
||||||
|
|
||||||
private fun expectedParams(vararg psyTypes: PsiType) =
|
private fun expectedParams(vararg psyTypes: PsiType) =
|
||||||
|
|||||||
@@ -402,14 +402,14 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
""".trim().trimMargin())
|
""".trim().trimMargin())
|
||||||
|
|
||||||
myFixture.launchAction(
|
myFixture.launchAction(
|
||||||
createPropertyActions(
|
createMethodActions(
|
||||||
myFixture.atCaret(),
|
myFixture.atCaret(),
|
||||||
MemberRequest.Property(
|
SimpleMethodRequest(
|
||||||
propertyName = "baz",
|
project,
|
||||||
visibilityModifier = JvmModifier.PUBLIC,
|
methodName = "setBaz",
|
||||||
propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()),
|
modifiers = listOf(JvmModifier.PUBLIC),
|
||||||
getterRequired = true,
|
returnType = expectedTypes(),
|
||||||
setterRequired = true
|
parameters = expectedParams(PsiType.getTypeByName("java.lang.String", project, project.allScope()))
|
||||||
)
|
)
|
||||||
).findWithText("Add 'var' property 'baz' to 'Foo'")
|
).findWithText("Add 'var' property 'baz' to 'Foo'")
|
||||||
)
|
)
|
||||||
@@ -430,14 +430,14 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
""".trim().trimMargin())
|
""".trim().trimMargin())
|
||||||
|
|
||||||
myFixture.launchAction(
|
myFixture.launchAction(
|
||||||
createPropertyActions(
|
createMethodActions(
|
||||||
myFixture.atCaret(),
|
myFixture.atCaret(),
|
||||||
MemberRequest.Property(
|
SimpleMethodRequest(
|
||||||
propertyName = "baz",
|
project,
|
||||||
visibilityModifier = JvmModifier.PUBLIC,
|
methodName = "setBaz",
|
||||||
propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()),
|
modifiers = listOf(JvmModifier.PUBLIC),
|
||||||
getterRequired = true,
|
returnType = expectedTypes(),
|
||||||
setterRequired = true
|
parameters = expectedParams(PsiType.getTypeByName("java.lang.String", project, project.allScope()))
|
||||||
)
|
)
|
||||||
).findWithText("Add 'lateinit var' property 'baz' to 'Foo'")
|
).findWithText("Add 'lateinit var' property 'baz' to 'Foo'")
|
||||||
)
|
)
|
||||||
@@ -505,10 +505,6 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private fun createPropertyActions(atCaret: JvmClass, property: MemberRequest.Property): List<IntentionAction> =
|
|
||||||
com.intellij.lang.jvm.actions.EP_NAME.extensions.flatMap { it.createAddPropertyActions(atCaret, property) }
|
|
||||||
|
|
||||||
private fun createFieldActions(atCaret: JvmClass, fieldRequest: CreateFieldRequest): List<IntentionAction> =
|
private fun createFieldActions(atCaret: JvmClass, fieldRequest: CreateFieldRequest): List<IntentionAction> =
|
||||||
com.intellij.lang.jvm.actions.EP_NAME.extensions.flatMap { it.createAddFieldActions(atCaret, fieldRequest) }
|
com.intellij.lang.jvm.actions.EP_NAME.extensions.flatMap { it.createAddFieldActions(atCaret, fieldRequest) }
|
||||||
|
|
||||||
@@ -520,14 +516,14 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() {
|
|||||||
""".trim().trimMargin())
|
""".trim().trimMargin())
|
||||||
|
|
||||||
myFixture.launchAction(
|
myFixture.launchAction(
|
||||||
createPropertyActions(
|
createMethodActions(
|
||||||
myFixture.atCaret(),
|
myFixture.atCaret(),
|
||||||
MemberRequest.Property(
|
SimpleMethodRequest(
|
||||||
propertyName = "baz",
|
project,
|
||||||
visibilityModifier = JvmModifier.PUBLIC,
|
methodName = "getBaz",
|
||||||
propertyType = PsiType.getTypeByName("java.lang.String", project, project.allScope()),
|
modifiers = listOf(JvmModifier.PUBLIC),
|
||||||
getterRequired = true,
|
returnType = expectedTypes(PsiType.getTypeByName("java.lang.String", project, project.allScope())),
|
||||||
setterRequired = false
|
parameters = expectedParams()
|
||||||
)
|
)
|
||||||
).findWithText("Add 'val' property 'baz' to 'Foo'")
|
).findWithText("Add 'val' property 'baz' to 'Foo'")
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user