blob: 35e96d5bd8c26d9dbbc467ca95f8a52ccef0fa33 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}