Example usage for org.eclipse.jdt.core IPackageFragmentRoot isArchive

List of usage examples for org.eclipse.jdt.core IPackageFragmentRoot isArchive

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IPackageFragmentRoot isArchive.

Prototype

public boolean isArchive();

Source Link

Document

Returns whether this package fragment root's underlying resource is a binary archive (a JAR or zip file).

Usage

From source file:org.eclipse.edt.ide.ui.internal.externaltype.wizards.javatype.ExternalTypeFromJavaPage.java

License:Open Source License

private ClassLoader getURLClassLoader() {
    if (urlClassLoader == null) {
        List<URL> classPathURLs = new ArrayList<URL>();

        try {//Add Java class path.
            IPackageFragmentRoot[] roots = javaProject.getAllPackageFragmentRoots();

            for (IPackageFragmentRoot pRoot : roots) {
                IJavaProject refProject = pRoot.getParent().getJavaProject();
                IPath proRoot = refProject.getProject().getLocation();

                if (pRoot.isArchive() && pRoot.isExternal()) {
                    classPathURLs.add(pRoot.getResolvedClasspathEntry().getPath().toFile().toURI().toURL());
                } else if (pRoot.isArchive() && pRoot.getResource() != null) {
                    classPathURLs.add(proRoot.append(pRoot.getResource().getProjectRelativePath()).toFile()
                            .toURI().toURL());
                } else { //source folder
                    IPath outputRelPath = refProject.getOutputLocation().removeFirstSegments(1);
                    classPathURLs.add(proRoot.append(outputRelPath).toFile().toURI().toURL());
                }/*  ww  w  . j  av  a 2  s . c o  m*/
            }
        } catch (Throwable ee) {
            ee.printStackTrace();
        }

        ClassLoader parent = Thread.currentThread().getContextClassLoader();
        URL[] urlPaths = new URL[classPathURLs.size()];
        urlClassLoader = new URLClassLoader(classPathURLs.toArray(urlPaths), parent);
    }

    return urlClassLoader;
}

From source file:org.eclipse.emf.cdo.releng.apireports.ApiReportsActor.java

License:Open Source License

public static ApiScope walkStructureSelection(List<Object> projects, IProgressMonitor monitor) {
    ApiScope scope = new ApiScope();
    IApiBaseline workspaceBaseline = ApiBaselineManager.getManager().getWorkspaceBaseline();
    if (workspaceBaseline == null) {
        return scope;
    }//  w  ww .  j av a  2s.c o m

    Collections.sort(projects, new Comparator() {
        public int compare(Object o1, Object o2) {
            if (o1 instanceof IJavaElement && o2 instanceof IJavaElement) {
                IJavaElement element = (IJavaElement) o1;
                IJavaElement element2 = (IJavaElement) o2;
                return element.getElementType() - element2.getElementType();
            }

            return 0;
        }
    });

    for (Object project : projects) {
        if (project instanceof IJavaElement) {
            IJavaElement element = (IJavaElement) project;
            IJavaProject javaProject = element.getJavaProject();
            try {
                switch (element.getElementType()) {
                case IJavaElement.COMPILATION_UNIT: {
                    ICompilationUnit compilationUnit = (ICompilationUnit) element;
                    IApiComponent apiComponent = workspaceBaseline
                            .getApiComponent(javaProject.getElementName());
                    if (apiComponent != null) {
                        addElementFor(compilationUnit, apiComponent, scope);
                    }

                    break;
                }
                case IJavaElement.PACKAGE_FRAGMENT: {
                    IPackageFragment fragment = (IPackageFragment) element;
                    IApiComponent apiComponent = workspaceBaseline
                            .getApiComponent(javaProject.getElementName());
                    IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot) fragment
                            .getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
                    boolean isArchive = false;
                    if (packageFragmentRoot != null) {
                        isArchive = packageFragmentRoot.isArchive();
                    }

                    if (apiComponent != null) {
                        addElementFor(fragment, isArchive, apiComponent, scope);
                    }

                    break;
                }
                case IJavaElement.PACKAGE_FRAGMENT_ROOT: {
                    IPackageFragmentRoot fragmentRoot = (IPackageFragmentRoot) element;
                    IApiComponent apiComponent = workspaceBaseline
                            .getApiComponent(javaProject.getElementName());
                    if (apiComponent != null) {
                        addElementFor(fragmentRoot, apiComponent, scope);
                    }

                    break;
                }
                case IJavaElement.JAVA_PROJECT:
                    IApiComponent apiComponent = workspaceBaseline
                            .getApiComponent(javaProject.getElementName());
                    if (apiComponent != null) {
                        scope.addElement(apiComponent);
                    }

                    break;
                }
            } catch (JavaModelException e) {
                ApiPlugin.log(e);
            } catch (CoreException e) {
                ApiPlugin.log(e);
            }
        }
    }

    return scope;
}

From source file:org.eclipse.emf.cdo.releng.apireports.ApiReportsActor.java

License:Open Source License

private static void addElementFor(IPackageFragmentRoot fragmentRoot, IApiComponent apiComponent, ApiScope scope)
        throws JavaModelException, CoreException {
    boolean isArchive = fragmentRoot.isArchive();
    IJavaElement[] packageFragments = fragmentRoot.getChildren();
    for (int j = 0, max2 = packageFragments.length; j < max2; j++) {
        IPackageFragment packageFragment = (IPackageFragment) packageFragments[j];
        addElementFor(packageFragment, isArchive, apiComponent, scope);
    }/*w  w  w  . j av  a  2 s  . c o  m*/
}

From source file:org.eclipse.fx.ide.ui.util.RelativeFileLocator.java

License:Open Source License

public static File locateFile(URI uri, String filePath) {
    filePath = filePath.trim();/*from   w w  w  .  j  a v a  2s  .co m*/
    IProject p = ResourcesPlugin.getWorkspace().getRoot().getProject(uri.segment(1));
    IJavaProject jp = JavaCore.create(p);

    // Absolute to project
    if (filePath.startsWith("/")) {
        filePath = filePath.substring(1); // Remove the leading /
        IFile f = p.getFile(filePath);
        if (f.exists()) {
            return f.getLocation().toFile().getAbsoluteFile();
        } else if (jp != null) {
            try {
                for (IPackageFragmentRoot r : jp.getPackageFragmentRoots()) {
                    if (r.isArchive()) {
                        //TODO We should allow to load styles from the referenced jars
                    } else if (r.getResource() instanceof IFolder) {
                        IFolder folder = (IFolder) r.getResource();
                        if (folder.exists()) {
                            f = folder.getFile(filePath);
                            if (f.exists()) {
                                return f.getLocation().toFile().getAbsoluteFile();
                            }
                        }
                    }
                }
            } catch (JavaModelException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    } else {
        URI fileUri = null;

        try {
            fileUri = URI.createURI(filePath);
        } catch (Exception e) {
            // TODO: handle exception
        }

        if (fileUri != null && fileUri.isPlatformResource()) {
            Path path = new Path(fileUri.toPlatformString(true));
            IWorkspaceRoot root = jp.getProject().getWorkspace().getRoot();
            IFile file = root.getFile(path);
            if (file.exists()) {
                return file.getLocation().toFile().getAbsoluteFile();
            }
        } else {
            IPath path = null;
            for (int i = 2; i < uri.segmentCount() - 1; i++) {
                if (path == null) {
                    path = new Path(uri.segment(i));
                } else {
                    path = path.append(uri.segment(i));
                }
            }

            if (path != null) {
                IFile f = p.getFile(path.append(filePath));
                if (f.exists()) {
                    return f.getLocation().toFile().getAbsoluteFile();
                }
            }
        }
    }

    return null;
}

From source file:org.eclipse.incquery.patternlanguage.emf.ui.validation.GenmodelBasedEMFPatternLanguageJavaValidator.java

License:Open Source License

protected String getActualPackageName(PatternModel model) {
    URI fileURI = model.eResource().getURI();
    for (Pair<IStorage, IProject> storage : storage2UriMapper.getStorages(fileURI)) {
        if (storage.getFirst() instanceof IFile) {
            IPath fileWorkspacePath = storage.getFirst().getFullPath();
            IJavaProject javaProject = JavaCore.create(storage.getSecond());
            if (javaProject != null && javaProject.exists() && javaProject.isOpen()) {
                try {
                    for (IPackageFragmentRoot root : javaProject.getPackageFragmentRoots()) {
                        if (!root.isArchive() && !root.isExternal()) {
                            IResource resource = root.getResource();
                            if (resource != null) {
                                IPath sourceFolderPath = resource.getFullPath();
                                if (sourceFolderPath.isPrefixOf(fileWorkspacePath)) {
                                    IPath classpathRelativePath = fileWorkspacePath
                                            .makeRelativeTo(sourceFolderPath);
                                    return classpathRelativePath.removeLastSegments(1).toString().replace("/",
                                            ".");
                                }/*from w  w w . j  a  v  a2s. c  o  m*/
                            }
                        }
                    }
                } catch (JavaModelException e) {
                    logger.error("Error resolving package declaration for Pattern Model", e);
                }
            }
        }
    }
    return null;
}

From source file:org.eclipse.jdt.internal.core.search.matching.MatchLocator.java

License:Open Source License

public static ClassFileReader classFileReader(IType type) {
    IClassFile classFile = type.getClassFile();
    JavaModelManager manager = JavaModelManager.getJavaModelManager();
    if (classFile.isOpen())
        return (ClassFileReader) manager.getInfo(type);

    PackageFragment pkg = (PackageFragment) type.getPackageFragment();
    IPackageFragmentRoot root = (IPackageFragmentRoot) pkg.getParent();
    try {/*  www.j  a v  a  2 s .  c  o  m*/
        if (!root.isArchive())
            return Util.newClassFileReader(((JavaElement) type).resource());

        ZipFile zipFile = null;
        try {
            IPath zipPath = root.getPath();
            if (JavaModelManager.ZIP_ACCESS_VERBOSE)
                System.out.println("(" + Thread.currentThread() //$NON-NLS-1$
                        + ") [MatchLocator.classFileReader()] Creating ZipFile on " + zipPath); //$NON-NLS-1$
            zipFile = manager.getZipFile(zipPath);
            String classFileName = classFile.getElementName();
            String path = Util.concatWith(pkg.names, classFileName, '/');
            return ClassFileReader.read(zipFile, path);
        } finally {
            manager.closeZipFile(zipFile);
        }
    } catch (ClassFormatException e) {
        // invalid class file: return null
    } catch (CoreException e) {
        // cannot read class file: return null
    } catch (IOException e) {
        // cannot read class file: return null
    }
    return null;
}

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

License:Open Source License

private synchronized void computeAllRootPaths(IType type) {
    if (this.areRootPathsComputed) {
        return;/*from   w w w.j  av  a  2  s.  com*/
    }
    IPackageFragmentRoot root = (IPackageFragmentRoot) type.getPackageFragment().getParent();
    IPath pkgFragmentRootPath = root.getPath();
    final HashSet tempRoots = new HashSet();
    long time = 0;
    if (VERBOSE) {
        System.out.println("compute all root paths for " + root.getElementName()); //$NON-NLS-1$
        time = System.currentTimeMillis();
    }
    final HashSet firstLevelPackageNames = new HashSet();
    boolean containsADefaultPackage = false;
    boolean containsJavaSource = !pkgFragmentRootPath.equals(this.sourcePath); // used to optimize zip file reading only if source path and root path are equals, otherwise assume that attachment contains Java source

    String sourceLevel = null;
    String complianceLevel = null;
    if (root.isArchive()) {
        JavaModelManager manager = JavaModelManager.getJavaModelManager();
        ZipFile zip = null;
        try {
            zip = manager.getZipFile(pkgFragmentRootPath);
            for (Enumeration entries = zip.entries(); entries.hasMoreElements();) {
                ZipEntry entry = (ZipEntry) entries.nextElement();
                String entryName = entry.getName();
                if (!entry.isDirectory()) {
                    if (Util.isClassFileName(entryName)) {
                        int index = entryName.indexOf('/');
                        if (index != -1) {
                            String firstLevelPackageName = entryName.substring(0, index);
                            if (!firstLevelPackageNames.contains(firstLevelPackageName)) {
                                if (sourceLevel == null) {
                                    IJavaProject project = root.getJavaProject();
                                    sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true);
                                    complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
                                }
                                IStatus status = JavaConventions.validatePackageName(firstLevelPackageName,
                                        sourceLevel, complianceLevel);
                                if (status.isOK() || status.getSeverity() == IStatus.WARNING) {
                                    firstLevelPackageNames.add(firstLevelPackageName);
                                }
                            }
                        } else {
                            containsADefaultPackage = true;
                        }
                    } else if (!containsJavaSource
                            && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(entryName)) {
                        containsJavaSource = true;
                    }
                }
            }
        } catch (CoreException e) {
            // ignore
        } finally {
            manager.closeZipFile(zip); // handle null case
        }
    } else {
        Object target = JavaModel.getTarget(root.getPath(), true);
        if (target instanceof IResource) {
            IResource resource = (IResource) target;
            if (resource instanceof IContainer) {
                try {
                    IResource[] members = ((IContainer) resource).members();
                    for (int i = 0, max = members.length; i < max; i++) {
                        IResource member = members[i];
                        String resourceName = member.getName();
                        if (member.getType() == IResource.FOLDER) {
                            if (sourceLevel == null) {
                                IJavaProject project = root.getJavaProject();
                                sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true);
                                complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
                            }
                            IStatus status = JavaConventions.validatePackageName(resourceName, sourceLevel,
                                    complianceLevel);
                            if (status.isOK() || status.getSeverity() == IStatus.WARNING) {
                                firstLevelPackageNames.add(resourceName);
                            }
                        } else if (Util.isClassFileName(resourceName)) {
                            containsADefaultPackage = true;
                        } else if (!containsJavaSource
                                && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(resourceName)) {
                            containsJavaSource = true;
                        }
                    }
                } catch (CoreException e) {
                    // ignore
                }
            }
        }
    }

    if (containsJavaSource) { // no need to read source attachment if it contains no Java source (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=190840 )
        Object target = JavaModel.getTarget(this.sourcePath, true);
        if (target instanceof IContainer) {
            IContainer folder = (IContainer) target;
            computeRootPath(folder, firstLevelPackageNames, containsADefaultPackage, tempRoots,
                    folder.getFullPath().segmentCount()/*if external folder, this is the linked folder path*/);
        } else {
            JavaModelManager manager = JavaModelManager.getJavaModelManager();
            ZipFile zip = null;
            try {
                zip = manager.getZipFile(this.sourcePath);
                for (Enumeration entries = zip.entries(); entries.hasMoreElements();) {
                    ZipEntry entry = (ZipEntry) entries.nextElement();
                    String entryName;
                    if (!entry.isDirectory() && org.eclipse.jdt.internal.core.util.Util
                            .isJavaLikeFileName(entryName = entry.getName())) {
                        IPath path = new Path(entryName);
                        int segmentCount = path.segmentCount();
                        if (segmentCount > 1) {
                            for (int i = 0, max = path.segmentCount() - 1; i < max; i++) {
                                if (firstLevelPackageNames.contains(path.segment(i))) {
                                    tempRoots.add(path.uptoSegment(i));
                                    // don't break here as this path could contain other first level package names (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=74014)
                                }
                                if (i == max - 1 && containsADefaultPackage) {
                                    tempRoots.add(path.uptoSegment(max));
                                }
                            }
                        } else if (containsADefaultPackage) {
                            tempRoots.add(new Path("")); //$NON-NLS-1$
                        }
                    }
                }
            } catch (CoreException e) {
                // ignore
            } finally {
                manager.closeZipFile(zip); // handle null case
            }
        }
    }
    int size = tempRoots.size();
    if (this.rootPaths != null) {
        for (Iterator iterator = this.rootPaths.iterator(); iterator.hasNext();) {
            tempRoots.add(new Path((String) iterator.next()));
        }
        this.rootPaths.clear();
    } else {
        this.rootPaths = new ArrayList(size);
    }
    size = tempRoots.size();
    if (size > 0) {
        ArrayList sortedRoots = new ArrayList(tempRoots);
        if (size > 1) {
            Collections.sort(sortedRoots, new Comparator() {
                public int compare(Object o1, Object o2) {
                    IPath path1 = (IPath) o1;
                    IPath path2 = (IPath) o2;
                    return path1.segmentCount() - path2.segmentCount();
                }
            });
        }
        for (Iterator iter = sortedRoots.iterator(); iter.hasNext();) {
            IPath path = (IPath) iter.next();
            this.rootPaths.add(path.toString());
        }
    }
    this.areRootPathsComputed = true;
    if (VERBOSE) {
        System.out.println("Spent " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
        System.out.println("Found " + size + " root paths"); //$NON-NLS-1$ //$NON-NLS-2$
        int i = 0;
        for (Iterator iterator = this.rootPaths.iterator(); iterator.hasNext();) {
            System.out.println("root[" + i + "]=" + ((String) iterator.next()));//$NON-NLS-1$ //$NON-NLS-2$
            i++;
        }
    }
}

From source file:org.eclipse.jem.internal.beaninfo.core.BeanInfoCacheController.java

License:Open Source License

private synchronized RootIndex getRootIndex(IPackageFragmentRoot root, IProject project) {
    Index index = project != null ? getProjectIndex(project) : getMainIndex();
    IPath rootPath = root.getPath();//  w w  w  .  ja v a2s  . com
    RootIndex rootIndex = (RootIndex) index.rootToRootIndex.get(rootPath);
    if (rootIndex == null) {
        // Need to do a new root path.
        String rootName = ROOT_PREFIX + (++index.highRootNumber);
        rootIndex = root.isArchive() ? createArchiveRootIndex(root, rootName, index)
                : new FolderRootIndex(rootName, index);
        index.rootToRootIndex.put(rootPath, rootIndex);
        // Don't set index dirty until we actually save a class cache file. Until then it only needs to be in memory.
    }
    rootIndex.setupIndex(project); // Set it up, or may already be set, so it will do nothing in that case.
    return rootIndex;
}

From source file:org.eclipse.jpt.jaxb.ui.internal.filters.NonArchiveOrExternalElementFilter.java

License:Open Source License

@Override
public boolean select(Viewer viewer, Object parent, Object element) {
    if (element instanceof IPackageFragmentRoot) {
        IPackageFragmentRoot root = (IPackageFragmentRoot) element;
        return !root.isArchive() && !root.isExternal();
    }/*from w w  w.  j a  v  a2 s. c o m*/
    return true;
}

From source file:org.eclipse.jst.j2ee.internal.dialogs.TypeJavaSearchScope.java

License:Open Source License

public void add(IJavaElement element) throws JavaModelException {
    IPackageFragmentRoot root = null;
    switch (element.getElementType()) {
    case IJavaElement.JAVA_MODEL:
        // a workspace sope should be used
        break;/*from w w  w .ja  v  a 2s .com*/
    case IJavaElement.JAVA_PROJECT:
        this.add((IJavaProject) element, true, new HashSet(2));
        break;
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
        root = (IPackageFragmentRoot) element;
        this.add(root.getPath(), true);
        break;
    case IJavaElement.PACKAGE_FRAGMENT:
        root = (IPackageFragmentRoot) element.getParent();
        if (root.isArchive()) {
            this.add(root.getPath().append(new Path(element.getElementName().replace('.', '/'))), false);
        } else {
            IResource resource = element.getUnderlyingResource();
            if (resource != null && resource.isAccessible()) {
                this.add(resource.getFullPath(), false);
            }
        }
        break;
    default:
        // remember sub-cu (or sub-class file) java elements
        if (element instanceof IMember) {
            if (this.elements == null) {
                this.elements = new ArrayList();
            }
            this.elements.add(element);
        }
        this.add(this.fullPath(element), true);

        // find package fragment root including this java element
        IJavaElement parent = element.getParent();
        while (parent != null && !(parent instanceof IPackageFragmentRoot)) {
            parent = parent.getParent();
        }
        if (parent instanceof IPackageFragmentRoot) {
            root = (IPackageFragmentRoot) parent;
        }
    }

    if (root != null) {
        if (root.getKind() == IPackageFragmentRoot.K_BINARY) {
            this.addEnclosingProjectOrJar(root.getPath());
        } else {
            this.addEnclosingProjectOrJar(root.getJavaProject().getProject().getFullPath());
        }
    }
}