diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java index cd7081018ba..ba8afa30355 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java @@ -26,12 +26,12 @@ import com.intellij.psi.stubs.StubBase; import com.intellij.psi.stubs.StubElement; import com.intellij.util.containers.Stack; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.codegen.ClassBuilder; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.asm4.ClassReader; import org.jetbrains.asm4.ClassVisitor; import org.jetbrains.asm4.FieldVisitor; import org.jetbrains.asm4.MethodVisitor; +import org.jetbrains.jet.codegen.ClassBuilder; +import org.jetbrains.jet.lang.resolve.java.JvmAbi; import java.util.List; @@ -81,21 +81,37 @@ public class StubClassBuilder extends ClassBuilder { @Override public MethodVisitor newMethod(@Nullable PsiElement origin, int access, String name, String desc, @Nullable String signature, @Nullable String[] exceptions) { - final MethodVisitor answer = super.newMethod(origin, access, name, desc, signature, exceptions); - markLastChild(origin); - return answer; + final MethodVisitor internalVisitor = super.newMethod(origin, access, name, desc, signature, exceptions); + + if (internalVisitor != null) { + // If stub for method generated + markLastChild(origin); + } + + return internalVisitor; } @Override public FieldVisitor newField(@Nullable PsiElement origin, int access, String name, String desc, @Nullable String signature, @Nullable Object value) { - final FieldVisitor answer = super.newField(origin, access, name, desc, signature, value); - markLastChild(origin); - return answer; + final FieldVisitor internalVisitor = super.newField(origin, access, name, desc, signature, value); + + if (internalVisitor != null) { + // If stub for field generated + markLastChild(origin); + } + + return internalVisitor; } - private void markLastChild(PsiElement origin) { + private void markLastChild(@Nullable PsiElement origin) { final List children = v.getResult().getChildrenStubs(); StubBase last = (StubBase) children.get(children.size() - 1); + + PsiElement oldOrigin = last.getUserData(ClsWrapperStubPsiFactory.ORIGIN_ELEMENT); + if (oldOrigin != null) { + throw new IllegalStateException("Rewriting origin element: " + oldOrigin.getText() + " for stub " + last.toString()); + } + last.putUserData(ClsWrapperStubPsiFactory.ORIGIN_ELEMENT, origin); } diff --git a/idea/testData/javaFacade/wrapFunWithDefaultParam.kt b/idea/testData/javaFacade/wrapFunWithDefaultParam.kt new file mode 100644 index 00000000000..6c02fa0beb6 --- /dev/null +++ b/idea/testData/javaFacade/wrapFunWithDefaultParam.kt @@ -0,0 +1 @@ +fun test(a : Int = 1) = Unit.VALUE \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java b/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java index 435e3ecec17..c0b008f1918 100644 --- a/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java @@ -63,6 +63,10 @@ public class JetJavaFacadeTest extends LightCodeInsightFixtureTestCase { doTestWrapMethod(true); } + public void testWrapFunWithDefaultParam() { + doTestWrapMethod(true); + } + public void testWrapFunWithImplInTrait() { doTestWrapMethod(true); }