From 1202e624ced71a42c77de175ec8c468fe1ae6a67 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 5 Mar 2015 13:39:23 +0300 Subject: [PATCH] Extraction Engine: Assume internal visibility for trait members --- .../extractionEngine/extractableAnalysisUtil.kt | 11 ++++++++++- .../extractFunction/basic/traitFunction.kt | 5 +++++ .../extractFunction/basic/traitFunction.kt.after | 9 +++++++++ .../extractWithGetterToTrait.kt.after | 2 +- .../introduce/JetExtractionTestGenerated.java | 6 ++++++ 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 idea/testData/refactoring/extractFunction/basic/traitFunction.kt create mode 100644 idea/testData/refactoring/extractFunction/basic/traitFunction.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt index b7a080a46dd..e5272f9c1db 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt @@ -736,6 +736,15 @@ fun ExtractionData.isVisibilityApplicable(): Boolean { } } +fun ExtractionData.getDefaultVisibility(): String { + if (!isVisibilityApplicable()) return "" + + val parent = targetSibling.getStrictParentOfType() + if (parent is JetClass && parent.isTrait()) return "" + + return "private" +} + fun ExtractionData.performAnalysis(): AnalysisResult { if (originalElements.isEmpty()) { return AnalysisResult(null, Status.CRITICAL_ERROR, listOf(ErrorMessage.NO_EXPRESSION)) @@ -824,7 +833,7 @@ fun ExtractionData.performAnalysis(): AnalysisResult { this, bindingContext, functionNames, - if (isVisibilityApplicable()) "private" else "", + getDefaultVisibility(), adjustedParameters.sortBy { it.name }, receiverParameter, paramsInfo.typeParameters.sortBy { it.originalDeclaration.getName()!! }, diff --git a/idea/testData/refactoring/extractFunction/basic/traitFunction.kt b/idea/testData/refactoring/extractFunction/basic/traitFunction.kt new file mode 100644 index 00000000000..ffb146c5aa6 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/traitFunction.kt @@ -0,0 +1,5 @@ +trait T{ + fun foo(): Int { + return 1 + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/traitFunction.kt.after b/idea/testData/refactoring/extractFunction/basic/traitFunction.kt.after new file mode 100644 index 00000000000..8bf470fe2dc --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/traitFunction.kt.after @@ -0,0 +1,9 @@ +trait T{ + fun foo(): Int { + return i() + } + + fun i(): Int { + return 1 + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceProperty/extractWithGetterToTrait.kt.after b/idea/testData/refactoring/introduceProperty/extractWithGetterToTrait.kt.after index d03952a6543..f0047910bff 100644 --- a/idea/testData/refactoring/introduceProperty/extractWithGetterToTrait.kt.after +++ b/idea/testData/refactoring/introduceProperty/extractWithGetterToTrait.kt.after @@ -1,6 +1,6 @@ // EXTRACTION_TARGET: property with getter trait T { - private val i: Int + val i: Int get() { return 1 } diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java index fdb9e5ee677..215de5562bb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java @@ -483,6 +483,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/refInReturn.kt"); doExtractFunctionTest(fileName); } + + @TestMetadata("traitFunction.kt") + public void testTraitFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/traitFunction.kt"); + doExtractFunctionTest(fileName); + } } @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow")