Create from Usage: Do not add bodies to expect class members

#KT-21122 Fixed
This commit is contained in:
Alexey Sedunov
2017-11-20 12:49:49 +03:00
parent 063b4b6c18
commit 820ade41ed
14 changed files with 83 additions and 1 deletions
@@ -463,6 +463,10 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
else if (isExtension) "private "
else ""
val isExpectClassMember by lazy {
containingElement is KtClassOrObject && (containingElement.resolveToDescriptorIfAny() as? ClassDescriptor)?.isExpect ?: false
}
val declaration: KtNamedDeclaration = when (callableInfo.kind) {
CallableKind.FUNCTION, CallableKind.SECONDARY_CONSTRUCTOR -> {
val body = when {
@@ -473,6 +477,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
containingElement is KtObjectDeclaration && containingElement.isCompanion()
&& containingElement.parent.parent is KtClass
&& (containingElement.parent.parent as KtClass).hasModifier(KtTokens.EXTERNAL_KEYWORD) -> ""
isExpectClassMember -> ""
else -> "{}"
}
@@ -517,7 +522,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
CallableKind.PROPERTY -> {
val isVar = (callableInfo as PropertyInfo).writable
val valVar = if (isVar) "var" else "val"
val accessors = if (isExtension) {
val accessors = if (isExtension && !isExpectClassMember) {
buildString {
append("\nget() {}")
if (isVar) {
@@ -0,0 +1,8 @@
// "Create member function 'Foo.foo'" "true"
// ERROR: Unresolved reference: foo
expect class Foo
fun test(f: Foo) {
f.<caret>foo("a", 1)
}
@@ -0,0 +1,10 @@
// "Create member function 'Foo.foo'" "true"
// ERROR: Unresolved reference: foo
expect class Foo {
fun foo(s: String, i: Int)
}
fun test(f: Foo) {
f.foo("a", 1)
}
@@ -0,0 +1 @@
actual class Foo
@@ -0,0 +1 @@
actual class Foo
@@ -0,0 +1,12 @@
// "Create member property 'Foo.foo'" "true"
// ERROR: Unresolved reference: foo
expect class Foo
fun test(f: Foo) {
takeInt(f.<caret>foo)
}
fun takeInt(n: Int) {
}
@@ -0,0 +1,14 @@
// "Create member property 'Foo.foo'" "true"
// ERROR: Unresolved reference: foo
expect class Foo {
val foo: Int
}
fun test(f: Foo) {
takeInt(f.foo)
}
fun takeInt(n: Int) {
}
@@ -0,0 +1 @@
actual class Foo
@@ -0,0 +1 @@
actual class Foo
@@ -0,0 +1,8 @@
// "Create member property 'Foo.foo'" "true"
// ERROR: Unresolved reference: foo
expect class Foo
fun test(f: Foo) {
f.<caret>foo = 1
}
@@ -0,0 +1,10 @@
// "Create member property 'Foo.foo'" "true"
// ERROR: Unresolved reference: foo
expect class Foo {
var foo: Int
}
fun test(f: Foo) {
f.foo = 1
}
@@ -0,0 +1 @@
actual class Foo
@@ -0,0 +1 @@
actual class Foo
@@ -249,4 +249,13 @@ class QuickFixMultiModuleTest : AbstractQuickFixMultiModuleTest() {
@Test
fun testAddActualToTopLevelMember() = doMultiPlatformTest()
@Test
fun testCreateFunInExpectClass() = doMultiPlatformTest()
@Test
fun testCreateValInExpectClass() = doMultiPlatformTest()
@Test
fun testCreateVarInExpectClass() = doMultiPlatformTest()
}