List of usage examples for org.eclipse.jdt.core IJavaElement getParent
IJavaElement getParent();
null
if this element has no parent. 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; }