package org.eclipse.jdt.internal.launching;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.variables.IDynamicVariable;
import org.eclipse.core.variables.IDynamicVariableResolver;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
import org.eclipse.jdt.launching.IRuntimeClasspathEntry2;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.osgi.util.NLS;
public class ProjectClasspathVariableResolver implements IDynamicVariableResolver {
@Override
public String resolveValue(IDynamicVariable variable, String argument) throws CoreException {
IProject proj = null;
if (argument == null) {
IResource resource = getSelectedResource();
if (resource != null && resource.exists()) {
proj = resource.getProject();
}
if (proj == null) {
throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, LaunchingMessages.ProjectClasspathVariableResolver_2));
}
} else {
proj = ResourcesPlugin.getWorkspace().getRoot().getProject(argument);
}
IJavaProject javaProject = JavaCore.create(proj);
if (javaProject.exists()) {
IRuntimeClasspathEntry2 defClassPath = (IRuntimeClasspathEntry2) JavaRuntime.newDefaultProjectClasspathEntry(javaProject);
IRuntimeClasspathEntry[] entries = defClassPath.getRuntimeClasspathEntries(false);
List<IRuntimeClasspathEntry> collect = new ArrayList<>();
for (int i = 0; i < entries.length; i++) {
IRuntimeClasspathEntry[] children = JavaRuntime.resolveRuntimeClasspathEntry(entries[i], javaProject, false);
for (int j = 0; j < children.length; j++) {
collect.add(children[j]);
}
}
entries = collect.toArray(new IRuntimeClasspathEntry[collect.size()]);
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < entries.length; i++) {
if (i > 0) {
buffer.append(File.pathSeparatorChar);
}
buffer.append(entries[i].getLocation());
}
return buffer.toString();
}
throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, NLS.bind(LaunchingMessages.ProjectClasspathVariableResolver_1, new String[]{argument})));
}
protected IResource getSelectedResource() throws CoreException {
IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
try {
String pathString = manager.performStringSubstitution("${selected_resource_path}");
return ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(pathString));
} catch (CoreException e) {
}
throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, LaunchingMessages.ProjectClasspathVariableResolver_3));
}
}