Example usage for org.eclipse.jdt.internal.core.builder JavaBuilder removeProblemsAndTasksFor

List of usage examples for org.eclipse.jdt.internal.core.builder JavaBuilder removeProblemsAndTasksFor

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.core.builder JavaBuilder removeProblemsAndTasksFor.

Prototype

public static void removeProblemsAndTasksFor(IResource resource) 

Source Link

Usage

From source file:org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.java

License:Open Source License

/**
 * Creates a marker from each problem and adds it to the resource.
 * The marker is as follows:/*from  w  ww. ja  v a 2s  .  com*/
 *   - its type is T_PROBLEM
 *   - its plugin ID is the JavaBuilder's plugin ID
 *    - its message is the problem's message
 *    - its priority reflects the severity of the problem
 *    - its range is the problem's range
 *    - it has an extra attribute "ID" which holds the problem's id
 *   - it's {@link IMarker#SOURCE_ID} attribute is positioned to {@link JavaBuilder#SOURCE_ID} if
 *     the problem was generated by JDT; else the {@link IMarker#SOURCE_ID} attribute is
 *     carried from the problem to the marker in extra attributes, if present.
 */
protected void storeProblemsFor(SourceFile sourceFile, CategorizedProblem[] problems) throws CoreException {
    if (sourceFile == null || problems == null || problems.length == 0)
        return;
    // once a classpath error is found, ignore all other problems for this project so the user can see the main error
    // but still try to compile as many source files as possible to help the case when the base libraries are in source
    if (!this.keepStoringProblemMarkers)
        return; // only want the one error recorded on this source file

    IResource resource = sourceFile.resource;
    HashSet managedMarkerTypes = JavaModelManager.getJavaModelManager().compilationParticipants
            .managedMarkerTypes();
    for (int i = 0, l = problems.length; i < l; i++) {
        CategorizedProblem problem = problems[i];
        int id = problem.getID();

        // handle missing classfile situation
        if (id == IProblem.IsClassPathCorrect) {
            String missingClassfileName = problem.getArguments()[0];
            if (JavaBuilder.DEBUG)
                System.out.println(Messages.bind(Messages.build_incompleteClassPath, missingClassfileName));
            boolean isInvalidClasspathError = JavaCore.ERROR
                    .equals(this.javaBuilder.javaProject.getOption(JavaCore.CORE_INCOMPLETE_CLASSPATH, true));
            // insert extra classpath problem, and make it the only problem for this project (optional)
            if (isInvalidClasspathError && JavaCore.ABORT.equals(
                    this.javaBuilder.javaProject.getOption(JavaCore.CORE_JAVA_BUILD_INVALID_CLASSPATH, true))) {
                JavaBuilder.removeProblemsAndTasksFor(this.javaBuilder.currentProject); // make this the only problem for this project
                this.keepStoringProblemMarkers = false;
            }
            IMarker marker = this.javaBuilder.currentProject
                    .createMarker(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER);
            marker.setAttributes(
                    new String[] { IMarker.MESSAGE, IMarker.SEVERITY, IJavaModelMarker.CATEGORY_ID,
                            IMarker.SOURCE_ID },
                    new Object[] { Messages.bind(Messages.build_incompleteClassPath, missingClassfileName),
                            new Integer(isInvalidClasspathError ? IMarker.SEVERITY_ERROR
                                    : IMarker.SEVERITY_WARNING),
                            new Integer(CategorizedProblem.CAT_BUILDPATH), JavaBuilder.SOURCE_ID });
            // even if we're not keeping more markers, still fall through rest of the problem reporting, so that offending
            // IsClassPathCorrect problem gets recorded since it may help locate the offending reference
        }

        String markerType = problem.getMarkerType();
        boolean managedProblem = false;
        if (IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER.equals(markerType)
                || (managedProblem = managedMarkerTypes.contains(markerType))) {
            IMarker marker = resource.createMarker(markerType);

            String[] attributeNames = JAVA_PROBLEM_MARKER_ATTRIBUTE_NAMES;
            int standardLength = attributeNames.length;
            String[] allNames = attributeNames;
            int managedLength = managedProblem ? 0 : 1;
            String[] extraAttributeNames = problem.getExtraMarkerAttributeNames();
            int extraLength = extraAttributeNames == null ? 0 : extraAttributeNames.length;
            if (managedLength > 0 || extraLength > 0) {
                allNames = new String[standardLength + managedLength + extraLength];
                System.arraycopy(attributeNames, 0, allNames, 0, standardLength);
                if (managedLength > 0)
                    allNames[standardLength] = IMarker.SOURCE_ID;
                System.arraycopy(extraAttributeNames, 0, allNames, standardLength + managedLength, extraLength);
            }

            Object[] allValues = new Object[allNames.length];
            // standard attributes
            int index = 0;
            allValues[index++] = problem.getMessage(); // message
            allValues[index++] = problem.isError() ? S_ERROR : S_WARNING; // severity
            allValues[index++] = new Integer(id); // ID
            allValues[index++] = new Integer(problem.getSourceStart()); // start
            int end = problem.getSourceEnd();
            allValues[index++] = new Integer(end > 0 ? end + 1 : end); // end
            allValues[index++] = new Integer(problem.getSourceLineNumber()); // line
            allValues[index++] = Util.getProblemArgumentsForMarker(problem.getArguments()); // arguments
            allValues[index++] = new Integer(problem.getCategoryID()); // category ID
            // SOURCE_ID attribute for JDT problems
            if (managedLength > 0)
                allValues[index++] = JavaBuilder.SOURCE_ID;
            // optional extra attributes
            if (extraLength > 0)
                System.arraycopy(problem.getExtraMarkerAttributeValues(), 0, allValues, index, extraLength);

            marker.setAttributes(allNames, allValues);

            if (!this.keepStoringProblemMarkers)
                return; // only want the one error recorded on this source file
        }
    }
}

From source file:org.eclipse.jdt.internal.core.builder.BatchImageBuilder.java

License:Open Source License

public void build() {
    if (JavaBuilder.DEBUG)
        System.out.println("FULL build"); //$NON-NLS-1$

    try {//w  w  w .  j a  v  a2  s  .  c om
        this.notifier.subTask(
                Messages.bind(Messages.build_cleaningOutput, this.javaBuilder.currentProject.getName()));
        JavaBuilder.removeProblemsAndTasksFor(this.javaBuilder.currentProject);
        cleanOutputFolders(true);
        this.notifier.updateProgressDelta(0.05f);

        this.notifier.subTask(Messages.build_analyzingSources);
        ArrayList sourceFiles = new ArrayList(33);
        addAllSourceFiles(sourceFiles);
        this.notifier.updateProgressDelta(0.10f);

        if (sourceFiles.size() > 0) {
            SourceFile[] allSourceFiles = new SourceFile[sourceFiles.size()];
            sourceFiles.toArray(allSourceFiles);

            this.notifier.setProgressPerCompilationUnit(0.75f / allSourceFiles.length);
            this.workQueue.addAll(allSourceFiles);
            compile(allSourceFiles);

            if (this.typeLocatorsWithUndefinedTypes != null)
                if (this.secondaryTypes != null && !this.secondaryTypes.isEmpty())
                    rebuildTypesAffectedBySecondaryTypes();
            if (this.incrementalBuilder != null)
                this.incrementalBuilder.buildAfterBatchBuild();
        }

        if (this.javaBuilder.javaProject.hasCycleMarker())
            this.javaBuilder.mustPropagateStructuralChanges();
    } catch (CoreException e) {
        throw internalException(e);
    } finally {
        if (JavaBuilder.SHOW_STATS)
            printStats();
        cleanUp();
    }
}

From source file:org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.java

License:Open Source License

protected boolean findSourceFiles(IResourceDelta sourceDelta, ClasspathMultiDirectory md, int segmentCount)
        throws CoreException {
    // When a package becomes a type or vice versa, expect 2 deltas,
    // one on the folder & one on the source file
    IResource resource = sourceDelta.getResource();
    // remember that if inclusion & exclusion patterns change then a full build is done
    boolean isExcluded = (md.exclusionPatterns != null || md.inclusionPatterns != null)
            && Util.isExcluded(resource, md.inclusionPatterns, md.exclusionPatterns);
    switch (resource.getType()) {
    case IResource.FOLDER:
        if (isExcluded && md.inclusionPatterns == null)
            return true; // no need to go further with this delta since its children cannot be included

        switch (sourceDelta.getKind()) {
        case IResourceDelta.ADDED:
            if (!isExcluded) {
                IPath addedPackagePath = resource.getFullPath().removeFirstSegments(segmentCount);
                createFolder(addedPackagePath, md.binaryFolder); // ensure package exists in the output folder
                // see if any known source file is from the same package... classpath already includes new package
                if (this.sourceLocations.length > 1
                        && this.newState.isKnownPackage(addedPackagePath.toString())) {
                    if (JavaBuilder.DEBUG)
                        System.out.println("Skipped dependents of added package " + addedPackagePath); //$NON-NLS-1$
                } else {
                    if (JavaBuilder.DEBUG)
                        System.out.println("Found added package " + addedPackagePath); //$NON-NLS-1$
                    addDependentsOf(addedPackagePath, true);
                }/*from   w w w.  j a  v  a  2 s  .  c o m*/
            }
            //$FALL-THROUGH$ collect all the source files
        case IResourceDelta.CHANGED:
            IResourceDelta[] children = sourceDelta.getAffectedChildren();
            for (int i = 0, l = children.length; i < l; i++)
                if (!findSourceFiles(children[i], md, segmentCount))
                    return false;
            return true;
        case IResourceDelta.REMOVED:
            if (isExcluded) {
                // since this folder is excluded then there is nothing to delete (from this md), but must walk any included subfolders
                children = sourceDelta.getAffectedChildren();
                for (int i = 0, l = children.length; i < l; i++)
                    if (!findSourceFiles(children[i], md, segmentCount))
                        return false;
                return true;
            }
            IPath removedPackagePath = resource.getFullPath().removeFirstSegments(segmentCount);
            if (this.sourceLocations.length > 1) {
                for (int i = 0, l = this.sourceLocations.length; i < l; i++) {
                    if (this.sourceLocations[i].sourceFolder.getFolder(removedPackagePath).exists()) {
                        // only a package fragment was removed, same as removing multiple source files
                        createFolder(removedPackagePath, md.binaryFolder); // ensure package exists in the output folder
                        IResourceDelta[] removedChildren = sourceDelta.getAffectedChildren();
                        for (int j = 0, m = removedChildren.length; j < m; j++)
                            if (!findSourceFiles(removedChildren[j], md, segmentCount))
                                return false;
                        return true;
                    }
                }
            }
            if ((sourceDelta.getFlags() & IResourceDelta.MOVED_TO) != 0) {
                // same idea as moving a source file
                // see bug 163200
                IResource movedFolder = this.javaBuilder.workspaceRoot.getFolder(sourceDelta.getMovedToPath());
                JavaBuilder.removeProblemsAndTasksFor(movedFolder);
            }
            IFolder removedPackageFolder = md.binaryFolder.getFolder(removedPackagePath);
            if (removedPackageFolder.exists())
                removedPackageFolder.delete(IResource.FORCE, null);
            // add dependents even when the package thinks it does not exist to be on the safe side
            if (JavaBuilder.DEBUG)
                System.out.println("Found removed package " + removedPackagePath); //$NON-NLS-1$
            addDependentsOf(removedPackagePath, true);
            this.newState.removePackage(sourceDelta);
        }
        return true;
    case IResource.FILE:
        if (isExcluded)
            return true;

        String resourceName = resource.getName();
        // GROOVY start
        // determine if this is a Groovy project
        final boolean isInterestingProject = LanguageSupportFactory
                .isInterestingProject(this.javaBuilder.getProject());
        // GROOVY end

        // GROOVY start
        /* old {
        if (org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(resourceName)) {
        } new */
        // GRECLIPSE-404 must call 'isJavaLikeFile' directly in order to make the Scala-Eclipse plugin's weaving happy
        if ((!isInterestingProject && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(resourceName)
                && !LanguageSupportFactory.isInterestingSourceFile(resourceName))
                || (isInterestingProject
                        && LanguageSupportFactory.isSourceFile(resourceName, isInterestingProject))) {
            // GROOVY end            
            IPath typePath = resource.getFullPath().removeFirstSegments(segmentCount).removeFileExtension();
            String typeLocator = resource.getProjectRelativePath().toString();
            switch (sourceDelta.getKind()) {
            case IResourceDelta.ADDED:
                if (JavaBuilder.DEBUG)
                    System.out.println("Compile this added source file " + typeLocator); //$NON-NLS-1$
                this.sourceFiles.add(new SourceFile((IFile) resource, md, true));
                String typeName = typePath.toString();
                if (!this.newState.isDuplicateLocator(typeName, typeLocator)) { // adding dependents results in 2 duplicate errors
                    if (JavaBuilder.DEBUG)
                        System.out.println("Found added source file " + typeName); //$NON-NLS-1$
                    addDependentsOf(typePath, true);
                }
                return true;
            case IResourceDelta.REMOVED:
                char[][] definedTypeNames = this.newState.getDefinedTypeNamesFor(typeLocator);
                if (definedTypeNames == null) { // defined a single type matching typePath
                    removeClassFile(typePath, md.binaryFolder);
                    if ((sourceDelta.getFlags() & IResourceDelta.MOVED_TO) != 0) {
                        // remove problems and tasks for a compilation unit that is being moved (to another package or renamed)
                        // if the target file is a compilation unit, the new cu will be recompiled
                        // if the target file is a non-java resource, then markers are removed
                        // see bug 2857
                        IResource movedFile = this.javaBuilder.workspaceRoot
                                .getFile(sourceDelta.getMovedToPath());
                        JavaBuilder.removeProblemsAndTasksFor(movedFile);
                    }
                } else {
                    if (JavaBuilder.DEBUG)
                        System.out.println("Found removed source file " + typePath.toString()); //$NON-NLS-1$
                    addDependentsOf(typePath, true); // add dependents of the source file since it may be involved in a name collision
                    if (definedTypeNames.length > 0) { // skip it if it failed to successfully define a type
                        IPath packagePath = typePath.removeLastSegments(1);
                        for (int i = 0, l = definedTypeNames.length; i < l; i++)
                            removeClassFile(packagePath.append(new String(definedTypeNames[i])),
                                    md.binaryFolder);
                    }
                }
                this.newState.removeLocator(typeLocator);
                return true;
            case IResourceDelta.CHANGED:
                if ((sourceDelta.getFlags() & IResourceDelta.CONTENT) == 0
                        && (sourceDelta.getFlags() & IResourceDelta.ENCODING) == 0)
                    return true; // skip it since it really isn't changed
                if (JavaBuilder.DEBUG)
                    System.out.println("Compile this changed source file " + typeLocator); //$NON-NLS-1$
                this.sourceFiles.add(new SourceFile((IFile) resource, md, true));
            }
            return true;
        } else if (org.eclipse.jdt.internal.compiler.util.Util.isClassFileName(resourceName)) {
            // perform full build if a managed class file has been changed
            if (this.makeOutputFolderConsistent) {
                IPath typePath = resource.getFullPath().removeFirstSegments(segmentCount).removeFileExtension();
                if (this.newState.isKnownType(typePath.toString())) {
                    if (JavaBuilder.DEBUG)
                        System.out.println("MUST DO FULL BUILD. Found change to class file " + typePath); //$NON-NLS-1$
                    return false;
                }
            }
            return true;
        } else if (md.hasIndependentOutputFolder) {
            if (this.javaBuilder.filterExtraResource(resource))
                return true;

            // copy all other resource deltas to the output folder
            IPath resourcePath = resource.getFullPath().removeFirstSegments(segmentCount);
            IResource outputFile = md.binaryFolder.getFile(resourcePath);
            switch (sourceDelta.getKind()) {
            case IResourceDelta.ADDED:
                if (outputFile.exists()) {
                    if (JavaBuilder.DEBUG)
                        System.out.println("Deleting existing file " + resourcePath); //$NON-NLS-1$
                    outputFile.delete(IResource.FORCE, null);
                }
                if (JavaBuilder.DEBUG)
                    System.out.println("Copying added file " + resourcePath); //$NON-NLS-1$
                createFolder(resourcePath.removeLastSegments(1), md.binaryFolder); // ensure package exists in the output folder
                copyResource(resource, outputFile);
                return true;
            case IResourceDelta.REMOVED:
                if (outputFile.exists()) {
                    if (JavaBuilder.DEBUG)
                        System.out.println("Deleting removed file " + resourcePath); //$NON-NLS-1$
                    outputFile.delete(IResource.FORCE, null);
                }
                return true;
            case IResourceDelta.CHANGED:
                if ((sourceDelta.getFlags() & IResourceDelta.CONTENT) == 0
                        && (sourceDelta.getFlags() & IResourceDelta.ENCODING) == 0)
                    return true; // skip it since it really isn't changed
                if (outputFile.exists()) {
                    if (JavaBuilder.DEBUG)
                        System.out.println("Deleting existing file " + resourcePath); //$NON-NLS-1$
                    outputFile.delete(IResource.FORCE, null);
                }
                if (JavaBuilder.DEBUG)
                    System.out.println("Copying changed file " + resourcePath); //$NON-NLS-1$
                createFolder(resourcePath.removeLastSegments(1), md.binaryFolder); // ensure package exists in the output folder
                copyResource(resource, outputFile);
            }
            return true;
        }
    }
    return true;
}

From source file:org.objectstyle.wolips.target.TargetBuilder.java

License:Open Source License

private void updateProblemMarkers() throws CoreException {
    // JavaBuilder.removeProblemsFor(getProject());
    JavaBuilder.removeProblemsAndTasksFor(getProject());
    Set problemAttributes = _problemMarkers.entrySet();
    for (Iterator iter = problemAttributes.iterator(); iter.hasNext();) {
        Map element = (Map) ((Map.Entry) iter.next()).getValue();
        IResource resource = (IResource) element.get(TargetBuilder.RESOURCE);
        Map attributes = (Map) element.get(TargetBuilder.ATTRIBUTES);
        IMarker marker = resource.createMarker(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER);
        marker.setAttributes(attributes);
    }//w  w  w  .  j av  a2s . c  om
}