/
field.go
54 lines (41 loc) · 1.22 KB
/
field.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package heap
import "github.com/Frederick-S/jvmgo/classfile"
type Field struct {
ClassMember
constantValueIndex uint
variableIndex uint
}
func newFields(class *Class, memberInfos []*classfile.MemberInfo) []*Field {
fields := make([]*Field, len(memberInfos))
for i, memberInfo := range memberInfos {
fields[i] = &Field{}
fields[i].class = class
fields[i].copyMemberInfo(memberInfo)
fields[i].copyAttributes(memberInfo)
}
return fields
}
func (field *Field) copyAttributes(memberInfo *classfile.MemberInfo) {
constantValueAttribute := memberInfo.GetConstantValueAttribute()
if constantValueAttribute != nil {
field.constantValueIndex = uint(constantValueAttribute.GetConstantValueIndex())
}
}
func (field *Field) IsVolatile() bool {
return field.accessFlags&ACC_VOLATILE != 0
}
func (field *Field) IsTransient() bool {
return field.accessFlags&ACC_TRANSIENT != 0
}
func (field *Field) IsEnum() bool {
return field.accessFlags&ACC_ENUM != 0
}
func (field *Field) GetConstantValueIndex() uint {
return field.constantValueIndex
}
func (field *Field) GetVariableIndex() uint {
return field.variableIndex
}
func (field *Field) IsLongOrDouble() bool {
return field.descriptor == "J" || field.descriptor == "D"
}