@@ -942,7 +942,7 @@ protected Map<Method, SixModelObject> proxyGetMethods(ThreadContext tc, Class<?>
942
942
ret .put (m , methods .at_key_boxed (tc , l ));
943
943
else if (methods .exists_key (tc , s ) != 0 )
944
944
ret .put (m , methods .at_key_boxed (tc , s ));
945
- else
945
+ else if (! Modifier . isAbstract ( iface . getModifiers ()) || Modifier . isAbstract ( m . getModifiers ()))
946
946
throw ExceptionHandling .dieInternal (tc , "method hash has no definition for " +l );
947
947
}
948
948
return ret ;
@@ -956,11 +956,18 @@ protected Class<?> computeProxyClass(Class<?> iface) {
956
956
cc .className = className ;
957
957
cc .cv = cw ;
958
958
959
- String superclass = "java/lang/Object" ;
959
+ String superclass ;
960
960
List <String > ifaces = new ArrayList < >();
961
-
962
- cw .visit (Opcodes .V1_7 , Opcodes .ACC_PUBLIC | Opcodes .ACC_SUPER , className , null ,
963
- "java/lang/Object" , new String [] { Type .getInternalName (iface ) });
961
+ if (Modifier .isInterface (iface .getModifiers ())) {
962
+ cw .visit (Opcodes .V1_7 , Opcodes .ACC_PUBLIC | Opcodes .ACC_SUPER , className , null ,
963
+ "java/lang/Object" , new String [] { Type .getInternalName (iface ) });
964
+ superclass = "java/lang/Object" ;
965
+ }
966
+ else {
967
+ superclass = Type .getInternalName (iface );
968
+ cw .visit (Opcodes .V1_7 , Opcodes .ACC_PUBLIC | Opcodes .ACC_SUPER , className , null ,
969
+ superclass , new String [] { });
970
+ }
964
971
cw .visitField (Opcodes .ACC_STATIC | Opcodes .ACC_PUBLIC , "constants" , "[Ljava/lang/Object;" , null , null ).visitEnd ();
965
972
cw .visitField (Opcodes .ACC_PRIVATE , "methodMap" , "Ljava/util/Map;" , null , null ).visitEnd ();
966
973
0 commit comments