소스 검색

Fixed crash of Eclipse while event selection ...

terfloth@itemis.de 14 년 전
부모
커밋
482b1ee3a3

+ 23 - 20
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/runtime/impl/ExecutionContextImpl.java

@@ -36,7 +36,6 @@ public class ExecutionContextImpl extends AbstractExecutionContext implements
 	private List<ExecutionEvent> declaredEvents;
 	private List<ExecutionEvent> raisedEvents;
 	private ExecutionState[] activeStateConfig;
-	
 
 	public ExecutionContextImpl() {
 		variables = new ArrayList<ExecutionVariable>();
@@ -68,16 +67,18 @@ public class ExecutionContextImpl extends AbstractExecutionContext implements
 	}
 
 	public void raiseEvent(String eventName, Object value) {
-		ExecutionEvent event = getDeclaredEvent(eventName);
-		if (event == null)
-			throw new ExecutionException("Event with name " + eventName
-					+ "is undefined!");
-		ExecutionEvent eventCopy = event.getCopy();
-		if (value != null) {
-			eventCopy.setValue(value);
+		synchronized (raisedEvents) {
+			ExecutionEvent event = getDeclaredEvent(eventName);
+			if (event == null)
+				throw new ExecutionException("Event with name " + eventName
+						+ "is undefined!");
+			ExecutionEvent eventCopy = event.getCopy();
+			if (value != null) {
+				eventCopy.setValue(value);
+			}
+			raisedEvents.add(eventCopy);
+			notifyEventRaised(eventCopy);
 		}
-		raisedEvents.add(eventCopy);
-		notifyEventRaised(eventCopy);
 	}
 
 	private ExecutionEvent getDeclaredEvent(String eventName) {
@@ -137,15 +138,13 @@ public class ExecutionContextImpl extends AbstractExecutionContext implements
 		return activeStateConfig;
 	}
 
-	
 	public void initStateConfigurationVector(int size) {
-		 activeStateConfig = new ExecutionState[size];
-		 for ( int i=0 ; i<size ; i++ ) {
-			 activeStateConfig[i] = null;
-		 }
+		activeStateConfig = new ExecutionState[size];
+		for (int i = 0; i < size; i++) {
+			activeStateConfig[i] = null;
+		}
 	}
 
-	
 	public void call(String procedureId) {
 		// TODO: Implement me
 	}
@@ -153,7 +152,8 @@ public class ExecutionContextImpl extends AbstractExecutionContext implements
 	public Set<RegularState> getActiveLeafStates() {
 		Set<RegularState> vertices = new HashSet<RegularState>();
 		for (ExecutionState state : activeStateConfig) {
-			if (state != null) vertices.add((RegularState) state.getSourceElement());
+			if (state != null)
+				vertices.add((RegularState) state.getSourceElement());
 		}
 		return vertices;
 	}
@@ -161,12 +161,15 @@ public class ExecutionContextImpl extends AbstractExecutionContext implements
 	public Set<RegularState> getAllActiveStates() {
 		Set<RegularState> vertices = new HashSet<RegularState>();
 		for (ExecutionState state : activeStateConfig) {
-			if (state != null) vertices.addAll(getActiveHierachy((RegularState) state.getSourceElement()));
+			if (state != null)
+				vertices.addAll(getActiveHierachy((RegularState) state
+						.getSourceElement()));
 		}
 		return vertices;
 	}
-	
-	private Collection<? extends RegularState> getActiveHierachy(RegularState vertex) {
+
+	private Collection<? extends RegularState> getActiveHierachy(
+			RegularState vertex) {
 		List<RegularState> result = new ArrayList<RegularState>();
 		result.add(vertex);
 		EObject container = vertex.eContainer();

+ 16 - 8
plugins/org.yakindu.sct.simulation.ui/src/org/yakindu/sct/simulation/ui/view/DeclarationView.java

@@ -29,6 +29,8 @@ import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.TreeViewerColumn;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.yakindu.sct.simulation.core.debugmodel.SCTDebugTarget;
@@ -52,6 +54,7 @@ public class DeclarationView extends AbstractDebugView implements
 		IDebugContextListener, IDebugEventSetListener {
 
 	private TreeViewer viewer;
+	private SCTDebugTarget debugTarget;
 
 	public DeclarationView() {
 		DebugUITools.getDebugContextManager().addDebugContextListener(this);
@@ -86,6 +89,7 @@ public class DeclarationView extends AbstractDebugView implements
 						viewer), new RealEditingSupport(viewer)));
 		valueColumn.setLabelProvider(new ExecutionContextLabelProvider(1));
 		viewer.setContentProvider(new ExecutionContextContentProvider());
+
 		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
 				Object firstElement = ((IStructuredSelection) event
@@ -107,10 +111,14 @@ public class DeclarationView extends AbstractDebugView implements
 					.getContext()).getFirstElement();
 			if (object == null)
 				return;
-			SCTDebugTarget debugTarget = (SCTDebugTarget) object
+			SCTDebugTarget newTarget = (SCTDebugTarget) object
 					.getAdapter(IDebugTarget.class);
-			if (debugTarget != null && !debugTarget.isTerminated())
-				refreshInput(debugTarget);
+
+			if (newTarget != debugTarget && newTarget != null
+					&& !newTarget.isTerminated()) {
+				refreshInput(newTarget);
+				debugTarget = newTarget;
+			}
 		}
 
 	}
@@ -133,7 +141,7 @@ public class DeclarationView extends AbstractDebugView implements
 		}
 	}
 
-	private void refreshInput(SCTDebugTarget debugTarget) {
+	private void refreshInput(final SCTDebugTarget debugTarget) {
 		IExecutionFacade facade = (IExecutionFacade) debugTarget
 				.getAdapter(IExecutionFacade.class);
 		viewer.setInput(facade.getExecutionContext());
@@ -144,9 +152,9 @@ public class DeclarationView extends AbstractDebugView implements
 	@Override
 	protected void createActions() {
 		IAction collapse = new CollapseAllAction(viewer);
-		setAction("CollapseAll", collapse); 
+		setAction("CollapseAll", collapse);
 		IAction expand = new ExpandAllAction(viewer);
-		setAction("ExpandAll", expand); 
+		setAction("ExpandAll", expand);
 		IAction hideTimeEvent = new HideTimeEventsAction(true);
 		setAction("HideTimeEvent", hideTimeEvent);
 	}
@@ -163,9 +171,9 @@ public class DeclarationView extends AbstractDebugView implements
 
 	@Override
 	protected void configureToolBar(IToolBarManager tbm) {
-		tbm.add(getAction("CollapseAll")); 
+		tbm.add(getAction("CollapseAll"));
 		tbm.add(getAction("ExpandAll"));
-		tbm.add(getAction("HideTimeEvent")); 
+		tbm.add(getAction("HideTimeEvent"));
 	}
 
 }