示例#1
0
 public void positionStmtsAfterEnumInitStmts(List<Statement> staticFieldStatements) {
   MethodNode method = getOrAddStaticConstructorNode();
   Statement statement = method.getCode();
   if (statement instanceof BlockStatement) {
     BlockStatement block = (BlockStatement) statement;
     // add given statements for explicitly declared static fields just after enum-special fields
     // are found - the $VALUES binary expression marks the end of such fields.
     List<Statement> blockStatements = block.getStatements();
     ListIterator<Statement> litr = blockStatements.listIterator();
     while (litr.hasNext()) {
       Statement stmt = litr.next();
       if (stmt instanceof ExpressionStatement
           && ((ExpressionStatement) stmt).getExpression() instanceof BinaryExpression) {
         BinaryExpression bExp = (BinaryExpression) ((ExpressionStatement) stmt).getExpression();
         if (bExp.getLeftExpression() instanceof FieldExpression) {
           FieldExpression fExp = (FieldExpression) bExp.getLeftExpression();
           if (fExp.getFieldName().equals("$VALUES")) {
             for (Statement tmpStmt : staticFieldStatements) {
               litr.add(tmpStmt);
             }
           }
         }
       }
     }
   }
 }
 protected Expression transformBinaryExpression(BinaryExpression be) {
   int type = be.getOperation().getType();
   boolean oldInLeftExpression;
   Expression right = transform(be.getRightExpression());
   be.setRightExpression(right);
   Expression left;
   if (type == Types.EQUAL && be.getLeftExpression() instanceof VariableExpression) {
     oldInLeftExpression = inLeftExpression;
     inLeftExpression = true;
     left = transform(be.getLeftExpression());
     inLeftExpression = oldInLeftExpression;
     if (left instanceof StaticMethodCallExpression) {
       StaticMethodCallExpression smce = (StaticMethodCallExpression) left;
       StaticMethodCallExpression result =
           new StaticMethodCallExpression(smce.getOwnerType(), smce.getMethod(), right);
       setSourcePosition(result, be);
       return result;
     }
   } else {
     left = transform(be.getLeftExpression());
   }
   be.setLeftExpression(left);
   return be;
 }
 @Override
 public void visitBinaryExpression(BinaryExpression be) {
   super.visitBinaryExpression(be);
   switch (be.getOperation().getType()) {
     case Types.EQUAL: // = assignment
     case Types.BITWISE_AND_EQUAL:
     case Types.BITWISE_OR_EQUAL:
     case Types.BITWISE_XOR_EQUAL:
     case Types.PLUS_EQUAL:
     case Types.MINUS_EQUAL:
     case Types.MULTIPLY_EQUAL:
     case Types.DIVIDE_EQUAL:
     case Types.INTDIV_EQUAL:
     case Types.MOD_EQUAL:
     case Types.POWER_EQUAL:
     case Types.LEFT_SHIFT_EQUAL:
     case Types.RIGHT_SHIFT_EQUAL:
     case Types.RIGHT_SHIFT_UNSIGNED_EQUAL:
       checkFinalFieldAccess(be.getLeftExpression());
       break;
     default:
       break;
   }
 }
示例#4
0
 public void visitBinaryExpression(BinaryExpression binaryExpression) throws Exception {
   binaryExpression.getLeftExpression().accept(this);
   binaryExpression.getRightExpression().accept(this);
 }
 public void visitBinaryExpression(BinaryExpression expression) {
   expression.getLeftExpression().visit(this);
   expression.getRightExpression().visit(this);
 }
示例#6
0
 private void visitBinaryOperation(BinaryExpression be) {
   be.getLeftExpression().accept(this);
   be.getRightExpression().accept(this);
 }