Example usage for org.eclipse.jdt.internal.compiler.lookup TagBits AllStandardAnnotationsMask

List of usage examples for org.eclipse.jdt.internal.compiler.lookup TagBits AllStandardAnnotationsMask

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.compiler.lookup TagBits AllStandardAnnotationsMask.

Prototype

long AllStandardAnnotationsMask

To view the source code for org.eclipse.jdt.internal.compiler.lookup TagBits AllStandardAnnotationsMask.

Click Source Link

Usage

From source file:com.codenvy.ide.ext.java.server.internal.core.BinaryMember.java

License:Open Source License

protected IAnnotation[] getStandardAnnotations(long tagBits) {
    if ((tagBits & TagBits.AllStandardAnnotationsMask) == 0)
        return Annotation.NO_ANNOTATIONS;
    ArrayList annotations = new ArrayList();

    if ((tagBits & TagBits.AnnotationTargetMASK) != 0) {
        annotations.add(getAnnotation(TypeConstants.JAVA_LANG_ANNOTATION_TARGET));
    }/*w  ww .  j a v a2 s.c  om*/
    if ((tagBits & TagBits.AnnotationRetentionMASK) != 0) {
        annotations.add(getAnnotation(TypeConstants.JAVA_LANG_ANNOTATION_RETENTION));
    }
    if ((tagBits & TagBits.AnnotationDeprecated) != 0) {
        annotations.add(getAnnotation(TypeConstants.JAVA_LANG_DEPRECATED));
    }
    if ((tagBits & TagBits.AnnotationDocumented) != 0) {
        annotations.add(getAnnotation(TypeConstants.JAVA_LANG_ANNOTATION_DOCUMENTED));
    }
    if ((tagBits & TagBits.AnnotationInherited) != 0) {
        annotations.add(getAnnotation(TypeConstants.JAVA_LANG_ANNOTATION_INHERITED));
    }
    if ((tagBits & TagBits.AnnotationPolymorphicSignature) != 0) {
        annotations.add(getAnnotation(TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE));
    }
    if ((tagBits & TagBits.AnnotationSafeVarargs) != 0) {
        annotations.add(getAnnotation(TypeConstants.JAVA_LANG_SAFEVARARGS));
    }
    // note that JAVA_LANG_SUPPRESSWARNINGS and JAVA_LANG_OVERRIDE cannot appear in binaries
    return (IAnnotation[]) annotations.toArray(new IAnnotation[annotations.size()]);
}

From source file:com.codenvy.ide.ext.java.server.internal.core.ClassFileInfo.java

License:Open Source License

private void generateStandardAnnotationsInfos(JavaElement javaElement, char[] parameterName, long tagBits,
        HashMap newElements) {//www  . j  a  v a  2 s. c  om
    if ((tagBits & TagBits.AllStandardAnnotationsMask) == 0)
        return;
    if ((tagBits & TagBits.AnnotationTargetMASK) != 0) {
        generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_ANNOTATION_TARGET,
                getTargetElementTypes(tagBits), newElements);
    }
    if ((tagBits & TagBits.AnnotationRetentionMASK) != 0) {
        generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_ANNOTATION_RETENTION,
                getRetentionPolicy(tagBits), newElements);
    }
    if ((tagBits & TagBits.AnnotationDeprecated) != 0) {
        generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_DEPRECATED,
                Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
    }
    if ((tagBits & TagBits.AnnotationDocumented) != 0) {
        generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_ANNOTATION_DOCUMENTED,
                Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
    }
    if ((tagBits & TagBits.AnnotationInherited) != 0) {
        generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_ANNOTATION_INHERITED,
                Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
    }
    if ((tagBits & TagBits.AnnotationPolymorphicSignature) != 0) {
        generateStandardAnnotation(javaElement,
                TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE,
                Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
    }
    if ((tagBits & TagBits.AnnotationSafeVarargs) != 0) {
        generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_SAFEVARARGS,
                Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
    }
    // note that JAVA_LANG_SUPPRESSWARNINGS and JAVA_LANG_OVERRIDE cannot appear in binaries
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.indexing.BinaryIndexer.java

License:Open Source License

private void addBinaryStandardAnnotations(long annotationTagBits) {
    if ((annotationTagBits & TagBits.AllStandardAnnotationsMask) == 0) {
        return;//from  w w w  . j ava 2 s. c  o  m
    }
    if ((annotationTagBits & TagBits.AnnotationTargetMASK) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_ANNOTATION_TARGET;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
        addBinaryTargetAnnotation(annotationTagBits);
    }
    if ((annotationTagBits & TagBits.AnnotationRetentionMASK) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_ANNOTATION_RETENTION;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
        addBinaryRetentionAnnotation(annotationTagBits);
    }
    if ((annotationTagBits & TagBits.AnnotationDeprecated) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_DEPRECATED;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
    }
    if ((annotationTagBits & TagBits.AnnotationDocumented) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_ANNOTATION_DOCUMENTED;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
    }
    if ((annotationTagBits & TagBits.AnnotationInherited) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_ANNOTATION_INHERITED;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
    }
    if ((annotationTagBits & TagBits.AnnotationOverride) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_OVERRIDE;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
    }
    if ((annotationTagBits & TagBits.AnnotationSuppressWarnings) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_SUPPRESSWARNINGS;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
    }
    if ((annotationTagBits & TagBits.AnnotationSafeVarargs) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_SAFEVARARGS;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
    }
    if ((annotationTagBits & TagBits.AnnotationPolymorphicSignature) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE;
        addAnnotationTypeReference(compoundName[compoundName.length - 1]);
    }
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.indexing.BinaryIndexer.java

License:Open Source License

public void indexDocument() {
    try {/*www  .  jav  a 2  s . com*/
        final byte[] contents = this.document.getByteContents();
        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=107124
        // contents can potentially be null if a IOException occurs while retrieving the contents
        if (contents == null)
            return;
        final String path = this.document.getPath();
        ClassFileReader reader = new ClassFileReader(contents, path == null ? null : path.toCharArray());

        // first add type references
        char[] className = replace('/', '.', reader.getName()); // looks like java/lang/String
        // need to extract the package name and the simple name
        int packageNameIndex = CharOperation.lastIndexOf('.', className);
        char[] packageName = null;
        char[] name = null;
        if (packageNameIndex >= 0) {
            packageName = CharOperation.subarray(className, 0, packageNameIndex);
            name = CharOperation.subarray(className, packageNameIndex + 1, className.length);
        } else {
            packageName = CharOperation.NO_CHAR;
            name = className;
        }
        char[] enclosingTypeName = null;
        boolean isNestedType = reader.isNestedType();
        if (isNestedType) {
            if (reader.isAnonymous()) {
                name = CharOperation.NO_CHAR;
            } else {
                name = reader.getInnerSourceName();
            }
            if (reader.isLocal() || reader.isAnonymous()) {
                // set specific ['0'] value for local and anonymous to be able to filter them
                enclosingTypeName = ONE_ZERO;
            } else {
                char[] fullEnclosingName = reader.getEnclosingTypeName();
                int nameLength = fullEnclosingName.length - packageNameIndex - 1;
                if (nameLength <= 0) {
                    // See PR 1GIR345: ITPJCORE:ALL - Indexer: NegativeArraySizeException
                    return;
                }
                enclosingTypeName = new char[nameLength];
                System.arraycopy(fullEnclosingName, packageNameIndex + 1, enclosingTypeName, 0, nameLength);
            }
        }
        // type parameters
        char[][] typeParameterSignatures = null;
        char[] genericSignature = reader.getGenericSignature();
        if (genericSignature != null) {
            CharOperation.replace(genericSignature, '/', '.');
            typeParameterSignatures = Signature.getTypeParameters(genericSignature);
        }

        // eliminate invalid innerclasses (1G4KCF7)
        if (name == null)
            return;

        char[][] superinterfaces = replace('/', '.', reader.getInterfaceNames());
        char[][] enclosingTypeNames = enclosingTypeName == null ? null : new char[][] { enclosingTypeName };
        int modifiers = reader.getModifiers();
        switch (TypeDeclaration.kind(modifiers)) {
        case TypeDeclaration.CLASS_DECL:
            char[] superclass = replace('/', '.', reader.getSuperclassName());
            addClassDeclaration(modifiers, packageName, name, enclosingTypeNames, superclass, superinterfaces,
                    typeParameterSignatures, false);
            break;
        case TypeDeclaration.INTERFACE_DECL:
            addInterfaceDeclaration(modifiers, packageName, name, enclosingTypeNames, superinterfaces,
                    typeParameterSignatures, false);
            break;
        case TypeDeclaration.ENUM_DECL:
            superclass = replace('/', '.', reader.getSuperclassName());
            addEnumDeclaration(modifiers, packageName, name, enclosingTypeNames, superclass, superinterfaces,
                    false);
            break;
        case TypeDeclaration.ANNOTATION_TYPE_DECL:
            addAnnotationTypeDeclaration(modifiers, packageName, name, enclosingTypeNames, false);
            break;
        }

        // Look for references in class annotations
        IBinaryAnnotation[] annotations = reader.getAnnotations();
        if (annotations != null) {
            for (int a = 0, length = annotations.length; a < length; a++) {
                IBinaryAnnotation annotation = annotations[a];
                addBinaryAnnotation(annotation);
            }
        }
        long tagBits = reader.getTagBits() & TagBits.AllStandardAnnotationsMask;
        if (tagBits != 0) {
            addBinaryStandardAnnotations(tagBits);
        }

        int extraFlags = ExtraFlags.getExtraFlags(reader);

        // first reference all methods declarations and field declarations
        MethodInfo[] methods = (MethodInfo[]) reader.getMethods();
        boolean noConstructor = true;
        if (methods != null) {
            for (int i = 0, max = methods.length; i < max; i++) {
                MethodInfo method = methods[i];
                boolean isConstructor = method.isConstructor();
                char[] descriptor = method.getMethodDescriptor();
                char[][] parameterTypes = decodeParameterTypes(descriptor, isConstructor && isNestedType);
                char[] returnType = decodeReturnType(descriptor);
                char[][] exceptionTypes = replace('/', '.', method.getExceptionTypeNames());
                if (isConstructor) {
                    noConstructor = false;
                    char[] signature = method.getGenericSignature();
                    if (signature == null) {
                        if (reader.isNestedType() && ((modifiers & ClassFileConstants.AccStatic) == 0)) {
                            signature = removeFirstSyntheticParameter(descriptor);
                        } else {
                            signature = descriptor;
                        }
                    }
                    addConstructorDeclaration(name, parameterTypes == null ? 0 : parameterTypes.length,
                            signature, parameterTypes, method.getArgumentNames(), method.getModifiers(),
                            packageName, modifiers, exceptionTypes, extraFlags);
                } else {
                    if (!method.isClinit()) {
                        addMethodDeclaration(method.getSelector(), parameterTypes, returnType, exceptionTypes);
                    }
                }
                // look for references in method annotations
                annotations = method.getAnnotations();
                if (annotations != null) {
                    for (int a = 0, length = annotations.length; a < length; a++) {
                        IBinaryAnnotation annotation = annotations[a];
                        addBinaryAnnotation(annotation);
                    }
                }
                tagBits = method.getTagBits() & TagBits.AllStandardAnnotationsMask;
                if (tagBits != 0) {
                    addBinaryStandardAnnotations(tagBits);
                }
            }
        }
        if (noConstructor) {
            addDefaultConstructorDeclaration(className, packageName, modifiers, extraFlags);
        }
        FieldInfo[] fields = (FieldInfo[]) reader.getFields();
        if (fields != null) {
            for (int i = 0, max = fields.length; i < max; i++) {
                FieldInfo field = fields[i];
                char[] fieldName = field.getName();
                char[] fieldType = decodeFieldType(replace('/', '.', field.getTypeName()));
                addFieldDeclaration(fieldType, fieldName);
                // look for references in field annotations
                annotations = field.getAnnotations();
                if (annotations != null) {
                    for (int a = 0, length = annotations.length; a < length; a++) {
                        IBinaryAnnotation annotation = annotations[a];
                        addBinaryAnnotation(annotation);
                    }
                }
                tagBits = field.getTagBits() & TagBits.AllStandardAnnotationsMask;
                if (tagBits != 0) {
                    addBinaryStandardAnnotations(tagBits);
                }
            }
        }
        // record all references found inside the .class file
        extractReferenceFromConstantPool(contents, reader);
    } catch (ClassFormatException e) {
        // ignore
        this.document.removeAllIndexEntries();
        Util.log(IStatus.WARNING, "The Java indexing could not index " + this.document.getPath()
                + ". This .class file doesn't follow the class file format specification. Please report this issue against the .class file vendor"); //$NON-NLS-1$ //$NON-NLS-2$
    } catch (RuntimeException e) {
        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=182154
        // logging the entry that could not be indexed and continue with the next one
        // we remove all entries relative to the boggus document
        this.document.removeAllIndexEntries();
        Util.log(IStatus.WARNING, "The Java indexing could not index " + this.document.getPath()
                + ". This .class file doesn't follow the class file format specification. Please report this issue against the .class file vendor"); //$NON-NLS-1$ //$NON-NLS-2$
    }
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.matching.ClassFileMatchLocator.java

License:Open Source License

private boolean checkAnnotations(TypeReferencePattern pattern, IBinaryAnnotation[] annotations, long tagBits) {
    if (annotations != null) {
        for (int a = 0, length = annotations.length; a < length; a++) {
            IBinaryAnnotation annotation = annotations[a];
            if (checkAnnotation(annotation, pattern)) {
                return true;
            }//from  w w  w.j a v  a 2  s .  c o  m
        }
    }
    if ((tagBits & TagBits.AllStandardAnnotationsMask) != 0 && checkStandardAnnotations(tagBits, pattern)) {
        return true;
    }
    return false;
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.matching.ClassFileMatchLocator.java

License:Open Source License

private boolean checkStandardAnnotations(long annotationTagBits, TypeReferencePattern pattern) {
    if ((annotationTagBits & TagBits.AllStandardAnnotationsMask) == 0) {
        return false;
    }//ww  w .j  a  va2  s  .c o m
    if ((annotationTagBits & TagBits.AnnotationTargetMASK) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_ANNOTATION_TARGET;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)
                || ((annotationTagBits & TARGET_ANNOTATION_BITS) != 0
                        && checkAnnotationTypeReference(JAVA_LANG_ANNOTATION_ELEMENTTYPE, pattern))) {
            return true;
        }
    }
    if ((annotationTagBits & TagBits.AnnotationRetentionMASK) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_ANNOTATION_RETENTION;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)
                || checkAnnotationTypeReference(
                        CharOperation.concatWith(TypeConstants.JAVA_LANG_ANNOTATION_RETENTIONPOLICY, '.'),
                        pattern)) {
            return true;
        }
    }
    if ((annotationTagBits & TagBits.AnnotationDeprecated) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_DEPRECATED;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)) {
            return true;
        }
    }
    if ((annotationTagBits & TagBits.AnnotationDocumented) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_ANNOTATION_DOCUMENTED;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)) {
            return true;
        }
    }
    if ((annotationTagBits & TagBits.AnnotationInherited) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_ANNOTATION_INHERITED;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)) {
            return true;
        }
    }
    if ((annotationTagBits & TagBits.AnnotationOverride) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_OVERRIDE;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)) {
            return true;
        }
    }
    if ((annotationTagBits & TagBits.AnnotationSuppressWarnings) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_SUPPRESSWARNINGS;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)) {
            return true;
        }
    }
    if ((annotationTagBits & TagBits.AnnotationSafeVarargs) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_SAFEVARARGS;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)) {
            return true;
        }
    }
    if ((annotationTagBits & TagBits.AnnotationPolymorphicSignature) != 0) {
        char[][] compoundName = TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE;
        if (checkAnnotationTypeReference(CharOperation.concatWith(compoundName, '.'), pattern)) {
            return true;
        }
    }
    return false;
}

From source file:org.eclipse.che.jdt.internal.core.search.indexing.BinaryIndexer.java

License:Open Source License

public void indexDocument() {
    try {/*from   w w  w. j  a  va 2 s.com*/
        final byte[] contents = this.document.getByteContents();
        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=107124
        // contents can potentially be null if a IOException occurs while retrieving the contents
        if (contents == null)
            return;
        final String path = this.document.getPath();
        ClassFileReader reader = new ClassFileReader(contents, path == null ? null : path.toCharArray());

        // first add type references
        char[] className = replace('/', '.', reader.getName()); // looks like java/lang/String
        // need to extract the package name and the simple name
        int packageNameIndex = CharOperation.lastIndexOf('.', className);
        char[] packageName = null;
        char[] name = null;
        if (packageNameIndex >= 0) {
            packageName = CharOperation.subarray(className, 0, packageNameIndex);
            name = CharOperation.subarray(className, packageNameIndex + 1, className.length);
        } else {
            packageName = CharOperation.NO_CHAR;
            name = className;
        }
        char[] enclosingTypeName = null;
        boolean isNestedType = reader.isNestedType();
        if (isNestedType) {
            if (reader.isAnonymous()) {
                name = CharOperation.NO_CHAR;
            } else {
                name = reader.getInnerSourceName();
            }
            if (reader.isLocal() || reader.isAnonymous()) {
                // set specific ['0'] value for local and anonymous to be able to filter them
                enclosingTypeName = ONE_ZERO;
            } else {
                char[] fullEnclosingName = reader.getEnclosingTypeName();
                int nameLength = fullEnclosingName.length - packageNameIndex - 1;
                if (nameLength <= 0) {
                    // See PR 1GIR345: ITPJCORE:ALL - Indexer: NegativeArraySizeException
                    return;
                }
                enclosingTypeName = new char[nameLength];
                System.arraycopy(fullEnclosingName, packageNameIndex + 1, enclosingTypeName, 0, nameLength);
            }
        }
        // type parameters
        char[][] typeParameterSignatures = null;
        char[] genericSignature = reader.getGenericSignature();
        if (genericSignature != null) {
            CharOperation.replace(genericSignature, '/', '.');
            typeParameterSignatures = Signature.getTypeParameters(genericSignature);
        }

        // eliminate invalid innerclasses (1G4KCF7)
        if (name == null)
            return;

        char[][] superinterfaces = replace('/', '.', reader.getInterfaceNames());
        char[][] enclosingTypeNames = enclosingTypeName == null ? null : new char[][] { enclosingTypeName };
        int modifiers = reader.getModifiers();
        switch (TypeDeclaration.kind(modifiers)) {
        case TypeDeclaration.CLASS_DECL:
            char[] superclass = replace('/', '.', reader.getSuperclassName());
            addClassDeclaration(modifiers, packageName, name, enclosingTypeNames, superclass, superinterfaces,
                    typeParameterSignatures, false);
            break;
        case TypeDeclaration.INTERFACE_DECL:
            addInterfaceDeclaration(modifiers, packageName, name, enclosingTypeNames, superinterfaces,
                    typeParameterSignatures, false);
            break;
        case TypeDeclaration.ENUM_DECL:
            superclass = replace('/', '.', reader.getSuperclassName());
            addEnumDeclaration(modifiers, packageName, name, enclosingTypeNames, superclass, superinterfaces,
                    false);
            break;
        case TypeDeclaration.ANNOTATION_TYPE_DECL:
            addAnnotationTypeDeclaration(modifiers, packageName, name, enclosingTypeNames, false);
            break;
        }

        // Look for references in class annotations
        IBinaryAnnotation[] annotations = reader.getAnnotations();
        if (annotations != null) {
            for (int a = 0, length = annotations.length; a < length; a++) {
                IBinaryAnnotation annotation = annotations[a];
                addBinaryAnnotation(annotation);
            }
        }
        long tagBits = reader.getTagBits() & TagBits.AllStandardAnnotationsMask;
        if (tagBits != 0) {
            addBinaryStandardAnnotations(tagBits);
        }

        int extraFlags = ExtraFlags.getExtraFlags(reader);

        // first reference all methods declarations and field declarations
        MethodInfo[] methods = (MethodInfo[]) reader.getMethods();
        boolean noConstructor = true;
        if (methods != null) {
            for (int i = 0, max = methods.length; i < max; i++) {
                MethodInfo method = methods[i];
                boolean isConstructor = method.isConstructor();
                char[] descriptor = method.getMethodDescriptor();
                char[][] parameterTypes = decodeParameterTypes(descriptor, isConstructor && isNestedType);
                char[] returnType = decodeReturnType(descriptor);
                char[][] exceptionTypes = replace('/', '.', method.getExceptionTypeNames());
                if (isConstructor) {
                    noConstructor = false;
                    char[] signature = method.getGenericSignature();
                    if (signature == null) {
                        if (reader.isNestedType() && ((modifiers & ClassFileConstants.AccStatic) == 0)) {
                            signature = removeFirstSyntheticParameter(descriptor);
                        } else {
                            signature = descriptor;
                        }
                    }
                    addConstructorDeclaration(name, parameterTypes == null ? 0 : parameterTypes.length,
                            signature, parameterTypes, method.getArgumentNames(), method.getModifiers(),
                            packageName, modifiers, exceptionTypes, extraFlags);
                } else {
                    if (!method.isClinit()) {
                        addMethodDeclaration(method.getSelector(), parameterTypes, returnType, exceptionTypes);
                    }
                }
                // look for references in method annotations
                annotations = method.getAnnotations();
                if (annotations != null) {
                    for (int a = 0, length = annotations.length; a < length; a++) {
                        IBinaryAnnotation annotation = annotations[a];
                        addBinaryAnnotation(annotation);
                    }
                }
                tagBits = method.getTagBits() & TagBits.AllStandardAnnotationsMask;
                if (tagBits != 0) {
                    addBinaryStandardAnnotations(tagBits);
                }
            }
        }
        if (noConstructor) {
            addDefaultConstructorDeclaration(className, packageName, modifiers, extraFlags);
        }
        FieldInfo[] fields = (FieldInfo[]) reader.getFields();
        if (fields != null) {
            for (int i = 0, max = fields.length; i < max; i++) {
                FieldInfo field = fields[i];
                char[] fieldName = field.getName();
                char[] fieldType = decodeFieldType(replace('/', '.', field.getTypeName()));
                addFieldDeclaration(fieldType, fieldName);
                // look for references in field annotations
                annotations = field.getAnnotations();
                if (annotations != null) {
                    for (int a = 0, length = annotations.length; a < length; a++) {
                        IBinaryAnnotation annotation = annotations[a];
                        addBinaryAnnotation(annotation);
                    }
                }
                tagBits = field.getTagBits() & TagBits.AllStandardAnnotationsMask;
                if (tagBits != 0) {
                    addBinaryStandardAnnotations(tagBits);
                }
            }
        }
        // record all references found inside the .class file
        extractReferenceFromConstantPool(contents, reader);
    } catch (ClassFormatException e) {
        // ignore
        this.document.removeAllIndexEntries();
        Util.log(IStatus.WARNING, "The Java indexing could not index " + this.document.getPath()
                + ". This .class file doesn't follow the class file format specification. Please report this issue "
                + "against the .class file vendor"); //$NON-NLS-1$ //$NON-NLS-2$
    } catch (RuntimeException e) {
        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=182154
        // logging the entry that could not be indexed and continue with the next one
        // we remove all entries relative to the boggus document
        this.document.removeAllIndexEntries();
        Util.log(IStatus.WARNING, "The Java indexing could not index " + this.document.getPath()
                + ". This .class file doesn't follow the class file format specification. Please report this issue "
                + "again" + "st the .class file vendor"); //$NON-NLS-2$ //$NON-NLS-2$
    }
}