|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.refactoring; import java.io.IOException; import java.util.Collections; import javax.jmi.reflect.RefObject; import javax.swing.JEditorPane; import javax.swing.text.BadLocationException; import org.netbeans.modules.refactoring.api.RefactoringElement; import org.netbeans.modules.refactoring.api.WhereUsedQuery; import org.netbeans.jmi.javamodel.ArrayAccess; import org.netbeans.jmi.javamodel.Assignment; import org.netbeans.jmi.javamodel.Element; import org.netbeans.jmi.javamodel.Expression; import org.netbeans.jmi.javamodel.Field; import org.netbeans.jmi.javamodel.InfixExpression; import org.netbeans.jmi.javamodel.JavaModelPackage; import org.netbeans.jmi.javamodel.MethodInvocation; import org.netbeans.jmi.javamodel.Operator; import org.netbeans.jmi.javamodel.OperatorEnum; import org.netbeans.jmi.javamodel.PrimaryExpression; import org.netbeans.jmi.javamodel.VariableAccess; import org.openide.DialogDisplayer; import org.openide.ErrorManager; import org.openide.NotifyDescriptor; import org.openide.filesystems.FileObject; import org.openide.text.CloneableEditorSupport; import org.openide.text.PositionBounds; import org.openide.text.PositionRef; /** * * @author Tomas Hurka */ public class EncapsulateFieldElement extends WhereUsedElement { private boolean enabled = true; private String getterName,setterName; private boolean isAssign; private boolean hasSuper; private PrimaryExpression parentClass; private Element parent; private JavaModelPackage model; public EncapsulateFieldElement(Field encapsulatedFiled,VariableAccess usage,String getter,String setter) { super(encapsulatedFiled,usage); enabled=true; getterName=getter; setterName=setter; parent=(Element)feature.refImmediateComposite(); isAssign=checkWriteAccess(); hasSuper=usage.isHasSuper(); parentClass=usage.getParentClass(); model=(JavaModelPackage)feature.refImmediatePackage(); } private boolean checkWriteAccess() { if (parent instanceof Assignment) { Assignment assign=(Assignment)parent; if (assign.getLeftSide().equals(feature)) return true; } return false; } private MethodInvocation createSetGet(Operator oper,Expression rightSide) { MethodInvocation readMethod; InfixExpression infixExpr; if (rightSide instanceof InfixExpression) { rightSide=model.getComplexExpression().createComplexExpression(rightSide); } readMethod=model.getMethodInvocation().createMethodInvocation(getterName, null, parentClass, hasSuper); infixExpr=model.getInfixExpression().createInfixExpression(readMethod, oper, rightSide); return model.getMethodInvocation().createMethodInvocation(setterName, Collections.singletonList(infixExpr), parentClass, hasSuper); } public void performChange() { ((VariableAccess)feature).setParentClass(null); if (!isAssign) { // read access MethodInvocation method=model.getMethodInvocation().createMethodInvocation(getterName, null, parentClass, hasSuper); parent.replaceChild(feature, method); } else { Assignment assign=(Assignment)parent; Operator oper=assign.getOperator(); Expression value=assign.getRightSide(); Element assignParent=(Element)assign.refImmediateComposite(); MethodInvocation setterMethod; assign.setRightSide(null); if (oper.equals(OperatorEnum.ASSIGN)) { setterMethod=model.getMethodInvocation().createMethodInvocation(setterName, Collections.singletonList(value), parentClass, hasSuper); } else if (oper.equals(OperatorEnum.ANDASSIGN)) { setterMethod=createSetGet(OperatorEnum.AND,value); } else if (oper.equals(OperatorEnum.DIVASSIGN)) { setterMethod=createSetGet(OperatorEnum.DIV,value); } else if (oper.equals(OperatorEnum.LSHIFTASSIGN)) { setterMethod=createSetGet(OperatorEnum.LSHIFT,value); } else if (oper.equals(OperatorEnum.MINUSASSIGN)) { setterMethod=createSetGet(OperatorEnum.MINUS,value); } else if (oper.equals(OperatorEnum.MODASSIGN)) { setterMethod=createSetGet(OperatorEnum.MOD,value); } else if (oper.equals(OperatorEnum.MULTIASSIGN)) { setterMethod=createSetGet(OperatorEnum.MULTI,value); } else if (oper.equals(OperatorEnum.ORASSIGN)) { setterMethod=createSetGet(OperatorEnum.OR,value); } else if (oper.equals(OperatorEnum.PLUSASSIGN)) { setterMethod=createSetGet(OperatorEnum.PLUS,value); } else if (oper.equals(OperatorEnum.RSHIFTASSIGN)) { setterMethod=createSetGet(OperatorEnum.RSHIFT,value); } else if (oper.equals(OperatorEnum.URSHIFTASSIGN)) { setterMethod=createSetGet(OperatorEnum.URSHIFT,value); } else if (oper.equals(OperatorEnum.XORASSIGN)) { setterMethod=createSetGet(OperatorEnum.XOR,value); } else throw new IllegalArgumentException("Unknown operator "+oper); // NOI18N assignParent.replaceChild(assign, setterMethod); } } public void setEnabled(boolean enabled) { this.enabled = enabled; } public boolean isEnabled() { return enabled; } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.