Extract Function: Support extraction of expressions in delegation
specifiers
This commit is contained in:
+4
-2
@@ -65,6 +65,7 @@ import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.TraversalOrder
|
||||
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getTargetFunctionDescriptor
|
||||
import com.intellij.psi.PsiWhiteSpace
|
||||
import org.jetbrains.jet.lang.resolve.OverridingUtil
|
||||
import org.jetbrains.jet.lang.psi.psiUtil.isAncestor
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils
|
||||
|
||||
private val DEFAULT_FUNCTION_NAME = "myFun"
|
||||
@@ -541,7 +542,7 @@ fun ExtractionData.performAnalysis(): AnalysisResult {
|
||||
|
||||
val noContainerError = AnalysisResult(null, Status.CRITICAL_ERROR, listOf(ErrorMessage.NO_CONTAINER))
|
||||
|
||||
val commonParent = PsiTreeUtil.findCommonParent(originalElements)!!
|
||||
val commonParent = PsiTreeUtil.findCommonParent(originalElements) as JetElement
|
||||
|
||||
val enclosingDeclaration = commonParent.getParentByType(javaClass<JetDeclaration>(), true)
|
||||
val bodyElement = when (enclosingDeclaration) {
|
||||
@@ -550,7 +551,8 @@ fun ExtractionData.performAnalysis(): AnalysisResult {
|
||||
is JetParameter -> enclosingDeclaration.getDefaultValue()
|
||||
is JetClassInitializer -> enclosingDeclaration.getBody()
|
||||
is JetClass -> {
|
||||
if (commonParent.isInsideOf(enclosingDeclaration.getDelegationSpecifiers())) enclosingDeclaration else return noContainerError
|
||||
val delegationSpecifierList = enclosingDeclaration.getDelegationSpecifierList()
|
||||
if (delegationSpecifierList.isAncestor(commonParent)) commonParent else return noContainerError
|
||||
}
|
||||
else -> return noContainerError
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// PARAM_TYPES: kotlin.Int
|
||||
// PARAM_TYPES: kotlin.Int
|
||||
trait T
|
||||
|
||||
class A(a: Int, b: Int): T
|
||||
|
||||
class B(a: Int, b: Int): T by A(<selection>a + b</selection>, a - b)
|
||||
@@ -0,0 +1,11 @@
|
||||
// PARAM_TYPES: kotlin.Int
|
||||
// PARAM_TYPES: kotlin.Int
|
||||
trait T
|
||||
|
||||
class A(a: Int, b: Int): T
|
||||
|
||||
class B(a: Int, b: Int): T by A(i(a, b), a - b)
|
||||
|
||||
fun i(a: Int, b: Int): Int {
|
||||
return a + b
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// PARAM_TYPES: T
|
||||
trait T
|
||||
|
||||
class A(a: Int, b: Int): T
|
||||
|
||||
class B(t: T): T by <selection>t</selection>
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// PARAM_TYPES: T
|
||||
trait T
|
||||
|
||||
class A(a: Int, b: Int): T
|
||||
|
||||
class B(t: T): T by t(t)
|
||||
|
||||
fun t(t: T): T {
|
||||
return t
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// PARAM_TYPES: kotlin.Int
|
||||
// PARAM_TYPES: kotlin.Int
|
||||
open class A(a: Int, b: Int)
|
||||
|
||||
class B(a: Int, b: Int): A(<selection>a + b</selection>, a - b)
|
||||
@@ -0,0 +1,9 @@
|
||||
// PARAM_TYPES: kotlin.Int
|
||||
// PARAM_TYPES: kotlin.Int
|
||||
open class A(a: Int, b: Int)
|
||||
|
||||
class B(a: Int, b: Int): A(i(a, b), a - b)
|
||||
|
||||
fun i(a: Int, b: Int): Int {
|
||||
return a + b
|
||||
}
|
||||
+25
-1
@@ -208,7 +208,7 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction")
|
||||
@InnerTestClasses({ExtractFunction.Basic.class, ExtractFunction.ControlFlow.class, ExtractFunction.DefaultContainer.class, ExtractFunction.Initializers.class, ExtractFunction.Parameters.class, ExtractFunction.TypeParameters.class})
|
||||
@InnerTestClasses({ExtractFunction.Basic.class, ExtractFunction.ControlFlow.class, ExtractFunction.DefaultContainer.class, ExtractFunction.Delegation.class, ExtractFunction.Initializers.class, ExtractFunction.Parameters.class, ExtractFunction.TypeParameters.class})
|
||||
public static class ExtractFunction extends AbstractJetExtractionTest {
|
||||
public void testAllFilesPresentInExtractFunction() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
@@ -687,6 +687,29 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction/delegation")
|
||||
public static class Delegation extends AbstractJetExtractionTest {
|
||||
public void testAllFilesPresentInDelegation() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/delegation"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("delegationByExpression.kt")
|
||||
public void testDelegationByExpression() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/delegation/delegationByExpression.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("delegationByExpressionFull.kt")
|
||||
public void testDelegationByExpressionFull() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/delegation/delegationByExpressionFull.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("delegationBySuperCall.kt")
|
||||
public void testDelegationBySuperCall() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/delegation/delegationBySuperCall.kt");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction/initializers")
|
||||
@InnerTestClasses({Initializers.Accessors.class, Initializers.Classes.class, Initializers.Functions.class, Initializers.Properties.class})
|
||||
public static class Initializers extends AbstractJetExtractionTest {
|
||||
@@ -1204,6 +1227,7 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
suite.addTestSuite(Basic.class);
|
||||
suite.addTest(ControlFlow.innerSuite());
|
||||
suite.addTestSuite(DefaultContainer.class);
|
||||
suite.addTestSuite(Delegation.class);
|
||||
suite.addTest(Initializers.innerSuite());
|
||||
suite.addTest(Parameters.innerSuite());
|
||||
suite.addTestSuite(TypeParameters.class);
|
||||
|
||||
Reference in New Issue
Block a user