1 19 package org.netbeans.modules.javacore.jmiimpl.javamodel; 20 21 import java.util.List ; 22 import org.netbeans.jmi.javamodel.Element; 23 import org.netbeans.jmi.javamodel.JavaModelPackage; 24 import org.netbeans.jmi.javamodel.Operator; 25 import org.netbeans.jmi.javamodel.PostfixExpression; 26 import org.netbeans.jmi.javamodel.UnaryExpression; 27 import org.netbeans.lib.java.parser.ASTree; 28 import org.netbeans.mdr.storagemodel.StorableObject; 29 import org.netbeans.modules.javacore.parser.ASTProvider; 30 31 35 public abstract class PostfixExpressionImpl extends PrefixExpressionImpl implements PostfixExpression { 36 37 public PostfixExpressionImpl(StorableObject o) { 38 super(o); 39 } 40 41 protected Operator extractOperator() { 42 if (getASTree().getSubTrees().length > 1) { 43 return getOperator(getASTree().getSubTrees()[1].getType()); 44 } else { 45 return null; 46 } 47 } 48 49 protected void initChildren() { 50 childrenInited = false; 51 ASTree tree = getASTree(); 52 if (tree != null) { 53 expression = (UnaryExpression) initOrCreate(expression, tree.getSubTrees()[0]); 54 } 55 childrenInited = true; 56 } 57 58 public String getSourceText() { 59 String origElem; 60 if ((origElem = checkChange()) != null) 61 return origElem; 62 StringBuffer buf = new StringBuffer (); 63 StatementImpl expr = (StatementImpl) getExpression(); 64 Operator operator = getOperator(); 65 buf.append(expr.getSourceText()); 66 buf.append(operatorToString(operator)); 67 return buf.toString(); 68 } 69 70 public void getDiff(List diff) { 71 ASTProvider parser = getParser(); 72 ASTree tree = getASTree(); 73 ASTree[] children = tree.getSubTrees(); 74 75 getChildDiff(diff, parser, children[0], (MetadataElement) getExpression(), CHANGED_EXPRESSION); 76 if (isChanged(CHANGED_OPERATOR)) { 77 int pos = parser.getToken(children[0].getLastToken()).getEndOffset(); 78 replaceNode(diff, parser, children[1], operatorToString(operator), pos, ""); 79 } 80 } 81 82 public Element duplicate(JavaModelPackage targetExtent) { 83 return targetExtent.getPostfixExpression().createPostfixExpression( 84 getOperator(), 85 (UnaryExpression) duplicateElement(getExpression(), targetExtent) 86 ); 87 88 } 89 } 90 | Popular Tags |