blob: 94a212f2a50bad4957d41114bd6d4f23c3a17ba7 [file] [log] [blame]
Brian Carlstrom1f870082011-08-23 16:02:11 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#include "class_loader.h"
4
5#include "class_linker.h"
6#include "runtime.h"
7
8namespace art {
9
Brian Carlstromaded5f72011-10-07 17:15:04 -070010bool ClassLoader::use_compile_time_class_path = false;
11ClassLoader::Table ClassLoader::compile_time_class_paths_;
12
13const std::vector<const DexFile*>& ClassLoader::GetCompileTimeClassPath(const ClassLoader* class_loader) {
14 Runtime* runtime = Runtime::Current();
Brian Carlstrom1f870082011-08-23 16:02:11 -070015 if (class_loader == NULL) {
Brian Carlstromaded5f72011-10-07 17:15:04 -070016 return runtime->GetClassLinker()->GetBootClassPath();
Brian Carlstrom1f870082011-08-23 16:02:11 -070017 }
Brian Carlstromaded5f72011-10-07 17:15:04 -070018 CHECK(ClassLoader::UseCompileTimeClassPath());
19 Table::const_iterator it = compile_time_class_paths_.find(class_loader);
20 CHECK(it != compile_time_class_paths_.end());
21 return it->second;
22}
23
24void ClassLoader::SetCompileTimeClassPath(const ClassLoader* class_loader,
25 std::vector<const DexFile*>& class_path) {
26 CHECK(!Runtime::Current()->IsStarted());
27 use_compile_time_class_path = true;
28 compile_time_class_paths_[class_loader] = class_path;
Brian Carlstrom1f870082011-08-23 16:02:11 -070029}
30
31// TODO: get global references for these
32Class* PathClassLoader::dalvik_system_PathClassLoader_ = NULL;
33
Brian Carlstromaded5f72011-10-07 17:15:04 -070034const PathClassLoader* PathClassLoader::AllocCompileTime(std::vector<const DexFile*>& dex_files) {
35 CHECK(!Runtime::Current()->IsStarted());
Brian Carlstrom69b15fb2011-09-03 12:25:21 -070036 DCHECK(dalvik_system_PathClassLoader_ != NULL);
Brian Carlstrom1f870082011-08-23 16:02:11 -070037 PathClassLoader* p = down_cast<PathClassLoader*>(dalvik_system_PathClassLoader_->AllocObject());
Brian Carlstromaded5f72011-10-07 17:15:04 -070038 SetCompileTimeClassPath(p, dex_files);
Brian Carlstrom1f870082011-08-23 16:02:11 -070039 return p;
40}
41
42void PathClassLoader::SetClass(Class* dalvik_system_PathClassLoader) {
43 CHECK(dalvik_system_PathClassLoader_ == NULL);
44 CHECK(dalvik_system_PathClassLoader != NULL);
45 dalvik_system_PathClassLoader_ = dalvik_system_PathClassLoader;
46}
47
48void PathClassLoader::ResetClass() {
49 CHECK(dalvik_system_PathClassLoader_ != NULL);
50 dalvik_system_PathClassLoader_ = NULL;
51}
52
53} // namespace art