Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2009 itemis AG (http://www.itemis.eu) 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 /
  
  package org.eclipse.xtext.ui.resource;
  
 import java.util.List;
 
 import  org.eclipse.jdt.core.IJarEntryResource;
 import  org.eclipse.jdt.core.IJavaElement;
 import  org.eclipse.jdt.core.IPackageFragment;
 import  org.eclipse.jdt.core.IPackageFragmentRoot;
 import  org.eclipse.jdt.core.JavaModelException;
 

Author(s):
Sven Efftinge - Initial contribution and API
Sebastian Zarnekow - Initial contribution and API
 
 public abstract class PackageFragmentRootWalker<T> {
 
 	public static class TraversalState {
 		
 		private List<Objectparents;
 
 			 = Lists.<Object>newArrayList(obj);
 		}
 		
 		public List<?> getParents() {
 			return Collections.unmodifiableList();
 		}
 		
 		void pop() {
 		}
 		
 		void push(Object obj) {
 			.add(obj);
 		}
 		
 	}
 	
 	public T traverse(IPackageFragmentRoot rootboolean stopOnFirstResultthrows JavaModelException {
 		T result = null;
 		if (root.exists() && existsPhysically(root)) {
 			Object[] resources = root.getNonJavaResources();
 			TraversalState state = new TraversalState(root);
 			for (Object object : resources) {
 				if (object instanceof IJarEntryResource) {
 					result = traverse((IJarEntryResource) objectstopOnFirstResultstate);
 					if (stopOnFirstResult && result != null)
 						return result;
 				}
 			}
 
 			IJavaElement[] children = root.getChildren();
 			for (IJavaElement javaElement : children) {
 				if (javaElement instanceof IPackageFragment) {
 					result = traverse((IPackageFragment) javaElementstopOnFirstResultstate);
 					if (stopOnFirstResult && result != null)
 						return result;
 				}
 			}
 		}
 		return result;
 	}
 	
 	private boolean existsPhysically(IPackageFragmentRoot rootthrows JavaModelException {
 		if(root.isExternal()) 
 			return root.getPath().toFile().exists();
 		else
 			return root.getUnderlyingResource().exists();
 	}
 
 	protected T traverse(IPackageFragment packboolean stopOnFirstResultTraversalState statethrows JavaModelException {
 		T result = null;
 		state.push(pack);
 		IJavaElement[] children = pack.getChildren();
 		for (IJavaElement iJavaElement : children) {
 			if (iJavaElement instanceof IPackageFragment) {
 				result = traverse((IPackageFragment) iJavaElementstopOnFirstResultstate);
 				if (stopOnFirstResult && result!=null)
 					return result;
 			}
 		}
 		Object[] resources = pack.getNonJavaResources();
 		for (Object object : resources) {
 			if (object instanceof IJarEntryResource) {
 				result = traverse((IJarEntryResource) objectstopOnFirstResultstate);
 				if (stopOnFirstResult && result!=null)
 					return result;
 			}
 		}
		state.pop();
		return result;
	}
	protected T traverse(IJarEntryResource jarEntryboolean stopOnFirstResultTraversalState state) {
result = null;
		if (jarEntry.isFile()) {
			result = handle(jarEntrystate);
else {
			state.push(jarEntry);
			IJarEntryResource[] children = jarEntry.getChildren();
			for (IJarEntryResource child : children) {
				result = traverse(childstopOnFirstResultstate);
				if (stopOnFirstResult && result!=null)
					return result;
			}
			state.pop();
		}
		return result;
	}
	protected abstract T handle(IJarEntryResource jarEntryTraversalState state);
New to GrepCode? Check out our FAQ X