private void validateFieldClass(String binding, InstrumentationClassFinder.PseudoClass componentClass, String componentId) throws CodeGenerationException {
      if (!myFieldDescMap.containsKey(binding)) {
        throw new CodeGenerationException(componentId, "Cannot bind: field does not exist: " + myClassToBind + "." + binding);
      }

      final Type fieldType = Type.getType(myFieldDescMap.get(binding));
      if (fieldType.getSort() != Type.OBJECT) {
        throw new CodeGenerationException(componentId, "Cannot bind: field is of primitive type: " + myClassToBind + "." + binding);
      }

      try {
        final InstrumentationClassFinder.PseudoClass fieldClass = myFinder.loadClass(fieldType.getClassName());
        if (!fieldClass.isAssignableFrom(componentClass)) {
          throw new CodeGenerationException(componentId, "Cannot bind: Incompatible types. Cannot assign " + componentClass.getName().replace('/', '.') + " to field " + myClassToBind + "." + binding);
        }
      }
      catch (ClassNotFoundException e) {
        throw new CodeGenerationException(componentId, "Class not found: " + fieldType.getClassName());
      }
      catch (IOException e) {
        throw new CodeGenerationException(componentId, e.getMessage(), e);
      }
    }
private void validateFieldClass(String binding, InstrumentationClassFinder.PseudoClass componentClass, String componentId)