From 5afa5de1d74fd1cbbc68604ca11cd84b86d7757e Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 9 Jul 2019 18:15:37 +0300 Subject: [PATCH] ReplaceWith: don't keep class literal & callable reference in inlining #KT-30197 Fixed --- .../org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt | 2 ++ .../argumentSideEffects/withLiteralAndReference.kt | 9 +++++++++ .../argumentSideEffects/withLiteralAndReference.kt.after | 9 +++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 4 files changed, 25 insertions(+) create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt index 82d188a1a5c..3a030708c55 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt @@ -333,6 +333,8 @@ class CodeInliner( usageCount ) else true is KtBinaryExpressionWithTypeRHS -> true + is KtClassLiteralExpression -> false + is KtCallableReferenceExpression -> false null -> false else -> true } diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt b/idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt new file mode 100644 index 00000000000..a44b5cf6c1f --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt @@ -0,0 +1,9 @@ +// "Replace with 'bar(y)'" "true" + +@Deprecated("", replaceWith = ReplaceWith("bar(y)")) +fun foo(x: Any, y: Any, z: Any) { +} +fun bar(y: Any) {} +fun main() { + foo(4::class, 42::dec, ::bar) +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt.after new file mode 100644 index 00000000000..db71bd50554 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt.after @@ -0,0 +1,9 @@ +// "Replace with 'bar(y)'" "true" + +@Deprecated("", replaceWith = ReplaceWith("bar(y)")) +fun foo(x: Any, y: Any, z: Any) { +} +fun bar(y: Any) {} +fun main() { + bar(42::dec) +} \ 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 9055cf543b2..c30789d6de9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -6065,6 +6065,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { public void testStringTemplateUsedTwice2() throws Exception { runTest("idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/stringTemplateUsedTwice2.kt"); } + + @TestMetadata("withLiteralAndReference.kt") + public void testWithLiteralAndReference() throws Exception { + runTest("idea/testData/quickfix/deprecatedSymbolUsage/argumentSideEffects/withLiteralAndReference.kt"); + } } @TestMetadata("idea/testData/quickfix/deprecatedSymbolUsage/classUsages")