From 1e2b8c24bb69dc28b33c03efd2b61c18252c7fb8 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Fri, 12 Nov 2010 17:48:01 +0000 Subject: [PATCH] Bug 329682 - Restore backwards compatibility --- .../dsf/AbstractDisassemblyBackend.java | 37 +++++++++++++++++++ .../dsf/DisassemblyBackendCdi.java | 6 +-- .../disassembly/dsf/IDisassemblyBackend.java | 12 ++---- .../ui/disassembly/DisassemblyBackendDsf.java | 11 +++--- .../ui/disassembly/DisassemblyPart.java | 20 +++++++++- 5 files changed, 65 insertions(+), 21 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java new file mode 100644 index 00000000000..ac1f9f15fca --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2010 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Wind River Systems - initial API and implementation + * Freescale Semiconductor - refactoring + *******************************************************************************/ +package org.eclipse.cdt.debug.internal.ui.disassembly.dsf; + +import java.math.BigInteger; + +public abstract class AbstractDisassemblyBackend implements IDisassemblyBackend { + + protected IDisassemblyPartCallback fCallback; + + protected AbstractDisassemblyBackend() { + } + + public void init(IDisassemblyPartCallback callback) { + assert callback != null; + fCallback = callback; + } + + /** + * Evaluate the symbol address. + * + * @param symbol the symbol + * @param suppressError true to suppress error dialogs + * @return the address, null if failed to evaluate symbol + */ + public abstract BigInteger evaluateSymbolAddress(String symbol, boolean suppressError); + +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java index 87c0bb721f0..116eb876698 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java @@ -57,9 +57,8 @@ import com.ibm.icu.text.MessageFormat; * The CDI backend to the DSF disassembly view. * */ -public class DisassemblyBackendCdi implements IDisassemblyBackend, IDebugEventSetListener { +public class DisassemblyBackendCdi extends AbstractDisassemblyBackend implements IDebugEventSetListener { - private IDisassemblyPartCallback fCallback; private ICThread fTargetContext; private String fCdiSessionId; private ICStackFrame fTargetFrameContext; @@ -74,8 +73,7 @@ public class DisassemblyBackendCdi implements IDisassemblyBackend, IDebugEventSe * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#init(org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback) */ public void init(IDisassemblyPartCallback callback) { - assert callback != null; - fCallback = callback; + super.init(callback); DebugPlugin.getDefault().addDebugEventListener(this); } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java index 0e65121e8c8..dfba77dcf00 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java @@ -22,6 +22,9 @@ import org.eclipse.jface.text.Position; * DSF backends. This interface is obtained through IAdaptable. A new instance * is provided every time the adapter is requested. The caller must invoke * {@link #dispose()} when it has no further use for the instance. + * + * @noimplement This interface is not intended to be implemented by clients. + * Clients should extend {@link AbstractDisassemblyBackend}. */ public interface IDisassemblyBackend { @@ -142,15 +145,6 @@ public interface IDisassemblyBackend { Object insertSource(Position pos, BigInteger address, final String file, int lineNumber); void gotoSymbol(String symbol); - - /** - * Evaluate the symbol address. - * - * @param symbol the symbol - * @param suppressError true to suppress error dialogs - * @return the address, null if failed to evaluate symbol - */ - BigInteger evaluateSymbolAddress(String symbol, boolean suppressError); /** * Retrieves disassembly of the code generated by a source file, starting at diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java index a8cc552e1f9..aa413e15536 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java @@ -22,10 +22,10 @@ import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.TimeUnit; import org.eclipse.cdt.core.IAddress; +import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AbstractDisassemblyBackend; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AddressRangePosition; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyUtils; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.ErrorPosition; -import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback; import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.DsfExecutor; @@ -68,7 +68,7 @@ import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.Position; -public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedListener { +public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements SessionEndedListener { private volatile IExecutionDMContext fTargetContext; private DsfServicesTracker fServicesTracker; @@ -77,8 +77,6 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL private String fDsfSessionId; - private IDisassemblyPartCallback fCallback; - /** * Constructor */ @@ -88,9 +86,9 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#init(org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback) */ + @Override public void init(IDisassemblyPartCallback callback) { - assert callback != null; - fCallback = callback; + super.init(callback); DsfSession.addSessionEndedListener(this); } @@ -882,6 +880,7 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL * (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#evaluateSymbolAddress(java.lang.String, boolean) */ + @Override public BigInteger evaluateSymbolAddress(final String symbol, final boolean suppressError) { Query query = new Query() { @Override diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java index 109912c5476..2c8a8063e74 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java @@ -27,8 +27,10 @@ import java.util.Map; import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AbstractDisassemblyBackend; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AddressRangePosition; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyPosition; +import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyUtils; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.ErrorPosition; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyDocument; @@ -2964,11 +2966,25 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem public BigInteger eval(String expr, boolean suppressError) { if (fBackend != null) { - BigInteger address = fBackend.evaluateSymbolAddress(expr, suppressError); + BigInteger address = null; + if (fBackend instanceof AbstractDisassemblyBackend) { + address = ((AbstractDisassemblyBackend) fBackend).evaluateSymbolAddress(expr, suppressError); + } else { + String value = fBackend.evaluateExpression(expr); + if (value != null) { + try { + address = DisassemblyUtils.decodeAddress(value); + } catch (NumberFormatException e) { + if (!suppressError) { + generateErrorDialog(DisassemblyMessages.Disassembly_log_error_expression_eval); + } + } + } + } if (address != null) return address; } - return PC_UNKNOWN; + return PC_UNKNOWN; } protected boolean isTrackExpression() {