mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8264565: Templatize num_arguments() functions of DCmd subclasses
Reviewed-by: coleenp, dholmes
This commit is contained in:
parent
54b4070da7
commit
ff223530b6
8 changed files with 36 additions and 250 deletions
|
@ -698,17 +698,6 @@ void StringtableDCmd::execute(DCmdSource source, TRAPS) {
|
|||
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
|
||||
#if INCLUDE_CDS_JAVA_HEAP
|
||||
oop StringTable::lookup_shared(const jchar* name, int len, unsigned int hash) {
|
||||
|
|
|
@ -881,14 +881,3 @@ void SymboltableDCmd::execute(DCmdSource source, TRAPS) {
|
|||
_verbose.value());
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2526,14 +2526,3 @@ void SystemDictionaryDCmd::execute(DCmdSource source, TRAPS) {
|
|||
_verbose.value());
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
output()->print_cr("%s version %s", VM_Version::vm_name(),
|
||||
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) :
|
||||
DCmdWithParser(output, heap),
|
||||
_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) {
|
||||
if (JvmtiExport::should_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_SERVICES
|
||||
|
||||
|
@ -432,17 +389,6 @@ void VMUptimeDCmd::execute(DCmdSource source, TRAPS) {
|
|||
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) {
|
||||
VMError::print_vm_info(_output);
|
||||
}
|
||||
|
@ -544,17 +490,6 @@ void HeapDumpDCmd::execute(DCmdSource source, TRAPS) {
|
|||
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) :
|
||||
DCmdWithParser(output, heap),
|
||||
_all("-all", "Inspect all objects, including unreachable objects",
|
||||
|
@ -568,17 +503,6 @@ void ClassHistogramDCmd::execute(DCmdSource source, TRAPS) {
|
|||
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
|
||||
|
||||
ThreadDumpDCmd::ThreadDumpDCmd(outputStream* output, bool heap) :
|
||||
|
@ -603,17 +527,6 @@ void ThreadDumpDCmd::execute(DCmdSource source, TRAPS) {
|
|||
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
|
||||
|
||||
JMXStartRemoteDCmd::JMXStartRemoteDCmd(outputStream *output, bool heap_allocated) :
|
||||
|
@ -729,19 +642,6 @@ JMXStartRemoteDCmd::JMXStartRemoteDCmd(outputStream *output, bool heap_allocated
|
|||
_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) {
|
||||
ResourceMark rm(THREAD);
|
||||
HandleMark hm(THREAD);
|
||||
|
@ -929,17 +829,6 @@ void CodeHeapAnalyticsDCmd::execute(DCmdSource source, TRAPS) {
|
|||
|
||||
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.
|
||||
|
||||
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) {
|
||||
DirectivesStack::print(output());
|
||||
}
|
||||
|
@ -995,17 +873,6 @@ void CompilerDirectivesAddDCmd::execute(DCmdSource source, TRAPS) {
|
|||
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) {
|
||||
DirectivesStack::pop(1);
|
||||
}
|
||||
|
@ -1032,18 +899,6 @@ void ClassHierarchyDCmd::execute(DCmdSource source, TRAPS) {
|
|||
_print_subclasses.value(), _classname.value());
|
||||
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
|
||||
|
||||
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) {
|
||||
if (!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());
|
||||
VMThread::execute(&dumper);
|
||||
}
|
||||
|
||||
int TouchedMethodsDCmd::num_arguments() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if INCLUDE_JVMTI
|
||||
extern "C" typedef char const* (JNICALL *debugInit_startDebuggingViaCommandPtr)(JNIEnv* env, jthread thread, char const** transport_name,
|
||||
char const** address, jboolean* first_start);
|
||||
static debugInit_startDebuggingViaCommandPtr dvc_start_ptr = NULL;
|
||||
|
||||
DebugOnCmdStartDCmd::DebugOnCmdStartDCmd(outputStream* output, bool heap) : DCmdWithParser(output, heap) {
|
||||
}
|
||||
|
||||
void DebugOnCmdStartDCmd::execute(DCmdSource source, TRAPS) {
|
||||
char const* transport = NULL;
|
||||
char const* addr = NULL;
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
* 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.";
|
||||
}
|
||||
static const char* impact() { return "Low"; }
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -69,7 +68,6 @@ public:
|
|||
"java.vm.version", "read"};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -86,7 +84,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS) {
|
||||
Arguments::print_on(_output);
|
||||
}
|
||||
|
@ -108,7 +105,6 @@ public:
|
|||
"*", "read"};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -130,7 +126,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -153,7 +148,6 @@ public:
|
|||
"control", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -172,7 +166,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -194,7 +187,6 @@ public:
|
|||
"control", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
#endif // INCLUDE_JVMTI
|
||||
|
@ -217,9 +209,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() {
|
||||
return 0;
|
||||
};
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -235,7 +224,6 @@ public:
|
|||
static const char* impact() {
|
||||
return "Low";
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -252,7 +240,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -266,7 +253,6 @@ public:
|
|||
static const char* impact() {
|
||||
return "Medium: Depends on Java heap size and content.";
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -280,7 +266,6 @@ public:
|
|||
static const char* impact() {
|
||||
return "Medium: Depends on Java content.";
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -294,7 +279,6 @@ public:
|
|||
static const char* impact() {
|
||||
return "Medium";
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
static const JavaPermission permission() {
|
||||
JavaPermission p = {"java.lang.management.ManagementPermission",
|
||||
"monitor", NULL};
|
||||
|
@ -314,7 +298,6 @@ public:
|
|||
static const char* impact() {
|
||||
return "Medium";
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
static const JavaPermission permission() {
|
||||
JavaPermission p = {"java.lang.management.ManagementPermission",
|
||||
"monitor", NULL};
|
||||
|
@ -348,7 +331,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
#endif // INCLUDE_SERVICES
|
||||
|
@ -373,7 +355,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -400,13 +381,12 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
class TouchedMethodsDCmd : public DCmdWithParser {
|
||||
class TouchedMethodsDCmd : public DCmd {
|
||||
public:
|
||||
TouchedMethodsDCmd(outputStream* output, bool heap);
|
||||
TouchedMethodsDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
|
||||
static const char* name() {
|
||||
return "VM.print_touched_methods";
|
||||
}
|
||||
|
@ -416,7 +396,6 @@ public:
|
|||
static const char* impact() {
|
||||
return "Medium: Depends on Java content.";
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -439,7 +418,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -488,10 +466,7 @@ public:
|
|||
return "Start remote management agent.";
|
||||
}
|
||||
|
||||
static int num_arguments();
|
||||
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
|
||||
};
|
||||
|
||||
class JMXStartLocalDCmd : public DCmd {
|
||||
|
@ -573,7 +548,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -595,7 +569,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
#endif // LINUX
|
||||
|
@ -617,7 +590,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -638,7 +610,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -664,7 +635,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
//---< END >--- CodeHeap State Analytics.
|
||||
|
@ -686,7 +656,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -707,7 +676,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -730,7 +698,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -751,7 +718,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -817,7 +783,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -840,7 +805,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
@ -863,14 +827,13 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
#if INCLUDE_JVMTI
|
||||
class DebugOnCmdStartDCmd : public DCmdWithParser {
|
||||
class DebugOnCmdStartDCmd : public DCmd {
|
||||
public:
|
||||
DebugOnCmdStartDCmd(outputStream* output, bool heap);
|
||||
DebugOnCmdStartDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
|
||||
static const char* name() {
|
||||
return "VM.start_java_debugging";
|
||||
}
|
||||
|
@ -884,7 +847,6 @@ public:
|
|||
JavaPermission p = { "java.lang.management.ManagementPermission", "control", NULL };
|
||||
return p;
|
||||
}
|
||||
static int num_arguments() { return 0; }
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
#endif // INCLUDE_JVMTI
|
||||
|
@ -909,7 +871,6 @@ public:
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
};
|
||||
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -27,10 +27,12 @@
|
|||
|
||||
#include "classfile/vmSymbols.hpp"
|
||||
#include "memory/allocation.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "runtime/arguments.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
#include "runtime/vmThread.hpp"
|
||||
#include "utilities/ostream.hpp"
|
||||
#include <type_traits>
|
||||
|
||||
|
||||
enum DCmdSource {
|
||||
|
@ -274,6 +276,10 @@ public:
|
|||
JavaPermission p = {NULL, NULL, NULL};
|
||||
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; }
|
||||
outputStream* output() const { return _output; }
|
||||
bool is_heap_allocated() const { return _is_heap_allocated; }
|
||||
|
@ -321,6 +327,9 @@ public:
|
|||
virtual void print_help(const char* name) const;
|
||||
virtual GrowableArray<const char*>* argument_name_array() const;
|
||||
virtual GrowableArray<DCmdArgumentInfo*>* argument_info_array() const;
|
||||
DCmdParser* dcmdparser() {
|
||||
return &_dcmdparser;
|
||||
}
|
||||
};
|
||||
|
||||
class DCmdMark : public StackObj {
|
||||
|
@ -404,7 +413,7 @@ private:
|
|||
template <class DCmdClass> class DCmdFactoryImpl : public DCmdFactory {
|
||||
public:
|
||||
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
|
||||
DCmd* create_resource_instance(outputStream* output) const {
|
||||
return new DCmdClass(output, false);
|
||||
|
@ -424,6 +433,24 @@ public:
|
|||
const char* disabled_message() const {
|
||||
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
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
* 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) {
|
||||
MemBaseline baseline;
|
||||
if (baseline.baseline(summaryOnly)) {
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -60,7 +60,6 @@ class NMTDCmd: public DCmdWithParser {
|
|||
"monitor", NULL};
|
||||
return p;
|
||||
}
|
||||
static int num_arguments();
|
||||
virtual void execute(DCmdSource source, TRAPS);
|
||||
|
||||
private:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue