From 46ce9a6946a239d678c14cc557cbfe4002e0a514 Mon Sep 17 00:00:00 2001 From: Zoltan Polgar Date: Sun, 28 May 2017 20:01:17 +0200 Subject: [PATCH] JS: Avoid declaration skeleton body generation in case of external class or object --- .../callableBuilder/CallableBuilder.kt | 6 ++++++ .../funPlacementOnCompanionObjectJsRuntime.kt | 10 ++++++++++ ...lacementOnCompanionObjectJsRuntime.kt.after | 12 ++++++++++++ .../funPlacementOnExternalClassJsRuntime.kt | 8 ++++++++ ...nPlacementOnExternalClassJsRuntime.kt.after | 10 ++++++++++ .../funPlacementOnExternalObjectJsRuntime.kt | 8 ++++++++ ...PlacementOnExternalObjectJsRuntime.kt.after | 10 ++++++++++ .../idea/quickfix/QuickFixTestGenerated.java | 18 ++++++++++++++++++ 8 files changed, 82 insertions(+) create mode 100644 idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt create mode 100644 idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt.after create mode 100644 idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt create mode 100644 idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt.after create mode 100644 idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt create mode 100644 idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index 4f3bce2a224..96a54d857dd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -459,7 +459,13 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { val body = when { callableInfo.kind == CallableKind.SECONDARY_CONSTRUCTOR -> "" callableInfo.isAbstract -> "" + containingElement is KtClass && containingElement.hasModifier(KtTokens.EXTERNAL_KEYWORD) -> "" + containingElement is KtObjectDeclaration && containingElement.hasModifier(KtTokens.EXTERNAL_KEYWORD) -> "" + containingElement is KtObjectDeclaration && containingElement.isCompanion() + && containingElement.parent.parent is KtClass + && (containingElement.parent.parent as KtClass).hasModifier(KtTokens.EXTERNAL_KEYWORD) -> "" else -> "{}" + } @Suppress("USELESS_CAST") // KT-10755 if (callableInfo is FunctionInfo) { diff --git a/idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt b/idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt new file mode 100644 index 00000000000..ebbb10e7407 --- /dev/null +++ b/idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt @@ -0,0 +1,10 @@ +// "Create member function 'A.Companion.foo'" "true" +// JS + +external class A { + companion object +} + +fun test() { + A.foo() +} diff --git a/idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt.after b/idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt.after new file mode 100644 index 00000000000..d3ae5f45905 --- /dev/null +++ b/idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt.after @@ -0,0 +1,12 @@ +// "Create member function 'A.Companion.foo'" "true" +// JS + +external class A { + companion object { + fun foo() + } +} + +fun test() { + A.foo() +} diff --git a/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt b/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt new file mode 100644 index 00000000000..a29f239c1ae --- /dev/null +++ b/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt @@ -0,0 +1,8 @@ +// "Create member function 'A.foo'" "true" +// JS + +external class A + +fun test() { + A().foo() +} diff --git a/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt.after b/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt.after new file mode 100644 index 00000000000..5955ab553c0 --- /dev/null +++ b/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt.after @@ -0,0 +1,10 @@ +// "Create member function 'A.foo'" "true" +// JS + +external class A { + fun foo() +} + +fun test() { + A().foo() +} diff --git a/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt b/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt new file mode 100644 index 00000000000..0e4a725a437 --- /dev/null +++ b/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt @@ -0,0 +1,8 @@ +// "Create member function 'A.foo'" "true" +// JS + +external object A + +fun test() { + A.foo() +} diff --git a/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt.after b/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt.after new file mode 100644 index 00000000000..89cea8fe42f --- /dev/null +++ b/idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt.after @@ -0,0 +1,10 @@ +// "Create member function 'A.foo'" "true" +// JS + +external object A { + fun foo() +} + +fun test() { + A.foo() +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index eca5ff02a53..693bd316537 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -6529,6 +6529,24 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("funPlacementOnCompanionObjectJsRuntime.kt") + public void testFunPlacementOnCompanionObjectJsRuntime() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/migration/jsExternal/funPlacementOnCompanionObjectJsRuntime.kt"); + doTest(fileName); + } + + @TestMetadata("funPlacementOnExternalClassJsRuntime.kt") + public void testFunPlacementOnExternalClassJsRuntime() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalClassJsRuntime.kt"); + doTest(fileName); + } + + @TestMetadata("funPlacementOnExternalObjectJsRuntime.kt") + public void testFunPlacementOnExternalObjectJsRuntime() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/migration/jsExternal/funPlacementOnExternalObjectJsRuntime.kt"); + doTest(fileName); + } + @TestMetadata("nativeExtensionFunBlockBodyJsRuntime.kt") public void testNativeExtensionFunBlockBodyJsRuntime() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/migration/jsExternal/nativeExtensionFunBlockBodyJsRuntime.kt");