Example usage for org.eclipse.jdt.core IJavaElement COMPILATION_UNIT

List of usage examples for org.eclipse.jdt.core IJavaElement COMPILATION_UNIT

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IJavaElement COMPILATION_UNIT.

Prototype

int COMPILATION_UNIT

To view the source code for org.eclipse.jdt.core IJavaElement COMPILATION_UNIT.

Click Source Link

Document

Constant representing a Java compilation unit.

Usage

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  w  w  w .  j a  v a2  s.  c  om*/
            }
            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;
}

From source file:org.eclipse.jdt.internal.core.CopyResourceElementsOperation.java

License:Open Source License

/**
 * Returns the children of <code>source</code> which are affected by this operation.
 * If <code>source</code> is a <code>K_SOURCE</code>, these are the <code>.java</code>
 * files, if it is a <code>K_BINARY</code>, they are the <code>.class</code> files.
 *///w  w  w  . j a  v  a 2 s  .com
private IResource[] collectResourcesOfInterest(IPackageFragment source) throws JavaModelException {
    IJavaElement[] children = source.getChildren();
    int childOfInterest = IJavaElement.COMPILATION_UNIT;
    if (source.getKind() == IPackageFragmentRoot.K_BINARY) {
        childOfInterest = IJavaElement.CLASS_FILE;
    }
    ArrayList correctKindChildren = new ArrayList(children.length);
    for (int i = 0; i < children.length; i++) {
        IJavaElement child = children[i];
        if (child.getElementType() == childOfInterest) {
            correctKindChildren.add(((JavaElement) child).resource());
        }
    }
    // Gather non-java resources
    Object[] nonJavaResources = source.getNonJavaResources();
    int actualNonJavaResourceCount = 0;
    for (int i = 0, max = nonJavaResources.length; i < max; i++) {
        if (nonJavaResources[i] instanceof IResource)
            actualNonJavaResourceCount++;
    }
    IResource[] actualNonJavaResources = new IResource[actualNonJavaResourceCount];
    for (int i = 0, max = nonJavaResources.length, index = 0; i < max; i++) {
        if (nonJavaResources[i] instanceof IResource)
            actualNonJavaResources[index++] = (IResource) nonJavaResources[i];
    }

    if (actualNonJavaResourceCount != 0) {
        int correctKindChildrenSize = correctKindChildren.size();
        IResource[] result = new IResource[correctKindChildrenSize + actualNonJavaResourceCount];
        correctKindChildren.toArray(result);
        System.arraycopy(actualNonJavaResources, 0, result, correctKindChildrenSize,
                actualNonJavaResourceCount);
        return result;
    } else {
        IResource[] result = new IResource[correctKindChildren.size()];
        correctKindChildren.toArray(result);
        return result;
    }
}

From source file:org.eclipse.jdt.internal.core.CopyResourceElementsOperation.java

License:Open Source License

/**
 * @see MultiOperation/*w  ww .  ja  v a2 s .  c  om*/
 * This method delegates to <code>processCompilationUnitResource</code> or
 * <code>processPackageFragmentResource</code>, depending on the type of
 * <code>element</code>.
 */
protected void processElement(IJavaElement element) throws JavaModelException {
    IJavaElement dest = getDestinationParent(element);
    switch (element.getElementType()) {
    case IJavaElement.COMPILATION_UNIT:
        processCompilationUnitResource((ICompilationUnit) element, (PackageFragment) dest);
        this.createdElements.add(((IPackageFragment) dest).getCompilationUnit(element.getElementName()));
        break;
    case IJavaElement.PACKAGE_FRAGMENT:
        processPackageFragmentResource((PackageFragment) element, (PackageFragmentRoot) dest,
                getNewNameFor(element));
        break;
    default:
        throw new JavaModelException(
                new JavaModelStatus(IJavaModelStatusConstants.INVALID_ELEMENT_TYPES, element));
    }
}

From source file:org.eclipse.jdt.internal.core.CopyResourceElementsOperation.java

License:Open Source License

/**
 * @see MultiOperation//w w w.jav  a2 s . c  o m
 */
protected void verify(IJavaElement element) throws JavaModelException {
    if (element == null || !element.exists())
        error(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, element);

    if (element.isReadOnly() && (isRename() || isMove()))
        error(IJavaModelStatusConstants.READ_ONLY, element);

    IResource resource = ((JavaElement) element).resource();
    if (resource instanceof IFolder) {
        if (resource.isLinked()) {
            error(IJavaModelStatusConstants.INVALID_RESOURCE, element);
        }
    }

    int elementType = element.getElementType();

    if (elementType == IJavaElement.COMPILATION_UNIT) {
        org.eclipse.jdt.internal.core.CompilationUnit compilationUnit = (org.eclipse.jdt.internal.core.CompilationUnit) element;
        if (isMove() && compilationUnit.isWorkingCopy() && !compilationUnit.isPrimary())
            error(IJavaModelStatusConstants.INVALID_ELEMENT_TYPES, element);
    } else if (elementType != IJavaElement.PACKAGE_FRAGMENT) {
        error(IJavaModelStatusConstants.INVALID_ELEMENT_TYPES, element);
    }

    JavaElement dest = (JavaElement) getDestinationParent(element);
    verifyDestination(element, dest);
    if (this.renamings != null) {
        verifyRenaming(element);
    }
}

From source file:org.eclipse.jdt.internal.core.JavaModelManager.java

License:Open Source License

public synchronized Object removeInfoAndChildren(JavaElement element) throws JavaModelException {
    Object info = this.cache.peekAtInfo(element);
    if (info != null) {
        boolean wasVerbose = false;
        try {/*from   w ww  . j  av  a2s. c  o m*/
            if (JavaModelCache.VERBOSE) {
                String elementType;
                switch (element.getElementType()) {
                case IJavaElement.JAVA_PROJECT:
                    elementType = "project"; //$NON-NLS-1$
                    break;
                case IJavaElement.PACKAGE_FRAGMENT_ROOT:
                    elementType = "root"; //$NON-NLS-1$
                    break;
                case IJavaElement.PACKAGE_FRAGMENT:
                    elementType = "package"; //$NON-NLS-1$
                    break;
                case IJavaElement.CLASS_FILE:
                    elementType = "class file"; //$NON-NLS-1$
                    break;
                case IJavaElement.COMPILATION_UNIT:
                    elementType = "compilation unit"; //$NON-NLS-1$
                    break;
                default:
                    elementType = "element"; //$NON-NLS-1$
                }
                System.out.println(Thread.currentThread() + " CLOSING " + elementType + " " //$NON-NLS-1$//$NON-NLS-2$
                        + element.toStringWithAncestors());
                wasVerbose = true;
                JavaModelCache.VERBOSE = false;
            }
            element.closing(info);
            if (element instanceof IParent) {
                closeChildren(info);
            }
            this.cache.removeInfo(element);
            if (wasVerbose) {
                System.out.println(this.cache.toStringFillingRation("-> ")); //$NON-NLS-1$
            }
        } finally {
            JavaModelCache.VERBOSE = wasVerbose;
        }
        return info;
    }
    return null;
}

From source file:org.eclipse.jdt.internal.core.JavaProject.java

License:Open Source License

public boolean isOnClasspath(IJavaElement element) {
    IClasspathEntry[] rawClasspath;/*from   w ww .  j ava  2  s .  co m*/
    try {
        rawClasspath = getRawClasspath();
    } catch (JavaModelException e) {
        return false; // not a Java project
    }
    int elementType = element.getElementType();
    boolean isPackageFragmentRoot = false;
    boolean isFolderPath = false;
    boolean isSource = false;
    switch (elementType) {
    case IJavaElement.JAVA_MODEL:
        return false;
    case IJavaElement.JAVA_PROJECT:
        break;
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        isPackageFragmentRoot = true;
        break;
    case IJavaElement.PACKAGE_FRAGMENT:
        isFolderPath = !((IPackageFragmentRoot) element.getParent()).isArchive();
        break;
    case IJavaElement.COMPILATION_UNIT:
        isSource = true;
        break;
    default:
        isSource = element.getAncestor(IJavaElement.COMPILATION_UNIT) != null;
        break;
    }
    IPath elementPath = element.getPath();

    // first look at unresolved entries
    int length = rawClasspath.length;
    for (int i = 0; i < length; i++) {
        IClasspathEntry entry = rawClasspath[i];
        switch (entry.getEntryKind()) {
        case IClasspathEntry.CPE_LIBRARY:
        case IClasspathEntry.CPE_PROJECT:
        case IClasspathEntry.CPE_SOURCE:
            if (isOnClasspathEntry(elementPath, isFolderPath, isPackageFragmentRoot, entry))
                return true;
            break;
        }
    }

    // no need to go further for compilation units and elements inside a compilation unit
    // it can only be in a source folder, thus on the raw classpath
    if (isSource)
        return false;

    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=304081
    // All the resolved classpath entries need to be considered, including the referenced classpath entries
    IClasspathEntry[] resolvedClasspath = null;
    try {
        resolvedClasspath = getResolvedClasspath();
    } catch (JavaModelException e) {
        return false; // Perhaps, not a Java project
    }

    for (int index = 0; index < resolvedClasspath.length; index++) {
        if (isOnClasspathEntry(elementPath, isFolderPath, isPackageFragmentRoot, resolvedClasspath[index]))
            return true;
    }

    return false;
}

From source file:org.eclipse.jem.workbench.utility.JavaModelListener.java

License:Open Source License

/**
 * Dispatch the java element delta. This method should normally not be overridden. One
 * usage would be to add delta types that are to be processed and dispatched by the
 * subclasses. For example also dispatch on {@link IJavaElement#IMPORT_CONTAINER}. Subclasses
 * should call <code>super.processDelta(IJavaElementDelta)</code> if it is not one they
 * are interested in./* w w  w .j av a  2 s  . co m*/
 * 
 * @param delta
 * 
 * @since 1.2.0
 */
public void processDelta(IJavaElementDelta delta) {
    IJavaElement element = delta.getElement();
    // if the class path has changed we refresh the resolved container cache
    int flags = delta.getFlags();
    if (((flags & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) != 0) && !resolvedContainers.isEmpty()) {
        resolvedContainers.clear();
    }

    switch (element.getElementType()) {
    case IJavaElement.JAVA_MODEL:
        processJavaElementChanged((IJavaModel) element, delta);
        break;
    case IJavaElement.JAVA_PROJECT:
        processJavaElementChanged((IJavaProject) element, delta);
        break;
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        processJavaElementChanged((IPackageFragmentRoot) element, delta);
        break;
    case IJavaElement.PACKAGE_FRAGMENT:
        processJavaElementChanged((IPackageFragment) element, delta);
        break;
    case IJavaElement.COMPILATION_UNIT:
        processJavaElementChanged((ICompilationUnit) element, delta);
        processContentChanged(delta);
        break;
    case IJavaElement.CLASS_FILE:
        processJavaElementChanged((IClassFile) element, delta);
        break;
    case IJavaElement.TYPE:
        processJavaElementChanged((IType) element, delta);
        break;
    // Note: if we are to update the Method/Field adapters, we should process the
    // IJavaElement.METHOD and IJavaElement.FIELD
    }
}

From source file:org.eclipse.jpt.common.core.tests.internal.resource.java.JavaResourceModelTestCase.java

License:Open Source License

/**
 * NB: this is copied from GenericJpaProject, so it might need to be
 * kept in synch with that code if it changes... yech...
 *///w  w  w .j a  v  a2 s.  c om
protected void syncWithJavaDelta(IJavaElementDelta delta) {
    switch (delta.getElement().getElementType()) {
    case IJavaElement.JAVA_MODEL:
    case IJavaElement.JAVA_PROJECT:
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
    case IJavaElement.PACKAGE_FRAGMENT:
        this.syncWithJavaDeltaChildren(delta);
        break;
    case IJavaElement.COMPILATION_UNIT:
        this.javaCompilationUnitChanged(delta);
        break;
    default:
        break; // ignore the elements inside a compilation unit
    }
}

From source file:org.eclipse.jpt.jaxb.core.internal.AbstractJaxbProject.java

License:Open Source License

/**
 * We recurse back here from {@link #processJavaDeltaChildren(IJavaElementDelta)}.
 *//*from ww w . j  av  a2 s .co m*/
protected void processJavaDelta(IJavaElementDelta delta) {
    switch (delta.getElement().getElementType()) {
    case IJavaElement.JAVA_MODEL:
        this.processJavaModelDelta(delta);
        break;
    case IJavaElement.JAVA_PROJECT:
        this.processJavaProjectDelta(delta);
        break;
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        this.processJavaPackageFragmentRootDelta(delta);
        break;
    case IJavaElement.PACKAGE_FRAGMENT:
        this.processJavaPackageFragmentDelta(delta);
        break;
    case IJavaElement.COMPILATION_UNIT:
        this.processJavaCompilationUnitDelta(delta);
        break;
    default:
        break; // ignore the elements inside a compilation unit
    }
}

From source file:org.eclipse.jpt.jpa.core.internal.InternalJpaProjectManager.java

License:Open Source License

/**
 * We recurse back here from {@link #handleJavaDeltaChildren(IJavaElementDelta)}.
 *//*from   w  w  w.  ja  va2s . co  m*/
protected boolean handleJavaDelta(IJavaElementDelta delta) {
    switch (delta.getElement().getElementType()) {
    case IJavaElement.JAVA_MODEL:
        return this.handleJavaModelDelta(delta);
    case IJavaElement.JAVA_PROJECT:
        return this.handleJavaProjectDelta(delta);
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        return this.handleJavaPackageFragmentRootDelta(delta);
    case IJavaElement.PACKAGE_FRAGMENT:
        return this.processJavaPackageFragmentDelta(delta);
    case IJavaElement.COMPILATION_UNIT:
        return this.handleJavaCompilationUnitDelta(delta);
    default:
        break; // ignore the elements inside a compilation unit
    }
    return false;
}