Package com.google.gwt.dev.jjs.ast

Examples of com.google.gwt.dev.jjs.ast.JParameter


        this.varMap = varMap;
      }

      @Override
      public void endVisit(JParameterRef x, Context ctx) {
        JParameter param = varMap.get(x.getTarget());
        JParameterRef paramRef = new JParameterRef(x.getSourceInfo().makeChild(
            RewriteMethodBody.class, "Reference to devirtualized parameter"),
            param);
        ctx.replaceMe(paramRef);
      }
View Full Code Here


    }

    // @Override
    public void endVisit(JMethodCall x, Context ctx) {
      for (int i = 0; i < x.getTarget().params.size(); ++i) {
        JParameter param = (JParameter) x.getTarget().params.get(i);
        JExpression newArg = checkAndReplaceJso(
            (JExpression) x.getArgs().get(i), param.getType());
        x.getArgs().set(i, newArg);
      }
      if (!x.getTarget().isStatic()) {
        // for polymorphic calls, force wrapping
        JExpression newInst = checkAndReplaceJso(x.getInstance(),
View Full Code Here

            doSkip = true;
          } else if (instance instanceof JThisRef) {
            // a this ref cannot be null
            doSkip = true;
          } else if (instance instanceof JParameterRef) {
            JParameter param = ((JParameterRef) instance).getParameter();
            JMethod enclosingMethod = param.getEnclosingMethod();
            if (program.isStaticImpl(enclosingMethod)
                && enclosingMethod.params.get(0) == param) {
              doSkip = true;
            }
          }
View Full Code Here

       * SPECIAL: each argument of the call passes a value from JavaScript into
       * Java.
       */
      ArrayList params = x.getTarget().params;
      for (int i = 0, c = params.size(); i < c; ++i) {
        JParameter param = (JParameter) params.get(i);
        maybeRescueJavaScriptObjectPassingIntoJava(param.getType());
      }
      // JsniMethodRef rescues as JMethodCall
      return visit((JMethodCall) x, ctx);
    }
View Full Code Here

       */
      JMethod newMethod = new JMethod(program, x.getSourceInfo(), newName,
          enclosingType, oldReturnType, false, true, true, x.isPrivate());

      // Setup all params and locals; map from the old method to the new method
      JParameter thisParam = program.createParameter(null,
          "this$static".toCharArray(), enclosingType, true, newMethod);
      Map/* <JVariable, JVariable> */varMap = new IdentityHashMap();
      for (int i = 0; i < x.params.size(); ++i) {
        JParameter oldVar = (JParameter) x.params.get(i);
        JParameter newVar = program.createParameter(oldVar.getSourceInfo(),
            oldVar.getName().toCharArray(), oldVar.getType(), oldVar.isFinal(),
            newMethod);
        varMap.put(oldVar, newVar);
      }
      newMethod.freezeParamTypes();

      // Copy all locals over to the new method
      for (int i = 0; i < x.locals.size(); ++i) {
        JLocal oldVar = (JLocal) x.locals.get(i);
        JLocal newVar = program.createLocal(oldVar.getSourceInfo(),
            oldVar.getName().toCharArray(), oldVar.getType(), oldVar.isFinal(),
            newMethod);
        varMap.put(oldVar, newVar);
      }
      x.locals.clear();

      // Move the body of the instance method to the static method
      newMethod.body.statements.addAll(x.body.statements);
      x.body.statements.clear();

      /*
       * Rewrite the method body. Update all thisRefs to paramrefs. Update
       * paramRefs and localRefs to target the params/locals in the new method.
       */
      RewriteMethodBody rewriter = new RewriteMethodBody(thisParam, varMap);
      rewriter.accept(newMethod);

      SourceInfo bodyInfo = x.body.getSourceInfo();
      // delegate from the instance method to the static method
      JMethodCall newCall = new JMethodCall(program, bodyInfo, null, newMethod);
      newCall.getArgs().add(program.getExprThisRef(bodyInfo, enclosingType));
      for (int i = 0; i < x.params.size(); ++i) {
        JParameter param = (JParameter) x.params.get(i);
        newCall.getArgs().add(new JParameterRef(program, bodyInfo, param));
      }
      JStatement statement;
      if (oldReturnType == program.getTypeVoid()) {
        statement = newCall.makeStatement();
View Full Code Here

      ctx.replaceMe(localRef);
    }

    // @Override
    public void endVisit(JParameterRef x, Context ctx) {
      JParameter param = (JParameter) varMap.get(x.getTarget());
      JParameterRef paramRef = new JParameterRef(program, x.getSourceInfo(),
          param);
      ctx.replaceMe(paramRef);
    }
View Full Code Here

          // name later when we generate the JavaScript during code generation.
          //
          String syntheticFnHeader = "function (";
          boolean first = true;
          for (int i = 0; i < newMethod.params.size(); ++i) {
            JParameter param = (JParameter) newMethod.params.get(i);
            if (first) {
              first = false;
            } else {
              syntheticFnHeader += ',';
            }
            syntheticFnHeader += param.getName();
          }
          syntheticFnHeader += ')';
          StringReader sr = new StringReader(syntheticFnHeader + '\n'
              + jsniCode);
          try {
View Full Code Here

    private JParameter createParameter(LocalVariableBinding binding,
        JMethod enclosingMethod) {
      JType type = (JType) typeMap.get(binding.type);
      SourceInfo info = makeSourceInfo(binding.declaration);
      JParameter param = program.createParameter(info, binding.name, type,
          binding.isFinal(), enclosingMethod);
      typeMap.put(binding, param);
      return param;
    }
View Full Code Here

    }

    private JParameter createParameter(SyntheticArgumentBinding arg,
        String argName, JMethod enclosingMethod) {
      JType type = (JType) typeMap.get(arg.type);
      JParameter param = program.createParameter(null, argName.toCharArray(),
          type, true, enclosingMethod);
      return param;
    }
View Full Code Here

            Iterator/* <JParameter> */paramIt = getSyntheticsIterator(ctor);
            NestedTypeBinding nestedBinding = (NestedTypeBinding) declaringClass;
            if (nestedBinding.enclosingInstances != null) {
              for (int i = 0; i < nestedBinding.enclosingInstances.length; ++i) {
                SyntheticArgumentBinding arg = nestedBinding.enclosingInstances[i];
                JParameter param = (JParameter) paramIt.next();
                if (arg.matchingField != null) {
                  JField field = (JField) typeMap.get(arg);
                  ctor.body.statements.add(program.createAssignmentStmt(info,
                      createVariableRef(info, field), createVariableRef(info,
                          param)));
                }
              }
            }

            if (nestedBinding.outerLocalVariables != null) {
              for (int i = 0; i < nestedBinding.outerLocalVariables.length; ++i) {
                SyntheticArgumentBinding arg = nestedBinding.outerLocalVariables[i];
                JParameter param = (JParameter) paramIt.next();
                JField field = (JField) typeMap.get(arg);
                ctor.body.statements.add(program.createAssignmentStmt(info,
                    createVariableRef(info, field), createVariableRef(info,
                        param)));
              }
View Full Code Here

TOP

Related Classes of com.google.gwt.dev.jjs.ast.JParameter

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.