optimization based on content-type
diff --git a/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/IncrementalModelBuilder.java b/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/IncrementalModelBuilder.java
index 6623aa0..cfaa31f 100644
--- a/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/IncrementalModelBuilder.java
+++ b/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/IncrementalModelBuilder.java
@@ -8,7 +8,7 @@
* Contributors:
* Anyware Technologies - initial API and implementation
*
- * $Id: IncrementalModelBuilder.java,v 1.3 2009/07/03 21:07:44 bcabe Exp $
+ * $Id: IncrementalModelBuilder.java,v 1.4 2009/07/05 17:12:48 bcabe Exp $
*/
package org.eclipse.pde.ds.builder.internal.validation;
@@ -30,13 +30,15 @@
/**
* An abstract class to subclass to launch background jobs on the modified model
+ * TODO: Listen to modification on Java files
*/
public abstract class IncrementalModelBuilder extends IncrementalProjectBuilder {
protected class ModelFileDeltaVisitor implements IResourceDeltaVisitor {
private Map<Resource, IResource> modifiedResources = new HashMap<Resource, IResource>();
+ private String _contentType;
- public ModelFileDeltaVisitor() {
- // Do nothing
+ public ModelFileDeltaVisitor(String contentType) {
+ _contentType = contentType;
}
public Map<Resource, IResource> getModifiedResources() {
@@ -57,9 +59,10 @@
case IResourceDelta.CHANGED:
if (resource instanceof IContainer)
return true;
- if (!"org.eclipse.pde.ds.content-type"
- .equals(((IFile) resource).getContentDescription()
- .getContentType().getId()))
+ if (_contentType != null
+ && !_contentType.equals(((IFile) resource)
+ .getContentDescription().getContentType()
+ .getId()))
return false;
// handle changed resource
URI resourceURI = URI.createPlatformResourceURI(resource
@@ -119,7 +122,8 @@
monitor = new NullProgressMonitor();
}
// the visitor does the work.
- ModelFileDeltaVisitor visitor = new ModelFileDeltaVisitor();
+ ModelFileDeltaVisitor visitor = new ModelFileDeltaVisitor(
+ getContentType());
delta.accept(visitor);
Map<Resource, IResource> modifiedResources = visitor
@@ -137,6 +141,17 @@
}
+ /**
+ * If the model files to build have a content-type, this method must return
+ * it, in order to optimize the build process (fail-fast mode)
+ *
+ * @return the content-type of model files, or null if no content-type
+ * exists
+ */
+ protected String getContentType() {
+ return null;
+ }
+
@SuppressWarnings("restriction")
protected void fullBuild(IProgressMonitor monitor) throws CoreException {
if (monitor == null) {
@@ -148,7 +163,8 @@
if (bundle instanceof IBundlePluginModelBase) {
IBundleModel bundleModel = ((IBundlePluginModelBase) bundle)
.getBundleModel();
- // XXX for some reason, if we don't call load() by hand, some headers are missing (???)
+ // XXX for some reason, if we don't call load() by hand, some
+ // headers are missing (???)
bundleModel.load();
String serviceComponents = bundleModel.getBundle().getHeader(
ComponentConstants.SERVICE_COMPONENT);
@@ -181,4 +197,10 @@
protected abstract void build(EObject modelObject, IResource resource,
boolean force, IProgressMonitor monitor) throws CoreException;
+
+ /*
+ * private boolean isComponentReferencedInManifest() {
+ *
+ * }
+ */
}
diff --git a/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/ScrBuilder.java b/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/ScrBuilder.java
index d8e333c..187e60b 100644
--- a/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/ScrBuilder.java
+++ b/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/ScrBuilder.java
@@ -1,13 +1,11 @@
package org.eclipse.pde.ds.builder.internal.validation;
-import java.util.Map;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
@@ -18,24 +16,7 @@
public class ScrBuilder extends IncrementalModelBuilder {
public static final String ID = "org.eclipse.pde.ds.builder.scrBuilder";
- protected void incrementalBuild(IResourceDelta delta,
- IProgressMonitor monitor) throws CoreException {
- if (monitor == null) {
- monitor = new NullProgressMonitor();
- }
- // the visitor does the work.
- ModelFileDeltaVisitor visitor = new ModelFileDeltaVisitor();
- delta.accept(visitor);
-
- Map<Resource, IResource> modifiedResources = visitor
- .getModifiedResources();
-
- // If one resource is changed in the project, all the project must be
- // validated
- if (modifiedResources.size() > 0) {
- fullBuild(monitor);
- }
-
+ public ScrBuilder() {
}
protected void build(EObject modelObject, IResource resource,
@@ -104,6 +85,10 @@
return new BasicDiagnostic(Diagnostic.ERROR, "ModelChecker", 0, ie
.getMessage(), new Object[] { modelObject });
}
+ }
+ @Override
+ protected String getContentType() {
+ return "org.eclipse.pde.ds.content-type";
}
}