List of usage examples for org.eclipse.jdt.internal.core.util Util isExcluded
public final static boolean isExcluded(IResource resource, char[][] inclusionPatterns, char[][] exclusionPatterns)
From source file:com.codenvy.ide.ext.java.server.internal.core.JavaProjectElementInfo.java
License:Open Source License
/** * Compute the non-java resources contained in this java project. *//*from w w w .j av a2 s . com*/ private Object[] computeNonJavaResources(JavaProject project) { // determine if src == project and/or if bin == project IPath projectPath = project.getProject().getFullPath(); boolean srcIsProject = false; boolean binIsProject = false; char[][] inclusionPatterns = null; char[][] exclusionPatterns = null; IPath projectOutput = null; boolean isClasspathResolved = true; try { IClasspathEntry entry = project.getClasspathEntryFor(projectPath); if (entry != null) { srcIsProject = true; inclusionPatterns = ((ClasspathEntry) entry).fullInclusionPatternChars(); exclusionPatterns = ((ClasspathEntry) entry).fullExclusionPatternChars(); } projectOutput = project.getOutputLocation(); binIsProject = projectPath.equals(projectOutput); } catch (JavaModelException e) { isClasspathResolved = false; } Object[] resources = new IResource[5]; int resourcesCounter = 0; try { IResource[] members = ((IContainer) project.getResource()).members(); int length = members.length; if (length > 0) { String sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true); String complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); IClasspathEntry[] classpath = project.getResolvedClasspath(); for (int i = 0; i < length; i++) { IResource res = members[i]; switch (res.getType()) { case IResource.FILE: IPath resFullPath = res.getFullPath(); String resName = res.getName(); // ignore a jar file on the classpath if (isClasspathResolved && isClasspathEntryOrOutputLocation(resFullPath, res.getLocation()/* see https://bugs.eclipse .org/bugs/show_bug.cgi?id=244406 */, classpath, projectOutput)) { break; } // ignore .java file if src == project if (srcIsProject && Util.isValidCompilationUnitName(resName, sourceLevel, complianceLevel) && !Util.isExcluded(res, inclusionPatterns, exclusionPatterns)) { break; } // ignore .class file if bin == project if (binIsProject && Util.isValidClassFileName(resName, sourceLevel, complianceLevel)) { break; } // else add non java resource if (resources.length == resourcesCounter) { // resize System.arraycopy(resources, 0, (resources = new IResource[resourcesCounter * 2]), 0, resourcesCounter); } resources[resourcesCounter++] = res; break; case IResource.FOLDER: resFullPath = res.getFullPath(); // ignore non-excluded folders on the classpath or that correspond to an output location if ((srcIsProject && !Util.isExcluded(res, inclusionPatterns, exclusionPatterns) && Util.isValidFolderNameForPackage(res.getName(), sourceLevel, complianceLevel)) || (isClasspathResolved && isClasspathEntryOrOutputLocation(resFullPath, res.getLocation(), classpath, projectOutput))) { break; } // else add non java resource if (resources.length == resourcesCounter) { // resize System.arraycopy(resources, 0, (resources = new IResource[resourcesCounter * 2]), 0, resourcesCounter); } resources[resourcesCounter++] = res; } } } if (resources.length != resourcesCounter) { System.arraycopy(resources, 0, (resources = new IResource[resourcesCounter]), 0, resourcesCounter); } } catch (CoreException e) { resources = NO_NON_JAVA_RESOURCES; resourcesCounter = 0; } return resources; }
From source file:com.codenvy.ide.ext.java.server.internal.core.PackageFragmentRootInfo.java
License:Open Source License
/** * Starting at this folder, create non-java resources for this package fragment root * and add them to the non-java resources collection. * * @exception org.eclipse.jdt.core.JavaModelException The resource associated with this package fragment does not exist */// w w w .j av a 2 s. c o m static Object[] computeFolderNonJavaResources(IPackageFragmentRoot root, IContainer folder, char[][] inclusionPatterns, char[][] exclusionPatterns) throws JavaModelException { IResource[] nonJavaResources = new IResource[5]; int nonJavaResourcesCounter = 0; try { IResource[] members = folder.members(); int length = members.length; if (length > 0) { // if package fragment root refers to folder in another IProject, then // folder.getProject() is different than root.getJavaProject().getProject() // use the other java project's options to verify the name IJavaProject otherJavaProject = JavaCore.create(folder.getProject()); String sourceLevel = otherJavaProject.getOption(JavaCore.COMPILER_SOURCE, true); String complianceLevel = otherJavaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true); JavaProject javaProject = (JavaProject) root.getJavaProject(); IClasspathEntry[] classpath = javaProject.getResolvedClasspath(); nextResource: for (int i = 0; i < length; i++) { IResource member = members[i]; switch (member.getType()) { case IResource.FILE: String fileName = member.getName(); // ignore .java files that are not excluded if (Util.isValidCompilationUnitName(fileName, sourceLevel, complianceLevel) && !Util.isExcluded(member, inclusionPatterns, exclusionPatterns)) continue nextResource; // ignore .class files if (Util.isValidClassFileName(fileName, sourceLevel, complianceLevel)) continue nextResource; // ignore .zip or .jar file on classpath if (isClasspathEntry(member.getFullPath(), classpath)) continue nextResource; break; case IResource.FOLDER: // ignore valid packages or excluded folders that correspond to a nested pkg fragment root if (Util.isValidFolderNameForPackage(member.getName(), sourceLevel, complianceLevel) && (!Util.isExcluded(member, inclusionPatterns, exclusionPatterns) || isClasspathEntry(member.getFullPath(), classpath))) continue nextResource; break; } if (nonJavaResources.length == nonJavaResourcesCounter) { // resize System.arraycopy(nonJavaResources, 0, (nonJavaResources = new IResource[nonJavaResourcesCounter * 2]), 0, nonJavaResourcesCounter); } nonJavaResources[nonJavaResourcesCounter++] = member; } } // if (ExternalFoldersManager.isInternalPathForExternalFolder(folder.getFullPath())) { // IJarEntryResource[] jarEntryResources = new IJarEntryResource[nonJavaResourcesCounter]; // for (int i = 0; i < nonJavaResourcesCounter; i++) { // jarEntryResources[i] = new NonJavaResource(root, nonJavaResources[i]); // } // return jarEntryResources; // } else if (nonJavaResources.length != nonJavaResourcesCounter) { // System.arraycopy(nonJavaResources, 0, (nonJavaResources = new IResource[nonJavaResourcesCounter]), 0, nonJavaResourcesCounter); // } return nonJavaResources; } catch (CoreException e) { throw new JavaModelException(e); } }
From source file:net.sf.j2s.core.builder.AbstractImageBuilder.java
License:Open Source License
protected SourceFile findSourceFile(IFile file, boolean mustExist) { if (mustExist && !file.exists()) return null; // assumes the file exists in at least one of the source folders & is not excluded ClasspathMultiDirectory md = this.sourceLocations[0]; if (this.sourceLocations.length > 1) { IPath sourceFileFullPath = file.getFullPath(); for (int j = 0, m = this.sourceLocations.length; j < m; j++) { if (this.sourceLocations[j].sourceFolder.getFullPath().isPrefixOf(sourceFileFullPath)) { md = this.sourceLocations[j]; if (md.exclusionPatterns == null && md.inclusionPatterns == null) break; if (!Util.isExcluded(file, md.inclusionPatterns, md.exclusionPatterns)) break; }/* w w w. j a v a 2s .c om*/ } } return new SourceFile(file, md); }
From source file:net.sf.j2s.core.builder.ClasspathMultiDirectory.java
License:Open Source License
protected boolean isExcluded(IResource resource) { if (this.exclusionPatterns != null || this.inclusionPatterns != null) if (this.sourceFolder.equals(this.binaryFolder)) return Util.isExcluded(resource, this.inclusionPatterns, this.exclusionPatterns); return false; }
From source file:net.sf.j2s.core.builder.IncrementalImageBuilder.java
License:Open Source License
protected boolean checkForClassFileChanges(IResourceDelta binaryDelta, ClasspathMultiDirectory md, int segmentCount) throws CoreException { IResource resource = binaryDelta.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 IResourceDelta[] children = binaryDelta.getAffectedChildren(); for (int i = 0, l = children.length; i < l; i++) if (!checkForClassFileChanges(children[i], md, segmentCount)) return false; return true; case IResource.FILE: if (!isExcluded && org.eclipse.jdt.internal.compiler.util.Util.isClassFileName(resource.getName())) { // perform full build if a managed class file has been changed 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; }//w w w. j av a 2 s .c o m return true; } } return true; }
From source file:net.sf.j2s.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); }/*ww w . j a v a 2s. com*/ } //$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 if (md.hasIndependentOutputFolder) 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(); if (org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(resourceName)) { 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.eclipse.ajdt.core.BuildConfig.java
License:Open Source License
/** * Returns all of the currently included source files in a project * This list is cached and reset every build (or on request by calling flushIncludedSourceFileCache) * @param project/*from www . ja v a 2s . c o m*/ * @return a list of IFiles */ public static Set<IFile> getIncludedSourceFiles(IProject project) { if (projectsToIncludedSourceFiles.get(project) instanceof List) { return projectsToIncludedSourceFiles.get(project); } Set<IFile> sourceFiles = new HashSet<IFile>(); try { IJavaProject jp = JavaCore.create(project); IClasspathEntry[] cpes = jp.getRawClasspath(); for (int i = 0; i < cpes.length; i++) { if ((cpes[i] instanceof ClasspathEntry) && (cpes[i].getEntryKind() == IClasspathEntry.CPE_SOURCE)) { ClasspathEntry cp = (ClasspathEntry) cpes[i]; char[][] incl = cp.fullInclusionPatternChars(); char[][] excl = cp.fullExclusionPatternChars(); IPath path = cpes[i].getPath(); IResource res = project.findMember(path.removeFirstSegments(1)); if ((res != null) && (res instanceof IContainer)) { List<IFile> l = allFiles((IContainer) res); for (IFile file : l) { if (!Util.isExcluded(file, incl, excl)) { sourceFiles.add(file); } } } } } } catch (JavaModelException e) { } projectsToIncludedSourceFiles.put(project, sourceFiles); return sourceFiles; }
From source file:org.eclipse.ajdt.core.BuildConfig.java
License:Open Source License
/** * Experimental version of above that uses a set, not a list * @param project/* w w w.j a v a 2 s . co m*/ * @return */ public static Set<IFile> getIncludedSourceFilesSet(IProject project) { if (projectsToIncludedSourceFiles.get(project) instanceof List) { return projectsToIncludedSourceFiles.get(project); } Set<IFile> sourceFiles = new HashSet<IFile>(); try { IJavaProject jp = JavaCore.create(project); IClasspathEntry[] cpes = jp.getRawClasspath(); for (int i = 0; i < cpes.length; i++) { if ((cpes[i] instanceof ClasspathEntry) && (cpes[i].getEntryKind() == IClasspathEntry.CPE_SOURCE)) { ClasspathEntry cp = (ClasspathEntry) cpes[i]; char[][] incl = cp.fullInclusionPatternChars(); char[][] excl = cp.fullExclusionPatternChars(); IPath path = cpes[i].getPath(); IResource res = project.findMember(path.removeFirstSegments(1)); if ((res != null) && (res instanceof IContainer)) { List<IFile> l = allFiles((IContainer) res); for (IFile file : l) { if (!Util.isExcluded(file, incl, excl)) { sourceFiles.add(file); } } } } } } catch (JavaModelException e) { } projectsToIncludedSourceFiles.put(project, sourceFiles); return sourceFiles; }
From source file:org.eclipse.ajdt.core.builder.AJBuilder.java
License:Open Source License
/** * Copies over all non-excluded resources into the out folders. * // w ww .j a v a 2 s . c o m * Called during a full build * * @param javaProject */ private void copyResources(IJavaProject project) throws CoreException { IClasspathEntry[] srcEntries = getSrcClasspathEntry(project); for (int i = 0, l = srcEntries.length; i < l; i++) { IClasspathEntry srcEntry = srcEntries[i]; IPath srcPath = srcEntry.getPath().removeFirstSegments(1); IPath outPath = srcEntry.getOutputLocation(); if (outPath == null) { outPath = project.getOutputLocation(); } outPath = outPath.removeFirstSegments(1); if (!srcPath.equals(outPath)) { final char[][] inclusionPatterns = ((ClasspathEntry) srcEntry).fullInclusionPatternChars(); final char[][] exclusionPatterns = ((ClasspathEntry) srcEntry).fullExclusionPatternChars(); final IContainer srcContainer = getContainerForGivenPath(srcPath, project.getProject()); if (!srcContainer.exists()) { continue; } final int segmentsToRemove = srcContainer.getLocation().segmentCount(); final IContainer outContainer = getContainerForGivenPath(outPath, project.getProject()); if (outContainer.getType() == IResource.FOLDER && (!outContainer.exists())) { // also ensure parent folders exist createFolder(outPath, getProject(), false); } IResourceVisitor copyVisitor = new IResourceVisitor() { public boolean visit(IResource resource) throws CoreException { if (Util.isExcluded(resource, inclusionPatterns, exclusionPatterns)) { return false; } else if (resource.getType() == IResource.PROJECT) { return true; } if (resource.getType() == IResource.FOLDER || !isSourceFile(resource)) { // refresh to ensure that resource has not been deleted from file system resource.refreshLocal(IResource.DEPTH_ZERO, null); if (resource.exists()) { switch (resource.getType()) { case IResource.FOLDER: // ensure folder exists and is derived IPath outPath = resource.getLocation().removeFirstSegments(segmentsToRemove); IFolder outFolder = (IFolder) createFolder(outPath, outContainer, true); // outfolder itself should not be derived if (outFolder.equals(outContainer)) { outFolder.setDerived(false, null); } break; case IResource.FILE: // if this is not a CU, then copy over and mark as derived if (!isSourceFile(resource)) { outPath = resource.getLocation().removeFirstSegments(segmentsToRemove); IFile outFile = outContainer.getFile(outPath); // check to make sure that resource has not been deleted from the file // system without a refresh if (!outFile.exists()) { try { resource.copy(outFile.getFullPath(), IResource.DERIVED | IResource.FORCE, null); Util.setReadOnly(outFile, false); } catch (ResourceException e) { resource.refreshLocal(IResource.DEPTH_ZERO, null); if (resource.exists()) { // probably hit https://bugs.eclipse.org/bugs/show_bug.cgi?id=331036 // We just checked to see if the outfile exists, but we get this exception // anyway. It might be that it has not been refreshed. if (e.getStatus() .getCode() == IResourceStatus.FAILED_WRITE_LOCAL) { AJLog.log(AJLog.BUILDER, "Could not write to resource '" + resource + "'. " + "It probbly already exists on disk. Try a clean build."); outFile.refreshLocal(IResource.DEPTH_ZERO, null); } else { throw e; } } else { // resource was deleted in the middle of the build. Can safely ignore this } } } } break; } return true; } } return false; } }; srcContainer.accept(copyVisitor); } } }
From source file:org.eclipse.ajdt.core.builder.AJBuilder.java
License:Open Source License
/** * Copies non-src resources to the output directory (bug 78579). The main * part of this method was taken from /*from w w w .ja v a 2 s . com*/ * org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.findSourceFiles(IResourceDelta,ClasspathMultiDirectory,int) * * @param IJavaProject - the project which is being built * @param IResourceDelta - the projects delta * @param IClasspathEntry - the src entry on the classpath * @param int - the segment count * * @throws CoreException */ private void copyResources(IJavaProject javaProject, IResourceDelta sourceDelta, IClasspathEntry srcEntry, int segmentCount) throws CoreException { IResource resource = sourceDelta.getResource(); // bug 161739: skip excluded resources char[][] inclusionPatterns = ((ClasspathEntry) srcEntry).fullInclusionPatternChars(); char[][] exclusionPatterns = ((ClasspathEntry) srcEntry).fullExclusionPatternChars(); if (Util.isExcluded(resource, inclusionPatterns, exclusionPatterns)) { return; } IPath outputPath = srcEntry.getOutputLocation(); if (outputPath == null) { outputPath = javaProject.getOutputLocation(); } outputPath = outputPath.removeFirstSegments(1).makeRelative(); IContainer outputFolder = getContainerForGivenPath(outputPath, javaProject.getProject()); IContainer srcContainer = getContainerForGivenPath(srcEntry.getPath().removeFirstSegments(1), javaProject.getProject()); IPath deltaPath = resource.getFullPath().removeFirstSegments(segmentCount); switch (resource.getType()) { case IResource.FOLDER: IContainer folderToRefresh = outputFolder.getFolder(deltaPath); switch (sourceDelta.getKind()) { case IResourceDelta.ADDED: createFolder(deltaPath, outputFolder, true); // ensure package exists in the output folder // fall through & collect all the resource files case IResourceDelta.CHANGED: IResourceDelta[] children = sourceDelta.getAffectedChildren(); for (int i = 0, l = children.length; i < l; i++) { copyResources(javaProject, children[i], srcEntry, segmentCount); } break; case IResourceDelta.REMOVED: IClasspathEntry[] srcEntries = getSrcClasspathEntry(javaProject); if (srcEntries.length > 1) { for (int i = 0, l = srcEntries.length; i < l; i++) { IPath srcPath = srcEntries[i].getPath().removeFirstSegments(1); IFolder srcFolder = javaProject.getProject().getFolder(srcPath); if (srcFolder.getFolder(deltaPath).exists()) { // only a package fragment was removed, same as removing multiple source files // ensure package exists in the output folder // ADE---wait...why are we doing this??? why not just delete and be done with it? // not going to change this because I don't know the ramifications. createFolder(deltaPath, outputFolder, true); IResourceDelta[] removedChildren = sourceDelta.getAffectedChildren(); for (int j = 0, m = removedChildren.length; j < m; j++) { copyResources(javaProject, removedChildren[j], srcEntry, segmentCount); } folderToRefresh.refreshLocal(IResource.DEPTH_ZERO, null); return; } } } IFolder removedPackageFolder = outputFolder.getFolder(deltaPath); if (removedPackageFolder.exists()) { removedPackageFolder.delete(IResource.FORCE, null); } break; } // switch(sourceDelta.getKind()) folderToRefresh.refreshLocal(IResource.DEPTH_ZERO, null); break; case IResource.FILE: // only do something if the output folder is different to the src folder if (!outputFolder.equals(srcContainer)) { // copy all resource deltas to the output folder if (deltaPath == null) return; // don't want to copy over .aj or .java files if (deltaPath.getFileExtension() != null && (deltaPath.getFileExtension().equals("aj") //$NON-NLS-1$ || deltaPath.getFileExtension().equals("java"))) { //$NON-NLS-1$ break; } IResource fileToRefresh = outputFolder.getFile(deltaPath); switch (sourceDelta.getKind()) { case IResourceDelta.ADDED: if (fileToRefresh.exists()) { AJLog.log(AJLog.BUILDER, "Deleting existing file " + deltaPath);//$NON-NLS-1$ fileToRefresh.delete(IResource.FORCE, null); } AJLog.log(AJLog.BUILDER, "Copying added file " + deltaPath);//$NON-NLS-1$ createFolder(deltaPath.removeLastSegments(1), outputFolder, true); resource.copy(fileToRefresh.getFullPath(), IResource.FORCE | IResource.DERIVED, null); Util.setReadOnly(fileToRefresh, false); // just in case the original was read only fileToRefresh.refreshLocal(IResource.DEPTH_ZERO, null); // mark this change so compiler knows about it. CoreCompilerConfiguration.getCompilerConfigurationForProject(getProject()) .configurationChanged(CompilerConfigurationChangeFlags.PROJECTSOURCERESOURCES_CHANGED); break; case IResourceDelta.REMOVED: if (fileToRefresh.exists()) { AJLog.log(AJLog.BUILDER, "Deleting removed file " + deltaPath);//$NON-NLS-1$ fileToRefresh.delete(IResource.FORCE, null); } // mark this change so compiler knows about it. CoreCompilerConfiguration.getCompilerConfigurationForProject(getProject()) .configurationChanged(CompilerConfigurationChangeFlags.PROJECTSOURCERESOURCES_CHANGED); break; case IResourceDelta.CHANGED: if ((sourceDelta.getFlags() & IResourceDelta.CONTENT) == 0 && (sourceDelta.getFlags() & IResourceDelta.ENCODING) == 0) { return; // skip it since it really isn't changed } if (fileToRefresh.exists()) { AJLog.log(AJLog.BUILDER, "Deleting existing file " + deltaPath);//$NON-NLS-1$ fileToRefresh.delete(IResource.FORCE, null); } AJLog.log(AJLog.BUILDER, "Copying changed file " + deltaPath);//$NON-NLS-1$ createFolder(deltaPath.removeLastSegments(1), outputFolder, true); resource.copy(fileToRefresh.getFullPath(), IResource.FORCE | IResource.DERIVED, null); Util.setReadOnly(fileToRefresh, false); // just in case the original was read only break; } fileToRefresh.refreshLocal(IResource.DEPTH_ZERO, null); } // switch (sourceDelta.getKind()) break; } // switch(resource.getType()) }