Package cn.wensiqun.asmsupport.entity

Examples of cn.wensiqun.asmsupport.entity.MethodEntity


      for (int i = 0; i < exceptions.length; i++) {
        exces[i] = AClassFactory.getProductClass(exceptions[i]);
      }
    }
   
    me = new MethodEntity(name, owner, owner, arguments, argNames, returnClass, exces, access);

    method = new Method(me, context, methodBody, mtdCrtMode);
    if(method.getMethodEntity().getName().equals(ASConstant.INIT)){
      owner.addConstructor(method);
    }else{
View Full Code Here


   */
  public abstract void generateBody();

  @Override
    protected void init() {
      MethodEntity me = method.getMethodEntity();
        if (!method.isStatic()) {
          //new LocalVariableCreator(getExecuteBlock(), Constant.THIS, me.getOwner().getType(), method.getMethodEntity().getOwner().getType());
            OperatorFactory.newOperator(LocalVariableCreator.class,
                new Class<?>[]{ProgramBlock.class, String.class, Type.class, Type.class},
                getExecuteBlock(), ASConstant.THIS, me.getOwner().getType(), method.getMethodEntity().getOwner().getType());
          //new ScopeLogicVariable("this", scope, me.getOwner().getType(), method.getMethodEntity().getOwner().getType());
        }

        String[] argNames = me.getArgNames();
        AClass[] argClsses = me.getArgClasses();
        argments = new LocalVariable[argNames.length];
        for (int i = 0; i < argNames.length; i++) {
            ScopeLogicVariable slv = new ScopeLogicVariable(argNames[i], scope, argClsses[i].getType(),
                    argClsses[i].getType());
            LocalVariableEntity lve = new LocalVariableEntity(argNames[i], 0, argClsses[i]);
View Full Code Here

  @Override
  public MethodEntity chooseMethod() {
   
    potentially = identifyPotentiallyApplicableMethods();
       
        MethodEntity me = firstPhase();
        if(me != null){
            return me;
        }
       
        me = secondPhase();
View Full Code Here

    }


    @Override
    public MethodEntity firstPhase() {
      MethodEntity me4ReallyClass = determineMostSpecificMethodEntity(determineMethodInJavaClass(invoker, methodOwner.getReallyClass(), name, argumentTypes, allArgTypes));
     
      if(!CollectionUtils.isEmpty(methodOwner.getMethods())){
        //find in current class
            List<Method> methods = new ArrayList<Method>(methodOwner.getMethods());
            //Collections.copy(methods, methodOwner.getMethods());
            TypeTreeNode[] ttns;

            //所有找到的可能的方法
            List<MethodEntityTypeTreeNodeCombine> foundCombine = new ArrayList<MethodEntityTypeTreeNodeCombine>();
            //参数是否和传入的参数相同
            boolean sameToPass = true;
            MethodEntity mte;
            for(int i=0, length = allArgTypes.size(); i<length; i++){
                ttns = allArgTypes.get(i);
                for(int k=0, mlen = methods.size();  k<mlen; k++){
                    mte = methods.get(k).getMethodEntity();
                    //如果名字不相同直接跳过
                    if(!name.equals(mte.getName())){
                        continue;
                    }
                   
                    AClass[] mtdArgs = mte.getArgClasses();
                    //如果参数个数不同直接跳过
                    if(mtdArgs.length != ttns.length){
                        continue;
                    }
                    //如果有一个参数的类型不同直接跳过
                    for(int j=0; j<ttns.length; j++){
                        if(!ttns[j].type.equals(mtdArgs[j])){
                            sameToPass = false;
                            continue;
                        }
                    }
                   
                    if(i == 0 && sameToPass){
                        return mte;
                    }
                    methods.remove(k);
                    foundCombine.add(new MethodEntityTypeTreeNodeCombine(mte, allArgTypes.remove(i)));
                    length--;
                    break;
                }
            }
           
            MethodEntityTypeTreeNodeCombine[] mettncs = foundCombine.toArray(new MethodEntityTypeTreeNodeCombine[foundCombine.size()]);
           
            MethodEntity me4newCreateMethod = determineMostSpecificMethodEntity(mettncs);
           
            if(me4ReallyClass == null && me4newCreateMethod != null){
              return me4newCreateMethod;
            }else if(me4ReallyClass != null && me4newCreateMethod == null){
              return me4ReallyClass;
View Full Code Here

    public MethodEntity secondPhase() {
        List<AClass[]> list = new ArrayList<AClass[]>(AClassUtils.allArgumentWithBoxAndUnBoxCountExceptSelf(argumentTypes));
        AClassUtils.allArgumentWithBoxAndUnBox(argumentTypes, AClassUtils.primitiveFlag(argumentTypes), 0, new AClass[argumentTypes.length], list);
       
        int foundNumber = 0;
        MethodEntity me = null;
        //MethodEntityTypeTreeNodeCombine[] mettnc;
        for(AClass[] argsTypes : list){
          ProductClassMethodChooser pcmc = new ProductClassMethodChooser(invoker, methodOwner, name, argsTypes);
            me = pcmc.firstPhase();
            //mettnc = determineMethodInJavaClass(invoker, methodOwner.getReallyClass(), name, argsTypes);
View Full Code Here

        if(appliNodes.size() > 0){
            int mostIndex = mostSpecificIndexForVariableVarify(appliNodes);
            if(mostIndex == -1){
                throw new ASMSupportException(" Ambiguous ...............");
            }else{
                MethodEntity me = applicable.get(mostIndex);
                return me;
            }
        }else{
            return null;
        }
View Full Code Here


    @Override
    protected MethodEntity foundMethodWithNoArguments() {
      for(Method m : methodOwner.getMethods()){
        MethodEntity me = m.getMethodEntity();
        if(m.getMode() == ASConstant.METHOD_CREATE_MODE_ADD &&
           me.getName().equals(this.name) &&
           me.getArgClasses().length == 0){
          return me;
        }
      }
     
        return foundMethodWithNoArguments(methodOwner.getReallyClass());
View Full Code Here

            argTypeNodes[i] = translateToTypeTreeRoot(argumentTypes[i]);
        }
        //所有可能的参数
        //List<TypeTreeNode[]> allArgTypes = allPossibleArguments(argTypeNodes);
        allPossibleArguments(argTypeNodes);*/
        MethodEntity foundMe = null;
        //******************************phase 1*************************************
       
        //find in current class
        List<Method> methods = new ArrayList<Method>(methodOwner.getMethods());
        //Collections.copy(methods, methodOwner.getMethods());
        TypeTreeNode[] ttns;

        //所有找到的可能的方法
        List<MethodEntityTypeTreeNodeCombine> foundCombine = new ArrayList<MethodEntityTypeTreeNodeCombine>();
        //参数是否和传入的参数相同
        boolean sameToPass = true;
        MethodEntity mte;
        for(int i=0, length = allArgTypes.size(); i<length; i++){
            ttns = allArgTypes.get(i);
            for(int k=0, mlen = methods.size();  k<mlen; k++){
                mte = methods.get(k).getMethodEntity();
                //如果名字不相同直接跳过
                if(!name.equals(mte.getName())){
                    continue;
                }
               
                AClass[] mtdArgs = mte.getArgClasses();
                //如果参数个数不同直接跳过
                if(mtdArgs.length != ttns.length){
                    continue;
                }
                //如果有一个参数的类型不同直接跳过
View Full Code Here

    public MethodEntity secondPhase() {
        List<AClass[]> list = new ArrayList<AClass[]>(AClassUtils.allArgumentWithBoxAndUnBoxCountExceptSelf(argumentTypes));
        AClassUtils.allArgumentWithBoxAndUnBox(argumentTypes, AClassUtils.primitiveFlag(argumentTypes), 0, new AClass[argumentTypes.length], list);
       
        int foundNumber = 0;
        MethodEntity me = null;
        for(AClass[] argsTypes : list){
            SemiClassMethodChooser scmc = new SemiClassMethodChooser(invoker, methodOwner, name, argsTypes);
            //use the first phase's algorithm
            me = scmc.firstPhase();
            if(me != null){
View Full Code Here

        if(appliNodes.size() > 0){
            int mostIndex = mostSpecificIndexForVariableVarify(appliNodes);
            if(mostIndex == -1){
                throw new ASMSupportException(" Ambiguous ...............");
            }else{
                MethodEntity me = applicable.get(mostIndex);
                return me;
            }
        }else{
            return null;
        }
View Full Code Here

TOP

Related Classes of cn.wensiqun.asmsupport.entity.MethodEntity

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.