 
   get_type: -> @this_class
   get_super_class_type: -> @super_class
-  get_interface_types: -> @constant_pool.get(i).deref() for i in @interfaces
+  get_interface_types: -> @interfaces
   get_super_class: -> @super_class_cdata
   get_interfaces: -> @interface_cdatas
   get_class_object: (rs) ->

      return @is_subclass(rs,target)

class root.ArrayClassData extends ClassData
  constructor: (@component_type, @loader=null) ->
    @constant_pool = new ConstantPool
    @ml_cache = {}
    @fl_cache = {}
    @access_flags = {}
    @this_class = "[#{@component_type}"
    @super_class = 'Ljava/lang/Object;'
    @interfaces = []
    @fields = []
    @methods = {}
    @attrs = []
    @initialized = false
    @static_fields = []

  get_component_type: () -> return @component_type
  get_component_class: -> return @component_class_cdata
  set_loaded: (@super_class_cdata, @component_class_cdata) -> # Nothing else to do.

  is_initialized: -> true

  # Returns a boolean indicating if this class is an instance of the target class.
  # "target" is a ClassData object.


# Represents a single Class in the JVM.
class ClassData
  # Responsible for setting up all of the fields that are guaranteed to be
  # present on any ClassData object.
  constructor: (@loader=null) ->
    @ml_cache = {}
    @fl_cache = {}
    @access_flags = {}
    @interfaces = []
    @fields = []
    @methods = {}
    @attrs = []
    @initialized = false
    @static_fields = []

  # Resets any ClassData state that may have been built up
  load: () ->
