Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Soot - a J*va Optimization Framework
   * Copyright (C) 1999 Patrick Lam
   * Copyright (C) 2004 Ondrej Lhotak
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
 
 /*
  * Modified by the Sable Research Group and others 1997-1999.  
  * See the 'credits' file distributed with Soot for the complete list of
  * contributors.  (Soot is distributed at http://www.sable.mcgill.ca/soot)
  */
 
 
 
 
 
 
 package soot.jimple.internal;
 
 import java.util.List;
 
 import soot.RefType;
 import soot.SootClass;
 import soot.Unit;
 import soot.Value;
 import soot.ValueBox;
 @SuppressWarnings({"serial","unchecked","rawtypes"})
 public class JDynamicInvokeExpr extends AbstractInvokeExpr  implements DynamicInvokeExpr
 {
 	protected SootMethodRef bsmRef;
 	protected ValueBox[] bsmArgBoxes;
 	
     public JDynamicInvokeExpr(SootMethodRef bootstrapMethodRefList<ValuebootstrapArgsSootMethodRef methodRefList<ValuemethodArgs)
     {
     		throw new IllegalArgumentException("Receiver type of JDynamicInvokeExpr must be "+.+"!");
 		if(!bootstrapMethodRef.returnType().equals(RefType.v("java.lang.invoke.CallSite"))) {
     		throw new IllegalArgumentException("Return type of bootstrap method must be java.lang.invoke.CallSite!");
 		}
 		
 		
     	this. = bootstrapMethodRef;
         this. = methodRef;
         this. = new ValueBox[bootstrapArgs.size()];
         this. = new ValueBox[methodArgs.size()];
 
         for(int i = 0; i < bootstrapArgs.size(); i++)
         {
         	this.[i] = Jimple.v().newImmediateBox((ValuebootstrapArgs.get(i));	
         }
         for(int i = 0; i < methodArgs.size(); i++)
         {
         	this.[i] = Jimple.v().newImmediateBox((ValuemethodArgs.get(i));	
         }
     }
     
     public int getBootstrapArgCount()
     {
         return .;
     }
 
     public Value getBootstrapArg(int index)
     {
         return [index].getValue();
     }
 
     
     public Object clone() 
     {
         ArrayList clonedBsmArgs = new ArrayList(getBootstrapArgCount());
         for(int i = 0; i < getBootstrapArgCount(); i++) {
             clonedBsmArgs.add(igetBootstrapArg(i));
         }
         
         ArrayList clonedArgs = new ArrayList(getArgCount());
        for(int i = 0; i < getArgCount(); i++) {
            clonedArgs.add(igetArg(i));
        }
        
        return new  JDynamicInvokeExpr(clonedBsmArgsclonedArgs);
    }
    
    public boolean equivTo(Object o)
    {
        if (o instanceof JDynamicInvokeExpr)
        {
            JDynamicInvokeExpr ie = (JDynamicInvokeExpr)o;
            if (!(getMethod().equals(ie.getMethod()) && 
                    . == ie.bsmArgBoxes.length))
                return false;
            int i = 0;
            for (ValueBox element : ) {
				if (!(element.getValue().equivTo(ie.getBootstrapArg(i))))
                    return false;
				i++;
			}
            if (!(getMethod().equals(ie.getMethod()) && 
                    . == ie.argBoxes.length))
                return false;
            i = 0;
            for (ValueBox element : ) {
				if (!(element.getValue().equivTo(ie.getArg(i))))
                    return false;
				i++;
			}
            if(!.equals(ie.methodRef)) return false;
            if(!.equals(ie.bsmRef)) return false;
            return true;
        }
        return false;
    }
    
    {
        return .resolve();
    }


    
Returns a hash code for this object, consistent with structural equality.
    public int equivHashCode() 
    {
        return getBootstrapMethod().equivHashCode() * getMethod().equivHashCode() * 17;
    }
    public String toString()
    {
        StringBuffer buffer = new StringBuffer();
        buffer.append(.);
        buffer.append(" \"");
        buffer.append(.name()); //quoted method name (can be any UTF8 string)
        buffer.append("\" <");
        buffer.append(SootMethod.getSubSignature(""/* no method name here*/.parameterTypes(), .returnType()));
        buffer.append(">(");
        for(int i = 0; i < .i++)
        {
            if(i != 0)
                buffer.append(", ");
            buffer.append([i].getValue().toString());
        }
        buffer.append(") ");
        buffer.append(.getSignature());
        buffer.append("(");
        for(int i = 0; i < .i++)
        {
            if(i != 0)
                buffer.append(", ");
            buffer.append([i].getValue().toString());
        }
        buffer.append(")");
        return buffer.toString();
    }
    
    public void toString(UnitPrinter up)
    {
        up.literal(.);        
        up.literal(" \"" + .name() + "\" <" + SootMethod.getSubSignature(""/* no method name here*/.parameterTypes(), .returnType()) +">(");        
        
        for(int i = 0; i < .i++)
        {
            if(i != 0)
                up.literal(", ");
                
            [i].toString(up);
        }
        up.literal(") ");
        up.methodRef();
        up.literal("(");
        
        for(int i = 0; i < .i++)
        {
            if(i != 0)
                up.literal(", ");
                
            [i].toString(up);
        }
        up.literal(")");
    }
    
    public void apply(Switch sw)
    {
        ((ExprSwitchsw).caseDynamicInvokeExpr(this);
    }
    
    public List getUseBoxes()
    { 
    	//we do not include the bootstrap-method arguments here because they are static arguments
        List list = new ArrayList();
        for (ValueBox element : ) {
            list.addAll(element.getValue().getUseBoxes());
            list.add(element);
        }
        return list;
    }
    
    
		return ;
	}
    
    public List getBootstrapArgs()
    {
        List l = new ArrayList();
        for (ValueBox element : )
			l.add(element.getValue());
        return l;
    }
New to GrepCode? Check out our FAQ X