88use PHPJava \Core \JVM \ConstantPool ;
99use PHPJava \Core \JVM \Validations \MagicByte ;
1010use PHPJava \Exceptions \ValidatorException ;
11+ use PHPJava \Kernel \Attributes \AttributeInterface ;
12+ use PHPJava \Kernel \Attributes \InnerClassesAttribute ;
1113use PHPJava \Kernel \Maps \AccessFlag ;
1214use PHPJava \Kernel \Structures \_Utf8 ;
1315use PHPJava \Utilities \Formatter ;
@@ -62,6 +64,10 @@ class JavaClass
6264 */
6365 private $ invoker ;
6466
67+ private $ innerClasses = [];
68+
69+ private $ parentClass ;
70+
6571 /**
6672 * JavaClass constructor.
6773 * @param JavaClassReader $reader
@@ -94,6 +100,7 @@ public function __construct(JavaClassReader $reader)
94100 $ this ->thisClass = $ reader ->getBinaryReader ()->readUnsignedShort ();
95101
96102 $ constantPoolEntries = $ this ->constantPool ->getEntries ();
103+
97104 $ this ->className = $ constantPoolEntries [$ constantPoolEntries [$ this ->thisClass ]->getClassIndex ()];
98105
99106 // read super class
@@ -127,14 +134,32 @@ public function __construct(JavaClassReader $reader)
127134 $ this ->constantPool
128135 );
129136
137+ foreach ($ this ->activeAttributes ->getEntries () as $ entry ) {
138+ if ($ entry ->getAttributeData () instanceof InnerClassesAttribute) {
139+ $ this ->innerClasses = array_merge (
140+ $ this ->innerClasses ,
141+ $ entry ->getAttributeData ()->getClasses ()
142+ );
143+ }
144+ }
145+
130146 $ this ->invoker = new JavaClassInvoker ($ this );
131147 }
132148
133- public function getClassName (): string
149+ public function getClassName (bool $ shortName = false ): string
134150 {
151+ if ($ shortName === true ) {
152+ $ split = explode ('$ ' , $ this ->className ->getString ());
153+ return $ split [count ($ split ) - 1 ];
154+ }
135155 return $ this ->className ->getString ();
136156 }
137157
158+ public function getInnerClasses (): array
159+ {
160+ return $ this ->innerClasses ;
161+ }
162+
138163 public function getFields (): array
139164 {
140165 return $ this ->activeFields ->getEntries ();
@@ -156,6 +181,22 @@ public function appendDebug($log)
156181 return $ this ;
157182 }
158183
184+ public function hasParentClass (): bool
185+ {
186+ return isset ($ this ->parentClass );
187+ }
188+
189+ public function setParentClass (JavaClass $ class ): self
190+ {
191+ $ this ->parentClass = $ class ;
192+ return $ this ;
193+ }
194+
195+ public function getParentClass (): JavaClass
196+ {
197+ return $ this ->parentClass ;
198+ }
199+
159200 public function debug (): void
160201 {
161202 $ cpInfo = $ this ->getConstantPool ()->getEntries ();
0 commit comments