1.1 --- a/src/share/vm/services/diagnosticFramework.hpp Thu Jan 05 17:16:13 2012 -0500 1.2 +++ b/src/share/vm/services/diagnosticFramework.hpp Mon Jan 09 10:27:24 2012 +0100 1.3 @@ -241,8 +241,17 @@ 1.4 static int num_arguments() { return 0; } 1.5 outputStream* output() { return _output; } 1.6 bool is_heap_allocated() { return _is_heap_allocated; } 1.7 - virtual void print_help(outputStream* out) { }; 1.8 - virtual void parse(CmdLine* line, char delim, TRAPS) { } 1.9 + virtual void print_help(const char* name) { 1.10 + output()->print_cr("Syntax: %s", name); 1.11 + } 1.12 + virtual void parse(CmdLine* line, char delim, TRAPS) { 1.13 + DCmdArgIter iter(line->args_addr(), line->args_len(), delim); 1.14 + bool has_arg = iter.next(CHECK); 1.15 + if (has_arg) { 1.16 + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 1.17 + "Unknown argument in diagnostic command"); 1.18 + } 1.19 + } 1.20 virtual void execute(TRAPS) { } 1.21 virtual void reset(TRAPS) { } 1.22 virtual void cleanup() { } 1.23 @@ -262,6 +271,25 @@ 1.24 char delim, TRAPS); 1.25 }; 1.26 1.27 +class DCmdWithParser : public DCmd { 1.28 +protected: 1.29 + DCmdParser _dcmdparser; 1.30 +public: 1.31 + DCmdWithParser (outputStream *output, bool heap=false) : DCmd(output, heap) { } 1.32 + static const char* name() { return "No Name";} 1.33 + static const char* description() { return "No Help";} 1.34 + static const char* disabled_message() { return "Diagnostic command currently disabled"; } 1.35 + static const char* impact() { return "Low: No impact"; } 1.36 + static int num_arguments() { return 0; } 1.37 + virtual void parse(CmdLine *line, char delim, TRAPS); 1.38 + virtual void execute(TRAPS) { } 1.39 + virtual void reset(TRAPS); 1.40 + virtual void cleanup(); 1.41 + virtual void print_help(const char* name); 1.42 + virtual GrowableArray<const char*>* argument_name_array(); 1.43 + virtual GrowableArray<DCmdArgumentInfo*>* argument_info_array(); 1.44 +}; 1.45 + 1.46 class DCmdMark : public StackObj { 1.47 DCmd* _ref; 1.48 public: