blob: 80435c6be0ef360ac1bc58719f2c3b7ddcb2ac7d [file] [log] [blame]
Brian Carlstrom1f870082011-08-23 16:02:11 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#ifndef ART_SRC_CLASS_LOADER_H_
4#define ART_SRC_CLASS_LOADER_H_
5
6#include <vector>
7
8#include "dex_file.h"
9#include "object.h"
10
11namespace art {
12
Ian Rogers0cfe1fb2011-08-26 03:29:44 -070013// C++ mirror of java.lang.ClassLoader
Brian Carlstrom1f870082011-08-23 16:02:11 -070014class ClassLoader : public Object {
15 public:
16 static const std::vector<const DexFile*>& GetClassPath(const ClassLoader* class_loader);
17
18 void SetClassPath(std::vector<const DexFile*>& class_path) {
Elliott Hughes0f4c41d2011-09-04 14:58:03 -070019 DCHECK_EQ(class_path_.size(), 0U);
Ian Rogers0cfe1fb2011-08-26 03:29:44 -070020 // TODO: use setter
Brian Carlstrom1f870082011-08-23 16:02:11 -070021 class_path_ = class_path;
22 }
23
24 private:
25 // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
26 Object* packages_;
27 ClassLoader* parent_;
28
29 // TODO: remove once we can create a real PathClassLoader
30 std::vector<const DexFile*> class_path_;
31
Brian Carlstrom693267a2011-09-06 09:25:34 -070032 friend struct ClassLoaderOffsets; // for verifying offset information
Brian Carlstrom1f870082011-08-23 16:02:11 -070033 DISALLOW_IMPLICIT_CONSTRUCTORS(ClassLoader);
34};
35
Ian Rogers0cfe1fb2011-08-26 03:29:44 -070036// C++ mirror of dalvik.system.BaseDexClassLoader
Brian Carlstrom1f870082011-08-23 16:02:11 -070037class BaseDexClassLoader : public ClassLoader {
38 private:
39 // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
40 String* original_path_;
41 Object* path_list_;
Brian Carlstrom693267a2011-09-06 09:25:34 -070042
43 friend struct BaseDexClassLoaderOffsets; // for verifying offset information
Brian Carlstrom1f870082011-08-23 16:02:11 -070044 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseDexClassLoader);
45};
46
Ian Rogers0cfe1fb2011-08-26 03:29:44 -070047// C++ mirror of dalvik.system.PathClassLoader
Brian Carlstrom1f870082011-08-23 16:02:11 -070048class PathClassLoader : public BaseDexClassLoader {
49 public:
50 static const PathClassLoader* Alloc(std::vector<const DexFile*> dex_files);
51 static void SetClass(Class* dalvik_system_PathClassLoader);
52 static void ResetClass();
53 private:
54 static Class* dalvik_system_PathClassLoader_;
Brian Carlstrom693267a2011-09-06 09:25:34 -070055 friend struct PathClassLoaderOffsets; // for verifying offset information
Brian Carlstrom1f870082011-08-23 16:02:11 -070056 DISALLOW_IMPLICIT_CONSTRUCTORS(PathClassLoader);
57};
58
59} // namespace art
60
61#endif // ART_SRC_OBJECT_H_