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

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

Introduction

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

Prototype

IJavaElement getParent();

Source Link

Document

Returns the element directly containing this element, or null if this element has no parent.

Usage

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

License:Open Source License

public OpenDeclarationDescriptor findDeclaration(JavaProject project, String bindingKey)
        throws JavaModelException {
    IJavaElement originalElement = project.findElement(bindingKey, null);
    IJavaElement element = originalElement;
    while (element != null) {
        if (element instanceof ICompilationUnit) {
            ICompilationUnit unit = ((ICompilationUnit) element).getPrimary();
            return compilationUnitNavigation(unit, originalElement, project.getWorkspacePath());
        }//from ww w  .jav a 2 s .  co  m

        if (element instanceof IClassFile) {
            return classFileNavigation((IClassFile) element, originalElement);
        }
        element = element.getParent();
    }
    return null;
}

From source file:com.drgarbage.bytecodevisualizer.compare.ClassFileMergeViewer.java

License:Apache License

public static InputStream createStream(IJavaElement javaElement) throws CoreException {
    IClassFile classFile = (IClassFile) javaElement.getAncestor(IJavaElement.CLASS_FILE);

    InputStream stream = null;//  ww  w.j  a v a 2  s.co m
    if (classFile != null) {
        stream = new ByteArrayInputStream(classFile.getBytes());
    } else {
        if (javaElement.getParent().getElementType() == IJavaElement.COMPILATION_UNIT) {
            IType t = (IType) javaElement;
            IJavaProject javaProject = t.getJavaProject();
            String fullyQualifiedName = t.getFullyQualifiedName();
            String className = JavaSourceUtils.getSimpleName(fullyQualifiedName);
            String packageName = JavaSourceUtils.getPackage(fullyQualifiedName);

            String classPath[] = JavaLangUtils.computeRuntimeClassPath(javaProject);
            try {
                stream = JavaLangUtils.findResource(classPath, packageName, className);
            } catch (IOException e) {
                throw new CoreException(
                        new Status(IStatus.ERROR, BytecodeVisualizerPlugin.PLUGIN_ID, e.getMessage(), e));
            }
        } else {
            return null;
        }
    }

    return stream;
}

From source file:com.drgarbage.bytecodevisualizer.editors.NoSourceViewer.java

License:Apache License

/**
 * Returns the package fragment root of this file.
 * //from w w  w  .  j  ava 2  s .co m
 * @param file the class file 
 * @return the package fragment root of the given class file
 */
private IPackageFragmentRoot getPackageFragmentRoot(IClassFile file) {

    IJavaElement element = file.getParent();
    while (element != null && element.getElementType() != IJavaElement.PACKAGE_FRAGMENT_ROOT)
        element = element.getParent();

    return (IPackageFragmentRoot) element;
}

From source file:com.ebmwebsourcing.petals.common.internal.provisional.projectscnf.PetalsProjectContentProvider.java

License:Open Source License

@Override
public Object getParent(Object element) {

    if (element instanceof PetalsProjectCategory)
        return null;

    // What do we have?
    IResource res = null;/*  ww w.  j  a v  a 2s  . c  om*/
    IJavaElement javaElement = null;
    boolean isInJavaProject = false;

    if (element instanceof IResource) {
        res = (IResource) element;
        try {
            if (((IResource) element).exists())
                isInJavaProject = res.getProject().hasNature(JavaCore.NATURE_ID);

            if (isInJavaProject)
                javaElement = JavaCore.create(res);

        } catch (CoreException e) {
            PetalsCommonPlugin.log(e, IStatus.ERROR);
        }

    } else if (element instanceof IJavaElement) {
        isInJavaProject = true;
        javaElement = (IJavaElement) element;
        res = javaElement.getResource();
    }

    // Projects should return a category
    // Otherwise, selection won't work when we want to reveal a new project
    if (res instanceof IProject) {
        List<PetalsProjectCategory> cats = PetalsProjectManager.INSTANCE.getCategories((IProject) res);
        return cats != null && cats.size() > 0 ? cats.get(0) : null;
    }

    // If the parent is a project and this root project is not displayed, then return the Petals category
    if (res != null && res.getParent() instanceof IProject) {
        Object parent = getParent(res.getParent());
        if (parent instanceof PetalsProjectCategory && !((PetalsProjectCategory) parent).isRootProjectVisible())
            return parent;
    }

    // Java elements
    if (javaElement != null) {
        // PETALSSTUD-165: Selection of Java resources fails for JSR-181
        if (element instanceof IPackageFragment) {
            PetalsCnfPackageFragment ppf = PetalsProjectManager.INSTANCE.dirtyViewerMap.get(javaElement);
            if (ppf != null) {
                if (ppf.getParent() instanceof PetalsCnfPackageFragment)
                    return ((PetalsCnfPackageFragment) ppf.getParent()).getFragment();

                return ppf.getParent();
            }
        }

        IJavaElement elt = javaElement.getParent();
        if (elt instanceof IJavaProject)
            return ((IJavaProject) elt).getProject();

        return elt;
        // PETALSSTUD-165: Selection of Java resources fails for JSR-181
    }

    // Otherwise, return the parent
    if (res != null) {
        // Be careful, the parent of a resource may sometimes be a Java element (e.g. a file in a package)
        res = res.getParent();
        javaElement = JavaCore.create(res);
        if (javaElement instanceof IJavaProject)
            return res.getProject();

        if (javaElement instanceof IPackageFragment || javaElement instanceof IPackageFragmentRoot)
            return javaElement;

        return res;
    }

    return null;
}

From source file:com.ebmwebsourcing.petals.common.internal.provisional.utils.JavaUtils.java

License:Open Source License

/**
 * Finds the direct children for a given package.
 * <p>//from   w  ww .j a  v a 2s.com
 * Copied (or almost) from the JDT.
 * </p>
 *
 * @param parent the package fragment root (will be searched from <code>fragment</code> if null)
 * @param fragment the fragment to analyze (can be null if <code>parent</code> is not)
 * @return a list of package fragments
 * @throws JavaModelException if an error occurred with the Java model
 */
public static List<IPackageFragment> findDirectSubPackages(IPackageFragmentRoot parent,
        IPackageFragment fragment) throws JavaModelException {

    // Special case for the default package
    if (fragment != null && fragment.isDefaultPackage())
        return Collections.emptyList();

    // Find the package parent?
    if (parent == null) {
        IJavaElement elt = fragment;
        while (elt.getParent() != null) {
            elt = elt.getParent();
            if (elt instanceof IPackageFragmentRoot) {
                parent = (IPackageFragmentRoot) elt;
                break;
            }
        }
    }

    // Find the direct children
    List<IPackageFragment> result = new ArrayList<IPackageFragment>();
    if (parent != null) {
        IJavaElement[] children = parent.getChildren();
        String prefix = fragment != null ? fragment.getElementName() + '.' : ""; //$NON-NLS-1$
        int prefixLen = prefix.length();
        for (IJavaElement element : children) {
            IPackageFragment curr = (IPackageFragment) element;
            String name = curr.getElementName();
            if (name.startsWith(prefix) && name.length() > prefixLen && name.indexOf('.', prefixLen) == -1)
                result.add(curr);
            else if (fragment == null && curr.isDefaultPackage())
                result.add(curr);
        }
    }

    return result;
}

From source file:com.google.gwt.eclipse.core.markers.quickfixes.CreateAsyncInterfaceProposal.java

License:Open Source License

@Override
public void apply(IDocument document) {
    StructuredSelection selection = new StructuredSelection(compilationUnit);
    NewElementWizard wizard = createWizard(selection);
    wizard.init(JavaPlugin.getDefault().getWorkbench(), selection);

    IType localCreatedType = null;/*from   w w w.j a  v a  2s.  com*/

    if (isShowDialog()) {
        Shell shell = JavaPlugin.getActiveWorkbenchShell();
        WizardDialog dialog = new WizardDialog(shell, wizard);

        IPixelConverter converter = PixelConverterFactory.createPixelConverter(JFaceResources.getDialogFont());
        dialog.setMinimumPageSize(converter.convertWidthInCharsToPixels(70),
                converter.convertHeightInCharsToPixels(20));
        dialog.create();
        dialog.getShell().setText(NewAsyncRemoteServiceInterfaceCreationWizard.DEFAULT_WINDOW_TITLE);

        if (dialog.open() == Window.OK) {
            localCreatedType = (IType) wizard.getCreatedElement();
        }
    } else {
        wizard.addPages();
        try {
            NewTypeWizardPage page = getPage(wizard);
            page.createType(null);
            localCreatedType = page.getCreatedType();
        } catch (CoreException e) {
            JavaPlugin.log(e);
        } catch (InterruptedException e) {
        }
    }

    if (localCreatedType != null) {
        IJavaElement container = localCreatedType.getParent();
        if (container instanceof ICompilationUnit) {
            container = container.getParent();
        }

        if (!container.equals(typeContainer)) {
            // add import
            try {
                ImportRewrite rewrite = StubUtility.createImportRewrite(compilationUnit, true);
                rewrite.addImport(localCreatedType.getFullyQualifiedName('.'));
                JavaModelUtil.applyEdit(compilationUnit, rewrite.rewriteImports(null), false, null);
            } catch (CoreException e) {
            }
        }
        this.createdType = localCreatedType;
    }
}

From source file:com.google.gwt.eclipse.core.validators.java.JsniJavaRefTest.java

License:Open Source License

public void testResolveJavaElement() {
    IJavaProject project = getTestProject();
    assertNotNull(project);/*www . j  a  va2  s  .  c  o m*/

    JsniJavaRef ref;
    IJavaElement element;

    try {
        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest::new()");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IMethod);
        assertTrue(((IMethod) element).isConstructor());

        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest::getNumber()");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IMethod);
        assertEquals(element.getElementName(), "getNumber");

        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest$Inner::new(Ljava/lang/String;)");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IMethod);
        assertTrue(((IMethod) element).isConstructor());

        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest$InnerSub::sayHi([I)");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IMethod);
        assertEquals(element.getElementName(), "sayHi");
        assertEquals(element.getParent().getElementName(), "InnerSub");

        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest$InnerSub::sayHi(*)");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IMethod);
        assertEquals(element.getElementName(), "sayHi");
        assertEquals(element.getParent().getElementName(), "InnerSub");

        ref = JsniJavaRef.parse(
                "@com.hello.client.JsniJavaRefTest$InnerSub::takeInner(Lcom/hello/client/JsniJavaRefTest$Inner;)");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IMethod);
        assertEquals(element.getElementName(), "takeInner");
        assertEquals(element.getParent().getElementName(), "Inner");

        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest$InnerSub::takeT(Ljava/lang/String;I)");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IMethod);
        assertEquals(element.getElementName(), "takeT");
        assertEquals(element.getParent().getElementName(), "InnerSub");

        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest::keith");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IField);
        assertEquals(element.getElementName(), "keith");

        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest.InnerInterface::getKey()");
        element = ref.resolveJavaElement(project);
        assertTrue(element instanceof IMethod);
        assertEquals(element.getElementName(), "getKey");
        assertEquals(element.getParent().getElementName(), "InnerInterface");

    } catch (UnresolvedJsniJavaRefException e) {
        fail(e.getMessage());
    } catch (JavaModelException e) {
        fail(e.getMessage());
    }

    try {
        // unresolved reference
        ref = JsniJavaRef.parse(
                "@com.hello.client.JsniJavaRefTest$InnerSub::takeInner(Lcom/hello/client/JsniJavaRefTest;)");
        element = ref.resolveJavaElement(project);
        fail("resolveElement should have thrown UnresolvedJsniJavaRefException");

    } catch (UnresolvedJsniJavaRefException e) {
        // We're expecting the exception, so do nothing
    }

    try {
        // unresolved interface member reference
        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest.InnerInterface::badRef()");
        element = ref.resolveJavaElement(project);
        fail("resolveElement should have thrown UnresolvedJsniJavaRefException");

    } catch (UnresolvedJsniJavaRefException e) {
        // We're expecting the exception, so do nothing
    }

    try {
        // magic null reference (should be ignored)
        ref = JsniJavaRef.parse("@null::nullMethod()");
        element = ref.resolveJavaElement(project);
        fail("resolveElement should have thrown UnresolvedJsniJavaRefException");

    } catch (UnresolvedJsniJavaRefException e) {
        assertNull(e.getProblemType());
    }

    try {
        // reference to JRE type (should be ignored)
        ref = JsniJavaRef.parse("@java.lang.String::valueOf(J)");
        element = ref.resolveJavaElement(project);
        fail("resolveElement should have thrown UnresolvedJsniJavaRefException");

    } catch (UnresolvedJsniJavaRefException e) {
        assertNull(e.getProblemType());
    }

    try {
        // synthetic Enum::values() reference (should be ignored)
        ref = JsniJavaRef.parse("@com.hello.client.JsniJavaRefTest.MyEnum::values()");
        element = ref.resolveJavaElement(project);
        fail("resolveElement should have thrown UnresolvedJsniJavaRefException");

    } catch (UnresolvedJsniJavaRefException e) {
        assertNull(e.getProblemType());
    }
}

From source file:com.iw.plugins.spindle.core.util.CoreUtils.java

License:Mozilla Public License

/**
 * Returns the first java element that conforms to the given type walking the java element's
 * parent relationship. If the given element alrady conforms to the given kind, the element is
 * returned. Returns <code>null</code> if no such element exits.
 *//*w w  w . ja v a  2s  .co  m*/
public static IJavaElement findElementOfKind(IJavaElement element, int kind) {
    while (element != null && element.getElementType() != kind)
        element = element.getParent();
    return element;
}

From source file:com.mountainminds.eclemma.internal.core.analysis.JavaModelCoverage.java

License:Open Source License

public ICoverageNode getCoverageFor(IJavaElement element) {
    final ICoverageNode coverage = coveragemap.get(element);
    if (coverage != null) {
        return coverage;
    }/*w  w  w .j av a  2s . c o m*/
    if (IJavaElement.METHOD == element.getElementType()) {
        resolveMethods((IType) element.getParent());
        return coveragemap.get(element);
    }
    return null;
}

From source file:com.redhat.ceylon.eclipse.code.explorer.PackageExplorerContentProvider.java

License:Open Source License

/**
 * Processes a delta recursively. When more than two children are affected the
 * tree is fully refreshed starting at this node.
 *
 * @param delta the delta to process/*from www  .  j a v  a 2s. com*/
 * @param runnables the resulting view changes as runnables (type {@link Runnable})
 * @return true is returned if the conclusion is to refresh a parent of an element. In that case no siblings need
 * to be processed
 * @throws JavaModelException thrown when the access to an element failed
 */
private boolean processDelta(IJavaElementDelta delta, Collection<Runnable> runnables)
        throws JavaModelException {

    int kind = delta.getKind();
    int flags = delta.getFlags();
    IJavaElement element = delta.getElement();
    int elementType = element.getElementType();

    if (elementType != IJavaElement.JAVA_MODEL && elementType != IJavaElement.JAVA_PROJECT) {
        IJavaProject proj = element.getJavaProject();
        if (proj == null || !proj.getProject().isOpen()) // TODO: Not needed if parent already did the 'open' check!
            return false;
    }

    if (elementType == IJavaElement.PACKAGE_FRAGMENT) {
        if ((flags & (IJavaElementDelta.F_CONTENT
                | IJavaElementDelta.F_CHILDREN)) == IJavaElementDelta.F_CONTENT) {
            // TODO: This should never be true for folders (F_CONTENT is only for files)
            if (!fIsFlatLayout) {
                Object parent = getHierarchicalPackageParent((IPackageFragment) element);
                if (!(parent instanceof IPackageFragmentRoot)) {
                    postRefresh(internalGetParent(parent), GRANT_PARENT, element, runnables);
                    return true;
                }
            }
            // content change, without children info (for example resource added/removed to class folder package)
            postRefresh(internalGetParent(element), PARENT, element, runnables);
            return true;
        }

        if (!fIsFlatLayout) {
            if (kind == IJavaElementDelta.REMOVED) {
                final Object parent = getHierarchicalPackageParent((IPackageFragment) element);
                if (parent instanceof IPackageFragmentRoot) {
                    postRemove(element, runnables);
                    return false;
                } else {
                    postRefresh(internalGetParent(parent), GRANT_PARENT, element, runnables);
                    return true;
                }
            } else if (kind == IJavaElementDelta.ADDED) {
                final Object parent = getHierarchicalPackageParent((IPackageFragment) element);
                if (parent instanceof IPackageFragmentRoot) {
                    if (fFoldPackages) {
                        postRefresh(parent, PARENT, element, runnables);
                        return true;
                    } else {
                        postAdd(parent, element, runnables);
                        return false;
                    }
                } else {
                    postRefresh(internalGetParent(parent), GRANT_PARENT, element, runnables);
                    return true;
                }
            }
            handleAffectedChildren(delta, element, runnables);
            return false;
        }
    }

    if (elementType == IJavaElement.COMPILATION_UNIT) {
        ICompilationUnit cu = (ICompilationUnit) element;
        if (!JavaModelUtil.isPrimary(cu)) {
            return false;
        }

        if (!getProvideMembers() && cu.isWorkingCopy() && kind == IJavaElementDelta.CHANGED) {
            return false;
        }

        if (kind == IJavaElementDelta.CHANGED && !isStructuralCUChange(flags)) {
            return false; // test moved ahead
        }

        if (!isOnClassPath(cu)) { // TODO: isOnClassPath expensive! Should be put after all cheap tests
            return false;
        }

    }

    if (elementType == IJavaElement.JAVA_PROJECT) {
        // handle open and closing of a project
        if ((flags & (IJavaElementDelta.F_CLOSED | IJavaElementDelta.F_OPENED)) != 0) {
            postRefresh(element, ORIGINAL, element, runnables);
            return false;
        }
        // if the class path has changed we refresh the entire project
        if ((flags & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) != 0) {
            postRefresh(element, ORIGINAL, element, runnables);
            return false;
        }
        // if added it could be that the corresponding IProject is already shown. Remove it first.
        // bug 184296
        if (kind == IJavaElementDelta.ADDED) {
            postRemove(element.getResource(), runnables);
            postAdd(element.getParent(), element, runnables);
            return false;
        }
    }

    if (kind == IJavaElementDelta.REMOVED) {
        Object parent = internalGetParent(element);
        if (element instanceof IPackageFragment) {
            // refresh package fragment root to allow filtering empty (parent) packages: bug 72923
            if (fViewer.testFindItem(parent) != null)
                postRefresh(parent, PARENT, element, runnables);
            return true;

        } else if (element instanceof IPackageFragmentRoot) {
            // libs and class folders can show up twice (in library container and as resource at original location)
            IResource resource = element.getResource();
            if (resource != null && !resource.exists())
                postRemove(resource, runnables);
        }

        postRemove(element, runnables);
        if (parent instanceof IPackageFragment)
            postUpdateIcon((IPackageFragment) parent, runnables);
        // we are filtering out empty subpackages, so we
        // a package becomes empty we remove it from the viewer.
        if (isPackageFragmentEmpty(element.getParent())) {
            if (fViewer.testFindItem(parent) != null)
                postRefresh(internalGetParent(parent), GRANT_PARENT, element, runnables);
            return true;
        }
        return false;
    }

    if (kind == IJavaElementDelta.ADDED) {
        Object parent = internalGetParent(element);
        // we are filtering out empty subpackages, so we
        // have to handle additions to them specially.
        if (parent instanceof IPackageFragment) {
            Object grandparent = internalGetParent(parent);
            // 1GE8SI6: ITPJUI:WIN98 - Rename is not shown in Packages View
            // avoid posting a refresh to an invisible parent
            if (parent.equals(fInput)) {
                postRefresh(parent, PARENT, element, runnables);
            } else {
                // refresh from grandparent if parent isn't visible yet
                if (fViewer.testFindItem(parent) == null)
                    postRefresh(grandparent, GRANT_PARENT, element, runnables);
                else {
                    postRefresh(parent, PARENT, element, runnables);
                }
            }
            return true;
        } else {
            if (element instanceof IPackageFragmentRoot
                    && ((IPackageFragmentRoot) element).getKind() != IPackageFragmentRoot.K_SOURCE) {
                // libs and class folders can show up twice (in library container or under project, and as resource at original location)
                IResource resource = element.getResource();
                if (resource != null) {
                    Object resourceParent = super.internalGetParent(resource);
                    if (resourceParent != null) {
                        IJavaProject proj = element.getJavaProject();
                        if (fShowLibrariesNode || !resourceParent.equals(proj)) {
                            postAdd(resourceParent, resource, runnables);
                        }
                    }
                }
            }
            postAdd(parent, element, runnables);
        }
    }

    if (elementType == IJavaElement.COMPILATION_UNIT || elementType == IJavaElement.CLASS_FILE) {
        if (kind == IJavaElementDelta.CHANGED) {
            // isStructuralCUChange already performed above
            postRefresh(element, ORIGINAL, element, runnables);
        }
        return false;
    }

    if (elementType == IJavaElement.PACKAGE_FRAGMENT_ROOT) {
        // the contents of an external JAR has changed
        if ((flags & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) != 0) {
            postRefresh(element, ORIGINAL, element, runnables);
            return false;
        }
        if ((flags & (IJavaElementDelta.F_CONTENT
                | IJavaElementDelta.F_CHILDREN)) == IJavaElementDelta.F_CONTENT) {
            // TODO: This should never be true for folders (F_CONTENT is only for files)
            // content change, without children info (for example resource added/removed to class folder package)
            postRefresh(internalGetParent(element), PARENT, element, runnables);
            return true;
        }

        // the source attachment of a JAR has changed
        if ((flags & (IJavaElementDelta.F_SOURCEATTACHED | IJavaElementDelta.F_SOURCEDETACHED)) != 0)
            postUpdateIcon(element, runnables);

        if (isClassPathChange(delta)) {
            // throw the towel and do a full refresh of the affected java project.
            postRefresh(element.getJavaProject(), PROJECT, element, runnables);
            return true;
        }
    }

    handleAffectedChildren(delta, element, runnables);
    return false;
}