Fix incorrect IncompatibleClassChangeError in ClassInfo.getDefaultMethod (#7)
[jpf-core.git] / src / main / gov / nasa / jpf / vm / ApplicationContext.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;
20
21 import gov.nasa.jpf.SystemAttribute;
22 import gov.nasa.jpf.util.IntTable;
23
24 /**
25  * auxiliary class that captures the main entry and classloader context
26  * of applications
27  */
28 public class ApplicationContext implements SystemAttribute {
29
30   final int id;
31   final String mainClassName;
32   final String mainEntry;
33   final String[] args;
34   final String host;
35   
36   final SystemClassLoaderInfo sysCl;
37   MethodInfo miEntry;
38   
39   FinalizerThreadInfo finalizerThread;
40   IntTable<String> internStrings;
41   
42   ApplicationContext (int id, String mainClassName, String mainEntry, String[] args, String host, SystemClassLoaderInfo sysCl){
43     this.id = id;
44     this.mainClassName = mainClassName;
45     this.mainEntry = mainEntry;
46     this.args = args;
47     this.host = host;
48     this.sysCl = sysCl;
49     this.internStrings = new IntTable<String>(8);
50   }
51   
52   void setEntryMethod (MethodInfo miEntry){
53     this.miEntry = miEntry;
54   }
55   
56   MethodInfo getEntryMethod(){
57     return miEntry;
58   }
59   
60   public int getId(){
61     return id;
62   }
63   
64   public String getMainClassName(){
65     return mainClassName;
66   }
67   
68   public String getHost() {
69     return host;
70   }
71   
72   public String[] getArgs(){
73     return args;
74   }
75   
76   public SystemClassLoaderInfo getSystemClassLoader(){
77     return sysCl;
78   }
79   
80   public FinalizerThreadInfo getFinalizerThread() {
81     return finalizerThread;
82   }
83   
84   public void setFinalizerThread(ThreadInfo ti) {
85     finalizerThread = (FinalizerThreadInfo)ti;
86   }
87   
88   public IntTable<String> getInternStrings() {
89     return internStrings;
90   }
91   
92   @Override
93   public String toString(){
94     StringBuffer sb = new StringBuffer();
95     sb.append("ApplicationContext {mainClassName=");
96     sb.append(mainClassName);
97     sb.append(",mainEntry=");
98     sb.append(mainEntry);
99     sb.append(",host=");
100     sb.append(host);
101     
102     sb.append(",args=[");
103     for (int i=0; i<args.length; i++){
104       if (i>0) sb.append(',');
105       sb.append(args[i]);
106     }
107     sb.append("], miMain=");
108     if (miEntry != null){
109       sb.append(miEntry.getFullName());
110     } else {
111       sb.append("null");
112     }
113     sb.append('}');
114     
115     return sb.toString();
116   }
117 }