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

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

Introduction

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

Prototype

char C_SUPER

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

Click Source Link

Document

Character constant indicating a bound wildcard type argument in a signature with super clause.

Usage

From source file:at.bestsolution.fxide.jdt.editor.internal.SignatureUtil.java

License:Open Source License

/**
 * Returns the upper bound of a type signature. Returns the signature of <code>java.lang.Object</code> if
 * <code>signature</code> is a lower bound (<code>? super T</code>); returns
 * the signature of the type <code>T</code> of an upper bound (<code>? extends T</code>)
 * or <code>signature</code> itself if it is not a bound signature.
 *
 * @param signature the signature/*w  w  w.  j a  va 2 s .  c  om*/
 * @return the upper bound signature of <code>signature</code>
 */
public static char[] getUpperBound(char[] signature) {
    if (signature.length < 1)
        return signature;

    if (signature[0] == Signature.C_STAR)
        return OBJECT_SIGNATURE_ARRAY;

    int superIndex = indexOf(signature, Signature.C_SUPER);
    if (superIndex == 0)
        return OBJECT_SIGNATURE_ARRAY;

    if (superIndex != -1) {
        char afterSuper = signature[superIndex + 1];
        if (afterSuper == Signature.C_STAR) {
            char[] type = new char[signature.length - 1];
            System.arraycopy(signature, 0, type, 0, superIndex);
            type[superIndex] = Signature.C_STAR;
            System.arraycopy(signature, superIndex + 2, type, superIndex + 1,
                    signature.length - superIndex - 2);
            return getUpperBound(type);
        }

        if (afterSuper == Signature.C_EXTENDS) {
            int typeEnd = typeEnd(signature, superIndex + 1);
            char[] type = new char[signature.length - (typeEnd - superIndex - 1)];
            System.arraycopy(signature, 0, type, 0, superIndex);
            type[superIndex] = Signature.C_STAR;
            System.arraycopy(signature, typeEnd, type, superIndex + 1, signature.length - typeEnd);
            return getUpperBound(type);
        }

    }

    if (signature[0] == Signature.C_EXTENDS) {
        char[] type = new char[signature.length - 1];
        System.arraycopy(signature, 1, type, 0, signature.length - 1);
        return type;
    }

    return signature;
}

From source file:at.bestsolution.fxide.jdt.editor.internal.SignatureUtil.java

License:Open Source License

/**
 * Returns the lower bound of a type signature. Returns the null type
 * signature if <code>signature</code> is a wildcard or upper bound (<code>? extends T</code>);
 * returns the signature of the type <code>T</code> of a lower bound (<code>? super T</code>)
 * or <code>signature</code> itself if it is not a bound signature.
 *
 * @param signature the signature//from   w w w  .j  a  va  2s .  c  om
 * @return the lower bound signature of <code>signature</code>
 */
public static char[] getLowerBound(char[] signature) {
    if (signature.length < 1)
        return signature;

    if (signature.length == 1 && signature[0] == Signature.C_STAR)
        return signature;

    int superIndex = indexOf(signature, Signature.C_EXTENDS);
    if (superIndex == 0)
        return NULL_TYPE_SIGNATURE_ARRAY;

    if (superIndex != -1) {
        char afterSuper = signature[superIndex + 1];
        if (afterSuper == Signature.C_STAR || afterSuper == Signature.C_EXTENDS)
            // impossible captured type
            return NULL_TYPE_SIGNATURE_ARRAY;
    }

    char[][] typeArguments = Signature.getTypeArguments(signature);
    for (int i = 0; i < typeArguments.length; i++)
        if (Arrays.equals(typeArguments[i], NULL_TYPE_SIGNATURE_ARRAY))
            return NULL_TYPE_SIGNATURE_ARRAY;

    if (signature[0] == Signature.C_SUPER) {
        char[] type = new char[signature.length - 1];
        System.arraycopy(signature, 1, type, 0, signature.length - 1);
        return type;
    }

    return signature;
}

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

License:Open Source License

protected void appendTypeSignatureLabel(IJavaElement enclosingElement, String typeSig, long flags) {
    int sigKind = Signature.getTypeSignatureKind(typeSig);
    switch (sigKind) {
    case Signature.BASE_TYPE_SIGNATURE:
        fBuffer.append(Signature.toString(typeSig));
        break;//from  w  w w. j a v  a2s .  c o m
    case Signature.ARRAY_TYPE_SIGNATURE:
        appendTypeSignatureLabel(enclosingElement, Signature.getElementType(typeSig), flags);
        for (int dim = Signature.getArrayCount(typeSig); dim > 0; dim--) {
            fBuffer.append('[').append(']');
        }
        break;
    case Signature.CLASS_TYPE_SIGNATURE:
        String baseType = getSimpleTypeName(enclosingElement, typeSig);
        fBuffer.append(baseType);

        String[] typeArguments = Signature.getTypeArguments(typeSig);
        appendTypeArgumentSignaturesLabel(enclosingElement, typeArguments, flags);
        break;
    case Signature.TYPE_VARIABLE_SIGNATURE:
        fBuffer.append(getSimpleTypeName(enclosingElement, typeSig));
        break;
    case Signature.WILDCARD_TYPE_SIGNATURE:
        char ch = typeSig.charAt(0);
        if (ch == Signature.C_STAR) { //workaround for bug 85713
            fBuffer.append('?');
        } else {
            if (ch == Signature.C_EXTENDS) {
                fBuffer.append("? extends "); //$NON-NLS-1$
                appendTypeSignatureLabel(enclosingElement, typeSig.substring(1), flags);
            } else if (ch == Signature.C_SUPER) {
                fBuffer.append("? super "); //$NON-NLS-1$
                appendTypeSignatureLabel(enclosingElement, typeSig.substring(1), flags);
            }
        }
        break;
    case Signature.CAPTURE_TYPE_SIGNATURE:
        appendTypeSignatureLabel(enclosingElement, typeSig.substring(1), flags);
        break;
    case Signature.INTERSECTION_TYPE_SIGNATURE:
        String[] typeBounds = Signature.getIntersectionTypeBounds(typeSig);
        appendTypeBoundsSignaturesLabel(enclosingElement, typeBounds, flags);
        break;
    default:
        // unknown
    }
}

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

License:Open Source License

protected void updateMatch(TypeBinding[] argumentsBinding, MatchLocator locator, char[][] patternArguments,
        boolean hasTypeParameters) {
    // Only possible if locator has an unit scope.
    if (locator.unitScope == null)
        return;/*from  ww  w.  ja v a2 s.c  o  m*/

    // First compare lengthes
    int patternTypeArgsLength = patternArguments == null ? 0 : patternArguments.length;
    int typeArgumentsLength = argumentsBinding == null ? 0 : argumentsBinding.length;

    // Initialize match rule
    int matchRule = this.match.getRule();
    if (this.match.isRaw()) {
        if (patternTypeArgsLength != 0) {
            matchRule &= ~SearchPattern.R_FULL_MATCH;
        }
    }
    if (hasTypeParameters) {
        matchRule = SearchPattern.R_ERASURE_MATCH;
    }

    // Compare arguments lengthes
    if (patternTypeArgsLength == typeArgumentsLength) {
        if (!this.match.isRaw() && hasTypeParameters) {
            // generic patterns are always not compatible match
            this.match.setRule(SearchPattern.R_ERASURE_MATCH);
            return;
        }
    } else {
        if (patternTypeArgsLength == 0) {
            if (!this.match.isRaw() || hasTypeParameters) {
                this.match.setRule(matchRule & ~SearchPattern.R_FULL_MATCH);
            }
        } else if (typeArgumentsLength == 0) {
            // raw binding is always compatible
            this.match.setRule(matchRule & ~SearchPattern.R_FULL_MATCH);
        } else {
            this.match.setRule(0); // impossible match
        }
        return;
    }
    if (argumentsBinding == null || patternArguments == null) {
        this.match.setRule(matchRule);
        return;
    }

    // Compare binding for each type argument only if pattern is not erasure only and at first level
    if (!hasTypeParameters && !this.match.isRaw() && (this.match.isEquivalent() || this.match.isExact())) {
        for (int i = 0; i < typeArgumentsLength; i++) {
            // Get parameterized type argument binding
            TypeBinding argumentBinding = argumentsBinding[i];
            if (argumentBinding instanceof CaptureBinding) {
                WildcardBinding capturedWildcard = ((CaptureBinding) argumentBinding).wildcard;
                if (capturedWildcard != null)
                    argumentBinding = capturedWildcard;
            }
            // Get binding for pattern argument
            char[] patternTypeArgument = patternArguments[i];
            char patternWildcard = patternTypeArgument[0];
            char[] patternTypeName = patternTypeArgument;
            int patternWildcardKind = -1;
            switch (patternWildcard) {
            case Signature.C_STAR:
                if (argumentBinding.isWildcard()) {
                    WildcardBinding wildcardBinding = (WildcardBinding) argumentBinding;
                    if (wildcardBinding.boundKind == Wildcard.UNBOUND)
                        continue;
                }
                matchRule &= ~SearchPattern.R_FULL_MATCH;
                continue; // unbound parameter always match
            case Signature.C_EXTENDS:
                patternWildcardKind = Wildcard.EXTENDS;
                patternTypeName = CharOperation.subarray(patternTypeArgument, 1, patternTypeArgument.length);
                break;
            case Signature.C_SUPER:
                patternWildcardKind = Wildcard.SUPER;
                patternTypeName = CharOperation.subarray(patternTypeArgument, 1, patternTypeArgument.length);
                break;
            default:
                break;
            }
            patternTypeName = Signature.toCharArray(patternTypeName);
            TypeBinding patternBinding = locator.getType(patternTypeArgument, patternTypeName);

            // If have no binding for pattern arg, then we won't be able to refine accuracy
            if (patternBinding == null) {
                if (argumentBinding.isWildcard()) {
                    WildcardBinding wildcardBinding = (WildcardBinding) argumentBinding;
                    if (wildcardBinding.boundKind == Wildcard.UNBOUND) {
                        matchRule &= ~SearchPattern.R_FULL_MATCH;
                    } else {
                        this.match.setRule(SearchPattern.R_ERASURE_MATCH);
                        return;
                    }
                }
                continue;
            }

            // Verify tha pattern binding is compatible with match type argument binding
            switch (patternWildcard) {
            case Signature.C_STAR: // UNBOUND pattern
                // unbound always match => skip to next argument
                matchRule &= ~SearchPattern.R_FULL_MATCH;
                continue;
            case Signature.C_EXTENDS: // EXTENDS pattern
                if (argumentBinding.isWildcard()) { // argument is a wildcard
                    WildcardBinding wildcardBinding = (WildcardBinding) argumentBinding;
                    // It's ok if wildcards are identical
                    if (wildcardBinding.boundKind == patternWildcardKind
                            && wildcardBinding.bound == patternBinding) {
                        continue;
                    }
                    // Look for wildcard compatibility
                    switch (wildcardBinding.boundKind) {
                    case Wildcard.EXTENDS:
                        if (wildcardBinding.bound == null
                                || wildcardBinding.bound.isCompatibleWith(patternBinding)) {
                            // valid when arg extends a subclass of pattern
                            matchRule &= ~SearchPattern.R_FULL_MATCH;
                            continue;
                        }
                        break;
                    case Wildcard.SUPER:
                        break;
                    case Wildcard.UNBOUND:
                        matchRule &= ~SearchPattern.R_FULL_MATCH;
                        continue;
                    }
                } else if (argumentBinding.isCompatibleWith(patternBinding)) {
                    // valid when arg is a subclass of pattern
                    matchRule &= ~SearchPattern.R_FULL_MATCH;
                    continue;
                }
                break;
            case Signature.C_SUPER: // SUPER pattern
                if (argumentBinding.isWildcard()) { // argument is a wildcard
                    WildcardBinding wildcardBinding = (WildcardBinding) argumentBinding;
                    // It's ok if wildcards are identical
                    if (wildcardBinding.boundKind == patternWildcardKind
                            && wildcardBinding.bound == patternBinding) {
                        continue;
                    }
                    // Look for wildcard compatibility
                    switch (wildcardBinding.boundKind) {
                    case Wildcard.EXTENDS:
                        break;
                    case Wildcard.SUPER:
                        if (wildcardBinding.bound == null
                                || patternBinding.isCompatibleWith(wildcardBinding.bound)) {
                            // valid only when arg super a superclass of pattern
                            matchRule &= ~SearchPattern.R_FULL_MATCH;
                            continue;
                        }
                        break;
                    case Wildcard.UNBOUND:
                        matchRule &= ~SearchPattern.R_FULL_MATCH;
                        continue;
                    }
                } else if (patternBinding.isCompatibleWith(argumentBinding)) {
                    // valid only when arg is a superclass of pattern
                    matchRule &= ~SearchPattern.R_FULL_MATCH;
                    continue;
                }
                break;
            default:
                if (argumentBinding.isWildcard()) {
                    WildcardBinding wildcardBinding = (WildcardBinding) argumentBinding;
                    switch (wildcardBinding.boundKind) {
                    case Wildcard.EXTENDS:
                        if (wildcardBinding.bound == null
                                || patternBinding.isCompatibleWith(wildcardBinding.bound)) {
                            // valid only when arg extends a superclass of pattern
                            matchRule &= ~SearchPattern.R_FULL_MATCH;
                            continue;
                        }
                        break;
                    case Wildcard.SUPER:
                        if (wildcardBinding.bound == null
                                || wildcardBinding.bound.isCompatibleWith(patternBinding)) {
                            // valid only when arg super a subclass of pattern
                            matchRule &= ~SearchPattern.R_FULL_MATCH;
                            continue;
                        }
                        break;
                    case Wildcard.UNBOUND:
                        matchRule &= ~SearchPattern.R_FULL_MATCH;
                        continue;
                    }
                } else if (argumentBinding == patternBinding)
                    // valid only when arg is equals to pattern
                    continue;
                break;
            }

            // Argument does not match => erasure match will be the only possible one
            this.match.setRule(SearchPattern.R_ERASURE_MATCH);
            return;
        }
    }

    // Set match rule
    this.match.setRule(matchRule);
}

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

License:Open Source License

protected int resolveLevelForType(char[] simpleNamePattern, char[] qualificationPattern,
        char[][][] patternTypeArguments, int depth, TypeBinding type) {
    // standard search with no generic additional information must succeed
    int level = resolveLevelForType(simpleNamePattern, qualificationPattern, type);
    if (level == IMPOSSIBLE_MATCH)
        return IMPOSSIBLE_MATCH;
    if (type == null || patternTypeArguments == null || patternTypeArguments.length == 0
            || depth >= patternTypeArguments.length) {
        return level;
    }/*w ww. ja  v  a 2 s  .  c  o m*/

    // if pattern is erasure match (see bug 79790), commute impossible to erasure
    int impossible = this.isErasureMatch ? ERASURE_MATCH : IMPOSSIBLE_MATCH;

    // pattern has type parameter(s) or type argument(s)
    if (type.isGenericType()) {
        // Binding is generic, get its type variable(s)
        TypeVariableBinding[] typeVariables = null;
        if (type instanceof SourceTypeBinding) {
            SourceTypeBinding sourceTypeBinding = (SourceTypeBinding) type;
            typeVariables = sourceTypeBinding.typeVariables;
        } else if (type instanceof BinaryTypeBinding) {
            BinaryTypeBinding binaryTypeBinding = (BinaryTypeBinding) type;
            if (this.mustResolve)
                typeVariables = binaryTypeBinding.typeVariables(); // TODO (frederic) verify performance
        }
        if (patternTypeArguments[depth] != null && patternTypeArguments[depth].length > 0
                && typeVariables != null && typeVariables.length > 0) {
            if (typeVariables.length != patternTypeArguments[depth].length)
                return IMPOSSIBLE_MATCH;
        }
        // TODO (frederic) do we need to verify each parameter?
        return level; // we can't do better
    }

    // raw type always match
    if (type.isRawType()) {
        return level;
    }

    // Standard types (i.e. neither generic nor parameterized nor raw types)
    // cannot match pattern with type parameters or arguments
    TypeBinding leafType = type.leafComponentType();
    if (!leafType.isParameterizedType()) {
        return (patternTypeArguments[depth] == null || patternTypeArguments[depth].length == 0) ? level
                : IMPOSSIBLE_MATCH;
    }

    // Parameterized type
    ParameterizedTypeBinding paramTypeBinding = (ParameterizedTypeBinding) leafType;

    // Compare arguments only if there ones on both sides
    if (patternTypeArguments[depth] != null && patternTypeArguments[depth].length > 0
            && paramTypeBinding.arguments != null && paramTypeBinding.arguments.length > 0) {

        // type parameters length must match at least specified type names length
        int length = patternTypeArguments[depth].length;
        if (paramTypeBinding.arguments.length != length)
            return IMPOSSIBLE_MATCH;

        // verify each pattern type parameter
        nextTypeArgument: for (int i = 0; i < length; i++) {
            char[] patternTypeArgument = patternTypeArguments[depth][i];
            TypeBinding argTypeBinding = paramTypeBinding.arguments[i];
            // get corresponding pattern wildcard
            switch (patternTypeArgument[0]) {
            case Signature.C_STAR: // unbound parameter always match
            case Signature.C_SUPER: // needs pattern type parameter binding
                // skip to next type argument as it will be resolved later
                continue nextTypeArgument;
            case Signature.C_EXTENDS:
                // remove wildcard from patter type argument
                patternTypeArgument = CharOperation.subarray(patternTypeArgument, 1,
                        patternTypeArgument.length);
                break;
            default:
                // no wildcard
                break;
            }
            // get pattern type argument from its signature
            patternTypeArgument = Signature.toCharArray(patternTypeArgument);
            if (!this.isCaseSensitive)
                patternTypeArgument = CharOperation.toLowerCase(patternTypeArgument);
            boolean patternTypeArgHasAnyChars = CharOperation.contains(new char[] { '*', '?' },
                    patternTypeArgument);

            // Verify that names match...
            // ...special case for wildcard
            if (argTypeBinding instanceof CaptureBinding) {
                WildcardBinding capturedWildcard = ((CaptureBinding) argTypeBinding).wildcard;
                if (capturedWildcard != null)
                    argTypeBinding = capturedWildcard;
            }
            if (argTypeBinding.isWildcard()) {
                WildcardBinding wildcardBinding = (WildcardBinding) argTypeBinding;
                switch (wildcardBinding.boundKind) {
                case Wildcard.EXTENDS:
                    // Invalid if type argument is not exact
                    if (patternTypeArgHasAnyChars)
                        return impossible;
                    continue nextTypeArgument;
                case Wildcard.UNBOUND:
                    // there's no bound name to match => valid
                    continue nextTypeArgument;
                }
                // Look if bound name match pattern type argument
                ReferenceBinding boundBinding = (ReferenceBinding) wildcardBinding.bound;
                if (CharOperation.match(patternTypeArgument, boundBinding.shortReadableName(),
                        this.isCaseSensitive)
                        || CharOperation.match(patternTypeArgument, boundBinding.readableName(),
                                this.isCaseSensitive)) {
                    // found name in hierarchy => match
                    continue nextTypeArgument;
                }

                // If pattern is not exact then match fails
                if (patternTypeArgHasAnyChars)
                    return impossible;

                // Look for bound name in type argument superclasses
                boundBinding = boundBinding.superclass();
                while (boundBinding != null) {
                    if (CharOperation.equals(patternTypeArgument, boundBinding.shortReadableName(),
                            this.isCaseSensitive)
                            || CharOperation.equals(patternTypeArgument, boundBinding.readableName(),
                                    this.isCaseSensitive)) {
                        // found name in hierarchy => match
                        continue nextTypeArgument;
                    } else if (boundBinding.isLocalType() || boundBinding.isMemberType()) {
                        // for local or member type, verify also source name (bug 81084)
                        if (CharOperation.match(patternTypeArgument, boundBinding.sourceName(),
                                this.isCaseSensitive))
                            continue nextTypeArgument;
                    }
                    boundBinding = boundBinding.superclass();
                }
                return impossible;
            }

            // See if names match
            if (CharOperation.match(patternTypeArgument, argTypeBinding.shortReadableName(),
                    this.isCaseSensitive)
                    || CharOperation.match(patternTypeArgument, argTypeBinding.readableName(),
                            this.isCaseSensitive)) {
                continue nextTypeArgument;
            } else if (argTypeBinding.isLocalType() || argTypeBinding.isMemberType()) {
                // for local or member type, verify also source name (bug 81084)
                if (CharOperation.match(patternTypeArgument, argTypeBinding.sourceName(), this.isCaseSensitive))
                    continue nextTypeArgument;
            }

            // If pattern is not exact then match fails
            if (patternTypeArgHasAnyChars)
                return impossible;

            // Scan hierarchy
            TypeBinding leafTypeBinding = argTypeBinding.leafComponentType();
            if (leafTypeBinding.isBaseType())
                return impossible;
            ReferenceBinding refBinding = ((ReferenceBinding) leafTypeBinding).superclass();
            while (refBinding != null) {
                if (CharOperation.equals(patternTypeArgument, refBinding.shortReadableName(),
                        this.isCaseSensitive)
                        || CharOperation.equals(patternTypeArgument, refBinding.readableName(),
                                this.isCaseSensitive)) {
                    // found name in hierarchy => match
                    continue nextTypeArgument;
                } else if (refBinding.isLocalType() || refBinding.isMemberType()) {
                    // for local or member type, verify also source name (bug 81084)
                    if (CharOperation.match(patternTypeArgument, refBinding.sourceName(), this.isCaseSensitive))
                        continue nextTypeArgument;
                }
                refBinding = refBinding.superclass();
            }
            return impossible;
        }
    }

    // Recurse on enclosing type
    TypeBinding enclosingType = paramTypeBinding.enclosingType();
    if (enclosingType != null && enclosingType.isParameterizedType() && depth < patternTypeArguments.length
            && qualificationPattern != null) {
        int lastDot = CharOperation.lastIndexOf('.', qualificationPattern);
        char[] enclosingQualificationPattern = lastDot == -1 ? null
                : CharOperation.subarray(qualificationPattern, 0, lastDot);
        char[] enclosingSimpleNamePattern = lastDot == -1 ? qualificationPattern
                : CharOperation.subarray(qualificationPattern, lastDot + 1, qualificationPattern.length);
        int enclosingLevel = resolveLevelForType(enclosingSimpleNamePattern, enclosingQualificationPattern,
                patternTypeArguments, depth + 1, enclosingType);
        if (enclosingLevel == impossible)
            return impossible;
        if (enclosingLevel == IMPOSSIBLE_MATCH)
            return IMPOSSIBLE_MATCH;
    }
    return level;
}

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   ww w .j  a  va  2  s.c o m*/
            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 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.java  2 s.co  m*/
    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 appendTypeArgumentSignatureForAnchor(char[] string, int start, StringBuffer buffer) {
    // need a minimum 1 char
    if (start >= string.length) {
        throw new IllegalArgumentException();
    }/* w ww .  j  av a  2s.co  m*/
    char c = string[start];
    switch (c) {
    case Signature.C_STAR:
        return start;
    case Signature.C_EXTENDS:
        return appendTypeSignatureForAnchor(string, start + 1, buffer, false);
    case Signature.C_SUPER:
        return appendTypeSignatureForAnchor(string, start + 1, buffer, false);
    default:
        return appendTypeSignatureForAnchor(string, start, buffer, false);
    }
}

From source file:com.codenvy.ide.ext.java.server.SourcesFromBytecodeGenerator.java

License:Open Source License

protected void appendTypeSignatureLabel(IJavaElement enclosingElement, String typeSig, long flags,
        StringBuilder builder) {/*from  www . ja v  a  2s  .  c  om*/
    int sigKind = Signature.getTypeSignatureKind(typeSig);
    switch (sigKind) {
    case Signature.BASE_TYPE_SIGNATURE:
        builder.append(Signature.toString(typeSig));
        break;
    case Signature.ARRAY_TYPE_SIGNATURE:
        appendTypeSignatureLabel(enclosingElement, Signature.getElementType(typeSig), flags, builder);
        for (int dim = Signature.getArrayCount(typeSig); dim > 0; dim--) {
            builder.append('[').append(']');
        }
        break;
    case Signature.CLASS_TYPE_SIGNATURE:
        String baseType = getSimpleTypeName(enclosingElement, typeSig);
        builder.append(baseType);

        String[] typeArguments = Signature.getTypeArguments(typeSig);
        appendTypeArgumentSignaturesLabel(enclosingElement, typeArguments, flags, builder);
        break;
    case Signature.TYPE_VARIABLE_SIGNATURE:
        builder.append(getSimpleTypeName(enclosingElement, typeSig));
        break;
    case Signature.WILDCARD_TYPE_SIGNATURE:
        char ch = typeSig.charAt(0);
        if (ch == Signature.C_STAR) { //workaround for bug 85713
            builder.append('?');
        } else {
            if (ch == Signature.C_EXTENDS) {
                builder.append("? extends "); //$NON-NLS-1$
                appendTypeSignatureLabel(enclosingElement, typeSig.substring(1), flags, builder);
            } else if (ch == Signature.C_SUPER) {
                builder.append("? super "); //$NON-NLS-1$
                appendTypeSignatureLabel(enclosingElement, typeSig.substring(1), flags, builder);
            }
        }
        break;
    case Signature.CAPTURE_TYPE_SIGNATURE:
        appendTypeSignatureLabel(enclosingElement, typeSig.substring(1), flags, builder);
        break;
    case Signature.INTERSECTION_TYPE_SIGNATURE:
        String[] typeBounds = Signature.getIntersectionTypeBounds(typeSig);
        appendTypeBoundsSignaturesLabel(enclosingElement, typeBounds, flags, builder);
        break;
    default:
        // unknown
    }
}

From source file:com.sabre.buildergenerator.eclipsejavamodel.ModelHelper.java

License:Open Source License

public String getTypeParameterSignature(String resolvedTypeSignature) {
    String[] typeArguments = Signature.getTypeArguments(resolvedTypeSignature);

    if (typeArguments != null && typeArguments.length == 1) {
        String fieldTypeArgumentSignature = typeArguments[0];

        return fieldTypeArgumentSignature.charAt(0) == Signature.C_EXTENDS
                || fieldTypeArgumentSignature.charAt(0) == Signature.C_SUPER
                || fieldTypeArgumentSignature.charAt(0) == Signature.C_CAPTURE
                        ? fieldTypeArgumentSignature.substring(1)
                        : fieldTypeArgumentSignature.equals(String.valueOf(Signature.C_STAR)) ? OBJECT_SIGNATURE
                                : fieldTypeArgumentSignature;
    }//from www.ja  v a2  s . com

    return OBJECT_SIGNATURE;
}