X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMInitializer.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMInitializer.java new file mode 100644 index 0000000..314ee35 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMInitializer.java @@ -0,0 +1,229 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.core.jdom; + +import net.sourceforge.phpdt.core.IJavaElement; +import net.sourceforge.phpdt.core.IType; +import net.sourceforge.phpdt.core.jdom.IDOMInitializer; +import net.sourceforge.phpdt.core.jdom.IDOMNode; +import net.sourceforge.phpdt.internal.compiler.util.Util; +import net.sourceforge.phpdt.internal.core.util.CharArrayBuffer; +import net.sourceforge.phpdt.internal.core.util.CharArrayOps; + +/** + * DOMInitializer provides an implementation of IDOMInitializer. + * + * @see IDOMInitializer + * @see DOMNode + */ +class DOMInitializer extends DOMMember implements IDOMInitializer { + + /** + * The contents of the initializer's body when the + * body has been altered from the contents in the + * document, otherwise null. + */ + protected String fBody; + + /** + * The original inclusive source range of the + * body in the document. + */ + protected int[] fBodyRange; + +/** + * Constructs an empty initializer node. + */ +DOMInitializer() { + +} +/** + * Creates a new detailed INITIALIZER 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 commentRange - a two element array describing the comments that precede + * the member declaration. The first matches the start of this node's + * sourceRange, and the second is the new-line or first non-whitespace + * character following the last comment. If no comments are present, + * this array contains two -1's. + * @param flags - an integer representing the modifiers for this member. The + * integer can be analyzed with org.eclipse.jdt.core.Flags + * @param modifierRange - a two element array describing the location of + * modifiers for this member within its source range. The first integer + * is the first character of the first modifier for this member, and + * the second integer is the last whitespace character preceeding the + * next part of this member declaration. If there are no modifiers present + * in this node's source code (that is, package default visibility), this array + * contains two -1's. + * @param bodyStartPosition - the position of the open brace of the body + * of this initialzer. + */ +DOMInitializer(char[] document, int[] sourceRange, int[] commentRange, int flags, int[] modifierRange, int bodyStartPosition) { + super(document, sourceRange, null, new int[]{-1, -1}, commentRange, flags, modifierRange); + fBodyRange= new int[2]; + fBodyRange[0]= bodyStartPosition; + fBodyRange[1]= sourceRange[1]; + setHasBody(true); + setMask(MASK_DETAILED_SOURCE_INDEXES, true); +} +/** + * Creates a new simple INITIALIZER 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 flags - an integer representing the modifiers for this member. The + * integer can be analyzed with org.eclipse.jdt.core.Flags + */ +DOMInitializer(char[] document, int[] sourceRange, int flags) { + this(document, sourceRange, new int[] {-1, -1}, flags, new int[] {-1, -1}, -1); + setMask(MASK_DETAILED_SOURCE_INDEXES, false); + +} +/** + * @see DOMMember#appendMemberBodyContents(CharArrayBuffer) + */ +protected void appendMemberBodyContents(CharArrayBuffer buffer) { + if (hasBody()) { + buffer + .append(getBody()) + .append(fDocument, fBodyRange[1] + 1, fSourceRange[1] - fBodyRange[1]); + } else { + buffer.append("{}").append(Util.LINE_SEPARATOR); //$NON-NLS-1$ + } +} +/** + * @see DOMMember#appendMemberDeclarationContents(CharArrayBuffer) + */ +protected void appendMemberDeclarationContents(CharArrayBuffer buffer) {} +/** + * @see DOMNode#appendSimpleContents(CharArrayBuffer) + */ +protected void appendSimpleContents(CharArrayBuffer buffer) { + // append eveything before my name + buffer.append(fDocument, fSourceRange[0], fNameRange[0] - fSourceRange[0]); + // append my name + buffer.append(fName); + // append everything after my name + buffer.append(fDocument, fNameRange[1] + 1, fSourceRange[1] - fNameRange[1]); +} +/** + * @see IDOMInitializer#getBody() + */ +public String getBody() { + becomeDetailed(); + if (hasBody()) { + if (fBody != null) { + return fBody; + } else { + return CharArrayOps.substring(fDocument, fBodyRange[0], fBodyRange[1] + 1 - fBodyRange[0]); + } + } else { + return null; + } +} +/** + * @see DOMNode#getDetailedNode() + */ +//protected DOMNode getDetailedNode() { +// return (DOMNode)getFactory().createInitializer(getContents()); +//} +/** + * @see IDOMNode#getJavaElement + */ +public IJavaElement getJavaElement(IJavaElement parent) throws IllegalArgumentException { +// if (parent.getElementType() == IJavaElement.TYPE) { +// int count = 1; +// IDOMNode previousNode = getPreviousNode(); +// while (previousNode != null) { +// if (previousNode instanceof DOMInitializer) { +// count++; +// } +// previousNode = previousNode.getPreviousNode(); +// } +// return ((IType) parent).getInitializer(count); +// } else { + throw new IllegalArgumentException(Util.bind("element.illegalParent")); //$NON-NLS-1$ +// } +} +/** + * @see DOMMember#getMemberDeclarationStartPosition() + */ +protected int getMemberDeclarationStartPosition() { + return fBodyRange[0]; +} +/** + * @see IDOMNode#getNodeType() + */ +public int getNodeType() { + return IDOMNode.INITIALIZER; +} +/** + * @see IDOMNode#isSigantureEqual(IDOMNode). + * + *

This method always answers false since an initializer + * does not have a signature. + */ +public boolean isSignatureEqual(IDOMNode node) { + return false; +} +/** + * @see DOMNode + */ +protected DOMNode newDOMNode() { + return new DOMInitializer(); +} +/** + * Offsets all the source indexes in this node by the given amount. + */ +protected void offset(int offset) { + super.offset(offset); + offsetRange(fBodyRange, offset); +} +/** + * @see IDOMInitializer#setBody(char[]) + */ +public void setBody(String body) { + becomeDetailed(); + fBody= body; + setHasBody(body != null); + fragment(); +} +/** + * @see IDOMInitializer#setName(String) + */ +public void setName(String name) {} +/** + * @see DOMNode#shareContents(DOMNode) + */ +protected void shareContents(DOMNode node) { + super.shareContents(node); + DOMInitializer init= (DOMInitializer)node; + fBody= init.fBody; + fBodyRange= rangeCopy(init.fBodyRange); +} +/** + * @see IDOMNode#toString() + */ +public String toString() { + return "INITIALIZER"; //$NON-NLS-1$ +} +}