From 855b524f208b3789c7935d721b85890b6c84445a Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Fri, 14 May 2004 20:12:32 +0000 Subject: [PATCH] Update disassembly when source locator is changed. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 5 + .../internal/core/model/Disassembly.java | 10 + .../core/sourcelookup/CSourceManager.java | 194 +++++++++--------- 3 files changed, 115 insertions(+), 94 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index e2f5352a516..a31f243c0ad 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,8 @@ +2004-05-14 Mikhail Khodjaiants + Update disassembly when source locator is changed. + * Disassembly.java + * CSourceManager.java + 2004-05-13 Mikhail Khodjaiants Changed the format of the disassembly error messages. * Disassembly.java diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/Disassembly.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/Disassembly.java index 58f319f7d43..448169289d4 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/Disassembly.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/Disassembly.java @@ -23,6 +23,7 @@ import org.eclipse.cdt.debug.core.model.ICStackFrame; import org.eclipse.cdt.debug.core.model.IDisassembly; import org.eclipse.cdt.debug.core.model.IDisassemblyBlock; import org.eclipse.cdt.debug.core.model.IExecFileInfo; +import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; /** @@ -133,4 +134,13 @@ public class Disassembly extends CDebugElement implements IDisassembly { return getDebugTarget().getAdapter( adapter ); return super.getAdapter( adapter ); } + + public void reset() { + for ( int i = 0; i < fBlocks.length; ++i ) + if ( fBlocks[i] != null ) { + fBlocks[i].dispose(); + fBlocks[i] = null; + } + fireChangeEvent( DebugEvent.CONTENT ); + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceManager.java index 883073dbcd0..0844a1236c6 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceManager.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceManager.java @@ -1,23 +1,26 @@ -/* - *(c) Copyright QNX Software Systems Ltd. 2002. - * All Rights Reserved. +/********************************************************************** + * Copyright (c) 2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html * - */ - + * Contributors: + * QNX Software Systems - Initial API and implementation + ***********************************************************************/ package org.eclipse.cdt.debug.internal.core.sourcelookup; -import java.util.ArrayList; -import java.util.Arrays; - import org.eclipse.cdt.debug.core.model.IStackFrameInfo; import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; import org.eclipse.cdt.debug.internal.core.model.CDebugTarget; +import org.eclipse.cdt.debug.internal.core.model.Disassembly; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.model.IPersistableSourceLocator; @@ -26,106 +29,115 @@ import org.eclipse.debug.core.model.IStackFrame; /** * Locates sources for a C/C++ debug session. - * - * @since: Oct 8, 2002 */ -public class CSourceManager implements ICSourceLocator, - IPersistableSourceLocator, - IAdaptable -{ +public class CSourceManager implements ICSourceLocator, IPersistableSourceLocator, IAdaptable { + private ISourceLocator fSourceLocator = null; + private ILaunch fLaunch = null; - private CDebugTarget fDebugTarget = null; - + + private CDebugTarget fDebugTarget = null; + /** * Constructor for CSourceManager. */ - public CSourceManager( ISourceLocator sourceLocator ) - { + public CSourceManager( ISourceLocator sourceLocator ) { setSourceLocator( sourceLocator ); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#getLineNumber(IStackFrameInfo) */ - public int getLineNumber( IStackFrame frame ) - { - if ( getCSourceLocator() != null ) - { + public int getLineNumber( IStackFrame frame ) { + if ( getCSourceLocator() != null ) { return getCSourceLocator().getLineNumber( frame ); } IStackFrameInfo info = (IStackFrameInfo)frame.getAdapter( IStackFrameInfo.class ); - if ( info != null ) - { + if ( info != null ) { return info.getFrameLineNumber(); } return 0; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#getSourceLocations() */ - public ICSourceLocation[] getSourceLocations() - { - return ( getCSourceLocator() != null ) ? getCSourceLocator().getSourceLocations() : new ICSourceLocation[0]; + public ICSourceLocation[] getSourceLocations() { + return (getCSourceLocator() != null) ? getCSourceLocator().getSourceLocations() : new ICSourceLocation[0]; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#setSourceLocations(ICSourceLocation[]) */ - public void setSourceLocations( ICSourceLocation[] locations ) - { - if ( getCSourceLocator() != null ) - { + public void setSourceLocations( ICSourceLocation[] locations ) { + if ( getCSourceLocator() != null ) { getCSourceLocator().setSourceLocations( locations ); + CDebugTarget target = getDebugTarget(); + if ( target != null ) { + Disassembly d = null; + try { + d = (Disassembly)target.getDisassembly(); + } + catch( DebugException e ) { + } + if ( d != null ) { + d.reset(); + } + } } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#contains(IResource) */ - public boolean contains( IResource resource ) - { - return ( getCSourceLocator() != null ) ? getCSourceLocator().contains( resource ) : false; + public boolean contains( IResource resource ) { + return (getCSourceLocator() != null) ? getCSourceLocator().contains( resource ) : false; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) */ - public Object getAdapter( Class adapter ) - { + public Object getAdapter( Class adapter ) { if ( adapter.equals( CSourceManager.class ) ) return this; if ( adapter.equals( ICSourceLocator.class ) ) return this; if ( adapter.equals( IPersistableSourceLocator.class ) ) return this; - if ( adapter.equals( IResourceChangeListener.class ) && - fSourceLocator instanceof IResourceChangeListener ) + if ( adapter.equals( IResourceChangeListener.class ) && fSourceLocator instanceof IResourceChangeListener ) return fSourceLocator; return null; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.debug.core.model.ISourceLocator#getSourceElement(IStackFrame) */ - public Object getSourceElement( IStackFrame stackFrame ) - { + public Object getSourceElement( IStackFrame stackFrame ) { Object result = null; if ( getSourceLocator() != null ) result = getSourceLocator().getSourceElement( stackFrame ); return result; } - protected ICSourceLocator getCSourceLocator() - { + protected ICSourceLocator getCSourceLocator() { if ( getSourceLocator() instanceof ICSourceLocator ) return (ICSourceLocator)getSourceLocator(); return null; } - - protected ISourceLocator getSourceLocator() - { + + protected ISourceLocator getSourceLocator() { if ( fSourceLocator != null ) return fSourceLocator; else if ( fLaunch != null ) @@ -133,98 +145,92 @@ public class CSourceManager implements ICSourceLocator, return null; } - protected void setSourceLocator( ISourceLocator sl ) - { + private void setSourceLocator( ISourceLocator sl ) { fSourceLocator = sl; } - - public void addSourceLocation( ICSourceLocation location ) - { - ICSourceLocation[] locations = getSourceLocations(); - ArrayList list = new ArrayList( Arrays.asList( locations ) ); - list.add( location ); - setSourceLocations( (ICSourceLocation[])list.toArray( new ICSourceLocation[list.size()] ) ); - } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#findSourceElement(String) */ - public Object findSourceElement( String fileName ) - { - if ( getCSourceLocator() != null ) - { + public Object findSourceElement( String fileName ) { + if ( getCSourceLocator() != null ) { return getCSourceLocator().findSourceElement( fileName ); } return null; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.debug.core.model.IPersistableSourceLocator#getMemento() */ - public String getMemento() throws CoreException - { + public String getMemento() throws CoreException { if ( getPersistableSourceLocator() != null ) return getPersistableSourceLocator().getMemento(); return null; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.debug.core.model.IPersistableSourceLocator#initializeDefaults(org.eclipse.debug.core.ILaunchConfiguration) */ - public void initializeDefaults( ILaunchConfiguration configuration ) throws CoreException - { + public void initializeDefaults( ILaunchConfiguration configuration ) throws CoreException { if ( getPersistableSourceLocator() != null ) getPersistableSourceLocator().initializeDefaults( configuration ); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.debug.core.model.IPersistableSourceLocator#initializeFromMemento(java.lang.String) */ - public void initializeFromMemento( String memento ) throws CoreException - { + public void initializeFromMemento( String memento ) throws CoreException { if ( getPersistableSourceLocator() != null ) getPersistableSourceLocator().initializeFromMemento( memento ); } - private IPersistableSourceLocator getPersistableSourceLocator() - { + private IPersistableSourceLocator getPersistableSourceLocator() { if ( fSourceLocator instanceof IPersistableSourceLocator ) return (IPersistableSourceLocator)fSourceLocator; return null; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#getProject() */ - public IProject getProject() - { - return ( getCSourceLocator() != null ) ? getCSourceLocator().getProject() : null; + public IProject getProject() { + return (getCSourceLocator() != null) ? getCSourceLocator().getProject() : null; } - public void setDebugTarget( CDebugTarget target ) - { + public void setDebugTarget( CDebugTarget target ) { fDebugTarget = target; } - protected CDebugTarget getDebugTarget() - { + protected CDebugTarget getDebugTarget() { return fDebugTarget; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#setSearchForDuplicateFiles(boolean) */ - public void setSearchForDuplicateFiles( boolean search ) - { + public void setSearchForDuplicateFiles( boolean search ) { if ( getCSourceLocator() != null ) getCSourceLocator().setSearchForDuplicateFiles( search ); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#searchForDuplicateFiles() */ - public boolean searchForDuplicateFiles() - { - return ( getCSourceLocator() != null ) ? getCSourceLocator().searchForDuplicateFiles() : false; - } -} + public boolean searchForDuplicateFiles() { + return (getCSourceLocator() != null) ? getCSourceLocator().searchForDuplicateFiles() : false; + } +} \ No newline at end of file