Fixes null captured parameters
[jpf-core.git] / src / main / gov / nasa / jpf / util / TypeSpec.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 package gov.nasa.jpf.util;
19
20 import gov.nasa.jpf.vm.ClassInfo;
21
22 /**
23  * wildcard supporting type specification to be used for JPF configuration.
24  * This supports supertype spec ('+') and inversion ('-')
25  * Examples:
26  *   "x.y.Foo" : class x.y.Foo
27  *   "+x.y.Foo" : everything that is an instance of x.y.Foo
28  *   "x.y.*" : every class that starts with "x.y."
29  *   "!x.y.*" : everything that does not start with "x.y."
30  */
31 public class TypeSpec extends FeatureSpec {
32   
33   
34   public static TypeSpec createTypeSpec (String s){
35     ParseData d = new ParseData();
36
37     s = s.trim();
38     String src = s; // keep the original spec around
39
40     s = parseInversion(s,d);
41     parseType(s,d);
42     
43     try {
44       return new TypeSpec(src, d.typeSpec, d.matchInverted);
45     } catch (IllegalArgumentException iax){
46       return null;
47     }
48   }
49   
50   protected TypeSpec (String rawSpec, String cls, boolean inverted){
51     super(rawSpec,cls,null,inverted);
52   }
53   
54   @Override
55   public boolean matches (Object o){
56     if (o instanceof ClassInfo){
57       return matches( (ClassInfo) o);
58     } else if (o instanceof Class){
59       return matches( (Class)o);
60     } else {
61       return false;
62     }
63   }
64   
65   public boolean matches (Class<?> cls){
66     return isMatchingType(cls);
67   }
68   
69   public boolean matches (ClassInfo ci){
70     return isMatchingType(ci);
71   }
72   
73 }