8264565: Templatize num_arguments() functions of DCmd subclasses

Reviewed-by: coleenp, dholmes
This commit is contained in:
Ioi Lam 2021-04-06 03:27:09 +00:00
parent 54b4070da7
commit ff223530b6
8 changed files with 36 additions and 250 deletions

View file

@ -698,17 +698,6 @@ void StringtableDCmd::execute(DCmdSource source, TRAPS) {
VMThread::execute(&dumper); VMThread::execute(&dumper);
} }
int StringtableDCmd::num_arguments() {
ResourceMark rm;
StringtableDCmd* dcmd = new StringtableDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
// Sharing // Sharing
#if INCLUDE_CDS_JAVA_HEAP #if INCLUDE_CDS_JAVA_HEAP
oop StringTable::lookup_shared(const jchar* name, int len, unsigned int hash) { oop StringTable::lookup_shared(const jchar* name, int len, unsigned int hash) {

View file

@ -881,14 +881,3 @@ void SymboltableDCmd::execute(DCmdSource source, TRAPS) {
_verbose.value()); _verbose.value());
VMThread::execute(&dumper); VMThread::execute(&dumper);
} }
int SymboltableDCmd::num_arguments() {
ResourceMark rm;
SymboltableDCmd* dcmd = new SymboltableDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}

View file

@ -2526,14 +2526,3 @@ void SystemDictionaryDCmd::execute(DCmdSource source, TRAPS) {
_verbose.value()); _verbose.value());
VMThread::execute(&dumper); VMThread::execute(&dumper);
} }
int SystemDictionaryDCmd::num_arguments() {
ResourceMark rm;
SystemDictionaryDCmd* dcmd = new SystemDictionaryDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}

View file

@ -219,17 +219,6 @@ void HelpDCmd::execute(DCmdSource source, TRAPS) {
} }
} }
int HelpDCmd::num_arguments() {
ResourceMark rm;
HelpDCmd* dcmd = new HelpDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
void VersionDCmd::execute(DCmdSource source, TRAPS) { void VersionDCmd::execute(DCmdSource source, TRAPS) {
output()->print_cr("%s version %s", VM_Version::vm_name(), output()->print_cr("%s version %s", VM_Version::vm_name(),
VM_Version::vm_release()); VM_Version::vm_release());
@ -258,17 +247,6 @@ void PrintVMFlagsDCmd::execute(DCmdSource source, TRAPS) {
} }
} }
int PrintVMFlagsDCmd::num_arguments() {
ResourceMark rm;
PrintVMFlagsDCmd* dcmd = new PrintVMFlagsDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
SetVMFlagDCmd::SetVMFlagDCmd(outputStream* output, bool heap) : SetVMFlagDCmd::SetVMFlagDCmd(outputStream* output, bool heap) :
DCmdWithParser(output, heap), DCmdWithParser(output, heap),
_flag("flag name", "The name of the flag we want to set", _flag("flag name", "The name of the flag we want to set",
@ -292,17 +270,6 @@ void SetVMFlagDCmd::execute(DCmdSource source, TRAPS) {
} }
} }
int SetVMFlagDCmd::num_arguments() {
ResourceMark rm;
SetVMFlagDCmd* dcmd = new SetVMFlagDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
void JVMTIDataDumpDCmd::execute(DCmdSource source, TRAPS) { void JVMTIDataDumpDCmd::execute(DCmdSource source, TRAPS) {
if (JvmtiExport::should_post_data_dump()) { if (JvmtiExport::should_post_data_dump()) {
JvmtiExport::post_data_dump(); JvmtiExport::post_data_dump();
@ -360,16 +327,6 @@ void JVMTIAgentLoadDCmd::execute(DCmdSource source, TRAPS) {
} }
} }
int JVMTIAgentLoadDCmd::num_arguments() {
ResourceMark rm;
JVMTIAgentLoadDCmd* dcmd = new JVMTIAgentLoadDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
#endif // INCLUDE_JVMTI #endif // INCLUDE_JVMTI
#endif // INCLUDE_SERVICES #endif // INCLUDE_SERVICES
@ -432,17 +389,6 @@ void VMUptimeDCmd::execute(DCmdSource source, TRAPS) {
output()->print_cr(" s"); output()->print_cr(" s");
} }
int VMUptimeDCmd::num_arguments() {
ResourceMark rm;
VMUptimeDCmd* dcmd = new VMUptimeDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
void VMInfoDCmd::execute(DCmdSource source, TRAPS) { void VMInfoDCmd::execute(DCmdSource source, TRAPS) {
VMError::print_vm_info(_output); VMError::print_vm_info(_output);
} }
@ -544,17 +490,6 @@ void HeapDumpDCmd::execute(DCmdSource source, TRAPS) {
dumper.dump(_filename.value(), output(), (int) level); dumper.dump(_filename.value(), output(), (int) level);
} }
int HeapDumpDCmd::num_arguments() {
ResourceMark rm;
HeapDumpDCmd* dcmd = new HeapDumpDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
ClassHistogramDCmd::ClassHistogramDCmd(outputStream* output, bool heap) : ClassHistogramDCmd::ClassHistogramDCmd(outputStream* output, bool heap) :
DCmdWithParser(output, heap), DCmdWithParser(output, heap),
_all("-all", "Inspect all objects, including unreachable objects", _all("-all", "Inspect all objects, including unreachable objects",
@ -568,17 +503,6 @@ void ClassHistogramDCmd::execute(DCmdSource source, TRAPS) {
VMThread::execute(&heapop); VMThread::execute(&heapop);
} }
int ClassHistogramDCmd::num_arguments() {
ResourceMark rm;
ClassHistogramDCmd* dcmd = new ClassHistogramDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
#endif // INCLUDE_SERVICES #endif // INCLUDE_SERVICES
ThreadDumpDCmd::ThreadDumpDCmd(outputStream* output, bool heap) : ThreadDumpDCmd::ThreadDumpDCmd(outputStream* output, bool heap) :
@ -603,17 +527,6 @@ void ThreadDumpDCmd::execute(DCmdSource source, TRAPS) {
VMThread::execute(&op3); VMThread::execute(&op3);
} }
int ThreadDumpDCmd::num_arguments() {
ResourceMark rm;
ThreadDumpDCmd* dcmd = new ThreadDumpDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
// Enhanced JMX Agent support // Enhanced JMX Agent support
JMXStartRemoteDCmd::JMXStartRemoteDCmd(outputStream *output, bool heap_allocated) : JMXStartRemoteDCmd::JMXStartRemoteDCmd(outputStream *output, bool heap_allocated) :
@ -729,19 +642,6 @@ JMXStartRemoteDCmd::JMXStartRemoteDCmd(outputStream *output, bool heap_allocated
_dcmdparser.add_dcmd_option(&_jdp_name); _dcmdparser.add_dcmd_option(&_jdp_name);
} }
int JMXStartRemoteDCmd::num_arguments() {
ResourceMark rm;
JMXStartRemoteDCmd* dcmd = new JMXStartRemoteDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
void JMXStartRemoteDCmd::execute(DCmdSource source, TRAPS) { void JMXStartRemoteDCmd::execute(DCmdSource source, TRAPS) {
ResourceMark rm(THREAD); ResourceMark rm(THREAD);
HandleMark hm(THREAD); HandleMark hm(THREAD);
@ -929,17 +829,6 @@ void CodeHeapAnalyticsDCmd::execute(DCmdSource source, TRAPS) {
CompileBroker::print_heapinfo(output(), _function.value(), granularity); CompileBroker::print_heapinfo(output(), _function.value(), granularity);
} }
int CodeHeapAnalyticsDCmd::num_arguments() {
ResourceMark rm;
CodeHeapAnalyticsDCmd* dcmd = new CodeHeapAnalyticsDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
//---< END >--- CodeHeap State Analytics. //---< END >--- CodeHeap State Analytics.
EventLogDCmd::EventLogDCmd(outputStream* output, bool heap) : EventLogDCmd::EventLogDCmd(outputStream* output, bool heap) :
@ -970,17 +859,6 @@ void EventLogDCmd::execute(DCmdSource source, TRAPS) {
} }
} }
int EventLogDCmd::num_arguments() {
ResourceMark rm;
EventLogDCmd* dcmd = new EventLogDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
void CompilerDirectivesPrintDCmd::execute(DCmdSource source, TRAPS) { void CompilerDirectivesPrintDCmd::execute(DCmdSource source, TRAPS) {
DirectivesStack::print(output()); DirectivesStack::print(output());
} }
@ -995,17 +873,6 @@ void CompilerDirectivesAddDCmd::execute(DCmdSource source, TRAPS) {
DirectivesParser::parse_from_file(_filename.value(), output()); DirectivesParser::parse_from_file(_filename.value(), output());
} }
int CompilerDirectivesAddDCmd::num_arguments() {
ResourceMark rm;
CompilerDirectivesAddDCmd* dcmd = new CompilerDirectivesAddDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
void CompilerDirectivesRemoveDCmd::execute(DCmdSource source, TRAPS) { void CompilerDirectivesRemoveDCmd::execute(DCmdSource source, TRAPS) {
DirectivesStack::pop(1); DirectivesStack::pop(1);
} }
@ -1032,18 +899,6 @@ void ClassHierarchyDCmd::execute(DCmdSource source, TRAPS) {
_print_subclasses.value(), _classname.value()); _print_subclasses.value(), _classname.value());
VMThread::execute(&printClassHierarchyOp); VMThread::execute(&printClassHierarchyOp);
} }
int ClassHierarchyDCmd::num_arguments() {
ResourceMark rm;
ClassHierarchyDCmd* dcmd = new ClassHierarchyDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
#endif #endif
class VM_DumpTouchedMethods : public VM_Operation { class VM_DumpTouchedMethods : public VM_Operation {
@ -1061,10 +916,6 @@ public:
} }
}; };
TouchedMethodsDCmd::TouchedMethodsDCmd(outputStream* output, bool heap) :
DCmdWithParser(output, heap)
{}
void TouchedMethodsDCmd::execute(DCmdSource source, TRAPS) { void TouchedMethodsDCmd::execute(DCmdSource source, TRAPS) {
if (!LogTouchedMethods) { if (!LogTouchedMethods) {
output()->print_cr("VM.print_touched_methods command requires -XX:+LogTouchedMethods"); output()->print_cr("VM.print_touched_methods command requires -XX:+LogTouchedMethods");
@ -1073,19 +924,11 @@ void TouchedMethodsDCmd::execute(DCmdSource source, TRAPS) {
VM_DumpTouchedMethods dumper(output()); VM_DumpTouchedMethods dumper(output());
VMThread::execute(&dumper); VMThread::execute(&dumper);
} }
int TouchedMethodsDCmd::num_arguments() {
return 0;
}
#if INCLUDE_JVMTI #if INCLUDE_JVMTI
extern "C" typedef char const* (JNICALL *debugInit_startDebuggingViaCommandPtr)(JNIEnv* env, jthread thread, char const** transport_name, extern "C" typedef char const* (JNICALL *debugInit_startDebuggingViaCommandPtr)(JNIEnv* env, jthread thread, char const** transport_name,
char const** address, jboolean* first_start); char const** address, jboolean* first_start);
static debugInit_startDebuggingViaCommandPtr dvc_start_ptr = NULL; static debugInit_startDebuggingViaCommandPtr dvc_start_ptr = NULL;
DebugOnCmdStartDCmd::DebugOnCmdStartDCmd(outputStream* output, bool heap) : DCmdWithParser(output, heap) {
}
void DebugOnCmdStartDCmd::execute(DCmdSource source, TRAPS) { void DebugOnCmdStartDCmd::execute(DCmdSource source, TRAPS) {
char const* transport = NULL; char const* transport = NULL;
char const* addr = NULL; char const* addr = NULL;

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -52,7 +52,6 @@ public:
"'help all' will show help for all commands."; "'help all' will show help for all commands.";
} }
static const char* impact() { return "Low"; } static const char* impact() { return "Low"; }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -69,7 +68,6 @@ public:
"java.vm.version", "read"}; "java.vm.version", "read"};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -86,7 +84,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS) { virtual void execute(DCmdSource source, TRAPS) {
Arguments::print_on(_output); Arguments::print_on(_output);
} }
@ -108,7 +105,6 @@ public:
"*", "read"}; "*", "read"};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -130,7 +126,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -153,7 +148,6 @@ public:
"control", NULL}; "control", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -172,7 +166,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -194,7 +187,6 @@ public:
"control", NULL}; "control", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
#endif // INCLUDE_JVMTI #endif // INCLUDE_JVMTI
@ -217,9 +209,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() {
return 0;
};
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -235,7 +224,6 @@ public:
static const char* impact() { static const char* impact() {
return "Low"; return "Low";
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -252,7 +240,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -266,7 +253,6 @@ public:
static const char* impact() { static const char* impact() {
return "Medium: Depends on Java heap size and content."; return "Medium: Depends on Java heap size and content.";
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -280,7 +266,6 @@ public:
static const char* impact() { static const char* impact() {
return "Medium: Depends on Java content."; return "Medium: Depends on Java content.";
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -294,7 +279,6 @@ public:
static const char* impact() { static const char* impact() {
return "Medium"; return "Medium";
} }
static int num_arguments() { return 0; }
static const JavaPermission permission() { static const JavaPermission permission() {
JavaPermission p = {"java.lang.management.ManagementPermission", JavaPermission p = {"java.lang.management.ManagementPermission",
"monitor", NULL}; "monitor", NULL};
@ -314,7 +298,6 @@ public:
static const char* impact() { static const char* impact() {
return "Medium"; return "Medium";
} }
static int num_arguments() { return 0; }
static const JavaPermission permission() { static const JavaPermission permission() {
JavaPermission p = {"java.lang.management.ManagementPermission", JavaPermission p = {"java.lang.management.ManagementPermission",
"monitor", NULL}; "monitor", NULL};
@ -348,7 +331,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
#endif // INCLUDE_SERVICES #endif // INCLUDE_SERVICES
@ -373,7 +355,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -400,13 +381,12 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
class TouchedMethodsDCmd : public DCmdWithParser { class TouchedMethodsDCmd : public DCmd {
public: public:
TouchedMethodsDCmd(outputStream* output, bool heap); TouchedMethodsDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
static const char* name() { static const char* name() {
return "VM.print_touched_methods"; return "VM.print_touched_methods";
} }
@ -416,7 +396,6 @@ public:
static const char* impact() { static const char* impact() {
return "Medium: Depends on Java content."; return "Medium: Depends on Java content.";
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -439,7 +418,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -488,10 +466,7 @@ public:
return "Start remote management agent."; return "Start remote management agent.";
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
class JMXStartLocalDCmd : public DCmd { class JMXStartLocalDCmd : public DCmd {
@ -573,7 +548,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -595,7 +569,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
#endif // LINUX #endif // LINUX
@ -617,7 +590,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -638,7 +610,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -664,7 +635,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
//---< END >--- CodeHeap State Analytics. //---< END >--- CodeHeap State Analytics.
@ -686,7 +656,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -707,7 +676,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -730,7 +698,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -751,7 +718,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -817,7 +783,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -840,7 +805,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
@ -863,14 +827,13 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
#if INCLUDE_JVMTI #if INCLUDE_JVMTI
class DebugOnCmdStartDCmd : public DCmdWithParser { class DebugOnCmdStartDCmd : public DCmd {
public: public:
DebugOnCmdStartDCmd(outputStream* output, bool heap); DebugOnCmdStartDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
static const char* name() { static const char* name() {
return "VM.start_java_debugging"; return "VM.start_java_debugging";
} }
@ -884,7 +847,6 @@ public:
JavaPermission p = { "java.lang.management.ManagementPermission", "control", NULL }; JavaPermission p = { "java.lang.management.ManagementPermission", "control", NULL };
return p; return p;
} }
static int num_arguments() { return 0; }
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };
#endif // INCLUDE_JVMTI #endif // INCLUDE_JVMTI
@ -909,7 +871,6 @@ public:
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
}; };

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -27,10 +27,12 @@
#include "classfile/vmSymbols.hpp" #include "classfile/vmSymbols.hpp"
#include "memory/allocation.hpp" #include "memory/allocation.hpp"
#include "memory/resourceArea.hpp"
#include "runtime/arguments.hpp" #include "runtime/arguments.hpp"
#include "runtime/os.hpp" #include "runtime/os.hpp"
#include "runtime/vmThread.hpp" #include "runtime/vmThread.hpp"
#include "utilities/ostream.hpp" #include "utilities/ostream.hpp"
#include <type_traits>
enum DCmdSource { enum DCmdSource {
@ -274,6 +276,10 @@ public:
JavaPermission p = {NULL, NULL, NULL}; JavaPermission p = {NULL, NULL, NULL};
return p; return p;
} }
// num_arguments() is used by the DCmdFactoryImpl::get_num_arguments() template functions.
// - For subclasses of DCmdWithParser, it's calculated by DCmdParser::num_arguments().
// - Other subclasses of DCmd have zero arguments by default. You can change this
// by defining your own version of MyDCmd::num_arguments().
static int num_arguments() { return 0; } static int num_arguments() { return 0; }
outputStream* output() const { return _output; } outputStream* output() const { return _output; }
bool is_heap_allocated() const { return _is_heap_allocated; } bool is_heap_allocated() const { return _is_heap_allocated; }
@ -321,6 +327,9 @@ public:
virtual void print_help(const char* name) const; virtual void print_help(const char* name) const;
virtual GrowableArray<const char*>* argument_name_array() const; virtual GrowableArray<const char*>* argument_name_array() const;
virtual GrowableArray<DCmdArgumentInfo*>* argument_info_array() const; virtual GrowableArray<DCmdArgumentInfo*>* argument_info_array() const;
DCmdParser* dcmdparser() {
return &_dcmdparser;
}
}; };
class DCmdMark : public StackObj { class DCmdMark : public StackObj {
@ -404,7 +413,7 @@ private:
template <class DCmdClass> class DCmdFactoryImpl : public DCmdFactory { template <class DCmdClass> class DCmdFactoryImpl : public DCmdFactory {
public: public:
DCmdFactoryImpl(uint32_t flags, bool enabled, bool hidden) : DCmdFactoryImpl(uint32_t flags, bool enabled, bool hidden) :
DCmdFactory(DCmdClass::num_arguments(), flags, enabled, hidden) { } DCmdFactory(get_num_arguments<DCmdClass>(), flags, enabled, hidden) { }
// Returns a resourceArea allocated instance // Returns a resourceArea allocated instance
DCmd* create_resource_instance(outputStream* output) const { DCmd* create_resource_instance(outputStream* output) const {
return new DCmdClass(output, false); return new DCmdClass(output, false);
@ -424,6 +433,24 @@ public:
const char* disabled_message() const { const char* disabled_message() const {
return DCmdClass::disabled_message(); return DCmdClass::disabled_message();
} }
private:
template <typename T, ENABLE_IF(!std::is_base_of<DCmdWithParser, T>::value)>
static int get_num_arguments() {
return T::num_arguments();
}
template <typename T, ENABLE_IF(std::is_base_of<DCmdWithParser, T>::value)>
static int get_num_arguments() {
ResourceMark rm;
DCmdClass* dcmd = new DCmdClass(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->dcmdparser()->num_arguments();
} else {
return 0;
}
}
}; };
// This class provides a convenient way to register Dcmds, without a need to change // This class provides a convenient way to register Dcmds, without a need to change

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -160,17 +160,6 @@ void NMTDCmd::execute(DCmdSource source, TRAPS) {
} }
} }
int NMTDCmd::num_arguments() {
ResourceMark rm;
NMTDCmd* dcmd = new NMTDCmd(NULL, false);
if (dcmd != NULL) {
DCmdMark mark(dcmd);
return dcmd->_dcmdparser.num_arguments();
} else {
return 0;
}
}
void NMTDCmd::report(bool summaryOnly, size_t scale_unit) { void NMTDCmd::report(bool summaryOnly, size_t scale_unit) {
MemBaseline baseline; MemBaseline baseline;
if (baseline.baseline(summaryOnly)) { if (baseline.baseline(summaryOnly)) {

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -60,7 +60,6 @@ class NMTDCmd: public DCmdWithParser {
"monitor", NULL}; "monitor", NULL};
return p; return p;
} }
static int num_arguments();
virtual void execute(DCmdSource source, TRAPS); virtual void execute(DCmdSource source, TRAPS);
private: private: