VSSプラグイン

使えないという話の追跡


コード中で,JDTの機能を使っているのは,下記の3点に集約されるらしい.

import org.eclipse.jdt.internal.ui.wizards.TypedElementSelectionValidator;
import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter;
import org.eclipse.jdt.ui.ProblemsLabelDecorator;

internal を平然と使う気持ちが理解できない*1
使用箇所は,UIUtils.chooseProjectPath() .

	public static String chooseProjectPath(
		Shell shell,
		IProject project,
		IResource initSelection) {
		final Class[] acceptedClasses =
			new Class[] { IProject.class, IFolder.class };
		final ISelectionStatusValidator validator =
			new TypedElementSelectionValidator(acceptedClasses, false);
		final IWorkspaceRoot root = project.getWorkspace().getRoot();
		final IProject[] allProjects = root.getProjects();
		if (allProjects == null) {
		    return null;
		}
		ArrayList rejectedElements = new ArrayList(allProjects.length);
		for (int i = 0; i < allProjects.length; i++) {
			if (!allProjects[i].equals(project)) {
				rejectedElements.add(allProjects[i]);
			}
		}
		ViewerFilter filter =
			new TypedViewerFilter(acceptedClasses, rejectedElements.toArray());

		ILabelProvider lp = new WorkbenchLabelProvider();
		ITreeContentProvider cp = new WorkbenchContentProvider();

		ElementTreeSelectionDialog dialog =
			new ElementTreeSelectionDialog(shell, lp, cp);
		dialog.setTitle("Choose folder"); //$NON-NLS-1$
		dialog.setValidator(validator);
		dialog.setMessage("Choose folder");
		//$NON-NLS-1$
		dialog.addFilter(filter);
		dialog.setInput(root);
		dialog.setInitialSelection(initSelection);
|<
まあつまり,指定したプロジェクトの下にあるフォルダだけ表示したいってことね.
これはちょっと頭をひねればキレイにできるでしょう.

*1:それを言っちゃうと,org.eclipse.swt.internal.ole にベッタリなこのプラグインそのものの存在に関わるのだけれども.