/******************************************************************************* * Copyright (c) 2016 Google, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Google, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.debug.tests.connectors; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentLinkedDeque; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.core.model.ISourceLocator; public class MockLaunch implements ILaunch { private ConcurrentLinkedDeque<IProcess> processes = new ConcurrentLinkedDeque<>(); private ConcurrentLinkedDeque<IDebugTarget> targets = new ConcurrentLinkedDeque<>(); private ISourceLocator sourceLocator; private Map<String, String> attributes = new HashMap<>(); @Override public boolean canTerminate() { for (IProcess p : processes) { if (p.canTerminate()) { return true; } } for (IDebugTarget t : targets) { if (t.canTerminate()) { return true; } } return false; } @Override public boolean isTerminated() { for (IProcess p : processes) { if (!p.isTerminated()) { return false; } } for (IDebugTarget t : targets) { if (!t.isTerminated()) { return false; } } return true; } @Override public void terminate() throws DebugException { for (Iterator<IProcess> iter = processes.iterator(); iter.hasNext(); iter.remove()) { IProcess p = iter.next(); if (p.canTerminate()) { p.terminate(); } } for (Iterator<IDebugTarget> iter = targets.iterator(); iter.hasNext(); iter.remove()) { IDebugTarget t = iter.next(); if (t.canTerminate()) { t.terminate(); } } } @Override public <T> T getAdapter(Class<T> adapter) { return null; } @Override public Object[] getChildren() { return new Object[0]; } @Override public IDebugTarget getDebugTarget() { return null; } @Override public IProcess[] getProcesses() { return processes.toArray(new IProcess[processes.size()]); } @Override public IDebugTarget[] getDebugTargets() { return targets.toArray(new IDebugTarget[targets.size()]); } @Override public void addDebugTarget(IDebugTarget target) { targets.add(target); } @Override public void removeDebugTarget(IDebugTarget target) { targets.remove(target); } @Override public void addProcess(IProcess process) { processes.add(process); } @Override public void removeProcess(IProcess process) { processes.remove(process); } @Override public ISourceLocator getSourceLocator() { return sourceLocator; } @Override public void setSourceLocator(ISourceLocator locator) { sourceLocator = locator; } @Override public String getLaunchMode() { return ILaunchManager.RUN_MODE; } @Override public ILaunchConfiguration getLaunchConfiguration() { return null; } @Override public void setAttribute(String key, String value) { attributes.put(key, value); } @Override public String getAttribute(String key) { return attributes.get(key); } @Override public boolean hasChildren() { return getChildren().length > 0; } }