|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.debugger.jpda.ui; import java.beans.PropertyChangeListener; import java.text.MessageFormat; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.netbeans.api.debugger.ActionsManager; import org.netbeans.api.debugger.DebuggerEngine; import org.netbeans.api.debugger.ActionsManagerListener; import org.netbeans.api.debugger.DebuggerManager; import org.netbeans.api.debugger.LazyActionsManagerListener; import org.netbeans.api.debugger.jpda.AbstractDICookie; import org.netbeans.api.debugger.jpda.AttachingDICookie; import org.netbeans.api.debugger.jpda.CallStackFrame; import org.netbeans.api.debugger.jpda.DebuggerStartException; import org.netbeans.api.debugger.jpda.JPDADebugger; import org.netbeans.api.debugger.jpda.JPDAThread; import org.netbeans.api.debugger.jpda.LaunchingDICookie; import org.netbeans.api.debugger.jpda.ListeningDICookie; import org.netbeans.spi.viewmodel.NoInformationException; import org.netbeans.spi.debugger.ContextProvider; import org.openide.util.NbBundle; /** * Listens on * {@link org.netbeans.api.debugger.ActionsManagerListener#PROP_ACTION_PERFORMED} and * {@link org.netbeans.api.debugger.jpda.JPDADebugger#PROP_STATE} * properties and writes some messages to Debugger Console. * * @author Jan Jancura */ public class DebuggerOutput extends LazyActionsManagerListener implements PropertyChangeListener { // set of all IOManagers private static Set managers = new HashSet (); private JPDADebugger debugger; private DebuggerEngine engine; private SourcePath engineContext; private IOManager ioManager; private ContextProvider contextProvider; public DebuggerOutput (ContextProvider contextProvider) { this.contextProvider = contextProvider; this.debugger = (JPDADebugger) contextProvider.lookupFirst (null, JPDADebugger.class); this.engine = (DebuggerEngine) contextProvider.lookupFirst (null, DebuggerEngine.class); engineContext = (SourcePath) contextProvider.lookupFirst (null, SourcePath.class); // close old tabs if (DebuggerManager.getDebuggerManager ().getSessions ().length == 1) { Iterator i = managers.iterator (); while (i.hasNext ()) ((IOManager) i.next ()).close (); managers = new HashSet (); } // open new tab String title = (String) contextProvider.lookupFirst (null, String.class); if (title == null) title = NbBundle.getBundle (IOManager.class).getString ("CTL_DebuggerConsole_Title"); ioManager = new IOManager (title, debugger); managers.add (ioManager); debugger.addPropertyChangeListener ( JPDADebugger.PROP_STATE, this ); } protected void destroy () { debugger.removePropertyChangeListener ( JPDADebugger.PROP_STATE, this ); debugger = null; engine = null; engineContext = null; ioManager = null; } public String[] getProperties () { return new String[] {ActionsManagerListener.PROP_ACTION_PERFORMED}; } public void propertyChange (java.beans.PropertyChangeEvent evt) { JPDAThread t = debugger.getCurrentThread (); if (debugger.getState () == JPDADebugger.STATE_STARTING) { AbstractDICookie cookie = (AbstractDICookie) contextProvider. lookupFirst (null, AbstractDICookie.class); if (cookie instanceof AttachingDICookie) { AttachingDICookie c = (AttachingDICookie) cookie; if (c.getHostName () != null) print ( "CTL_Attaching_socket", // where, new String[] { c.getHostName (), "" + c.getPortNumber () }, null ); else print ( "CTL_Attaching_shmem", // where, new String[] { c.getSharedMemoryName () }, null ); } else if (cookie instanceof ListeningDICookie) { ListeningDICookie c = (ListeningDICookie) cookie; if (c.getSharedMemoryName () != null) print ( "CTL_Listening_shmem", // where, new String[] { c.getSharedMemoryName () }, null ); else print ( "CTL_Listening_socket", // where, new String[] { "" + c.getPortNumber () }, null ); } else if (cookie instanceof LaunchingDICookie) { LaunchingDICookie c = (LaunchingDICookie) cookie; print ( "CTL_Launching", // where, new String[] { c.getCommandLine () }, null ); } } else if (debugger.getState () == JPDADebugger.STATE_RUNNING) { print ( "CTL_Debugger_running", // where, new String[] { }, null ); } else if (debugger.getState () == JPDADebugger.STATE_DISCONNECTED) { Throwable e = null; try { debugger.waitRunning (); } catch (DebuggerStartException ex) { e = ex.getTargetException (); } if (e == null) print ("CTL_Debugger_finished", null, null); else { if (e.getMessage () != null) ioManager.println ( e.getMessage (), null ); else ioManager.println ( e.toString (), null ); e.printStackTrace (); } ioManager.closeStream (); } else if (debugger.getState () == JPDADebugger.STATE_STOPPED) { //DebuggerEngine engine = debugger.getEngine (); //S ystem.out.println("State Stopped " + debugger.getLastAction ()); if (t == null) { print ("CTL_Debugger_stopped", null, null); return; } String language = DebuggerManager.getDebuggerManager (). getCurrentSession ().getCurrentLanguage (); String threadName = t.getName (); String methodName = t.getMethodName (); String className = t.getClassName (); int lineNumber = t.getLineNumber (language); try { String sourceName = t.getSourceName (language); String relativePath = EditorContextBridge.getRelativePath (t, language); String url = (relativePath != null) ? engineContext.getURL (relativePath) : null; IOManager.Line line = null; if (lineNumber > 0 && url != null) line = new IOManager.Line ( url, lineNumber, debugger ); if (lineNumber > 0) print ( "CTL_Thread_stopped", // IOManager.DEBUGGER_OUT + IOManager.STATUS_OUT, new String[] { threadName, sourceName, methodName, "" + lineNumber }, line ); else if (sourceName.length() > 0 && methodName.length() > 0) print ( "CTL_Thread_stopped_no_line", // IOManager.DEBUGGER_OUT + IOManager.STATUS_OUT, new String[] { threadName, sourceName, methodName }, line ); else print ( "CTL_Thread_stopped_no_line_no_source", new String[] { threadName }, line ); } catch (NoInformationException ex) { if (lineNumber > 0) print ( "CTL_Thread_stopped_no_source", // IOManager.DEBUGGER_OUT + IOManager.STATUS_OUT, new String[] { threadName, className, methodName, lineNumber > 0 ? "" + lineNumber : "" }, null ); else print ( "CTL_Thread_stopped_no_source_no_line", //IOManager.DEBUGGER_OUT + IOManager.STATUS_OUT, new String[] { threadName, className, methodName }, null ); } } } public void actionPerformed (Object action, boolean success) { if (!success) return; //print ("CTL_Debugger_running", where, null, null); if (action == ActionsManager.ACTION_CONTINUE) print ("CTL_Continue", null, null); else if (action == ActionsManager.ACTION_STEP_INTO) print ("CTL_Step_Into", null, null); else if (action == ActionsManager.ACTION_STEP_OUT) print ("CTL_Step_Out", null, null); else if (action == ActionsManager.ACTION_STEP_OVER) print ("CTL_Step_Over", null, null); } IOManager getIOManager() { return ioManager; } // helper methods .......................................................... private void print ( String message, // int where, String[] args, IOManager.Line line ) { String text = (args == null) ? NbBundle.getMessage ( DebuggerOutput.class, message ) : new MessageFormat (NbBundle.getMessage ( DebuggerOutput.class, message )).format (args); ioManager.println ( text, // where, line ); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.