| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.netbeans.modules.cpplite.debugger.breakpoints; |
| |
| import java.beans.PropertyChangeEvent; |
| import java.util.List; |
| import java.util.ArrayList; |
| import org.netbeans.api.debugger.Breakpoint; |
| import org.netbeans.api.debugger.DebuggerEngine; |
| |
| import org.netbeans.api.debugger.DebuggerManager; |
| import org.netbeans.api.debugger.LazyDebuggerManagerListener; |
| import org.netbeans.api.debugger.Properties; |
| import org.netbeans.api.debugger.Session; |
| import org.netbeans.api.debugger.Watch; |
| import org.netbeans.spi.debugger.DebuggerServiceRegistration; |
| |
| /** |
| * Listens on DebuggerManager and: |
| * - loads all breakpoints & watches on startup |
| * - listens on all changes of breakpoints and watches (like breakoint / watch |
| * added / removed, or some property change) and saves a new values |
| * |
| * @author Jan Jancura |
| */ |
| @DebuggerServiceRegistration(types={LazyDebuggerManagerListener.class}) |
| public class PersistenceManager implements LazyDebuggerManagerListener { |
| |
| @Override |
| public Breakpoint[] initBreakpoints () { |
| Properties p = Properties.getDefault ().getProperties ("debugger"). |
| getProperties (DebuggerManager.PROP_BREAKPOINTS); |
| Breakpoint[] breakpoints = (Breakpoint[]) p.getArray ( |
| "cpplite", |
| new Breakpoint [0] |
| ); |
| for (int i = 0; i < breakpoints.length; i++) { |
| if (breakpoints[i] == null) { |
| Breakpoint[] b2 = new Breakpoint[breakpoints.length - 1]; |
| System.arraycopy(breakpoints, 0, b2, 0, i); |
| if (i < breakpoints.length - 1) { |
| System.arraycopy(breakpoints, i + 1, b2, i, breakpoints.length - i - 1); |
| } |
| breakpoints = b2; |
| i--; |
| continue; |
| } |
| breakpoints[i].addPropertyChangeListener(this); |
| } |
| return breakpoints; |
| } |
| |
| @Override |
| public void initWatches () { |
| } |
| |
| @Override |
| public String[] getProperties () { |
| return new String [] { |
| DebuggerManager.PROP_BREAKPOINTS_INIT, |
| DebuggerManager.PROP_BREAKPOINTS, |
| }; |
| } |
| |
| @Override |
| public void breakpointAdded (Breakpoint breakpoint) { |
| if (breakpoint instanceof CPPLiteBreakpoint) { |
| Properties p = Properties.getDefault ().getProperties ("debugger"). |
| getProperties (DebuggerManager.PROP_BREAKPOINTS); |
| p.setArray ( |
| "cpplite", |
| getBreakpoints () |
| ); |
| breakpoint.addPropertyChangeListener(this); |
| } |
| } |
| |
| @Override |
| public void breakpointRemoved (Breakpoint breakpoint) { |
| if (breakpoint instanceof CPPLiteBreakpoint) { |
| Properties p = Properties.getDefault ().getProperties ("debugger"). |
| getProperties (DebuggerManager.PROP_BREAKPOINTS); |
| p.setArray ( |
| "cpplite", |
| getBreakpoints () |
| ); |
| breakpoint.removePropertyChangeListener(this); |
| } |
| } |
| @Override |
| public void watchAdded (Watch watch) { |
| } |
| |
| @Override |
| public void watchRemoved (Watch watch) { |
| } |
| |
| @Override |
| public void propertyChange (PropertyChangeEvent evt) { |
| if (evt.getSource() instanceof Breakpoint) { |
| Properties.getDefault ().getProperties ("debugger"). |
| getProperties (DebuggerManager.PROP_BREAKPOINTS).setArray ( |
| "cpplite", |
| getBreakpoints () |
| ); |
| } |
| } |
| |
| @Override |
| public void sessionAdded (Session session) {} |
| @Override |
| public void sessionRemoved (Session session) {} |
| @Override |
| public void engineAdded (DebuggerEngine engine) {} |
| @Override |
| public void engineRemoved (DebuggerEngine engine) {} |
| |
| |
| private static Breakpoint[] getBreakpoints () { |
| Breakpoint[] bs = DebuggerManager.getDebuggerManager (). |
| getBreakpoints (); |
| int i, k = bs.length; |
| List<Breakpoint> bb = new ArrayList<>(); |
| for (i = 0; i < k; i++) |
| // Don't store hidden breakpoints |
| if (bs[i] instanceof CPPLiteBreakpoint) |
| bb.add (bs [i]); |
| bs = new Breakpoint [bb.size ()]; |
| return (Breakpoint[]) bb.toArray (bs); |
| } |
| } |
| |