Create from Usage: Show target class name in the text of "Create member" quick fix

(cherry picked from commit a51d3fc)
This commit is contained in:
Alexey Sedunov
2016-07-15 00:52:26 +03:00
parent 82bdd1e42b
commit a1e86e8bfa
220 changed files with 234 additions and 229 deletions
@@ -95,19 +95,24 @@ abstract class CreateCallableFromUsageFixBase<E : KtElement>(
if (it.name.isNotEmpty()) {
append(" '")
if (isExtension) {
val callableBuilder =
CallableBuilderConfiguration(callableInfos, element, isExtension = isExtension)
.createBuilder()
val receiverType = callableBuilder
.computeTypeCandidates(callableInfos.first().receiverTypeInfo)
.firstOrNull()
?.theType
if (receiverType != null) {
val callableBuilder =
CallableBuilderConfiguration(callableInfos, element, isExtension = isExtension)
.createBuilder()
val receiverType = callableBuilder
.computeTypeCandidates(callableInfos.first().receiverTypeInfo)
.firstOrNull()
?.theType
if (receiverType != null) {
if (isExtension) {
val receiverTypeText = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(receiverType)
val isFunctionType = receiverType.constructor.declarationDescriptor is FunctionClassDescriptor
append(if (isFunctionType) "($receiverTypeText)" else receiverTypeText).append('.')
}
else {
receiverType.constructor.declarationDescriptor?.let {
append(IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderClassifierName(it)).append('.')
}
}
}
append("${it.name}'")
@@ -1,6 +1,6 @@
// "Import" "false"
// ACTION: Create extension function 'H?.inc'
// ACTION: Create member function 'inc'
// ACTION: Create member function 'H.inc'
// ACTION: Replace overloaded operator with function call
// ERROR: Unresolved reference: ++
@@ -3,7 +3,7 @@
// ERROR: Unresolved reference: foo()["str"]
// ERROR: No get method providing array access
// ACTION: Create extension function 'Some.get'
// ACTION: Create member function 'get'
// ACTION: Create member function 'Some.get'
// ACTION: Replace overloaded operator with function call
@@ -3,7 +3,7 @@
// ERROR: Unresolved reference: foo()["str"]
// ERROR: No set method providing array access
// ACTION: Create extension function 'Some.set'
// ACTION: Create member function 'set'
// ACTION: Create member function 'Some.set'
// ACTION: Replace overloaded operator with function call
@@ -3,7 +3,7 @@
// ERROR: Unresolved reference: foo()["str"]
// ERROR: No get method providing array access
// ACTION: Create extension function 'Some.get'
// ACTION: Create member function 'get'
// ACTION: Create member function 'Some.get'
// ACTION: Replace overloaded operator with function call
@@ -1,7 +1,7 @@
// "Import" "false"
// ERROR: Unresolved reference: foo
// ACTION: Create extension function 'H.foo'
// ACTION: Create member function 'foo'
// ACTION: Create member function 'H.foo'
// ACTION: Replace infix call with ordinary call
package h
@@ -2,7 +2,7 @@
// "Import" "false"
// ERROR: Expression 'Some()' of type 'Some' cannot be invoked as a function. The function 'invoke()' is not found
// ACTION: Create extension function 'Some.invoke'
// ACTION: Create member function 'invoke'
// ACTION: Create member function 'Some.invoke'
package testing
@@ -2,7 +2,7 @@
// "Import" "false"
// ERROR: Destructuring declaration initializer of type Some must have a 'component1()' function
// ACTION: Create extension function 'Some.component1'
// ACTION: Create member function 'component1'
// ACTION: Create member function 'Some.component1'
package testing
@@ -1,6 +1,6 @@
// "Create class 'A'" "false"
// ACTION: Create extension property 'X.A'
// ACTION: Create member property 'A'
// ACTION: Create member property 'X.A'
// ACTION: Create property 'A' as constructor parameter
// ACTION: Rename reference
// ERROR: Unresolved reference: A
@@ -1,5 +1,5 @@
// "Create enum constant 'A'" "false"
// ACTION: Create member property 'A'
// ACTION: Create member property 'J.A'
// ACTION: Rename reference
// ERROR: Unresolved reference: A
fun foo() = J.<caret>A
@@ -1,6 +1,6 @@
// "Create enum constant 'A'" "false"
// ACTION: Convert to block body
// ACTION: Create member property 'A'
// ACTION: Create member property 'J.A'
// ACTION: Rename reference
// ERROR: Unresolved reference: A
internal fun foo(): J = J.<caret>A
@@ -1,5 +1,5 @@
// "Create enum constant 'A'" "false"
// ACTION: Create member property 'A'
// ACTION: Create member property 'J.A'
// ACTION: Rename reference
// ERROR: Unresolved reference: A
fun foo() = J.<caret>A
@@ -1,6 +1,6 @@
// "Create enum constant 'A'" "false"
// ACTION: Convert to block body
// ACTION: Create member property 'A'
// ACTION: Create member property 'E.A'
// ACTION: Rename reference
// ERROR: Unresolved reference: A
internal fun foo(): X = E.<caret>A
@@ -1,6 +1,6 @@
// "Create enum constant 'A'" "false"
// ACTION: Create extension property 'X.A'
// ACTION: Create member property 'A'
// ACTION: Create member property 'X.A'
// ACTION: Create property 'A' as constructor parameter
// ACTION: Rename reference
// ERROR: Unresolved reference: A
@@ -1,5 +1,5 @@
// "Create object 'A'" "false"
// ACTION: Create member property 'A'
// ACTION: Create member property 'J.A'
// ACTION: Rename reference
// ERROR: Unresolved reference: A
fun foo() = J.<caret>A
@@ -1,6 +1,6 @@
// "Create object 'A'" "false"
// ACTION: Create extension property 'X.A'
// ACTION: Create member property 'A'
// ACTION: Create member property 'X.A'
// ACTION: Create property 'A' as constructor parameter
// ACTION: Rename reference
// ERROR: Unresolved reference: A
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
infix fun foo(t: T): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'compareTo'" "true"
// "Create member function 'A.compareTo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'compareTo'" "true"
// "Create member function 'A.compareTo'" "true"
class A<T>(val n: T) {
infix operator fun compareTo(t: T): Int {
@@ -1,4 +1,4 @@
// "Create member function 'contains'" "true"
// "Create member function 'A.contains'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'contains'" "true"
// "Create member function 'A.contains'" "true"
class A<T>(val n: T) {
infix operator fun contains(t: T): Boolean {
@@ -1,4 +1,4 @@
// "Create member function 'compareTo'" "true"
// "Create member function 'A.compareTo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'compareTo'" "true"
// "Create member function 'A.compareTo'" "true"
class A<T>(val n: T) {
infix operator fun compareTo(t: T): Int {
@@ -1,4 +1,4 @@
// "Create member function 'contains'" "true"
// "Create member function 'A.contains'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'contains'" "true"
// "Create member function 'A.contains'" "true"
class A<T>(val n: T) {
infix operator fun contains(t: T): Boolean {
@@ -1,4 +1,4 @@
// "Create member function 'plusAssign'" "true"
// "Create member function 'A.plusAssign'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'plusAssign'" "true"
// "Create member function 'A.plusAssign'" "true"
class A<T>(val n: T) {
infix operator fun plusAssign(t: T) {
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T) {
operator fun unaryPlus(): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T) {
operator fun unaryPlus(): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T) {
infix operator fun plus(t: T): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T) {
fun plus(i: Int, s: String): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T) {
fun plus(i: Int, s: String): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T) {
infix operator fun plus(t: T): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'plus'" "true"
// "Create member function 'A.plus'" "true"
class A<T>(val n: T) {
infix operator fun plus(i: Int): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'contains'" "true"
// "Create member function 'A.contains'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'contains'" "true"
// "Create member function 'A.contains'" "true"
class A<T>(val n: T) {
infix operator fun contains(t: T): Boolean {
@@ -1,4 +1,4 @@
// "Create member function 'contains'" "true"
// "Create member function 'A.contains'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'contains'" "true"
// "Create member function 'A.contains'" "true"
class A<T>(val n: T) {
infix operator fun contains(t: T): Boolean {
@@ -1,7 +1,7 @@
// "Create abstract function 'foo'" "false"
// ACTION: Convert to expression body
// ACTION: Create extension function 'B.foo'
// ACTION: Create member function 'foo'
// ACTION: Create member function 'B.foo'
// ACTION: Rename reference
// ERROR: Unresolved reference: foo
abstract class A {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(t: T, s: String, function: (T) -> T): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(function: (T) -> T): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'C.foo'" "true"
class Settings
fun isModified(settings: Settings, c: C) = c.<caret>foo(settings)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'C.foo'" "true"
class Settings
fun isModified(settings: Settings, c: C) = c.foo(settings)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(a: Int): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(a: Int): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(i: Int, s: String): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(i: Int, s: String): A<T> = throw Exception()
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.Companion.foo'" "true"
class A<T>(val n: T) {
companion object {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.Companion.foo'" "true"
class A<T>(val n: T) {
companion object {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
// ERROR: Unresolved reference: foo
internal fun test(a: A): Int? {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
// ERROR: Unresolved reference: foo
internal fun test(a: A): Int? {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
// ERROR: Unresolved reference: foo
fun test(): Int? {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
// ERROR: Unresolved reference: foo
fun test(): Int? {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'T.foo'" "true"
interface T
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'T.foo'" "true"
interface T {
fun foo(s: String, i: Int): Boolean
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
object A
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
object A {
fun foo(i: Int): Int {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(t: T): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'F.foo'" "true"
class F {
fun bar() {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'F.foo'" "true"
class F {
fun bar() {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(u: T): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(abc: T, ghi: A<T>, def: String): A<T> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(t: T?): A<Int> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(t: T): A<T>? {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(t: T): A<String> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
// ERROR: Unresolved reference: foo
fun test(): Int {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
// ERROR: Unresolved reference: foo
fun test(): Int {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
// ERROR: Type mismatch: inferred type is A<Int> but Int was expected
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
// ERROR: Type mismatch: inferred type is A<Int> but Int was expected
class A<T>(val n: T) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A {
fun foo(): String {
@@ -1,5 +1,5 @@
// "Create extension function 'foo'" "false"
// ACTION: Create member function 'foo'
// "Create extension function 'J.foo'" "false"
// ACTION: Create member function 'J.foo'
// ACTION: Rename reference
// ERROR: Unresolved reference: foo
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'J.foo'" "true"
// ERROR: Unresolved reference: foo
fun test() {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'J.foo'" "true"
// ERROR: Unresolved reference: foo
fun test() {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'C.foo'" "true"
class SetOptions
fun isModified(setOptions: SetOptions, c: C) = c.<caret>foo(setOptions)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'C.foo'" "true"
class SetOptions
fun isModified(setOptions: SetOptions, c: C) = c.foo(setOptions)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun test(): A<Int> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun test(): A<Int> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T)
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
fun foo(i: Int, s: String): A<Int> {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.B.foo'" "true"
class A<T>(val n: T) {
inner class B<U>(val m: U) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.B.foo'" "true"
class A<T>(val n: T) {
inner class B<U>(val m: U) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
inner class B<U>(val m: U) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'A.foo'" "true"
class A<T>(val n: T) {
inner class B<U>(val m: U) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'B.foo'" "true"
class B<T>(val t: T) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'B.foo'" "true"
class B<T>(val t: T) {
fun <U, V> foo(u: U, v: V): U {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'B.foo'" "true"
class B<T>(val t: T) {
@@ -1,4 +1,4 @@
// "Create member function 'foo'" "true"
// "Create member function 'B.foo'" "true"
class B<T>(val t: T) {
fun <U> foo(i: Int, u: U): Int {

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