Example usage for org.eclipse.jdt.internal.compiler.util HashtableOfObjectToInt get

List of usage examples for org.eclipse.jdt.internal.compiler.util HashtableOfObjectToInt get

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.compiler.util HashtableOfObjectToInt get.

Prototype

public int get(Object key) 

Source Link

Usage

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

License:Open Source License

public NameLookup(IPackageFragmentRoot[] packageFragmentRoots, HashtableOfArrayToObject packageFragments,
        ICompilationUnit[] workingCopies, Map rootToResolvedEntries, JavaModelManager manager) {
    this.manager = manager;
    long start = -1;
    if (VERBOSE) {
        Util.verbose(" BUILDING NameLoopkup"); //$NON-NLS-1$
        Util.verbose(" -> pkg roots size: " + (packageFragmentRoots == null ? 0 : packageFragmentRoots.length)); //$NON-NLS-1$
        Util.verbose(" -> pkgs size: " + (packageFragments == null ? 0 : packageFragments.size())); //$NON-NLS-1$
        Util.verbose(" -> working copy size: " + (workingCopies == null ? 0 : workingCopies.length)); //$NON-NLS-1$
        start = System.currentTimeMillis();
    }//from  ww  w  .  j a  v  a 2  s.  c  om
    this.packageFragmentRoots = packageFragmentRoots;
    if (workingCopies == null) {
        this.packageFragments = packageFragments;
    } else {
        // clone tables as we're adding packages from working copies
        try {
            this.packageFragments = (HashtableOfArrayToObject) packageFragments.clone();
        } catch (CloneNotSupportedException e1) {
            // ignore (implementation of HashtableOfArrayToObject supports cloning)
        }
        this.typesInWorkingCopies = new HashMap();
        HashtableOfObjectToInt rootPositions = new HashtableOfObjectToInt();
        for (int i = 0, length = packageFragmentRoots.length; i < length; i++) {
            rootPositions.put(packageFragmentRoots[i], i);
        }
        for (int i = 0, length = workingCopies.length; i < length; i++) {
            ICompilationUnit workingCopy = workingCopies[i];
            PackageFragment pkg = (PackageFragment) workingCopy.getParent();
            IPackageFragmentRoot root = (IPackageFragmentRoot) pkg.getParent();
            int rootPosition = rootPositions.get(root);
            if (rootPosition == -1)
                continue; // working copy is not visible from this project (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=169970)
            HashMap typeMap = (HashMap) this.typesInWorkingCopies.get(pkg);
            if (typeMap == null) {
                typeMap = new HashMap();
                this.typesInWorkingCopies.put(pkg, typeMap);
            }
            try {
                IType[] types = workingCopy.getTypes();
                int typeLength = types.length;
                if (typeLength == 0) {
                    String typeName = Util.getNameWithoutJavaLikeExtension(workingCopy.getElementName());
                    typeMap.put(typeName, NO_TYPES);
                } else {
                    for (int j = 0; j < typeLength; j++) {
                        IType type = types[j];
                        String typeName = type.getElementName();
                        Object existing = typeMap.get(typeName);
                        if (existing == null) {
                            typeMap.put(typeName, type);
                        } else if (existing instanceof IType) {
                            typeMap.put(typeName, new IType[] { (IType) existing, type });
                        } else {
                            IType[] existingTypes = (IType[]) existing;
                            int existingTypeLength = existingTypes.length;
                            System.arraycopy(existingTypes, 0,
                                    existingTypes = new IType[existingTypeLength + 1], 0, existingTypeLength);
                            existingTypes[existingTypeLength] = type;
                            typeMap.put(typeName, existingTypes);
                        }
                    }
                }
            } catch (JavaModelException e) {
                // working copy doesn't exist -> ignore
            }

            // add root of package fragment to cache
            String[] pkgName = pkg.names;
            Object existing = this.packageFragments.get(pkgName);
            if (existing == null || existing == JavaProjectElementInfo.NO_ROOTS) {
                this.packageFragments.put(pkgName, root);
                // ensure super packages (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=119161)
                // are also in the map
                JavaProjectElementInfo.addSuperPackageNames(pkgName, this.packageFragments);
            } else {
                if (existing instanceof PackageFragmentRoot) {
                    int exisitingPosition = rootPositions.get(existing);
                    if (rootPosition != exisitingPosition) { // if not equal
                        this.packageFragments.put(pkgName,
                                exisitingPosition < rootPosition
                                        ? new IPackageFragmentRoot[] { (PackageFragmentRoot) existing, root }
                                        : new IPackageFragmentRoot[] { root, (PackageFragmentRoot) existing });
                    }
                } else {
                    // insert root in the existing list
                    IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) existing;
                    int rootLength = roots.length;
                    int insertionIndex = 0;
                    for (int j = 0; j < rootLength; j++) {
                        int existingPosition = rootPositions.get(roots[j]);
                        if (rootPosition > existingPosition) {
                            // root is after this index
                            insertionIndex = j;
                        } else if (rootPosition == existingPosition) {
                            // root already in the existing list
                            insertionIndex = -1;
                            break;
                        } else if (rootPosition < existingPosition) {
                            // root is before this index (thus it is at the insertion index)
                            break;
                        }
                    }
                    if (insertionIndex != -1) {
                        IPackageFragmentRoot[] newRoots = new IPackageFragmentRoot[rootLength + 1];
                        System.arraycopy(roots, 0, newRoots, 0, insertionIndex);
                        newRoots[insertionIndex] = root;
                        System.arraycopy(roots, insertionIndex, newRoots, insertionIndex + 1,
                                rootLength - insertionIndex);
                        this.packageFragments.put(pkgName, newRoots);
                    }
                }
            }
        }
    }

    this.rootToResolvedEntries = rootToResolvedEntries;
    if (VERBOSE) {
        Util.verbose(" -> spent: " + (System.currentTimeMillis() - start) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
    }
}

From source file:org.eclipse.jdt.core.dom.CompilationUnitResolver.java

License:Open Source License

public static IBinding[] resolve(final IJavaElement[] elements, int apiLevel, Map compilerOptions,
        IJavaProject javaProject, WorkingCopyOwner owner, int flags, IProgressMonitor monitor) {

    final int length = elements.length;
    final HashMap sourceElementPositions = new HashMap(); // a map from ICompilationUnit to int[] (positions in elements)
    int cuNumber = 0;
    final HashtableOfObjectToInt binaryElementPositions = new HashtableOfObjectToInt(); // a map from String (binding key) to int (position in elements)
    for (int i = 0; i < length; i++) {
        IJavaElement element = elements[i];
        if (!(element instanceof SourceRefElement))
            throw new IllegalStateException(element + " is not part of a compilation unit or class file"); //$NON-NLS-1$
        Object cu = element.getAncestor(IJavaElement.COMPILATION_UNIT);
        if (cu != null) {
            // source member
            IntArrayList intList = (IntArrayList) sourceElementPositions.get(cu);
            if (intList == null) {
                sourceElementPositions.put(cu, intList = new IntArrayList());
                cuNumber++;/*from   ww  w  .  ja v a 2 s.com*/
            }
            intList.add(i);
        } else {
            // binary member
            try {
                String key = ((BinaryMember) element).getKey(true/*open to get resolved info*/);
                binaryElementPositions.put(key, i);
            } catch (JavaModelException e) {
                throw new IllegalArgumentException(element + " does not exist"); //$NON-NLS-1$
            }
        }
    }
    ICompilationUnit[] cus = new ICompilationUnit[cuNumber];
    sourceElementPositions.keySet().toArray(cus);

    int bindingKeyNumber = binaryElementPositions.size();
    String[] bindingKeys = new String[bindingKeyNumber];
    binaryElementPositions.keysToArray(bindingKeys);

    class Requestor extends ASTRequestor {
        IBinding[] bindings = new IBinding[length];

        public void acceptAST(ICompilationUnit source, CompilationUnit ast) {
            // TODO (jerome) optimize to visit the AST only once
            IntArrayList intList = (IntArrayList) sourceElementPositions.get(source);
            for (int i = 0; i < intList.length; i++) {
                final int index = intList.list[i];
                SourceRefElement element = (SourceRefElement) elements[index];
                DOMFinder finder = new DOMFinder(ast, element, true/*resolve binding*/);
                try {
                    finder.search();
                } catch (JavaModelException e) {
                    throw new IllegalArgumentException(element + " does not exist"); //$NON-NLS-1$
                }
                this.bindings[index] = finder.foundBinding;
            }
        }

        public void acceptBinding(String bindingKey, IBinding binding) {
            int index = binaryElementPositions.get(bindingKey);
            this.bindings[index] = binding;
        }
    }
    Requestor requestor = new Requestor();
    resolve(cus, bindingKeys, requestor, apiLevel, compilerOptions, javaProject, owner, flags, monitor);
    return requestor.bindings;
}