Copyright (c) 2000, 2016 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation Vladimir Piskarev - Thread safety of OpenableElementInfo - https://bugs.eclipse.org/450490
/******************************************************************************* * Copyright (c) 2000, 2016 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation * Vladimir Piskarev <pisv@1c.ru> - Thread safety of OpenableElementInfo - https://bugs.eclipse.org/450490 *******************************************************************************/
package org.eclipse.jdt.internal.core; import java.util.Arrays; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IModuleDescription;
Element info for IOpenable elements.
/** 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.
/** * Collection of handles of immediate children of this * object. This is an empty array if this element has * no children. */
protected volatile IJavaElement[] children = JavaElement.NO_ELEMENTS; protected IModuleDescription module;
Is the structure of this element known
See Also:
  • isStructureKnown.isStructureKnown()
/** * Is the structure of this element known * @see IJavaElement#isStructureKnown() */
protected boolean isStructureKnown = false;
A array with all the non-java resources contained by this element
/** * A array with all the non-java resources contained by this element */
protected Object[] nonJavaResources; public void addChild(IJavaElement child) { IJavaElement[] oldChildren = this.children; int length = oldChildren.length; if (length == 0) { this.children = new IJavaElement[] {child}; } else { for (int i = 0; i < length; i++) { if (oldChildren[i].equals(child)) return; // already included } IJavaElement[] newChildren = new IJavaElement[length+1]; System.arraycopy(oldChildren, 0, newChildren, 0, length); newChildren[length] = child; this.children = newChildren; } } @Override public IJavaElement[] getChildren() { return this.children; }
See Also:
  • isStructureKnown.isStructureKnown()
/** * @see IJavaElement#isStructureKnown() */
public boolean isStructureKnown() { return this.isStructureKnown; } public void removeChild(IJavaElement child) { IJavaElement[] oldChildren = this.children; for (int i = 0, length = oldChildren.length; i < length; i++) { if (oldChildren[i].equals(child)) { if (length == 1) { this.children = JavaElement.NO_ELEMENTS; } else { IJavaElement[] newChildren = new IJavaElement[length-1]; System.arraycopy(oldChildren, 0, newChildren , 0, i); if (i < length-1) System.arraycopy(oldChildren, i+1, newChildren, i, length-1-i); this.children = newChildren; } break; } } } public void setChildren(IJavaElement[] children) { this.children= (children.length > 0) ? children : JavaElement.NO_ELEMENTS; } public void setModule(IModuleDescription module) { this.module = module; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append(" ["); //$NON-NLS-1$ sb.append("isStructureKnown="); //$NON-NLS-1$ sb.append(this.isStructureKnown); sb.append(", "); //$NON-NLS-1$ if (this.module != null) { sb.append("module="); //$NON-NLS-1$ sb.append(this.module); sb.append(", "); //$NON-NLS-1$ } if (this.children != null) { sb.append("children="); //$NON-NLS-1$ sb.append(Arrays.toString(this.children)); sb.append(", "); //$NON-NLS-1$ } if (this.nonJavaResources != null) { sb.append("nonJavaResources="); //$NON-NLS-1$ sb.append(Arrays.toString(this.nonJavaResources)); } sb.append("]"); //$NON-NLS-1$ return sb.toString(); } public IModuleDescription getModule() { return this.module; }
Sets whether the structure of this element known
See Also:
  • isStructureKnown.isStructureKnown()
/** * Sets whether the structure of this element known * @see IJavaElement#isStructureKnown() */
public void setIsStructureKnown(boolean newIsStructureKnown) { this.isStructureKnown = newIsStructureKnown; }
Sets the nonJavaResources
/** * Sets the nonJavaResources */
void setNonJavaResources(Object[] resources) { this.nonJavaResources = resources; } }