Example usage for org.eclipse.jdt.core IType getTypeQualifiedName

List of usage examples for org.eclipse.jdt.core IType getTypeQualifiedName

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IType getTypeQualifiedName.

Prototype

String getTypeQualifiedName();

Source Link

Document

Returns the type-qualified name of this type, including qualification for any enclosing types, but not including package qualification.

Usage

From source file:at.bestsolution.fxide.jdt.text.viewersupport.JavaElementLabelComposer.java

License:Open Source License

/**
 * Appends the label for a type. Considers the T_* flags.
 *
 * @param type the element to render/*from ww w  .j  a  v  a  2  s. c  om*/
 * @param flags the rendering flags. Flags with names starting with 'T_' are considered.
 */
public void appendTypeLabel(IType type, long flags) {

    if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED)) {
        IPackageFragment pack = type.getPackageFragment();
        if (!pack.isDefaultPackage()) {
            appendPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }
    }
    IJavaElement parent = type.getParent();
    if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.T_CONTAINER_QUALIFIED)) {
        IType declaringType = type.getDeclaringType();
        if (declaringType != null) {
            appendTypeLabel(declaringType, JavaElementLabels.T_CONTAINER_QUALIFIED | (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }
        int parentType = parent.getElementType();
        if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD
                || parentType == IJavaElement.INITIALIZER) { // anonymous or local
            appendElementLabel(parent, 0);
            fBuffer.append('.');
        }
    }

    String typeName;
    boolean isAnonymous = false;
    if (type.isLambda()) {
        typeName = "() -> {...}"; //$NON-NLS-1$
        try {
            String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
            if (superInterfaceSignatures.length > 0) {
                typeName = typeName + ' ' + getSimpleTypeName(type, superInterfaceSignatures[0]);
            }
        } catch (JavaModelException e) {
            //ignore
        }

    } else {
        typeName = getElementName(type);
        try {
            isAnonymous = type.isAnonymous();
        } catch (JavaModelException e1) {
            // should not happen, but let's play safe:
            isAnonymous = typeName.length() == 0;
        }
        if (isAnonymous) {
            try {
                if (parent instanceof IField && type.isEnum()) {
                    typeName = '{' + JavaElementLabels.ELLIPSIS_STRING + '}';
                } else {
                    String supertypeName = null;
                    String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
                    if (superInterfaceSignatures.length > 0) {
                        supertypeName = getSimpleTypeName(type, superInterfaceSignatures[0]);
                    } else {
                        String supertypeSignature = type.getSuperclassTypeSignature();
                        if (supertypeSignature != null) {
                            supertypeName = getSimpleTypeName(type, supertypeSignature);
                        }
                    }
                    if (supertypeName == null) {
                        typeName = JavaUIMessages.JavaElementLabels_anonym;
                    } else {
                        typeName = Messages.format(JavaUIMessages.JavaElementLabels_anonym_type, supertypeName);
                    }
                }
            } catch (JavaModelException e) {
                //ignore
                typeName = JavaUIMessages.JavaElementLabels_anonym;
            }
        }
    }
    fBuffer.append(typeName);

    if (getFlag(flags, JavaElementLabels.T_TYPE_PARAMETERS)) {
        if (getFlag(flags, JavaElementLabels.USE_RESOLVED) && type.isResolved()) {
            BindingKey key = new BindingKey(type.getKey());
            if (key.isParameterizedType()) {
                String[] typeArguments = key.getTypeArguments();
                appendTypeArgumentSignaturesLabel(type, typeArguments, flags);
            } else {
                String[] typeParameters = Signature.getTypeParameters(key.toSignature());
                appendTypeParameterSignaturesLabel(typeParameters, flags);
            }
        } else if (type.exists()) {
            try {
                appendTypeParametersLabels(type.getTypeParameters(), flags);
            } catch (JavaModelException e) {
                // ignore
            }
        }
    }

    // category
    if (getFlag(flags, JavaElementLabels.T_CATEGORY) && type.exists()) {
        try {
            appendCategoryLabel(type, flags);
        } catch (JavaModelException e) {
            // ignore
        }
    }

    // post qualification
    if (getFlag(flags, JavaElementLabels.T_POST_QUALIFIED)) {
        int offset = fBuffer.length();
        fBuffer.append(JavaElementLabels.CONCAT_STRING);
        IType declaringType = type.getDeclaringType();
        if (declaringType == null && type.isBinary() && isAnonymous) {
            // workaround for Bug 87165: [model] IType#getDeclaringType() does not work for anonymous binary type
            String tqn = type.getTypeQualifiedName();
            int lastDollar = tqn.lastIndexOf('$');
            if (lastDollar != 1) {
                String declaringTypeCF = tqn.substring(0, lastDollar) + ".class"; //$NON-NLS-1$
                declaringType = type.getPackageFragment().getClassFile(declaringTypeCF).getType();
                try {
                    ISourceRange typeSourceRange = type.getSourceRange();
                    if (declaringType.exists() && SourceRange.isAvailable(typeSourceRange)) {
                        IJavaElement realParent = declaringType.getTypeRoot()
                                .getElementAt(typeSourceRange.getOffset() - 1);
                        if (realParent != null) {
                            parent = realParent;
                        }
                    }
                } catch (JavaModelException e) {
                    // ignore
                }
            }
        }
        if (declaringType != null) {
            appendTypeLabel(declaringType, JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
            int parentType = parent.getElementType();
            if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD
                    || parentType == IJavaElement.INITIALIZER) { // anonymous or local
                fBuffer.append('.');
                appendElementLabel(parent, 0);
            }
        } else {
            appendPackageFragmentLabel(type.getPackageFragment(), flags & QUALIFIER_FLAGS);
        }
        //         if (getFlag(flags, JavaElementLabels.COLORIZE)) {
        //            fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE);
        //         }
    }
}

From source file:ca.uvic.chisel.javasketch.ui.internal.presentation.TraceThreadLabelProvider.java

License:Open Source License

@Override
public String getText(Object element) {
    try {//  w w  w.  ja  v a 2 s  . c  om
        IJavaElement je = null;

        if (element instanceof ICall) {
            IMessage target = ((ICall) element).getTarget();
            if (target != null) {
                je = JavaSearchUtils.findElement(target.getActivation(), new NullProgressMonitor());
            }
        } else if (element instanceof IThrow) {
            return "Exception";
        } else if (element instanceof IReply) {
            String sig = ((IReply) element).getActivation().getMethod().getSignature();
            return Signature.getSimpleName(Signature.toString(Signature.getReturnType(sig)));
        } else if (element instanceof ITraceModel) {
            je = JavaSearchUtils.findElement((ITraceModel) element, new NullProgressMonitor());
        }
        if (je != null) {
            if (je instanceof IType) {
                IType type = (IType) je;
                //qualify with all the parent type names
                String name = type.getElementName();

                if (type.isAnonymous()) {
                    name = type.getTypeQualifiedName();
                } else if (type.getOccurrenceCount() > 1) {
                    name = type.getOccurrenceCount() + name;
                }
                IJavaElement parent = type.getParent();
                while (parent != null) {
                    if (parent instanceof IType) {
                        IType pt = (IType) parent;
                        int occurrence = pt.getOccurrenceCount();
                        if (pt.isAnonymous()) {
                            name = occurrence + "$" + name;
                        } else {
                            name = ((occurrence > 1) ? occurrence : "") + pt.getElementName() + "$" + name;
                        }
                    }
                    parent = parent.getParent();
                }
                return name;
            }
            return workbenchLabelProvider.getText(je);
        } else if (element instanceof ITraceModel) {
            return uresolvedModelElement((ITraceModel) element);
        }
    } catch (InterruptedException e) {
    } catch (CoreException e) {
    } catch (Exception e) {
    }
    return (element != null) ? element.toString() : "";
}

From source file:com.aqua.wikiwizard.ObjectsJavaModel.java

License:Apache License

/**
 * Create an object from a given java type
 * @param javaObject//from  w w w. j a v a  2 s  .  c om
 *          Any given java type
 * @throws Exception
 */
public ObjectsJavaModel(IType javaObject) throws Exception {
    this.javaObject = javaObject;

    if (javaObject.getTypeQualifiedName().equals("Linux")) {
        System.out.println("");
    }

    ITypeHierarchy hierarchy = javaObject.newTypeHierarchy(null);
    IType[] superTypes = hierarchy.getAllSuperclasses(javaObject);
    IType[] allTypes = new IType[superTypes.length + 1];

    // Create a new array and add this type to the end of the list
    System.arraycopy(superTypes, 0, allTypes, 0, superTypes.length);
    allTypes[superTypes.length] = javaObject;

    ArrayList<IJavaElement> elements = new ArrayList<IJavaElement>();

    for (IType curObject : allTypes) {
        // Don't need the actual SystemObjectImpl & Object fields
        if (curObject.getElementName().equals("SystemObjectImpl")
                || curObject.getElementName().equals("Object")) {
            continue;
        }
        // Add all children of this type
        elements.addAll(Arrays.asList(curObject.getChildren()));
    }
    allChildrens = elements.toArray(new IJavaElement[elements.size()]);
}

From source file:com.arcbees.gwtp.plugin.core.presenter.CreatePresenterPage.java

License:Apache License

private ICompilationUnit getGinModule(IPackageFragment packageFragment, IProgressMonitor monitor)
        throws JavaModelException {
    if (packageFragment.getChildren() != null) {
        for (IJavaElement element : packageFragment.getChildren()) {
            if (element.getElementType() == IJavaElement.COMPILATION_UNIT) {
                ICompilationUnit cUnit = (ICompilationUnit) element;
                logger.info("Compilation Unit: " + cUnit.getElementName());
                for (IType type : cUnit.getTypes()) {
                    ITypeHierarchy hierarchy = type.newSupertypeHierarchy(monitor);
                    IType[] interfaces = hierarchy.getAllInterfaces();
                    for (IType checkInterface : interfaces) {
                        logger.info(checkInterface.getTypeQualifiedName());
                        if (checkInterface.getTypeQualifiedName().equals("GinModule")) {
                            return cUnit;
                        }//from   ww  w  .  j  a va2s  . c  o  m
                    }
                }
            }
        }
    }

    String packageName = packageFragment.getElementName();
    if (packageName.contains(".")) {
        packageName = packageName.substring(0, packageName.lastIndexOf("."));
        return getGinModule(getPackageFragmentRoot().getPackageFragment(packageName), monitor);
    }

    return null;
}

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

License:Open Source License

/**
 * Creates an IType from the given simple top level type name.
 *///ww  w.j  a v  a 2s.c  o  m
protected IType createTypeHandle(String simpleTypeName) {
    Openable openable = this.currentPossibleMatch.openable;
    if (openable instanceof CompilationUnit)
        return ((CompilationUnit) openable).getType(simpleTypeName);

    IType binaryType = ((ClassFile) openable).getType();
    String binaryTypeQualifiedName = binaryType.getTypeQualifiedName();
    if (simpleTypeName.equals(binaryTypeQualifiedName))
        return binaryType; // answer only top-level types, sometimes the classFile is for a member/local type

    // type name may be null for anonymous (see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=164791)
    String classFileName = simpleTypeName.length() == 0 ? binaryTypeQualifiedName : simpleTypeName;
    IClassFile classFile = binaryType.getPackageFragment()
            .getClassFile(classFileName + SuffixConstants.SUFFIX_STRING_class);
    return classFile.getType();
}

From source file:com.codenvy.ide.ext.java.server.javadoc.JavaElementLabelComposer.java

License:Open Source License

/**
 * Appends the label for a type. Considers the T_* flags.
 *
 * @param type the element to render/*from  w  w  w.  j ava  2  s  . co  m*/
 * @param flags the rendering flags. Flags with names starting with 'T_' are considered.
 */
public void appendTypeLabel(IType type, long flags) {

    if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED)) {
        IPackageFragment pack = type.getPackageFragment();
        if (!pack.isDefaultPackage()) {
            appendPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }
    }
    IJavaElement parent = type.getParent();
    if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.T_CONTAINER_QUALIFIED)) {
        IType declaringType = type.getDeclaringType();
        if (declaringType != null) {
            appendTypeLabel(declaringType, JavaElementLabels.T_CONTAINER_QUALIFIED | (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }
        int parentType = parent.getElementType();
        if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD
                || parentType == IJavaElement.INITIALIZER) { // anonymous or local
            appendElementLabel(parent, 0);
            fBuffer.append('.');
        }
    }

    String typeName;
    boolean isAnonymous = false;
    if (type.isLambda()) {
        typeName = "() -> {...}"; //$NON-NLS-1$
        try {
            String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
            if (superInterfaceSignatures.length > 0) {
                typeName = typeName + ' ' + getSimpleTypeName(type, superInterfaceSignatures[0]);
            }
        } catch (JavaModelException e) {
            //ignore
        }

    } else {
        typeName = getElementName(type);
        try {
            isAnonymous = type.isAnonymous();
        } catch (JavaModelException e1) {
            // should not happen, but let's play safe:
            isAnonymous = typeName.length() == 0;
        }
        if (isAnonymous) {
            try {
                if (parent instanceof IField && type.isEnum()) {
                    typeName = '{' + JavaElementLabels.ELLIPSIS_STRING + '}';
                } else {
                    String supertypeName;
                    String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
                    if (superInterfaceSignatures.length > 0) {
                        supertypeName = getSimpleTypeName(type, superInterfaceSignatures[0]);
                    } else {
                        supertypeName = getSimpleTypeName(type, type.getSuperclassTypeSignature());
                    }
                    typeName = MessageFormat.format("new {0}() '{'...}", supertypeName);
                }
            } catch (JavaModelException e) {
                //ignore
                typeName = "new Anonymous";
            }
        }
    }
    fBuffer.append(typeName);

    if (getFlag(flags, JavaElementLabels.T_TYPE_PARAMETERS)) {
        if (getFlag(flags, JavaElementLabels.USE_RESOLVED) && type.isResolved()) {
            BindingKey key = new BindingKey(type.getKey());
            if (key.isParameterizedType()) {
                String[] typeArguments = key.getTypeArguments();
                appendTypeArgumentSignaturesLabel(type, typeArguments, flags);
            } else {
                String[] typeParameters = Signature.getTypeParameters(key.toSignature());
                appendTypeParameterSignaturesLabel(typeParameters, flags);
            }
        } else if (type.exists()) {
            try {
                appendTypeParametersLabels(type.getTypeParameters(), flags);
            } catch (JavaModelException e) {
                // ignore
            }
        }
    }

    // category
    if (getFlag(flags, JavaElementLabels.T_CATEGORY) && type.exists()) {
        try {
            appendCategoryLabel(type, flags);
        } catch (JavaModelException e) {
            // ignore
        }
    }

    // post qualification
    if (getFlag(flags, JavaElementLabels.T_POST_QUALIFIED)) {
        int offset = fBuffer.length();
        fBuffer.append(JavaElementLabels.CONCAT_STRING);
        IType declaringType = type.getDeclaringType();
        if (declaringType == null && type.isBinary() && isAnonymous) {
            // workaround for Bug 87165: [model] IType#getDeclaringType() does not work for anonymous binary type
            String tqn = type.getTypeQualifiedName();
            int lastDollar = tqn.lastIndexOf('$');
            if (lastDollar != 1) {
                String declaringTypeCF = tqn.substring(0, lastDollar) + ".class"; //$NON-NLS-1$
                declaringType = type.getPackageFragment().getClassFile(declaringTypeCF).getType();
                try {
                    ISourceRange typeSourceRange = type.getSourceRange();
                    if (declaringType.exists() && SourceRange.isAvailable(typeSourceRange)) {
                        IJavaElement realParent = declaringType.getTypeRoot()
                                .getElementAt(typeSourceRange.getOffset() - 1);
                        if (realParent != null) {
                            parent = realParent;
                        }
                    }
                } catch (JavaModelException e) {
                    // ignore
                }
            }
        }
        if (declaringType != null) {
            appendTypeLabel(declaringType, JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
            int parentType = parent.getElementType();
            if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD
                    || parentType == IJavaElement.INITIALIZER) { // anonymous or local
                fBuffer.append('.');
                appendElementLabel(parent, 0);
            }
        } else {
            appendPackageFragmentLabel(type.getPackageFragment(), flags & QUALIFIER_FLAGS);
        }
        //         if (getFlag(flags, JavaElementLabels.COLORIZE)) {
        //            fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE);
        //         }
    }
}

From source file:com.drgarbage.utils.ClassFileDocumentsUtils.java

License:Apache License

/**
 * Collects recursively nested classes in the compilation unit.
 * The nested class names are type-qualified. The classes are 
 * stored in the class list given as argument.
 * For example://from w w  w . j  a  v a  2 s  .  c o  m
 * <pre>
 *      HEllo
 *      HEllo$C1
 *      HEllo$C1$C3
 * </pre>
 *  
 * @param t type representing a class
 * @param classList class list to store nested classes
 * @throws JavaModelException
 * @see IType#getTypeQualifiedName()
 */
public static void collectNestedClasses(IType t, List<String> classList) throws JavaModelException {
    classList.add(t.getTypeQualifiedName());

    /* start recursion */
    IType[] types = t.getTypes();
    for (IType e : types) {
        collectNestedClasses(e, classList);
    }
}

From source file:com.drgarbage.visualgraphic.model.ControlFlowGraphDiagramFactory.java

License:Apache License

/**
 * Return the input stream for the given class. The result may be null, if
 * the class has not been compiled./*w w  w  .j  a v  a2  s.  c om*/
 * 
 * @param type
 * @return input stream
 * @throws CoreException
 * @throws IOException
 */
private static InputStream getInputStream(IType type) throws CoreException, IOException {

    if (type.isBinary()) {
        IClassFile classFile = type.getClassFile();
        byte[] bytes = classFile.getBytes();
        return new ByteArrayInputStream(bytes);
    } else {
        String[] classpath = JavaRuntime.computeDefaultRuntimeClassPath(type.getJavaProject());
        String packageName = type.getPackageFragment().getElementName();

        // if(type.isAnonymous()){
        // Messages.info("Generate graph",
        // "Cannot generate graph for anonymous source class '"+
        // type.getTypeQualifiedName()
        // +"', because the name is unknown. The comiler generates the name automatically by inserting a $ with a constant for example $1, $2 ...");
        // return null;
        // }

        String name = type.getTypeQualifiedName();

        return JavaLangUtils.findResource(classpath, packageName, name);
    }
}

From source file:com.google.gdt.eclipse.designer.uibinder.editor.UiBinderReportEntriesProvider.java

License:Open Source License

public void addEntries(final IErrorReport report) {
    // Report entry allowing to include the corresponding java source file of the currently editing
    // UiBinder xml
    try {/*  w ww .j ava 2s .  c o  m*/
        UiBinderContext context = (UiBinderContext) GlobalStateXml.getEditorContext();
        if (context == null) {
            // not applicable
            return;
        }
        IType formType = context.getFormType();
        String name = formType.getTypeQualifiedName() + ".java";
        String source = formType.getCompilationUnit().getSource();
        report.addEntry(new StringFileReportEntry(name, source) {
            @Override
            public void write(ZipOutputStream zipStream) throws Exception {
                if (report.hasSourceFile()) {
                    // don't write java code if the user unchecked sending the editor contents
                    super.write(zipStream);
                }
            }
        });
    } catch (Throwable e) {
        DesignerPlugin.log(e);
    }
}

From source file:com.microsoft.javapkgsrv.JavaElementLabelComposer.java

License:Open Source License

/**
 * Appends the label for a type. Considers the T_* flags.
 *
 * @param type the element to render/*  w ww . j  av  a  2s .  c  o m*/
 * @param flags the rendering flags. Flags with names starting with 'T_' are considered.
 */
public void appendTypeLabel(IType type, long flags) {

    if (getFlag(flags, T_FULLY_QUALIFIED)) {
        IPackageFragment pack = type.getPackageFragment();
        if (!pack.isDefaultPackage()) {
            appendPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }
    }
    IJavaElement parent = type.getParent();
    if (getFlag(flags, T_FULLY_QUALIFIED | T_CONTAINER_QUALIFIED)) {
        IType declaringType = type.getDeclaringType();
        if (declaringType != null) {
            appendTypeLabel(declaringType, T_CONTAINER_QUALIFIED | (flags & QUALIFIER_FLAGS));
            fBuffer.append('.');
        }
        int parentType = parent.getElementType();
        if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD
                || parentType == IJavaElement.INITIALIZER) { // anonymous or local
            appendElementLabel(parent, 0);
            fBuffer.append('.');
        }
    }

    String typeName;
    boolean isAnonymous = false;
    if (type.isLambda()) {
        typeName = "() -> {...}"; //$NON-NLS-1$
        try {
            String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
            if (superInterfaceSignatures.length > 0) {
                typeName = typeName + ' ' + getSimpleTypeName(type, superInterfaceSignatures[0]);
            }
        } catch (JavaModelException e) {
            //ignore
        }

    } else {
        typeName = getElementName(type);
        try {
            isAnonymous = type.isAnonymous();
        } catch (JavaModelException e1) {
            // should not happen, but let's play safe:
            isAnonymous = typeName.length() == 0;
        }
        if (isAnonymous) {
            try {
                if (parent instanceof IField && type.isEnum()) {
                    typeName = '{' + ELLIPSIS_STRING + '}';
                } else {
                    String supertypeName;
                    String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
                    if (superInterfaceSignatures.length > 0) {
                        supertypeName = getSimpleTypeName(type, superInterfaceSignatures[0]);
                    } else {
                        supertypeName = getSimpleTypeName(type, type.getSuperclassTypeSignature());
                    }
                    typeName = "new " + supertypeName + "() {...}";
                }
            } catch (JavaModelException e) {
                //ignore
                typeName = "new Anonymous";
            }
        }
    }
    fBuffer.append(typeName);

    if (getFlag(flags, T_TYPE_PARAMETERS)) {
        if (getFlag(flags, USE_RESOLVED) && type.isResolved()) {
            BindingKey key = new BindingKey(type.getKey());
            if (key.isParameterizedType()) {
                String[] typeArguments = key.getTypeArguments();
                appendTypeArgumentSignaturesLabel(type, typeArguments, flags);
            } else {
                String[] typeParameters = Signature.getTypeParameters(key.toSignature());
                appendTypeParameterSignaturesLabel(typeParameters, flags);
            }
        } else if (type.exists()) {
            try {
                appendTypeParametersLabels(type.getTypeParameters(), flags);
            } catch (JavaModelException e) {
                // ignore
            }
        }
    }

    // category
    if (getFlag(flags, T_CATEGORY) && type.exists()) {
        try {
            appendCategoryLabel(type, flags);
        } catch (JavaModelException e) {
            // ignore
        }
    }

    // post qualification
    if (getFlag(flags, T_POST_QUALIFIED)) {
        int offset = fBuffer.length();
        fBuffer.append(CONCAT_STRING);
        IType declaringType = type.getDeclaringType();
        if (declaringType == null && type.isBinary() && isAnonymous) {
            // workaround for Bug 87165: [model] IType#getDeclaringType() does not work for anonymous binary type
            String tqn = type.getTypeQualifiedName();
            int lastDollar = tqn.lastIndexOf('$');
            if (lastDollar != 1) {
                String declaringTypeCF = tqn.substring(0, lastDollar) + ".class"; //$NON-NLS-1$
                declaringType = type.getPackageFragment().getClassFile(declaringTypeCF).getType();
                try {
                    ISourceRange typeSourceRange = type.getSourceRange();
                    if (declaringType.exists() && SourceRange.isAvailable(typeSourceRange)) {
                        IJavaElement realParent = declaringType.getTypeRoot()
                                .getElementAt(typeSourceRange.getOffset() - 1);
                        if (realParent != null) {
                            parent = realParent;
                        }
                    }
                } catch (JavaModelException e) {
                    // ignore
                }
            }
        }
        if (declaringType != null) {
            appendTypeLabel(declaringType, T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
            int parentType = parent.getElementType();
            if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD
                    || parentType == IJavaElement.INITIALIZER) { // anonymous or local
                fBuffer.append('.');
                appendElementLabel(parent, 0);
            }
        } else {
            appendPackageFragmentLabel(type.getPackageFragment(), flags & QUALIFIER_FLAGS);
        }
    }
}