WALA/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSAnalysisOptions.java

75 lines
2.4 KiB
Java

/*******************************************************************************
* Copyright (c) 2013 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.cast.js.ipa.callgraph;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.CGNode;
import com.ibm.wala.ipa.callgraph.Entrypoint;
import com.ibm.wala.ipa.callgraph.propagation.cfa.CallerSiteContext;
/**
* call graph construction options specific to JavaScript.
*/
public class JSAnalysisOptions extends AnalysisOptions {
/**
* should the analysis model the semantics of Function.prototype.call / apply?
* Defaults to true.
*/
private boolean handleCallApply = true;
private boolean useLoadFileTargetSelector = true;
/**
* should the analysis employ additional context sensitivity for more precise handling of lexical accesses? if true, then:
*
* <ol>
* <li>Employ a {@link CallerSiteContext} for calls to constructors of functions that may perform a lexical access.</li>
* <li>Employ a {@link CallerSiteContext} for calls to functions that may perform a lexical access.</li>
* </ol>
*
* The above helps to avoid conflation of lexical variables associated with distinct {@link CGNode}s.
*/
private boolean usePreciseLexical = false;
public JSAnalysisOptions(AnalysisScope scope, Iterable<? extends Entrypoint> e) {
super(scope, e);
}
/**
* should the analysis model the semantics of Function.prototype.call / apply?
*/
public boolean handleCallApply() {
return handleCallApply;
}
public void setHandleCallApply(boolean handleCallApply) {
this.handleCallApply = handleCallApply;
}
public boolean useLoadFileTargetSelector() {
return useLoadFileTargetSelector;
}
public void setUseLoadFileTargetSelector(boolean useIt) {
this.useLoadFileTargetSelector = useIt;
}
public boolean usePreciseLexical() {
return usePreciseLexical;
}
public void setUsePreciseLexical(boolean usePreciseLexical) {
this.usePreciseLexical = usePreciseLexical;
}
}