Extract Function: Allow to combine throws with other exit points
This commit is contained in:
+2
-3
@@ -169,11 +169,10 @@ private fun List<Instruction>.analyzeControlFlow(
|
||||
val element = it.getElement()
|
||||
if (element is JetReturnExpression
|
||||
|| element is JetBreakExpression
|
||||
|| element is JetContinueExpression
|
||||
|| element is JetThrowExpression) {
|
||||
|| element is JetContinueExpression) {
|
||||
jumpExits.add(it)
|
||||
}
|
||||
else {
|
||||
else if (element !is JetThrowExpression) {
|
||||
defaultExits.add(it)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
// NEXT_SIBLING:
|
||||
fun foo(a: Int): Int {
|
||||
val b: Int = 1
|
||||
for (n in 1..b) {
|
||||
<selection>if (a > 0) throw Exception("")
|
||||
if (a + b > 0) break
|
||||
println(a - b)</selection>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// NEXT_SIBLING:
|
||||
fun b(a: Int, b: Int): Boolean {
|
||||
if (a > 0) throw Exception("")
|
||||
if (a + b > 0) return true
|
||||
println(a - b)
|
||||
return false
|
||||
}
|
||||
|
||||
fun foo(a: Int): Int {
|
||||
val b: Int = 1
|
||||
for (n in 1..b) {
|
||||
if (b(a, b)) break
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// NEXT_SIBLING:
|
||||
fun foo(a: Int): Int {
|
||||
val b: Int = 1
|
||||
for (n in 1..b) {
|
||||
<selection>if (a > 0) throw Exception("")
|
||||
if (a + b > 0) continue
|
||||
println(a - b)</selection>
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// NEXT_SIBLING:
|
||||
fun b(a: Int, b: Int): Boolean {
|
||||
if (a > 0) throw Exception("")
|
||||
if (a + b > 0) return true
|
||||
println(a - b)
|
||||
return false
|
||||
}
|
||||
|
||||
fun foo(a: Int): Int {
|
||||
val b: Int = 1
|
||||
for (n in 1..b) {
|
||||
if (b(a, b)) continue
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// NEXT_SIBLING:
|
||||
fun i(a: Int, b: Int): Int {
|
||||
return if (a > 0) throw Exception("") else a + b
|
||||
}
|
||||
|
||||
fun foo(a: Int): Int {
|
||||
val b: Int = 1
|
||||
|
||||
val t = i(a, b)
|
||||
return t
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// NEXT_SIBLING:
|
||||
fun foo(a: Int) {
|
||||
val b: Int = 1
|
||||
|
||||
<selection>if (a > 0) throw Exception("")
|
||||
if (b + a > 0) return
|
||||
println(a - b)</selection>
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// NEXT_SIBLING:
|
||||
fun b(a: Int, b: Int): Boolean {
|
||||
if (a > 0) throw Exception("")
|
||||
if (b + a > 0) return true
|
||||
println(a - b)
|
||||
return false
|
||||
}
|
||||
|
||||
fun foo(a: Int) {
|
||||
val b: Int = 1
|
||||
|
||||
if (b(a, b)) return
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// NEXT_SIBLING:
|
||||
fun foo(a: Int): Int {
|
||||
val b: Int = 1
|
||||
|
||||
<selection>if (a > 0) throw Exception("") else return a + b
|
||||
return a - b</selection>
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// NEXT_SIBLING:
|
||||
fun i(a: Int, b: Int): Int {
|
||||
if (a > 0) throw Exception("") else return a + b
|
||||
return a - b
|
||||
}
|
||||
|
||||
fun foo(a: Int): Int {
|
||||
val b: Int = 1
|
||||
|
||||
return i(a, b)
|
||||
}
|
||||
-1
@@ -1 +0,0 @@
|
||||
Selected code fragment has multiple exit points
|
||||
+35
-6
@@ -241,7 +241,7 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction/controlFlow")
|
||||
@InnerTestClasses({ControlFlow.ConditionalJumps.class, ControlFlow.Default.class, ControlFlow.DefiniteReturns.class, ControlFlow.EvaluateExpression.class, ControlFlow.OutputValues.class, ControlFlow.Unextractable.class})
|
||||
@InnerTestClasses({ControlFlow.ConditionalJumps.class, ControlFlow.Default.class, ControlFlow.DefiniteReturns.class, ControlFlow.EvaluateExpression.class, ControlFlow.OutputValues.class, ControlFlow.Throws.class, ControlFlow.Unextractable.class})
|
||||
public static class ControlFlow extends AbstractJetExtractionTest {
|
||||
public void testAllFilesPresentInControlFlow() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
@@ -412,6 +412,39 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction/controlFlow/throws")
|
||||
public static class Throws extends AbstractJetExtractionTest {
|
||||
public void testAllFilesPresentInThrows() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow/throws"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("breakWithThrow.kt")
|
||||
public void testBreakWithThrow() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/throws/breakWithThrow.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("continueWithThrow.kt")
|
||||
public void testContinueWithThrow() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/throws/continueWithThrow.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("evalExpressionWithThrow.kt")
|
||||
public void testEvalExpressionWithThrow() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/throws/evalExpressionWithThrow.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonValuedReturnWithThrow.kt")
|
||||
public void testNonValuedReturnWithThrow() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/throws/nonValuedReturnWithThrow.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("returnWithThrow.kt")
|
||||
public void testReturnWithThrow() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/throws/returnWithThrow.kt");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/refactoring/extractFunction/controlFlow/unextractable")
|
||||
public static class Unextractable extends AbstractJetExtractionTest {
|
||||
public void testAllFilesPresentInUnextractable() throws Exception {
|
||||
@@ -428,11 +461,6 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithReturn.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("evalExpressionWithThrow.kt")
|
||||
public void testEvalExpressionWithThrow() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithThrow.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jumpsAndReturns.kt")
|
||||
public void testJumpsAndReturns() throws Exception {
|
||||
doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/jumpsAndReturns.kt");
|
||||
@@ -478,6 +506,7 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
suite.addTestSuite(DefiniteReturns.class);
|
||||
suite.addTestSuite(EvaluateExpression.class);
|
||||
suite.addTestSuite(OutputValues.class);
|
||||
suite.addTestSuite(Throws.class);
|
||||
suite.addTestSuite(Unextractable.class);
|
||||
return suite;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user