diff options
Diffstat (limited to 'bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/wizards/ClassPathDetector.java')
-rw-r--r-- | bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/wizards/ClassPathDetector.java | 238 |
1 files changed, 0 insertions, 238 deletions
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/wizards/ClassPathDetector.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/wizards/ClassPathDetector.java deleted file mode 100644 index 8ab53c61..00000000 --- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/wizards/ClassPathDetector.java +++ /dev/null @@ -1,238 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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 - * Matt Chapman, mpchapman@gmail.com - 89977 Make JDT .java agnostic - *******************************************************************************/ -package org.eclipse.wst.jsdt.internal.ui.wizards; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.resources.IResourceProxyVisitor; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Path; -import org.eclipse.wst.jsdt.core.IIncludePathEntry; -import org.eclipse.wst.jsdt.core.IJavaScriptUnit; -import org.eclipse.wst.jsdt.core.JavaScriptConventions; -import org.eclipse.wst.jsdt.core.JavaScriptCore; -import org.eclipse.wst.jsdt.core.JavaScriptModelException; -import org.eclipse.wst.jsdt.core.ToolFactory; -import org.eclipse.wst.jsdt.core.compiler.IScanner; -import org.eclipse.wst.jsdt.core.compiler.ITerminalSymbols; -import org.eclipse.wst.jsdt.core.compiler.InvalidInputException; -import org.eclipse.wst.jsdt.ui.PreferenceConstants; - -import com.ibm.icu.text.Collator; - -public class ClassPathDetector implements IResourceProxyVisitor { - - private HashMap fSourceFolders; - private IProject fProject; - private IIncludePathEntry[] fResultClasspath; - private IProgressMonitor fMonitor; - - private static class CPSorter implements Comparator { - private Collator fCollator= Collator.getInstance(); - public int compare(Object o1, Object o2) { - IIncludePathEntry e1= (IIncludePathEntry) o1; - IIncludePathEntry e2= (IIncludePathEntry) o2; - return fCollator.compare(e1.getPath().toString(), e2.getPath().toString()); - } - } - - public ClassPathDetector(IProject project, IProgressMonitor monitor) throws CoreException { - fSourceFolders= new HashMap(); - fProject= project; - fResultClasspath= null; - - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - detectClasspath(monitor); - } - - /** - * Method detectClasspath. - * @param monitor The progress monitor (not null) - * @throws CoreException - */ - private void detectClasspath(IProgressMonitor monitor) throws CoreException { - try { - monitor.beginTask(NewWizardMessages.ClassPathDetector_operation_description, 4); - - fMonitor= monitor; - fProject.accept(this, IResource.NONE); - monitor.worked(1); - - ArrayList cpEntries= new ArrayList(); - - detectSourceFolders(cpEntries); - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } - monitor.worked(1); - - if (cpEntries.isEmpty()) { - return; - } - - IIncludePathEntry[] jreEntries= PreferenceConstants.getDefaultJRELibrary(); - for (int i= 0; i < jreEntries.length; i++) { - cpEntries.add(jreEntries[i]); - } - - IIncludePathEntry[] entries= (IIncludePathEntry[]) cpEntries.toArray(new IIncludePathEntry[cpEntries.size()]); - if (!JavaScriptConventions.validateClasspath(JavaScriptCore.create(fProject), entries).isOK()) { - return; - } - - fResultClasspath= entries; - } finally { - monitor.done(); - } - } - - private void detectSourceFolders(ArrayList resEntries) { - ArrayList res= new ArrayList(); - Set sourceFolderSet= fSourceFolders.keySet(); - for (Iterator iter= sourceFolderSet.iterator(); iter.hasNext();) { - IPath path= (IPath) iter.next(); - ArrayList excluded= new ArrayList(); - for (Iterator inner= sourceFolderSet.iterator(); inner.hasNext();) { - IPath other= (IPath) inner.next(); - if (!path.equals(other) && path.isPrefixOf(other)) { - IPath pathToExclude= other.removeFirstSegments(path.segmentCount()).addTrailingSeparator(); - excluded.add(pathToExclude); - } - } - IPath[] excludedPaths= (IPath[]) excluded.toArray(new IPath[excluded.size()]); - IIncludePathEntry entry= JavaScriptCore.newSourceEntry(path, excludedPaths); - res.add(entry); - } - Collections.sort(res, new CPSorter()); - resEntries.addAll(res); - } - - private void visitCompilationUnit(IFile file) { - IJavaScriptUnit cu= JavaScriptCore.createCompilationUnitFrom(file); - if (cu != null) { - IJavaScriptUnit workingCopy= null; - try { - workingCopy= cu.getWorkingCopy(null); - IPath relPath= getPackagePath(workingCopy.getSource()); - IPath packPath= file.getParent().getFullPath(); - String cuName= file.getName(); - if (relPath == null) { - addToMap(fSourceFolders, packPath, new Path(cuName)); - } else { - IPath folderPath= getFolderPath(packPath, relPath); - if (folderPath != null) { - addToMap(fSourceFolders, folderPath, relPath.append(cuName)); - } - } - } catch (JavaScriptModelException e) { - // ignore - } catch (InvalidInputException e) { - // ignore - } finally { - if (workingCopy != null) { - try { - workingCopy.discardWorkingCopy(); - } catch (JavaScriptModelException ignore) { - } - } - } - } - } - - private IPath getPackagePath(String source) throws InvalidInputException { - IScanner scanner= ToolFactory.createScanner(false, false, false, false); - scanner.setSource(source.toCharArray()); - scanner.resetTo(0, source.length() - 1); - int tok= scanner.getNextToken(); - if (tok != ITerminalSymbols.TokenNamepackage) { - return null; - } - IPath res= Path.EMPTY; - do { - tok= scanner.getNextToken(); - if (tok == ITerminalSymbols.TokenNameIdentifier) { - res= res.append(new String(scanner.getCurrentTokenSource())); - } else { - return res; - } - tok= scanner.getNextToken(); - } while (tok == ITerminalSymbols.TokenNameDOT); - - return res; - } - - - private void addToMap(HashMap map, IPath folderPath, IPath relPath) { - List list= (List) map.get(folderPath); - if (list == null) { - list= new ArrayList(50); - map.put(folderPath, list); - } - list.add(relPath); - } - - private IPath getFolderPath(IPath packPath, IPath relpath) { - int remainingSegments= packPath.segmentCount() - relpath.segmentCount(); - if (remainingSegments >= 0) { - IPath common= packPath.removeFirstSegments(remainingSegments); - if (common.equals(relpath)) { - return packPath.uptoSegment(remainingSegments); - } - } - return null; - } - - private boolean isValidCUName(String name) { - return !JavaScriptConventions.validateCompilationUnitName(name).matches(IStatus.ERROR); - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IResourceProxyVisitor#visit(org.eclipse.core.resources.IResourceProxy) - */ - public boolean visit(IResourceProxy proxy) { - if (fMonitor.isCanceled()) { - throw new OperationCanceledException(); - } - - if (proxy.getType() == IResource.FILE) { - String name= proxy.getName(); - if (isValidCUName(name)) - visitCompilationUnit((IFile) proxy.requestResource()); - return false; - } - return true; - } - - public IIncludePathEntry[] getClasspath() { - if (fResultClasspath == null) - return new IIncludePathEntry[0]; - return fResultClasspath; - } -}
\ No newline at end of file |