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

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

Introduction

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

Prototype

IPath getPath();

Source Link

Document

Returns the path to the innermost resource enclosing this element.

Usage

From source file:org.eclipse.xtext.common.types.ui.trace.TraceForTypeRootProvider.java

License:Open Source License

protected IPath getSourcePath(final ITypeRoot derivedJavaType) {
    IJavaElement current = derivedJavaType.getParent();
    while (current != null) {
        if (current instanceof IPackageFragmentRoot) {
            IPackageFragmentRoot fragmentRoot = (IPackageFragmentRoot) current;
            try {
                IPath attachmentPath = fragmentRoot.getSourceAttachmentPath();
                if (attachmentPath != null)
                    return attachmentPath;
            } catch (JavaModelException e) {
            }/*  w  w  w  .  j  a  va  2  s. co  m*/
            if (current instanceof JarPackageFragmentRoot)
                return fragmentRoot.getPath();

        }
        current = current.getParent();
    }
    return null;
}

From source file:org.eclipse.xtext.ui.containers.JavaProjectsStateHelper.java

License:Open Source License

protected IPackageFragmentRoot getJarWithEntry(URI uri) {
    Iterable<Pair<IStorage, IProject>> storages = getStorages(uri);
    IPackageFragmentRoot result = null;//w  w  w .  j  av  a 2 s  .c o m
    for (Pair<IStorage, IProject> storage2Project : storages) {
        IStorage storage = storage2Project.getFirst();
        if (storage instanceof IJarEntryResource) {
            IPackageFragmentRoot fragmentRoot = ((IJarEntryResource) storage).getPackageFragmentRoot();
            if (fragmentRoot != null) {
                // IPackageFragmentRoot has some unexpected caching - it may return a different project
                // thus we use the one that was used to record the IPackageFragmentRoot
                IProject actualProject = storage2Project.getSecond();
                IJavaProject javaProject = JavaCore.create(actualProject);
                if (!javaProject.exists()) {
                    javaProject = fragmentRoot.getJavaProject();
                }
                if (isAccessibleXtextProject(javaProject.getProject())) {
                    // if both projects are the same - fine
                    if (javaProject.equals(fragmentRoot.getJavaProject()))
                        return fragmentRoot;
                    // otherwise re-obtain the fragment root from the real project
                    if (fragmentRoot.isExternal()) {
                        IPackageFragmentRoot actualRoot = javaProject
                                .getPackageFragmentRoot(fragmentRoot.getPath().toString());
                        if (actualProject.exists()) {
                            return actualRoot;
                        }
                    } else {
                        IPackageFragmentRoot actualRoot = javaProject
                                .getPackageFragmentRoot(fragmentRoot.getResource());
                        if (actualRoot.exists()) {
                            return actualRoot;
                        }
                    }
                    result = fragmentRoot;
                }
                if (result == null)
                    result = fragmentRoot;
            }
        }
    }
    return result;
}

From source file:org.eclipse.xtext.ui.resource.JarEntryURIHelper.java

License:Open Source License

public static URI getUriForPackageFragmentRoot(IPackageFragmentRoot root) {
    IResource underlyingResource = root.getResource();
    if (underlyingResource == null) {
        return URI.createFileURI(root.getPath().toString());
    } else {//from w w w  .  j  a v  a  2s  .com
        return URI.createPlatformResourceURI(underlyingResource.getFullPath().toString(), true);
    }
}

From source file:org.eclipse.xtext.ui.resource.PackageFragmentRootWalker.java

License:Open Source License

private boolean existsPhysically(IPackageFragmentRoot root) throws JavaModelException {
    if (root.isExternal())
        return root.getPath().toFile().exists();
    else/*w  w w . j  a v  a  2 s . c  om*/
        return root.getUnderlyingResource().exists();
}

From source file:org.eclipse.xtext.ui.resource.Storage2UriMapperJavaImpl.java

License:Open Source License

/**
 * @since 2.4//from  w w w  .  j a  v  a 2s  .c om
 */
@Override
public Pair<URI, URI> getURIMapping(IPackageFragmentRoot root) throws JavaModelException {
    PackageFragmentRootData data = getData(root);
    if (data.uriPrefix == null)
        return null;
    IPath path = root.isExternal() ? root.getPath() : root.getUnderlyingResource().getLocation();
    URI physical = null;
    if (root.isArchive()) {
        String archiveScheme = "zip".equalsIgnoreCase(root.getPath().getFileExtension()) ? "zip" : "jar";
        physical = URI.createURI(archiveScheme + ":file:" + path.toFile().getPath() + "!/");
    } else {
        physical = URI.createFileURI(path.toFile().getPath() + "/");
    }
    return Tuples.create(data.uriPrefix, physical);
}

From source file:org.eclipse.xtext.ui.resource.Storage2UriMapperJavaImpl.java

License:Open Source License

private PackageFragmentRootData getCachedData(IPackageFragmentRoot root) {
    final String path = root.getPath().toString();
    synchronized (cachedPackageFragmentRootData) {
        if (cachedPackageFragmentRootData.containsKey(path)) {
            final PackageFragmentRootData data = cachedPackageFragmentRootData.get(path);
            if (isUpToDate(data, root)) {
                data.addRoot(root);//from   ww  w.j a  va  2  s  .c  o m
                return data;
            } else {
                cachedPackageFragmentRootData.remove(path);
            }
        }
    }
    PackageFragmentRootData data = initializeData(root);
    synchronized (cachedPackageFragmentRootData) {
        cachedPackageFragmentRootData.put(path, data);
    }
    return data;
}

From source file:org.eclipse.xtext.ui.resource.Storage2UriMapperJavaImpl.java

License:Open Source License

private Object computeModificationStamp(IPackageFragmentRoot root) {
    try {//from w w w .j a va 2  s  .com
        if (root.exists()) {
            IResource resource = root.getUnderlyingResource();
            if (resource != null) {
                Object result = getLastModified(resource);
                if (result != null) {
                    return result;
                }
            }
            return root.getPath().toFile().lastModified();
        }
    } catch (CoreException e) {
        log.error(e.getMessage(), e);
    }
    return new Object();
}

From source file:org.eclipse.xtext.ui.resource.Storage2UriMapperJavaImpl.java

License:Open Source License

/**
 * @since 2.5//from w ww  .j  a v  a 2s.c o  m
 */
@Override
public URI getUri(/* @NonNull */ IStorage storage) {
    if (storage instanceof IJarEntryResource) {
        final IJarEntryResource casted = (IJarEntryResource) storage;
        IPackageFragmentRoot packageFragmentRoot = casted.getPackageFragmentRoot();
        Map<URI, IStorage> data = getAllEntries(packageFragmentRoot);
        for (Map.Entry<URI, IStorage> entry : data.entrySet()) {
            if (entry.getValue().equals(casted))
                return entry.getKey();
        }
        if (packageFragmentRoot.exists() && packageFragmentRoot.isArchive()) {
            IPath jarPath = packageFragmentRoot.getPath();
            URI jarURI;
            if (packageFragmentRoot.isExternal()) {
                jarURI = URI.createFileURI(jarPath.toOSString());
            } else {
                jarURI = URI.createPlatformResourceURI(jarPath.toString(), true);
            }
            URI result = URI.createURI("archive:" + jarURI + "!" + storage.getFullPath());
            return result;
        }
    }
    return null;
}

From source file:org.eclipse.xtext.ui.util.JdtClasspathUriResolver.java

License:Open Source License

protected URI findResourceInWorkspace(IJavaProject javaProject, URI classpathUri) throws CoreException {
    if (javaProject.exists()) {
        String packagePath = classpathUri.trimSegments(1).path();
        String fullPath = classpathUri.path();
        String fileName = classpathUri.lastSegment();
        IPath filePath = new Path(fileName);
        String packageName = isEmpty(packagePath) ? "" : packagePath.substring(1).replace('/', '.');
        for (IPackageFragmentRoot packageFragmentRoot : javaProject.getAllPackageFragmentRoots()) {
            IPackageFragment packageFragment = packageFragmentRoot.getPackageFragment(packageName);
            if (packageFragment.exists()) {
                IResource packageFragmentResource = packageFragment.getResource();
                if (packageFragmentResource instanceof IContainer) {
                    IFile file = ((IContainer) packageFragmentResource).getFile(filePath);
                    if (file.exists())
                        return createPlatformResourceURI(file);
                } else { // jar file or external class folder
                    if (packageFragmentRoot.isArchive()) { // jar file
                        Object[] nonJavaResources = getNonJavaResources(packageFragmentRoot, packageFragment);
                        for (Object nonJavaResource : nonJavaResources) {
                            IJarEntryResource jarEntryResource = (IJarEntryResource) nonJavaResource;
                            if (fullPath.equals(jarEntryResource.getFullPath().toString())) {
                                IResource packageFragmentRootResource = packageFragmentRoot.getResource();
                                if (packageFragmentRootResource != null) { // we have a resource - use nested platform/resource
                                    URI packageFragmentRootURI = createPlatformResourceURI(
                                            packageFragmentRootResource);
                                    URI result = createArchiveURI(packageFragmentRootURI, fullPath);
                                    return result;
                                } else {
                                    // no resource - use file uri
                                    IPath packageFragmentRootPath = packageFragmentRoot.getPath();
                                    URI packageFragmentRootURI = URI
                                            .createFileURI(packageFragmentRootPath.toString());
                                    URI result = createArchiveURI(packageFragmentRootURI, fullPath);
                                    return result;
                                }//  ww w .  j  a va  2  s  .c  o  m
                            }
                        }
                    } else if (packageFragmentRoot.isExternal()) { // external class folder
                        Object[] nonJavaResources = getNonJavaResources(packageFragmentRoot, packageFragment);
                        for (Object nonJavaResource : nonJavaResources) {
                            IJarEntryResource jarEntryResource = (IJarEntryResource) nonJavaResource;
                            if (fileName.equals(jarEntryResource.getName())) {
                                IResource packageFragmentRootResource = ((ExternalPackageFragmentRoot) packageFragmentRoot)
                                        .resource();
                                IPath absolutePath = packageFragmentRootResource.getFullPath();
                                absolutePath = absolutePath.append(fullPath);
                                return createPlatformResourceURI(absolutePath);
                            }
                        }
                    }
                }
            }
        }
        // not found in a source folder - look for a resource relative to project root
        // of this project or one of its dependencies
        URI result = findResourceInProjectRoot(javaProject, classpathUri.path(), Sets.<String>newHashSet());
        if (result != null) {
            return result;
        }
    }
    return classpathUri;
}

From source file:org.eclipse.xtext.xbase.ui.validation.XbaseUIValidator.java

License:Open Source License

protected IClasspathEntry getResolvedClasspathEntry(IJavaProject javaProject,
        /* @NonNull */ IPackageFragmentRoot root) throws JavaModelException {
    IClasspathEntry result = null;/*from   w  w w .  j av a2s  .c  om*/
    JavaProject castedProject = (JavaProject) javaProject;
    castedProject.getResolvedClasspath(); // force the resolved entry cache to be populated
    @SuppressWarnings("rawtypes")
    Map rootPathToResolvedEntries = castedProject.getPerProjectInfo().rootPathToResolvedEntries;
    if (rootPathToResolvedEntries != null) {
        result = (IClasspathEntry) rootPathToResolvedEntries.get(root.getPath());
        if (result == null)
            result = (IClasspathEntry) rootPathToResolvedEntries.get(root.getJavaProject().getPath());
    }

    return result;
}