Examples of IBinaryMethod


Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

  IBinaryMethod[] methods = typeInfo.getMethods();
  if (methods == null) {
    return;
  }
  for (int i = 0, methodCount = methods.length; i < methodCount; i++) {
    IBinaryMethod methodInfo = methods[i];
    final boolean isConstructor = methodInfo.isConstructor();
    boolean isEnum = false;
    try {
      isEnum = type.isEnum();
    } catch (JavaModelException e) {
      // ignore
    }
    // TODO (jerome) filter out synthetic members
    //                        indexer should not index them as well
    // if ((methodInfo.getModifiers() & IConstants.AccSynthetic) != 0) continue; // skip synthetic
    boolean useGenericSignature = true;
    char[] signature = methodInfo.getGenericSignature();
    String[] pNames = null;
    if (signature == null) {
      useGenericSignature = false;
      signature = methodInfo.getMethodDescriptor();
      if (isEnum && isConstructor) {
        pNames = Signature.getParameterTypes(new String(signature));
        int length = pNames.length - 2;
        if (length >= 0) // https://bugs.eclipse.org/bugs/show_bug.cgi?id=436347
          System.arraycopy(pNames, 2, pNames = new String[length], 0, length);
      }
    }
    String selector = new String(methodInfo.getSelector());
    if (isConstructor) {
      selector = type.getElementName();
    }
    try {
      if (!(isEnum && isConstructor && !useGenericSignature)) {
        pNames = Signature.getParameterTypes(new String(signature));
      }
      if (isConstructor
          && useGenericSignature
          && type.isMember()
          && !Flags.isStatic(type.getFlags())) {
        int length = pNames.length;
        System.arraycopy(pNames, 0, (pNames = new String[length + 1]), 1, length);
        char[] descriptor = methodInfo.getMethodDescriptor();
        final String[] parameterTypes = Signature.getParameterTypes(new String(descriptor));
        pNames[0] = parameterTypes[0];
      }
    } catch (IllegalArgumentException e) {
      // protect against malformed .class file (e.g. com/sun/crypto/provider/SunJCE_b.class has a 'a' generic signature)
      signature = methodInfo.getMethodDescriptor();
      pNames = Signature.getParameterTypes(new String(signature));
    } catch (JavaModelException e) {
      // protect against malformed .class file (e.g. com/sun/crypto/provider/SunJCE_b.class has a 'a' generic signature)
      signature = methodInfo.getMethodDescriptor();
      pNames = Signature.getParameterTypes(new String(signature));
    }
    char[][] paramNames= new char[pNames.length][];
    for (int j= 0; j < pNames.length; j++) {
      paramNames[j]= pNames[j].toCharArray();
    }
    char[][] parameterTypes = ClassFile.translatedNames(paramNames);
    JavaModelManager manager = JavaModelManager.getJavaModelManager();
    selector =  manager.intern(selector);
    for (int j= 0; j < pNames.length; j++) {
      pNames[j]= manager.intern(new String(parameterTypes[j]));
    }
    BinaryMethod method = new BinaryMethod((JavaElement)type, selector, pNames);
    childrenHandles.add(method);

    // ensure that 2 binary methods with the same signature but with different return types have different occurrence counts.
    // (case of bridge methods in 1.5)
    while (newElements.containsKey(method))
      method.occurrenceCount++;

    newElements.put(method, methodInfo);

    int max = pNames.length;
    char[][] argumentNames = methodInfo.getArgumentNames();
    if (argumentNames == null || argumentNames.length < max) {
      argumentNames = new char[max][];
      for (int j = 0; j < max; j++) {
        argumentNames[j] = ("arg" + j).toCharArray(); //$NON-NLS-1$
      }
    }
    int startIndex = 0;
    try {
      if (isConstructor) {
        if (isEnum) {
          startIndex = 2;
        } else if (type.isMember()
            && !Flags.isStatic(type.getFlags())) {
          startIndex = 1;
        }
      }
    } catch(JavaModelException e) {
      // ignore
    }
    for (int j = startIndex; j < max; j++) {
      IBinaryAnnotation[] parameterAnnotations = methodInfo.getParameterAnnotations(j - startIndex);
      if (parameterAnnotations != null) {
        LocalVariable localVariable = new LocalVariable(
            method,
            new String(argumentNames[j]),
            0,
            -1,
            0,
            -1,
            method.parameterTypes[j],
            null,
            -1,
            true);
        generateAnnotationsInfos(localVariable, argumentNames[j], parameterAnnotations, methodInfo.getTagBits(), newElements);
      }
    }
    generateTypeParameterInfos(method, signature, newElements, typeParameterHandles);
    generateAnnotationsInfos(method, methodInfo.getAnnotations(), methodInfo.getTagBits(), newElements);
    Object defaultValue = methodInfo.getDefaultValue();
    if (defaultValue instanceof IBinaryAnnotation) {
      generateAnnotationInfo(method, newElements, (IBinaryAnnotation) defaultValue, new String(methodInfo.getSelector()));
    }
  }
}
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

  IBinaryMethod[] methods = typeInfo.getMethods();
  if (methods == null) {
    return;
  }
  for (int i = 0, methodCount = methods.length; i < methodCount; i++) {
    IBinaryMethod methodInfo = methods[i];
    // TODO (jerome) filter out synthetic members
    //                        indexer should not index them as well
    // if ((methodInfo.getModifiers() & IConstants.AccSynthetic) != 0) continue; // skip synthetic
    boolean useGenericSignature = true;
    char[] signature = methodInfo.getGenericSignature();
    if (signature == null) {
      useGenericSignature = false;
      signature = methodInfo.getMethodDescriptor();
    }
    String selector = new String(methodInfo.getSelector());
    final boolean isConstructor = methodInfo.isConstructor();
    if (isConstructor) {
      selector = type.getElementName();
    }
    String[] pNames = null;
    try {
      pNames = Signature.getParameterTypes(new String(signature));
      if (isConstructor
          && useGenericSignature
          && type.isMember()
          && !Flags.isStatic(type.getFlags())) {
        int length = pNames.length;
        System.arraycopy(pNames, 0, (pNames = new String[length + 1]), 1, length);
        char[] descriptor = methodInfo.getMethodDescriptor();
        final String[] parameterTypes = Signature.getParameterTypes(new String(descriptor));
        pNames[0] = parameterTypes[0];
      }
    } catch (IllegalArgumentException e) {
      // protect against malformed .class file (e.g. com/sun/crypto/provider/SunJCE_b.class has a 'a' generic signature)
      signature = methodInfo.getMethodDescriptor();
      pNames = Signature.getParameterTypes(new String(signature));
    } catch (JavaModelException e) {
      // protect against malformed .class file (e.g. com/sun/crypto/provider/SunJCE_b.class has a 'a' generic signature)
      signature = methodInfo.getMethodDescriptor();
      pNames = Signature.getParameterTypes(new String(signature));
    }
    char[][] paramNames= new char[pNames.length][];
    for (int j= 0; j < pNames.length; j++) {
      paramNames[j]= pNames[j].toCharArray();
    }
    char[][] parameterTypes = ClassFile.translatedNames(paramNames);
    JavaModelManager manager = JavaModelManager.getJavaModelManager();
    selector =  manager.intern(selector);
    for (int j= 0; j < pNames.length; j++) {
      pNames[j]= manager.intern(new String(parameterTypes[j]));
    }
    BinaryMethod method = new BinaryMethod((JavaElement)type, selector, pNames);
    childrenHandles.add(method);

    // ensure that 2 binary methods with the same signature but with different return types have different occurrence counts.
    // (case of bridge methods in 1.5)
    while (newElements.containsKey(method))
      method.occurrenceCount++;

    newElements.put(method, methodInfo);

    int max = pNames.length;
    char[][] argumentNames = methodInfo.getArgumentNames();
    if (argumentNames == null || argumentNames.length < max) {
      argumentNames = new char[max][];
      for (int j = 0; j < max; j++) {
        argumentNames[j] = ("arg" + j).toCharArray(); //$NON-NLS-1$
      }
    }
    int startIndex = 0;
    try {
      if (isConstructor) {
        if (type.isEnum()) {
          startIndex = 2;
        } else if (type.isMember()
            && !Flags.isStatic(type.getFlags())) {
          startIndex = 1;
        }
      }
    } catch(JavaModelException e) {
      // ignore
    }
    for (int j = startIndex; j < max; j++) {
      IBinaryAnnotation[] parameterAnnotations = methodInfo.getParameterAnnotations(j - startIndex);
      if (parameterAnnotations != null) {
        LocalVariable localVariable = new LocalVariable(
            method,
            new String(argumentNames[j]),
            0,
            -1,
            0,
            -1,
            method.parameterTypes[j],
            null,
            -1,
            true);
        generateAnnotationsInfos(localVariable, argumentNames[j], parameterAnnotations, methodInfo.getTagBits(), newElements);
      }
    }
    generateTypeParameterInfos(method, signature, newElements, typeParameterHandles);
    generateAnnotationsInfos(method, methodInfo.getAnnotations(), methodInfo.getTagBits(), newElements);
    Object defaultValue = methodInfo.getDefaultValue();
    if (defaultValue instanceof IBinaryAnnotation) {
      generateAnnotationInfo(method, newElements, (IBinaryAnnotation) defaultValue, new String(methodInfo.getSelector()));
    }
  }
}
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

public boolean equals(Object o) {
  if (!(o instanceof BinaryMethod)) return false;
  return super.equals(o) && Util.equalArraysOrNull(getErasedParameterTypes(), ((BinaryMethod)o).getErasedParameterTypes());
}
public IAnnotation[] getAnnotations() throws JavaModelException {
  IBinaryMethod info = (IBinaryMethod) getElementInfo();
  IBinaryAnnotation[] binaryAnnotations = info.getAnnotations();
  return getAnnotations(binaryAnnotations, info.getTagBits());
}
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

  IBinaryMethod info = (IBinaryMethod) getElementInfo();
  IBinaryAnnotation[] binaryAnnotations = info.getAnnotations();
  return getAnnotations(binaryAnnotations, info.getTagBits());
}
public ILocalVariable[] getParameters() throws JavaModelException {
  IBinaryMethod info = (IBinaryMethod) getElementInfo();
  int length = this.parameterTypes.length;
  if (length == 0) {
    return LocalVariable.NO_LOCAL_VARIABLES;
  }
  ILocalVariable[] localVariables = new ILocalVariable[length];
  char[][] argumentNames = info.getArgumentNames();
  if (argumentNames == null || argumentNames.length < length) {
    argumentNames = new char[length][];
    for (int j = 0; j < length; j++) {
      argumentNames[j] = ("arg" + j).toCharArray(); //$NON-NLS-1$
    }
  }
  int startIndex = 0;
  try {
    if (isConstructor()) {
      IType declaringType = this.getDeclaringType();
      if (declaringType.isEnum()) {
        startIndex = 2;
      } else if (declaringType.isMember()
          && !Flags.isStatic(declaringType.getFlags())) {
        startIndex = 1;
      }
    }
  } catch(JavaModelException e) {
    // ignore
  }
  for (int i= 0; i < length; i++) {
    if (i < startIndex) {
      LocalVariable localVariable = new LocalVariable(
          this,
          new String(argumentNames[i]),
          0,
          -1,
          0,
          -1,
          this.parameterTypes[i],
          null,
          -1,
          true);
      localVariables[i] = localVariable;
      localVariable.annotations = Annotation.NO_ANNOTATIONS;
    } else {
      LocalVariable localVariable = new LocalVariable(
          this,
          new String(argumentNames[i]),
          0,
          -1,
          0,
          -1,
          this.parameterTypes[i],
          null,
          -1,
          true);
      localVariables[i] = localVariable;
      IAnnotation[] annotations = getAnnotations(localVariable, info.getParameterAnnotations(i - startIndex));
      localVariable.annotations = annotations;
    }
  }
  return localVariables;
}
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

    annotations[i] = Util.getAnnotation(annotationParent, binaryAnnotations[i], null);
  }
  return annotations;
}
public IMemberValuePair getDefaultValue() throws JavaModelException {
  IBinaryMethod info = (IBinaryMethod) getElementInfo();
  Object defaultValue = info.getDefaultValue();
  if (defaultValue == null)
    return null;
  MemberValuePair memberValuePair = new MemberValuePair(getElementName());
  memberValuePair.value = Util.getAnnotationMemberValue(this, memberValuePair, defaultValue);
  return memberValuePair;
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

/*
* @see IMethod
*/
public String[] getExceptionTypes() throws JavaModelException {
  if (this.exceptionTypes == null) {
    IBinaryMethod info = (IBinaryMethod) getElementInfo();
    char[] genericSignature = info.getGenericSignature();
    if (genericSignature != null) {
      char[] dotBasedSignature = CharOperation.replaceOnCopy(genericSignature, '/', '.');
      this.exceptionTypes = Signature.getThrownExceptionTypes(new String(dotBasedSignature));
    }
    if (this.exceptionTypes == null || this.exceptionTypes.length == 0) {
      char[][] eTypeNames = info.getExceptionTypeNames();
      if (eTypeNames == null || eTypeNames.length == 0) {
        this.exceptionTypes = CharOperation.NO_STRINGS;
      } else {
        eTypeNames = ClassFile.translatedNames(eTypeNames);
        this.exceptionTypes = new String[eTypeNames.length];
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

}
/*
* @see IMember
*/
public int getFlags() throws JavaModelException {
  IBinaryMethod info = (IBinaryMethod) getElementInfo();
  return info.getModifiers();
}
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

      return this.parameterNames = names;
    }
  }

  // try to see if we can retrieve the names from the attached javadoc
  IBinaryMethod info = (IBinaryMethod) getElementInfo();
  // https://bugs.eclipse.org/bugs/show_bug.cgi?id=316937
  // Use Signature#getParameterCount() only if the argument names are not already available.
  int paramCount = Signature.getParameterCount(new String(info.getMethodDescriptor()));
  if (this.isConstructor()) {
    final IType declaringType = this.getDeclaringType();
    if (declaringType.isMember()
        && !Flags.isStatic(declaringType.getFlags())) {
      paramCount--; // remove synthetic argument from constructor param count
    }
  }

  if (paramCount != 0) {
    // don't try to look for javadoc for synthetic methods
    int modifiers = getFlags();
    if ((modifiers & ClassFileConstants.AccSynthetic) != 0) {
      return this.parameterNames = getRawParameterNames(paramCount);
    }
    JavadocContents javadocContents = null;
    IType declaringType = getDeclaringType();
    PerProjectInfo projectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(getJavaProject().getProject());
    synchronized (projectInfo.javadocCache) {
      javadocContents = (JavadocContents) projectInfo.javadocCache.get(declaringType);
      if (javadocContents == null) {
        projectInfo.javadocCache.put(declaringType, BinaryType.EMPTY_JAVADOC);
      }
    }
   
    String methodDoc = null;
    if (javadocContents == null) {
      long timeOut = 50; // default value
      try {
        String option = getJavaProject().getOption(JavaCore.TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC, true);
        if (option != null) {
          timeOut = Long.parseLong(option);
        }
      } catch(NumberFormatException e) {
        // ignore
      }
      if (timeOut == 0) {
        // don't try to fetch the values and don't cache either (https://bugs.eclipse.org/bugs/show_bug.cgi?id=329671)
        return getRawParameterNames(paramCount);
      }
      final class ParametersNameCollector {
        String javadoc;
        public void setJavadoc(String s) {
          this.javadoc = s;
        }
        public String getJavadoc() {
          return this.javadoc;
        }
      }
      /*
       * The declaring type is not in the cache yet. The thread wil retrieve the javadoc contents
       */
      final ParametersNameCollector nameCollector = new ParametersNameCollector();
      Thread collect = new Thread() {
        public void run() {
          try {
            // this call has a side-effect on the per project info cache
            nameCollector.setJavadoc(BinaryMethod.this.getAttachedJavadoc(null));
          } catch (JavaModelException e) {
            // ignore
          }
          synchronized(nameCollector) {
            nameCollector.notify();
          }
        }
      };
      collect.start();
      synchronized(nameCollector) {
        try {
          nameCollector.wait(timeOut);
        } catch (InterruptedException e) {
          // ignore
        }
      }
      methodDoc = nameCollector.getJavadoc();
    } else if (javadocContents != BinaryType.EMPTY_JAVADOC){
      // need to extract the part relative to the binary method since javadoc contains the javadoc for the declaring type
      try {
        methodDoc = javadocContents.getMethodDoc(this);
      } catch(JavaModelException e) {
        javadocContents = null;
      }
    }
    if (methodDoc != null) {
      final int indexOfOpenParen = methodDoc.indexOf('(');
      if (indexOfOpenParen != -1) {
        final int indexOfClosingParen = methodDoc.indexOf(')', indexOfOpenParen);
        if (indexOfClosingParen != -1) {
          final char[] paramsSource =
            CharOperation.replace(
              methodDoc.substring(indexOfOpenParen + 1, indexOfClosingParen).toCharArray(),
              "&nbsp;".toCharArray(), //$NON-NLS-1$
              new char[] {' '});
          final char[][] params = splitParameters(paramsSource, paramCount);
          final int paramsLength = params.length;
          String[] names = new String[paramsLength];
          for (int i = 0; i < paramsLength; i++) {
            final char[] param = params[i];
            int indexOfSpace = CharOperation.lastIndexOf(' ', param);
            if (indexOfSpace != -1) {
              names[i] = String.valueOf(param, indexOfSpace + 1, param.length - indexOfSpace -1);
            } else {
              names[i] = "arg" + i; //$NON-NLS-1$
            }
          }
          return this.parameterNames = names;
        }
      }
    }
    // let's see if we can retrieve them from the debug infos
    char[][] argumentNames = info.getArgumentNames();
    if (argumentNames != null && argumentNames.length == paramCount) {
      String[] names = new String[paramCount];
      for (int i = 0; i < paramCount; i++) {
        names[i] = new String(argumentNames[i]);
      }
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

* @see IMethod#getTypeParameterSignatures()
* @since 3.0
* @deprecated
*/
public String[] getTypeParameterSignatures() throws JavaModelException {
  IBinaryMethod info = (IBinaryMethod) getElementInfo();
  char[] genericSignature = info.getGenericSignature();
  if (genericSignature == null)
    return CharOperation.NO_STRINGS;
  char[] dotBasedSignature = CharOperation.replaceOnCopy(genericSignature, '/', '.');
  char[][] typeParams = Signature.getTypeParameters(dotBasedSignature);
  return CharOperation.toStrings(typeParams);
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.env.IBinaryMethod

  char[][] typeParams = Signature.getTypeParameters(dotBasedSignature);
  return CharOperation.toStrings(typeParams);
}

public String[] getRawParameterNames() throws JavaModelException {
  IBinaryMethod info = (IBinaryMethod) getElementInfo();
  int paramCount = Signature.getParameterCount(new String(info.getMethodDescriptor()));
  return getRawParameterNames(paramCount);
}
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.