001: /*
002: * Author: Chris Seguin
003: *
004: * This software has been developed under the copyleft
005: * rules of the GNU General Public License. Please
006: * consult the GNU General Public License for more
007: * details about use and distribution of this software.
008: */
009: package org.acm.seguin.refactor.method;
010:
011: import net.sourceforge.jrefactory.ast.ASTFieldDeclaration;
012: import net.sourceforge.jrefactory.ast.ASTName;
013: import net.sourceforge.jrefactory.ast.ASTPrimitiveType;
014: import net.sourceforge.jrefactory.ast.ASTType;
015: import net.sourceforge.jrefactory.ast.ASTReferenceType;
016: import net.sourceforge.jrefactory.ast.ASTClassOrInterfaceType;
017: import net.sourceforge.jrefactory.ast.SimpleNode;
018: import org.acm.seguin.refactor.Refactoring;
019: import org.acm.seguin.summary.Summary;
020: import org.acm.seguin.summary.TypeSummary;
021: import org.acm.seguin.summary.PackageSummary;
022: import org.acm.seguin.summary.query.GetTypeSummary;
023: import org.acm.seguin.refactor.ComplexTransform;
024: import org.acm.seguin.summary.FileSummary;
025: import org.acm.seguin.summary.FileSummary;
026:
027: /**
028: * This is a base class that is shared by a number of different
029: * method refactorings.
030: *
031: *@author Chris Seguin
032: */
033: abstract class MethodRefactoring extends Refactoring {
034: /**
035: * The name of the method
036: */
037: protected String method;
038:
039: protected String[] params;
040:
041: /**
042: * The type summary that contains the method
043: */
044: protected TypeSummary typeSummary;
045:
046: /**
047: * Constructor for the FieldRefactoring object
048: */
049: public MethodRefactoring() {
050: super ();
051: }
052:
053: /**
054: * Sets the Class attribute of the MethodRefactoring object
055: *
056: *@param packageName the package name
057: *@param className the class name
058: */
059: public void setClass(String packageName, String className) {
060: setClass(GetTypeSummary.query(PackageSummary
061: .getPackageSummary(packageName), className));
062: }
063:
064: /**
065: * Sets the Class attribute of the MethodRefactoring object
066: *
067: *@param init The new Class value
068: */
069: public void setClass(TypeSummary init) {
070: typeSummary = init;
071: }
072:
073: /**
074: * Sets the Method attribute of the MethodRefactoring object
075: *
076: *@param methodName The new Method value
077: */
078: public void setMethod(String methodName) {
079: method = methodName;
080: }
081:
082: /**
083: * Sets the types of the Parameters of the method of the MethodRefactoring object
084: *
085: *@param params The new Parameter types
086: */
087: public void setParams(String[] params) {
088: this .params = params;
089: }
090:
091: /**
092: * Determines if the specified type is in java.lang package
093: *
094: *@param type the type
095: *@return true if it is in the package
096: */
097: protected boolean isInJavaLang(ASTName type) {
098: return (type.getNameSize() == 3)
099: && (type.getNamePart(0).equals("java"))
100: && (type.getNamePart(1).equals("lang"));
101: }
102:
103: /**
104: * Determines if the specified type is in java.lang package
105: *
106: *@param type the type
107: *@return true if it is in the package
108: */
109: protected boolean isInJavaLang(TypeSummary type) {
110: return getPackage(type).getName().equals("java.lang");
111: }
112:
113: /**
114: * Gets the package summary for the specific object
115: *
116: *@param current the summary
117: *@return the package summary
118: */
119: protected PackageSummary getPackage(Summary current) {
120: while (!(current instanceof PackageSummary)) {
121: current = current.getParent();
122: }
123: return (PackageSummary) current;
124: }
125:
126: /**
127: * Gets the package summary for the specific object
128: *
129: *@param current the summary
130: *@return the package summary
131: */
132: protected FileSummary getFileSummary(Summary current) {
133: while (!(current instanceof FileSummary)) {
134: current = current.getParent();
135: }
136: return (FileSummary) current;
137: }
138:
139: /**
140: * Description of the Method
141: *
142: *@param source Description of Parameter
143: *@param transform Description of Parameter
144: *@param rft Description of Parameter
145: */
146: protected void removeMethod(TypeSummary source,
147: ComplexTransform transform, RemoveMethodTransform rft) {
148: transform.add(rft);
149: FileSummary fileSummary = (FileSummary) source.getParent();
150: transform.apply(fileSummary.getFile(), fileSummary.getFile());
151: }
152: }
|