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

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

Introduction

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

Prototype

char C_DOT

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

Click Source Link

Document

Character constant indicating the dot in a signature.

Usage

From source file:com.codenvy.ide.ext.java.server.internal.compiler.parser.SourceTypeConverter.java

License:Open Source License

private SourceTypeConverter(int flags, ProblemReporter problemReporter) {
    super(problemReporter, Signature.C_DOT);
    this.flags = flags;
}

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

License:Open Source License

/**
 * NOT API, public only for access by Unit tests.
 * Converts these type names to unqualified signatures. This needs to be done in order to be consistent
 * with the way the source range is retrieved.
 *
 * @see org.eclipse.jdt.internal.core.SourceMapper#getUnqualifiedMethodHandle
 * @see org.eclipse.jdt.core.Signature/*from  ww  w  .j a v a  2s .com*/
 */
public String[] convertTypeNamesToSigs(char[][] typeNames) {
    if (typeNames == null)
        return CharOperation.NO_STRINGS;
    int n = typeNames.length;
    if (n == 0)
        return CharOperation.NO_STRINGS;
    String[] typeSigs = new String[n];
    for (int i = 0; i < n; ++i) {
        char[] typeSig = Signature.createCharArrayTypeSignature(typeNames[i], false);

        // transforms signatures that contains a qualification into unqualified signatures
        // e.g. "QX<+QMap.Entry;>;" becomes "QX<+QEntry;>;"
        StringBuffer simpleTypeSig = null;
        int start = 0;
        int dot = -1;
        int length = typeSig.length;
        for (int j = 0; j < length; j++) {
            switch (typeSig[j]) {
            case Signature.C_UNRESOLVED:
                if (simpleTypeSig != null)
                    simpleTypeSig.append(typeSig, start, j - start);
                start = j;
                break;
            case Signature.C_DOT:
                dot = j;
                break;
            case Signature.C_GENERIC_START:
                int matchingEnd = findMatchingGenericEnd(typeSig, j + 1);
                if (matchingEnd > 0 && matchingEnd + 1 < length
                        && typeSig[matchingEnd + 1] == Signature.C_DOT) {
                    // found Head<Param>.Tail -> discard everything except Tail
                    if (simpleTypeSig == null)
                        simpleTypeSig = new StringBuffer().append(typeSig, 0, start);
                    simpleTypeSig.append(Signature.C_UNRESOLVED);
                    start = j = matchingEnd + 2;
                    break;
                }
                //$FALL-THROUGH$
            case Signature.C_NAME_END:
                if (dot > start) {
                    if (simpleTypeSig == null)
                        simpleTypeSig = new StringBuffer().append(typeSig, 0, start);
                    simpleTypeSig.append(Signature.C_UNRESOLVED);
                    simpleTypeSig.append(typeSig, dot + 1, j - dot - 1);
                    start = j;
                }
                break;
            }
        }
        if (simpleTypeSig == null) {
            typeSigs[i] = new String(typeSig);
        } else {
            simpleTypeSig.append(typeSig, start, length - start);
            typeSigs[i] = simpleTypeSig.toString();
        }
    }
    return typeSigs;
}

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  .j a va2  s.  com
            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;//  ww  w . j  a v  a  2  s  .c om
    }
    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

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. j a v  a 2  s  .  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.mountainminds.eclemma.internal.core.analysis.SignatureResolver.java

License:Open Source License

private static final boolean resolveType(final IType scope, final String identifier, final StringBuffer result)
        throws JavaModelException {
    final String[][] types = scope.resolveType(Signature.getTypeErasure(identifier));
    if (types == null || types.length != 1) {
        return false;
    }//from   w w  w.j  a va2s  .  c  o m
    result.append(Signature.C_RESOLVED);
    final String qualifier = types[0][0];
    if (qualifier.length() > 0) {
        replace(qualifier, Signature.C_DOT, SLASH, result);
        result.append(SLASH);
    }
    replace(types[0][1], Signature.C_DOT, Signature.C_DOLLAR, result);
    result.append(Signature.C_SEMICOLON);
    return true;
}

From source file:de.loskutov.bco.ui.JdtUtils.java

License:Open Source License

/**
 * @param type//  w  w  w  . j a  v a  2 s.  com
 * @return full qualified, resolved type name in bytecode notation
 */
private static String getTypeSignature(IType type) {
    if (type == null) {
        return null;
    }
    /*
     * getFullyQualifiedName() returns name, where package separator is '.',
     * but we need '/' for bytecode. The hack with ',' is to use a character
     * which is not allowed as Java char to be sure not to replace too much
     */
    String name = type.getFullyQualifiedName(',');
    // replace package separators
    name = name.replace(Signature.C_DOT, PACKAGE_SEPARATOR);
    // replace class separators
    name = name.replace(',', TYPE_SEPARATOR);
    return Signature.C_RESOLVED + name + Signature.C_SEMICOLON;
}

From source file:de.loskutov.bco.ui.JdtUtils.java

License:Open Source License

/**
 * Concatenates package and class name. Both strings can be empty or <code>null</code>.
 *//*from   w  w w  .  ja  v a2  s .c o m*/
private static String concatenateName(String packageName, String className) {
    StringBuffer buf = new StringBuffer();
    if (packageName != null && packageName.length() > 0) {
        packageName = packageName.replace(Signature.C_DOT, PACKAGE_SEPARATOR);
        buf.append(packageName);
    }
    if (className != null && className.length() > 0) {
        if (buf.length() > 0) {
            buf.append(PACKAGE_SEPARATOR);
        }
        className = className.replace(Signature.C_DOT, TYPE_SEPARATOR);
        buf.append(className);
    }
    return buf.toString();
}

From source file:de.loskutov.bco.ui.JdtUtils.java

License:Open Source License

/**
 * @param javaElement// www .  j  a v  a2s .  c o m
 * @return absolute path of generated bytecode package for given element
 * @throws JavaModelException
 */
private static String getPackageOutputPath(IJavaElement javaElement) throws JavaModelException {
    String dir = ""; //$NON-NLS-1$
    if (javaElement == null) {
        return dir;
    }

    IJavaProject project = javaElement.getJavaProject();

    if (project == null) {
        return dir;
    }
    // default bytecode location
    IPath path = project.getOutputLocation();

    IResource resource = javaElement.getUnderlyingResource();
    if (resource == null) {
        return dir;
    }
    // resolve multiple output locations here
    if (project.exists() && project.getProject().isOpen()) {
        IClasspathEntry entries[] = project.getRawClasspath();
        for (int i = 0; i < entries.length; i++) {
            IClasspathEntry classpathEntry = entries[i];
            if (classpathEntry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
                IPath outputPath = classpathEntry.getOutputLocation();
                if (outputPath != null && classpathEntry.getPath().isPrefixOf(resource.getFullPath())) {
                    path = outputPath;
                    break;
                }
            }
        }
    }

    if (path == null) {
        // check the default location if not already included
        IPath def = project.getOutputLocation();
        if (def != null && def.isPrefixOf(resource.getFullPath())) {
            path = def;
        }
    }

    if (path == null) {
        return dir;
    }

    IWorkspace workspace = ResourcesPlugin.getWorkspace();

    if (!project.getPath().equals(path)) {
        IFolder outputFolder = workspace.getRoot().getFolder(path);
        if (outputFolder != null) {
            // linked resources will be resolved here!
            IPath rawPath = outputFolder.getRawLocation();
            if (rawPath != null) {
                path = rawPath;
            }
        }
    } else {
        path = project.getProject().getLocation();
    }

    // here we should resolve path variables,
    // probably existing at first place of path
    IPathVariableManager pathManager = workspace.getPathVariableManager();
    path = pathManager.resolvePath(path);

    if (path == null) {
        return dir;
    }

    if (isPackageRoot(project, resource)) {
        dir = path.toOSString();
    } else {
        String packPath = EclipseUtils.getJavaPackageName(javaElement).replace(Signature.C_DOT,
                PACKAGE_SEPARATOR);
        dir = path.append(packPath).toOSString();
    }
    return dir;
}

From source file:de.loskutov.bco.ui.JdtUtils.java

License:Open Source License

/**
 * @param classFile/*  w  w  w . j  av a  2  s.co  m*/
 * @return full qualified bytecode name of given class
 */
public static String getFullBytecodeName(IClassFile classFile) {
    IPackageFragment packageFr = (IPackageFragment) classFile.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
    if (packageFr == null) {
        return null;
    }
    String packageName = packageFr.getElementName();
    // switch to java bytecode naming conventions
    packageName = packageName.replace(Signature.C_DOT, PACKAGE_SEPARATOR);

    String className = classFile.getElementName();
    if (packageName != null && packageName.length() > 0) {
        return packageName + PACKAGE_SEPARATOR + className;
    }
    return className;
}