/******************************************************************************* * Copyright (c) 2000, 2015 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.launching.sourcelookup.containers; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.sourcelookup.ISourceContainer; import org.eclipse.debug.core.sourcelookup.ISourceContainerType; import org.eclipse.debug.core.sourcelookup.containers.CompositeSourceContainer; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.internal.launching.LaunchingPlugin; import org.eclipse.jdt.launching.IRuntimeClasspathEntry; import org.eclipse.jdt.launching.JavaRuntime; /** * A classpath variable source container contains a source container * that is the resolved value of the associated variable. * <p> * This class may be instantiated. * </p> * @since 3.0 * @noextend This class is not intended to be subclassed by clients. */ public class ClasspathVariableSourceContainer extends CompositeSourceContainer { private IPath fVariable; /** * Unique identifier for Java project source container type * (value <code>org.eclipse.jdt.launching.sourceContainer.classpathVariable</code>). */ public static final String TYPE_ID = LaunchingPlugin.getUniqueIdentifier() + ".sourceContainer.classpathVariable"; //$NON-NLS-1$ /** * Constructs a new source container on the given variable and suffix. * * @param variablePath path representing a Java classpath variable. * The first segment is the variable name, and the following segments * (if any) are appended to the variable. */ public ClasspathVariableSourceContainer(IPath variablePath) { fVariable = variablePath; } /* (non-Javadoc) * @see org.eclipse.debug.internal.core.sourcelookup.containers.CompositeSourceContainer#createSourceContainers() */ @Override protected ISourceContainer[] createSourceContainers() throws CoreException { IPath path = JavaCore.getClasspathVariable(fVariable.segment(0)); if (path == null) { return new ISourceContainer[0]; } if (fVariable.segmentCount() > 1) { path = path.append(fVariable.removeFirstSegments(1)); } IRuntimeClasspathEntry entry = JavaRuntime.newArchiveRuntimeClasspathEntry(path); return JavaRuntime.getSourceContainers(new IRuntimeClasspathEntry[]{entry}); } /* (non-Javadoc) * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getName() */ @Override public String getName() { return fVariable.toOSString(); } /** * Returns the variable this container references as a path. The * first segment is the variable name, and the following segments * are appended to the variable's value. * * @return path representing the variable and suffix */ public IPath getPath() { return fVariable; } /* (non-Javadoc) * @see org.eclipse.debug.internal.core.sourcelookup.ISourceContainer#getType() */ @Override public ISourceContainerType getType() { return getSourceContainerType(TYPE_ID); } }