/**
  * Creates a public abstract method. The created method must be added to a class with <code>
  * CtClass.addMethod()</code>.
  *
  * @param declaring the class to which the created method is added.
  * @param returnType the type of the returned value
  * @param mname the method name
  * @param parameters a list of the parameter types
  * @see CtClass#addMethod(CtMethod)
  */
 public CtMethod(CtClass returnType, String mname, CtClass[] parameters, CtClass declaring) {
   this(null, declaring);
   ConstPool cp = declaring.getClassFile2().getConstPool();
   String desc = Descriptor.ofMethod(returnType, parameters);
   methodInfo = new MethodInfo(cp, mname, desc);
   setModifiers(Modifier.PUBLIC | Modifier.ABSTRACT);
 }
  /* This method is also called by CtClassType.getMethods0().
   */
  final String getStringRep() {
    if (cachedStringRep == null)
      cachedStringRep =
          methodInfo.getName() + Descriptor.getParamDescriptor(methodInfo.getDescriptor());

    return cachedStringRep;
  }
 /**
  * Returns the method name followed by parameter types such as <code>ja.CtMethod.setBody(String)
  * </code>.
  *
  * @since 3.5
  */
 public String getLongName() {
   return getDeclaringClass().getName() + "." + getName() + Descriptor.toString(getSignature());
 }