Example usage for org.eclipse.jdt.internal.core.util Util concatCompoundNameToCharArray

List of usage examples for org.eclipse.jdt.internal.core.util Util concatCompoundNameToCharArray

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.core.util Util concatCompoundNameToCharArray.

Prototype

public static char[] concatCompoundNameToCharArray(String[] compoundName) 

Source Link

Document

Concatenate a String[] compound name to a continuous char[].

Usage

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

License:Open Source License

/**
 * Returns the package fragments whose name matches the given
 * (qualified) name or pattern, or <code>null</code> if none exist.
 * <p/>//from  w w w  . j  a va 2  s  . c o  m
 * The name can be:
 * <ul>
 * <li>empty: ""</li>
 * <li>qualified: "pack.pack1.pack2"</li>
 * <li>a pattern: "pack.*.util"</li>
 * </ul>
 *
 * @param partialMatch
 *         partial name matches qualify when <code>true</code>,
 * @param patternMatch
 *         <code>true</code> when the given name might be a pattern,
 *         <code>false</code> otherwise.
 */
public IPackageFragment[] findPackageFragments(String name, boolean partialMatch, boolean patternMatch) {
    boolean isStarPattern = name.equals("*"); //$NON-NLS-1$
    boolean hasPatternChars = isStarPattern
            || (patternMatch && (name.indexOf('*') >= 0 || name.indexOf('?') >= 0));
    if (partialMatch || hasPatternChars) {
        String[] splittedName = Util.splitOn('.', name, 0, name.length());
        IPackageFragment[] oneFragment = null;
        ArrayList pkgs = null;
        char[] lowercaseName = hasPatternChars && !isStarPattern ? name.toLowerCase().toCharArray() : null;
        Object[][] keys = this.packageFragments.keyTable;
        for (int i = 0, length = keys.length; i < length; i++) {
            String[] pkgName = (String[]) keys[i];
            if (pkgName != null) {
                boolean match = isStarPattern || (hasPatternChars
                        ? CharOperation.match(lowercaseName, Util.concatCompoundNameToCharArray(pkgName), false)
                        : Util.startsWithIgnoreCase(pkgName, splittedName, partialMatch));
                if (match) {
                    Object value = this.packageFragments.valueTable[i];
                    if (value instanceof PackageFragmentRoot) {
                        IPackageFragment pkg = ((PackageFragmentRoot) value).getPackageFragment(pkgName);
                        if (oneFragment == null) {
                            oneFragment = new IPackageFragment[] { pkg };
                        } else {
                            if (pkgs == null) {
                                pkgs = new ArrayList();
                                pkgs.add(oneFragment[0]);
                            }
                            pkgs.add(pkg);
                        }
                    } else {
                        IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) value;
                        for (int j = 0, length2 = roots.length; j < length2; j++) {
                            PackageFragmentRoot root = (PackageFragmentRoot) roots[j];
                            IPackageFragment pkg = root.getPackageFragment(pkgName);
                            if (oneFragment == null) {
                                oneFragment = new IPackageFragment[] { pkg };
                            } else {
                                if (pkgs == null) {
                                    pkgs = new ArrayList();
                                    pkgs.add(oneFragment[0]);
                                }
                                pkgs.add(pkg);
                            }
                        }
                    }
                }
            }
        }
        if (pkgs == null)
            return oneFragment;
        int resultLength = pkgs.size();
        IPackageFragment[] result = new IPackageFragment[resultLength];
        pkgs.toArray(result);
        return result;
    } else {
        String[] splittedName = Util.splitOn('.', name, 0, name.length());
        int pkgIndex = this.packageFragments.getIndex(splittedName);
        if (pkgIndex == -1)
            return null;
        Object value = this.packageFragments.valueTable[pkgIndex];
        // reuse existing String[]
        String[] pkgName = (String[]) this.packageFragments.keyTable[pkgIndex];
        if (value instanceof PackageFragmentRoot) {
            return new IPackageFragment[] { ((PackageFragmentRoot) value).getPackageFragment(pkgName) };
        } else {
            IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) value;
            IPackageFragment[] result = new IPackageFragment[roots.length];
            for (int i = 0; i < roots.length; i++) {
                result[i] = ((PackageFragmentRoot) roots[i]).getPackageFragment(pkgName);
            }
            return result;
        }
    }
}