# HG changeset patch # User Eugene Ostroukhov # Date 1276643866 25200 # Node ID 5b79a61843334df33a13798205612dff3cf6e6f6 # Parent 5027709c9315d9e108dc818c6993d093a159b951 Bug 2702 - Debugger - should be able to right click on variable and add to variables view diff -r 5027709c9315 -r 5b79a6184333 org.symbian.tools.wrttools.debug.core/icons/watch.gif Binary file org.symbian.tools.wrttools.debug.core/icons/watch.gif has changed diff -r 5027709c9315 -r 5b79a6184333 org.symbian.tools.wrttools.debug.core/plugin.xml --- a/org.symbian.tools.wrttools.debug.core/plugin.xml Tue Jun 15 11:52:19 2010 -0700 +++ b/org.symbian.tools.wrttools.debug.core/plugin.xml Tue Jun 15 16:17:46 2010 -0700 @@ -190,6 +190,17 @@ style="push"> + + + + diff -r 5027709c9315 -r 5b79a6184333 org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/ui/actions/WatchExpression.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/ui/actions/WatchExpression.java Tue Jun 15 16:17:46 2010 -0700 @@ -0,0 +1,132 @@ +/** + * Copyright (c) 2010 Symbian Foundation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of the License "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Symbian Foundation - initial contribution. + * Contributors: + * Description: + * Overview: + * Details: + * Platforms/Drives/Compatibility: + * Assumptions/Requirement/Pre-requisites: + * Failures and causes: + */ +package org.symbian.tools.wrttools.debug.ui.actions; + +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.IExpressionManager; +import org.eclipse.debug.core.model.IWatchExpression; +import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.text.ITextSelection; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.IEditorActionDelegate; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.actions.ActionDelegate; +import org.eclipse.wst.jsdt.core.IJavaScriptUnit; +import org.eclipse.wst.jsdt.core.dom.AST; +import org.eclipse.wst.jsdt.core.dom.ASTNode; +import org.eclipse.wst.jsdt.core.dom.ASTParser; +import org.eclipse.wst.jsdt.core.dom.ASTVisitor; +import org.eclipse.wst.jsdt.core.dom.SimpleName; +import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin; +import org.eclipse.wst.jsdt.internal.ui.javaeditor.WorkingCopyManager; +import org.symbian.tools.wrttools.debug.internal.Activator; + +@SuppressWarnings("restriction") +public class WatchExpression extends ActionDelegate implements IEditorActionDelegate { + private final class FindNode extends ASTVisitor { + private final int offset; + private final int length; + + private ASTNode node; + + private FindNode(int offset, int length) { + super(false); + this.offset = offset; + this.length = length; + } + + @Override + public boolean visit(SimpleName node) { + checkNode(node); + return true; + } + + public void checkNode(ASTNode node) { + final int end = node.getStartPosition() + node.getLength(); + if (node.getStartPosition() <= offset && end >= offset + length) { + this.node = node; + } + } + + @Override + public void postVisit(ASTNode node) { + if (this.node == null) { + checkNode(node); + } + } + + public ASTNode getNode() { + return node; + } + } + + private IEditorPart targetEditor; + + public void setActiveEditor(IAction action, IEditorPart targetEditor) { + this.targetEditor = targetEditor; + } + + @Override + public void run(IAction action) { + ISelection selection = targetEditor.getEditorSite().getSelectionProvider().getSelection(); + if (selection instanceof ITextSelection) { + final ITextSelection textSelection = (ITextSelection) selection; + final WorkingCopyManager manager = JavaScriptPlugin.getDefault().getWorkingCopyManager(); + final IEditorInput editorInput = targetEditor.getEditorInput(); + final IJavaScriptUnit workingCopy = manager.getWorkingCopy(editorInput); + final ASTParser parser = ASTParser.newParser(AST.JLS3); + + parser.setSource(workingCopy); + final ASTNode ast = parser.createAST(null); + final FindNode visitor = new FindNode(textSelection.getOffset(), textSelection.getLength()); + ast.accept(visitor); + + final ASTNode node = visitor.getNode(); + if (node != null) { + final String jsString; + if (node.getNodeType() == ASTNode.SIMPLE_NAME) { + switch (node.getParent().getNodeType()) { + case ASTNode.FIELD_ACCESS: + case ASTNode.FUNCTION_INVOCATION: + jsString = node.getParent().toString(); + break; + default: + jsString = node.toString(); + break; + } + } else { + jsString = node.toString(); + } + IExpressionManager expressionManager = DebugPlugin.getDefault().getExpressionManager(); + IWatchExpression expression = expressionManager.newWatchExpression(jsString); + expressionManager.addExpression(expression); + + try { + targetEditor.getSite().getPage().showView(IDebugUIConstants.ID_EXPRESSION_VIEW); + } catch (PartInitException e) { + Activator.log(e); + } + } + } + } + +} diff -r 5027709c9315 -r 5b79a6184333 org.symbian.tools.wrttools.product/plugin.xml --- a/org.symbian.tools.wrttools.product/plugin.xml Tue Jun 15 11:52:19 2010 -0700 +++ b/org.symbian.tools.wrttools.product/plugin.xml Tue Jun 15 16:17:46 2010 -0700 @@ -178,6 +178,14 @@ activityId="org.symbian.tools.wrttools.product.chdtact" pattern="org\.chromium\.debug\.ui/org\.chromium\.debug\.ui\.LaunchType.*"> + + + +