package org.eclipse.jdt.internal.core.jdom; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import org.eclipse.jdt.core.ICompilationUnit; | |
import org.eclipse.jdt.core.IJavaElement; | |
import org.eclipse.jdt.core.jdom.IDOMNode; | |
import org.eclipse.jdt.core.jdom.IDOMPackage; | |
import org.eclipse.jdt.internal.core.JavaModelManager; | |
import org.eclipse.jdt.internal.core.Util; | |
import org.eclipse.jdt.internal.core.util.CharArrayBuffer; | |
/** | |
* DOMPackage provides an implementation of IDOMPackage. | |
* | |
* @see IDOMPackage | |
* @see DOMNode | |
*/ | |
class DOMPackage extends DOMNode implements IDOMPackage { | |
/** | |
* Creates an empty PACKAGE node. | |
*/ | |
DOMPackage() { | |
setMask(MASK_DETAILED_SOURCE_INDEXES, true); | |
} | |
/** | |
* Creates a new simple PACKAGE document fragment on the given range of the document. | |
* | |
* @param document - the document containing this node's original contents | |
* @param sourceRange - a two element array of integers describing the | |
* entire inclusive source range of this node within its document. | |
* Contents start on and include the character at the first position. | |
* Contents end on and include the character at the last position. | |
* An array of -1's indicates this node's contents do not exist | |
* in the document. | |
* @param name - the identifier portion of the name of this node, or | |
* <code>null</code> if this node does not have a name | |
*/ | |
DOMPackage(char[] document, int[] sourceRange, String name) { | |
super(document, sourceRange, name, new int[] {-1, -1}); | |
setMask(MASK_DETAILED_SOURCE_INDEXES, false); | |
} | |
/** | |
* Creates a new detailed PACKAGE document fragment on the given range of the document. | |
* | |
* @param document - the document containing this node's original contents | |
* @param sourceRange - a two element array of integers describing the | |
* entire inclusive source range of this node within its document. | |
* Contents start on and include the character at the first position. | |
* Contents end on and include the character at the last position. | |
* An array of -1's indicates this node's contents do not exist | |
* in the document. | |
* @param name - the identifier portion of the name of this node, or | |
* <code>null</code> if this node does not have a name | |
* @param nameRange - a two element array of integers describing the | |
* entire inclusive source range of this node's name within its document, | |
* including any array qualifiers that might immediately follow the name | |
* or -1's if this node does not have a name. | |
*/ | |
DOMPackage(char[] document, int[] sourceRange, String name, int[] nameRange) { | |
super(document, sourceRange, name, nameRange); | |
setMask(MASK_DETAILED_SOURCE_INDEXES, true); | |
} | |
/** | |
* @see DOMNode#appendFragmentedContents(CharArrayBuffer) | |
*/ | |
protected void appendFragmentedContents(CharArrayBuffer buffer) { | |
if (fNameRange[0] < 0) { | |
buffer | |
.append("package "/*nonNLS*/) | |
.append(fName) | |
.append(';') | |
.append(JavaModelManager.LINE_SEPARATOR); | |
} else { | |
buffer | |
.append(fDocument, fSourceRange[0], fNameRange[0] - fSourceRange[0]) | |
.append(fName) | |
.append(fDocument, fNameRange[1] + 1, fSourceRange[1] - fNameRange[1]); | |
} | |
} | |
/** | |
* @see IDOMNode#getContents() | |
*/ | |
public String getContents() { | |
if (fName == null) { | |
return null; | |
} else { | |
return super.getContents(); | |
} | |
} | |
/** | |
* @see DOMNode#getDetailedNode() | |
*/ | |
protected DOMNode getDetailedNode() { | |
return (DOMNode)getFactory().createPackage(getContents()); | |
} | |
/** | |
* @see IDOMNode#getJavaElement | |
*/ | |
public IJavaElement getJavaElement(IJavaElement parent) throws IllegalArgumentException { | |
if (parent.getElementType() == IJavaElement.COMPILATION_UNIT) { | |
return ((ICompilationUnit)parent).getPackageDeclaration(getName()); | |
} else { | |
throw new IllegalArgumentException(Util.bind("element.illegalParent"/*nonNLS*/)); | |
} | |
} | |
/** | |
* @see IDOMNode#getNodeType() | |
*/ | |
public int getNodeType() { | |
return IDOMNode.PACKAGE; | |
} | |
/** | |
* @see DOMNode | |
*/ | |
protected DOMNode newDOMNode() { | |
return new DOMPackage(); | |
} | |
/** | |
* @see IDOMNode#setName | |
*/ | |
public void setName(String name) { | |
becomeDetailed(); | |
super.setName(name); | |
} | |
/** | |
* @see IDOMNode#toString() | |
*/ | |
public String toString() { | |
return "PACKAGE: "/*nonNLS*/ + getName(); | |
} | |
} |