@@ -74,38 +74,50 @@ void java_class_loadert::set_java_cp_include_files(
74
74
java_cp_include_files=_java_cp_include_files;
75
75
}
76
76
77
- java_bytecode_parse_treet &java_class_loadert::get_parse_tree (
77
+ // / Retrieves a class file from a jar and loads it into the tree
78
+ bool java_class_loadert::get_class_file (
78
79
java_class_loader_limitt &class_loader_limit,
79
- const irep_idt &class_name)
80
+ const irep_idt &class_name,
81
+ const std::string &jar_file,
82
+ java_bytecode_parse_treet &parse_tree)
80
83
{
81
- java_bytecode_parse_treet &parse_tree=class_map[class_name ];
84
+ const auto &jm=jar_map[jar_file ];
82
85
83
- // First check given JAR files
84
- for (const auto &jf : jar_files)
86
+ auto jm_it=jm.entries .find (class_name);
87
+
88
+ if (jm_it!=jm.entries .end ())
85
89
{
86
- read_jar_file (class_loader_limit, jf);
90
+ debug () << " Getting class `" << class_name << " ' from JAR "
91
+ << jar_file << eom;
87
92
88
- const auto &jm=jar_map[jf];
93
+ std::string data=jar_pool (class_loader_limit, jar_file)
94
+ .get_entry (jm_it->second .class_file_name );
89
95
90
- auto jm_it=jm. entries . find (class_name );
96
+ std::istringstream istream (data );
91
97
92
- if (jm_it!=jm. entries . end ())
93
- {
94
- debug () << " Getting class ` " << class_name << " ' from JAR "
95
- << jf << eom ;
98
+ java_bytecode_parse (
99
+ istream,
100
+ parse_tree,
101
+ get_message_handler ()) ;
96
102
97
- std::string data=jar_pool (class_loader_limit, jf)
98
- .get_entry (jm_it->second .class_file_name );
103
+ return true ;
104
+ }
105
+ return false ;
106
+ }
99
107
100
- std::istringstream istream (data);
101
108
102
- java_bytecode_parse (
103
- istream,
104
- parse_tree,
105
- get_message_handler ());
109
+ java_bytecode_parse_treet &java_class_loadert::get_parse_tree (
110
+ java_class_loader_limitt &class_loader_limit,
111
+ const irep_idt &class_name)
112
+ {
113
+ java_bytecode_parse_treet &parse_tree=class_map[class_name];
106
114
115
+ // First check given JAR files
116
+ for (const auto &jf : jar_files)
117
+ {
118
+ read_jar_file (class_loader_limit, jf);
119
+ if (get_class_file (class_loader_limit, class_name, jf, parse_tree))
107
120
return parse_tree;
108
- }
109
121
}
110
122
111
123
// See if we can find it in the class path
@@ -115,28 +127,8 @@ java_bytecode_parse_treet &java_class_loadert::get_parse_tree(
115
127
if (has_suffix (cp, " .jar" ))
116
128
{
117
129
read_jar_file (class_loader_limit, cp);
118
-
119
- const auto &jm=jar_map[cp];
120
-
121
- auto jm_it=jm.entries .find (class_name);
122
-
123
- if (jm_it!=jm.entries .end ())
124
- {
125
- debug () << " Getting class `" << class_name << " ' from JAR "
126
- << cp << eom;
127
-
128
- std::string data=jar_pool (class_loader_limit, cp)
129
- .get_entry (jm_it->second .class_file_name );
130
-
131
- std::istringstream istream (data);
132
-
133
- java_bytecode_parse (
134
- istream,
135
- parse_tree,
136
- get_message_handler ());
137
-
130
+ if (get_class_file (class_loader_limit, class_name, cp, parse_tree))
138
131
return parse_tree;
139
- }
140
132
}
141
133
else
142
134
{
0 commit comments