@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(") {}");
  }