01: /*
02: * FindBugs - Find Bugs in Java programs
03: * Copyright (C) 2003-2007 University of Maryland
04: *
05: * This library is free software; you can redistribute it and/or
06: * modify it under the terms of the GNU Lesser General Public
07: * License as published by the Free Software Foundation; either
08: * version 2.1 of the License, or (at your option) any later version.
09: *
10: * This library is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: * Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public
16: * License along with this library; if not, write to the Free Software
17: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18: */
19:
20: package edu.umd.cs.findbugs.ba;
21:
22: import edu.umd.cs.findbugs.SystemProperties;
23:
24: /**
25: * Abstract base class for dataflow test driver classes.
26: *
27: * @author David Hovemeyer
28: */
29: public abstract class AbstractDataflowTestDriver {
30:
31: protected boolean overrideIsForwards;
32:
33: public static class Knob {
34: public String systemPropertyName;
35: public int analysisProperty;
36:
37: public Knob(String systemPropertyName, int analysisProperty) {
38: this .systemPropertyName = systemPropertyName;
39: this .analysisProperty = analysisProperty;
40: }
41: }
42:
43: public void overrideIsForwards() {
44: this .overrideIsForwards = true;
45: }
46:
47: protected static final Knob[] KNOB_LIST = {
48: new Knob("ta.instanceof", AnalysisFeatures.MODEL_INSTANCEOF),
49: new Knob(
50: "inva.trackvalues",
51: AnalysisFeatures.TRACK_VALUE_NUMBERS_IN_NULL_POINTER_ANALYSIS),
52: new Knob(
53: "fnd.derefs",
54: AnalysisFeatures.TRACK_GUARANTEED_VALUE_DEREFS_IN_NULL_POINTER_ANALYSIS), };
55:
56: public AbstractDataflowTestDriver() {
57: super ();
58: }
59:
60: /**
61: * Configure the analysis context.
62: *
63: * @param analysisContext
64: */
65: protected void configureAnalysisContext(
66: AnalysisContext analysisContext) {
67: boolean max = SystemProperties.getBoolean("dataflow.max");
68:
69: for (Knob knob : KNOB_LIST) {
70: boolean enable = max
71: || SystemProperties
72: .getBoolean(knob.systemPropertyName);
73: System.out.println("Setting " + knob.systemPropertyName
74: + "=" + enable);
75: analysisContext.setBoolProperty(knob.analysisProperty,
76: enable);
77: }
78: }
79:
80: }
|