Fix for KT-6202: Redundant and wrong linenumber after if/else condition
#KT-6202 Fixed
This commit is contained in:
@@ -403,7 +403,8 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
|
|
||||||
gen(elseExpression, asmType);
|
gen(elseExpression, asmType);
|
||||||
|
|
||||||
markLineNumber(expression);
|
markExpressionLineNumber(expression, isStatement);
|
||||||
|
|
||||||
v.mark(end);
|
v.mark(end);
|
||||||
|
|
||||||
return StackValue.onStack(asmType);
|
return StackValue.onStack(asmType);
|
||||||
@@ -1216,10 +1217,10 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
Label end = new Label();
|
Label end = new Label();
|
||||||
v.goTo(end);
|
v.goTo(end);
|
||||||
|
|
||||||
markLineNumber(ifExpression);
|
|
||||||
v.mark(elseLabel);
|
v.mark(elseLabel);
|
||||||
StackValue.putUnitInstance(v);
|
StackValue.putUnitInstance(v);
|
||||||
|
|
||||||
|
markLineNumber(ifExpression);
|
||||||
v.mark(end);
|
v.mark(end);
|
||||||
return StackValue.onStack(targetType);
|
return StackValue.onStack(targetType);
|
||||||
}
|
}
|
||||||
@@ -1546,6 +1547,12 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void markExpressionLineNumber(@NotNull JetElement element, boolean isStatement) {
|
||||||
|
if (!isStatement) {
|
||||||
|
markLineNumber(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void markLineNumber(@NotNull JetElement statement) {
|
public void markLineNumber(@NotNull JetElement statement) {
|
||||||
Document document = statement.getContainingFile().getViewProvider().getDocument();
|
Document document = statement.getContainingFile().getViewProvider().getDocument();
|
||||||
if (document != null) {
|
if (document != null) {
|
||||||
@@ -3609,7 +3616,7 @@ The "returned" value of try expression with no finally is either the last expres
|
|||||||
generateExceptionTable(defaultCatchStart, defaultCatchRegions, null);
|
generateExceptionTable(defaultCatchStart, defaultCatchRegions, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
markLineNumber(expression);
|
markExpressionLineNumber(expression, isStatement);
|
||||||
v.mark(end);
|
v.mark(end);
|
||||||
|
|
||||||
if (!isStatement) {
|
if (!isStatement) {
|
||||||
@@ -3822,7 +3829,7 @@ The "returned" value of try expression with no finally is either the last expres
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
markLineNumber(expression);
|
markExpressionLineNumber(expression, isStatement);
|
||||||
v.mark(end);
|
v.mark(end);
|
||||||
|
|
||||||
myFrameMap.leaveTemp(subjectType);
|
myFrameMap.leaveTemp(subjectType);
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ abstract public class SwitchCodegen {
|
|||||||
codegen.putUnitInstanceOntoStackForNonExhaustiveWhen(expression);
|
codegen.putUnitInstanceOntoStackForNonExhaustiveWhen(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
codegen.markLineNumber(expression);
|
codegen.markExpressionLineNumber(expression, isStatement);
|
||||||
v.mark(endLabel);
|
v.mark(endLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fun foo() {
|
||||||
|
if (0 < 1) {
|
||||||
|
System.out?.println()
|
||||||
|
} else {
|
||||||
|
System.out?.println()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 1 LINENUMBER 2
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
fun foo() {
|
||||||
|
if (0 < 1) {
|
||||||
|
System.out?.println()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 1 LINENUMBER 2
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fun foo() {
|
||||||
|
try {
|
||||||
|
System.out?.println()
|
||||||
|
} catch(e: Exception) {
|
||||||
|
System.out?.println()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 1 LINENUMBER 2
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fun foo() {
|
||||||
|
val p = 1
|
||||||
|
when (p) {
|
||||||
|
0 -> System.out?.println()
|
||||||
|
else -> System.out?.println()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 1 LINENUMBER 3
|
||||||
@@ -30,7 +30,7 @@ import java.util.regex.Pattern;
|
|||||||
@SuppressWarnings("all")
|
@SuppressWarnings("all")
|
||||||
@TestMetadata("compiler/testData/codegen/bytecodeText")
|
@TestMetadata("compiler/testData/codegen/bytecodeText")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@InnerTestClasses({BytecodeTextTestGenerated.BoxingOptimization.class, BytecodeTextTestGenerated.Constants.class, BytecodeTextTestGenerated.DirectInvoke.class, BytecodeTextTestGenerated.Inline.class, BytecodeTextTestGenerated.Statements.class, BytecodeTextTestGenerated.StoreStackBeforeInline.class, BytecodeTextTestGenerated.When.class, BytecodeTextTestGenerated.WhenEnumOptimization.class, BytecodeTextTestGenerated.WhenStringOptimization.class})
|
@InnerTestClasses({BytecodeTextTestGenerated.BoxingOptimization.class, BytecodeTextTestGenerated.Constants.class, BytecodeTextTestGenerated.DirectInvoke.class, BytecodeTextTestGenerated.Inline.class, BytecodeTextTestGenerated.LineNumbers.class, BytecodeTextTestGenerated.Statements.class, BytecodeTextTestGenerated.StoreStackBeforeInline.class, BytecodeTextTestGenerated.When.class, BytecodeTextTestGenerated.WhenEnumOptimization.class, BytecodeTextTestGenerated.WhenStringOptimization.class})
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
||||||
@TestMetadata("accessorForProtected.kt")
|
@TestMetadata("accessorForProtected.kt")
|
||||||
@@ -343,6 +343,39 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/testData/codegen/bytecodeText/lineNumbers")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class LineNumbers extends AbstractBytecodeTextTest {
|
||||||
|
public void testAllFilesPresentInLineNumbers() throws Exception {
|
||||||
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeText/lineNumbers"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("ifElse.kt")
|
||||||
|
public void testIfElse() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/lineNumbers/ifElse.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("singleThen.kt")
|
||||||
|
public void testSingleThen() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/lineNumbers/singleThen.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("tryCatch.kt")
|
||||||
|
public void testTryCatch() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/lineNumbers/tryCatch.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("when.kt")
|
||||||
|
public void testWhen() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/lineNumbers/when.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/bytecodeText/statements")
|
@TestMetadata("compiler/testData/codegen/bytecodeText/statements")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
Reference in New Issue
Block a user