Bug 349816
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
index a1d169f..38400d6 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
@@ -12,11 +12,11 @@
/**
*
*/
- private final SContext model;
+ private SContext model;
- private final IResource resource;
+ private IResource resource;
- private final AParInterpreter aParInterpreter;
+ private AParInterpreter aParInterpreter;
public EclipseEMFOutputRunner(SContext model, IResource resource,
AParInterpreter aParInterpreter) {
@@ -34,6 +34,7 @@
*
* @see org.ascape.runtime.Runner#run()
*/
+ @Override
public synchronized void run() {
boolean found = false;
ArrayList scapeListeners = new ArrayList(getScape().getScapeListeners());
@@ -55,6 +56,7 @@
* @see org.ascape.runtime.Runner#openImplementation(java.lang.String[],
* boolean)
*/
+ @Override
public void openImplementation(String[] args, boolean block) {
if (aParInterpreter != null) {
aParInterpreter.assignValues(new Object[] { getRootScape(), this },
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
index 18b45ef..8084065 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFHandler.java
@@ -43,7 +43,8 @@
super(headless);
}
- protected void executeOpen(EclipseEscapeRunner eclipseRunner, Object executed, IProgressMonitor monitor) {
+ @Override
+ protected EclipseEscapeRunner executeOpen(Object executed, IProgressMonitor monitor) {
if (executed instanceof IResource) {
modelResource = (IResource) executed;
File file = modelResource.getLocation().toFile();
@@ -53,12 +54,15 @@
model = MetaABMPersist.create(file).load();
SImplementation impl = model.getImplementation();
final String modelClassName = getModelClass(impl);
+ EclipseEscapeRunner eclipseRunner = createRunner();
eclipseRunner.open(modelResource, modelClassName, model.getLabel());
+ return eclipseRunner;
} catch (IOException e) {
EscapeIDEPlugin.warn("Couldn't load model.", e);
}
}
}
+ return null;
}
protected String getModelClass(SImplementation impl) {
@@ -66,7 +70,8 @@
return modelClassName;
}
- protected boolean handleSelect(Object sel) {
+ @Override
+ protected boolean handleSelect(Object sel) {
if (sel instanceof IResource) {
IResource res = (IResource) sel;
if (res.getFileExtension() != null && res.getFileExtension().equals("metaabm")) {
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteParameterHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteParameterHandler.java
index 4ce96b1..99c74ee 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteParameterHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteParameterHandler.java
@@ -17,6 +17,7 @@
import org.eclipse.amp.amf.parameters.AParFactory;
import org.eclipse.amp.amf.parameters.AParInterpreter;
+import org.eclipse.amp.axf.time.TimeGranularity;
import org.eclipse.amp.escape.command.ExecuteHandler;
import org.eclipse.amp.escape.ide.EclipseEscapeRunner;
import org.eclipse.core.resources.IProject;
@@ -58,26 +59,36 @@
* @see org.eclipse.amp.escape.command.ExecuteHandler#executeOpen(org.eclipse.amp.escape.ide.EclipseEscapeRunner,
* java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
*/
- protected void executeOpen(EclipseEscapeRunner eclipseRunner, Object executed, IProgressMonitor monitor) {
+ @Override
+ protected EclipseEscapeRunner executeOpen(Object executed, IProgressMonitor monitor) {
if (executed instanceof IResource) {
modelResource = (IResource) executed;
IProject project = modelResource.getProject();
if (modelResource.getFileExtension().equals("apar")) {
// a bit awkward..
setInterpreter((AParInterpreter) AParFactory.create(null).getInterpreter(modelResource));
- eclipseRunner.setAutoRestart(false);
model = getInterpreter().getRootContext();
+ //If you create the runner sooner the member model and modelResource are null. So the headless run in the output file throw an assertion
+ EclipseEscapeRunner eclipseRunner = createRunner();
+ if (isHeadless()) {
+ eclipseRunner.setUpdateGranularity(TimeGranularity.createFrequencyGranularity(Integer.MAX_VALUE));
+ }
+ eclipseRunner.setMonitor(monitor);
+ eclipseRunner.setAutoRestart(false);
eclipseRunner.open(project, model.getImplementation().getQualifiedName(),
getInterpreter().getRunName(), getInterpreter().getArgs());
+ return eclipseRunner;
}
}
+ return null;
}
/**
* @return
* @see org.eclipse.amp.escape.command.ExecuteHandler#createRunner()
*/
- protected EclipseEscapeRunner createRunner() {
+ @Override
+ protected EclipseEscapeRunner createRunner() {
Runner.setDisplayGraphics(!isHeadless());
EclipseEscapeRunner runner = new EclipseEscapeRunner() {
private static final long serialVersionUID = 1L;
@@ -87,7 +98,8 @@
* @param block
* @see org.ascape.runtime.Runner#openImplementation(java.lang.String[], boolean)
*/
- public void openImplementation(String[] args, boolean block) {
+ @Override
+ public void openImplementation(String[] args, boolean block) {
getInterpreter().assignValues(new Object[] { getRootScape(), this }, null);
super.openImplementation(args, block);
}
@@ -101,7 +113,8 @@
*
* @see org.eclipse.amp.escape.command.ExecuteHandler#handleSelect(java.lang.Object)
*/
- protected boolean handleSelect(Object sel) {
+ @Override
+ protected boolean handleSelect(Object sel) {
return sel instanceof IResource && ((IResource) sel).getFileExtension() != null
&& ((IResource) sel).getFileExtension().equals("apar");
}
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteHandler.java
index 33c57f7..784c165 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteHandler.java
@@ -55,28 +55,31 @@
*/
@Override
public final void execute(final Object executed, String name) throws ExecutionException {
- final EclipseEscapeRunner eclipseRunner = createRunner();
- if (isHeadless()) {
- eclipseRunner.setUpdateGranularity(TimeGranularity.createFrequencyGranularity(Integer.MAX_VALUE));
- }
Job escapeRun = new Job("Run " + name) {
- protected IStatus run(IProgressMonitor monitor) {
+ private EclipseEscapeRunner eclipseRunner;
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
setMonitor(monitor);
- eclipseRunner.setMonitor(monitor);
try {
- executeOpen(eclipseRunner, executed, monitor);
-
+ eclipseRunner = executeOpen(executed, monitor);
} catch (RuntimeException e) {
setMonitor(null);
throw e;
}
setMonitor(null);
- return eclipseRunner.getFinishStatus();
+ if(eclipseRunner != null){
+ return eclipseRunner.getFinishStatus();
+ }else{
+ return Status.CANCEL_STATUS;
+ }
}
- protected void canceling() {
+ @Override
+ protected void canceling() {
+ if(eclipseRunner != null){
eclipseRunner.setFinishStatus(Status.CANCEL_STATUS);
eclipseRunner.closeFinally();
+ }
}
};
escapeRun.setPriority(Job.LONG);
@@ -86,11 +89,10 @@
/**
* Execute open.
*
- * @param eclipseRunner the eclipse runner
* @param executed the executed scape resource/name
* @param monitor the monitor
*/
- protected abstract void executeOpen(final EclipseEscapeRunner eclipseRunner, final Object executed,
+ protected abstract EclipseEscapeRunner executeOpen(final Object executed,
IProgressMonitor monitor);
/**
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteJavaHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteJavaHandler.java
index e2934a8..32c28a3 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteJavaHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ide/src/org/eclipse/amp/escape/command/ExecuteJavaHandler.java
@@ -51,14 +51,18 @@
* @see org.eclipse.amp.escape.command.ExecuteHandler#executeOpen(org.eclipse.amp.escape.ide.EclipseEscapeRunner,
* java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
*/
- protected void executeOpen(final EclipseEscapeRunner eclipseRunner, final Object executed, IProgressMonitor monitor) {
+ @Override
+ protected EclipseEscapeRunner executeOpen(final Object executed, IProgressMonitor monitor) {
// brain dead Java strikes again..
if (isSupertype(executed, "org.ascape.model.Scape")) {
IType javaClass = getType(executed);
IJavaProject javaProject = javaClass.getJavaProject();
+ EclipseEscapeRunner eclipseRunner = createRunner();
eclipseRunner.open(javaProject.getProject(), javaClass.getFullyQualifiedName(), javaClass
.getElementName());
+ return eclipseRunner;
}
+ return null;
}
/*
@@ -66,7 +70,8 @@
*
* @see org.eclipse.amp.escape.command.ExecuteHandler#handleSelect(java.lang.Object)
*/
- protected boolean handleSelect(Object sel) {
+ @Override
+ protected boolean handleSelect(Object sel) {
return sel instanceof ICompilationUnit || sel instanceof IType;
}
@@ -89,6 +94,7 @@
}
}
} catch (JavaModelException e) {
+ //
}
return false;
}