2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
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
10 * http://www.apache.org/licenses/LICENSE-2.0.
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.
19 package gov.nasa.jpf.vm;
21 import gov.nasa.jpf.Config;
22 import gov.nasa.jpf.annotation.MJI;
23 import gov.nasa.jpf.vm.MJIEnv;
24 import gov.nasa.jpf.vm.NativePeer;
26 import java.util.HashMap;
27 import java.util.regex.Matcher;
28 import java.util.regex.Pattern;
31 * native peer for a regex Matcher
32 * this is just a delegatee peer
34 public class JPF_java_util_regex_Matcher extends NativePeer {
36 HashMap<Integer, Matcher> matchers;
38 public JPF_java_util_regex_Matcher (Config conf) {
39 matchers = new HashMap<Integer,Matcher>();
42 void putInstance (MJIEnv env, int objref, Matcher matcher) {
43 int id = env.getIntField(objref, "id");
44 matchers.put(id, matcher);
47 Matcher getInstance (MJIEnv env, int objref) {
49 int id = env.getIntField(objref, "id");
50 return matchers.get(id);
54 public void register____V (MJIEnv env, int objref) {
55 int patRef = env.getReferenceField(objref, "pattern");
57 int regexRef = env.getReferenceField(patRef, "regex");
58 String regex = env.getStringObject(regexRef);
59 int flags = env.getIntField(patRef, "flags");
61 Pattern pat = Pattern.compile(regex, flags);
63 int inputRef = env.getReferenceField(objref, "input");
64 String input = env.getStringObject(inputRef);
66 Matcher matcher = pat.matcher(input);
67 putInstance(env, objref, matcher);
71 public boolean matches____Z (MJIEnv env, int objref) {
72 Matcher matcher = getInstance( env, objref);
73 return matcher.matches();
77 public boolean find____Z (MJIEnv env, int objref) {
78 Matcher matcher = getInstance( env, objref);
79 return matcher.find();
83 public boolean lookingAt____Z(MJIEnv env, int objref) {
84 Matcher matcher = getInstance(env, objref);
85 return matcher.lookingAt();
89 public int start__I__I(MJIEnv env, int objref, int group) {
90 Matcher matcher = getInstance(env, objref);
91 return matcher.start(group);
95 public int end__I__I(MJIEnv env, int objref, int group) {
96 Matcher matcher = getInstance(env, objref);
97 return matcher.end(group);
101 public int regionStart____I(MJIEnv env, int objref) {
102 Matcher matcher = getInstance(env, objref);
103 return matcher.regionStart();
107 public int regionEnd____I(MJIEnv env, int objref) {
108 Matcher matcher = getInstance(env, objref);
109 return matcher.regionEnd();
113 public int region__II__Ljava_util_regex_Matcher_2(MJIEnv env, int objref, int start, int end) {
114 Matcher matcher = getInstance(env, objref);
115 matcher = matcher.region(start, end);
116 putInstance(env, objref, matcher);
122 public int reset____Ljava_util_regex_Matcher_2 (MJIEnv env, int objref) {
123 Matcher matcher = getInstance( env, objref);
125 int inputRef = env.getReferenceField(objref, "input");
126 String input = env.getStringObject(inputRef);
128 matcher = matcher.reset(input);
129 putInstance(env, objref, matcher);
135 public int groupCount____I (MJIEnv env, int objref) {
136 Matcher matcher = getInstance(env, objref);
137 return matcher.groupCount();
141 public int group__I__Ljava_lang_String_2 (MJIEnv env, int objref, int i) {
142 Matcher matcher = getInstance( env, objref);
143 String grp = matcher.group(i);
145 return env.newString(grp);
149 public int quoteReplacement__Ljava_lang_String_2__Ljava_lang_String_2 (MJIEnv env, int clsObjref, int string) {
150 String parm = env.getStringObject(string);
151 String result = Matcher.quoteReplacement(parm);
152 return env.newString(result);
156 public int replaceAll__Ljava_lang_String_2__Ljava_lang_String_2 (MJIEnv env, int objref, int string) {
157 Matcher matcher = getInstance(env, objref);
158 String replacement = env.getStringObject(string);
159 String result = matcher.replaceAll(replacement);
161 int resultref = env.newString(result);
166 public int replaceFirst__Ljava_lang_String_2__Ljava_lang_String_2(MJIEnv env, int objref, int string) {
167 Matcher matcher = getInstance(env, objref);
168 String replacement = env.getStringObject(string);
169 String result = matcher.replaceFirst(replacement);
171 int resultref = env.newString(result);
176 public boolean hasTransparentBounds____Z(MJIEnv env, int objref) {
177 Matcher matcher = getInstance(env, objref);
178 return matcher.hasTransparentBounds();
182 public int useTransparentBounds__Z__Ljava_util_regex_Matcher_2(MJIEnv env, int objref, boolean b) {
183 Matcher matcher = getInstance(env, objref);
184 matcher = matcher.useTransparentBounds(b);
185 putInstance(env, objref, matcher);
191 public boolean hasAnchoringBounds____Z(MJIEnv env, int objref) {
192 Matcher matcher = getInstance(env, objref);
193 return matcher.hasTransparentBounds();
197 public int useAnchoringBounds__Z__Ljava_util_regex_Matcher_2(MJIEnv env, int objref, boolean b) {
198 Matcher matcher = getInstance(env, objref);
199 matcher = matcher.useAnchoringBounds(b);
200 putInstance(env, objref, matcher);
206 public int toString____Ljava_lang_String_2 (MJIEnv env, int objref) {
207 Matcher matcher = getInstance(env, objref);
208 String str = matcher.toString();
210 return env.newString(str);
214 public boolean hitEnd____Z (MJIEnv env, int objref) {
215 Matcher matcher = getInstance( env, objref);
216 return matcher.hitEnd();
220 public boolean requireEnd____Z (MJIEnv env, int objref) {
221 Matcher matcher = getInstance( env, objref);
222 return matcher.requireEnd();