Chromium Code Reviews| Index: plugins/org.chromium.debug.core/src/org/chromium/debug/core/util/ScriptTargetMapping.java |
| diff --git a/plugins/org.chromium.debug.core/src/org/chromium/debug/core/util/ScriptTargetMapping.java b/plugins/org.chromium.debug.core/src/org/chromium/debug/core/util/ScriptTargetMapping.java |
| index 9310336ca889fdd903988cc88c0e15fbdea4b99b..2be25b340f50337f883d2147b0ebedcfca9f06b7 100644 |
| --- a/plugins/org.chromium.debug.core/src/org/chromium/debug/core/util/ScriptTargetMapping.java |
| +++ b/plugins/org.chromium.debug.core/src/org/chromium/debug/core/util/ScriptTargetMapping.java |
| @@ -4,9 +4,12 @@ |
| package org.chromium.debug.core.util; |
| +import java.util.Collection; |
| + |
| import org.chromium.debug.core.model.ConnectedTargetData; |
| import org.chromium.debug.core.model.VmResource; |
| import org.chromium.sdk.JavascriptVm; |
| +import org.chromium.sdk.Script; |
| import org.eclipse.core.resources.IFile; |
| /** |
| @@ -14,16 +17,22 @@ import org.eclipse.core.resources.IFile; |
| * on remote VM {@link VmResource}. A file may participate in several mappings simultaneously. |
| */ |
| public class ScriptTargetMapping { |
| + /** Original file that is being mapped, may be workspace file or virtual project file. */ |
|
apavlov
2011/06/14 14:54:36
blank line above
Peter Rybin
2011/06/16 08:50:24
Done.
|
| private final IFile file; |
| - private final VmResource vmResource; |
| - private final VmResource.ScriptHolder scriptHolder; |
| + |
| + /** Debug session this resource was mapped within. */ |
| private final ConnectedTargetData connectedTargetData; |
| - public ScriptTargetMapping(IFile file, VmResource vmResource, |
| - VmResource.ScriptHolder scriptHolder, ConnectedTargetData connectedTargetData) { |
| + /** |
| + * Set of VmResource's that the file gets mapped to. Must be non-empty. Several resources |
| + * are only possible in inaccurate source lookup mode. |
| + */ |
| + private final Collection<? extends VmResource> vmResources; |
| + |
| + public ScriptTargetMapping(IFile file, Collection<? extends VmResource> vmResources, |
| + ConnectedTargetData connectedTargetData) { |
| this.file = file; |
| - this.vmResource = vmResource; |
| - this.scriptHolder = scriptHolder; |
| + this.vmResources = vmResources; |
| this.connectedTargetData = connectedTargetData; |
| } |
| @@ -31,12 +40,8 @@ public class ScriptTargetMapping { |
| return file; |
| } |
| - public VmResource getVmResource() { |
| - return vmResource; |
| - } |
| - |
| - public VmResource.ScriptHolder getScriptHolder() { |
| - return scriptHolder; |
| + public Collection<? extends VmResource> getVmResources() { |
| + return vmResources; |
| } |
| public JavascriptVm getJavascriptVm() { |
| @@ -46,4 +51,21 @@ public class ScriptTargetMapping { |
| public ConnectedTargetData getConnectedTargetData() { |
| return connectedTargetData; |
| } |
| + |
| + /** |
| + * Utility method that works in the most cases. |
| + * TODO: re-design program and handle errors nicer than RuntimeException's |
| + */ |
| + public Script getSingleScript() { |
| + Collection<? extends VmResource> vmResources = getVmResources(); |
| + if (vmResources.size() != 1) { |
| + throw new RuntimeException("Several resources found"); |
| + } |
| + VmResource resource = vmResources.iterator().next(); |
| + if (resource.getMetadata() instanceof VmResource.ScriptHolder == false) { |
| + throw new RuntimeException("Unsupported type of resource: " + resource.getMetadata()); |
| + } |
| + VmResource.ScriptHolder scriptHolder = (VmResource.ScriptHolder) resource.getMetadata(); |
| + return scriptHolder.getSingleScript(); |
| + } |
| } |