class Android::Dex::ClassInfo

class information in dex @!attribute [r] name

@return [String] class name

@!attribute [r] super_class

@return [String] super class name

Constants

NO_INDEX

no index flag

Attributes

access_flags[R]

@return [ClassAccessFlag]

class_data[R]

@return [DexObject::ClassDataItem]

class_def[R]

@return [DexObject::ClassDefItem]

direct_methods[R]

@return [Array<MethodInfo>] direct methods

instance_fields[R]

@return [Array<FieldInfo>] instance fields

static_fields[R]

@return [Array<FieldInfo>] static fields

virtual_methods[R]

@return [Array<MethodInfo>] virtual methods

Public Class Methods

new(class_def, dex) click to toggle source

@param [Dex::ClassDefItem] class_def @param [Dex] dex dex class instance

# File lib/android/dex/info.rb, line 44
def initialize(class_def, dex)
  @class_def = class_def
  @dex = dex
  @access_flags = ClassAccessFlag.new(@class_def[:access_flags])
  @class_data = @class_def.class_data_item
  @static_fields = @instance_fields = @direct_methods = @virtual_methods = []
  unless @class_data.nil?
    @static_fields = cls2info(@class_data[:static_fields], FieldInfo, :field_idx_diff)
    @instance_fields = cls2info(@class_data[:instance_fields], FieldInfo, :field_idx_diff)
    @direct_methods = cls2info(@class_data[:direct_methods], MethodInfo, :method_idx_diff)
    @virtual_methods = cls2info(@class_data[:virtual_methods], MethodInfo, :method_idx_diff)
  end
end

Public Instance Methods

definition() click to toggle source

@return [String] class difinition

# File lib/android/dex/info.rb, line 59
def definition
  ret = "#{access_flags} class #{name}"
  super_class.nil? ? ret : ret + " extends #{super_class}"
end
name() click to toggle source
# File lib/android/dex/info.rb, line 32
def name
  @dex.type_resolve(@class_def[:class_idx])
end
super_class() click to toggle source
# File lib/android/dex/info.rb, line 35
def super_class
  if @class_def[:superclass_idx] != NO_INDEX
    @super_class = @dex.type_resolve(@class_def[:superclass_idx])
  else
    nil
  end
end

Private Instance Methods

cls2info(arr, cls, idx_key) click to toggle source
# File lib/android/dex/info.rb, line 65
def cls2info(arr, cls, idx_key)
  idx = 0
  ret = []
  arr.each do |item|
    idx += item[idx_key]
    ret << cls.new(item, idx, @dex)
  end
  ret
end