Stack Trace Element with its unit test added too.
The unit test passes.
Change-Id: I6f6af771cae1387c60c3b511148a347fe3237345
diff --git a/src/object.h b/src/object.h
index 6c8fd6b..e306d74 100644
--- a/src/object.h
+++ b/src/object.h
@@ -1681,6 +1681,53 @@
DISALLOW_IMPLICIT_CONSTRUCTORS(Throwable);
};
+class StackTraceElement : public Object {
+ public:
+ const String* GetDeclaringClass() const {
+ return declaring_class_;
+ }
+
+ const String* GetMethodName() const {
+ return method_name_;
+ }
+
+ const String* GetFileName() const {
+ return file_name_;
+ }
+
+ uint32_t GetLineNumber() const {
+ return line_number_;
+ }
+
+ static StackTraceElement* Alloc(const String* declaring_class, const String* method_name,
+ const String* file_name, uint32_t line_number) {
+ StackTraceElement* trace = down_cast<StackTraceElement*>(GetStackTraceElement()->NewInstance());
+ trace->declaring_class_ = declaring_class;
+ trace->method_name_ = method_name;
+ trace->file_name_ = file_name;
+ trace->line_number_ = line_number;
+ return trace;
+ }
+
+ static void SetClass(Class* java_lang_StackTraceElement);
+
+ static void ResetClass();
+
+ private:
+ const String* declaring_class_;
+ const String* method_name_;
+ const String* file_name_;
+ uint32_t line_number_;
+
+ static Class* GetStackTraceElement() {
+ DCHECK(java_lang_StackTraceElement_ != NULL);
+ return java_lang_StackTraceElement_;
+ }
+
+ static Class* java_lang_StackTraceElement_;
+ DISALLOW_IMPLICIT_CONSTRUCTORS(StackTraceElement);
+};
+
inline bool Object::IsString() const {
// TODO use "klass_ == String::GetJavaLangString()" instead?
return klass_ == klass_->descriptor_->klass_;