mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-15 02:44:47 +01:00
Fix StrucType.isSubTypeOf() for sub interfaces.
This commit is contained in:
parent
6294172dbc
commit
60d24f2feb
@ -1015,24 +1015,21 @@ public class TypeManager {
|
||||
|
||||
try {
|
||||
ClassFile classFile = manager.classFileLoader.get( name );
|
||||
if( classFile != null ) {
|
||||
for( ConstantClass interClass : classFile.getInterfaces() ) {
|
||||
if( interClass.getName().equals( structType.name ) ) {
|
||||
return true;
|
||||
}
|
||||
String otherTypeName = structType.name;
|
||||
while( classFile != null ) {
|
||||
if( isSubTypeOf( classFile, otherTypeName )) {
|
||||
return true;
|
||||
}
|
||||
|
||||
while( classFile != null ) {
|
||||
ConstantClass superClass = classFile.getSuperClass();
|
||||
if( superClass == null ) {
|
||||
break;
|
||||
}
|
||||
String superName = superClass.getName();
|
||||
if( superName.equals( structType.name ) ) {
|
||||
return true;
|
||||
}
|
||||
classFile = manager.classFileLoader.get( superName );
|
||||
ConstantClass superClass = classFile.getSuperClass();
|
||||
if( superClass == null ) {
|
||||
break;
|
||||
}
|
||||
String superName = superClass.getName();
|
||||
if( superName.equals( otherTypeName ) ) {
|
||||
return true;
|
||||
}
|
||||
classFile = manager.classFileLoader.get( superName );
|
||||
}
|
||||
} catch( IOException ex ) {
|
||||
throw new UncheckedIOException( ex );
|
||||
@ -1041,6 +1038,30 @@ public class TypeManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for sub interface recursively.
|
||||
*
|
||||
* @param classFile
|
||||
* the class file to check
|
||||
* @param otherTypeName
|
||||
* the searching interface name
|
||||
* @return true, if a sub interface
|
||||
* @throws IOException
|
||||
* If any I/O error occur
|
||||
*/
|
||||
private boolean isSubTypeOf( ClassFile classFile, String otherTypeName ) throws IOException {
|
||||
for( ConstantClass iface : classFile.getInterfaces() ) {
|
||||
if( iface.getName().equals( otherTypeName ) ) {
|
||||
return true;
|
||||
}
|
||||
ClassFile iClassFile = manager.classFileLoader.get( iface.getName() );
|
||||
if( iClassFile != null && isSubTypeOf( iClassFile, otherTypeName ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get kind of the StructType
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user