/******************************************************************************* * 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 *******************************************************************************/ package org.eclipse.jdt.internal.core; import org.eclipse.jdt.core.IJavaElement; /** Element info for IOpenable elements. */ public class OpenableElementInfo extends JavaElementInfo { /** * Collection of handles of immediate children of this object. This is an empty array if this * element has no children. */ protected IJavaElement[] children= JavaElement.NO_ELEMENTS; /** * Is the structure of this element known * * @see IJavaElement#isStructureKnown() */ protected boolean isStructureKnown= false; public void addChild(IJavaElement child) { int length= this.children.length; if (length == 0) { this.children= new IJavaElement[] { child }; } else { for (int i= 0; i < length; i++) { if (this.children[i].equals(child)) return; // already included } System.arraycopy(this.children, 0, this.children= new IJavaElement[length + 1], 0, length); this.children[length]= child; } } public IJavaElement[] getChildren() { return this.children; } /** * @see IJavaElement#isStructureKnown() */ public boolean isStructureKnown() { return this.isStructureKnown; } public void removeChild(IJavaElement child) { for (int i= 0, length= this.children.length; i < length; i++) { IJavaElement element= this.children[i]; if (element.equals(child)) { if (length == 1) { this.children= JavaElement.NO_ELEMENTS; } else { IJavaElement[] newChildren= new IJavaElement[length - 1]; System.arraycopy(this.children, 0, newChildren, 0, i); if (i < length - 1) System.arraycopy(this.children, i + 1, newChildren, i, length - 1 - i); this.children= newChildren; } break; } } } public void setChildren(IJavaElement[] children) { this.children= children; } /** * Sets whether the structure of this element known * * @see IJavaElement#isStructureKnown() */ public void setIsStructureKnown(boolean newIsStructureKnown) { this.isStructureKnown= newIsStructureKnown; } }