diff options
author | Randy Rohrbach | 2013-01-14 22:19:44 +0000 |
---|---|---|
committer | Randy Rohrbach | 2013-01-14 22:27:05 +0000 |
commit | dc114aff98849341abb32e858cb23018ea9ebd48 (patch) | |
tree | f614f6c5788911e8cf51f39dedd469ed53ace8d9 /memory/org.eclipse.cdt.debug.ui.memory.transport | |
parent | 997f7b660705a717b99f3e97b6bb76d28be76c6c (diff) | |
download | org.eclipse.cdt-dc114aff98849341abb32e858cb23018ea9ebd48.tar.gz org.eclipse.cdt-dc114aff98849341abb32e858cb23018ea9ebd48.tar.xz org.eclipse.cdt-dc114aff98849341abb32e858cb23018ea9ebd48.zip |
Bug 398136 - ILaunchable is confusing
Bug 398137 - Exporters/Importers should be filterable based on the address size they support
Diffstat (limited to 'memory/org.eclipse.cdt.debug.ui.memory.transport')
5 files changed, 97 insertions, 13 deletions
diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/plugin.xml b/memory/org.eclipse.cdt.debug.ui.memory.transport/plugin.xml index 10e7c942abb..abb815d87b5 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.transport/plugin.xml +++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/plugin.xml @@ -8,17 +8,6 @@ point="org.eclipse.cdt.debug.ui.memory.transport.memoryTransport"> <importer - name="%importer.name.0" - id="org.eclipse.cdt.debug.ui.memory.transport.SRecordImporter" - class="org.eclipse.cdt.debug.ui.memory.transport.SRecordImporter"> - </importer> - <exporter - name="%exporter.name.0" - id="org.eclipse.cdt.debug.ui.memory.transport.SRecordExporter" - class="org.eclipse.cdt.debug.ui.memory.transport.SRecordExporter"> - </exporter> - - <importer name="%importer.name.1" id="org.eclipse.cdt.debug.ui.memory.transport.PlainTextImporter" class="org.eclipse.cdt.debug.ui.memory.transport.PlainTextImporter"> @@ -40,6 +29,19 @@ class="org.eclipse.cdt.debug.ui.memory.transport.RAWBinaryExporter"> </exporter> + <importer + name="%importer.name.0" + id="org.eclipse.cdt.debug.ui.memory.transport.SRecordImporter" + maxmemorysize="32" + class="org.eclipse.cdt.debug.ui.memory.transport.SRecordImporter"> + </importer> + <exporter + name="%exporter.name.0" + id="org.eclipse.cdt.debug.ui.memory.transport.SRecordExporter" + maxmemorysize="32" + class="org.eclipse.cdt.debug.ui.memory.transport.SRecordExporter"> + </exporter> + </extension> <extension point="org.eclipse.ui.viewActions"> diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/schema/MemoryTransport.exsd b/memory/org.eclipse.cdt.debug.ui.memory.transport/schema/MemoryTransport.exsd index cf963b11f26..ec7304db8f9 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.transport/schema/MemoryTransport.exsd +++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/schema/MemoryTransport.exsd @@ -77,6 +77,13 @@ </appInfo> </annotation> </attribute> + <attribute name="maxmemorysize" type="string"> + <annotation> + <documentation> + Maximum size of the addressable memory this exporter can support in bits. + </documentation> + </annotation> + </attribute> </complexType> </element> @@ -109,6 +116,13 @@ </appInfo> </annotation> </attribute> + <attribute name="maxmemorysize" type="string"> + <annotation> + <documentation> + Maximum size of the addressable memory this importer can support in bits. + </documentation> + </annotation> + </attribute> </complexType> </element> diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ExportMemoryDialog.java b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ExportMemoryDialog.java index f279b04e2de..af4f639a596 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ExportMemoryDialog.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ExportMemoryDialog.java @@ -23,6 +23,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IMemoryBlock; +import org.eclipse.debug.core.model.IMemoryBlockExtension; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.swt.SWT; @@ -180,19 +181,46 @@ public class ExportMemoryDialog extends SelectionDialog registry.getExtensionPoint("org.eclipse.cdt.debug.ui.memory.transport.memoryTransport"); //$NON-NLS-1$ IConfigurationElement points[] = extensionPoint.getConfigurationElements(); - + for (int i = 0; i < points.length; i++) { IConfigurationElement element = points[i]; if("exporter".equals(element.getName())) //$NON-NLS-1$ { + String maxSizeStr = element.getAttribute("maxmemorysize"); + if ( maxSizeStr != null ) { + if ( fMemoryBlock instanceof IMemoryBlockExtension ) { + IMemoryBlockExtension memBlock = (IMemoryBlockExtension) fMemoryBlock; + try { + BigInteger endAddress = memBlock.getBigBaseAddress(); + BigInteger length = memBlock.getBigLength(); + if ( length != null && ! length.equals(new BigInteger("-1",10) ) ) { + endAddress = endAddress.add( length ) ; + } + int maxAddressSizeInBits = endAddress.bitLength(); + int maxSupportedAddressSizeInBits = Integer.decode(maxSizeStr); + if ( maxAddressSizeInBits > maxSupportedAddressSizeInBits ) { + continue; + } + } catch (DebugException e1) { + continue; + } + } + else { + int maxSupportedAddressSizeInBits = Integer.decode(maxSizeStr); + if ( maxSupportedAddressSizeInBits < 32 ) { + continue; + } + } + } + try { exporters.addElement((IMemoryExporter) element.createExecutableExtension("class")); //$NON-NLS-1$ } catch(Exception e) { MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(), - DebugException.INTERNAL_ERROR, "Failure", e)); //$NON-NLS-1$ + DebugException.INTERNAL_ERROR, "Failure", e)); //$NON-NLS-1$ } } } diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ImportMemoryDialog.java b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ImportMemoryDialog.java index 32d12aec9ce..4d91238617e 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ImportMemoryDialog.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ImportMemoryDialog.java @@ -25,6 +25,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IMemoryBlock; +import org.eclipse.debug.core.model.IMemoryBlockExtension; import org.eclipse.debug.ui.memory.IMemoryRendering; import org.eclipse.debug.ui.memory.IMemoryRenderingContainer; import org.eclipse.debug.ui.memory.IMemoryRenderingSite; @@ -219,6 +220,30 @@ public class ImportMemoryDialog extends SelectionDialog IConfigurationElement element = points[i]; if("importer".equals(element.getName())) //$NON-NLS-1$ { + String maxSizeStr = element.getAttribute("maxmemorysize"); + if ( maxSizeStr != null ) { + if ( fMemoryBlock instanceof IMemoryBlockExtension ) { + IMemoryBlockExtension memBlock = (IMemoryBlockExtension) fMemoryBlock; + try { + int maxAddressSizeInBits = memBlock.getAddressSize() * 8; + int maxSupportedAddressSizeInBits = Integer.decode(maxSizeStr); + if ( maxAddressSizeInBits > maxSupportedAddressSizeInBits ) { + continue; + } + } catch (DebugException e1) { + continue; + } + } + else { + int maxSupportedAddressSizeInBits = Integer.decode(maxSizeStr); + if ( maxSupportedAddressSizeInBits < 32 ) { + continue; + } + } + } + + + try { importers.addElement(element.createExecutableExtension("class")); //$NON-NLS-1$ diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/PlainTextExporter.java b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/PlainTextExporter.java index 2ad02b2260c..d5698f91bb1 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/PlainTextExporter.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/PlainTextExporter.java @@ -280,6 +280,21 @@ public class PlainTextExporter implements IMemoryExporter { composite.pack(); + /* + * We need to perform a validation. If we do it immediately we will get an exception + * because things are not totally setup. So we schedule an immediate running of the + * validation. For a very brief time the view logically may show a state which does + * not reflect the true state of affairs. But the validate immediately corrects the + * info. In practice the user never sees the invalid state displayed, because of the + * speed of the draw of the dialog. + */ + Display.getDefault().asyncExec(new Runnable(){ + public void run() + { + validate(); + } + }); + return composite; } |