Skip to content

Commit 9e42f4f

Browse files
author
Daniel Kroening
authored
Merge pull request #847 from mgudemann/feature/java_visibility
add visibility information for fields and methods
2 parents 10015b1 + dbb9cfd commit 9e42f4f

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

src/java_bytecode/java_bytecode_convert_class.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,8 @@ void java_bytecode_convert_classt::convert(
294294
component.set_access(ID_protected);
295295
else if(f.is_public)
296296
component.set_access(ID_public);
297+
else
298+
component.set_access(ID_default);
297299
}
298300
}
299301

src/java_bytecode/java_bytecode_convert_method.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,14 @@ void java_bytecode_convert_method_lazy(
232232
method_symbol.mode=ID_java;
233233
method_symbol.location=m.source_location;
234234
method_symbol.location.set_function(method_identifier);
235+
if(m.is_public)
236+
member_type.set(ID_access, ID_public);
237+
else if(m.is_protected)
238+
member_type.set(ID_access, ID_protected);
239+
else if(m.is_private)
240+
member_type.set(ID_access, ID_private);
241+
else
242+
member_type.set(ID_access, ID_default);
235243

236244
if(method_symbol.base_name=="<init>")
237245
{

src/java_bytecode/java_bytecode_parser.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,13 @@ void java_bytecode_parsert::rfields(classt &parsed_class)
709709
field.is_final=(access_flags&ACC_FINAL)!=0;
710710
field.is_enum=(access_flags&ACC_ENUM)!=0;
711711
field.signature=id2string(pool_entry(descriptor_index).s);
712+
field.is_public=(access_flags&ACC_PUBLIC)!=0;
713+
field.is_protected=(access_flags&ACC_PROTECTED)!=0;
714+
field.is_private=(access_flags&ACC_PRIVATE)!=0;
715+
size_t flags=(field.is_public?1:0)+
716+
(field.is_protected?1:0)+
717+
(field.is_private?1:0);
718+
assert(flags<=1);
712719

713720
for(std::size_t j=0; j<attributes_count; j++)
714721
rfield_attribute(field);
@@ -1561,6 +1568,10 @@ void java_bytecode_parsert::rmethod(classt &parsed_class)
15611568
method.base_name=pool_entry(name_index).s;
15621569
method.signature=id2string(pool_entry(descriptor_index).s);
15631570

1571+
size_t flags=(method.is_public?1:0)+
1572+
(method.is_protected?1:0)+
1573+
(method.is_private?1:0);
1574+
assert(flags<=1);
15641575
u2 attributes_count=read_u2();
15651576

15661577
for(std::size_t j=0; j<attributes_count; j++)

0 commit comments

Comments
 (0)