001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package org.netbeans.modules.refactoring.java.api;
042:
043: import java.util.Set;
044: import javax.lang.model.element.Modifier;
045: import org.netbeans.api.java.source.TreePathHandle;
046: import org.netbeans.modules.refactoring.api.AbstractRefactoring;
047: import org.openide.util.lookup.Lookups;
048:
049: /**
050: * Refactoring used for changing method signature. It changes method declaration
051: * and also all its references (callers).
052: *
053: * @see org.netbeans.modules.refactoring.spi.RefactoringPlugin
054: * @see org.netbeans.modules.refactoring.spi.RefactoringPluginFactory
055: * @see org.netbeans.modules.refactoring.api.AbstractRefactoring
056: * @see org.netbeans.modules.refactoring.api.RefactoringSession
057: *
058: * @author Pavel Flaska
059: * @author Tomas Hurka
060: * @author Jan Becicka
061: */
062: public final class ChangeParametersRefactoring extends
063: AbstractRefactoring {
064:
065: private Object selectedObject;
066: // table of all the changes - it contains all the new parameters and also
067: // changes in order
068: private ParameterInfo[] paramTable;
069: // new modifier
070: private Set<Modifier> modifiers;
071:
072: /**
073: * Creates a new instance of change parameters refactoring.
074: *
075: * @param method refactored object, i.e. method or constructor
076: */
077: public ChangeParametersRefactoring(TreePathHandle method) {
078: super (Lookups.singleton(method));
079: }
080:
081: /**
082: * Getter for new parameters
083: * @return array of new parameters
084: */
085: public ParameterInfo[] getParameterInfo() {
086: return paramTable;
087: }
088:
089: /**
090: * Getter for new modifiers
091: * @return modifiers
092: */
093: public Set<Modifier> getModifiers() {
094: return modifiers;
095: }
096:
097: /**
098: * Sets new parameters for a method
099: * @param paramTable new parameters
100: */
101: public void setParameterInfo(ParameterInfo[] paramTable) {
102: this .paramTable = paramTable;
103: }
104:
105: /**
106: * Sets modifiers for method
107: * @param modifiers new modifiers
108: */
109: public void setModifiers(Set<Modifier> modifiers) {
110: this .modifiers = modifiers;
111: }
112:
113: ////////////////////////////////////////////////////////////////////////////
114: // INNER CLASSES
115: ////////////////////////////////////////////////////////////////////////////
116:
117: /**
118: * Represents one item for setParameters(List params) list parameter.
119: * Item contains information about changes in method parameters.
120: * Parameter can be added, changed or moved to another position.
121: */
122: public static final class ParameterInfo {
123: int origIndex;
124: String name;
125: String type;
126: String defaultVal;
127:
128: /**
129: * Creates a new instanceof of ParameterInfo. This constructor can be
130: * used for newly added parameters or changed original parameters.
131: * When you call method with -1 origIndex, you have to provide not
132: * null values in all other pamarameters, otherwise it throws an
133: * IllegalArgumentException.
134: *
135: * @param origIndex for newly added parameters, use -1, otherwise
136: * use index in original parameters list
137: * @param name parameter name
138: * @param type parameter type
139: * @param defaultVal should be provided for the all new parameters.
140: * For changed parameters, it is ignored.
141: */
142: public ParameterInfo(int origIndex, String name, String type,
143: String defaultVal) {
144: // new parameter
145: // if (origIndex == -1 && (name == null || defaultVal == null || type == null || name.length() == 0 || defaultVal.length() == 0)) {
146: // throw new IllegalArgumentException(NbBundle.getMessage(ChangeParameters.class, "ERR_NoValues"));
147: // }
148: this .origIndex = origIndex;
149: this .name = name;
150: this .type = type;
151: // do not set default value for existing parameters
152: this .defaultVal = origIndex == -1 ? defaultVal : null;
153: }
154:
155: /**
156: * Creates a new instance of ParameterInfo. This constructor is used
157: * for existing non-changed parameters. All the values except original
158: * position in parameters list is set to null.
159: *
160: * @param origIndex position index in original parameters list
161: */
162: public ParameterInfo(int origIndex) {
163: this (origIndex, null, null, null);
164: }
165:
166: /**
167: * Returns value of original parameter index.
168: *
169: * @return original index of parameter in parameters list
170: */
171: public int getOriginalIndex() {
172: return origIndex;
173: }
174:
175: /**
176: * Returns value of the name of parameter. If the name was not
177: * changed, returns null.
178: *
179: * @return new name for parameter or null in case that it was not changed.
180: */
181: public String getName() {
182: return name;
183: }
184:
185: /**
186: * Returns value of the type of parameter. If the name was not
187: * changed, returns null.
188: *
189: * @return new type for parameter or null if it was not changed.
190: */
191: public String getType() {
192: return type;
193: }
194:
195: /**
196: * Returns value of the default value in case of the new parameter.
197: * Otherwise, it returns null.
198: *
199: * @return default value for new parameter, otherwise null.
200: */
201: public String getDefaultValue() {
202: return defaultVal;
203: }
204: }
205:
206: ////////////////////////////////////////////////////////////////////////////
207: }
|