Esempio n. 1
0
 protected boolean isAssignableFrom(final Type t, final Type u) {
   if (t.equals(u)) {
     return true;
   }
   if (currentClass != null && t.equals(currentClass)) {
     if (getSuperClass(u) == null) {
       return false;
     } else {
       if (isInterface) {
         return u.getSort() == Type.OBJECT || u.getSort() == Type.ARRAY;
       }
       return isAssignableFrom(t, getSuperClass(u));
     }
   }
   if (currentClass != null && u.equals(currentClass)) {
     if (isAssignableFrom(t, currentSuperClass)) {
       return true;
     }
     if (currentClassInterfaces != null) {
       for (int i = 0; i < currentClassInterfaces.size(); ++i) {
         Type v = currentClassInterfaces.get(i);
         if (isAssignableFrom(t, v)) {
           return true;
         }
       }
     }
     return false;
   }
   Class<?> tc = getClass(t);
   if (tc.isInterface()) {
     tc = Object.class;
   }
   return tc.isAssignableFrom(getClass(u));
 }
Esempio n. 2
0
 protected Type getSuperClass(final Type t) {
   if (currentClass != null && t.equals(currentClass)) {
     return currentSuperClass;
   }
   Class<?> c = getClass(t).getSuperclass();
   return c == null ? null : Type.getType(c);
 }
Esempio n. 3
0
 @Override
 protected boolean isSubTypeOf(final BasicValue value, final BasicValue expected) {
   Type expectedType = expected.getType();
   Type type = value.getType();
   switch (expectedType.getSort()) {
     case Type.INT:
     case Type.FLOAT:
     case Type.LONG:
     case Type.DOUBLE:
       return type.equals(expectedType);
     case Type.ARRAY:
     case Type.OBJECT:
       if ("Lnull;".equals(type.getDescriptor())) {
         return true;
       } else if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
         return isAssignableFrom(expectedType, type);
       } else {
         return false;
       }
     default:
       throw new Error("Internal error");
   }
 }
Esempio n. 4
0
 protected boolean isInterface(final Type t) {
   if (currentClass != null && t.equals(currentClass)) {
     return isInterface;
   }
   return getClass(t).isInterface();
 }