/** * Returns a new empty region. * * @return a new empty region */ public static IRegion newRegion() { return new Region(); }
protected List<IFile> findGeneratedJavaClassFiles(IJavaElement element) { Region region = new Region(); region.add(element); List<IFile> result = Lists.newLinkedList(); for (IResource res : JavaCore.getGeneratedResources(region, false)) if (res instanceof IFile) result.add((IFile) res); return result; }
@Override public void add(IJavaElement element) { if (contains(element)) { return; } Node node = createNodeFor(element); node.clearChildren(); }
/** * @see IRegion#add(IJavaElement) */ public void add(IJavaElement element) { if (!contains(element)) { //"new" element added to region removeAllChildren(element); this.rootElements.add(element); this.rootElements.trimToSize(); } } /**
private Node findExactNode(IJavaElement element) { if (element == null) { return this.root; } Node parentNode = findExactNode(getParent(element)); if (parentNode == null) { return null; } return parentNode.findChildFor(element); }
switch (delta.getKind()) { case IJavaElementDelta.ADDED : return this.projectRegion.contains(element); case IJavaElementDelta.REMOVED : case IJavaElementDelta.CHANGED : IPackageFragmentRoot root = (IPackageFragmentRoot)element; IPath rootPath = root.getPath(); IJavaElement[] elements = this.projectRegion.getElements(); for (int i = 0; i < elements.length; i++) { JavaProject javaProject = (JavaProject)elements[i]; IJavaElement[] pkgs = this.packageRegion.getElements(); for (int i = 0; i < pkgs.length; i++) { if (pkgs[i].getParent().equals(element)) {
/** * Returns <code>true</code> if an equivalent package fragment is included in the package * region. Package fragments are equivalent if they both have the same name. */ protected boolean packageRegionContainsSamePackageFragment(PackageFragment element) { IJavaElement[] pkgs = this.packageRegion.getElements(); for (int i = 0; i < pkgs.length; i++) { PackageFragment pkg = (PackageFragment) pkgs[i]; if (Util.equalArraysOrNull(pkg.names, element.names)) return true; } return false; }
/** * Initializes the file, package and project regions */ protected void initializeRegions() { IType[] allTypes = getAllTypes(); for (int i = 0; i < allTypes.length; i++) { IType type = allTypes[i]; Openable o = (Openable) ((JavaElement) type).getOpenableParent(); if (o != null) { ArrayList<IType> types = this.files.get(o); if (types == null) { types = new ArrayList<>(); this.files.put(o, types); } types.add(type); } IPackageFragment pkg = type.getPackageFragment(); this.packageRegion.add(pkg); IJavaProject declaringProject = type.getJavaProject(); if (declaringProject != null) { this.projectRegion.add(declaringProject); } checkCanceled(); } } /**
@Override public boolean remove(IJavaElement element) { Node node = findExactNode(element); if (node == null) { return false; } node.clearChildren(); boolean returnValue = node.isEmpty(); List<Node> ancestors = new ArrayList<>(); findPath(ancestors, element); IJavaElement currentElement = element; int idx = ancestors.size(); while (--idx > 0 && currentElement != null) { Node current = ancestors.get(idx); Node parent = ancestors.get(idx - 1); if (current.isEmpty()) { parent.removeChild(currentElement); } else { break; } currentElement = getParent(currentElement); } return returnValue; }
bp.setOnDragDetected(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { double x = event.getX(); double y = event.getY(); double width = bp.getWidth(); double height = bp.getHeight(); if (x > borderSize && x < width - borderSize && y > borderSize && y < height - borderSize) { Dragboard db = bp.startDragAndDrop(TransferMode.MOVE); ClipboardContent clipboard = new ClipboardContent(); final int nodeIndex = bp.getParent().getChildrenUnmodifiable() .indexOf(bp); clipboard.putString(Integer.toString(nodeIndex)); db.setContent(clipboard); Image img = bp.snapshot(null, null); db.setDragView(img, 7, 7);
/** * Returns true if the given package fragment delta could affect this type hierarchy * @param eventType TODO */ private boolean isAffectedByPackageFragment(IJavaElementDelta delta, PackageFragment element, int eventType) { switch (delta.getKind()) { case IJavaElementDelta.ADDED : // if the package fragment is in the projects being considered, this could // introduce new types, changing the hierarchy return this.projectRegion.contains(element); case IJavaElementDelta.REMOVED : // is a change if the package fragment contains types in this hierarchy return packageRegionContainsSamePackageFragment(element); case IJavaElementDelta.CHANGED : // look at the files in the package fragment return isAffectedByChildren(delta, eventType); } return false; } /**
private Node createNodeFor(IJavaElement element) { if (element == null) { return this.root; } Node parentNode = createNodeFor(getParent(element)); return parentNode.createChildFor(element); }
private Node findMostSpecificNodeFor(IJavaElement element) { if (element == null) { return this.root; } Node parentNode = findMostSpecificNodeFor(getParent(element)); Node child = parentNode.findChildFor(element); if (child == null) { return parentNode; } return child; }
private void findPath(List<Node> ancestors, IJavaElement element) { if (element == null) { ancestors.add(this.root); return; } findPath(ancestors, getParent(element)); Node last = ancestors.get(ancestors.size() - 1); Node next = last.findChildFor(element); if (next != null) { ancestors.add(next); } } }
@Override public IJavaElement[] getElements() { int leaves = countLeafNodes(); IJavaElement[] result = new IJavaElement[leaves]; int insertions = this.root.gatherLeaves(result, 0); assert insertions == leaves; return result; }
@Override public boolean contains(IJavaElement element) { Node existingNode = findMostSpecificNodeFor(element); if (existingNode == this.root) { return false; } return existingNode.isEmpty(); }
switch (delta.getKind()) { case IJavaElementDelta.ADDED : return this.projectRegion.contains(element); case IJavaElementDelta.REMOVED : case IJavaElementDelta.CHANGED : IPackageFragmentRoot root = (IPackageFragmentRoot)element; IPath rootPath = root.getPath(); IJavaElement[] elements = this.projectRegion.getElements(); for (int i = 0; i < elements.length; i++) { JavaProject javaProject = (JavaProject)elements[i]; IJavaElement[] pkgs = this.packageRegion.getElements(); for (int i = 0; i < pkgs.length; i++) { if (pkgs[i].getParent().equals(element)) {
/** * Returns <code>true</code> if an equivalent package fragment is included in the package * region. Package fragments are equivalent if they both have the same name. */ protected boolean packageRegionContainsSamePackageFragment(PackageFragment element) { IJavaElement[] pkgs = this.packageRegion.getElements(); for (int i = 0; i < pkgs.length; i++) { PackageFragment pkg = (PackageFragment) pkgs[i]; if (Util.equalArraysOrNull(pkg.names, element.names)) return true; } return false; }
/** * Initializes the file, package and project regions */ protected void initializeRegions() { IType[] allTypes = getAllTypes(); for (int i = 0; i < allTypes.length; i++) { IType type = allTypes[i]; Openable o = (Openable) ((JavaElement) type).getOpenableParent(); if (o != null) { ArrayList<IType> types = this.files.get(o); if (types == null) { types = new ArrayList<>(); this.files.put(o, types); } types.add(type); } IPackageFragment pkg = type.getPackageFragment(); this.packageRegion.add(pkg); IJavaProject declaringProject = type.getJavaProject(); if (declaringProject != null) { this.projectRegion.add(declaringProject); } checkCanceled(); } } /**
@Override public boolean remove(IJavaElement element) { Node node = findExactNode(element); if (node == null) { return false; } node.clearChildren(); boolean returnValue = node.isEmpty(); List<Node> ancestors = new ArrayList<>(); findPath(ancestors, element); IJavaElement currentElement = element; int idx = ancestors.size(); while (--idx > 0 && currentElement != null) { Node current = ancestors.get(idx); Node parent = ancestors.get(idx - 1); if (current.isEmpty()) { parent.removeChild(currentElement); } else { break; } currentElement = getParent(currentElement); } return returnValue; }