[381859] Don't build if delta is not about content
Change-Id: I7c1513a0cf318ffa2a46d0b247461fb52abcbead
diff --git a/plugins/org.eclipse.acceleo.ide.ui/src/org/eclipse/acceleo/internal/ide/ui/builders/AcceleoBuilder.java b/plugins/org.eclipse.acceleo.ide.ui/src/org/eclipse/acceleo/internal/ide/ui/builders/AcceleoBuilder.java
index fd6e460..2eb12ca 100644
--- a/plugins/org.eclipse.acceleo.ide.ui/src/org/eclipse/acceleo/internal/ide/ui/builders/AcceleoBuilder.java
+++ b/plugins/org.eclipse.acceleo.ide.ui/src/org/eclipse/acceleo/internal/ide/ui/builders/AcceleoBuilder.java
@@ -19,6 +19,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -319,8 +320,9 @@
List<IFile> deltaMembers = this.deltaMembers(getDelta(project), monitor);
org.eclipse.acceleo.internal.parser.compiler.AcceleoParser acceleoParser = new org.eclipse.acceleo.internal.parser.compiler.AcceleoParser(
acceleoProject, useBinaryResources, usePlatformResourcePath);
- for (IFile iFile : deltaMembers) {
- File fileToBuild = iFile.getLocation().toFile();
+ Iterator<IFile> it = deltaMembers.iterator();
+ while (it.hasNext() && !monitor.isCanceled()) {
+ File fileToBuild = it.next().getLocation().toFile();
Set<File> builtFiles = acceleoParser.buildFile(fileToBuild, BasicMonitor.toMonitor(monitor));
for (File builtFile : builtFiles) {
IFile workspaceFile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(
@@ -814,7 +816,7 @@
&& IAcceleoConstants.MTL_FILE_EXTENSION.equals(resource.getFileExtension())) {
removeOutputFile((IFile)resource, monitor);
}
- if (delta.getKind() != IResourceDelta.REMOVED
+ if (contentChanged(delta)
&& (IAcceleoConstants.MTL_FILE_EXTENSION.equals(resource.getFileExtension()) || "MANIFEST.MF" //$NON-NLS-1$
.equals(resource.getName())) || "plugin.xml".equals(resource.getName())) { //$NON-NLS-1$
deltaFilesOutput.add((IFile)resource);
@@ -840,6 +842,21 @@
}
/**
+ * return true if the delta indicates a change of file content.
+ *
+ * @param delta
+ * a resource delta.
+ * @return true if the delta indicates a change of file content.
+ */
+ private boolean contentChanged(IResourceDelta delta) {
+ if (delta.getKind() != IResourceDelta.REMOVED) {
+ return (delta.getFlags() & IResourceDelta.CONTENT) != 0
+ || (delta.getFlags() & IResourceDelta.REPLACED) != 0;
+ }
+ return false;
+ }
+
+ /**
* Computes a list of all the removed files.
*
* @param deltaFilesOutput