From dc57887a4d28f7bd52f8e43b31e7dc2fa4e1d706 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Mon, 30 Jul 2018 11:02:18 +0900 Subject: [PATCH] Create function quick fix: fix visibility from inline method #KT-25228 Fixed --- .../CreateCallableFromCallActionFactory.kt | 12 ++++++++++- .../call/funInInlineInternalFun.kt | 6 ++++++ .../call/funInInlineInternalFun.kt.after | 10 ++++++++++ .../call/funInInlinePrivateFun.kt | 6 ++++++ .../call/funInInlinePrivateFun.kt.after | 10 ++++++++++ .../call/funInInlineProtectedFun.kt | 6 ++++++ .../call/funInInlineProtectedFun.kt.after | 10 ++++++++++ .../call/funInInlinePublicFun.kt | 6 ++++++ .../call/funInInlinePublicFun.kt.after | 10 ++++++++++ .../idea/quickfix/QuickFixTestGenerated.java | 20 +++++++++++++++++++ 10 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt.after create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt.after create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt.after create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromCallActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromCallActionFactory.kt index 2d97c7dd228..493bca72ec8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromCallActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromCallActionFactory.kt @@ -275,7 +275,17 @@ sealed class CreateCallableFromCallActionFactory( } else { TypeInfo(fullCallExpression, Variance.OUT_VARIANCE) } - return FunctionInfo(name, receiverType, returnType, possibleContainers, parameters, typeParameters) + val parentFunction = expression.getStrictParentOfType() + val modifierList = if (parentFunction?.hasModifier(KtTokens.INLINE_KEYWORD) == true) { + when { + parentFunction.isPublic -> KtPsiFactory(expression).createModifierList(KtTokens.PUBLIC_KEYWORD) + parentFunction.isProtected() -> KtPsiFactory(expression).createModifierList(KtTokens.PROTECTED_KEYWORD) + else -> null + } + } else { + null + } + return FunctionInfo(name, receiverType, returnType, possibleContainers, parameters, typeParameters, modifierList = modifierList) } object Default : Function() diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt new file mode 100644 index 00000000000..a6aea03a718 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt @@ -0,0 +1,6 @@ +// "Create function 'g'" "true" +class C { + internal inline fun f() { + g() + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt.after new file mode 100644 index 00000000000..4fc99604501 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt.after @@ -0,0 +1,10 @@ +// "Create function 'g'" "true" +class C { + internal inline fun f() { + g() + } + + private fun g() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt new file mode 100644 index 00000000000..2589478c895 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt @@ -0,0 +1,6 @@ +// "Create function 'g'" "true" +class C { + private inline fun f() { + g() + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt.after new file mode 100644 index 00000000000..c358f5647da --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt.after @@ -0,0 +1,10 @@ +// "Create function 'g'" "true" +class C { + private inline fun f() { + g() + } + + private fun g() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt new file mode 100644 index 00000000000..7432276b144 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt @@ -0,0 +1,6 @@ +// "Create function 'g'" "true" +class C { + protected inline fun f() { + g() + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt.after new file mode 100644 index 00000000000..b318156d463 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt.after @@ -0,0 +1,10 @@ +// "Create function 'g'" "true" +class C { + protected inline fun f() { + g() + } + + protected fun g() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt new file mode 100644 index 00000000000..5bcaf090cba --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt @@ -0,0 +1,6 @@ +// "Create function 'g'" "true" +class C { + inline fun f() { + g() + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt.after new file mode 100644 index 00000000000..f74afbddc30 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt.after @@ -0,0 +1,10 @@ +// "Create function 'g'" "true" +class C { + inline fun f() { + g() + } + + fun g() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 08ca7ca156b..2815ae0b108 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -3101,6 +3101,26 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/createFromUsage/createFunction/call/funExtraArgs.kt"); } + @TestMetadata("funInInlineInternalFun.kt") + public void testFunInInlineInternalFun() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineInternalFun.kt"); + } + + @TestMetadata("funInInlinePrivateFun.kt") + public void testFunInInlinePrivateFun() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePrivateFun.kt"); + } + + @TestMetadata("funInInlineProtectedFun.kt") + public void testFunInInlineProtectedFun() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createFunction/call/funInInlineProtectedFun.kt"); + } + + @TestMetadata("funInInlinePublicFun.kt") + public void testFunInInlinePublicFun() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createFunction/call/funInInlinePublicFun.kt"); + } + @TestMetadata("funMissingArgs.kt") public void testFunMissingArgs() throws Exception { runTest("idea/testData/quickfix/createFromUsage/createFunction/call/funMissingArgs.kt");