This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 197707
Collapse All | Expand All

(-)a/api.debugger.jpda/apichanges.xml (+23 lines)
Lines 785-790 Link Here
785
        <class package="org.netbeans.api.debugger.jpda" name="JPDADebugger" />
785
        <class package="org.netbeans.api.debugger.jpda" name="JPDADebugger" />
786
        <issue number="182439"/>
786
        <issue number="182439"/>
787
    </change>
787
    </change>
788
    
789
    <change>
790
        <api name="JPDADebuggerAPI"/>
791
        <summary>Added a possibility to enable/disable other breakpoints when one is hit.</summary>
792
        <version major="2" minor="34"/>
793
        <date day="19" month="12" year="2011"/>
794
        <author login="mentlicher"/>
795
        <compatibility addition="yes" source="compatible" binary="compatible"/>
796
        <description>
797
            Four methods are added to the JPDABreakpoint class, that allow to
798
            get or set a set of breakpoints, that are enabled or disabled when
799
            the breakpoint is hit.
800
            <p>
801
                Added methods:<br/>
802
                <code>JPDABreakpoint.getBreakpointsToEnable()</code>,
803
                <code>JPDABreakpoint.setBreakpointsToEnable()</code>,
804
                <code>JPDABreakpoint.getBreakpointsToDisable()</code>,
805
                <code>JPDABreakpoint.setBreakpointsToDisable()</code>.
806
            </p>
807
        </description>
808
        <class package="org.netbeans.api.debugger.jpda" name="JPDABreakpoint" />
809
        <issue number="197707"/>
810
    </change>
788
811
789
812
790
</changes>
813
</changes>
(-)a/api.debugger.jpda/manifest.mf (-1 / +1 lines)
Lines 1-6 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.netbeans.api.debugger.jpda/2
2
OpenIDE-Module: org.netbeans.api.debugger.jpda/2
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/api/debugger/jpda/Bundle.properties
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/api/debugger/jpda/Bundle.properties
4
OpenIDE-Module-Specification-Version: 2.33
4
OpenIDE-Module-Specification-Version: 2.34
5
OpenIDE-Module-Package-Dependencies: com.sun.jdi[VirtualMachineManager]
5
OpenIDE-Module-Package-Dependencies: com.sun.jdi[VirtualMachineManager]
6
6
(-)a/api.debugger.jpda/src/org/netbeans/api/debugger/jpda/JPDABreakpoint.java (+43 lines)
Lines 51-56 Link Here
51
import java.util.HashSet;
51
import java.util.HashSet;
52
import java.util.Iterator;
52
import java.util.Iterator;
53
import java.util.List;
53
import java.util.List;
54
import java.util.Set;
54
import java.util.prefs.Preferences;
55
import java.util.prefs.Preferences;
55
56
56
import org.netbeans.api.debugger.Breakpoint;
57
import org.netbeans.api.debugger.Breakpoint;
Lines 100-105 Link Here
100
    private Collection<JPDABreakpointListener>  breakpointListeners = new HashSet<JPDABreakpointListener>();
101
    private Collection<JPDABreakpointListener>  breakpointListeners = new HashSet<JPDABreakpointListener>();
101
    private JPDADebugger                session;
102
    private JPDADebugger                session;
102
    private List<DebuggerEngine> engines = new ArrayList<DebuggerEngine>();
103
    private List<DebuggerEngine> engines = new ArrayList<DebuggerEngine>();
104
    private Set<Breakpoint>             breakpointsToEnable = null;
105
    private Set<Breakpoint>             breakpointsToDisable = null;
103
    
106
    
104
   
107
   
105
    JPDABreakpoint () {
108
    JPDABreakpoint () {
Lines 252-257 Link Here
252
        return session;
255
        return session;
253
    }
256
    }
254
    
257
    
258
    /**
259
     * Get the set of breakpoints that will be enabled after this breakpoint
260
     * is hit.
261
     * @return The set of breakpoints, or <code>null</code>.
262
     * @since 2.34
263
     */
264
    public synchronized Set<Breakpoint> getBreakpointsToEnable() {
265
        return breakpointsToEnable;
266
    }
267
    
268
    /**
269
     * Get the set of breakpoints that will be disabled after this breakpoint
270
     * is hit.
271
     * @return The set of breakpoints, or <code>null</code>.
272
     * @since 2.34
273
     */
274
    public synchronized Set<Breakpoint> getBreakpointsToDisable() {
275
        return breakpointsToDisable;
276
    }
277
    
278
    /**
279
     * Set the set of breakpoints that will be enabled after this breakpoint
280
     * is hit.
281
     * @param breakpointsToEnable The set of breakpoints, or <code>null</code>.
282
     * @since 2.34
283
     */
284
    public synchronized void setBreakpointsToEnable(Set<Breakpoint> breakpointsToEnable) {
285
        this.breakpointsToEnable = breakpointsToEnable;
286
    }
287
    
288
    /**
289
     * Set the set of breakpoints that will be disabled after this breakpoint
290
     * is hit.
291
     * @param breakpointsToEnable The set of breakpoints, or <code>null</code>.
292
     * @since 2.34
293
     */
294
    public synchronized void setBreakpointsToDisable(Set<Breakpoint> breakpointsToDisable) {
295
        this.breakpointsToDisable = breakpointsToDisable;
296
    }
297
    
255
    /** 
298
    /** 
256
     * Adds a JPDABreakpointListener.
299
     * Adds a JPDABreakpointListener.
257
     *
300
     *
(-)a/debugger.jpda/src/org/netbeans/modules/debugger/jpda/breakpoints/BreakpointImpl.java (+13 lines)
Lines 66-71 Link Here
66
import java.beans.PropertyChangeEvent;
66
import java.beans.PropertyChangeEvent;
67
import java.util.HashMap;
67
import java.util.HashMap;
68
import java.util.Map;
68
import java.util.Map;
69
import java.util.Set;
69
import java.util.logging.Level;
70
import java.util.logging.Level;
70
import java.util.logging.Logger;
71
import java.util.logging.Logger;
71
import javax.swing.SwingUtilities;
72
import javax.swing.SwingUtilities;
Lines 471-476 Link Here
471
            getBreakpoint (),
472
            getBreakpoint (),
472
            e
473
            e
473
        );
474
        );
475
        enableDisableDependentBreakpoints();
474
        Integer brkpSuspend = (Integer) event.request().getProperty("brkpSuspend");
476
        Integer brkpSuspend = (Integer) event.request().getProperty("brkpSuspend");
475
        if (brkpSuspend == null) {
477
        if (brkpSuspend == null) {
476
            brkpSuspend = getBreakpoint().getSuspend();
478
            brkpSuspend = getBreakpoint().getSuspend();
Lines 493-498 Link Here
493
        return resume; 
495
        return resume; 
494
    }
496
    }
495
    
497
    
498
    private void enableDisableDependentBreakpoints() {
499
        Set<Breakpoint> breakpoints = breakpoint.getBreakpointsToEnable();
500
        for (Breakpoint b : breakpoints) {
501
            b.enable();
502
        }
503
        breakpoints = breakpoint.getBreakpointsToDisable();
504
        for (Breakpoint b : breakpoints) {
505
            b.disable();
506
        }
507
    }
508
    
496
    private boolean checkWhetherResumeToFinishStep(ThreadReference thread) throws InternalExceptionWrapper, VMDisconnectedExceptionWrapper {
509
    private boolean checkWhetherResumeToFinishStep(ThreadReference thread) throws InternalExceptionWrapper, VMDisconnectedExceptionWrapper {
497
        List<StepRequest> stepRequests = EventRequestManagerWrapper.stepRequests(
510
        List<StepRequest> stepRequests = EventRequestManagerWrapper.stepRequests(
498
                VirtualMachineWrapper.eventRequestManager(MirrorWrapper.virtualMachine(thread)));
511
                VirtualMachineWrapper.eventRequestManager(MirrorWrapper.virtualMachine(thread)));
(-)a/debugger.jpda/src/org/netbeans/modules/debugger/jpda/breakpoints/BreakpointsFromGroup.java (+146 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2011 Oracle and/or its affiliates. All rights reserved.
5
 *
6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7
 * Other names may be trademarks of their respective owners.
8
 *
9
 * The contents of this file are subject to the terms of either the GNU
10
 * General Public License Version 2 only ("GPL") or the Common
11
 * Development and Distribution License("CDDL") (collectively, the
12
 * "License"). You may not use this file except in compliance with the
13
 * License. You can obtain a copy of the License at
14
 * http://www.netbeans.org/cddl-gplv2.html
15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
16
 * specific language governing permissions and limitations under the
17
 * License.  When distributing the software, include this License Header
18
 * Notice in each file and include the License file at
19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
20
 * particular file as subject to the "Classpath" exception as provided
21
 * by Oracle in the GPL Version 2 section of the License file that
22
 * accompanied this code. If applicable, add the following below the
23
 * License Header, with the fields enclosed by brackets [] replaced by
24
 * your own identifying information:
25
 * "Portions Copyrighted [year] [name of copyright owner]"
26
 *
27
 * If you wish your version of this file to be governed by only the CDDL
28
 * or only the GPL Version 2, indicate your decision by adding
29
 * "[Contributor] elects to include this software in this distribution
30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
31
 * single choice of license, a recipient has the option to distribute
32
 * your version of this file under either the CDDL, the GPL Version 2 or
33
 * to extend the choice of license to its licensees as provided above.
34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
35
 * Version 2 license, then the option applies only if the new code is
36
 * made subject to such option by the copyright holder.
37
 *
38
 * Contributor(s):
39
 *
40
 * Portions Copyrighted 2011 Sun Microsystems, Inc.
41
 */
42
package org.netbeans.modules.debugger.jpda.breakpoints;
43
44
import java.util.ArrayList;
45
import java.util.Collection;
46
import java.util.Iterator;
47
import java.util.List;
48
import java.util.Set;
49
50
import org.netbeans.api.debugger.Breakpoint;
51
import org.netbeans.api.debugger.DebuggerManager;
52
53
/**
54
 * Set of breakpoints from a group.
55
 * 
56
 * @author Martin
57
 */
58
public final class BreakpointsFromGroup implements Set<Breakpoint> {
59
    
60
    private final String groupName;
61
    
62
    public BreakpointsFromGroup(String groupName) {
63
        this.groupName = groupName;
64
    }
65
    
66
    public String getGroupName() {
67
        return groupName;
68
    }
69
    
70
    private List<Breakpoint> getBreakpointsFromGroup() {
71
        List<Breakpoint> breakpoints = new ArrayList<Breakpoint>();
72
        Breakpoint[] bps = DebuggerManager.getDebuggerManager().getBreakpoints();
73
        for (Breakpoint b : bps) {
74
            if (groupName.equals(b.getGroupName())) {
75
                breakpoints.add(b);
76
            }
77
        }
78
        return breakpoints;
79
    }
80
81
    @Override
82
    public int size() {
83
        return getBreakpointsFromGroup().size();
84
    }
85
86
    @Override
87
    public boolean isEmpty() {
88
        return getBreakpointsFromGroup().isEmpty();
89
    }
90
91
    @Override
92
    public boolean contains(Object o) {
93
        return getBreakpointsFromGroup().contains(o);
94
    }
95
96
    @Override
97
    public Iterator<Breakpoint> iterator() {
98
        return getBreakpointsFromGroup().iterator();
99
    }
100
101
    @Override
102
    public boolean containsAll(Collection<?> c) {
103
        return getBreakpointsFromGroup().containsAll(c);
104
    }
105
106
    @Override
107
    public Object[] toArray() {
108
        return getBreakpointsFromGroup().toArray();
109
    }
110
111
    @Override
112
    public <T> T[] toArray(T[] a) {
113
        return getBreakpointsFromGroup().toArray(a);
114
    }
115
116
    @Override
117
    public boolean add(Breakpoint e) {
118
        throw new UnsupportedOperationException("Not supported.");
119
    }
120
121
    @Override
122
    public boolean remove(Object o) {
123
        throw new UnsupportedOperationException("Not supported.");
124
    }
125
126
    @Override
127
    public boolean addAll(Collection<? extends Breakpoint> c) {
128
        throw new UnsupportedOperationException("Not supported.");
129
    }
130
131
    @Override
132
    public boolean retainAll(Collection<?> c) {
133
        throw new UnsupportedOperationException("Not supported.");
134
    }
135
136
    @Override
137
    public boolean removeAll(Collection<?> c) {
138
        throw new UnsupportedOperationException("Not supported.");
139
    }
140
141
    @Override
142
    public void clear() {
143
        throw new UnsupportedOperationException("Not supported.");
144
    }
145
    
146
}
(-)a/debugger.jpda/src/org/netbeans/modules/debugger/jpda/breakpoints/BreakpointsReader.java (+25 lines)
Lines 47-52 Link Here
47
import java.beans.PropertyChangeEvent;
47
import java.beans.PropertyChangeEvent;
48
import java.beans.PropertyChangeListener;
48
import java.beans.PropertyChangeListener;
49
import java.util.Map;
49
import java.util.Map;
50
import java.util.Set;
50
import java.util.WeakHashMap;
51
import java.util.WeakHashMap;
51
52
52
import org.netbeans.api.debugger.Breakpoint;
53
import org.netbeans.api.debugger.Breakpoint;
Lines 274-279 Link Here
274
            b.enable ();
275
            b.enable ();
275
        else
276
        else
276
            b.disable ();
277
            b.disable ();
278
        String breakpointsToEnableGroup = properties.getString("breakpointsToEnableGroup", null);
279
        if (breakpointsToEnableGroup != null) {
280
            b.setBreakpointsToEnable(new BreakpointsFromGroup(breakpointsToEnableGroup));
281
        }
282
        String breakpointsToDisableGroup = properties.getString("breakpointsToDisableGroup", null);
283
        if (breakpointsToDisableGroup != null) {
284
            b.setBreakpointsToDisable(new BreakpointsFromGroup(breakpointsToDisableGroup));
285
        }
277
        return b;
286
        return b;
278
    }
287
    }
279
    
288
    
Lines 292-297 Link Here
292
        properties.setInt(JPDABreakpoint.PROP_HIT_COUNT_FILTER, b.getHitCountFilter());
301
        properties.setInt(JPDABreakpoint.PROP_HIT_COUNT_FILTER, b.getHitCountFilter());
293
        Breakpoint.HIT_COUNT_FILTERING_STYLE style = b.getHitCountFilteringStyle();
302
        Breakpoint.HIT_COUNT_FILTERING_STYLE style = b.getHitCountFilteringStyle();
294
        properties.setInt(JPDABreakpoint.PROP_HIT_COUNT_FILTER+"_style", style != null ? style.ordinal() : 0); // NOI18N
303
        properties.setInt(JPDABreakpoint.PROP_HIT_COUNT_FILTER+"_style", style != null ? style.ordinal() : 0); // NOI18N
304
        Set<Breakpoint> breakpointsToEnable = b.getBreakpointsToEnable();
305
        String breakpointsToEnableGroup;
306
        if (breakpointsToEnable instanceof BreakpointsFromGroup) {
307
            breakpointsToEnableGroup = ((BreakpointsFromGroup) breakpointsToEnable).getGroupName();
308
        } else {
309
            breakpointsToEnableGroup = null;
310
        }
311
        properties.setString("breakpointsToEnableGroup", breakpointsToEnableGroup);
312
        Set<Breakpoint> breakpointsToDisable = b.getBreakpointsToDisable();
313
        String breakpointsToDisableGroup;
314
        if (breakpointsToDisable instanceof BreakpointsFromGroup) {
315
            breakpointsToDisableGroup = ((BreakpointsFromGroup) breakpointsToDisable).getGroupName();
316
        } else {
317
            breakpointsToDisableGroup = null;
318
        }
319
        properties.setString("breakpointsToDisableGroup", breakpointsToDisableGroup);
295
        
320
        
296
        if (object instanceof LineBreakpoint) {
321
        if (object instanceof LineBreakpoint) {
297
            LineBreakpoint lb = (LineBreakpoint) object;
322
            LineBreakpoint lb = (LineBreakpoint) object;

Return to bug 197707