@Override public boolean canEditSourceContainers(ISourceLookupDirector director, ISourceContainer[] containers) { return containers.length == 1 && containers[0].getType().getId().equals(FolderSourceContainer.TYPE_ID); }
protected void disposeContainers() { synchronized (containers) { for (ISourceContainer container : containers.values()) { if (container != null) // possible for non-maven jars { container.dispose(); } } containers.clear(); } }
private Object findSourceElement(ISourceContainer[] containers, String typeName) throws CoreException { for (int i = 0; i < containers.length; i++) { Object[] result = containers[i].findSourceElements(typeName); if (result.length > 0) return result[0]; } return null; }
/** * if containers contains target source container * * @param containers * exsited source containers * @param target * @return */ private boolean contains(ISourceContainer[] containers, ISourceContainer target) { String name = target.getName(); String type = target.getType().getId(); for (ISourceContainer container : containers) { if (name.equals(container.getName()) && type.equals(container.getType().getId())) { return true; } } return false; } private Set<String> searchUserClass(IRuntimeClasspathEntry[] entries) {
private IResource findMostSpecific(String sourceFile) throws CoreException { IResource resolved = null; int shortestPath = Integer.MAX_VALUE; for (ISourceContainer container : sourceContainer.getSourceContainers()) { Object[] paths = container.findSourceElements(sourceFile); for (Object path : paths) { if (path instanceof IFile) { IFile file = (IFile) path; IPath p = file.getFullPath(); if (p instanceof Path) { int count = ((Path) p).segmentCount(); if (count < shortestPath) { shortestPath = count; resolved = file; } } } } } return resolved; }
@Override public ISourceContainer[] editSourceContainers(Shell shell, ISourceLookupDirector director, ISourceContainer[] containers) { if (containers.length == 1 && DirectorySourceContainer.TYPE_ID.equals(containers[0].getType().getId()) ) { DirectorySourceContainer c = (DirectorySourceContainer)containers[0]; DirectorySourceContainerDialog dialog = new DirectorySourceContainerDialog(shell, c.getDirectory().getPath(), c.isComposite()); if (dialog.open() == Window.OK) { String directory = dialog.getDirectory(); if(directory !=null) { containers[0].dispose(); return new ISourceContainer[]{ new DirectorySourceContainer(new Path(directory), dialog.isSearchSubfolders())}; } } } return containers; }
@Override public synchronized ISourceContainer[] getSourceContainers() throws CoreException { if (fContainers == null) { fContainers = createSourceContainers(); for (int i = 0; i < fContainers.length; i++) { ISourceContainer container = fContainers[i]; container.init(getDirector()); } } return fContainers; }
@Override public Object[] getChildren(Object parentElement) { try { return ((ISourceContainer)parentElement).getSourceContainers(); } catch (CoreException e) { return new Object[0]; } }
@Override public String getText(Object element) { // first, allo workbench adapter to provide label String label = getWorkbenchLabelProvider().getText(element); if (label == null || label.length() == 0) { if (element instanceof ISourceContainer) { return ((ISourceContainer) element).getName(); } else if (element instanceof ISourceContainerType) { return ((ISourceContainerType)element).getName(); } } else { return label; } return super.getText(element); }
@Override protected ISourceContainer[] createSourceContainers() throws CoreException { IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); ISourceContainer[] containers = new ISourceContainer[projects.length]; for (int i = 0; i < projects.length; i++) { ISourceContainer container = new ProjectSourceContainer(projects[i], false); container.init(getDirector()); containers[i] = container; } return containers; }
@Override public boolean canEditSourceContainers(ISourceLookupDirector director, ISourceContainer[] containers) { return containers.length == 1 && DirectorySourceContainer.TYPE_ID.equals(containers[0].getType().getId()); }
@Override public void dispose() { super.dispose(); for (ISourceContainer member : members) { member.dispose(); } Arrays.fill(members, null); }
/** * Given a source name info, search the associated source file or class file from the source container list. * * @param sourcePath * the target source name (e.g. com\microsoft\java\debug\xxx.java). * @param containers * the source container list. * @return the associated source file or class file. */ public static Object findSourceElement(String sourcePath, ISourceContainer[] containers) { if (containers == null) { return null; } for (ISourceContainer container : containers) { try { Object[] objects = container.findSourceElements(sourcePath); if (objects.length > 0 && (objects[0] instanceof IResource || objects[0] instanceof IClassFile)) { return objects[0]; } } catch (CoreException e) { // do nothing. } } return null; }
@Override protected ISourceContainer[] createSourceContainers() throws CoreException { if (isComposite()) { String[] files = fDirectory.list(); if (files != null) { List<ISourceContainer> dirs = new ArrayList<ISourceContainer>(); for (int i = 0; i < files.length; i++) { String name = files[i]; File file = new File(getDirectory(), name); if (file.exists() && file.isDirectory()) { dirs.add(new DirectorySourceContainer(file, true)); } } ISourceContainer[] containers = dirs.toArray(new ISourceContainer[dirs.size()]); for (int i = 0; i < containers.length; i++) { ISourceContainer container = containers[i]; container.init(getDirector()); } return containers; } } return new ISourceContainer[0]; }
/** * Returns internal jars (source containers) currently used by the * given source lookup director. * * @param director source lookup director jars are being added to * @return the list of any found {@link ArchiveSourceContainer}s */ protected List<ISourceContainer> getSelectedJars(ISourceLookupDirector director) { ISourceContainer[] containers = director.getSourceContainers(); List<ISourceContainer> jars = new ArrayList<>(); for (int i = 0; i < containers.length; i++) { ISourceContainer container = containers[i]; if (container.getType().getId().equals(ArchiveSourceContainer.TYPE_ID)) { jars.add(container); } } return jars; }
public synchronized void dispose() { Iterator iterator = fSourceContainerMap.values().iterator(); while (iterator.hasNext()) { ISourceContainer[] containers = (ISourceContainer[]) iterator.next(); for (int i = 0; i < containers.length; i++) { containers[i].dispose(); } } fSourceContainerMap.clear(); super.dispose(); }
@Override public Object[] findSourceElements(Object element) throws CoreException { ISourceContainer container = getSourceContainer(element, false /* don't refresh cache */, null /* async */ ); if (container == null) { return null; } String sourcePath = jdi.getSourcePath(element); if (sourcePath == null) { // can't really happen return null; } return container.findSourceElements(sourcePath); }
@Override protected ISourceContainer[] createSourceContainers() throws CoreException { if(fSubfolders) { IResource[] resources = getContainer().members(); List<ISourceContainer> list = new ArrayList<ISourceContainer>(resources.length); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; if (resource.getType() == IResource.FOLDER) { list.add(new FolderSourceContainer((IFolder)resource, fSubfolders)); } } ISourceContainer[] containers = list.toArray(new ISourceContainer[list.size()]); for (int i = 0; i < containers.length; i++) { ISourceContainer container = containers[i]; container.init(getDirector()); } return containers; } return new ISourceContainer[0]; }
@Override public String getMemento(ISourceContainer container) throws CoreException { if (this.equals(container.getType())) { return getDelegate().getMemento(container); } IStatus status = new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), DebugPlugin.ERROR, SourceLookupMessages.SourceContainerType_0, null); throw new CoreException(status); } /* (non-Javadoc)