Example usage for org.eclipse.jdt.core Signature C_RESOLVED

List of usage examples for org.eclipse.jdt.core Signature C_RESOLVED

Introduction

In this page you can find the example usage for org.eclipse.jdt.core Signature C_RESOLVED.

Prototype

char C_RESOLVED

To view the source code for org.eclipse.jdt.core Signature C_RESOLVED.

Click Source Link

Document

Character constant indicating the start of a resolved, named type in a signature.

Usage

From source file:at.bestsolution.fxide.jdt.corext.util.MethodOverrideTester.java

License:Open Source License

private StringBuffer internalGetSubstitutedTypeName(String typeSig, IMember context, boolean erasure,
        StringBuffer buf) throws JavaModelException {
    int sigKind = Signature.getTypeSignatureKind(typeSig);
    switch (sigKind) {
    case Signature.BASE_TYPE_SIGNATURE:
        return buf.append(Signature.toString(typeSig));
    case Signature.ARRAY_TYPE_SIGNATURE:
        internalGetSubstitutedTypeName(Signature.getElementType(typeSig), context, erasure, buf);
        for (int i = Signature.getArrayCount(typeSig); i > 0; i--) {
            buf.append('[').append(']');
        }//from  w w w .j  av  a 2s .c om
        return buf;
    case Signature.CLASS_TYPE_SIGNATURE: {
        String erasureSig = Signature.getTypeErasure(typeSig);
        String erasureName = Signature.getSimpleName(Signature.toString(erasureSig));

        char ch = erasureSig.charAt(0);
        if (ch == Signature.C_RESOLVED) {
            buf.append(erasureName);
        } else if (ch == Signature.C_UNRESOLVED) { // could be a type variable
            if (erasure) {
                buf.append(getVariableErasure(context, erasureName));
            } else {
                buf.append(getVariableSubstitution(context, erasureName));
            }
        } else {
            Assert.isTrue(false, "Unknown class type signature"); //$NON-NLS-1$
        }
        if (!erasure) {
            String[] typeArguments = Signature.getTypeArguments(typeSig);
            if (typeArguments.length > 0) {
                buf.append('<');
                for (int i = 0; i < typeArguments.length; i++) {
                    if (i > 0) {
                        buf.append(',');
                    }
                    internalGetSubstitutedTypeName(typeArguments[i], context, erasure, buf);
                }
                buf.append('>');
            }
        }
        return buf;
    }
    case Signature.TYPE_VARIABLE_SIGNATURE:
        String varName = Signature.toString(typeSig);
        if (erasure) {
            return buf.append(getVariableErasure(context, varName));
        } else {
            return buf.append(getVariableSubstitution(context, varName));
        }
    case Signature.WILDCARD_TYPE_SIGNATURE: {
        buf.append('?');
        char ch = typeSig.charAt(0);
        if (ch == Signature.C_STAR) {
            return buf;
        } else if (ch == Signature.C_EXTENDS) {
            buf.append(" extends "); //$NON-NLS-1$
        } else {
            buf.append(" super "); //$NON-NLS-1$
        }
        return internalGetSubstitutedTypeName(typeSig.substring(1), context, erasure, buf);
    }
    case Signature.CAPTURE_TYPE_SIGNATURE:
        return internalGetSubstitutedTypeName(typeSig.substring(1), context, erasure, buf);
    default:
        Assert.isTrue(false, "Unhandled type signature kind"); //$NON-NLS-1$
        return buf;
    }
}

From source file:ca.mcgill.cs.swevo.jayfx.ASTCrawler.java

License:Open Source License

/**
 * Converts a type binding into a parameter-style binding Please see JVM
 * Specification 4.3.2/* w  w  w .jav  a  2  s .c o m*/
 * {@link http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#84645}
 * .
 * 
 * @param pBinding
 *            The binding to convert. Cannot be null.
 * @return A class element representing this binding. Cannot be null.
 */
private static IElement convertParameterTypeBinding(final ITypeBinding pBinding) {
    ASTCrawler.checkForNull(pBinding);
    if (pBinding.getDimensions() == 0 && !pBinding.isPrimitive())
        return FlyweightElementFactory.getElement(Category.CLASS,
                Signature.C_RESOLVED + pBinding.getBinaryName() + Signature.C_SEMICOLON);
    else
        return FlyweightElementFactory.getElement(Category.CLASS, pBinding.getBinaryName());
}

From source file:ca.mcgill.cs.swevo.jayfx.FastConverter.java

License:Open Source License

public String resolveType(String pType, final IType pEnclosingType) throws ConversionException {
    String lReturn = "";
    int lDepth = 0;
    int lIndex = 0;
    while (pType.charAt(lIndex) == Signature.C_ARRAY) {
        lDepth++;/*w w  w.  ja v a 2s . c  om*/
        lIndex++;
    }

    if (pType.charAt(lIndex) == Signature.C_BYTE || pType.charAt(lIndex) == Signature.C_CHAR
            || pType.charAt(lIndex) == Signature.C_DOUBLE || pType.charAt(lIndex) == Signature.C_FLOAT
            || pType.charAt(lIndex) == Signature.C_INT || pType.charAt(lIndex) == Signature.C_LONG
            || pType.charAt(lIndex) == Signature.C_SHORT || pType.charAt(lIndex) == Signature.C_VOID
            || pType.charAt(lIndex) == Signature.C_BOOLEAN || pType.charAt(lIndex) == Signature.C_RESOLVED)
        lReturn = pType;
    else
        try {
            pType = Signature.getTypeErasure(pType);
            final int lIndex2 = pType.indexOf(Signature.C_NAME_END);
            final String lType = pType.substring(lIndex + 1, lIndex2);
            final String[][] lTypes = pEnclosingType.resolveType(lType);
            if (lTypes == null)
                throw new ConversionException("Cannot convert type " + lType + " in " + pEnclosingType);
            if (lTypes.length != 1)
                throw new ConversionException("Cannot convert type " + lType + " in " + pEnclosingType);
            for (int i = 0; i < lDepth; i++)
                lReturn += "[";
            lReturn += "L" + lTypes[0][0] + "." + lTypes[0][1].replace('.', '$') + ";";
        } catch (final JavaModelException pException) {
            throw new ConversionException(pException);
        }
    return lReturn;
}

From source file:com.astamuse.asta4d.ide.eclipse.util.JdtUtils.java

License:Open Source License

public static String resolveClassNameBySignature(String className, IType type) {
    // in case the type is already resolved
    if (className != null && className.length() > 0 && className.charAt(0) == Signature.C_RESOLVED) {
        return Signature.toString(className).replace('$', '.');
    }//w ww  .j  a v a  2 s  .  co  m
    // otherwise do the resolving
    else {
        className = Signature.toString(className).replace('$', '.');
        return resolveClassName(className, type);
    }
}

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

License:Open Source License

private int getUnqualifiedTypeSignature(String qualifiedTypeSig, int start, int length,
        StringBuffer unqualifiedTypeSig, boolean noDollar) {
    char firstChar = qualifiedTypeSig.charAt(start);
    int end = start + 1;
    boolean sigStart = false;
    firstPass: for (int i = start; i < length; i++) {
        char current = qualifiedTypeSig.charAt(i);
        switch (current) {
        case Signature.C_ARRAY:
        case Signature.C_SUPER:
        case Signature.C_EXTENDS:
            unqualifiedTypeSig.append(current);
            start = i + 1;/*from  w  w  w. ja  v  a2s .  c om*/
            end = start + 1;
            firstChar = qualifiedTypeSig.charAt(start);
            break;
        case Signature.C_RESOLVED:
        case Signature.C_UNRESOLVED:
        case Signature.C_TYPE_VARIABLE:
            if (!sigStart) {
                start = ++i;
                sigStart = true;
            }
            break;
        case Signature.C_NAME_END:
        case Signature.C_GENERIC_START:
            end = i;
            break firstPass;
        case Signature.C_STAR:
            unqualifiedTypeSig.append(current);
            start = i + 1;
            end = start + 1;
            firstChar = qualifiedTypeSig.charAt(start);
            break;
        case Signature.C_GENERIC_END:
            return i;
        case Signature.C_DOT:
            start = ++i;
            break;
        case Signature.C_BOOLEAN:
        case Signature.C_BYTE:
        case Signature.C_CHAR:
        case Signature.C_DOUBLE:
        case Signature.C_FLOAT:
        case Signature.C_INT:
        case Signature.C_LONG:
        case Signature.C_SHORT:
            if (!sigStart) {
                unqualifiedTypeSig.append(current);
                return i + 1;
            }
        }
    }
    switch (firstChar) {
    case Signature.C_RESOLVED:
    case Signature.C_UNRESOLVED:
    case Signature.C_TYPE_VARIABLE:
        unqualifiedTypeSig.append(Signature.C_UNRESOLVED);
        if (noDollar) {
            int lastDollar = qualifiedTypeSig.lastIndexOf('$', end);
            if (lastDollar > start)
                start = lastDollar + 1;
        }
        for (int i = start; i < length; i++) {
            char current = qualifiedTypeSig.charAt(i);
            switch (current) {
            case Signature.C_GENERIC_START:
                unqualifiedTypeSig.append(current);
                i++;
                do {
                    i = getUnqualifiedTypeSignature(qualifiedTypeSig, i, length, unqualifiedTypeSig, noDollar);
                } while (qualifiedTypeSig.charAt(i) != Signature.C_GENERIC_END);
                unqualifiedTypeSig.append(Signature.C_GENERIC_END);
                break;
            case Signature.C_NAME_END:
                unqualifiedTypeSig.append(current);
                return i + 1;
            default:
                unqualifiedTypeSig.append(current);
                break;
            }
        }
        return length;
    default:
        // primitive type or wildcard
        unqualifiedTypeSig.append(qualifiedTypeSig.substring(start, end));
        return end;
    }
}

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

License:Open Source License

private static void appendClassTypeSignature(char[] string, int start, StringBuffer buffer, boolean compact) {
    char c = string[start];
    if (c != Signature.C_RESOLVED) {
        return;/*from w  w w.  j  av  a  2  s .com*/
    }
    int p = start + 1;
    int checkpoint = buffer.length();
    while (true) {
        c = string[p];
        switch (c) {
        case Signature.C_SEMICOLON:
            // all done
            return;
        case Signature.C_DOT:
        case '/':
            // erase package prefix
            if (compact) {
                buffer.setLength(checkpoint);
            } else {
                buffer.append('.');
            }
            break;
        case Signature.C_DOLLAR:
            /**
             * Convert '$' in resolved type signatures into '.'. NOTE: This assumes that the type signature is an inner type
             * signature. This is true in most cases, but someone can define a non-inner type name containing a '$'.
             */
            buffer.append('.');
            break;
        default:
            buffer.append(c);
        }
        p++;
    }
}

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

License:Open Source License

static void appendTypeSignature(char[] string, int start, StringBuffer buffer, boolean compact) {
    char c = string[start];
    switch (c) {//from w  ww  . j av  a 2s  . c  om
    case Signature.C_ARRAY:
        appendArrayTypeSignature(string, start, buffer, compact);
        break;
    case Signature.C_RESOLVED:
        appendClassTypeSignature(string, start, buffer, compact);
        break;
    case Signature.C_TYPE_VARIABLE:
        int e = org.eclipse.jdt.internal.compiler.util.Util.scanTypeVariableSignature(string, start);
        buffer.append(string, start + 1, e - start - 1);
        break;
    case Signature.C_BOOLEAN:
        buffer.append(BOOLEAN);
        break;
    case Signature.C_BYTE:
        buffer.append(BYTE);
        break;
    case Signature.C_CHAR:
        buffer.append(CHAR);
        break;
    case Signature.C_DOUBLE:
        buffer.append(DOUBLE);
        break;
    case Signature.C_FLOAT:
        buffer.append(FLOAT);
        break;
    case Signature.C_INT:
        buffer.append(INT);
        break;
    case Signature.C_LONG:
        buffer.append(LONG);
        break;
    case Signature.C_SHORT:
        buffer.append(SHORT);
        break;
    case Signature.C_VOID:
        buffer.append(VOID);
        break;
    }
}

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

License:Open Source License

private static int appendTypeSignatureForAnchor(char[] string, int start, StringBuffer buffer,
        boolean isVarArgs) {
    // need a minimum 1 char
    if (start >= string.length) {
        throw new IllegalArgumentException();
    }/*  w  w  w . j ava  2  s.c om*/
    char c = string[start];
    if (isVarArgs) {
        switch (c) {
        case Signature.C_ARRAY:
            return appendArrayTypeSignatureForAnchor(string, start, buffer, true);
        case Signature.C_RESOLVED:
        case Signature.C_TYPE_VARIABLE:
        case Signature.C_BOOLEAN:
        case Signature.C_BYTE:
        case Signature.C_CHAR:
        case Signature.C_DOUBLE:
        case Signature.C_FLOAT:
        case Signature.C_INT:
        case Signature.C_LONG:
        case Signature.C_SHORT:
        case Signature.C_VOID:
        case Signature.C_STAR:
        case Signature.C_EXTENDS:
        case Signature.C_SUPER:
        case Signature.C_CAPTURE:
        default:
            throw new IllegalArgumentException(); // a var args is an array type
        }
    } else {
        switch (c) {
        case Signature.C_ARRAY:
            return appendArrayTypeSignatureForAnchor(string, start, buffer, false);
        case Signature.C_RESOLVED:
            return appendClassTypeSignatureForAnchor(string, start, buffer);
        case Signature.C_TYPE_VARIABLE:
            int e = org.eclipse.jdt.internal.compiler.util.Util.scanTypeVariableSignature(string, start);
            buffer.append(string, start + 1, e - start - 1);
            return e;
        case Signature.C_BOOLEAN:
            buffer.append(BOOLEAN);
            return start;
        case Signature.C_BYTE:
            buffer.append(BYTE);
            return start;
        case Signature.C_CHAR:
            buffer.append(CHAR);
            return start;
        case Signature.C_DOUBLE:
            buffer.append(DOUBLE);
            return start;
        case Signature.C_FLOAT:
            buffer.append(FLOAT);
            return start;
        case Signature.C_INT:
            buffer.append(INT);
            return start;
        case Signature.C_LONG:
            buffer.append(LONG);
            return start;
        case Signature.C_SHORT:
            buffer.append(SHORT);
            return start;
        case Signature.C_VOID:
            buffer.append(VOID);
            return start;
        case Signature.C_CAPTURE:
            return appendCaptureTypeSignatureForAnchor(string, start, buffer);
        case Signature.C_STAR:
        case Signature.C_EXTENDS:
        case Signature.C_SUPER:
            return appendTypeArgumentSignatureForAnchor(string, start, buffer);
        default:
            throw new IllegalArgumentException();
        }
    }
}

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

License:Open Source License

private static int appendClassTypeSignatureForAnchor(char[] string, int start, StringBuffer buffer) {
    // need a minimum 3 chars "Lx;"
    if (start >= string.length - 2) {
        throw new IllegalArgumentException();
    }// w  w w  . jav  a2s. co  m
    // must start in "L" or "Q"
    char c = string[start];
    if (c != Signature.C_RESOLVED && c != Signature.C_UNRESOLVED) {
        throw new IllegalArgumentException();
    }
    int p = start + 1;
    while (true) {
        if (p >= string.length) {
            throw new IllegalArgumentException();
        }
        c = string[p];
        switch (c) {
        case Signature.C_SEMICOLON:
            // all done
            return p;
        case Signature.C_GENERIC_START:
            int e = scanGenericEnd(string, p + 1);
            // once we hit type arguments there are no more package prefixes
            p = e;
            break;
        case Signature.C_DOT:
            buffer.append('.');
            break;
        case '/':
            buffer.append('/');
            break;
        case Signature.C_DOLLAR:
            // once we hit "$" there are no more package prefixes
            /**
             * Convert '$' in resolved type signatures into '.'. NOTE: This assumes that the type signature is an inner type
             * signature. This is true in most cases, but someone can define a non-inner type name containing a '$'.
             */
            buffer.append('.');
            break;
        default:
            buffer.append(c);
        }
        p++;
    }
}

From source file:com.google.inject.tools.ideplugin.eclipse.TypeUtil.java

License:Open Source License

static IType resolveType(final IType owningType, final String typeSignature) {
    // if type signature is already resolved then simply look it up
    if (typeSignature.charAt(0) == Signature.C_RESOLVED
            || (Signature.getTypeSignatureKind(typeSignature) == Signature.ARRAY_TYPE_SIGNATURE
                    && Signature.getElementType(typeSignature).charAt(0) == Signature.C_RESOLVED)) {
        IType type = null;/*from w  w  w  . j a  v a  2s.c o m*/

        try {
            type = owningType.getJavaProject().findType(getFullyQualifiedName(typeSignature));
        } catch (JavaModelException jme) {
            // do nothing; return type == null;
        }

        return type;
    }

    return resolveTypeRelative(owningType, typeSignature);
}