Write line numbers for bridge methods (line for class header)
This commit is contained in:
@@ -28,6 +28,7 @@ import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.Stack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.backend.common.CodegenUtil;
|
||||
import org.jetbrains.jet.codegen.binding.CalculatedClosure;
|
||||
import org.jetbrains.jet.codegen.binding.CodegenBinding;
|
||||
import org.jetbrains.jet.codegen.context.*;
|
||||
@@ -1553,19 +1554,15 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
}
|
||||
|
||||
public void markLineNumber(@NotNull JetElement statement, boolean markEndOffset) {
|
||||
Document document = statement.getContainingFile().getViewProvider().getDocument();
|
||||
if (document != null) {
|
||||
TextRange textRange = statement.getTextRange();
|
||||
int lineNumber = document.getLineNumber(markEndOffset ? textRange.getEndOffset() : textRange.getStartOffset()); // 0-based
|
||||
if (lineNumber == myLastLineNumber) {
|
||||
return;
|
||||
}
|
||||
myLastLineNumber = lineNumber;
|
||||
|
||||
Label label = new Label();
|
||||
v.visitLabel(label);
|
||||
v.visitLineNumber(lineNumber + 1, label); // 1-based
|
||||
Integer lineNumber = CodegenUtil.getLineNumberForElement(statement, markEndOffset);
|
||||
if (lineNumber == null || lineNumber == myLastLineNumber) {
|
||||
return;
|
||||
}
|
||||
myLastLineNumber = lineNumber;
|
||||
|
||||
Label label = new Label();
|
||||
v.visitLabel(label);
|
||||
v.visitLineNumber(lineNumber, label);
|
||||
}
|
||||
|
||||
private void doFinallyOnReturn() {
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import kotlin.Function1;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.backend.common.CodegenUtil;
|
||||
import org.jetbrains.jet.codegen.binding.CodegenBinding;
|
||||
import org.jetbrains.jet.codegen.bridges.Bridge;
|
||||
import org.jetbrains.jet.codegen.bridges.BridgesPackage;
|
||||
@@ -70,6 +71,7 @@ import static org.jetbrains.jet.codegen.JvmSerializationBindings.*;
|
||||
import static org.jetbrains.jet.codegen.binding.CodegenBinding.isLocalNamedFun;
|
||||
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.DECLARATION;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils.callableDescriptorToDeclaration;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils.classDescriptorToDeclaration;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isFunctionLiteral;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isTrait;
|
||||
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.OBJECT_TYPE;
|
||||
@@ -780,6 +782,16 @@ public class FunctionCodegen extends ParentCodegenAware {
|
||||
|
||||
mv.visitCode();
|
||||
|
||||
PsiElement classElement = classDescriptorToDeclaration(owner.getThisDescriptor());
|
||||
if (classElement != null) {
|
||||
Integer lineNumber = CodegenUtil.getLineNumberForElement(classElement, false);
|
||||
if (lineNumber != null) {
|
||||
Label label = new Label();
|
||||
mv.visitLabel(label);
|
||||
mv.visitLineNumber(lineNumber, label);
|
||||
}
|
||||
}
|
||||
|
||||
Type[] argTypes = bridge.getArgumentTypes();
|
||||
Type[] originalArgTypes = delegateTo.getArgumentTypes();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user