Create function/property from usage: added "member" when appropriate + changed order

This commit is contained in:
Valentin Kipyatkov
2015-06-23 17:04:37 +03:00
parent b691ed2494
commit 2bd1362be6
216 changed files with 246 additions and 230 deletions
@@ -176,7 +176,6 @@ map.platform.class.to.kotlin.multiple=Change all usages of ''{0}'' in this file
map.platform.class.to.kotlin.advertisement=Choose an appropriate Kotlin class
map.platform.class.to.kotlin.family=Change to Kotlin class
create.from.usage.family=Create from usage
create.0.from.usage=Create {0}
create.local.variable.from.usage=Create local variable ''{0}''
create.parameter.from.usage=Create parameter ''{0}''
surround.with=Surround with
@@ -16,11 +16,11 @@
package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable
import com.intellij.codeInsight.intention.LowPriorityAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.JetBundle
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.refactoring.canRefactor
import org.jetbrains.kotlin.idea.core.refactoring.chooseContainerElementIfNecessary
@@ -32,14 +32,21 @@ import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
import java.util.Collections
import java.util.HashSet
public class CreateCallableFromUsageFix(
public class CreateCallableFromUsageFix(originalElement: JetElement, callableInfos: List<CallableInfo>)
: CreateCallableFromUsageFixBase(originalElement, callableInfos, false) {
constructor(originalExpression: JetElement, callableInfo: CallableInfo) : this(originalExpression, Collections.singletonList(callableInfo))
}
public class CreateExtensionCallableFromUsageFix(originalElement: JetElement, callableInfos: List<CallableInfo>)
: CreateCallableFromUsageFixBase(originalElement, callableInfos, true), LowPriorityAction {
constructor(originalExpression: JetElement, callableInfo: CallableInfo) : this(originalExpression, Collections.singletonList(callableInfo))
}
public abstract class CreateCallableFromUsageFixBase(
originalElement: JetElement,
val callableInfos: List<CallableInfo>,
val isExtension: Boolean
) : CreateFromUsageFixBase(originalElement) {
constructor(originalExpression: JetElement,
callableInfo: CallableInfo,
isExtension: Boolean) : this(originalExpression, Collections.singletonList(callableInfo), isExtension) { }
init {
assert (callableInfos.isNotEmpty()) { "No CallableInfos: ${originalElement.getElementTextWithContext()}" }
@@ -69,15 +76,24 @@ public class CreateCallableFromUsageFix(
}
if (it.name.isNotEmpty()) "$kind '${it.name}'" else kind
}
return JetBundle.message(
"create.0.from.usage",
renderedCallables.joinToString(prefix = if (isExtension) "extension " else "")
)
return StringBuilder {
append("Create ")
val receiverInfo = callableInfos.first().receiverTypeInfo
if (isExtension) {
append("extension ")
}
else if (receiverInfo !is TypeInfo.Empty) {
append("member ")
}
renderedCallables.joinTo(this)
}.toString()
}
fun isAvailable(): Boolean {
val callableInfo = callableInfos.first()
val receiverInfo = callableInfo.receiverTypeInfo
val receiverInfo = callableInfos.first().receiverTypeInfo
if (receiverInfo is TypeInfo.Empty) return !isExtension
// TODO: Remove after companion object extensions are supported
@@ -147,16 +163,16 @@ public class CreateCallableFromUsageFix(
public fun CreateCallableFromUsageFixes(
originalExpression: JetExpression,
callableInfos: List<CallableInfo>
) : List<CreateCallableFromUsageFix> {
) : List<CreateCallableFromUsageFixBase> {
return listOf(
CreateCallableFromUsageFix(originalExpression, callableInfos, false),
CreateCallableFromUsageFix(originalExpression, callableInfos, true)
CreateCallableFromUsageFix(originalExpression, callableInfos),
CreateExtensionCallableFromUsageFix(originalExpression, callableInfos)
).filter { it.isAvailable() }
}
public fun CreateCallableFromUsageFixes(
originalExpression: JetExpression,
callableInfo: CallableInfo
) : List<CreateCallableFromUsageFix> {
) : List<CreateCallableFromUsageFixBase> {
return CreateCallableFromUsageFixes(originalExpression, Collections.singletonList(callableInfo))
}
@@ -63,6 +63,6 @@ object CreateConstructorFromDelegationCallActionFactory : JetSingleIntentionActi
)
}
return CreateCallableFromUsageFix(delegationCall, SecondaryConstructorInfo(parameters, targetClass), false)
return CreateCallableFromUsageFix(delegationCall, SecondaryConstructorInfo(parameters, targetClass))
}
}
@@ -59,6 +59,6 @@ object CreateConstructorFromDelegatorToSuperCallActionFactory : JetSingleIntenti
)
}
return CreateCallableFromUsageFix(delegationCall, SecondaryConstructorInfo(parameters, targetClass), false)
return CreateCallableFromUsageFix(delegationCall, SecondaryConstructorInfo(parameters, targetClass))
}
}
@@ -66,8 +66,8 @@ public class CreateClassFromUsageFix(
element: JetElement,
val classInfo: ClassInfo
): CreateFromUsageFixBase(element) {
override fun getText(): String =
JetBundle.message("create.0.from.usage", "${classInfo.kind.description} '${classInfo.name}'")
override fun getText() = "Create ${classInfo.kind.description} '${classInfo.name}'"
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean {
if (!super.isAvailable(project, editor, file)) return false
@@ -131,6 +131,6 @@ private fun JetSimpleNameExpression.getCreatePackageFixIfApplicable(targetParent
return object: DelegatingIntentionAction(javaFix) {
override fun getFamilyName(): String = JetBundle.message("create.from.usage.family")
override fun getText(): String = JetBundle.message("create.0.from.usage", "package '${fullName}'")
override fun getText(): String = "Create package '${fullName}'"
}
}
@@ -1,6 +1,6 @@
// "Import" "false"
// ACTION: Create extension function 'inc'
// ACTION: Create function 'inc'
// ACTION: Create member function 'inc'
// ACTION: Create local variable '++'
// ACTION: Create parameter '++'
// ACTION: Replace overloaded operator with function call
@@ -1,6 +1,6 @@
// "Create class 'A'" "false"
// ACTION: Create extension property 'A'
// ACTION: Create property 'A'
// ACTION: Create member property 'A'
// ERROR: Unresolved reference: A
package p
@@ -1,4 +1,4 @@
// "Create enum constant 'A'" "false"
// ACTION: Create property 'A'
// ACTION: Create member property 'A'
// ERROR: Unresolved reference: A
fun foo() = J.<caret>A
@@ -1,5 +1,5 @@
// "Create enum constant 'A'" "false"
// ACTION: Convert to block body
// ACTION: Create property 'A'
// ACTION: Create member property 'A'
// ERROR: Unresolved reference: A
fun foo(): J = J.<caret>A
@@ -1,4 +1,4 @@
// "Create enum constant 'A'" "false"
// ACTION: Create property 'A'
// ACTION: Create member property 'A'
// ERROR: Unresolved reference: A
fun foo() = J.<caret>A
@@ -1,5 +1,5 @@
// "Create enum constant 'A'" "false"
// ACTION: Convert to block body
// ACTION: Create property 'A'
// ACTION: Create member property 'A'
// ERROR: Unresolved reference: A
fun foo(): X = E.<caret>A
@@ -1,6 +1,6 @@
// "Create enum constant 'A'" "false"
// ACTION: Create extension property 'A'
// ACTION: Create property 'A'
// ACTION: Create member property 'A'
// ERROR: Unresolved reference: A
package p
@@ -1,4 +1,4 @@
// "Create object 'A'" "false"
// ACTION: Create property 'A'
// ACTION: Create member property 'A'
// ERROR: Unresolved reference: A
fun foo() = J.<caret>A
@@ -1,6 +1,6 @@
// "Create object 'A'" "false"
// ACTION: Create extension property 'A'
// ACTION: Create property 'A'
// ACTION: Create member property 'A'
// ERROR: Unresolved reference: A
package p
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(t: T): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'compareTo'" "true"
// "Create member function 'compareTo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'compareTo'" "true"
// "Create member function 'compareTo'" "true"
class A<T>(val n: T) {
fun compareTo(t: T): Int {
@@ -1,4 +1,4 @@
// "Create function 'contains'" "true"
// "Create member function 'contains'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'contains'" "true"
// "Create member function 'contains'" "true"
class A<T>(val n: T) {
fun contains(t: T): Boolean {
@@ -1,4 +1,4 @@
// "Create function 'compareTo'" "true"
// "Create member function 'compareTo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'compareTo'" "true"
// "Create member function 'compareTo'" "true"
class A<T>(val n: T) {
fun compareTo(t: T): Int {
@@ -1,4 +1,4 @@
// "Create function 'contains'" "true"
// "Create member function 'contains'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'contains'" "true"
// "Create member function 'contains'" "true"
class A<T>(val n: T) {
fun contains(t: T): Boolean {
@@ -1,4 +1,4 @@
// "Create function 'plusAssign'" "true"
// "Create member function 'plusAssign'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'plusAssign'" "true"
// "Create member function 'plusAssign'" "true"
class A<T>(val n: T) {
fun plusAssign(t: T) {
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T) {
fun plus(): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T) {
fun plus(): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T) {
fun plus(t: T): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T) {
fun plus(i: Int, s: String): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T) {
fun plus(i: Int, s: String): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T) {
fun plus(t: T): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'plus'" "true"
// "Create member function 'plus'" "true"
class A<T>(val n: T) {
fun plus(i: Int): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'contains'" "true"
// "Create member function 'contains'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'contains'" "true"
// "Create member function 'contains'" "true"
class A<T>(val n: T) {
fun contains(t: T): Boolean {
@@ -1,4 +1,4 @@
// "Create function 'contains'" "true"
// "Create member function 'contains'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'contains'" "true"
// "Create member function 'contains'" "true"
class A<T>(val n: T) {
fun contains(t: T): Boolean {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(t: T, s: String, function: Function1<T, T>): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(function: Function1<T, T>): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class Settings
fun isModified(settings: Settings, c: C) = c.<caret>foo(settings)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class Settings
fun isModified(settings: Settings, c: C) = c.foo(settings)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(a: Int): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(a: Int): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(i: Int, s: String): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(i: Int, s: String): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create function 'foo'" "false"
// "Create member function 'foo'" "false"
// ERROR: Unresolved reference: foo
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
companion object {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
companion object {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "false"
// "Create member function 'foo'" "false"
// ACTION: Convert to expression body
// ACTION: Create extension function 'foo'
// ERROR: Unresolved reference: foo
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: Unresolved reference: foo
fun test(a: A): Int? {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: Unresolved reference: foo
fun test(a: A): Int? {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: Unresolved reference: foo
fun test(): Int? {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: Unresolved reference: foo
fun test(): Int? {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
interface T
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
interface T {
fun foo(s: String, i: Int): Boolean
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
object A
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
object A {
fun foo(i: Int): Int {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(t: T): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class F {
fun bar() {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class F {
fun bar() {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(u: T): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(abc: T, ghi: A<T>, def: String): A<T> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(t: T?): A<Int> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(t: T): A<T>? {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(t: T): A<String> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: Unresolved reference: foo
fun test(): Int {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: Unresolved reference: foo
fun test(): Int {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: <html>Type mismatch.<table><tr><td>Required:</td><td>kotlin.Int</td></tr><tr><td>Found:</td><td>A&lt;kotlin.Int&gt;</td></tr></table></html>
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: <html>Type mismatch.<table><tr><td>Required:</td><td>kotlin.Int</td></tr><tr><td>Found:</td><td>A&lt;kotlin.Int&gt;</td></tr></table></html>
class A<T>(val n: T) {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "false"
// "Create member function 'foo'" "false"
// ACTION: Convert to expression body
// ACTION: Replace with infix function call
// ERROR: Unresolved reference: x
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A {
fun foo(): String {
@@ -1,5 +1,5 @@
// "Create extension function 'foo'" "false"
// ACTION: Create function 'foo'
// ACTION: Create member function 'foo'
// ERROR: Unresolved reference: foo
fun test() {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: Unresolved reference: foo
fun test() {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
// ERROR: Unresolved reference: foo
fun test() {
@@ -1,4 +1,5 @@
// "Create function 'foo'" "false"
// "Create member function 'foo'" "false"
// ERROR: Unresolved reference: foo
fun test() {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class SetOptions
fun isModified(setOptions: SetOptions, c: C) = c.<caret>foo(setOptions)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class SetOptions
fun isModified(setOptions: SetOptions, c: C) = c.foo(setOptions)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun test(): A<Int> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun test(): A<Int> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
fun foo(i: Int, s: String): A<Int> {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
inner class B<U>(val m: U) {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
inner class B<U>(val m: U) {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
inner class B<U>(val m: U) {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class A<T>(val n: T) {
inner class B<U>(val m: U) {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class B<T>(val t: T) {
@@ -1,4 +1,4 @@
// "Create function 'foo'" "true"
// "Create member function 'foo'" "true"
class B<T>(val t: T) {
fun <U, V> foo(u: U, v: V): U {

Some files were not shown because too many files have changed in this diff Show More