summaryrefslogtreecommitdiffstats
path: root/src/dex_file.cc
blob: 5b39bfccfa659f78a10bef2f6cc836c736bc0cf1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Copyright 2011 Google Inc. All Rights Reserved.

#include "src/dex_file.h"
#include "src/heap.h"
#include "src/globals.h"
#include "src/logging.h"
#include "src/object.h"
#include "src/raw_dex_file.h"

namespace art {

DexFile* DexFile::OpenFile(const char* filename) {
  RawDexFile* raw = RawDexFile::OpenFile(filename);
  return Open(raw);
}

DexFile* DexFile::OpenBase64(const char* base64) {
  RawDexFile* raw = RawDexFile::OpenBase64(base64);
  return Open(raw);
}

DexFile* DexFile::Open(RawDexFile* raw) {
  if (raw == NULL) {
    return NULL;
  }
  DexFile* dex_file = new DexFile(raw);
  dex_file->Init();
  return dex_file;
}

DexFile::~DexFile() {
  delete[] strings_;
  delete[] classes_;
  delete[] methods_;
  delete[] fields_;
}

void DexFile::Init() {
  num_strings_ = raw_->NumStringIds();
  strings_ = new String*[num_strings_]();

  num_classes_ = raw_->NumTypeIds();
  classes_ = new Class*[num_classes_]();

  num_methods_ = raw_->NumMethodIds();
  methods_ = new Method*[num_methods_]();

  num_fields_ = raw_->NumFieldIds();
  fields_ = new Field*[num_fields_]();
}

}  // namespace art