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

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

Introduction

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

Prototype

IJavaElement getAncestor(int ancestorType);

Source Link

Document

Returns this Java element or the first ancestor of this element that has the given type.

Usage

From source file:org.eclipse.virgo.ide.bundlor.internal.core.BundlorProjectBuilder.java

License:Open Source License

private void doGetAffectedResources(IResource resource, int kind, int deltaKind) throws CoreException {

    IJavaProject project = JavaCore.create(getProject());
    if (project == null) {
        return;/*from   w  ww .j  a v a2 s  .c  o m*/
    }

    IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();

    // Get the source folders
    Set<IClasspathEntry> classpathEntries = ServerModuleDelegate
            .getSourceClasspathEntries(resource.getProject(), false);
    Set<IClasspathEntry> testClasspathEntries = ServerModuleDelegate
            .getSourceClasspathEntries(resource.getProject(), true);

    // Java source files
    if (!this.scanByteCode && resource.getName().endsWith("java")) { //$NON-NLS-1$
        IJavaElement element = JavaCore.create(resource);
        if (element != null && element.getJavaProject().isOnClasspath(element)) {
            IPackageFragmentRoot root = (IPackageFragmentRoot) element
                    .getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
            try {
                IClasspathEntry classpathEntry = root.getRawClasspathEntry();
                for (IClasspathEntry entry : classpathEntries) {
                    if (classpathEntry.equals(entry)) {
                        if (deltaKind == IResourceDelta.REMOVED) {
                            this.deletedSourceResources.add(resource);
                        } else {
                            this.sourceResources.add(resource);
                        }
                        break;
                    }
                }
                for (IClasspathEntry entry : testClasspathEntries) {
                    if (classpathEntry.equals(entry)) {
                        if (deltaKind == IResourceDelta.REMOVED) {
                            this.deletedTestResources.add(resource);
                        } else {
                            this.testResources.add(resource);
                        }
                        break;
                    }
                }
            } catch (JavaModelException e) {
                // This can happen in case of .java resources not on the
                // classpath of the project
            }
        }
    }
    // Java byte code
    else if (this.scanByteCode && resource.getName().endsWith(CLASS_FILE_EXTENSION)) {
        IPath classFilePath = resource.getFullPath();

        // Check default output folders
        IPath defaultOutputLocation = project.getOutputLocation();
        if (defaultOutputLocation.isPrefixOf(classFilePath)) {
            // Ok we know that the file is a class in the default output
            // location; let's get the class name
            String className = classFilePath.removeFirstSegments(defaultOutputLocation.segmentCount())
                    .toString();
            className = className.substring(0, className.length() - CLASS_FILE_EXTENSION.length());

            int ix = className.indexOf('$');
            if (ix > 0) {
                className = className.substring(0, ix);
            }

            className = className + ".java";

            if (deltaKind == IResourceDelta.REMOVED) {
                this.deletedSourceResources.add(resource);
                this.deletedTestResources.add(resource);
            } else {

                for (IClasspathEntry entry : classpathEntries) {
                    IPath sourceLocation = entry.getPath();
                    IResource sourceFolder = wsRoot.findMember(sourceLocation);
                    if (sourceFolder instanceof IFolder) {
                        if (((IFolder) sourceFolder).findMember(className) != null) {
                            this.sourceResources.add(resource);
                            break;
                        }
                    }
                }
                for (IClasspathEntry entry : testClasspathEntries) {
                    IPath sourceLocation = entry.getPath();
                    IResource sourceFolder = wsRoot.findMember(sourceLocation);
                    if (sourceFolder instanceof IFolder) {
                        if (((IFolder) sourceFolder).findMember(className) != null) {
                            this.testResources.add(resource);
                            break;
                        }
                    }
                }
            }
        }

        // Check output folders of source folders
        for (IClasspathEntry entry : classpathEntries) {
            IPath outputLocation = entry.getOutputLocation();
            if (outputLocation != null && outputLocation.isPrefixOf(classFilePath)) {
                if (deltaKind == IResourceDelta.REMOVED) {
                    this.deletedSourceResources.add(resource);
                } else {
                    this.sourceResources.add(resource);
                }

                break;
            }
        }

        // Check output folders for test source folders
        for (IClasspathEntry entry : testClasspathEntries) {
            IPath outputLocation = entry.getOutputLocation();
            if (outputLocation != null && outputLocation.isPrefixOf(classFilePath)) {
                if (deltaKind == IResourceDelta.REMOVED) {
                    this.deletedTestResources.add(resource);
                } else {
                    this.testResources.add(resource);
                }

                break;
            }
        }
    }
    // Some template or actual manifest file (whether or not it actually
    // affects packaged build) has changed. Note that this is different
    // behavior than
    // pre-Virgo server. Still, it seems reasonably conservative as worst
    // case we'll be re-building the project when we really don't need to,
    // and best case we'll catch an edge case that we would have otherwise
    // missed.
    else if (resource.getName().equals("template.mf") || resource.getName().equals("MANIFEST.MF")) {
        this.forceFullBuild = true;
    }
    // Hibernate mapping files
    else if (resource.getName().endsWith(".hbm")) {
        addResourceIfInSourceFolder(resource, classpathEntries, testClasspathEntries);
    }
    // JPA persistence descriptor
    else if (resource.getName().equals("persistence.xml") && resource.getParent() != null
            && resource.getParent().getName().equals("META-INF")) {
        addResourceIfInSourceFolder(resource, classpathEntries, testClasspathEntries);
    } else if (isWebXML(resource)) {
        this.sourceResources.add(resource);
    }
    // Spring configuration file
    else if (resource.getName().endsWith(".xml")) {
        addResourceIfInSourceFolder(resource, classpathEntries, testClasspathEntries);
    }
}

From source file:org.eclipse.wb.internal.core.utils.jdt.core.CodeUtils.java

License:Open Source License

/**
 * @return the {@link IPackageFragmentRoot} that is parent of given {@link IJavaElement} or first
 *         {@link IPackageFragmentRoot} of {@link IJavaProject}.
 *//*from  ww w  .j a  v  a 2 s . c o m*/
public static IPackageFragmentRoot getPackageFragmentRoot(IJavaElement element) throws JavaModelException {
    if (element != null) {
        // try to find valid parent IPackageFragmentRoot
        {
            IPackageFragmentRoot root = (IPackageFragmentRoot) element
                    .getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
            if (root != null && root.getKind() == IPackageFragmentRoot.K_SOURCE) {
                return root;
            }
        }
        // use IPackageFragmentRoot of IJavaProject
        {
            IJavaProject javaProject = element.getJavaProject();
            if (javaProject != null && javaProject.exists()) {
                for (IPackageFragmentRoot root : javaProject.getPackageFragmentRoots()) {
                    if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
                        return root;
                    }
                }
            }
        }
    }
    // invalid element
    return null;
}

From source file:org.eclipse.wb.internal.core.utils.jdt.core.SubtypesScope.java

License:Open Source License

public boolean encloses(IJavaElement element) {
    IType type = (IType) element.getAncestor(IJavaElement.TYPE);
    if (type != null) {
        return ArrayUtils.contains(m_subtypes, type);
    }//  ww w.  java  2  s .co  m
    return false;
}

From source file:org.eclipse.wb.internal.core.wizards.palette.NewProjectPalettePage.java

License:Open Source License

/**
 * Initializes this page with current selection.
 *///from   w w w  .  j  ava 2  s .  co m
public void init(IStructuredSelection selection) {
    // initial IJavaProject
    {
        IJavaElement javaElement = null;
        Object selectedElement = selection.getFirstElement();
        if (selectedElement instanceof IAdaptable) {
            IAdaptable adaptable = (IAdaptable) selectedElement;
            javaElement = (IJavaElement) adaptable.getAdapter(IJavaElement.class);
            if (javaElement == null) {
                IResource resource = (IResource) adaptable.getAdapter(IResource.class);
                if (resource != null && resource.getType() != IResource.ROOT) {
                    while (javaElement == null && resource.getType() != IResource.PROJECT) {
                        resource = resource.getParent();
                        javaElement = (IJavaElement) resource.getAdapter(IJavaElement.class);
                    }
                    if (javaElement == null) {
                        javaElement = JavaCore.create(resource);
                    }
                }
            }
        }
        // get IJavaProject
        if (javaElement != null) {
            m_initialProject = (IJavaProject) javaElement.getAncestor(IJavaElement.JAVA_PROJECT);
        }
    }
}

From source file:org.eclipse.xtext.common.types.ui.navigation.LinkToOriginDetector.java

License:Open Source License

@Override
public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region,
        boolean canShowMultipleHyperlinks) {
    try {//w  w w  .  ja v  a 2 s  . c om
        // very pessimistic guards - most things should never happen
        ITextEditor textEditor = (ITextEditor) getAdapter(ITextEditor.class);
        if (textEditor == null)
            return null;
        IEditorInput editorInput = textEditor.getEditorInput();
        if (editorInput == null)
            return null;
        IJavaElement adaptedJavaElement = (IJavaElement) Platform.getAdapterManager().getAdapter(editorInput,
                IJavaElement.class);
        if (adaptedJavaElement == null)
            return null;
        ICompilationUnit compilationUnit = (ICompilationUnit) adaptedJavaElement
                .getAncestor(IJavaElement.COMPILATION_UNIT);
        if (compilationUnit == null)
            return null;
        try {
            IRegion selectedWord = org.eclipse.jdt.internal.ui.text.JavaWordFinder
                    .findWord(textViewer.getDocument(), region.getOffset());
            // the actual implementation - find the referenced Java type under the cursor and link
            // to its origin if it's contained in a 'derived' resource
            IJavaElement[] javaElements = compilationUnit.codeSelect(selectedWord.getOffset(),
                    selectedWord.getLength());
            for (IJavaElement javaElement : javaElements) {
                /**
                 * if IDE 3.8 is available the default 'Open Declaration' navigation will already open the original editor
                 * So we don't need the additional hyperlinks.
                 */
                boolean provideHyperlinkOnReferences = !is_ORG_ECLIPSE_UI_IDE_3_8_Enabled()
                        || compilationUnit.equals(((IMember) javaElement).getCompilationUnit());
                if (javaElement instanceof IMember && provideHyperlinkOnReferences) {
                    IMember selectedMember = (IMember) javaElement;
                    IResource resource = selectedMember.getResource();
                    if (resource instanceof IFile) {
                        ITrace traceToSource = traceInformation.getTraceToSource((IStorage) resource);
                        if (traceToSource == null) {
                            return null;
                        }
                        ILocationInResource sourceInformation = IterableExtensions
                                .head(traceToSource.getAllAssociatedLocations());
                        if (sourceInformation != null) {
                            try {
                                URI resourceURI = sourceInformation.getAbsoluteResourceURI().getURI();
                                if (resourceURI != null) {
                                    IResourceServiceProvider serviceProvider = serviceProviderRegistry
                                            .getResourceServiceProvider(resourceURI);
                                    if (serviceProvider == null)
                                        return null;
                                    LinkToOriginProvider provider = serviceProvider
                                            .get(LinkToOriginProvider.class);
                                    LinkToOrigin hyperlink = provider.createLinkToOrigin(sourceInformation,
                                            selectedWord, selectedMember, compilationUnit,
                                            Collections.<LinkToOrigin>emptyList());
                                    if (hyperlink != null) {
                                        return new IHyperlink[] { hyperlink };
                                    }
                                }
                            } catch (IllegalArgumentException e) {
                                /* invalid URI - ignore */ }
                        }
                        return null;
                    }
                }
            }
            return null;
        } catch (JavaModelException e) {
            return null;
        }
    } catch (Throwable t) {
        return null;
    }
}

From source file:org.electrocodeogram.cpc.ui.utils.EclipseUtils.java

License:BSD License

/**
 * @param resource//from  w ww  .  java 2s. c om
 * @return full package name in default java notation (with dots)
 */
public static String getJavaPackageName(IJavaElement resource) {
    String name = resource == null ? null : resource.getElementName(); //$NON-NLS-1$
    if (name == null) {
        return ""; //$NON-NLS-1$
    }
    int type = resource.getElementType();
    if (type == IJavaElement.PACKAGE_FRAGMENT || type == IJavaElement.PACKAGE_FRAGMENT_ROOT) {
        return name;
    }
    IJavaElement ancestor = resource.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
    if (ancestor != null) {
        return ancestor.getElementName();
    }
    return ""; //$NON-NLS-1$
}

From source file:org.evosuite.eclipse.popup.actions.ExtendSuiteEditorAction.java

License:Open Source License

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
    ISelection selection = HandlerUtil.getActiveMenuSelection(event);

    String SUT = "";
    IResource target = null;//from w  w  w. j a v a2  s .  c o  m

    System.out.println("Current selection of type " + selection.getClass().getName() + ": " + selection);
    if (selection instanceof TreeSelection) {
        TreeSelection treeSelection = (TreeSelection) selection;
        IAdaptable firstElement = (IAdaptable) treeSelection.getFirstElement();

        // Relies on an internal API, bad juju
        if (firstElement instanceof org.eclipse.jdt.internal.core.CompilationUnit) {
            try {
                org.eclipse.jdt.internal.core.CompilationUnit compilationUnit = (org.eclipse.jdt.internal.core.CompilationUnit) firstElement;
                String packageName = "";
                if (compilationUnit.getPackageDeclarations().length > 0) {
                    System.out.println(
                            "Package: " + compilationUnit.getPackageDeclarations()[0].getElementName());
                    packageName = compilationUnit.getPackageDeclarations()[0].getElementName();
                }
                String targetSuite = compilationUnit.getElementName().replace(".java", "");
                if (!packageName.isEmpty())
                    targetSuite = packageName + "." + targetSuite;
                System.out.println("Selected class: " + targetSuite);
                SUT = targetSuite;
                target = compilationUnit.getResource();
            } catch (JavaModelException e) {

            }
        }
    } else if (activeEditor instanceof JavaEditor) {
        ITypeRoot root = EditorUtility.getEditorInputJavaElement(activeEditor, false);
        ITextSelection sel = (ITextSelection) ((JavaEditor) activeEditor).getSelectionProvider().getSelection();
        int offset = sel.getOffset();
        IJavaElement element;

        try {
            element = root.getElementAt(offset);
            if (element.getElementType() == IJavaElement.METHOD) {
                IJavaElement pDeclaration = element.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
                IPackageFragment pFragment = (IPackageFragment) pDeclaration;
                String packageName = "";
                if (pFragment.getCompilationUnits()[0].getPackageDeclarations().length > 0) {
                    System.out.println("Package: "
                            + pFragment.getCompilationUnits()[0].getPackageDeclarations()[0].getElementName());
                    packageName = pFragment.getCompilationUnits()[0].getPackageDeclarations()[0]
                            .getElementName();
                }
                String targetSuite = element.getParent().getElementName();
                if (!packageName.isEmpty())
                    targetSuite = packageName + "." + targetSuite;
                System.out.println("Selected class: " + targetSuite);
                SUT = targetSuite;
            } else if (element.getElementType() == IJavaElement.TYPE) {
                IType type = ((IType) element);
                System.out.println("Selected class: " + type.getFullyQualifiedName());
                SUT = type.getFullyQualifiedName();
            }

            IWorkspaceRoot wroot = ResourcesPlugin.getWorkspace().getRoot();
            target = wroot.findMember(root.getPath());
        } catch (JavaModelException e) {

        }
    }
    if (!SUT.isEmpty() && target != null) {
        IProject proj = target.getProject();
        fixJUnitClassPath(JavaCore.create(proj));
        generateTests(target);
    }

    return null;
}

From source file:org.evosuite.eclipse.popup.actions.GenerateTestsEditorAction.java

License:Open Source License

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {

    IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
    // ISelection selection = HandlerUtil.getCurrentSelection(event);
    ISelection selection = HandlerUtil.getActiveMenuSelection(event);

    String SUT = "";
    IResource target = null;/*from   ww w . j  a  va2 s  .c om*/
    System.out.println("Current selection of type " + selection.getClass().getName() + ": " + selection);
    if (selection instanceof TreeSelection) {
        TreeSelection treeSelection = (TreeSelection) selection;
        IAdaptable firstElement = (IAdaptable) treeSelection.getFirstElement();

        // Relies on an internal API, bad juju
        if (firstElement instanceof org.eclipse.jdt.internal.core.CompilationUnit) {
            try {
                org.eclipse.jdt.internal.core.CompilationUnit compilationUnit = (org.eclipse.jdt.internal.core.CompilationUnit) firstElement;
                String packageName = "";
                if (compilationUnit.getPackageDeclarations().length > 0) {
                    System.out.println(
                            "Package: " + compilationUnit.getPackageDeclarations()[0].getElementName());
                    packageName = compilationUnit.getPackageDeclarations()[0].getElementName();
                }
                String targetSuite = compilationUnit.getElementName().replace(".java", "");
                if (!packageName.isEmpty())
                    targetSuite = packageName + "." + targetSuite;
                System.out.println("Selected class: " + targetSuite);
                SUT = targetSuite;
                target = compilationUnit.getResource();
            } catch (JavaModelException e) {

            }
        }
    } else if (activeEditor instanceof JavaEditor) {
        ITypeRoot root = EditorUtility.getEditorInputJavaElement(activeEditor, false);
        ITextSelection sel = (ITextSelection) ((JavaEditor) activeEditor).getSelectionProvider().getSelection();
        int offset = sel.getOffset();
        IJavaElement element;

        try {
            element = root.getElementAt(offset);
            if (element == null) {
                ISelection sel2 = HandlerUtil.getCurrentSelection(event);
                System.out.println(
                        "Selected element of type " + sel2.getClass().getName() + ": " + sel2.toString());
            } else if (element.getElementType() == IJavaElement.METHOD) {
                IJavaElement pDeclaration = element.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
                IPackageFragment pFragment = (IPackageFragment) pDeclaration;
                String packageName = "";
                if (pFragment.getCompilationUnits()[0].getPackageDeclarations().length > 0) {
                    System.out.println("Package: "
                            + pFragment.getCompilationUnits()[0].getPackageDeclarations()[0].getElementName());
                    packageName = pFragment.getCompilationUnits()[0].getPackageDeclarations()[0]
                            .getElementName();
                }
                String targetSuite = element.getParent().getElementName();
                if (!packageName.isEmpty())
                    targetSuite = packageName + "." + targetSuite;
                System.out.println("Selected class: " + targetSuite);
                SUT = targetSuite;
            } else if (element.getElementType() == IJavaElement.TYPE) {
                IType type = ((IType) element);
                System.out.println("Selected class: " + type.getFullyQualifiedName());
                SUT = type.getFullyQualifiedName();
            }

            IWorkspaceRoot wroot = ResourcesPlugin.getWorkspace().getRoot();
            target = wroot.findMember(EditorUtility.getEditorInputJavaElement(activeEditor, false).getPath());

        } catch (JavaModelException e) {

        }

    }

    if (!SUT.isEmpty() && target != null) {
        IProject proj = target.getProject();
        fixJUnitClassPath(JavaCore.create(proj));
        generateTests(target);
    }

    return null;
}

From source file:org.fusesource.ide.branding.wizards.NewCamelTestWizardPageOne.java

License:Open Source License

/**
 * Initialized the page with the current selection
 * /*from w w w.  ja v  a 2 s . co m*/
 * @param selection
 *            The selection
 */
public void init(IStructuredSelection selection) {
    IJavaElement elem = getInitialJavaElement(selection);
    IJavaProject jproject = elem.getJavaProject();
    IPackageFragmentRoot testRoot = null;

    if (selection != null && !selection.isEmpty()) {
        Object selectedElement = selection.getFirstElement();
        IFile ifile = null;

        if (selectedElement instanceof IFile) {
            ifile = (IFile) selectedElement;
        } else if (selectedElement instanceof IAdaptable) {
            IAdaptable adaptable = (IAdaptable) selectedElement;
            ifile = (IFile) adaptable.getAdapter(IFile.class);
        }

        if (ifile != null) {
            setXmlFileUnderTest(ifile);
        }

        // now we determine the container for the test classes
        if (jproject != null && jproject.exists()) {
            try {
                IPackageFragmentRoot[] roots = jproject.getPackageFragmentRoots();
                for (int i = 0; i < roots.length; i++) {
                    if (roots[i].getKind() == IPackageFragmentRoot.K_SOURCE) {
                        if (roots[i].getPath().toFile().getPath()
                                .contains(String.format("src%stest%sjava", File.separator, File.separator))) {
                            testRoot = roots[i];
                            break;
                        } else if (roots[i].getPath().toFile().getPath()
                                .contains(String.format("src%stest%sscala", File.separator, File.separator))) {
                            testRoot = roots[i];
                            // we will prefer the src/test/java folder, so we don't break here and search for it
                        }
                    }
                }
            } catch (Exception ex) {
                Activator.getLogger().error(ex);
            }
        }
    }

    if (elem != null) {
        initContainerPage(elem);

        // if we found a suitable test class container then we set it here
        if (testRoot != null) {
            // set the container correctly
            setPackageFragmentRoot(testRoot, true);
        }

        IJavaProject project = elem.getJavaProject();
        resourceContainer = project.getProject();

        // evaluate the enclosing type
        IPackageFragment pack = (IPackageFragment) elem.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
        if (pack != null) {
            setPackageFragment(pack, true);
        } else {
            File testFolderFile = project.getProject().getParent().getRawLocation()
                    .append(getPackageFragmentRoot().getPath().makeRelative()).toFile();
            File f = getBasePackage(testFolderFile);
            if (f != null && testRoot != null) {
                IPath p = new Path(f.getPath());
                p = p.makeRelativeTo(project.getProject().getParent().getRawLocation()
                        .append(getPackageFragmentRoot().getPath().makeRelative()));
                String name = "";
                StringTokenizer strTok = new StringTokenizer(p.toOSString(), File.separator);
                while (strTok.hasMoreTokens()) {
                    String tok = strTok.nextToken();
                    if (name.trim().length() > 0) {
                        name += ".";
                    }
                    name += tok;
                }
                try {
                    IPackageFragment pf = testRoot.createPackageFragment(name, true, new NullProgressMonitor());
                    setPackageFragment(pf, true);
                } catch (Exception ex) {
                    Activator.getLogger().error(ex);
                }
            }
        }

        if (fXmlFileUnderTest == null) {
            try {
                // if we have no file selected yet, lets see if there's a
                // single one available
                List<IFile> files = ResourceModelUtils.filter(resourceContainer,
                        new org.fusesource.ide.foundation.core.util.Filter<IFile>() {
                            @Override
                            public boolean matches(IFile file) {
                                if (Objects.equal(file.getFileExtension(), "xml")) {
                                    return camelXmlMatcher.matches(file);
                                }
                                return false;
                            }
                        });
                if (files.size() == 1) {
                    setXmlFileUnderTest(files.get(0));
                }
            } catch (Exception e) {
                Activator.getLogger().error("Failed to search for Camel XML files: " + e, e);
            }
        }
    }
    setJUnit4(true, true);
    updateStatus(getStatusList());
}

From source file:org.grails.ide.eclipse.core.internal.GrailsResourceUtil.java

License:Open Source License

public static boolean isSourceFile(IJavaElement javaElement) {
    IPackageFragmentRoot root = (IPackageFragmentRoot) javaElement
            .getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
    return root != null && isSourceFolder(root);
}