Java 类org.eclipse.jdt.core.util.ISourceAttribute 实例源码

项目:java-debug    文件:JavaHotCodeReplaceProvider.java   
/**
 * Answers whether children should be visited.
 * <p>
 * If the associated resource is a class file which has been changed, record it.
 * </p>
 */
@Override
public boolean visit(IResourceDelta delta) {
    if (delta == null || 0 == (delta.getKind() & IResourceDelta.CHANGED)) {
        return false;
    }
    IResource resource = delta.getResource();
    if (resource != null) {
        switch (resource.getType()) {
            case IResource.FILE:
                if (0 == (delta.getFlags() & IResourceDelta.CONTENT)) {
                    return false;
                }
                if (CLASS_FILE_EXTENSION.equals(resource.getFullPath().getFileExtension())) {
                    IPath localLocation = resource.getLocation();
                    if (localLocation != null) {
                        String path = localLocation.toOSString();
                        IClassFileReader reader = ToolFactory.createDefaultClassFileReader(path,
                                IClassFileReader.CLASSFILE_ATTRIBUTES);
                        if (reader != null) {
                            // this name is slash-delimited
                            String qualifiedName = new String(reader.getClassName());
                            boolean hasBlockingErrors = false;
                            try {
                                // If the user doesn't want to replace
                                // classfiles containing
                                // compilation errors, get the source
                                // file associated with
                                // the class file and query it for
                                // compilation errors
                                IJavaProject pro = JavaCore.create(resource.getProject());
                                ISourceAttribute sourceAttribute = reader.getSourceFileAttribute();
                                String sourceName = null;
                                if (sourceAttribute != null) {
                                    sourceName = new String(sourceAttribute.getSourceFileName());
                                }
                                IResource sourceFile = getSourceFile(pro, qualifiedName, sourceName);
                                if (sourceFile != null) {
                                    IMarker[] problemMarkers = null;
                                    problemMarkers = sourceFile.findMarkers(
                                            IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true,
                                            IResource.DEPTH_INFINITE);
                                    for (IMarker problemMarker : problemMarkers) {
                                        if (problemMarker.getAttribute(IMarker.SEVERITY,
                                                -1) == IMarker.SEVERITY_ERROR) {
                                            hasBlockingErrors = true;
                                            break;
                                        }
                                    }
                                }
                            } catch (CoreException e) {
                                logger.log(Level.SEVERE, "Failed to visit classes: " + e.getMessage(), e);
                            }
                            if (!hasBlockingErrors) {
                                changedFiles.add(resource);
                                // dot-delimit the name
                                fullyQualifiedNames.add(qualifiedName.replace('/', '.'));
                            }
                        }
                    }
                }
                return false;

            default:
                return true;
        }
    }
    return true;
}
项目:Eclipse-Postfix-Code-Completion    文件:JarFileExportOperation.java   
private Map<String, ArrayList<IResource>> buildJavaToClassMap(IContainer container, IProgressMonitor monitor) throws CoreException {
    if (container == null || !container.isAccessible())
        return new HashMap<String, ArrayList<IResource>>(0);
    /*
     * XXX: Bug 6584: Need a way to get class files for a java file (or CU)
     */
    IClassFileReader cfReader= null;
    IResource[] members= container.members();
    Map<String, ArrayList<IResource>> map= new HashMap<String, ArrayList<IResource>>(members.length);
    for (int i= 0;  i < members.length; i++) {
        if (isClassFile(members[i])) {
            IFile classFile= (IFile)members[i];
            URI location= classFile.getLocationURI();
            if (location != null) {
                InputStream contents= null;
                try {
                    contents= EFS.getStore(location).openInputStream(EFS.NONE, monitor);
                    cfReader= ToolFactory.createDefaultClassFileReader(contents, IClassFileReader.CLASSFILE_ATTRIBUTES);
                } finally {
                    try {
                        if (contents != null)
                            contents.close();
                    } catch (IOException e) {
                        throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR,
                            Messages.format(JarPackagerMessages.JarFileExportOperation_errorCannotCloseConnection, BasicElementLabels.getURLPart(Resources.getLocationString(classFile))),
                            e));
                    }
                }
                if (cfReader != null) {
                    ISourceAttribute sourceAttribute= cfReader.getSourceFileAttribute();
                    if (sourceAttribute == null) {
                        /*
                         * Can't fully build the map because one or more
                         * class file does not contain the name of its
                         * source file.
                         */
                        addWarning(Messages.format(
                            JarPackagerMessages.JarFileExportOperation_classFileWithoutSourceFileAttribute,
                            BasicElementLabels.getURLPart(Resources.getLocationString(classFile))), null);
                        return null;
                    }
                    String javaName= new String(sourceAttribute.getSourceFileName());
                    ArrayList<IResource> classFiles= map.get(javaName);
                    if (classFiles == null) {
                        classFiles= new ArrayList<IResource>(3);
                        map.put(javaName, classFiles);
                    }
                    classFiles.add(classFile);
                }
            }
        }
    }
    return map;
}
项目:Eclipse-Postfix-Code-Completion    文件:ClassFileReader.java   
/**
 * @see IClassFileReader#getSourceFileAttribute()
 */
public ISourceAttribute getSourceFileAttribute() {
    return this.sourceFileAttribute;
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:JarFileExportOperation.java   
private Map<String, ArrayList<IResource>> buildJavaToClassMap(IContainer container, IProgressMonitor monitor) throws CoreException {
    if (container == null || !container.isAccessible())
        return new HashMap<String, ArrayList<IResource>>(0);
    /*
     * XXX: Bug 6584: Need a way to get class files for a java file (or CU)
     */
    IClassFileReader cfReader= null;
    IResource[] members= container.members();
    Map<String, ArrayList<IResource>> map= new HashMap<String, ArrayList<IResource>>(members.length);
    for (int i= 0;  i < members.length; i++) {
        if (isClassFile(members[i])) {
            IFile classFile= (IFile)members[i];
            URI location= classFile.getLocationURI();
            if (location != null) {
                InputStream contents= null;
                try {
                    contents= EFS.getStore(location).openInputStream(EFS.NONE, monitor);
                    cfReader= ToolFactory.createDefaultClassFileReader(contents, IClassFileReader.CLASSFILE_ATTRIBUTES);
                } finally {
                    try {
                        if (contents != null)
                            contents.close();
                    } catch (IOException e) {
                        throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR,
                            Messages.format(JarPackagerMessages.JarFileExportOperation_errorCannotCloseConnection, BasicElementLabels.getURLPart(Resources.getLocationString(classFile))),
                            e));
                    }
                }
                if (cfReader != null) {
                    ISourceAttribute sourceAttribute= cfReader.getSourceFileAttribute();
                    if (sourceAttribute == null) {
                        /*
                         * Can't fully build the map because one or more
                         * class file does not contain the name of its
                         * source file.
                         */
                        addWarning(Messages.format(
                            JarPackagerMessages.JarFileExportOperation_classFileWithoutSourceFileAttribute,
                            BasicElementLabels.getURLPart(Resources.getLocationString(classFile))), null);
                        return null;
                    }
                    String javaName= new String(sourceAttribute.getSourceFileName());
                    ArrayList<IResource> classFiles= map.get(javaName);
                    if (classFiles == null) {
                        classFiles= new ArrayList<IResource>(3);
                        map.put(javaName, classFiles);
                    }
                    classFiles.add(classFile);
                }
            }
        }
    }
    return map;
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:ClassFileReader.java   
/**
 * @see IClassFileReader#getSourceFileAttribute()
 */
public ISourceAttribute getSourceFileAttribute() {
    return this.sourceFileAttribute;
}