aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ajde/src/org/aspectj/ajde/internal/CompilerAdapter.java27
-rw-r--r--ajde/src/org/aspectj/ajde/ui/internal/TreeStructureViewBuilder.java2
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java28
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmBuilder.java25
4 files changed, 66 insertions, 16 deletions
diff --git a/ajde/src/org/aspectj/ajde/internal/CompilerAdapter.java b/ajde/src/org/aspectj/ajde/internal/CompilerAdapter.java
index e6e5669e2..7100abed5 100644
--- a/ajde/src/org/aspectj/ajde/internal/CompilerAdapter.java
+++ b/ajde/src/org/aspectj/ajde/internal/CompilerAdapter.java
@@ -47,6 +47,7 @@ public class CompilerAdapter {
private boolean initialized = false;
private boolean structureDirty = true;
private boolean firstBuild = true;
+ private boolean incrementalEnabled = true; // XXX make false by default
public CompilerAdapter() {
super();
@@ -67,7 +68,7 @@ public class CompilerAdapter {
public boolean compile(String configFile, BuildProgressMonitor progressMonitor) {
init();
- try {
+ try {
AjBuildConfig buildConfig = genBuildConfig(configFile);
buildConfig.setGenerateModelMode(true);
@@ -84,12 +85,12 @@ public class CompilerAdapter {
return false;
}
- if (firstBuild) {
- firstBuild = false;
- return buildManager.batchBuild(buildConfig, messageHandler);
- } else {
- return buildManager.batchBuild(buildConfig, messageHandler); // XXX incremental not implemented
+ if (incrementalEnabled && !firstBuild){
+ return buildManager.incrementalBuild(buildConfig, messageHandler); // XXX incremental not implemented
// return buildManager.incrementalBuild(buildConfig);
+ } else {
+ firstBuild = false;
+ return buildManager.batchBuild(buildConfig, messageHandler);
}
} catch (OperationCanceledException ce) {
Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("build cancelled by user");
@@ -424,4 +425,18 @@ public class CompilerAdapter {
}
}
+ /**
+ * @return
+ */
+ public boolean isIncrementalEnabled() {
+ return incrementalEnabled;
+ }
+
+ /**
+ * @param b
+ */
+ public void setIncrementalEnabled(boolean b) {
+ incrementalEnabled = b;
+ }
+
}
diff --git a/ajde/src/org/aspectj/ajde/ui/internal/TreeStructureViewBuilder.java b/ajde/src/org/aspectj/ajde/ui/internal/TreeStructureViewBuilder.java
index 5d4308951..32daa8a34 100644
--- a/ajde/src/org/aspectj/ajde/ui/internal/TreeStructureViewBuilder.java
+++ b/ajde/src/org/aspectj/ajde/ui/internal/TreeStructureViewBuilder.java
@@ -154,7 +154,7 @@ public class TreeStructureViewBuilder {
if (granularity == StructureViewProperties.Granularity.DECLARED_ELEMENTS) {
return true;
} else if (granularity == StructureViewProperties.Granularity.MEMBER &&
- (kind == ProgramElementNode.Kind.CODE)) {
+ (kind != ProgramElementNode.Kind.CODE)) {
return true;
} else if (granularity == StructureViewProperties.Granularity.TYPE
&& (kind == ProgramElementNode.Kind.PROJECT
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
index b9a1ea588..4f2dbb6c5 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
@@ -163,22 +163,38 @@ public class AjBuildManager {
//XXX fake incremental
public boolean incrementalBuild(AjBuildConfig buildConfig, IMessageHandler baseHandler) throws IOException {
+// StructureModelManager.INSTANCE.getStructureModel().getRoot().removeChildren();
+
+
if (!state.prepareForNextBuild(buildConfig)) {
return batchBuild(buildConfig, baseHandler);
}
+
+
//!!! too much cut-and-paste from batchBuild
this.handler = CountingMessageHandler.makeCountingMessageHandler(baseHandler);
+ String check = checkRtJar(buildConfig);
+ if (check != null) {
+ IMessage message = new Message(check, Message.WARNING, null, null);
+ // give delegate a chance to implement different message (abort)?
+ handler.handleMessage(message);
+ }
+
try {
setBuildConfig(buildConfig);
- //setupModel();
+ setupModel();
// initBcelWorld(handler);
// if (handler.hasErrors()) {
// return false;
// }
+ if (buildConfig.isEmacsSymMode() || buildConfig.isGenerateModelMode()) {
+ bcelWorld.setModel(StructureModelManager.INSTANCE.getStructureModel());
+ }
+
// if (buildConfig.isEmacsSymMode() || buildConfig.isGenerateModelMode()) {
// bcelWorld.setModel(StructureModelManager.INSTANCE.getStructureModel());
// }
@@ -186,6 +202,7 @@ public class AjBuildManager {
List filesToCompile;
while ( !(filesToCompile = state.getFilesToCompile(count == 0)).isEmpty() ) {
//if (count > 0) return batchBuild(buildConfig, baseHandler); //??? only 1 try
+
performCompilation(filesToCompile);
if (handler.hasErrors()) return false;
@@ -194,12 +211,6 @@ public class AjBuildManager {
return batchBuild(buildConfig, baseHandler);
}
}
-
- //System.err.println("built in " + count + " cycles");
-
-// if (buildConfig.isEmacsSymMode()) {
-// new org.aspectj.ajdt.internal.core.builder.EmacsStructureModelManager().externalizeModel();
-// }
if (handler.hasErrors()) {
return false;
@@ -208,10 +219,11 @@ public class AjBuildManager {
state.successfulCompile(buildConfig);
boolean weaved = weaveAndGenerateClassFiles();
+
if (buildConfig.isGenerateModelMode()) {
StructureModelManager.INSTANCE.fireModelUpdated();
- }
+ }
return !handler.hasErrors();
} finally {
handler = null;
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmBuilder.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmBuilder.java
index b781dfbb8..572744043 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmBuilder.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmBuilder.java
@@ -64,6 +64,7 @@ public class AsmBuilder extends AbstractSyntaxTreeVisitorAdapter {
new AsmBuilder().internalBuild(unit, structureModel);
}
+
private void internalBuild(CompilationUnitDeclaration unit, StructureModel structureModel) {
currCompilationResult = unit.compilationResult();
File file = new File(new String(unit.getFileName()));
@@ -104,8 +105,30 @@ public class AsmBuilder extends AbstractSyntaxTreeVisitorAdapter {
new ArrayList());
StructureModelManager.INSTANCE.getStructureModel().getRoot().addChild(pkgNode);
}
- pkgNode.addChild(cuNode);
+ // if the node already exists remove before adding
+ ProgramElementNode duplicate = null;
+ for (Iterator itt = pkgNode.getChildren().iterator(); itt.hasNext(); ) {
+ ProgramElementNode child = (ProgramElementNode)itt.next();
+ if (child.getSourceLocation().getSourceFile().equals(file)) {
+ duplicate = child;
+ }
+ }
+ if (duplicate != null) {
+ pkgNode.removeChild(duplicate);
+ }
+ pkgNode.addChild(cuNode);
} else {
+ // if the node already exists remove before adding
+ ProgramElementNode duplicate = null;
+ for (Iterator itt = StructureModelManager.INSTANCE.getStructureModel().getRoot().getChildren().iterator(); itt.hasNext(); ) {
+ ProgramElementNode child = (ProgramElementNode)itt.next();
+ if (child.getSourceLocation().getSourceFile().equals(file)) {
+ duplicate = child;
+ }
+ }
+ if (duplicate != null) {
+ StructureModelManager.INSTANCE.getStructureModel().getRoot().removeChild(duplicate);
+ }
StructureModelManager.INSTANCE.getStructureModel().getRoot().addChild(cuNode);
}