1 //===-- JavaLanguage.cpp ----------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
16 // Other libraries and framework includes
17 #include "llvm/ADT/StringRef.h"
20 #include "JavaFormatterFunctions.h"
21 #include "JavaLanguage.h"
22 #include "lldb/Core/ConstString.h"
23 #include "lldb/Core/PluginManager.h"
24 #include "lldb/DataFormatters/DataVisualization.h"
25 #include "lldb/DataFormatters/FormattersHelpers.h"
26 #include "lldb/Symbol/JavaASTContext.h"
29 using namespace lldb_private;
30 using namespace lldb_private::formatters;
32 void JavaLanguage::Initialize() {
33 PluginManager::RegisterPlugin(GetPluginNameStatic(), "Java Language",
37 void JavaLanguage::Terminate() {
38 PluginManager::UnregisterPlugin(CreateInstance);
41 lldb_private::ConstString JavaLanguage::GetPluginNameStatic() {
42 static ConstString g_name("Java");
46 lldb_private::ConstString JavaLanguage::GetPluginName() {
47 return GetPluginNameStatic();
50 uint32_t JavaLanguage::GetPluginVersion() { return 1; }
52 Language *JavaLanguage::CreateInstance(lldb::LanguageType language) {
53 if (language == eLanguageTypeJava)
54 return new JavaLanguage();
58 bool JavaLanguage::IsNilReference(ValueObject &valobj) {
59 if (!valobj.GetCompilerType().IsReferenceType())
62 // If we failed to read the value then it is not a nil reference.
63 return valobj.GetValueAsUnsigned(UINT64_MAX) == 0;
66 lldb::TypeCategoryImplSP JavaLanguage::GetFormatters() {
67 static std::once_flag g_initialize;
68 static TypeCategoryImplSP g_category;
70 std::call_once(g_initialize, [this]() -> void {
71 DataVisualization::Categories::GetCategory(GetPluginName(), g_category);
73 llvm::StringRef array_regexp("^.*\\[\\]&?$");
75 lldb::TypeSummaryImplSP string_summary_sp(new CXXFunctionSummaryFormat(
76 TypeSummaryImpl::Flags().SetDontShowChildren(true),
77 lldb_private::formatters::JavaStringSummaryProvider,
78 "java.lang.String summary provider"));
79 g_category->GetTypeSummariesContainer()->Add(
80 ConstString("java::lang::String"), string_summary_sp);
82 lldb::TypeSummaryImplSP array_summary_sp(new CXXFunctionSummaryFormat(
83 TypeSummaryImpl::Flags().SetDontShowChildren(true),
84 lldb_private::formatters::JavaArraySummaryProvider,
85 "Java array summary provider"));
86 g_category->GetRegexTypeSummariesContainer()->Add(
87 RegularExpressionSP(new RegularExpression(array_regexp)),
90 #ifndef LLDB_DISABLE_PYTHON
93 lldb_private::formatters::JavaArraySyntheticFrontEndCreator,
94 "Java array synthetic children", ConstString(array_regexp),
95 SyntheticChildren::Flags().SetCascades(true), true);