#
# Copyright (c) 2018, 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
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
module name jdk.management.jfr
header exports jdk/management/jfr requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;jdk.jfr\u0020;flags\u0020;0,name\u0020;jdk.management\u0020;flags\u0020;0,name\u0020;java.management\u0020;flags\u0020;20 provides interface\u0020;sun/management/spi/PlatformMBeanProvider\u0020;impls\u0020;jdk/management/jfr/internal/FlightRecorderMXBeanProvider target linux-amd64 flags 8000

class name jdk/management/jfr/ConfigurationInfo
header extends java/lang/Object flags 31
method name getProvider descriptor ()Ljava/lang/String; flags 1
method name getContents descriptor ()Ljava/lang/String; flags 1
method name getSettings descriptor ()Ljava/util/Map; flags 1 signature ()Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
method name getLabel descriptor ()Ljava/lang/String; flags 1
method name getName descriptor ()Ljava/lang/String; flags 1
method name getDescription descriptor ()Ljava/lang/String; flags 1
method name from descriptor (Ljavax/management/openmbean/CompositeData;)Ljdk/management/jfr/ConfigurationInfo; flags 9
method name toString descriptor ()Ljava/lang/String; flags 1

class name jdk/management/jfr/EventTypeInfo
header extends java/lang/Object flags 31
method name getLabel descriptor ()Ljava/lang/String; flags 1
method name getCategoryNames descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<Ljava/lang/String;>;
method name getId descriptor ()J flags 1
method name getName descriptor ()Ljava/lang/String; flags 1
method name getDescription descriptor ()Ljava/lang/String; flags 1
method name getSettingDescriptors descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<Ljdk/management/jfr/SettingDescriptorInfo;>;
method name toString descriptor ()Ljava/lang/String; flags 1
method name from descriptor (Ljavax/management/openmbean/CompositeData;)Ljdk/management/jfr/EventTypeInfo; flags 9

class name jdk/management/jfr/FlightRecorderMXBean
header extends java/lang/Object implements java/lang/management/PlatformManagedObject flags 601
field name MXBEAN_NAME descriptor Ljava/lang/String; constantValue jdk.management.jfr:type=FlightRecorder flags 19
method name newRecording descriptor ()J thrownTypes java/lang/IllegalStateException,java/lang/SecurityException flags 401
method name takeSnapshot descriptor ()J flags 401
method name cloneRecording descriptor (JZ)J thrownTypes java/lang/IllegalArgumentException,java/lang/SecurityException flags 401
method name startRecording descriptor (J)V thrownTypes java/lang/IllegalStateException,java/lang/SecurityException flags 401
method name stopRecording descriptor (J)Z thrownTypes java/lang/IllegalArgumentException,java/lang/IllegalStateException,java/lang/SecurityException flags 401
method name closeRecording descriptor (J)V thrownTypes java/io/IOException flags 401
method name openStream descriptor (JLjava/util/Map;)J thrownTypes java/io/IOException flags 401 signature (JLjava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)J
method name closeStream descriptor (J)V thrownTypes java/io/IOException flags 401
method name readStream descriptor (J)[B thrownTypes java/io/IOException flags 401
method name getRecordingOptions descriptor (J)Ljava/util/Map; thrownTypes java/lang/IllegalArgumentException flags 401 signature (J)Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
method name getRecordingSettings descriptor (J)Ljava/util/Map; thrownTypes java/lang/IllegalArgumentException flags 401 signature (J)Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
method name setConfiguration descriptor (JLjava/lang/String;)V thrownTypes java/lang/IllegalArgumentException flags 401
method name setPredefinedConfiguration descriptor (JLjava/lang/String;)V thrownTypes java/lang/IllegalArgumentException flags 401
method name setRecordingSettings descriptor (JLjava/util/Map;)V thrownTypes java/lang/IllegalArgumentException flags 401 signature (JLjava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)V
method name setRecordingOptions descriptor (JLjava/util/Map;)V thrownTypes java/lang/IllegalArgumentException flags 401 signature (JLjava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)V
method name getRecordings descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<Ljdk/management/jfr/RecordingInfo;>;
method name getConfigurations descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<Ljdk/management/jfr/ConfigurationInfo;>;
method name getEventTypes descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<Ljdk/management/jfr/EventTypeInfo;>;
method name copyTo descriptor (JLjava/lang/String;)V thrownTypes java/io/IOException,java/lang/SecurityException flags 401

class name jdk/management/jfr/RecordingInfo
header extends java/lang/Object flags 31
method name getName descriptor ()Ljava/lang/String; flags 1
method name getId descriptor ()J flags 1
method name getDumpOnExit descriptor ()Z flags 1
method name getMaxAge descriptor ()J flags 1
method name getMaxSize descriptor ()J flags 1
method name getState descriptor ()Ljava/lang/String; flags 1
method name getStartTime descriptor ()J flags 1
method name getStopTime descriptor ()J flags 1
method name getSettings descriptor ()Ljava/util/Map; flags 1 signature ()Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
method name getDestination descriptor ()Ljava/lang/String; flags 1
method name toString descriptor ()Ljava/lang/String; flags 1
method name getSize descriptor ()J flags 1
method name isToDisk descriptor ()Z flags 1
method name getDuration descriptor ()J flags 1
method name from descriptor (Ljavax/management/openmbean/CompositeData;)Ljdk/management/jfr/RecordingInfo; flags 9

class name jdk/management/jfr/SettingDescriptorInfo
header extends java/lang/Object flags 31
method name getLabel descriptor ()Ljava/lang/String; flags 1
method name getName descriptor ()Ljava/lang/String; flags 1
method name getDescription descriptor ()Ljava/lang/String; flags 1
method name getTypeName descriptor ()Ljava/lang/String; flags 1
method name getContentType descriptor ()Ljava/lang/String; flags 1
method name getDefaultValue descriptor ()Ljava/lang/String; flags 1
method name from descriptor (Ljavax/management/openmbean/CompositeData;)Ljdk/management/jfr/SettingDescriptorInfo; flags 9
method name toString descriptor ()Ljava/lang/String; flags 1

