001: // Transmogrify License
002: //
003: // Copyright (c) 2001, ThoughtWorks, Inc.
004: // All rights reserved.
005: // Redistribution and use in source and binary forms, with or without
006: // modification, are permitted provided that the following conditions
007: // are met:
008: // - Redistributions of source code must retain the above copyright notice,
009: // this list of conditions and the following disclaimer.
010: // - Redistributions in binary form must reproduce the above copyright
011: // notice, this list of conditions and the following disclaimer in the
012: // documentation and/or other materials provided with the distribution.
013: // Neither the name of the ThoughtWorks, Inc. nor the names of its
014: // contributors may be used to endorse or promote products derived from this
015: // software without specific prior written permission.
016: // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
017: // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
018: // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
019: // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
020: // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
021: // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
022: // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
023: // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
024: // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
025: // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
026: // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027:
028: package com.puppycrawl.tools.checkstyle.checks.usage.transmogrify;
029:
030: import java.util.List;
031: import java.util.Vector;
032:
033: /**
034: * <code>MethodDef</code> contains all the pertinent information for
035: * a method, including return type, formal parameters, and exceptions
036: * thrown
037: *
038: * @see ClassDef
039: * @see MethodSignature
040: */
041: public class MethodDef extends DefaultScope implements IMethod {
042:
043: private IClass returnType;
044: private List exceptions;
045:
046: private List parameters;
047:
048: public MethodDef(String name, Scope parentScope, SymTabAST node) {
049: super (name, parentScope, node);
050: parameters = new Vector();
051: }
052:
053: /**
054: * Returns the <code>ClassDef</code> for the return type of this method.
055: *
056: * @return the <code>ClassDef</code> for the return type of this method
057: */
058: public IClass getType() {
059: return returnType;
060: }
061:
062: /**
063: * Sets the return type of this method.
064: *
065: * @param type the <code>ClassDef</code> for the return type
066: */
067: public void setType(IClass type) {
068: returnType = type;
069: }
070:
071: /**
072: * Adds a parameter to the collection of formal parameters
073: *
074: * @param parameter the <code>VariableDef</code> to add
075: */
076: public void addParameter(VariableDef parameter) {
077: parameters.add(parameter);
078: addDefinition(parameter);
079: }
080:
081: /**
082: * Whether this method has the same signature as the given signature.
083: *
084: * @param signature the <code>MethodSignature</code> to compare
085: *
086: * @return whether the signatures are equal
087: */
088: public boolean hasSameSignature(ISignature signature) {
089: return getSignature().equals(signature);
090: }
091:
092: /**
093: * Whether this method has a signature compatible with the given signature.
094: *
095: * @param signature the signature being compared
096: * @return whether the signatures are compatible
097: */
098: public boolean hasCompatibleSignature(ISignature signature) {
099: return signature.isCompatibleWith(getSignature());
100: }
101:
102: /**
103: * Returns the signature of this method.
104: *
105: * @return the signature of this method
106: */
107: public ISignature getSignature() {
108: Vector argTypes = new Vector();
109:
110: for (int i = 0; i < parameters.size(); i++) {
111: argTypes.add(getParameterAt(i).getType());
112: }
113:
114: return new MethodSignature(argTypes);
115: }
116:
117: /**
118: * Gets the <i>i</i>th parameter of this method
119: *
120: * @param i the index of the parameter
121: *
122: * @return the <code>VariableDef</code> of the <i>i</i>th parameter
123: */
124: private VariableDef getParameterAt(int i) {
125: return (VariableDef) (parameters.get(i));
126: }
127:
128: /**
129: * Adds an exception that this method throws.
130: *
131: * @param exception the exception to add
132: */
133: public void addException(IClass exception) {
134: if (exceptions == null) {
135: exceptions = new Vector();
136: }
137:
138: exceptions.add(exception);
139: }
140:
141: /**
142: * Returns the exceptions this method throws
143: *
144: * @return the exceptions this method throws
145: */
146: public IClass[] getExceptions() {
147: return (IClass[]) exceptions.toArray(new IClass[0]);
148: }
149:
150: public String getQualifiedName() {
151: return super.getQualifiedName() + getSignature();
152: }
153: }
|