Java Examples for com.ibm.wala.classLoader.CallSiteReference

The following java examples will help you to understand the usage of com.ibm.wala.classLoader.CallSiteReference. These source code samples are taken from different open source projects.

Example 1
Project: wala-mirror-master  File: DexIMethod.java View source code
//-------------------------------------------
// MethodAnnotationIteratorDelegate Methods
//-------------------------------------------
//	/**
//	 * Delegate called by the class in order to parse the method annotations.
//	 */
//	public void processMethodAnnotations(MethodIdItem mIdItem,
//			AnnotationSetItem anoSet) {
//		//System.out.println("DexIMethod: processMethodAnnotations()");
//		if ( mIdItem.equals(eMethod.method) ){
//			AnnotationItem[] items = anoSet.getAnnotations();
//			for (AnnotationItem item : items) {
//				logger.debug("ANNOTATION"+item.toString());
//			}
//
//		}
//	}
/**
     *
     * @throws InvalidClassFileException
     * @throws UnsupportedOperationException
     *
     * @todo    Review this implementation - it may be horribly wrong!
     */
@Override
public Collection<CallSiteReference> getCallSites() throws InvalidClassFileException {
    Collection<CallSiteReference> empty = Collections.emptySet();
    if (isNative()) {
        return empty;
    }
    // assert(false) : "Please review getCallSites-Implementation before use!";        // TODO
    ArrayList<CallSiteReference> csites = new ArrayList<CallSiteReference>();
    // XXX The call Sites in this method or to this method?!!!
    for (Instruction inst : instructions()) {
        if (inst instanceof Invoke) {
            // Locate the Target
            MethodReference target = MethodReference.findOrCreate(// XXX: Is this the correct class loader?
            getDeclaringClass().getClassLoader().getReference(), ((Invoke) inst).clazzName, ((Invoke) inst).methodName, ((Invoke) inst).descriptor);
            csites.add(CallSiteReference.make(// programCounter
            inst.pc, // declaredTarget
            target, // invocationCode
            ((Invoke) inst).getInvocationCode()));
            logger.info("\tClass Name:\t" + ((Invoke) inst).clazzName);
            logger.info("\tMethod Name:\t" + ((Invoke) inst).methodName);
            logger.info("\tSignature:\t" + ((Invoke) inst).descriptor);
        }
    }
    return Collections.unmodifiableCollection(csites);
}
Example 2
Project: keshmesh-master  File: LCK02JBugDetector.java View source code
/*
	 * The method Object.getClass() has a normal allocation instruction. This
	 * method look for the predecessors of the CGNode containing the normal
	 * allocation instruction. These predecessors make calls to
	 * Object.getClass(). This method iterates over all such invocations and
	 * returns the type names of the receivers of all such method invocations.
	 * This method is an attempt to make the analysis independent of receiver
	 * instance context. But, we encountered several problems while using this
	 * method on contexts lighter than the receiver instance context. For
	 * example, cheaper contexts are less precise and thus report too many
	 * predecessors for a the CGNode of Object.getClass(). And, too many
	 * predecessors result in too many type names to be reported as potential
	 * receivers of a call to getClass. Specifically, several exception classes
	 * get reported as the type names of the receivers of the call to
	 * Object.getClass.
	 */
@Deprecated
private void addSynchronizedClassTypeNames(Set<String> result, NormalAllocationInNode normalAllocationInNode) {
    {
        CGNode normalAllocationCGNode = normalAllocationInNode.getNode();
        Iterator<CGNode> predNodesIterator = basicAnalysisData.callGraph.getPredNodes(normalAllocationCGNode);
        while (predNodesIterator.hasNext()) {
            CGNode predNode = predNodesIterator.next();
            Iterator<CallSiteReference> possibleSitesIterator = basicAnalysisData.callGraph.getPossibleSites(predNode, normalAllocationCGNode);
            while (possibleSitesIterator.hasNext()) {
                CallSiteReference possibleSite = possibleSitesIterator.next();
                SSAAbstractInvokeInstruction[] calls = predNode.getIR().getCalls(possibleSite);
                for (SSAAbstractInvokeInstruction invokeInstruction : calls) {
                    int invocationReceiverValueNumber = invokeInstruction.getReceiver();
                    PointerKey pointerKeyForReceiver = getPointerForValueNumber(predNode, invocationReceiverValueNumber);
                    OrdinalSet<InstanceKey> receiverObjects = basicAnalysisData.pointerAnalysis.getPointsToSet(pointerKeyForReceiver);
                    for (InstanceKey receiverInstanceKey : receiverObjects) {
                        result.add(getJavaClassName(receiverInstanceKey.getConcreteType().getName()));
                    }
                }
            }
        }
    }
}
Example 3
Project: XSched-master  File: TaskStringContextSelector.java View source code
//do something like: have a base context selector (probably a default one). 
//ask the base selector for a context
//check for the task context of the caller and add the tasks up to some length n
//combine the task string and the base context into a single context
//pretty much, steal from the nCFAContextSelector and its superclass CallStringContextSelector
@Override
public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey receiver) {
    Context baseContext = base.getCalleeTarget(caller, site, callee, receiver);
    IR ir = caller.getIR();
    if (WalaConstants.isTaskMethod(site.getDeclaredTarget())) {
        SSAAbstractInvokeInstruction[] invokes = ir.getCalls(site);
        assert invokes.length == 1;
        //0 is the "this" of the invoke, 1 is the "now" parameter (1st param)
        int now = invokes[0].getUse(1);
        SSAInstruction creationSite = caller.getDU().getDef(now);
        TaskCreationSite tcs = new TaskCreationSite(caller.getMethod(), (SSANewInstruction) creationSite);
        return new TaskContextPair(tcs, baseContext);
    } else {
        //normal call
        TaskCreationSite tcs = (TaskCreationSite) caller.getContext().get(TASK_CREATION_SITE);
        return new TaskContextPair(tcs, baseContext);
    }
}
Example 4
Project: privmem-master  File: ScjContextSelector.java View source code
public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] actualParameters) {
    ScjContext calleeContext;
    // Handles the first nodes that is called from the synthetic fakeRoot
    if (!(caller.getContext() instanceof ScjContext)) {
        return immortal;
    }
    calleeContext = (ScjContext) caller.getContext();
    if (isSubclassOf(callee, this.AEHIClass) && isFuncName(callee, "handleAsyncEvent")) {
        calleeContext = new ScjContext(calleeContext, callee.getDeclaringClass().getName().toString(), ScjScopeType.PM);
    } else if (this.isImplemented(callee, this.safeletIClass) && isFuncName(callee, "initializeApplication")) {
        calleeContext = this.immortal;
    } else if (isSubclassOf(callee, this.ManagedMemoryIClass)) {
        if (isFuncName(callee, "enterPrivateMemory")) {
            calleeContext = new ScjContext(calleeContext, getUniquePMName(), ScjScopeType.PM);
        } else if (isFuncName(callee, "executeInOuterArea")) {
            System.out.println("executeInOuterArea");
            calleeContext = new ScjContext(calleeContext.getOuterStack());
        } else if (isFuncName(callee, "executeInAreaOf")) {
            util.error("Not supported by the analysis");
        } else if (isFuncName(callee, "getCurrentManagedMemory")) {
            util.error("Not supported by new SCJ revisions");
        }
    } else if (isFuncName(callee, "startMission") && callee.getDeclaringClass().getName().toString().equals("Ljavax/safetycritical/JopSystem")) {
        calleeContext = new ScjContext(calleeContext, caller.getMethod().getDeclaringClass().getName().toString(), ScjScopeType.MISSION);
    } else if (isFuncName(callee, "getSequencer") && this.isImplemented(callee, this.safeletIClass)) {
        calleeContext = this.immortal;
    }
    if (ScjMemoryScopeAnalysis.analyseWithoutJRE == true && isFuncName(callee, "initialize") && isSubclassOf(callee, this.missionIClass)) {
        calleeContext = new ScjContext(calleeContext, caller.getMethod().getDeclaringClass().getName().toString(), ScjScopeType.MISSION);
    }
    this.scopeStacks.add(calleeContext.scopeStack);
    this.updateClassScopeMapping(callee, calleeContext.scopeStack);
    this.updateMethodScope(callee, calleeContext.scopeStack);
    return calleeContext;
}
Example 5
Project: sx10-master  File: X10toCAstTranslator.java View source code
public CAstNode visit(ConstructorDecl cd, WalkContext mc) {
    // Needs to examine the initializers in the ClassContext
    // and glue that code into the right place relative to the
    // constructor method body ("wherever that may turn out to be").
    List /* <FieldDecl|Initializer> */
    inits = mc.getInitializers();
    Block body = cd.body();
    if (hasSuperCall(body)) {
        // Split at call to super:
        // super();
        // field initializer code
        // remainder of ctor body
        CAstNode[] bodyNodes = new CAstNode[inits.size() + body.statements().size()];
        int idx = 0;
        for (Iterator iter = body.statements().iterator(); iter.hasNext(); ) {
            Stmt s = (Stmt) iter.next();
            bodyNodes[idx++] = walkNodes(s, mc);
            if (idx == 1) {
                Assertions.productionAssertion(isSpecialCallStmt(s, ConstructorCall.SUPER));
                idx = insertInitializers(mc, bodyNodes, false, idx);
            }
        }
        return makeNode(mc, fFactory, body, CAstNode.BLOCK_STMT, bodyNodes);
    } else if (hasThisCall(body)) {
        return walkNodes(body, mc);
    } else {
        // add explicit call to default super()
        // RMF 4/17/2009- The following search for a superClass default ctor
        // won't work if we process Object in source. In particular, the
        // superClass might be null. In that case, simply omit the explicit
        // super() call.
        ClassType superClass = (ClassType) ((ObjectType) cd.constructorDef().asInstance().container()).superClass();
        CAstNode[] bodyNodes;
        int idx = 0;
        int bodyInitsSize = inits.size() + body.statements().size();
        if (superClass != null) {
            ProcedureInstance defaultSuperCtor = findDefaultCtor(superClass);
            CallSiteReference callSiteRef = CallSiteReference.make(0, fIdentityMapper.getMethodRef(defaultSuperCtor), IInvokeInstruction.Dispatch.SPECIAL);
            CAstNode superCall = makeNode(mc, fFactory, cd, CAstNode.CALL, makeNode(mc, fFactory, cd, CAstNode.SUPER), fFactory.makeConstant(callSiteRef));
            bodyNodes = new CAstNode[bodyInitsSize + 1];
            bodyNodes[idx++] = superCall;
        } else {
            // no super class, so no super call
            bodyNodes = new CAstNode[bodyInitsSize];
        }
        idx = insertInitializers(mc, bodyNodes, false, idx);
        for (Iterator iter = body.statements().iterator(); iter.hasNext(); idx++) {
            Stmt s = (Stmt) iter.next();
            bodyNodes[idx] = walkNodes(s, mc);
        }
        return makeNode(mc, fFactory, body, CAstNode.BLOCK_STMT, bodyNodes);
    }
}
Example 6
Project: MemSAT-master  File: WalaInformationImpl.java View source code
private Stack<CallSite> makeCalleeStack(Stack<CallSite> current, CallSiteReference site, CGNode node) {
    //
    // fix this!
    //
    // must copy because references to the stack are captured,
    // so
    // mutating rather than copying will break everything.
    //
    Stack<CallSite> calleeStack = new LinkedStack<CallSite>();
    for (CallSite ref : current) {
        calleeStack.push(ref);
    }
    calleeStack.push(new CallSite(site, node));
    return calleeStack;
}