70d8589b826cb5fee26157ea580baa7812bc2baa
[jpf-core.git] / src / main / gov / nasa / jpf / vm / serialize / SmartThingsConfig.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18
19 package gov.nasa.jpf.vm.serialize;
20
21 import gov.nasa.jpf.Config;
22 import gov.nasa.jpf.annotation.FilterField;
23 import gov.nasa.jpf.annotation.FilterFrame;
24 import gov.nasa.jpf.vm.AnnotationInfo;
25 import gov.nasa.jpf.vm.FieldInfo;
26 import gov.nasa.jpf.vm.ClassInfo;
27 import gov.nasa.jpf.vm.MethodInfo;
28 import gov.nasa.jpf.vm.serialize.AmmendableFilterConfiguration.FieldAmmendment;
29 import gov.nasa.jpf.vm.serialize.AmmendableFilterConfiguration.FrameAmmendment;
30
31 public class SmartThingsConfig
32   implements FieldAmmendment, FrameAmmendment {
33
34   boolean ignoreClass(ClassInfo ci) {
35     String pName = ci.getName();
36     if (pName.startsWith("org")) {
37       if (pName.startsWith("org.codehaus.groovy")) {
38         //      System.out.println("Ignoring "+pName);
39         return true;
40       }
41       if (pName.startsWith("org.apache.groovy")) {
42         //      System.out.println("Ignoring "+pName);
43         return true;
44       }
45     } else if (pName.startsWith("java")) {
46       if (pName.startsWith("java.lang")) {
47         if (pName.startsWith("java.lang.reflect")) {
48           return true;
49         }
50         if (pName.startsWith("java.lang.ref")) {
51           return true;
52         }
53         if (pName.startsWith("java.lang.ClassLoader")) {
54           return true;
55         }
56         if (pName.startsWith("java.lang.Thread$State")) {
57           return true;
58         }
59         if (pName.startsWith("java.lang.Class"))
60           return true;
61         if (pName.startsWith("java.lang.Package"))
62           return true;
63       } else {
64       if (pName.startsWith("java.util.concurrent")) {
65         //      System.out.println("Ignoring "+pName);
66         return true;
67       }
68       if (pName.startsWith("java.util.logging")) {
69         //      System.out.println("Ignoring "+pName);
70         return true;
71       }
72       if (pName.startsWith("java.beans")) {
73         return true;
74       }
75       if (pName.startsWith("java.io.OutputStreamWriter"))
76         return true;
77       if (pName.startsWith("java.io.PrintStream"))
78         return true;
79       if (pName.startsWith("java.io.BufferedWriter"))
80         return true;
81       }
82       if (pName.startsWith("java.nio.charset"))
83         return true;
84       
85     } else if (pName.startsWith("groovy")) {
86       if (pName.startsWith("groovy.lang")) {
87         //      System.out.println("Ignoring "+pName);
88         return true;
89       }
90       if (pName.startsWith("groovyjarjarasm.asm")) {
91         //      System.out.println("Ignoring "+pName);
92         return true;
93       }
94     }
95     if (pName.startsWith("com.sun.beans")) {
96       return true;
97     }
98     if (pName.startsWith("sun.reflect")) {
99       return true;
100     }
101     if (pName.startsWith("sun.misc.SharedSecrets"))
102       return true;
103     if (pName.startsWith("sun.util.logging"))
104       return true;
105     if (pName.startsWith("sun.net.www"))
106       return true;
107     
108     return false;
109   }
110   
111   @Override
112   public boolean ammendFieldInclusion(FieldInfo fi, boolean sofar) {
113     ClassInfo ci = fi.getClassInfo();
114     if (ignoreClass(ci))
115       return POLICY_IGNORE;
116     ClassInfo civ = fi.getTypeClassInfo();
117     if (ignoreClass(civ))
118       return POLICY_IGNORE;      
119     return sofar;
120   }
121
122   @Override
123   public FramePolicy ammendFramePolicy(MethodInfo mi, FramePolicy sofar) {
124     ClassInfo ci = mi.getClassInfo();
125     if (ignoreClass(ci)) {
126       sofar.includeLocals = false;
127       sofar.includeOps = false;
128       sofar.includePC = false;
129     } else {
130       //      System.out.println("Including M: " +mi);
131     }
132
133     return sofar;
134   }
135
136   public static final SmartThingsConfig instance = new SmartThingsConfig();
137 }