package com.redhat.ceylon.eclipse.core.debug.presentation; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor; import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.jdt.debug.core.IJavaStackFrame; import org.eclipse.jdt.debug.core.IJavaThread; import org.eclipse.jdt.internal.debug.ui.threadgroups.JavaDebugTargetProxy; import com.redhat.ceylon.ide.common.debug.agent.CeylonDebugEvaluationThread; public class CeylonDebugTargetProxy extends JavaDebugTargetProxy { public CeylonDebugTargetProxy(IDebugTarget target) { super(target); } @Override public void fireModelChanged(IModelDelta delta) { delta.accept(new IModelDeltaVisitor() { boolean isInCeylonDebugEvaluationThread = false; private void filterSelectAndRevealFlags(IModelDelta delta) { if (isInCeylonDebugEvaluationThread) { if ((delta.getFlags() & (IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL)) != 0) { if (delta instanceof ModelDelta) { int newFlags = delta.getFlags() & ~(IModelDelta.EXPAND | IModelDelta.SELECT | IModelDelta.REVEAL); ((ModelDelta)delta).setFlags(newFlags); } } } } @Override public boolean visit(IModelDelta delta, int depth) { if (delta.getElement() instanceof IJavaThread) { try { isInCeylonDebugEvaluationThread = CeylonDebugEvaluationThread.name.equals(((IJavaThread)delta.getElement()).getName()); } catch (DebugException e) { e.printStackTrace(); } filterSelectAndRevealFlags(delta); } if (delta.getElement() instanceof IJavaStackFrame) { filterSelectAndRevealFlags(delta); } return true; } }); super.fireModelChanged(delta); } }