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;
010:
011: import net.sourceforge.jrefactory.ast.SimpleNode;
012: import net.sourceforge.jrefactory.ast.ASTImportDeclaration;
013: import net.sourceforge.jrefactory.ast.ASTName;
014: import net.sourceforge.jrefactory.ast.ASTTypeDeclaration;
015: import net.sourceforge.jrefactory.factory.NameFactory;
016: import org.acm.seguin.summary.PackageSummary;
017:
018: /**
019: * This object revises the import statements in the tree.
020: *
021: *@author Chris Seguin
022: */
023: public class RemoveImportTransform extends TransformAST {
024: private ASTName name;
025: private boolean packageImport;
026:
027: /**
028: * Constructor for the RemoveImportTransform object
029: *
030: *@param name Description of Parameter
031: */
032: public RemoveImportTransform(ASTName name) {
033: this .name = name;
034: packageImport = false;
035: }
036:
037: /**
038: * Constructor for the RemoveImportTransform object
039: *
040: *@param packageName Description of Parameter
041: *@param className Description of Parameter
042: */
043: public RemoveImportTransform(String packageName, String className) {
044: name = NameFactory.getName(packageName, className);
045: packageImport = false;
046: }
047:
048: /**
049: * Constructor for the RemoveImportTransform object
050: *
051: *@param summary Description of Parameter
052: */
053: public RemoveImportTransform(PackageSummary summary) {
054: name = new ASTName();
055: name.fromString(summary.getName());
056: packageImport = true;
057: }
058:
059: /**
060: * Update the syntax tree
061: *
062: *@param root Description of Parameter
063: */
064: public void update(SimpleNode root) {
065: // Local Variables
066: int ndx = 0;
067:
068: // While we aren't done
069: while (ndx < root.jjtGetNumChildren()) {
070: if (isInvalid((SimpleNode) root.jjtGetChild(ndx))) {
071: // Delete this child
072: root.jjtDeleteChild(ndx);
073: } else {
074: ndx++;
075: }
076: }
077: }
078:
079: /**
080: * This method determines if the particular child of the compilation unit
081: * should be deleted.
082: *
083: *@param child Description of Parameter
084: *@return Description of the Returned Value
085: */
086: protected boolean isInvalid(SimpleNode child) {
087: if (child instanceof ASTImportDeclaration) {
088: // Cast this to an import
089: ASTImportDeclaration importDecl = (ASTImportDeclaration) child;
090:
091: // Check each of the targets
092: if (!packageImport) {
093: return importDecl.jjtGetFirstChild().equals(name);
094: } else {
095: ASTName nameNode = (ASTName) importDecl
096: .jjtGetFirstChild();
097: String code = nameNode.getName();
098: String packageName = name.getName();
099: return (code.equals(packageName));
100: }
101: }
102:
103: // We have passed all the tests - so it can't be the one
104: return false;
105: }
106: }
|