Fix incorrect IncompatibleClassChangeError in ClassInfo.getDefaultMethod (#7)
[jpf-core.git] / src / main / gov / nasa / jpf / vm / AtomicData.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.vm;
19
20 import gov.nasa.jpf.util.HashData;
21
22
23 /**
24  * helper object to store per thread information about atomic line
25  * execution
26  * <2do> check if we can't do this less expensive. atomic-lines is not
27  * the default anymore
28  */
29 public class AtomicData {
30   /**
31    * The method in which the line step started.
32    */
33   public MethodInfo currentMethod;
34
35   /**
36    * The line at which the line step started.
37    */
38   public int line;
39
40   /**
41    * Set to true if we still are in the same method in which we were
42    * when the line step started.
43    */
44   public boolean inSameMethod;
45
46   @Override
47   public Object clone () {
48     AtomicData a = new AtomicData();
49
50     a.currentMethod = currentMethod;
51     a.line = line;
52     a.inSameMethod = inSameMethod;
53
54     return a;
55   }
56
57   @Override
58   public boolean equals (Object o) {
59     if (o == null) {
60       return false;
61     }
62
63     if (!(o instanceof AtomicData)) {
64       return false;
65     }
66
67     AtomicData a = (AtomicData) o;
68
69     if (currentMethod != a.currentMethod) {
70       return false;
71     }
72
73     if (line != a.line) {
74       return false;
75     }
76
77     if (inSameMethod != a.inSameMethod) {
78       return false;
79     }
80
81     return true;
82   }
83
84   /**
85    * Computes a hash code with the object data.
86    */
87   public void hash (HashData hd) {
88     hd.add(line);
89     hd.add(inSameMethod ? 1 : 0);
90   }
91
92   /**
93    * Returns a hash code for the object.
94    */
95   @Override
96   public int hashCode () {
97     HashData hd = new HashData();
98
99     hash(hd);
100
101     return hd.getValue();
102   }
103 }