X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMMethod.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMMethod.java index bb30eb3..bb5a2e0 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMMethod.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMMethod.java @@ -21,698 +21,783 @@ import net.sourceforge.phpdt.internal.core.util.CharArrayOps; /** * DOMMethod provides an implementation of IDOMMethod. - * + * * @see IDOMMethod * @see DOMNode */ - + class DOMMethod extends DOMMember implements IDOMMethod { /** - * Contains the return type of the method when the - * return type has been altered from the contents - * in the document, otherwise null. + * Contains the return type of the method when the return type has been + * altered from the contents in the document, otherwise null. */ protected String fReturnType; /** - * The original inclusive source range of the - * method's return type in the document, or -1's - * if no return type is present in the document. - * If the return type of this method is qualified with - * '[]' following the parameter list, this array has - * four entries. In this case, the last two entries - * of the array are the inclusive source range of - * the array qualifiers. + * The original inclusive source range of the method's return type in the + * document, or -1's if no return type is present in the document. If the + * return type of this method is qualified with '[]' following the parameter + * list, this array has four entries. In this case, the last two entries of + * the array are the inclusive source range of the array qualifiers. */ - protected int[] fReturnTypeRange; + protected int[] fReturnTypeRange; /** - * Contains the textual representation of the method's - * parameter list, including open and closing parentheses - * when the parameters had been altered from the contents - * in the document, otherwise null. + * Contains the textual representation of the method's parameter list, + * including open and closing parentheses when the parameters had been + * altered from the contents in the document, otherwise null. */ protected char[] fParameterList; /** - * The original inclusive source range of the - * method's parameter list in the document. + * The original inclusive source range of the method's parameter list in the + * document. */ - protected int[] fParameterRange; + protected int[] fParameterRange; /** - * Contains the textual representation of the method's - * exception list when the exceptions had been altered - * from the contents in the document, otherwise - * null. The exception list is a comment - * delimited list of exceptions, not including the "throws" - * keyword. + * Contains the textual representation of the method's exception list when + * the exceptions had been altered from the contents in the document, + * otherwise null. The exception list is a comment delimited + * list of exceptions, not including the "throws" keyword. */ protected char[] fExceptionList; /** - * The original inclusive source range of the - * method's exception list in the document. + * The original inclusive source range of the method's exception list in the + * document. */ - protected int[] fExceptionRange; - + protected int[] fExceptionRange; + /** - * Contains the method's body when the body has - * been altered from the contents in the document, - * otherwise null. The body includes everything - * between and including the enclosing braces, and trailing - * whitespace. + * Contains the method's body when the body has been altered from the + * contents in the document, otherwise null. The body + * includes everything between and including the enclosing braces, and + * trailing whitespace. */ protected String fBody; /** - * The original inclusive source range of the - * method's body. + * The original inclusive source range of the method's body. */ - protected int[] fBodyRange; - + protected int[] fBodyRange; /** - * Names of parameters in the method parameter list, - * or null if the method has no parameters. + * Names of parameters in the method parameter list, or null + * if the method has no parameters. */ protected String[] fParameterNames; /** - * Types of parameters in the method parameter list, - * or null if the method has no parameters. + * Types of parameters in the method parameter list, or null + * if the method has no parameters. */ protected String[] fParameterTypes; /** - * The exceptions the method throws, or null - * if the method throws no exceptions. + * The exceptions the method throws, or null if the method + * throws no exceptions. */ protected String[] fExceptions; - -/** - * Constructs an empty method node. - */ -DOMMethod() { + /** + * Constructs an empty method node. + */ + DOMMethod() { -} -/** - * Creates a new detailed METHOD 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 - * null 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. - * @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 net.sourceforge.phpdt.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 isConstructor - true if the method is a contructor, otherwise false - * @param returnType - the normalized return type of this method - * @param returnTypeRange - a two element array describing the location of the - * return type within the method's source range. The first integer is is - * the position of the first character in the return type, and the second - * integer is the position of the last character in the return type. - * For constructors, the contents of this array are -1's. - * If the return type of this method is qualified with '[]' following the - * parameter list, this array has four entries. In this case, the last - * two entries of the array are the inclusive source range of the array - * qualifiers. - * @param parameterTypes - an array of parameter types in the method declaration - * or null if the method has no parameters - * @param parameterNames - an array of parameter names in the method declaration - * or null if the method has no parameters - * @param parameterRange - a two element array describing the location of the - * parameter list in the method. The first integer is the location of the - * open parenthesis and the second integer is the location of the closing - * parenthesis. - * @param exceptions - an array of the names of exceptions thrown by this method - * or null if the method throws no exceptions - * @param exceptionRange - a two element array describing the location of the - * exception list in the method declaration. The first integer is the position - * of the first character in the first exception the method throws, and the - * second integer is the position of the last character of the last exception - * this method throws. - * @param bodyRange - a two element array describing the location of the method's body. - * The first integer is the first character following the method's - * parameter list, or exception list (if present). The second integer is the location - * of the last character in the method's source range. - */ -DOMMethod(char[] document, int[] sourceRange, String name, int[] nameRange, int[] commentRange, int flags, int[] modifierRange, boolean isConstructor, String returnType, int[] returnTypeRange, String[] parameterTypes, String[] parameterNames, int[] parameterRange, String[] exceptions, int[] exceptionRange, int[] bodyRange) { - super(document, sourceRange, name, nameRange, commentRange, flags, modifierRange); - - setMask(MASK_IS_CONSTRUCTOR, isConstructor); - fReturnType= returnType; - fReturnTypeRange= returnTypeRange; - fParameterTypes= parameterTypes; - fParameterNames= parameterNames; - fParameterRange= parameterRange; - fExceptionRange= exceptionRange; - fExceptions= exceptions; - setHasBody(true); - fBodyRange= bodyRange; - setMask(MASK_DETAILED_SOURCE_INDEXES, true); - -} -/** - * Creates a new simple METHOD 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 - * null 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. - * @param flags - an integer representing the modifiers for this member. The - * integer can be analyzed with net.sourceforge.phpdt.core.Flags - * @param isConstructor - true if the method is a contructor, otherwise false - * @param returnType - the normalized return type of this method - * @param parameterTypes - an array of parameter types in the method declaration - * or null if the method has no parameters - * @param parameterNames - an array of parameter names in the method declaration - * or null if the method has no parameters - * @param exceptions - an array of the names of exceptions thrown by this method - * or null if the method throws no exceptions - */ -DOMMethod(char[] document, int[] sourceRange, String name, int[] nameRange, int flags, boolean isConstructor, String returnType, String[] parameterTypes, String[] parameterNames, String[] exceptions) { - this(document, sourceRange, name, nameRange, new int[] {-1, -1}, flags, new int[] {-1, -1}, isConstructor, returnType, new int[] {-1, -1}, parameterTypes, parameterNames, new int[] {-1, -1}, exceptions, new int[] {-1, -1}, new int[] {-1, -1}); - setMask(MASK_DETAILED_SOURCE_INDEXES, false); -} -/** - * @see IDOMMethod#addException(String) - */ -public void addException(String name) throws IllegalArgumentException { - if (name == null) { - throw new IllegalArgumentException(Util.bind("dom.nullExceptionType")); //$NON-NLS-1$ } - if (fExceptions == null) { - fExceptions= new String[1]; - fExceptions[0]= name; - } else { - fExceptions= appendString(fExceptions, name); + + /** + * Creates a new detailed METHOD 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 + * null 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. + * @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 net.sourceforge.phpdt.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 isConstructor - + * true if the method is a contructor, otherwise false + * @param returnType - + * the normalized return type of this method + * @param returnTypeRange - + * a two element array describing the location of the return type + * within the method's source range. The first integer is is the + * position of the first character in the return type, and the + * second integer is the position of the last character in the + * return type. For constructors, the contents of this array are + * -1's. If the return type of this method is qualified with '[]' + * following the parameter list, this array has four entries. In + * this case, the last two entries of the array are the inclusive + * source range of the array qualifiers. + * @param parameterTypes - + * an array of parameter types in the method declaration or + * null if the method has no parameters + * @param parameterNames - + * an array of parameter names in the method declaration or + * null if the method has no parameters + * @param parameterRange - + * a two element array describing the location of the parameter + * list in the method. The first integer is the location of the + * open parenthesis and the second integer is the location of the + * closing parenthesis. + * @param exceptions - + * an array of the names of exceptions thrown by this method or + * null if the method throws no exceptions + * @param exceptionRange - + * a two element array describing the location of the exception + * list in the method declaration. The first integer is the + * position of the first character in the first exception the + * method throws, and the second integer is the position of the + * last character of the last exception this method throws. + * @param bodyRange - + * a two element array describing the location of the method's + * body. The first integer is the first character following the + * method's parameter list, or exception list (if present). The + * second integer is the location of the last character in the + * method's source range. + */ + DOMMethod(char[] document, int[] sourceRange, String name, int[] nameRange, + int[] commentRange, int flags, int[] modifierRange, + boolean isConstructor, String returnType, int[] returnTypeRange, + String[] parameterTypes, String[] parameterNames, + int[] parameterRange, String[] exceptions, int[] exceptionRange, + int[] bodyRange) { + super(document, sourceRange, name, nameRange, commentRange, flags, + modifierRange); + + setMask(MASK_IS_CONSTRUCTOR, isConstructor); + fReturnType = returnType; + fReturnTypeRange = returnTypeRange; + fParameterTypes = parameterTypes; + fParameterNames = parameterNames; + fParameterRange = parameterRange; + fExceptionRange = exceptionRange; + fExceptions = exceptions; + setHasBody(true); + fBodyRange = bodyRange; + setMask(MASK_DETAILED_SOURCE_INDEXES, true); + } - setExceptions(fExceptions); -} -/** - * @see IDOMMethod#addParameter(String, String) - */ -public void addParameter(String type, String name) throws IllegalArgumentException { - if (type == null) { - throw new IllegalArgumentException(Util.bind("dom.nullTypeParameter")); //$NON-NLS-1$ - } - if (name == null) { - throw new IllegalArgumentException(Util.bind("dom.nullNameParameter")); //$NON-NLS-1$ - } - if (fParameterNames == null) { - fParameterNames= new String[1]; - fParameterNames[0]= name; - } else { - fParameterNames= appendString(fParameterNames, name); - } - if (fParameterTypes == null) { - fParameterTypes= new String[1]; - fParameterTypes[0]= type; - } else { - fParameterTypes= appendString(fParameterTypes, type); - } - setParameters(fParameterTypes, fParameterNames); -} -/** - * @see DOMMember#appendMemberBodyContents(CharArrayBuffer) - */ -protected void appendMemberBodyContents(CharArrayBuffer buffer) { - if (fBody != null) { - buffer.append(fBody); - } else { - buffer.append(fDocument, fBodyRange[0], fBodyRange[1] + 1 - fBodyRange[0]); + + /** + * Creates a new simple METHOD 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 + * null 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. + * @param flags - + * an integer representing the modifiers for this member. The + * integer can be analyzed with net.sourceforge.phpdt.core.Flags + * @param isConstructor - + * true if the method is a contructor, otherwise false + * @param returnType - + * the normalized return type of this method + * @param parameterTypes - + * an array of parameter types in the method declaration or + * null if the method has no parameters + * @param parameterNames - + * an array of parameter names in the method declaration or + * null if the method has no parameters + * @param exceptions - + * an array of the names of exceptions thrown by this method or + * null if the method throws no exceptions + */ + DOMMethod(char[] document, int[] sourceRange, String name, int[] nameRange, + int flags, boolean isConstructor, String returnType, + String[] parameterTypes, String[] parameterNames, + String[] exceptions) { + this(document, sourceRange, name, nameRange, new int[] { -1, -1 }, + flags, new int[] { -1, -1 }, isConstructor, returnType, + new int[] { -1, -1 }, parameterTypes, parameterNames, + new int[] { -1, -1 }, exceptions, new int[] { -1, -1 }, + new int[] { -1, -1 }); + setMask(MASK_DETAILED_SOURCE_INDEXES, false); } -} -/** - * @see DOMMember#appendMemberDeclarationContents(CharArrayBuffer) - */ -protected void appendMemberDeclarationContents(CharArrayBuffer buffer) { - - if (isConstructor()) { - buffer - .append(getConstructorName()) - .append(fDocument, fNameRange[1] + 1, fParameterRange[0] - fNameRange[1] - 1); - } else { - buffer.append(getReturnTypeContents()); - if (fReturnTypeRange[0] >= 0) { - buffer.append(fDocument, fReturnTypeRange[1] + 1, fNameRange[0] - fReturnTypeRange[1] - 1); + + /** + * @see IDOMMethod#addException(String) + */ + public void addException(String name) throws IllegalArgumentException { + if (name == null) { + throw new IllegalArgumentException(Util + .bind("dom.nullExceptionType")); //$NON-NLS-1$ + } + if (fExceptions == null) { + fExceptions = new String[1]; + fExceptions[0] = name; + } else { + fExceptions = appendString(fExceptions, name); + } + setExceptions(fExceptions); + } + + /** + * @see IDOMMethod#addParameter(String, String) + */ + public void addParameter(String type, String name) + throws IllegalArgumentException { + if (type == null) { + throw new IllegalArgumentException(Util + .bind("dom.nullTypeParameter")); //$NON-NLS-1$ + } + if (name == null) { + throw new IllegalArgumentException(Util + .bind("dom.nullNameParameter")); //$NON-NLS-1$ + } + if (fParameterNames == null) { + fParameterNames = new String[1]; + fParameterNames[0] = name; } else { - buffer.append(' '); + fParameterNames = appendString(fParameterNames, name); } - buffer - .append(getNameContents()) - .append(fDocument, fNameRange[1] + 1, fParameterRange[0] - fNameRange[1] - 1); - } - if (fParameterList != null) { - buffer.append(fParameterList); - } else { - buffer.append(fDocument, fParameterRange[0], fParameterRange[1] + 1 - fParameterRange[0]); - } - int start; - if (hasTrailingArrayQualifier() && isReturnTypeAltered()) { - start= fReturnTypeRange[3] + 1; - } else { - start= fParameterRange[1] + 1; - } - if (fExceptions != null) { - // add 'throws' keyword - if (fExceptionRange[0] >= 0) { - buffer.append(fDocument, start, fExceptionRange[0] - start); + if (fParameterTypes == null) { + fParameterTypes = new String[1]; + fParameterTypes[0] = type; } else { - buffer.append(" throws "); //$NON-NLS-1$ + fParameterTypes = appendString(fParameterTypes, type); } - // add exception list - if (fExceptionList != null) { - buffer.append(fExceptionList); - // add space before body - if (fExceptionRange[0] >= 0) { - buffer.append(fDocument, fExceptionRange[1] + 1, fBodyRange[0] - fExceptionRange[1] - 1); + setParameters(fParameterTypes, fParameterNames); + } + + /** + * @see DOMMember#appendMemberBodyContents(CharArrayBuffer) + */ + protected void appendMemberBodyContents(CharArrayBuffer buffer) { + if (fBody != null) { + buffer.append(fBody); + } else { + buffer.append(fDocument, fBodyRange[0], fBodyRange[1] + 1 + - fBodyRange[0]); + } + } + + /** + * @see DOMMember#appendMemberDeclarationContents(CharArrayBuffer) + */ + protected void appendMemberDeclarationContents(CharArrayBuffer buffer) { + + if (isConstructor()) { + buffer.append(getConstructorName()).append(fDocument, + fNameRange[1] + 1, fParameterRange[0] - fNameRange[1] - 1); + } else { + buffer.append(getReturnTypeContents()); + if (fReturnTypeRange[0] >= 0) { + buffer.append(fDocument, fReturnTypeRange[1] + 1, fNameRange[0] + - fReturnTypeRange[1] - 1); } else { - buffer.append(fDocument, fParameterRange[1] + 1, fBodyRange[0] - fParameterRange[1] - 1); + buffer.append(' '); } + buffer.append(getNameContents()).append(fDocument, + fNameRange[1] + 1, fParameterRange[0] - fNameRange[1] - 1); + } + if (fParameterList != null) { + buffer.append(fParameterList); } else { - // add list and space before body - buffer.append(fDocument, fExceptionRange[0], fBodyRange[0] - fExceptionRange[0]); + buffer.append(fDocument, fParameterRange[0], fParameterRange[1] + 1 + - fParameterRange[0]); } - } else { - // add space before body - if (fExceptionRange[0] >= 0) { - buffer.append(fDocument, fExceptionRange[1] + 1, fBodyRange[0] - fExceptionRange[1] - 1); + int start; + if (hasTrailingArrayQualifier() && isReturnTypeAltered()) { + start = fReturnTypeRange[3] + 1; } else { - buffer.append(fDocument, start, fBodyRange[0] - start); + start = fParameterRange[1] + 1; } - } - -} -/** - * @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 - if (isConstructor()) { - buffer.append(getConstructorName()); - } else { - buffer.append(fName); - } - // append everything after my name - buffer.append(fDocument, fNameRange[1] + 1, fSourceRange[1] - fNameRange[1]); -} -/** - * @see IDOMMethod#getBody() - */ -public String getBody() { - becomeDetailed(); - if (hasBody()) { - if (fBody != null) { - return fBody; + if (fExceptions != null) { + // add 'throws' keyword + if (fExceptionRange[0] >= 0) { + buffer.append(fDocument, start, fExceptionRange[0] - start); + } else { + buffer.append(" throws "); //$NON-NLS-1$ + } + // add exception list + if (fExceptionList != null) { + buffer.append(fExceptionList); + // add space before body + if (fExceptionRange[0] >= 0) { + buffer.append(fDocument, fExceptionRange[1] + 1, + fBodyRange[0] - fExceptionRange[1] - 1); + } else { + buffer.append(fDocument, fParameterRange[1] + 1, + fBodyRange[0] - fParameterRange[1] - 1); + } + } else { + // add list and space before body + buffer.append(fDocument, fExceptionRange[0], fBodyRange[0] + - fExceptionRange[0]); + } } else { - return CharArrayOps.substring(fDocument, fBodyRange[0], fBodyRange[1] + 1 - fBodyRange[0]); + // add space before body + if (fExceptionRange[0] >= 0) { + buffer.append(fDocument, fExceptionRange[1] + 1, fBodyRange[0] + - fExceptionRange[1] - 1); + } else { + buffer.append(fDocument, start, fBodyRange[0] - start); + } } - } else { - return null; + } -} -/** - * Returns the simple name of the enclsoing type for this constructor. - * If the constuctor is not currently enclosed in a type, the original - * name of the constructor as found in the documnent is returned. - */ -protected String getConstructorName() { - if (isConstructor()) { - if (getParent() != null) { - return getParent().getName(); + /** + * @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 + if (isConstructor()) { + buffer.append(getConstructorName()); } else { - // If there is no parent use the original name - return new String(getNameContents()); + buffer.append(fName); } - } else { - return null; + // append everything after my name + buffer.append(fDocument, fNameRange[1] + 1, fSourceRange[1] + - fNameRange[1]); } - -} -/** - * @see DOMNode#getDetailedNode() - */ -//protected DOMNode getDetailedNode() { -// return (DOMNode)getFactory().createMethod(getContents()); -//} -/** - * @see IDOMMethod#getExceptions() - */ -public String[] getExceptions() { - return fExceptions; -} -/** - * @see IDOMNode#getJavaElement - */ -public IJavaElement getJavaElement(IJavaElement parent) throws IllegalArgumentException { - if (parent.getElementType() == IJavaElement.TYPE) { - // translate parameter types to signatures - String[] sigs= null; - if (fParameterTypes != null) { - sigs= new String[fParameterTypes.length]; - int i; - for (i= 0; i < fParameterTypes.length; i++) { - sigs[i]= Signature.createTypeSignature(fParameterTypes[i].toCharArray(), false); + + /** + * @see IDOMMethod#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; } - String name= null; + } + + /** + * Returns the simple name of the enclsoing type for this constructor. If + * the constuctor is not currently enclosed in a type, the original name of + * the constructor as found in the documnent is returned. + */ + protected String getConstructorName() { + if (isConstructor()) { - name= getConstructorName(); + if (getParent() != null) { + return getParent().getName(); + } else { + // If there is no parent use the original name + return new String(getNameContents()); + } } else { - name= getName(); + return null; } - return ((IType)parent).getMethod(name, sigs); - } else { - throw new IllegalArgumentException(Util.bind("element.illegalParent")); //$NON-NLS-1$ + } -} -/** - * @see DOMMember#getMemberDeclarationStartPosition() - */ -protected int getMemberDeclarationStartPosition() { - if (fReturnTypeRange[0] >= 0) { - return fReturnTypeRange[0]; - } else { - return fNameRange[0]; + + /** + * @see DOMNode#getDetailedNode() + */ + // protected DOMNode getDetailedNode() { + // return (DOMNode)getFactory().createMethod(getContents()); + // } + /** + * @see IDOMMethod#getExceptions() + */ + public String[] getExceptions() { + return fExceptions; } -} -/** - * @see IDOMNode#getName() - */ -public String getName() { - if (isConstructor()) { - return null; - } else { - return super.getName(); + + /** + * @see IDOMNode#getJavaElement + */ + public IJavaElement getJavaElement(IJavaElement parent) + throws IllegalArgumentException { + if (parent.getElementType() == IJavaElement.TYPE) { + // translate parameter types to signatures + String[] sigs = null; + if (fParameterTypes != null) { + sigs = new String[fParameterTypes.length]; + int i; + for (i = 0; i < fParameterTypes.length; i++) { + sigs[i] = Signature.createTypeSignature(fParameterTypes[i] + .toCharArray(), false); + } + } + String name = null; + if (isConstructor()) { + name = getConstructorName(); + } else { + name = getName(); + } + return ((IType) parent).getMethod(name, sigs); + } else { + throw new IllegalArgumentException(Util + .bind("element.illegalParent")); //$NON-NLS-1$ + } } -} -/** - * @see IDOMNode#getNodeType() - */ -public int getNodeType() { - return IDOMNode.METHOD; -} -/** - * @see IDOMMethod#getParameterNames() - */ -public String[] getParameterNames() { - return fParameterNames; -} -/** - * @see IDOMMethod#getParameterTypes() - */ -public String[] getParameterTypes() { - return fParameterTypes; -} -/** - * @see IDOMMethod#getReturnType() - */ -public String getReturnType() { - if (isConstructor()) { - return null; - } else { - return fReturnType; + + /** + * @see DOMMember#getMemberDeclarationStartPosition() + */ + protected int getMemberDeclarationStartPosition() { + if (fReturnTypeRange[0] >= 0) { + return fReturnTypeRange[0]; + } else { + return fNameRange[0]; + } } -} -/** - * Returns the source code to be used for this method's return type - */ -protected char[] getReturnTypeContents() { - if (isConstructor()) { - return null; - } else { - if (isReturnTypeAltered()) { - return fReturnType.toCharArray(); + + /** + * @see IDOMNode#getName() + */ + public String getName() { + if (isConstructor()) { + return null; } else { - return CharArrayOps.subarray(fDocument, fReturnTypeRange[0], fReturnTypeRange[1] + 1 - fReturnTypeRange[0]); + return super.getName(); } + } + /** + * @see IDOMNode#getNodeType() + */ + public int getNodeType() { + return IDOMNode.METHOD; } -} -/** - * Returns true if this method's return type has - * array qualifiers ('[]') following the parameter list. - */ -protected boolean hasTrailingArrayQualifier() { - return fReturnTypeRange.length > 2; -} -/** - * @see IDOMMethod#isConstructor() - */ -public boolean isConstructor() { - return getMask(MASK_IS_CONSTRUCTOR); -} -/** - * Returns true if this method's return type has been altered - * from the original document contents. - */ -protected boolean isReturnTypeAltered() { - return getMask(MASK_RETURN_TYPE_ALTERED); -} -/** - * @see IDOMNode#isSigantureEqual(IDOMNode). - * - *

Two methods have equal signatures if there names are the same - * and their parameter types are the same. - */ -public boolean isSignatureEqual(IDOMNode node) { - boolean ok= node.getNodeType() == getNodeType(); - if (ok) { - IDOMMethod method= (IDOMMethod)node; - ok = (isConstructor() && method.isConstructor()) || - (!isConstructor() && !method.isConstructor()); - if (ok && !isConstructor()) { - ok= getName().equals(method.getName()); - } - if (!ok) { - return false; + + /** + * @see IDOMMethod#getParameterNames() + */ + public String[] getParameterNames() { + return fParameterNames; + } + + /** + * @see IDOMMethod#getParameterTypes() + */ + public String[] getParameterTypes() { + return fParameterTypes; + } + + /** + * @see IDOMMethod#getReturnType() + */ + public String getReturnType() { + if (isConstructor()) { + return null; + } else { + return fReturnType; } - - String[] types= method.getParameterTypes(); - if (fParameterTypes == null || fParameterTypes.length == 0) { - // this method has no parameters - if (types == null || types.length == 0) { - // the other method has no parameters either - return true; - } + } + + /** + * Returns the source code to be used for this method's return type + */ + protected char[] getReturnTypeContents() { + if (isConstructor()) { + return null; } else { - // this method has parameters - if (types == null || types.length == 0) { - // the other method has no parameters - return false; + if (isReturnTypeAltered()) { + return fReturnType.toCharArray(); + } else { + return CharArrayOps.subarray(fDocument, fReturnTypeRange[0], + fReturnTypeRange[1] + 1 - fReturnTypeRange[0]); + } + + } + } + + /** + * Returns true if this method's return type has array qualifiers ('[]') + * following the parameter list. + */ + protected boolean hasTrailingArrayQualifier() { + return fReturnTypeRange.length > 2; + } + + /** + * @see IDOMMethod#isConstructor() + */ + public boolean isConstructor() { + return getMask(MASK_IS_CONSTRUCTOR); + } + + /** + * Returns true if this method's return type has been altered from the + * original document contents. + */ + protected boolean isReturnTypeAltered() { + return getMask(MASK_RETURN_TYPE_ALTERED); + } + + /** + * @see IDOMNode#isSigantureEqual(IDOMNode). + * + *

+ * Two methods have equal signatures if there names are the same and their + * parameter types are the same. + */ + public boolean isSignatureEqual(IDOMNode node) { + boolean ok = node.getNodeType() == getNodeType(); + if (ok) { + IDOMMethod method = (IDOMMethod) node; + ok = (isConstructor() && method.isConstructor()) + || (!isConstructor() && !method.isConstructor()); + if (ok && !isConstructor()) { + ok = getName().equals(method.getName()); } - if (fParameterTypes.length != types.length) { - // the methods have a different number of parameters + if (!ok) { return false; } - int i; - for (i= 0; i < types.length; i++) { - if (!fParameterTypes[i].equals(types[i])) { + + String[] types = method.getParameterTypes(); + if (fParameterTypes == null || fParameterTypes.length == 0) { + // this method has no parameters + if (types == null || types.length == 0) { + // the other method has no parameters either + return true; + } + } else { + // this method has parameters + if (types == null || types.length == 0) { + // the other method has no parameters return false; } + if (fParameterTypes.length != types.length) { + // the methods have a different number of parameters + return false; + } + int i; + for (i = 0; i < types.length; i++) { + if (!fParameterTypes[i].equals(types[i])) { + return false; + } + } + return true; } - return true; } + return false; + } - return false; - -} -/** - * @see DOMNode - */ -protected DOMNode newDOMNode() { - return new DOMMethod(); -} -/** - * Offsets all the source indexes in this node by the given amount. - */ -protected void offset(int offset) { - super.offset(offset); - offsetRange(fBodyRange, offset); - offsetRange(fExceptionRange, offset); - offsetRange(fParameterRange, offset); - offsetRange(fReturnTypeRange, offset); -} -/** - * @see IDOMMethod#setBody - */ -public void setBody(String body) { - becomeDetailed(); - fragment(); - fBody= body; - setHasBody(body != null); - if (!hasBody()) { - fBody= ";"+Util.LINE_SEPARATOR; //$NON-NLS-1$ + + /** + * @see DOMNode + */ + protected DOMNode newDOMNode() { + return new DOMMethod(); } -} -/** - * Sets the end of the body range - */ -void setBodyRangeEnd(int end) { - fBodyRange[1] = end; -} -/** - * @see IDOMMethod#setConstructor(boolean) - */ -public void setConstructor(boolean b) { - becomeDetailed(); - setMask(MASK_IS_CONSTRUCTOR, b); - fragment(); -} -/** - * @see IDOMMethod#setExceptions(char[][]) - */ -public void setExceptions(String[] names) { - becomeDetailed(); - if (names == null || names.length == 0) { - fExceptions= null; - } else { - fExceptions= names; - CharArrayBuffer buffer = new CharArrayBuffer(); - char[] comma = new char[] {',', ' '}; - for (int i = 0, length = names.length; i < length; i++) { - if (i > 0) - buffer.append(comma); - buffer.append(names[i]); + + /** + * Offsets all the source indexes in this node by the given amount. + */ + protected void offset(int offset) { + super.offset(offset); + offsetRange(fBodyRange, offset); + offsetRange(fExceptionRange, offset); + offsetRange(fParameterRange, offset); + offsetRange(fReturnTypeRange, offset); + } + + /** + * @see IDOMMethod#setBody + */ + public void setBody(String body) { + becomeDetailed(); + fragment(); + fBody = body; + setHasBody(body != null); + if (!hasBody()) { + fBody = ";" + Util.LINE_SEPARATOR; //$NON-NLS-1$ } - fExceptionList= buffer.getContents(); } - fragment(); -} -/** - * @see IDOMMethod#setName - */ -public void setName(String name) { - if (name == null) { - throw new IllegalArgumentException(Util.bind("element.nullName")); //$NON-NLS-1$ - } else { - super.setName(name); + + /** + * Sets the end of the body range + */ + void setBodyRangeEnd(int end) { + fBodyRange[1] = end; } -} -/** - * @see IDOMMethod#setParameters(char[][], char[][]) - */ -public void setParameters(String[] types, String[] names) throws IllegalArgumentException { - becomeDetailed(); - if (types== null || names == null) { - if (types == null && names == null) { - fParameterTypes= null; - fParameterNames= null; - fParameterList= new char[] {'(',')'}; + + /** + * @see IDOMMethod#setConstructor(boolean) + */ + public void setConstructor(boolean b) { + becomeDetailed(); + setMask(MASK_IS_CONSTRUCTOR, b); + fragment(); + } + + /** + * @see IDOMMethod#setExceptions(char[][]) + */ + public void setExceptions(String[] names) { + becomeDetailed(); + if (names == null || names.length == 0) { + fExceptions = null; + } else { + fExceptions = names; + CharArrayBuffer buffer = new CharArrayBuffer(); + char[] comma = new char[] { ',', ' ' }; + for (int i = 0, length = names.length; i < length; i++) { + if (i > 0) + buffer.append(comma); + buffer.append(names[i]); + } + fExceptionList = buffer.getContents(); + } + fragment(); + } + + /** + * @see IDOMMethod#setName + */ + public void setName(String name) { + if (name == null) { + throw new IllegalArgumentException(Util.bind("element.nullName")); //$NON-NLS-1$ } else { - throw new IllegalArgumentException(Util.bind("dom.mismatchArgNamesAndTypes")); //$NON-NLS-1$ + super.setName(name); } - } else if (names.length != types.length) { - throw new IllegalArgumentException(Util.bind("dom.mismatchArgNamesAndTypes")); //$NON-NLS-1$ - } else if (names.length == 0) { - setParameters(null, null); - } else { - fParameterNames= names; - fParameterTypes= types; - CharArrayBuffer parametersBuffer = new CharArrayBuffer(); - parametersBuffer.append("("); //$NON-NLS-1$ - char[] comma = new char[] {',', ' '}; - for (int i = 0; i < names.length; i++) { - if (i > 0) { - parametersBuffer.append(comma); + } + + /** + * @see IDOMMethod#setParameters(char[][], char[][]) + */ + public void setParameters(String[] types, String[] names) + throws IllegalArgumentException { + becomeDetailed(); + if (types == null || names == null) { + if (types == null && names == null) { + fParameterTypes = null; + fParameterNames = null; + fParameterList = new char[] { '(', ')' }; + } else { + throw new IllegalArgumentException(Util + .bind("dom.mismatchArgNamesAndTypes")); //$NON-NLS-1$ + } + } else if (names.length != types.length) { + throw new IllegalArgumentException(Util + .bind("dom.mismatchArgNamesAndTypes")); //$NON-NLS-1$ + } else if (names.length == 0) { + setParameters(null, null); + } else { + fParameterNames = names; + fParameterTypes = types; + CharArrayBuffer parametersBuffer = new CharArrayBuffer(); + parametersBuffer.append("("); //$NON-NLS-1$ + char[] comma = new char[] { ',', ' ' }; + for (int i = 0; i < names.length; i++) { + if (i > 0) { + parametersBuffer.append(comma); + } + parametersBuffer.append(types[i]).append(' ').append(names[i]); } - parametersBuffer - .append(types[i]) - .append(' ') - .append(names[i]); + parametersBuffer.append(')'); + fParameterList = parametersBuffer.getContents(); } - parametersBuffer.append(')'); - fParameterList= parametersBuffer.getContents(); + fragment(); } - fragment(); -} -/** - * @see IDOMMethod#setReturnType(char[]) - */ -public void setReturnType(String name) throws IllegalArgumentException { - if (name == null) { - throw new IllegalArgumentException(Util.bind("dom.nullReturnType")); //$NON-NLS-1$ - } - becomeDetailed(); - fragment(); - setReturnTypeAltered(true); - fReturnType= name; -} -/** - * Sets the state of this method declaration as having - * the return type altered from the original document. - */ -protected void setReturnTypeAltered(boolean typeAltered) { - setMask(MASK_RETURN_TYPE_ALTERED, typeAltered); -} -/** - */ -protected void setSourceRangeEnd(int end) { - super.setSourceRangeEnd(end); - fBodyRange[1]= end; -} -/** - * @see DOMNode#shareContents(DOMNode) - */ -protected void shareContents(DOMNode node) { - super.shareContents(node); - DOMMethod method= (DOMMethod)node; - fBody= method.fBody; - fBodyRange= rangeCopy(method.fBodyRange); - fExceptionList= method.fExceptionList; - fExceptionRange= rangeCopy(method.fExceptionRange); - fExceptions= method.fExceptions; - fParameterList= method.fParameterList; - fParameterNames= method.fParameterNames; - fParameterRange= rangeCopy(method.fParameterRange); - fParameterTypes= method.fParameterTypes; - fReturnType= method.fReturnType; - fReturnTypeRange= rangeCopy(method.fReturnTypeRange); -} -/** - * @see IDOMNode#toString() - */ -public String toString() { - if (isConstructor()) { - return "CONSTRUCTOR"; //$NON-NLS-1$ - } else { - return "METHOD: " + getName(); //$NON-NLS-1$ + + /** + * @see IDOMMethod#setReturnType(char[]) + */ + public void setReturnType(String name) throws IllegalArgumentException { + if (name == null) { + throw new IllegalArgumentException(Util.bind("dom.nullReturnType")); //$NON-NLS-1$ + } + becomeDetailed(); + fragment(); + setReturnTypeAltered(true); + fReturnType = name; + } + + /** + * Sets the state of this method declaration as having the return type + * altered from the original document. + */ + protected void setReturnTypeAltered(boolean typeAltered) { + setMask(MASK_RETURN_TYPE_ALTERED, typeAltered); + } + + /** + */ + protected void setSourceRangeEnd(int end) { + super.setSourceRangeEnd(end); + fBodyRange[1] = end; + } + + /** + * @see DOMNode#shareContents(DOMNode) + */ + protected void shareContents(DOMNode node) { + super.shareContents(node); + DOMMethod method = (DOMMethod) node; + fBody = method.fBody; + fBodyRange = rangeCopy(method.fBodyRange); + fExceptionList = method.fExceptionList; + fExceptionRange = rangeCopy(method.fExceptionRange); + fExceptions = method.fExceptions; + fParameterList = method.fParameterList; + fParameterNames = method.fParameterNames; + fParameterRange = rangeCopy(method.fParameterRange); + fParameterTypes = method.fParameterTypes; + fReturnType = method.fReturnType; + fReturnTypeRange = rangeCopy(method.fReturnTypeRange); + } + + /** + * @see IDOMNode#toString() + */ + public String toString() { + if (isConstructor()) { + return "CONSTRUCTOR"; //$NON-NLS-1$ + } else { + return "METHOD: " + getName(); //$NON-NLS-1$ + } } -} }