PageRenderTime 56ms CodeModel.GetById 22ms app.highlight 29ms RepoModel.GetById 0ms app.codeStats 0ms

/ui/src/com/bluemarsh/jswat/ui/components/DebuggeeInfoPanel.java

http://jswat.googlecode.com/
Java | 574 lines | 455 code | 57 blank | 62 comment | 16 complexity | 1b100a7d2a47935008613b2b25545030 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception
  1/*
  2 * The contents of this file are subject to the terms of the Common Development
  3 * and Distribution License (the License). You may not use this file except in
  4 * compliance with the License.
  5 *
  6 * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
  7 * or http://www.netbeans.org/cddl.txt.
  8 *
  9 * When distributing Covered Code, include this CDDL Header Notice in each file
 10 * and include the License file at http://www.netbeans.org/cddl.txt.
 11 * If applicable, add the following below the CDDL Header, with the fields
 12 * enclosed by brackets [] replaced by your own identifying information:
 13 * "Portions Copyrighted [year] [name of copyright owner]"
 14 *
 15 * The Original Software is JSwat. The Initial Developer of the Original
 16 * Software is Nathan L. Fiedler. Portions created by Nathan L. Fiedler
 17 * are Copyright (C) 2005-2010. All Rights Reserved.
 18 *
 19 * Contributor(s): Nathan L. Fiedler.
 20 *
 21 * $Id: DebuggeeInfoPanel.java 288 2010-11-21 02:59:13Z nathanfiedler $
 22 */
 23package com.bluemarsh.jswat.ui.components;
 24
 25import com.bluemarsh.jswat.core.context.ContextProvider;
 26import com.bluemarsh.jswat.core.context.DebuggingContext;
 27import com.bluemarsh.jswat.core.session.Session;
 28import com.bluemarsh.jswat.core.util.Classes;
 29import com.sun.jdi.BooleanValue;
 30import com.sun.jdi.Bootstrap;
 31import com.sun.jdi.ClassType;
 32import com.sun.jdi.IncompatibleThreadStateException;
 33import com.sun.jdi.Method;
 34import com.sun.jdi.ObjectReference;
 35import com.sun.jdi.ReferenceType;
 36import com.sun.jdi.StringReference;
 37import com.sun.jdi.ThreadReference;
 38import com.sun.jdi.Value;
 39import com.sun.jdi.VirtualMachine;
 40import com.sun.jdi.VirtualMachineManager;
 41import java.util.ArrayList;
 42import java.util.Collections;
 43import java.util.LinkedList;
 44import java.util.List;
 45import java.util.concurrent.ExecutionException;
 46import org.openide.DialogDisplayer;
 47import org.openide.NotifyDescriptor;
 48import org.openide.util.NbBundle;
 49
 50/**
 51 * Class DebuggeeInfoPanel displays various bits of information about the
 52 * debuggee to which the Session is connected.
 53 *
 54 * @author  Nathan Fiedler
 55 */
 56public class DebuggeeInfoPanel extends javax.swing.JPanel {
 57
 58    /** silence the compiler warnings */
 59    private static final long serialVersionUID = 1L;
 60    /** Emtpy list of Value objects. */
 61    private static List<Value> EMTPY_ARGUMENTS = new LinkedList<Value>();
 62
 63    /**
 64     * Creates new form DebuggeeInfoPanel.
 65     */
 66    public DebuggeeInfoPanel() {
 67        initComponents();
 68    }
 69
 70    /**
 71     * Constructs a dialog and displays this panel as its primary component.
 72     *
 73     * @param  session  Session to be displayed.
 74     */
 75    public void display(Session session) {
 76        VirtualMachineManager vmm = Bootstrap.virtualMachineManager();
 77        String str = String.valueOf(vmm.majorInterfaceVersion()) + '.'
 78                + String.valueOf(vmm.minorInterfaceVersion());
 79        jdiVersionTextField.setText(str);
 80        if (session.isConnected()) {
 81            VirtualMachine vm = session.getConnection().getVM();
 82            jvmVersionTextField.setText(vm.version());
 83            jvmDescriptionTextArea.setText(vm.description());
 84            displaySupport(vm);
 85        }
 86
 87        displayProperties(session);
 88
 89        NotifyDescriptor desc = new NotifyDescriptor.Message(this);
 90        desc.setTitle(NbBundle.getMessage(DebuggeeInfoPanel.class,
 91                "LBL_DebuggeeInfo_Title"));
 92        DialogDisplayer.getDefault().notify(desc);
 93    }
 94
 95    /**
 96     * Retrieves the system properties defined in the debuggee to which the
 97     * given session is connected.
 98     *
 99     * @param  session  Session for which to get properties.
100     */
101    private void displayProperties(Session session) {
102        StringBuilder sb = new StringBuilder(1024);
103        DebuggingContext dc = ContextProvider.getContext(session);
104        ThreadReference thread = dc.getThread();
105        if (thread == null) {
106            sb.append(NbBundle.getMessage(DebuggeeInfoPanel.class,
107                    "ERR_DebuggeeInfo_IncompatibleThread"));
108        } else {
109            VirtualMachine vm = session.getConnection().getVM();
110            List<ReferenceType> classes = vm.classesByName("java.lang.System");
111            // We assume it exists and is a real class.
112            ClassType type = (ClassType) classes.get(0);
113            List<Method> methods = type.methodsByName("getProperties");
114            if (methods.isEmpty()) {
115                // KVM does not have a System.getProperties() method.
116                sb.append(NbBundle.getMessage(DebuggeeInfoPanel.class,
117                        "ERR_DebuggeeInfo_NoPropertiesMethod"));
118            } else {
119                Method method = methods.get(0);
120                try {
121                    ObjectReference props = (ObjectReference) Classes.invokeMethod(
122                            null, type, thread, method, EMTPY_ARGUMENTS);
123
124                    // Get the property names enumerator.
125                    type = (ClassType) props.referenceType();
126                    methods = type.methodsByName("propertyNames", "()Ljava/util/Enumeration;");
127                    if (methods.isEmpty()) {
128                        throw new IllegalArgumentException("no propertyNames() method");
129                    }
130                    method = methods.get(0);
131                    ObjectReference iter = (ObjectReference) Classes.invokeMethod(
132                            props, type, thread, method, EMTPY_ARGUMENTS);
133
134                    ClassType iterType = (ClassType) iter.referenceType();
135                    methods = iterType.methodsByName("hasMoreElements", "()Z");
136                    if (methods.isEmpty()) {
137                        throw new IllegalArgumentException("no hasMoreElements() method");
138                    }
139                    Method hasNextMeth = methods.get(0);
140
141                    methods = iterType.methodsByName("nextElement", "()Ljava/lang/Object;");
142                    if (methods.isEmpty()) {
143                        throw new IllegalArgumentException("no nextElement() method");
144                    }
145                    Method nextMeth = methods.get(0);
146
147                    BooleanValue bool = (BooleanValue) Classes.invokeMethod(
148                            iter, iterType, thread, hasNextMeth, EMTPY_ARGUMENTS);
149
150                    // Enumerate the property names, and then sort them.
151                    List<String> propNames = new LinkedList<String>();
152                    while (bool != null && bool.value()) {
153                        StringReference sr = (StringReference) Classes.invokeMethod(
154                                iter, iterType, thread, nextMeth, EMTPY_ARGUMENTS);
155                        propNames.add(sr.value());
156                        bool = (BooleanValue) Classes.invokeMethod(
157                                iter, iterType, thread, hasNextMeth, EMTPY_ARGUMENTS);
158                    }
159                    Collections.sort(propNames);
160
161                    // Display the property values.
162                    type = (ClassType) props.referenceType();
163                    methods = type.methodsByName("getProperty",
164                            "(Ljava/lang/String;)Ljava/lang/String;");
165                    if (methods.isEmpty()) {
166                        throw new IllegalArgumentException("no getProperty() method");
167                    }
168                    method = methods.get(0);
169                    List<Value> args = new ArrayList<Value>(1);
170                    args.add(vm.mirrorOf("dummy"));
171                    for (String prop : propNames) {
172                        args.set(0, vm.mirrorOf(prop));
173                        StringReference sr = (StringReference) Classes.invokeMethod(
174                                props, type, thread, method, args);
175                        sb.append(prop);
176                        sb.append(" = ");
177                        sb.append(sr.value());
178                        sb.append('\n');
179                    }
180                } catch (ExecutionException ee) {
181                    Throwable t = ee.getCause();
182                    if (t instanceof IncompatibleThreadStateException) {
183                        sb.append(NbBundle.getMessage(DebuggeeInfoPanel.class,
184                                "ERR_DebuggeeInfo_IncompatibleThread"));
185                    } else {
186                        sb.append(t.toString());
187                    }
188                } catch (Exception e) {
189                    sb.append(e.toString());
190                }
191            }
192        }
193        propsTextArea.setText(sb.toString());
194    }
195
196    /**
197     * Displays the supported operations of the given virtual machine.
198     *
199     * @param  vm  virtual machine to query.
200     */
201    private void displaySupport(VirtualMachine vm) {
202        addMethodCheckBox.setSelected(vm.canAddMethod());
203        beModifiedCheckBox.setSelected(vm.canBeModified());
204        forceEarlyReturnCheckBox.setSelected(vm.canForceEarlyReturn());
205        getBytecodesCheckBox.setSelected(vm.canGetBytecodes());
206        getGetClassFileVersionCheckBox.setSelected(vm.canGetClassFileVersion());
207        getGetConstantPoolCheckBox.setSelected(vm.canGetConstantPool());
208        getCurrentContendedMonitorCheckBox.setSelected(vm.canGetCurrentContendedMonitor());
209        getInstanceInfoCheckBox.setSelected(vm.canGetInstanceInfo());
210        getMethodReturnCheckBox.setSelected(vm.canGetMethodReturnValues());
211        getMonitorFrameInfoCheckBox.setSelected(vm.canGetMonitorFrameInfo());
212        getMonitorInfoCheckBox.setSelected(vm.canGetMonitorInfo());
213        getOwnedMonitorInfoCheckBox.setSelected(vm.canGetOwnedMonitorInfo());
214        getSourceDebugExtensionCheckBox.setSelected(vm.canGetSourceDebugExtension());
215        getSyntheticAttributeCheckBox.setSelected(vm.canGetSyntheticAttribute());
216        popFramesCheckBox.setSelected(vm.canPopFrames());
217        redefineClassesCheckBox.setSelected(vm.canRedefineClasses());
218        requestMonitorEventCheckBox.setSelected(vm.canRequestMonitorEvents());
219        requestVMDeathEventCheckBox.setSelected(vm.canRequestVMDeathEvent());
220        unrestrictedlyRedefineClassesCheckBox.setSelected(vm.canUnrestrictedlyRedefineClasses());
221        useInstanceFiltersCheckBox.setSelected(vm.canUseInstanceFilters());
222        useSourceFiltersCheckBox.setSelected(vm.canUseSourceNameFilters());
223        watchFieldAccessCheckBox.setSelected(vm.canWatchFieldAccess());
224        watchFieldModificationCheckBox.setSelected(vm.canWatchFieldModification());
225    }
226
227    /** This method is called from within the constructor to
228     * initialize the form.
229     * WARNING: Do NOT modify this code. The content of this method is
230     * always regenerated by the Form Editor.
231     */
232    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
233    private void initComponents() {
234        tabbedPane = new javax.swing.JTabbedPane();
235        versionPanel = new javax.swing.JPanel();
236        jdiVersionLabel = new javax.swing.JLabel();
237        jdiVersionTextField = new javax.swing.JTextField();
238        jvmVersionLabel = new javax.swing.JLabel();
239        jvmVersionTextField = new javax.swing.JTextField();
240        jvmDescriptionLabel = new javax.swing.JLabel();
241        jvmDescriptionScrollPane = new javax.swing.JScrollPane();
242        jvmDescriptionTextArea = new javax.swing.JTextArea();
243        propertiesPanel = new javax.swing.JPanel();
244        propsScrollPane = new javax.swing.JScrollPane();
245        propsTextArea = new javax.swing.JTextArea();
246        supportPanel = new javax.swing.JPanel();
247        addMethodCheckBox = new javax.swing.JCheckBox();
248        beModifiedCheckBox = new javax.swing.JCheckBox();
249        forceEarlyReturnCheckBox = new javax.swing.JCheckBox();
250        getBytecodesCheckBox = new javax.swing.JCheckBox();
251        getGetClassFileVersionCheckBox = new javax.swing.JCheckBox();
252        getGetConstantPoolCheckBox = new javax.swing.JCheckBox();
253        getCurrentContendedMonitorCheckBox = new javax.swing.JCheckBox();
254        getInstanceInfoCheckBox = new javax.swing.JCheckBox();
255        getMethodReturnCheckBox = new javax.swing.JCheckBox();
256        getMonitorFrameInfoCheckBox = new javax.swing.JCheckBox();
257        getMonitorInfoCheckBox = new javax.swing.JCheckBox();
258        getOwnedMonitorInfoCheckBox = new javax.swing.JCheckBox();
259        getSourceDebugExtensionCheckBox = new javax.swing.JCheckBox();
260        getSyntheticAttributeCheckBox = new javax.swing.JCheckBox();
261        popFramesCheckBox = new javax.swing.JCheckBox();
262        redefineClassesCheckBox = new javax.swing.JCheckBox();
263        requestMonitorEventCheckBox = new javax.swing.JCheckBox();
264        requestVMDeathEventCheckBox = new javax.swing.JCheckBox();
265        unrestrictedlyRedefineClassesCheckBox = new javax.swing.JCheckBox();
266        useInstanceFiltersCheckBox = new javax.swing.JCheckBox();
267        useSourceFiltersCheckBox = new javax.swing.JCheckBox();
268        watchFieldAccessCheckBox = new javax.swing.JCheckBox();
269        watchFieldModificationCheckBox = new javax.swing.JCheckBox();
270
271        setLayout(new java.awt.BorderLayout());
272
273        versionPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(12, 12, 12, 12));
274        jdiVersionLabel.setLabelFor(jdiVersionTextField);
275        jdiVersionLabel.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_JdiVersion"));
276
277        jdiVersionTextField.setEditable(false);
278
279        jvmVersionLabel.setLabelFor(jvmVersionTextField);
280        jvmVersionLabel.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_JvmVersion"));
281
282        jvmVersionTextField.setEditable(false);
283
284        jvmDescriptionLabel.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_JvmDesc"));
285
286        jvmDescriptionTextArea.setBackground(javax.swing.UIManager.getDefaults().getColor("TextField.inactiveBackground"));
287        jvmDescriptionTextArea.setEditable(false);
288        jvmDescriptionScrollPane.setViewportView(jvmDescriptionTextArea);
289
290        javax.swing.GroupLayout versionPanelLayout = new javax.swing.GroupLayout(versionPanel);
291        versionPanel.setLayout(versionPanelLayout);
292        versionPanelLayout.setHorizontalGroup(
293            versionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
294            .addGroup(versionPanelLayout.createSequentialGroup()
295                .addGroup(versionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
296                    .addComponent(jdiVersionLabel)
297                    .addComponent(jvmVersionLabel)
298                    .addComponent(jvmDescriptionLabel))
299                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
300                .addGroup(versionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
301                    .addGroup(versionPanelLayout.createSequentialGroup()
302                        .addGroup(versionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
303                            .addComponent(jvmVersionTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)
304                            .addComponent(jdiVersionTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE))
305                        .addGap(0, 0, 0))
306                    .addComponent(jvmDescriptionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)))
307        );
308        versionPanelLayout.setVerticalGroup(
309            versionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
310            .addGroup(versionPanelLayout.createSequentialGroup()
311                .addGroup(versionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
312                    .addComponent(jdiVersionLabel)
313                    .addComponent(jdiVersionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
314                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
315                .addGroup(versionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
316                    .addComponent(jvmVersionLabel)
317                    .addComponent(jvmVersionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
318                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
319                .addGroup(versionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
320                    .addGroup(versionPanelLayout.createSequentialGroup()
321                        .addComponent(jvmDescriptionLabel)
322                        .addContainerGap(211, Short.MAX_VALUE))
323                    .addComponent(jvmDescriptionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 226, Short.MAX_VALUE)))
324        );
325        tabbedPane.addTab(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_VersionsTab"), versionPanel);
326
327        propertiesPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(12, 12, 12, 12));
328        propsScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
329        propsTextArea.setBackground(javax.swing.UIManager.getDefaults().getColor("TextField.inactiveBackground"));
330        propsTextArea.setColumns(40);
331        propsTextArea.setEditable(false);
332        propsTextArea.setRows(10);
333        propsScrollPane.setViewportView(propsTextArea);
334
335        javax.swing.GroupLayout propertiesPanelLayout = new javax.swing.GroupLayout(propertiesPanel);
336        propertiesPanel.setLayout(propertiesPanelLayout);
337        propertiesPanelLayout.setHorizontalGroup(
338            propertiesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
339            .addComponent(propsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 510, Short.MAX_VALUE)
340        );
341        propertiesPanelLayout.setVerticalGroup(
342            propertiesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
343            .addComponent(propsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE)
344        );
345        tabbedPane.addTab(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_PropsTab"), propertiesPanel);
346
347        supportPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(12, 12, 12, 12));
348        addMethodCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanAddMethod"));
349        addMethodCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanAddMethod"));
350        addMethodCheckBox.setEnabled(false);
351
352        beModifiedCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanBeModified"));
353        beModifiedCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanBeModified"));
354        beModifiedCheckBox.setEnabled(false);
355
356        forceEarlyReturnCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanForceEarlyReturn"));
357        forceEarlyReturnCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanForceEarlyReturn"));
358        forceEarlyReturnCheckBox.setEnabled(false);
359
360        getBytecodesCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetBytecodes"));
361        getBytecodesCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetBytecodes"));
362        getBytecodesCheckBox.setEnabled(false);
363
364        getGetClassFileVersionCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetClassVersion"));
365        getGetClassFileVersionCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetClassVersion"));
366        getGetClassFileVersionCheckBox.setEnabled(false);
367
368        getGetConstantPoolCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetConstantPool"));
369        getGetConstantPoolCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetConstantPool"));
370        getGetConstantPoolCheckBox.setEnabled(false);
371
372        getCurrentContendedMonitorCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetCurrentContentedMonitor"));
373        getCurrentContendedMonitorCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetCurrentContentedMonitor"));
374        getCurrentContendedMonitorCheckBox.setEnabled(false);
375
376        getInstanceInfoCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetInstanceInfo"));
377        getInstanceInfoCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetInstanceInfo"));
378        getInstanceInfoCheckBox.setEnabled(false);
379
380        getMethodReturnCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetMethodReturn"));
381        getMethodReturnCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetMethodReturn"));
382        getMethodReturnCheckBox.setEnabled(false);
383
384        getMonitorFrameInfoCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetMonitorFrame"));
385        getMonitorFrameInfoCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetMonitorFrame"));
386        getMonitorFrameInfoCheckBox.setEnabled(false);
387
388        getMonitorInfoCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetMonitorInfo"));
389        getMonitorInfoCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetMonitorInfo"));
390        getMonitorInfoCheckBox.setEnabled(false);
391
392        getOwnedMonitorInfoCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetOwnedMonitorInfo"));
393        getOwnedMonitorInfoCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetOwnedMonitorInfo"));
394        getOwnedMonitorInfoCheckBox.setEnabled(false);
395
396        getSourceDebugExtensionCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetSourceDebugExtension"));
397        getSourceDebugExtensionCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetSourceDebugExtension"));
398        getSourceDebugExtensionCheckBox.setEnabled(false);
399
400        getSyntheticAttributeCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetSyntheticAttribute"));
401        getSyntheticAttributeCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetSyntheticAttribute"));
402        getSyntheticAttributeCheckBox.setEnabled(false);
403
404        popFramesCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanPopFrames"));
405        popFramesCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanPopFrames"));
406        popFramesCheckBox.setEnabled(false);
407
408        redefineClassesCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanRedefineClasses"));
409        redefineClassesCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanRedefineClasses"));
410        redefineClassesCheckBox.setEnabled(false);
411
412        requestMonitorEventCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetMonitorEvent"));
413        requestMonitorEventCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetMonitorEvent"));
414        requestMonitorEventCheckBox.setEnabled(false);
415
416        requestVMDeathEventCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanGetVMDeathEvent"));
417        requestVMDeathEventCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanGetVMDeathEvent"));
418        requestVMDeathEventCheckBox.setEnabled(false);
419
420        unrestrictedlyRedefineClassesCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanUnrestrictedlyRedefineClasses"));
421        unrestrictedlyRedefineClassesCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanUnrestrictedlyRedefineClasses"));
422        unrestrictedlyRedefineClassesCheckBox.setEnabled(false);
423
424        useInstanceFiltersCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanUseInstanceFilters"));
425        useInstanceFiltersCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanUseInstanceFilters"));
426        useInstanceFiltersCheckBox.setEnabled(false);
427
428        useSourceFiltersCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanUseSourceFilters"));
429        useSourceFiltersCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanUseSourceFilters"));
430        useSourceFiltersCheckBox.setEnabled(false);
431
432        watchFieldAccessCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanWatchFieldAccess"));
433        watchFieldAccessCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanWatchFieldAccess"));
434        watchFieldAccessCheckBox.setEnabled(false);
435
436        watchFieldModificationCheckBox.setText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_CanWatchFieldModification"));
437        watchFieldModificationCheckBox.setToolTipText(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("HINT_DebuggeeInfo_CanWatchFieldModification"));
438        watchFieldModificationCheckBox.setEnabled(false);
439
440        javax.swing.GroupLayout supportPanelLayout = new javax.swing.GroupLayout(supportPanel);
441        supportPanel.setLayout(supportPanelLayout);
442        supportPanelLayout.setHorizontalGroup(
443            supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
444            .addGroup(supportPanelLayout.createSequentialGroup()
445                .addContainerGap()
446                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
447                    .addComponent(addMethodCheckBox)
448                    .addComponent(beModifiedCheckBox)
449                    .addComponent(forceEarlyReturnCheckBox)
450                    .addComponent(getBytecodesCheckBox)
451                    .addComponent(getGetClassFileVersionCheckBox)
452                    .addComponent(getGetConstantPoolCheckBox)
453                    .addComponent(getCurrentContendedMonitorCheckBox)
454                    .addComponent(getInstanceInfoCheckBox)
455                    .addComponent(getMethodReturnCheckBox)
456                    .addComponent(getMonitorFrameInfoCheckBox)
457                    .addComponent(getMonitorInfoCheckBox)
458                    .addComponent(getOwnedMonitorInfoCheckBox))
459                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
460                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
461                    .addComponent(getSourceDebugExtensionCheckBox)
462                    .addComponent(getSyntheticAttributeCheckBox)
463                    .addComponent(popFramesCheckBox)
464                    .addComponent(redefineClassesCheckBox)
465                    .addComponent(requestMonitorEventCheckBox)
466                    .addComponent(requestVMDeathEventCheckBox)
467                    .addComponent(unrestrictedlyRedefineClassesCheckBox)
468                    .addComponent(useInstanceFiltersCheckBox)
469                    .addComponent(useSourceFiltersCheckBox)
470                    .addComponent(watchFieldAccessCheckBox)
471                    .addComponent(watchFieldModificationCheckBox))
472                .addGap(58, 58, 58))
473        );
474
475        supportPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {getSourceDebugExtensionCheckBox, getSyntheticAttributeCheckBox, popFramesCheckBox, redefineClassesCheckBox, requestMonitorEventCheckBox, requestVMDeathEventCheckBox, unrestrictedlyRedefineClassesCheckBox, useInstanceFiltersCheckBox, useSourceFiltersCheckBox, watchFieldAccessCheckBox, watchFieldModificationCheckBox});
476
477        supportPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {addMethodCheckBox, beModifiedCheckBox, forceEarlyReturnCheckBox, getBytecodesCheckBox, getCurrentContendedMonitorCheckBox, getGetClassFileVersionCheckBox, getGetConstantPoolCheckBox, getInstanceInfoCheckBox, getMethodReturnCheckBox, getMonitorFrameInfoCheckBox, getMonitorInfoCheckBox, getOwnedMonitorInfoCheckBox});
478
479        supportPanelLayout.setVerticalGroup(
480            supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
481            .addGroup(supportPanelLayout.createSequentialGroup()
482                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
483                    .addComponent(addMethodCheckBox)
484                    .addComponent(getSourceDebugExtensionCheckBox))
485                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
486                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
487                    .addComponent(beModifiedCheckBox)
488                    .addComponent(getSyntheticAttributeCheckBox))
489                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
490                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
491                    .addComponent(forceEarlyReturnCheckBox)
492                    .addComponent(popFramesCheckBox))
493                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
494                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
495                    .addComponent(getBytecodesCheckBox)
496                    .addComponent(redefineClassesCheckBox))
497                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
498                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
499                    .addComponent(getGetClassFileVersionCheckBox)
500                    .addComponent(requestMonitorEventCheckBox))
501                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
502                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
503                    .addComponent(getGetConstantPoolCheckBox)
504                    .addComponent(requestVMDeathEventCheckBox))
505                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
506                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
507                    .addComponent(getCurrentContendedMonitorCheckBox)
508                    .addComponent(unrestrictedlyRedefineClassesCheckBox))
509                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
510                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
511                    .addComponent(getInstanceInfoCheckBox)
512                    .addComponent(useInstanceFiltersCheckBox))
513                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
514                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
515                    .addComponent(getMethodReturnCheckBox)
516                    .addComponent(useSourceFiltersCheckBox))
517                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
518                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
519                    .addComponent(getMonitorFrameInfoCheckBox)
520                    .addComponent(watchFieldAccessCheckBox))
521                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
522                .addGroup(supportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
523                    .addComponent(getMonitorInfoCheckBox)
524                    .addComponent(watchFieldModificationCheckBox))
525                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
526                .addComponent(getOwnedMonitorInfoCheckBox))
527        );
528
529        supportPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {addMethodCheckBox, beModifiedCheckBox, forceEarlyReturnCheckBox, getBytecodesCheckBox, getCurrentContendedMonitorCheckBox, getGetClassFileVersionCheckBox, getGetConstantPoolCheckBox, getInstanceInfoCheckBox, getMethodReturnCheckBox, getMonitorFrameInfoCheckBox, getMonitorInfoCheckBox, getOwnedMonitorInfoCheckBox, getSourceDebugExtensionCheckBox, getSyntheticAttributeCheckBox, popFramesCheckBox, redefineClassesCheckBox, requestMonitorEventCheckBox, requestVMDeathEventCheckBox, unrestrictedlyRedefineClassesCheckBox, useInstanceFiltersCheckBox, useSourceFiltersCheckBox, watchFieldAccessCheckBox, watchFieldModificationCheckBox});
530
531        tabbedPane.addTab(java.util.ResourceBundle.getBundle("com/bluemarsh/jswat/ui/components/Forms").getString("LBL_DebuggeeInfo_SupportTab"), supportPanel);
532
533        add(tabbedPane, java.awt.BorderLayout.CENTER);
534
535    }// </editor-fold>//GEN-END:initComponents
536    // Variables declaration - do not modify//GEN-BEGIN:variables
537    private javax.swing.JCheckBox addMethodCheckBox;
538    private javax.swing.JCheckBox beModifiedCheckBox;
539    private javax.swing.JCheckBox forceEarlyReturnCheckBox;
540    private javax.swing.JCheckBox getBytecodesCheckBox;
541    private javax.swing.JCheckBox getCurrentContendedMonitorCheckBox;
542    private javax.swing.JCheckBox getGetClassFileVersionCheckBox;
543    private javax.swing.JCheckBox getGetConstantPoolCheckBox;
544    private javax.swing.JCheckBox getInstanceInfoCheckBox;
545    private javax.swing.JCheckBox getMethodReturnCheckBox;
546    private javax.swing.JCheckBox getMonitorFrameInfoCheckBox;
547    private javax.swing.JCheckBox getMonitorInfoCheckBox;
548    private javax.swing.JCheckBox getOwnedMonitorInfoCheckBox;
549    private javax.swing.JCheckBox getSourceDebugExtensionCheckBox;
550    private javax.swing.JCheckBox getSyntheticAttributeCheckBox;
551    private javax.swing.JLabel jdiVersionLabel;
552    private javax.swing.JTextField jdiVersionTextField;
553    private javax.swing.JLabel jvmDescriptionLabel;
554    private javax.swing.JScrollPane jvmDescriptionScrollPane;
555    private javax.swing.JTextArea jvmDescriptionTextArea;
556    private javax.swing.JLabel jvmVersionLabel;
557    private javax.swing.JTextField jvmVersionTextField;
558    private javax.swing.JCheckBox popFramesCheckBox;
559    private javax.swing.JPanel propertiesPanel;
560    private javax.swing.JScrollPane propsScrollPane;
561    private javax.swing.JTextArea propsTextArea;
562    private javax.swing.JCheckBox redefineClassesCheckBox;
563    private javax.swing.JCheckBox requestMonitorEventCheckBox;
564    private javax.swing.JCheckBox requestVMDeathEventCheckBox;
565    private javax.swing.JPanel supportPanel;
566    private javax.swing.JTabbedPane tabbedPane;
567    private javax.swing.JCheckBox unrestrictedlyRedefineClassesCheckBox;
568    private javax.swing.JCheckBox useInstanceFiltersCheckBox;
569    private javax.swing.JCheckBox useSourceFiltersCheckBox;
570    private javax.swing.JPanel versionPanel;
571    private javax.swing.JCheckBox watchFieldAccessCheckBox;
572    private javax.swing.JCheckBox watchFieldModificationCheckBox;
573    // End of variables declaration//GEN-END:variables
574}