Package dk.brics.string.external

Examples of dk.brics.string.external.MethodResolution


    return resolveToVariable(expr, expr.getMethod(), arguments, factory);
  }
 
  private MethodResolution getResolution(InvokeExpr expr, SootMethod target) {
    for (Resolver resolver : resolvers) {
      MethodResolution res = resolver.resolveMethod(expr, target);
      if (res != null)
        return res;
    }
    return null;
  }
View Full Code Here


          return null;
     
    // Get the return type
    VariableType resultType = factory.fromSootType(target.getReturnType());
   
    MethodResolution resolution = getResolution(expr, target);
   
    // give up if no resolver could resolve the method
    if (resolution == null)
      return null;
   
    // make return value
    Variable result;
    if (resolution.getReturnedAutomaton() != null) {
      Automaton auto = resolution.getReturnedAutomaton();
     
      Variable temp = factory.createVariable(VariableType.STRING);
      factory.addStatement(new StringInit(temp, auto));
     
      switch (resultType) {
      case ARRAY:
        result = factory.createVariable(resultType);
        factory.addStatement(new ArrayNew(result));
        factory.addStatement(new ArrayWriteElement(result, temp));
        break;
     
      case STRINGBUFFER:
        result = factory.createVariable(resultType);
        factory.addStatement(new StringBufferInit(result, temp));
        break;
       
      case STRING:
      case OBJECT:
      case PRIMITIVE:
        result = temp;
        break;
     
      default:
        result = factory.getNothing();
      }
     
    } else if (resolution.getReturnedArgument() != -1) {
      result = arguments.get(resolution.getReturnedArgument());
     
    } else {
      result = factory.createVariable(resultType);
      factory.addStatement(new ObjectCorrupt(result));
    }
   
    // handle corrupted arguments
    if (resolution.getCorruptedArguments().size() != arguments.size()) {
      throw new InvalidResolutionException("Incorrect number of arguments in method resolution");
    }
    for (int i=0; i<arguments.size(); i++) {
      if (arguments.get(i).isMutable() && resolution.isArgumentCorrupted(i)) {
        factory.addStatement(new ObjectCorrupt(arguments.get(i)));
      }
    }
   
    return result;
View Full Code Here

      public MethodResolution resolveMethod(InvokeExpr e, SootMethod m) {
        String sig = m.getSignature();
        if (sig.equals("<dk.brics.xact.XML: java.lang.String getString(java.lang.String)>") ||
            sig.equals("<dk.brics.xact.XML: java.lang.String getString()>")) {
          Automaton a = Datatypes.get("string"); // TODO: should use the XML graph (run twice!?)
          return new MethodResolution(e.getArgCount(), a);
        }
        // TODO methods taking an Iterable or array should not corrupt the argument
        if (sig.equals("<dk.brics.xact.XML: dk.brics.xact.XML concat(java.lang.Object[])>")) {
          MethodResolution r = new MethodResolution(1, Automaton.makeAnyString());
          r.setArgumentCorrupted(0, false);
          return r;
        }
        return null;
      }
      public FieldResolution resolveField(FieldRef f) {
View Full Code Here

     * @throws InvalidRuntimeUseException if some invalid use of the runtime
     *                                    library is encountered.
     */
    public MethodResolution resolveMethod(InvokeExpr expr, SootMethod target) {
        if (target.getSignature().equals("<dk.brics.string.runtime.Strings: java.lang.String cast(java.lang.String,java.lang.String)>")) {
          MethodResolution resolution = new MethodResolution(expr.getArgCount());
            resolution.setReturnedAutomaton(getRegExp(expr).toAutomaton(bindings));
            return resolution;
        }
        else if (target.getSignature().equals("<dk.brics.string.runtime.Strings: java.lang.String cast(java.lang.String,java.net.URL)>")) {
          MethodResolution resolution = new MethodResolution(expr.getArgCount());
          resolution.setReturnedAutomaton(bindings.getFromURL(bindings.getConstantURL(expr.getArg(1))));
            return resolution;
        }
        else if (target.getSignature().equals("<dk.brics.string.runtime.Strings: java.lang.String analyze(java.lang.String,java.lang.String)>")) {
          MethodResolution resolution = new MethodResolution(expr.getArgCount());
          resolution.setReturnedArgument(0);
            return resolution;
        }
        else if (target.getSignature().equals("<dk.brics.string.runtime.Strings: java.lang.String analyze(java.lang.String,java.net.URL)>")) {
          MethodResolution resolution = new MethodResolution(expr.getArgCount());
          resolution.setReturnedArgument(0);
            return resolution;
        }
        return null;
    }
View Full Code Here

TOP

Related Classes of dk.brics.string.external.MethodResolution

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.