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

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

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IPackageFragment 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:at.bestsolution.fxide.jdt.text.javadoc.JavadocContentAccess2.java

License:Open Source License

/**
 * Returns the Javadoc for a package which could be present in package.html, package-info.java
 * or from an attached Javadoc.//  w  ww.  j a va 2s  .  c  o  m
 *
 * @param packageFragment the package which is requesting for the document
 * @return the document content in HTML format or <code>null</code> if there is no associated
 *         Javadoc
 * @throws CoreException if the Java element does not exists or an exception occurs while
 *             accessing the file containing the package Javadoc
 * @since 3.9
 */
public static String getHTMLContent(IPackageFragment packageFragment) throws CoreException {
    IPackageFragmentRoot root = (IPackageFragmentRoot) packageFragment
            .getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);

    //1==> Handle the case when the documentation is present in package-info.java or package-info.class file
    ITypeRoot packageInfo;
    boolean isBinary = root.getKind() == IPackageFragmentRoot.K_BINARY;
    if (isBinary) {
        packageInfo = packageFragment.getClassFile(JavaModelUtil.PACKAGE_INFO_CLASS);
    } else {
        packageInfo = packageFragment.getCompilationUnit(JavaModelUtil.PACKAGE_INFO_JAVA);
    }
    if (packageInfo != null && packageInfo.exists()) {
        String cuSource = packageInfo.getSource();
        //the source can be null for some of the class files
        if (cuSource != null) {
            Javadoc packageJavadocNode = getPackageJavadocNode(packageFragment, cuSource);
            if (packageJavadocNode != null) {
                IJavaElement element;
                if (isBinary) {
                    element = ((IClassFile) packageInfo).getType();
                } else {
                    element = packageInfo.getParent(); // parent is the IPackageFragment
                }
                return new JavadocContentAccess2(element, packageJavadocNode, cuSource).toHTML();
            }
        }
    }

    // 2==> Handle the case when the documentation is done in package.html file. The file can be either in normal source folder or coming from a jar file
    else {
        Object[] nonJavaResources = packageFragment.getNonJavaResources();
        // 2.1 ==>If the package.html file is present in the source or directly in the binary jar
        for (Object nonJavaResource : nonJavaResources) {
            if (nonJavaResource instanceof IFile) {
                IFile iFile = (IFile) nonJavaResource;
                if (iFile.exists() && JavaModelUtil.PACKAGE_HTML.equals(iFile.getName())) {
                    return getIFileContent(iFile);
                }
            }
        }

        // 2.2==>The file is present in a binary container
        if (isBinary) {
            for (Object nonJavaResource : nonJavaResources) {
                // The content is from an external binary class folder
                if (nonJavaResource instanceof IJarEntryResource) {
                    IJarEntryResource jarEntryResource = (IJarEntryResource) nonJavaResource;
                    String encoding = getSourceAttachmentEncoding(root);
                    if (JavaModelUtil.PACKAGE_HTML.equals(jarEntryResource.getName())
                            && jarEntryResource.isFile()) {
                        return getHTMLContent(jarEntryResource, encoding);
                    }
                }
            }
            //2.3 ==>The file is present in the source attachment path.
            String contents = getHTMLContentFromAttachedSource(root, packageFragment);
            if (contents != null)
                return contents;
        }
    }

    //3==> Handle the case when the documentation is coming from the attached Javadoc
    if ((root.isArchive() || root.isExternal())) {
        return packageFragment.getAttachedJavadoc(null);

    }

    return null;
}

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

License:Open Source License

public IJavaElement getElementAtConsideringSibling(int position) throws JavaModelException {
    IPackageFragment fragment = (IPackageFragment) getParent();
    PackageFragmentRoot root = (PackageFragmentRoot) fragment.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
    SourceMapper mapper = root.getSourceMapper();
    if (mapper == null) {
        return null;
    } else {//ww w  . j a v  a2  s  .  co  m
        int index = this.name.indexOf('$');
        int prefixLength = index < 0 ? this.name.length() : index;

        IType type = null;
        int start = -1;
        int end = Integer.MAX_VALUE;
        IJavaElement[] children = fragment.getChildren();
        for (int i = 0; i < children.length; i++) {
            String childName = children[i].getElementName();

            int childIndex = childName.indexOf('$');
            int childPrefixLength = childIndex < 0 ? childName.indexOf('.') : childIndex;
            if (prefixLength == childPrefixLength && this.name.regionMatches(0, childName, 0, prefixLength)) {
                IClassFile classFile = (IClassFile) children[i];

                // ensure this class file's buffer is open so that source ranges are computed
                classFile.getBuffer();

                SourceRange range = mapper.getSourceRange(classFile.getType());
                if (range == SourceMapper.UNKNOWN_RANGE)
                    continue;
                int newStart = range.getOffset();
                int newEnd = newStart + range.getLength() - 1;
                if (newStart > start && newEnd < end && newStart <= position && newEnd >= position) {
                    type = classFile.getType();
                    start = newStart;
                    end = newEnd;
                }
            }
        }
        if (type != null) {
            return findElement(type, position, mapper);
        }
        return null;
    }
}

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

License:Open Source License

private IType createTypeFromJar(String resourcePath, int separatorIndex) throws JavaModelException {
    // path to a class file inside a jar
    // Optimization: cache package fragment root handle and package handles
    if (this.lastPkgFragmentRootPath == null || this.lastPkgFragmentRootPath.length() > resourcePath.length()
            || !resourcePath.startsWith(this.lastPkgFragmentRootPath)) {
        String jarPath = resourcePath.substring(0, separatorIndex);
        IPackageFragmentRoot root = ((AbstractJavaSearchScope) this.scope).packageFragmentRoot(resourcePath,
                separatorIndex, jarPath);
        if (root == null)
            return null;
        this.lastPkgFragmentRootPath = jarPath;
        this.lastPkgFragmentRoot = root;
        this.packageHandles = new HashtableOfArrayToObject(5);
    }//from   w  w w.j av a2 s  .c  o m
    // create handle
    String classFilePath = resourcePath.substring(separatorIndex + 1);
    String[] simpleNames = new Path(classFilePath).segments();
    String[] pkgName;
    int length = simpleNames.length - 1;
    if (length > 0) {
        pkgName = new String[length];
        System.arraycopy(simpleNames, 0, pkgName, 0, length);
    } else {
        pkgName = CharOperation.NO_STRINGS;
    }
    IPackageFragment pkgFragment = (IPackageFragment) this.packageHandles.get(pkgName);
    if (pkgFragment == null) {
        pkgFragment = ((PackageFragmentRoot) this.lastPkgFragmentRoot).getPackageFragment(pkgName);
        // filter org.apache.commons.lang.enum package for projects above 1.5 
        // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264
        if (length == 5 && pkgName[4].equals("enum")) { //$NON-NLS-1$
            IJavaProject proj = (IJavaProject) pkgFragment.getAncestor(IJavaElement.JAVA_PROJECT);
            if (!proj.equals(this.lastProject)) {
                String complianceStr = proj.getOption(CompilerOptions.OPTION_Source, true);
                this.complianceValue = CompilerOptions.versionToJdkLevel(complianceStr);
                this.lastProject = proj;
            }
            if (this.complianceValue >= ClassFileConstants.JDK1_5)
                return null;
        }
        this.packageHandles.put(pkgName, pkgFragment);
    }
    return pkgFragment.getClassFile(simpleNames[length]).getType();
}

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

License:Open Source License

@Override
protected Object[] getPackageContent(IPackageFragment fragment) throws JavaModelException {
    ArrayList<Object> result = new ArrayList<Object>();
    if (fIsFlatLayout) {
        result.addAll(Arrays.asList(super.getPackageContent(fragment)));
        for (Object f : fragment.getNonJavaResources()) {
            if (f instanceof IFile) {
                if (((IFile) f).getName().equals("module.ceylon")) {
                    IPackageFragmentRoot root = (IPackageFragmentRoot) fragment
                            .getAncestor(PACKAGE_FRAGMENT_ROOT);
                    for (Object o : super.getPackageFragmentRootContent(root)) {
                        if (o instanceof IPackageFragment) {
                            if (o != fragment
                                    && fragment.getPath().isPrefixOf(((IPackageFragment) o).getPath())) {
                                result.add(o);
                            }//w  w w .  ja va2s . co m
                        }
                    }
                    return result.toArray();
                }
            }
        }
    } else {
        // hierarchical package mode
        getHierarchicalPackageChildren((IPackageFragmentRoot) fragment.getParent(), fragment, result);
        Object[] nonPackages = super.getPackageContent(fragment);
        if (result.isEmpty())
            return nonPackages;
        for (int i = 0; i < nonPackages.length; i++) {
            result.add(nonPackages[i]);
        }
    }
    return result.toArray();
}

From source file:com.redhat.ceylon.eclipse.code.navigator.NonEssentialElementsFilter.java

License:Open Source License

/**
 * Tells whether the given package has unfiltered resources.
 *
 * @param viewer the viewer/*from   w  w w.j a  v a 2  s  .  c  om*/
 * @param pkg the package
 * @return <code>true</code> if the package has unfiltered resources
 * @throws JavaModelException if this element does not exist or if an exception occurs while
 *             accessing its corresponding resource
 */
protected boolean hasUnfilteredResources(Viewer viewer, IPackageFragment pkg) throws JavaModelException {
    Object[] resources = null;
    if (pkg.isDefaultPackage()) {
        IPackageFragmentRoot root = (IPackageFragmentRoot) pkg.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
        resources = root.getNonJavaResources();
    } else {
        resources = pkg.getNonJavaResources();
    }
    int length = resources.length;
    if (length == 0)
        return false;

    if (!(viewer instanceof StructuredViewer))
        return true;

    ViewerFilter[] filters = ((StructuredViewer) viewer).getFilters();
    resourceLoop: for (int i = 0; i < length; i++) {
        for (int j = 0; j < filters.length; j++) {
            if (!filters[j].select(viewer, pkg, resources[i]))
                continue resourceLoop;
        }
        return true;

    }
    return false;
}

From source file:com.siteview.mde.internal.ui.refactoring.ManifestPackageMoveParticipant.java

License:Open Source License

protected boolean initialize(Object element) {
    if (element instanceof IPackageFragment) {
        IPackageFragment fragment = (IPackageFragment) element;
        IJavaProject javaProject = (IJavaProject) fragment.getAncestor(IJavaElement.JAVA_PROJECT);
        IProject project = javaProject.getProject();
        if (PDEProject.getManifest(project).exists()) {
            fProject = javaProject.getProject();
            fElements = new HashMap();
            fElements.put(fragment, getNewName(getArguments().getDestination(), element));
            return true;
        }//from w  w  w  . ja va2  s  .  com
    }
    return false;
}

From source file:com.siteview.mde.internal.ui.refactoring.ManifestPackageRenameParticipant.java

License:Open Source License

protected boolean initialize(Object element) {
    try {// w ww  . java 2  s .c om
        if (element instanceof IPackageFragment) {
            IPackageFragment fragment = (IPackageFragment) element;
            if (!fragment.containsJavaResources())
                return false;
            IJavaProject javaProject = (IJavaProject) fragment.getAncestor(IJavaElement.JAVA_PROJECT);
            IProject project = javaProject.getProject();
            if (WorkspaceModelManager.isPluginProject(project)) {
                fProject = javaProject.getProject();
                fElements = new HashMap();
                fElements.put(fragment, getArguments().getNewName());
                return true;
            }
        }
    } catch (JavaModelException e) {
    }
    return false;
}

From source file:edu.buffalo.cse.green.JavaModelListener.java

License:Open Source License

/**
 * @see edu.buffalo.cse.green.RefactorHandler#handleMove(edu.buffalo.cse.green.editor.model.RootModel, org.eclipse.jdt.core.IJavaElement, org.eclipse.jdt.core.IJavaElement)
 *//*from  ww  w . j a va  2  s.c  o  m*/
public void handleMove(RootModel root, E sourceElement, E targetElement) {
    root.changeProjectElement(sourceElement, targetElement);

    try {
        List<IJavaElement> packages = root.getElementsOfKind(PACKAGE_FRAGMENT);

        // look through packages to match up source and destination elements
        for (IJavaElement packElement : packages) {
            IPackageFragment packFrag = (IPackageFragment) packElement;

            if (JavaModelListener.sameElements(packFrag.getAncestor(JAVA_PROJECT),
                    sourceElement.getPrimaryElement())) {
                for (IPackageFragment packFrags : targetElement.getPackageFragments()) {
                    // check for the same name of the two packages
                    if (packFrag.getElementName().equals(packFrags.getElementName())) {
                        PackageRefactorHandler.instance().handleMove(root, packFrag, packFrags);
                    }
                }
            }
        }

        root.dispose();
    } catch (JavaModelException e) {
        e.printStackTrace();
    }
}

From source file:org.apache.felix.sigil.eclipse.model.util.JavaHelper.java

License:Apache License

private static void findJavaModelImports(ISigilProjectModel project, Set<String> imports,
        IProgressMonitor monitor) {//from ww  w.  ja  v a  2  s .  c  o  m
    try {
        for (IPackageFragment root : project.getJavaModel().getPackageFragments()) {
            if (monitor.isCanceled()) {
                return;
            }

            IPackageFragmentRoot rt = (IPackageFragmentRoot) root
                    .getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);

            if (isInClassPath(project, rt)) {
                for (ICompilationUnit cu : root.getCompilationUnits()) {
                    scanImports(cu, imports);
                }

                for (IClassFile cf : root.getClassFiles()) {
                    scanImports(cf, imports);
                }
            }
        }
    } catch (JavaModelException e) {
        SigilCore.error("Failed to parse java model", e);
    }
}

From source file:org.apache.felix.sigil.eclipse.model.util.JavaHelper.java

License:Apache License

public static Set<String> findLocalPackageUsers(ISigilProjectModel project, String packageName,
        IProgressMonitor monitor) throws JavaModelException {
    Set<String> imports = new HashSet<String>();
    Set<String> check = new HashSet<String>();
    for (IPackageFragment root : project.getJavaModel().getPackageFragments()) {
        IPackageFragmentRoot rt = (IPackageFragmentRoot) root.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);

        if (isInClassPath(project, rt)) {
            for (ICompilationUnit cu : root.getCompilationUnits()) {
                IPackageFragment pack = (IPackageFragment) cu.getAncestor(IJavaModel.PACKAGE_FRAGMENT);
                if (!pack.getElementName().equals(packageName)) {
                    scanImports(cu, check);
                    if (check.contains(packageName)) {
                        imports.add(pack.getElementName());
                    }/*from  www  . j a  va  2s.c o m*/
                }
                check.clear();
            }

            for (IClassFile cf : root.getClassFiles()) {
                IPackageFragment pack = (IPackageFragment) cf.getAncestor(IJavaModel.PACKAGE_FRAGMENT);
                if (!pack.getElementName().equals(packageName)) {
                    scanImports(cf, check);
                    if (check.contains(packageName)) {
                        imports.add(pack.getElementName());
                    }
                }
                check.clear();
            }
        }
    }

    return imports;
}