Reimplemented the code that backed the "settings" in lldb. There were many issues with the previous implementation:
- no setting auto completion
- very manual and error prone way of getting/setting variables
- tons of code duplication
- useless instance names for processes, threads

Now settings can easily be defined like option values. The new settings makes use of the "OptionValue" classes so we can re-use the option value code that we use to set settings in command options. No more instances, just "does the right thing".



git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@162366 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Commands/CommandObjectApropos.cpp b/source/Commands/CommandObjectApropos.cpp
index a71c2b6..a8713d0 100644
--- a/source/Commands/CommandObjectApropos.cpp
+++ b/source/Commands/CommandObjectApropos.cpp
@@ -86,27 +86,22 @@
                 for (size_t i = 0; i < commands_found.GetSize(); ++i)
                     m_interpreter.OutputFormattedHelpText (result.GetOutputStream(), 
                                                            commands_found.GetStringAtIndex(i),
-                                                           "--", commands_help.
-                                                           GetStringAtIndex(i), 
+                                                           "--",
+                                                           commands_help.GetStringAtIndex(i),
                                                            max_len);
                 
             }
             
             
-            StreamString settings_search_results;
-            lldb::UserSettingsControllerSP root = Debugger::GetSettingsController ();
-            const char *settings_prefix = root->GetLevelName().GetCString();
-             
-            UserSettingsController::SearchAllSettingsDescriptions (m_interpreter, 
-                                                                   root, 
-                                                                   settings_prefix, 
-                                                                   search_word,
-                                                                   settings_search_results);
-            
-            if (settings_search_results.GetSize() > 0)
+            std::vector<const Property *> properties;
+            const size_t num_properties = m_interpreter.GetDebugger().Apropos(search_word, properties);
+            if (num_properties)
             {
+                const bool dump_qualified_name = true;
                 result.AppendMessageWithFormat ("\nThe following settings variables may relate to '%s': \n\n", search_word);
-                result.AppendMessageWithFormat ("%s", settings_search_results.GetData());
+                for (size_t i=0; i<num_properties; ++i)
+                    properties[i]->DumpDescription (m_interpreter, result.GetOutputStream(), 0, dump_qualified_name);
+
             }
             
             result.SetStatus (eReturnStatusSuccessFinishNoResult);