package com.github.sdbg.debug.core.internal.source;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.sourcelookup.ISourceContainer;
import org.eclipse.debug.core.sourcelookup.ISourcePathComputer;
import org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate;
public class SDBGSourcePathComputer implements ISourcePathComputer {
private static final String ID = SDBGSourcePathComputer.class.getName();
private ISourcePathComputerDelegate[] delegates;
public SDBGSourcePathComputer(ISourcePathComputerDelegate... delegates) {
this.delegates = delegates;
}
@Override
public ISourceContainer[] computeSourceContainers(ILaunchConfiguration configuration,
IProgressMonitor monitor) throws CoreException {
SubMonitor subMonitor = SubMonitor.convert(monitor, delegates.length);
try {
List<ISourceContainer> containers = new ArrayList<ISourceContainer>();
for (ISourcePathComputerDelegate delegate : delegates) {
containers.addAll(Arrays.asList(delegate.computeSourceContainers(
configuration,
subMonitor.newChild(1))));
}
return containers.toArray(new ISourceContainer[0]);
} finally {
subMonitor.done();
}
}
@Override
public String getId() {
return ID;
}
}