@NotNull public JavaMethodStubBuilder withParameter( @NotNull DotNetTypeRef typeRef, @NotNull String name, @NotNull PsiElement navTarget) { JavaParameterStubBuilder p = new JavaParameterStubBuilder(navTarget, name); p.withType(typeRef); myParameters.add(p); return this; }
@NotNull @Override public PsiMethod buildToPsi(@Nullable PsiElement parent) { PsiManager psiManager = PsiManager.getInstance(myNavTarget.getProject()); LightMethodBuilder builder = new LightMethodBuilder(psiManager, myName); builder.setConstructor(myConstructor); builder.setModifiers(ArrayUtil.toStringArray(myModifiers)); builder.setContainingClass((PsiClass) parent); builder.setMethodReturnType(normalizeType(myReturnType)); builder.setNavigationElement(myNavTarget); for (JavaParameterStubBuilder parameter : myParameters) { builder.addParameter(parameter.buildToPsi(builder)); } return builder; }
@Override public void buildToBytecode(ClassWriter parent) { int access = 0; access = BitUtil.set(access, Opcodes.ACC_STATIC, myModifiers.contains(PsiModifier.STATIC)); access = BitUtil.set(access, Opcodes.ACC_PUBLIC, myModifiers.contains(PsiModifier.PUBLIC)); StringBuilder descBuilder = new StringBuilder(); descBuilder.append("("); for (JavaParameterStubBuilder parameter : myParameters) { appendType(parameter.getType(), descBuilder); } descBuilder.append(")"); appendType(myReturnType, descBuilder); try { parent.visitMethod(access, myName, descBuilder.toString(), null, null).visitEnd(); } catch (Exception e) { e.printStackTrace(); } }
@RequiredReadAction @Override public void buildToText(@NotNull StringBuilder builder, BaseStubBuilder<?> parent) { for (String modifier : myModifiers) { builder.append(modifier).append(" "); } if (myConstructor) { builder.append(parent.getName()); } else { builder.append(normalizeTypeText(myReturnType)).append(" ").append(normalize(myName)); } builder.append("("); for (int i = 0; i < myParameters.size(); i++) { if (i != 0) { builder.append(", "); } JavaParameterStubBuilder javaParameterStubBuilder = myParameters.get(i); javaParameterStubBuilder.buildToText(builder, JavaMethodStubBuilder.this); } builder.append(") {}"); }