filteringclasspathentryvisitor.java

来自「配置文件」· Java 代码 · 共 113 行

JAVA
113
字号
/**
 * Copyright (c) 2003-2005 Craig Setera
 * All Rights Reserved.
 * Licensed under the Eclipse Public License - v 1.0
 * For more information see http://www.eclipse.org/legal/epl-v10.html
 */
package eclipseme.core.internal.utils;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.launching.JavaRuntime;

import eclipseme.core.internal.J2MEClasspathContainer;
import eclipseme.core.nature.J2MENature;

/**
 * An IClasspathEntryVisitor that filters out the J2ME classpath
 * container and the base JRE containers and libraries.
 * <p />
 * Copyright (c) 2003-2005 Craig Setera<br>
 * All Rights Reserved.<br>
 * Licensed under the Eclipse Public License - v 1.0<p/>
 * <br>
 * $Revision: 1.5 $
 * <br>
 * $Date: 2005/12/02 02:22:11 $
 * <br>
 * @author Craig Setera
 */
public abstract class FilteringClasspathEntryVisitor
	extends AbstractClasspathEntryVisitor 
{
	private IClasspathEntry containerEntry;
	
	/**
	 * @see eclipseme.core.internal.utils.IClasspathEntryVisitor#visitContainerBegin(IClasspathEntry, org.eclipse.jdt.core.IJavaProject, IPath, org.eclipse.core.runtime.IProgressMonitor)
	 */
	public boolean visitContainerBegin(
		IClasspathEntry entry,
		IJavaProject javaProject, 
		IPath containerPath, 
		IProgressMonitor monitor)
			throws CoreException 
	{
		String firstSegment = containerPath.segment(0);
		
		boolean traverse =
			!firstSegment.equals(J2MEClasspathContainer.J2ME_CONTAINER) &&
			!firstSegment.equals(JavaRuntime.JRE_CONTAINER);
		
		if (traverse) {
			containerEntry = entry;
		}
		
		return traverse;
	}

	/**
	 * @see eclipseme.core.internal.utils.AbstractClasspathEntryVisitor#visitContainerEnd(org.eclipse.jdt.core.IClasspathEntry, org.eclipse.jdt.core.IJavaProject, org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IProgressMonitor)
	 */
	public void visitContainerEnd(
		IClasspathEntry entry, 
		IJavaProject javaProject, 
		IPath containerPath, 
		IProgressMonitor monitor) 
			throws CoreException 
	{
		containerPath = null;
	}

	/**
	 * @see eclipseme.core.internal.utils.IClasspathEntryVisitor#visitProject(IClasspathEntry, org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IJavaProject, org.eclipse.core.runtime.IProgressMonitor)
	 */
	public boolean visitProject(
		IClasspathEntry entry,
		IJavaProject javaProject, 
		IJavaProject classpathProject, IProgressMonitor monitor)
			throws CoreException 
	{
		return !J2MENature.hasJ2MENature(classpathProject.getProject());
	}
	
	/**
	 * @see eclipseme.core.internal.utils.IClasspathEntryVisitor#visitVariable(IClasspathEntry, org.eclipse.jdt.core.IJavaProject, java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
	 */
	public boolean visitVariable(
		IClasspathEntry entry, 
		IJavaProject javaProject,
		String variableName, IProgressMonitor monitor) 
			throws CoreException 
	{
		return !variableName.equals(JavaRuntime.JRELIB_VARIABLE);
	}
	
	/**
	 * Return a boolean indicating whether the specified library
	 * classpath entry is exported either directly or via a
	 * classpath container.
	 * 
	 * @param entry
	 * @return
	 */
	protected boolean isLibraryExported(IClasspathEntry entry) 
	{
		return
			entry.isExported() ||
			((containerEntry != null) && containerEntry.isExported());
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?