// Path: plugin/src/java/su/msu/cs/lvk/secbugs/ma/KeyIndicatorProperty.java
// public class KeyIndicatorProperty {
//     public enum IndicatorType { UNKNOWN, VALIDATOR, ACCESS }
//     private IndicatorType indicatorType;
// 
//     public KeyIndicatorProperty(IndicatorType indicatorType) {
//         this.indicatorType = indicatorType;
//     }
// 
//     public IndicatorType getIndicatorType() {
//         return indicatorType;
//     }
// 
//     public void setIndicatorType(IndicatorType indicatorType) {
//         this.indicatorType = indicatorType;
//     }
// 
//     public static KeyIndicatorProperty valueOf(String s) {
//         return new KeyIndicatorProperty(IndicatorType.valueOf(s));
//     }
// }
// 
// Path: plugin/src/java/su/msu/cs/lvk/secbugs/ma/KeyIndicatorPropertyDatabase.java
// public class KeyIndicatorPropertyDatabase extends MethodPropertyDatabase<KeyIndicatorProperty> {
//     @Override
//     protected KeyIndicatorProperty decodeProperty(String propStr)
//             throws PropertyDatabaseFormatException {
//         return KeyIndicatorProperty.valueOf(propStr);
//     }
// 
//     @Override
//     protected String encodeProperty(KeyIndicatorProperty property) {
//         return property.getIndicatorType().toString();
//     }
// 
// }


import edu.umd.cs.findbugs.SystemProperties;
import edu.umd.cs.findbugs.ba.*;
import edu.umd.cs.findbugs.classfile.CheckedAnalysisException;
import edu.umd.cs.findbugs.classfile.Global;
import edu.umd.cs.findbugs.classfile.MethodDescriptor;
import org.apache.bcel.Constants;
import org.apache.bcel.generic.*;
import su.msu.cs.lvk.secbugs.ma.KeyIndicatorProperty;
import su.msu.cs.lvk.secbugs.ma.KeyIndicatorPropertyDatabase;
package su.msu.cs.lvk.secbugs.ta;


/**
 * @author Igor Konnov
 */
public class TaintAnalysis extends FrameDataflowAnalysis<TaintValue, TaintValueFrame> {
    static final boolean DEBUG = true; //SystemProperties.getBoolean("ta.debug");

    static {
        if (DEBUG) {
            System.out.println("ta.debug enabled");
        }
    }

    private MethodGen methodGen;
    private TaintValueFrameModelingVisitor visitor;

    private TaintValueFrame cachedEntryFact;
// Path: plugin/src/java/su/msu/cs/lvk/secbugs/ma/KeyIndicatorProperty.java
// public class KeyIndicatorProperty {
//     public enum IndicatorType { UNKNOWN, VALIDATOR, ACCESS }
//     private IndicatorType indicatorType;
// 
//     public KeyIndicatorProperty(IndicatorType indicatorType) {
//         this.indicatorType = indicatorType;
//     }
// 
//     public IndicatorType getIndicatorType() {
//         return indicatorType;
//     }
// 
//     public void setIndicatorType(IndicatorType indicatorType) {
//         this.indicatorType = indicatorType;
//     }
// 
//     public static KeyIndicatorProperty valueOf(String s) {
//         return new KeyIndicatorProperty(IndicatorType.valueOf(s));
//     }
// }
// 
// Path: plugin/src/java/su/msu/cs/lvk/secbugs/ma/KeyIndicatorPropertyDatabase.java
// public class KeyIndicatorPropertyDatabase extends MethodPropertyDatabase<KeyIndicatorProperty> {
//     @Override
//     protected KeyIndicatorProperty decodeProperty(String propStr)
//             throws PropertyDatabaseFormatException {
//         return KeyIndicatorProperty.valueOf(propStr);
//     }
// 
//     @Override
//     protected String encodeProperty(KeyIndicatorProperty property) {
//         return property.getIndicatorType().toString();
//     }
// 
// }


// Path: plugin/src/java/su/msu/cs/lvk/secbugs/ta/TaintAnalysis.java
import edu.umd.cs.findbugs.SystemProperties;
import edu.umd.cs.findbugs.ba.*;
import edu.umd.cs.findbugs.classfile.CheckedAnalysisException;
import edu.umd.cs.findbugs.classfile.Global;
import edu.umd.cs.findbugs.classfile.MethodDescriptor;
import org.apache.bcel.Constants;
import org.apache.bcel.generic.*;
import su.msu.cs.lvk.secbugs.ma.KeyIndicatorProperty;
import su.msu.cs.lvk.secbugs.ma.KeyIndicatorPropertyDatabase;

package su.msu.cs.lvk.secbugs.ta;


/**
 * @author Igor Konnov
 */
public class TaintAnalysis extends FrameDataflowAnalysis<TaintValue, TaintValueFrame> {
    static final boolean DEBUG = true; //SystemProperties.getBoolean("ta.debug");

    static {
        if (DEBUG) {
            System.out.println("ta.debug enabled");
        }
    }

    private MethodGen methodGen;
    private TaintValueFrameModelingVisitor visitor;

    private TaintValueFrame cachedEntryFact;
    private KeyIndicatorPropertyDatabase keyIndicatorPropertyDatabase;