blob: 80444f54e7970d6d7b85e833628358d716562867 [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 Carlstrome4f7e1d2011-09-11 13:21:12 -070014// TODO: add MANAGED when class_path_ removed
Brian Carlstrom1f870082011-08-23 16:02:11 -070015class ClassLoader : public Object {
16 public:
17 static const std::vector<const DexFile*>& GetClassPath(const ClassLoader* class_loader);
18
19 void SetClassPath(std::vector<const DexFile*>& class_path) {
Elliott Hughes0f4c41d2011-09-04 14:58:03 -070020 DCHECK_EQ(class_path_.size(), 0U);
Ian Rogers0cfe1fb2011-08-26 03:29:44 -070021 // TODO: use setter
Brian Carlstrom1f870082011-08-23 16:02:11 -070022 class_path_ = class_path;
23 }
24
25 private:
26 // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
27 Object* packages_;
28 ClassLoader* parent_;
29
30 // TODO: remove once we can create a real PathClassLoader
31 std::vector<const DexFile*> class_path_;
32
Brian Carlstrom693267a2011-09-06 09:25:34 -070033 friend struct ClassLoaderOffsets; // for verifying offset information
Brian Carlstrom1f870082011-08-23 16:02:11 -070034 DISALLOW_IMPLICIT_CONSTRUCTORS(ClassLoader);
35};
36
Ian Rogers0cfe1fb2011-08-26 03:29:44 -070037// C++ mirror of dalvik.system.BaseDexClassLoader
Brian Carlstrome4f7e1d2011-09-11 13:21:12 -070038// TODO: add MANAGED when class_path_ removed
Brian Carlstrom1f870082011-08-23 16:02:11 -070039class BaseDexClassLoader : public ClassLoader {
40 private:
41 // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
42 String* original_path_;
43 Object* path_list_;
Brian Carlstrom693267a2011-09-06 09:25:34 -070044
45 friend struct BaseDexClassLoaderOffsets; // for verifying offset information
Brian Carlstrom1f870082011-08-23 16:02:11 -070046 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseDexClassLoader);
47};
48
Ian Rogers0cfe1fb2011-08-26 03:29:44 -070049// C++ mirror of dalvik.system.PathClassLoader
Brian Carlstrome4f7e1d2011-09-11 13:21:12 -070050// TODO: add MANAGED when class_path_ removed
Brian Carlstrom1f870082011-08-23 16:02:11 -070051class PathClassLoader : public BaseDexClassLoader {
52 public:
53 static const PathClassLoader* Alloc(std::vector<const DexFile*> dex_files);
54 static void SetClass(Class* dalvik_system_PathClassLoader);
55 static void ResetClass();
56 private:
57 static Class* dalvik_system_PathClassLoader_;
Brian Carlstrom693267a2011-09-06 09:25:34 -070058 friend struct PathClassLoaderOffsets; // for verifying offset information
Brian Carlstrom1f870082011-08-23 16:02:11 -070059 DISALLOW_IMPLICIT_CONSTRUCTORS(PathClassLoader);
60};
61
62} // namespace art
63
64#endif // ART_SRC_OBJECT_H_