vM5-20020430
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java index 2704fd8..e718dce 100644 --- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java +++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java
@@ -222,9 +222,9 @@ engine = JDIDebugUIPlugin.getDefault().getEvaluationEngine(project, (IJavaDebugTarget)jFrame.getDebugTarget()); if (object == null) { - engine.evaluate(expression, jFrame, this); + engine.evaluate(expression, jFrame, this, DebugEvent.EVALUATION, true); } else { - engine.evaluate(expression, object, (IJavaThread)jFrame.getThread(), this); + engine.evaluate(expression, object, (IJavaThread)jFrame.getThread(), this, DebugEvent.EVALUATION, true); } } catch (CoreException e) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java index 89f98aa..a0e6f2a 100644 --- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java +++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java
@@ -407,7 +407,7 @@ if (getImports() != null) { getEvaluationEngine().setImports(getImports()); } - getEvaluationEngine().evaluate(snippet,getThread(), this); + getEvaluationEngine().evaluate(snippet,getThread(), this, true); } catch (DebugException e) { JDIDebugUIPlugin.log(e); ErrorDialog.openError(getShell(), SnippetMessages.getString("SnippetEditor.error.evaluating"), null, e.getStatus()); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/EvaluationManager.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/EvaluationManager.java index 23b87a0..d915df1 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/EvaluationManager.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/EvaluationManager.java
@@ -28,7 +28,6 @@ */ public class EvaluationManager { - /** * Not to be instantiated */ @@ -40,22 +39,28 @@ * performs evaluations for local Java applications * by deploying class files. * - * @param project the java project in which snippets + * @param project the Java project in which expressions * are to be compiled - * @param vm the java debug target in which snippets + * @param target the Java debug target in which expressions * are to be evaluated * @param directory the directory where support class files * are deployed to assist in the evaluation. The directory * must exist. + * @return an evaluation engine */ - public static IClassFileEvaluationEngine newClassFileEvaluationEngine(IJavaProject project, IJavaDebugTarget vm, File directory) { - return new LocalEvaluationEngine(project, vm, directory); + public static IClassFileEvaluationEngine newClassFileEvaluationEngine(IJavaProject project, IJavaDebugTarget target, File directory) { + return new LocalEvaluationEngine(project, target, directory); } /** - * Creates and returns a new evaluation engine that performs - * evaluations by creating an abstract syntax tree (AST) represention - * of an expression. + * Creates and returns a new evaluation engine that performs evaluations by + * compiling expressions into abstract syntax trees (ASTs), and interpreting + * the AST over a JDI connection. This type of evaluation engine is capable of + * performing remote evalautions. + * + * @param project the Java project in which expressions are to be compiled + * @param target the Java debug target in which expressions are to be evaluated + * @return an evaluation engine */ public static ASTEvaluationEngine newAstEvaluationEngine(IJavaProject project, IJavaDebugTarget target) { return new ASTEvaluationEngine(project, target);
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IAstEvaluationEngine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IAstEvaluationEngine.java index df355e7..1879ae4 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IAstEvaluationEngine.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IAstEvaluationEngine.java
@@ -14,10 +14,12 @@ /** * An evaluation engine that performs evaluations by - * iterpretting abstract syntax trees. An AST evalutaion engine + * interpretting abstract syntax trees. An AST evalutaion engine * is capable of creating compiled expressions that can be * evaluated multiple times in a given runtime context. - * + * <p> + * Clients are not intended to implement this interface. + * </p> * @since 2.0 */ public interface IAstEvaluationEngine extends IEvaluationEngine { @@ -25,19 +27,23 @@ /** * Asynchronously evaluates the given expression in the context of * the specified stack frame, reporting the result back to the given listener. - * The expression is evaluated in the context of the Java - * project this evaluation engine was created on. If the - * expression is determined to have no errors, the expression - * is evaluated in the thread associated with the given - * stack frame. The thread is resumed from the location at which it - * is currently suspended. When the evaluation completes, the thread - * will be suspened at this original location. + * The thread is resumed from the location at which it + * is currently suspended to perform the evaluation. When the evaluation + * completes, the thread will be suspened at this original location. + * The thread runs the evaluation with the given evaluation detail + * (@see IJavaThread#runEvaluation(IEvaluationRunnable, IProgressMonitor, int)). + * Compilation and runtime errors are reported in the evaluation result. * - * @param snippet code snippet to evaluate + * @param expression expression to evaluate * @param frame the stack frame context in which to run the * evaluation. * @param listener the listener that will receive notification * when/if the evalaution completes + * @param evaluationDetail one of <code>DebugEvent.EVALUATION</code> or + * <code>DebugEvent.EVALUATION_IMPLICIT</code> + * @param hitBreakpoints whether or not breakpoints should be honored + * in the evaluation thread during the evaluation. If <code>false</code>, + * breakpoints hit in the evaluation thread will be ignored. * @exception DebugException if this method fails. Reasons include:<ul> * <li>Failure communicating with the VM. The DebugException's * status code contains the underlying exception responsible for @@ -50,7 +56,7 @@ * to perform nested evaluations</li> * </ul> */ - void evaluateExpression(ICompiledExpression expression, IJavaStackFrame frame, IEvaluationListener listener) throws DebugException; + public void evaluateExpression(ICompiledExpression expression, IJavaStackFrame frame, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException; /** * Asynchronously evaluates the given expression in the context of @@ -61,6 +67,9 @@ * is evaluated in the thread associated with the given * stack frame. When the evaluation completes, the thread * will be suspened at this original location. + * The thread runs the evaluation with the given evaluation detail + * (@see IJavaThread#runEvaluation(IEvaluationRunnable, IProgressMonitor, int)). + * Compilation and runtime errors are reported in the evaluation result. * * @param expression the expression to evaluate * @param thisContext the 'this' context for the evaluation @@ -68,6 +77,11 @@ * which must be suspended * @param listener the listener that will receive notification * when/if the evalaution completes + * @param evaluationDetail one of <code>DebugEvent.EVALUATION</code> or + * <code>DebugEvent.EVALUATION_IMPLICIT</code> + * @param hitBreakpoints whether or not breakpoints should be honored + * in the evaluation thread during the evaluation. If <code>false</code>, + * breakpoints hit in the evaluation thread will be ignored. * @exception DebugException if this method fails. Reasons include:<ul> * <li>Failure communicating with the VM. The DebugException's * status code contains the underlying exception responsible for @@ -80,20 +94,45 @@ * to perform nested evaluations</li> * </ul> */ - void evaluateExpression(ICompiledExpression expression, IJavaObject object, IJavaThread thread, IEvaluationListener listener) throws DebugException; + public void evaluateExpression(ICompiledExpression expression, IJavaObject object, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException; /** - * Synchronously generates a compiled expression from the given snippet + * Synchronously generates a compiled expression from the given expression * in the context of the specified stack frame. The generated expression * can be stored and evaluated later in a valid runtime context. + * Compilation errors are reported in the returned compiled expression. + * + * @param expression expression to compile + * @param frame the context in which to compile the expression + * @exception DebugException if this method fails. Reasons include:<ul> + * <li>Failure communicating with the VM. The DebugException's + * status code contains the underlying exception responsible for + * the failure.</li> + * <li>The associated thread is not currently suspended</li> + * <li>The stack frame is not contained in the debug target + * associated with this evaluation engine</li> + * </ul> */ - ICompiledExpression getCompiledExpression(String snippet, IJavaStackFrame frame) throws DebugException; + public ICompiledExpression getCompiledExpression(String expression, IJavaStackFrame frame) throws DebugException; + /** - * Synchronously generates a compiled expression from the given snippet - * in the context of the specified stack frame. The generated expression + * Synchronously generates a compiled expression from the given expression + * in the context of the specified object. The generated expression * can be stored and evaluated later in a valid runtime context. + * Compilation errors are reported in the returned compiled expression. + * + * @param expression expression to compile + * @param object the context in which to compile the expression + * @exception DebugException if this method fails. Reasons include:<ul> + * <li>Failure communicating with the VM. The DebugException's + * status code contains the underlying exception responsible for + * the failure.</li> + * <li>The associated thread is not currently suspended</li> + * <li>The stack frame is not contained in the debug target + * associated with this evaluation engine</li> + * </ul> */ - ICompiledExpression getCompiledExpression(String snippet, IJavaObject object, IJavaThread thread) throws DebugException; + public ICompiledExpression getCompiledExpression(String expression, IJavaObject object) throws DebugException; }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IClassFileEvaluationEngine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IClassFileEvaluationEngine.java index 87287fa..bff662a 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IClassFileEvaluationEngine.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IClassFileEvaluationEngine.java
@@ -13,7 +13,9 @@ /** * An evaluation engine that performs evaluations by * deploying and executing class files locally. - * + * <p> + * Clients are not intended to implement this interface. + * </p> * @since 2.0 */ public interface IClassFileEvaluationEngine extends IEvaluationEngine { @@ -24,7 +26,7 @@ * ImportDeclaration (JLS2 7.5). For example, <code>"java.util.Hashtable"</code> * or <code>"java.util.*"</code>. * - * @param imports the list of import names + * @return the list of import names */ public String[] getImports(); @@ -49,12 +51,16 @@ * execution from the location at which it is currently suspended. * When the evaluation completes, the thread will be suspened * at this original location. + * Compilation and runtime errors are reported in the evaluation result. * * @param snippet code snippet to evaluate * @param thread the thread in which to run the evaluation, * which must be suspended * @param listener the listener that will receive notification * when/if the evalaution completes + * @param hitBreakpoints whether or not breakpoints should be honored + * in the evaluation thread during the evaluation. If <code>false</code>, + * breakpoints hit in the evaluation thread will be ignored. * @exception DebugException if this method fails. Reasons include:<ul> * <li>Failure communicating with the VM. The DebugException's * status code contains the underlying exception responsible for @@ -67,7 +73,7 @@ * to perform nested evaluations</li> * </ul> */ - public void evaluate(String snippet, IJavaThread thread, IEvaluationListener listener) throws DebugException; + public void evaluate(String snippet, IJavaThread thread, IEvaluationListener listener, boolean hitBreakpoints) throws DebugException; }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/ICompiledExpression.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/ICompiledExpression.java index 07210bd..011a1e9 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/ICompiledExpression.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/ICompiledExpression.java
@@ -10,7 +10,7 @@ /** * A compiled expression can be compiled once and evaluated multiple times - * in a given runtime context. + * in a runtime context. * <p> * Clients are not intended to implement this interface. * </p> @@ -22,17 +22,23 @@ public interface ICompiledExpression { /** - * Returns the source snippet from which this compiled expression was created + * Returns the source snippet from which this compiled expression was created. + * + * @return the source snippet from which this compiled expression was created */ public String getSnippet(); /** - * Returns whether this compiled expression has any compilation errors + * Returns whether this compiled expression has any compilation errors. + * + * @return whether this compiled expression has any compilation errors */ public boolean hasErrors(); /** * Returns any errors which occurred while creating this compiled expression. + * + * @return any errors which occurred while creating this compiled expression */ public Message[] getErrors();
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationEngine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationEngine.java index c005a87..689cff7 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationEngine.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationEngine.java
@@ -14,17 +14,12 @@ /** * An evaluation engine performs an evalutaion of a - * code snippet in a specified thread of a debug target. + * code snippet or expression in a specified thread of a debug target. * An evaluation engine is associated with a specific - * debug target and Java project at creation. + * debug target and Java project on creation. * <p> * Clients are not intended to implement this interface. * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> * @see IEvaluationResult * @see IEvaluationListener * @since 2.0 @@ -39,14 +34,22 @@ * snippet is determined to be a valid expression, the expression * is evaluated in the thread associated with the given * stack frame. The thread is resumed from the location at which it - * is currently suspended. When the evaluation completes, the thread - * will be suspened at this original location. + * is currently suspended to perform the evaluation. When the evaluation + * completes, the thread will be suspened at this original location. + * The thread runs the evaluation with the given evaluation detail + * (@see IJavaThread#runEvaluation(IEvaluationRunnable, IProgressMonitor, int)). + * Compilation and runtime errors are reported in the evaluation result. * * @param snippet code snippet to evaluate * @param frame the stack frame context in which to run the * evaluation. * @param listener the listener that will receive notification * when/if the evalaution completes + * @param evaluationDetail one of <code>DebugEvent.EVALUATION</code> or + * <code>DebugEvent.EVALUATION_IMPLICIT</code> + * @param hitBreakpoints whether or not breakpoints should be honored + * in the evaluation thread during the evaluation. If <code>false</code>, + * breakpoints hit in the evaluation thread will be ignored. * @exception DebugException if this method fails. Reasons include:<ul> * <li>Failure communicating with the VM. The DebugException's * status code contains the underlying exception responsible for @@ -59,7 +62,7 @@ * to perform nested evaluations</li> * </ul> */ - void evaluate(String snippet, IJavaStackFrame frame, IEvaluationListener listener) throws DebugException; + public void evaluate(String snippet, IJavaStackFrame frame, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException; /** * Asynchronously evaluates the given snippet in the context of * the specified type, reporting the result back to the given listener. @@ -68,8 +71,11 @@ * snippet is determined to be a valid expression, the expression * is evaluated in the thread associated with the given * stack frame. The thread is resumed from the location at which it - * is currently suspended. When the evaluation completes, the thread - * will be suspened at this original location. + * is currently suspended to perform the evaluation. When the evaluation + * completes, the thread will be suspened at this original location. + * The thread runs the evaluation with the given evaluation detail + * (@see IJavaThread#runEvaluation(IEvaluationRunnable, IProgressMonitor, int)). + * Compilation and runtime errors are reported in the evaluation result. * * @param snippet code snippet to evaluate * @param thisContext the 'this' context for the evaluation @@ -77,19 +83,24 @@ * which must be suspended * @param listener the listener that will receive notification * when/if the evalaution completes + * @param evaluationDetail one of <code>DebugEvent.EVALUATION</code> or + * <code>DebugEvent.EVALUATION_IMPLICIT</code> + * @param hitBreakpoints whether or not breakpoints should be honored + * in the evaluation thread during the evaluation. If <code>false</code>, + * breakpoints hit in the evaluation thread will be ignored. * @exception DebugException if this method fails. Reasons include:<ul> * <li>Failure communicating with the VM. The DebugException's * status code contains the underlying exception responsible for * the failure.</li> * <li>The associated thread is not currently suspended</li> - * <li>The stack frame is not contained in the debug target + * <li>The specified thread is not contained in the debug target * associated with this evaluation engine</li> * <li>The associated thread is suspended in the middle of * an evaluation that has not completed. It is not possible * to perform nested evaluations</li> * </ul> */ - void evaluate(String snippet, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener) throws DebugException; + public void evaluate(String snippet, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException; /** * Returns the Java project in which snippets are @@ -97,7 +108,7 @@ * * @return Java project context */ - IJavaProject getJavaProject(); + public IJavaProject getJavaProject(); /** * Returns the debug target for which evaluations @@ -105,13 +116,17 @@ * * @return Java debug target */ - IJavaDebugTarget getDebugTarget(); + public IJavaDebugTarget getDebugTarget(); /** - * Disposes this evaluation engine. An engine cannot - * be used after it has been disposed. + * Disposes this evaluation engine. This causes the evaluation engine + * to cleanup any resources (such as threads) that it maintains. Clients + * should call this method when they are finished performing evaluations + * with this engine. + * + * This engine must not be used to perform evaluations after it has been disposed. */ - void dispose(); + public void dispose(); }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationListener.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationListener.java index dab2fc9..e354da0 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationListener.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationListener.java
@@ -15,11 +15,6 @@ * <p> * Clients may implement this interface. * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> * @see IEvaluationResult * @since 2.0 */ @@ -33,5 +28,5 @@ * @param result The result from the evaluation * @see IEvaluationResult */ - void evaluationComplete(IEvaluationResult result); + public void evaluationComplete(IEvaluationResult result); } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationResult.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationResult.java index b5702c9..2add2d5 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationResult.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/debug/eval/IEvaluationResult.java
@@ -16,11 +16,6 @@ * <p> * Clients are not intended to implement this interface. * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> * @see IJavaValue * @since 2.0 */ @@ -29,19 +24,18 @@ /** * Returns the value representing the result of the - * evaluation. Returns <code>null</code> if the - * associated evaluation failed, or if the result - * of the evaluation was <code>null</code>. If + * evaluation, or <code>null</code> if the + * associated evaluation failed. If * the associated evaluation failed, there will * be problems, or an exception in this result. * * @return the resulting value, possibly * <code>null</code> */ - IJavaValue getValue(); + public IJavaValue getValue(); /** - * Returns whether this evaluation had any problems + * Returns whether the evaluation had any problems * or if an exception occurred while performing the * evaluation. * @@ -49,7 +43,7 @@ * @see #getErrors() * @see #getException() */ - boolean hasErrors(); + public boolean hasErrors(); /** * Returns an array of problem messages. Each message describes a problem that @@ -57,20 +51,14 @@ * * @return compilation error messages, or an empty array if no errors occurred */ - Message[] getErrors(); - - /** - * Adds the given error to the collection of compilation errors - * associated with this result. - */ - void addError(Message error); - + public Message[] getErrors(); + /** * Returns the snippet that was evaluated. * * @return The string code snippet. */ - String getSnippet(); + public String getSnippet(); /** * Returns any exception that occurred while performing the evaluation @@ -83,21 +71,21 @@ * @see com.sun.jdi.InvocationException * @see org.eclipse.debug.core.DebugException */ - DebugException getException(); + public DebugException getException(); /** * Returns the thread in which the evaluation was performed. * - * @return The thread in which the evaluation was performed + * @return the thread in which the evaluation was performed */ - IJavaThread getThread(); + public IJavaThread getThread(); /** * Returns the evaluation engine used to evaluate the original * snippet. * - * @return The evaluation engine used to evaluate the + * @return the evaluation engine used to evaluate the * original snippet */ - IEvaluationEngine getEvaluationEngine(); + public IEvaluationEngine getEvaluationEngine(); } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/EvaluationMessages.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/EvaluationMessages.java index 8628bd4..2ca6a05 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/EvaluationMessages.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/EvaluationMessages.java
@@ -1,9 +1,16 @@ package org.eclipse.jdt.internal.debug.eval; -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ +/********************************************************************** +Copyright (c) 2000, 2002 IBM Corp. and others. +All rights reserved. This program and the accompanying materials +are made available under the terms of the Common Public License v0.5 +which accompanies this distribution, and is available at +http://www.eclipse.org/legal/cpl-v05.html + +Contributors: + IBM Corporation - Initial implementation +**********************************************************************/ + import java.util.MissingResourceException; import java.util.ResourceBundle;
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/EvaluationMessages.properties b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/EvaluationMessages.properties index 5623b99..359676c 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/EvaluationMessages.properties +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/EvaluationMessages.properties
@@ -1,9 +1,14 @@ -######################################### -# (c) Copyright IBM Corp. 2000, 2001. -# All Rights Reserved. -######################################### +###################################################################### +# Copyright (c) 2000, 2002 IBM Corp. and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Common Public License v0.5 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/cpl-v05.html +# +# Contributors: +# IBM Corporation - Initial implementation +###################################################################### -EvaluationResult.Problem_marker_does_not_exist_in_this_evaluation_result._1=Problem marker does not exist in this evaluation result. LocalEvaluationEngine.Evaluation_in_context_of_inner_type_not_supported._19=Evaluation in context of inner type not supported. LocalEvaluationEngine.Evaluation_failed_-_unable_to_determine_receiving_type_context._18=Evaluation failed - unable to determine receiving type context. LocalEvaluationEngine.Evaluation_failed_-_internal_error_retreiving_result._17=Evaluation failed - internal error retreiving result.
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/LocalEvaluationEngine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/LocalEvaluationEngine.java index b66c221..d82dce3 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/LocalEvaluationEngine.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/LocalEvaluationEngine.java
@@ -63,6 +63,16 @@ public class LocalEvaluationEngine implements IClassFileEvaluationEngine, ICodeSnippetRequestor , IEvaluationRunnable { + private static final String CODE_SNIPPET_NAME= "CodeSnippet.class"; //$NON-NLS-1$ + + /** + * A count of the number of engines created. + * Count is incremented on instantiation and decremented on + * dispose. When the count == 0, the special CodeSnippet.class + * is deleted as this class file is shared by all. + */ + private static int ENGINE_COUNT= 0; + /** * The Java project context in which to compile snippets. */ @@ -156,6 +166,11 @@ * The name of the code snippet class to instantiate */ private String fCodeSnippetClassName = null; + + /** + * Wether to hit breakpoints in the evaluation thread + */ + private boolean fHitBreakpoints = false; /** * Constant for empty array of <code>java.lang.String</code> @@ -182,6 +197,7 @@ setJavaProject(project); setDebugTarget(vm); setOutputDirectory(directory); + ENGINE_COUNT++; } /** @@ -337,7 +353,7 @@ if (problemMarker.getAttribute(IMarker.SEVERITY, -1) != IMarker.SEVERITY_ERROR) { return; } - Message message= new Message(problemMarker.getAttribute(IMarker.MESSAGE, ""), problemMarker.getAttribute(IMarker.CHAR_START, 0)); + Message message= new Message(problemMarker.getAttribute(IMarker.MESSAGE, ""), problemMarker.getAttribute(IMarker.CHAR_START, 0)); //$NON-NLS-1$ getResult().addError(message); } @@ -393,14 +409,15 @@ } /** - * @see IEvaluationEngine#evaluate(String, IJavaThread, IEvaluationListener) + * @see IClassFileEvaluationEngine#evaluate(String, IJavaThread, IEvaluationListener) */ - public void evaluate(String snippet, IJavaThread thread, IEvaluationListener listener) throws DebugException { + public void evaluate(String snippet, IJavaThread thread, IEvaluationListener listener, boolean hitBreakpoints) throws DebugException { checkDisposed(); checkEvaluating(); try { evaluationStarted(); setListener(listener); + setHitBreakpoints(hitBreakpoints); setResult(new EvaluationResult(this, snippet, thread)); checkThread(); // no receiver/stack frame context @@ -433,15 +450,16 @@ } /** - * @see IEvaluationEngine#evaluate(String, IJavaStackFrame, IEvaluationListener) + * @see IEvaluationEngine#evaluate(String, IJavaStackFrame, IEvaluationListener, int) */ - public void evaluate(String snippet, IJavaStackFrame frame, IEvaluationListener listener) throws DebugException { + public void evaluate(String snippet, IJavaStackFrame frame, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException { checkDisposed(); checkEvaluating(); try { evaluationStarted(); setListener(listener); setStackFrame(frame); + setHitBreakpoints(hitBreakpoints); setResult(new EvaluationResult(this, snippet, (IJavaThread)frame.getThread())); checkThread(); @@ -503,14 +521,15 @@ } /** - * @see IEvaluationEngine#evaluate(String, String, IJavaThread, IEvaluationListener) + * @see IEvaluationEngine#evaluate(String, IJavaObject, IJavaThread, IEvaluationListener, int) */ - public void evaluate(String snippet, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener) throws DebugException { + public void evaluate(String snippet, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException { checkDisposed(); checkEvaluating(); try { evaluationStarted(); setListener(listener); + setHitBreakpoints(hitBreakpoints); setResult(new EvaluationResult(this, snippet, thread)); checkThread(); @@ -609,8 +628,9 @@ */ public void dispose() { fDisposed = true; + ENGINE_COUNT--; if (isEvaluating()) { - // cannot dispose if in an evalutaion, must + // cannot dispose if in an evaluation, must // wait for evaluation to complete return; } @@ -618,11 +638,16 @@ Iterator iter = snippetFiles.iterator(); while (iter.hasNext()) { File file = (File)iter.next(); - if (file.exists() && !file.delete()) { - JDIDebugPlugin.log( - new Status(IStatus.ERROR, JDIDebugModel.getPluginIdentifier(), DebugException.REQUEST_FAILED, - MessageFormat.format(EvaluationMessages.getString("LocalEvaluationEngine.Unable_to_delete_temporary_evaluation_class_file_{0}_1"), new String[] {file.getAbsolutePath()}), null) //$NON-NLS-1$ - ); + if (file.exists()) { + if (CODE_SNIPPET_NAME.equals(file.getName()) && ENGINE_COUNT > 0) { + continue; //do not delete the common file for other engines + } + if (!file.delete()) { + JDIDebugPlugin.log( + new Status(IStatus.ERROR, JDIDebugModel.getPluginIdentifier(), DebugException.REQUEST_FAILED, + MessageFormat.format(EvaluationMessages.getString("LocalEvaluationEngine.Unable_to_delete_temporary_evaluation_class_file_{0}_1"), new String[] {file.getAbsolutePath()}), null) //$NON-NLS-1$ + ); + } } } List directories = getDirectories(); @@ -630,7 +655,8 @@ int i = directories.size() - 1; while (i >= 0) { File dir = (File)directories.get(i); - if (dir.exists() && !dir.delete()) { + String[] listing= dir.list(); + if (dir.exists() && listing != null && listing.length == 0 && !dir.delete()) { JDIDebugPlugin.log( new Status(IStatus.ERROR, JDIDebugModel.getPluginIdentifier(), DebugException.REQUEST_FAILED, MessageFormat.format(EvaluationMessages.getString("LocalEvaluationEngine.Unable_to_delete_temporary_evaluation_directory_{0}_2"), new String[] {dir.getAbsolutePath()}), null) //$NON-NLS-1$ @@ -1370,4 +1396,21 @@ return true; } + /** + * Returns whether to hit breakpoints in the evaluation thread. + * + * @return whether to hit breakpoints in the evaluation thread + */ + protected boolean getHitBreakpoints() { + return fHitBreakpoints; + } + + /** + * Sets whether to hit breakpoints in the evaluation thread. + * @param hit whether to hit breakpoints in the evaluation thread + */ + private void setHitBreakpoints(boolean hit) { + fHitBreakpoints = hit; + } + } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java index 23d55c3..4050602 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
@@ -7,35 +7,48 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; +import java.util.StringTokenizer; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.IDebugEventSetListener; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.Message; import org.eclipse.jdt.debug.core.IEvaluationRunnable; +import org.eclipse.jdt.debug.core.IJavaArray; import org.eclipse.jdt.debug.core.IJavaDebugTarget; import org.eclipse.jdt.debug.core.IJavaObject; import org.eclipse.jdt.debug.core.IJavaStackFrame; import org.eclipse.jdt.debug.core.IJavaThread; import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.IJavaVariable; import org.eclipse.jdt.debug.eval.IAstEvaluationEngine; import org.eclipse.jdt.debug.eval.ICompiledExpression; import org.eclipse.jdt.debug.eval.IEvaluationListener; +import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory; +import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin; +import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget; import org.eclipse.jdt.internal.debug.eval.EvaluationResult; import org.eclipse.jdt.internal.debug.eval.ast.instructions.InstructionSequence; -import org.eclipse.jdt.internal.debug.eval.model.EvaluationThread; -import org.eclipse.jdt.internal.debug.eval.model.EvaluationValue; -import org.eclipse.jdt.internal.debug.eval.model.IRuntimeContext; -import org.eclipse.jdt.internal.debug.eval.model.IValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; -import org.eclipse.jdt.internal.debug.eval.model.JavaObjectRuntimeContext; -import org.eclipse.jdt.internal.debug.eval.model.RuntimeContext; +import org.eclipse.jdt.internal.debug.eval.ast.instructions.InstructionsEvaluationMessages; public class ASTEvaluationEngine implements IAstEvaluationEngine { + + /** + * Code snippets that return a value generate an exception from + * the compiler because void methods cannot return a value. Since the + * messages returned by the compilation unit only contain a string and + * a position, we have to check if the message's string matches the + * message for the "void methods cannot return a value" error. + */ + private static String fVoidMessageError= new DefaultProblemFactory(Locale.getDefault()).getLocalizedMessage(105, new String[0]); private IJavaProject fProject; @@ -57,44 +70,50 @@ } /** - * @see IEvaluationEngine#evaluate(String, IJavaStackFrame, IEvaluationListener) + * @see IEvaluationEngine#evaluate(String, IJavaStackFrame, IEvaluationListener, int, boolean) */ - public void evaluate(String snippet, IJavaStackFrame frame, IEvaluationListener listener) throws DebugException { + public void evaluate(String snippet, IJavaStackFrame frame, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException { ICompiledExpression expression= getCompiledExpression(snippet, frame); - evaluateExpression(expression, frame, listener); + evaluateExpression(expression, frame, listener, evaluationDetail, hitBreakpoints); } /** - * @see IEvaluationEngine#evaluate(String, IJavaObject, IJavaThread, IEvaluationListener) + * @see IEvaluationEngine#evaluate(String, IJavaObject, IJavaThread, IEvaluationListener, int, boolean) */ - public void evaluate(String snippet, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener) throws DebugException { - ICompiledExpression expression= getCompiledExpression(snippet, thisContext, thread); - evaluateExpression(expression, thisContext, thread, listener); + public void evaluate(String snippet, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException { + ICompiledExpression expression= getCompiledExpression(snippet, thisContext); + evaluateExpression(expression, thisContext, thread, listener, evaluationDetail, hitBreakpoints); } /** - * @see IEvaluationEngine#evaluate(ICompiledExpression, IJavaStackFrame, IEvaluationListener) + * @see IAstEvaluationEngine#evaluateExpression(ICompiledExpression, IJavaStackFrame, IEvaluationListener, int, boolean) */ - public void evaluateExpression(ICompiledExpression expression, IJavaStackFrame frame, IEvaluationListener listener) throws DebugException { + public void evaluateExpression(ICompiledExpression expression, IJavaStackFrame frame, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException { RuntimeContext context = new RuntimeContext(getJavaProject(), frame); - doEvaluation(expression, context, (IJavaThread)frame.getThread(), listener); + doEvaluation(expression, context, (IJavaThread)frame.getThread(), listener, evaluationDetail, hitBreakpoints); } /** - * @see IEvaluationEngine#evaluate(ICompiledExpression, IJavaObject, IJavaThread, IEvaluationListener) + * @see IAstEvaluationEngine#evaluateExpression(ICompiledExpression, IJavaObject, IJavaThread, IEvaluationListener, int, boolean) */ - public void evaluateExpression(ICompiledExpression expression, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener) throws DebugException { + public void evaluateExpression(ICompiledExpression expression, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException { IRuntimeContext context = new JavaObjectRuntimeContext(thisContext, getJavaProject(), thread); - doEvaluation(expression, context, thread, listener); + doEvaluation(expression, context, thread, listener, evaluationDetail, hitBreakpoints); } /** * Evaluates the given expression in the given thread and the given runtime context. */ - private void doEvaluation(final ICompiledExpression expression, final IRuntimeContext context, final IJavaThread thread, final IEvaluationListener listener) throws DebugException { - getEvaluationThread().evaluate(expression, context, thread, listener); + private void doEvaluation(ICompiledExpression expression, IRuntimeContext context, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException { + getEvaluationThread().evaluate(expression, context, thread, listener, evaluationDetail, hitBreakpoints); } + /** + * Returns an evaluation thread which can be used to perform an evaluation. + * This method will return an existing thread if a one exists that is + * currently not performing an evaluation. Otherwise, a new thread will + * be created. + */ private EvaluationThread getEvaluationThread() { Iterator iter= fEvaluationThreads.iterator(); EvaluationThread thread= null; @@ -104,7 +123,7 @@ return thread; } } - thread= new EvaluationThread(); + thread= new EvaluationThread(this); fEvaluationThreads.add(thread); return thread; } @@ -116,7 +135,7 @@ * the thread is allowed to keep running - it will be reused for the * next evaluation. */ - private void evaluationThreadFinished(EvaluationThread thread) { + protected void evaluationThreadFinished(EvaluationThread thread) { if (fEvaluationThreads.size() == 1) { // Always leave at least one thread running return; @@ -138,126 +157,37 @@ fEvaluationThreads.remove(thread); } } - - class EvaluationThread { - private ICompiledExpression fExpression; - private IRuntimeContext fContext; - private IJavaThread fThread; - private IEvaluationListener fListener; - - private boolean fEvaluating= false; - private Thread fEvaluationThread; - private boolean fStopped= false; - private Object fLock= new Object(); - - public boolean isEvaluating() { - return fEvaluating; - } - - public void stop() { - fStopped= true; - synchronized (fLock) { - fLock.notify(); - } - } - - public void evaluate(ICompiledExpression expression, IRuntimeContext context, IJavaThread thread, IEvaluationListener listener) { - fExpression= expression; - fContext= context; - fThread= thread; - fListener= listener; - if (fEvaluationThread == null) { - // Create a new thread - fEvaluationThread= new Thread(new Runnable() { - public void run() { - while (!fStopped) { - synchronized (fLock) { - doEvaluation(); - try { - // Sleep until the next evaluation - fLock.wait(); - } catch (InterruptedException exception) { - } - } - } - } - }, "Evaluation thread"); - fEvaluationThread.start(); - } else { - // Use the existing thread - synchronized (fLock) { - fLock.notify(); - } - } - } - - public synchronized void doEvaluation() { - fEvaluating= true; - EvaluationResult result = new EvaluationResult(ASTEvaluationEngine.this, fExpression.getSnippet(), fThread); - if (fExpression.hasErrors()) { - Message[] errors= fExpression.getErrors(); - for (int i= 0, numErrors= errors.length; i < numErrors; i++) { - result.addError(errors[i]); - } - fListener.evaluationComplete(result); - return; - } - - final IValue[] valuez = new IValue[1]; - final InstructionSequence instructionSet = (InstructionSequence)fExpression; - IEvaluationRunnable er = new IEvaluationRunnable() { - public void run(IJavaThread jt, IProgressMonitor pm) { - valuez[0] = instructionSet.evaluate(fContext); - } - }; - CoreException exception = null; - try { - fThread.runEvaluation(er, null, DebugEvent.EVALUATION); - } catch (DebugException e) { - exception = e; - } - IValue value = valuez[0]; - - - if (exception == null) { - exception= instructionSet.getException(); - } - - if (value != null) { - IJavaValue jv = ((EvaluationValue)value).getJavaValue(); - result.setValue(jv); - } - if (exception != null) { - result.setException(new DebugException(exception.getStatus())); - } - fEvaluating= false; - evaluationThreadFinished(this); - fListener.evaluationComplete(result); - } - } /** * @see IEvaluationEngine#getCompiledExpression(String, IJavaStackFrame) */ public ICompiledExpression getCompiledExpression(String snippet, IJavaStackFrame frame) { - snippet= getCompleteSnippet(snippet); IJavaProject javaProject = getJavaProject(); RuntimeContext context = new RuntimeContext(javaProject, frame); EvaluationSourceGenerator mapper = null; CompilationUnit unit = null; try { - IVariable[] locals = context.getLocals(); - int numLocals= locals.length; - int[] localModifiers = new int[locals.length]; + IJavaVariable[] localsVar = context.getLocals(); + int numLocalsVar= localsVar.length; + // ****** + // to hide problems with local variable declare as instance of Local Types + IJavaVariable[] locals= new IJavaVariable[numLocalsVar]; + int numLocals= 0; + for (int i = 0; i < numLocalsVar; i++) { + if (!isLocalType(localsVar[i].getReferenceTypeName())) { + locals[numLocals++]= localsVar[i]; + } + } + // to solve and remove + // ****** String[] localTypesNames= new String[numLocals]; String[] localVariables= new String[numLocals]; for (int i = 0; i < numLocals; i++) { localVariables[i] = locals[i].getName(); - localTypesNames[i] = locals[i].getType().getName(); - localModifiers[i]= 0; + localTypesNames[i] = locals[i].getReferenceTypeName(); } - mapper = new EvaluationSourceGenerator(new String[0], localModifiers, localTypesNames, localVariables, snippet); + mapper = new EvaluationSourceGenerator(localTypesNames, localVariables, snippet); unit = AST.parseCompilationUnit(mapper.getSource(frame).toCharArray(), mapper.getCompilationUnitName(), javaProject); } catch (CoreException e) { InstructionSequence expression= new InstructionSequence(snippet); @@ -268,17 +198,36 @@ return createExpressionFromAST(snippet, mapper, unit); } + // ****** + // to hide problems with local variable declare as instance of Local Types + private boolean isLocalType(String typeName) { + StringTokenizer strTok= new StringTokenizer(typeName,"$"); //$NON-NLS-1$ + strTok.nextToken(); + while (strTok.hasMoreTokens()) { + char char0= strTok.nextToken().charAt(0); + if ('0' <= char0 && char0 <= '9') { + return true; + } + } + return false; + } + // ****** + + /** * @see IEvaluationEngine#getCompiledExpression(String, IJavaObject, IJavaThread) */ - public ICompiledExpression getCompiledExpression(String snippet, IJavaObject thisContext, IJavaThread thread) { - snippet= getCompleteSnippet(snippet); + public ICompiledExpression getCompiledExpression(String snippet, IJavaObject thisContext) { + if (thisContext instanceof IJavaArray) { + InstructionSequence errorExpression= new InstructionSequence(snippet); + errorExpression.addError(new Message(EvaluationEngineMessages.getString("Cannot_perform_an_evaluation_in_the_context_of_an_array_instance_1"), 0)); //$NON-NLS-1$ + } IJavaProject javaProject = getJavaProject(); EvaluationSourceGenerator mapper = null; CompilationUnit unit = null; - mapper = new EvaluationSourceGenerator(new String[0], new int[0], new String[0], new String[0], snippet); + mapper = new EvaluationSourceGenerator(new String[0], new String[0], snippet); try { unit = AST.parseCompilationUnit(mapper.getSource(thisContext, javaProject).toCharArray(), mapper.getCompilationUnitName(), javaProject); @@ -300,38 +249,37 @@ private ICompiledExpression createExpressionFromAST(String snippet, EvaluationSourceGenerator mapper, CompilationUnit unit) { Message[] messages= unit.getMessages(); if (messages.length != 0) { - boolean error= false; + boolean snippetError= false; + boolean runMethodError= false; InstructionSequence errorSequence= new InstructionSequence(snippet); - int codeSnippetStartOffset= mapper.getStartPosition(); - int codeSnippetEndOffset= codeSnippetStartOffset + snippet.length(); + int codeSnippetStart= mapper.getSnippetStart(); + int codeSnippetEnd= codeSnippetStart + mapper.getSnippet().length(); + int runMethodStart= mapper.getRunMethodStart(); + int runMethodEnd= runMethodStart + mapper.getRunMethodLength(); for (int i = 0; i < messages.length; i++) { Message message= messages[i]; int errorOffset= message.getSourcePosition(); // TO DO: Internationalize "void method..." error message check - if (codeSnippetStartOffset <= errorOffset && errorOffset <= codeSnippetEndOffset && !"Void methods cannot return a value".equals(message.getMessage())) { + if (codeSnippetStart <= errorOffset && errorOffset <= codeSnippetEnd && !fVoidMessageError.equals(message.getMessage())) { errorSequence.addError(message); - error = true; + snippetError = true; + } else if (runMethodStart <= errorOffset && errorOffset <= runMethodEnd && !fVoidMessageError.equals(message.getMessage())) { + runMethodError = true; } } - if (error) { + if (snippetError || runMethodError) { + if (runMethodError) { + errorSequence.addError(new Message(EvaluationEngineMessages.getString("ASTEvaluationEngineEvaluations_must_contain_either_an_expression_or_a_block_of_well-formed_statements_1"), 0)); //$NON-NLS-1$ + } return errorSequence; } } - ASTInstructionCompiler visitor = new ASTInstructionCompiler(mapper.getStartPosition(), snippet); + ASTInstructionCompiler visitor = new ASTInstructionCompiler(mapper.getSnippetStart(), snippet); unit.accept(visitor); return visitor.getInstructions(); } - - protected String getCompleteSnippet(String codeSnippet) { - boolean isAnExpression= codeSnippet.indexOf(';') == -1 && codeSnippet.indexOf('{') == -1 && codeSnippet.indexOf('}') == -1 && codeSnippet.indexOf("return") == -1; - - if (isAnExpression) { - codeSnippet = "return " + codeSnippet + ';'; - } - return codeSnippet; - } /* * @see IEvaluationEngine#getJavaProject()
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java index 4120d99..e893b22 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
@@ -11,6 +11,7 @@ import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.Signature; +import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; import org.eclipse.jdt.core.dom.ArrayAccess; @@ -46,6 +47,7 @@ import org.eclipse.jdt.core.dom.ImportDeclaration; import org.eclipse.jdt.core.dom.InfixExpression; import org.eclipse.jdt.core.dom.Initializer; +import org.eclipse.jdt.core.dom.InstanceofExpression; import org.eclipse.jdt.core.dom.Javadoc; import org.eclipse.jdt.core.dom.LabeledStatement; import org.eclipse.jdt.core.dom.Message; @@ -120,6 +122,7 @@ import org.eclipse.jdt.internal.debug.eval.ast.instructions.PostfixPlusPlusOperator; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PrefixMinusMinusOperator; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PrefixPlusPlusOperator; +import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushArrayLength; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushArrayType; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushBoolean; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushChar; @@ -128,14 +131,16 @@ import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushFieldVariable; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushFloat; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushInt; +import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushLocalVariable; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushLong; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushNull; +import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushStaticFieldVariable; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushString; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushThis; import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushType; -import org.eclipse.jdt.internal.debug.eval.ast.instructions.PushVariable; import org.eclipse.jdt.internal.debug.eval.ast.instructions.RemainderAssignmentOperator; import org.eclipse.jdt.internal.debug.eval.ast.instructions.RemainderOperator; +import org.eclipse.jdt.internal.debug.eval.ast.instructions.ReturnInstruction; import org.eclipse.jdt.internal.debug.eval.ast.instructions.RightShiftAssignmentOperator; import org.eclipse.jdt.internal.debug.eval.ast.instructions.RightShiftOperator; import org.eclipse.jdt.internal.debug.eval.ast.instructions.SendMessage; @@ -237,7 +242,7 @@ ((CompoundInstruction)instruction).setEnd(fCounter); } fInstructions.add(instruction); - verbose("Add " + instruction.toString()); + verbose("Add " + instruction.toString()); //$NON-NLS-1$ } @@ -255,10 +260,10 @@ private String getQualifiedIdentifier(Name name) { - String typeName = ""; + String typeName = ""; //$NON-NLS-1$ while (name.isQualifiedName()) { QualifiedName qualifiedName = (QualifiedName) name; - typeName = "." + qualifiedName.getName().getIdentifier() + typeName; + typeName = "." + qualifiedName.getName().getIdentifier() + typeName; //$NON-NLS-1$ name = qualifiedName.getQualifier(); } if (name.isSimpleName()) { @@ -270,23 +275,92 @@ } private String getTypeName(ITypeBinding typeBinding) { - String name= typeBinding.getName(); + StringBuffer name; + if (typeBinding.isArray()) { + name= new StringBuffer(getTypeName(typeBinding.getElementType())); + int dimensions= typeBinding.getDimensions(); + for (int i= 0; i < dimensions; i++) { + name.append("[]"); //$NON-NLS-1$ + } + return name.toString(); + } + name= new StringBuffer(typeBinding.getName()); IPackageBinding packageBinding= typeBinding.getPackage(); typeBinding= typeBinding.getDeclaringClass(); while(typeBinding != null) { - name= typeBinding.getName() + '$' + name; + name.insert(0, '$').insert(0, typeBinding.getName()); typeBinding= typeBinding.getDeclaringClass(); } if (packageBinding != null && !packageBinding.isUnnamed()) { - name= packageBinding.getName() + '.' + name; + name.insert(0, '.').insert(0, packageBinding.getName()); } - return name; + return name.toString(); } private String getTypeSignature(ITypeBinding typeBinding) { return Signature.createTypeSignature(getTypeName(typeBinding), true).replace('.', '/'); } + + private boolean isALocalType(ITypeBinding typeBinding) { + while(typeBinding != null) { + if (typeBinding.isLocal()) { + return true; + } + typeBinding= typeBinding.getDeclaringClass(); + } + return false; + } + private boolean containsALocalType(IMethodBinding methodBinding) { + ITypeBinding[] typeBindings= methodBinding.getParameterTypes(); + for (int i= 0, length= typeBindings.length; i < length; i++) { + if (isALocalType(typeBindings[i])) { + return true; + } + } + return false; + } + + private int getEnclosingLevel(ASTNode node, ITypeBinding referenceTypeBinding) { + ASTNode parent= node; + do { + parent= parent.getParent(); + } while (!(parent instanceof TypeDeclaration || parent instanceof AnonymousClassDeclaration)); + if (parent == null) { + // throw an exception + return 9999; + } + ITypeBinding parentBinding; + if (parent instanceof TypeDeclaration) { + parentBinding= (ITypeBinding) ((TypeDeclaration)parent).resolveBinding(); + } else { + parentBinding= (ITypeBinding) ((AnonymousClassDeclaration)parent).resolveBinding(); + } + if (isInstanceOf(parentBinding, referenceTypeBinding)) { + return 0; + } + return getEnclosingLevel(parent, referenceTypeBinding) + 1; + } + + private int getSuperLevel(ITypeBinding current, ITypeBinding reference) { + if (current.equals(reference)) { + return 0; + } + return getSuperLevel(current.getSuperclass(), reference); + } + + private boolean isInstanceOf(ITypeBinding current, ITypeBinding reference) { + if (current.equals(reference)) { + return true; + } + ITypeBinding superClass= current.getSuperclass(); + if (superClass == null) { + return false; + } else { + return isInstanceOf(current.getSuperclass(), reference); + } + } + /** * End visit methods * @@ -497,12 +571,12 @@ Expression expression= node.getExpression(); if (expression instanceof MethodInvocation) { IMethodBinding methodBinding= (IMethodBinding)((MethodInvocation)expression).getName().resolveBinding(); - if ("void".equals(methodBinding.getReturnType().getName())) { + if ("void".equals(methodBinding.getReturnType().getName())) { //$NON-NLS-1$ pop= false; } } else if (expression instanceof SuperMethodInvocation) { IMethodBinding methodBinding= (IMethodBinding)((SuperMethodInvocation)expression).getName().resolveBinding(); - if ("void".equals(methodBinding.getReturnType().getName())) { + if ("void".equals(methodBinding.getReturnType().getName())) { //$NON-NLS-1$ pop= false; } } @@ -603,6 +677,15 @@ public void endVisit(Initializer node) { } + + /** + * @see ASTVisitor#endVisit(InstanceofExpression) + */ + public void endVisit(InstanceofExpression node) { + if (!isActive() || hasErrors()) + return; + storeInstruction(); + } /** * @see ASTVisitor#endVisit(Javadoc) @@ -688,9 +771,6 @@ * @see ASTVisitor#endVisit(PrimitiveType) */ public void endVisit(PrimitiveType node) { - if (!isActive() || hasErrors()) - return; - storeInstruction(); } /** @@ -703,7 +783,9 @@ * @see ASTVisitor#endVisit(ReturnStatement) */ public void endVisit(ReturnStatement node) { - + if (!isActive() || hasErrors()) + return; + storeInstruction(); } /** @@ -881,7 +963,7 @@ return true; } setHasError(true); - addErrorMessage(new Message("Anonymous type declaration cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Anonymous_type_declaration_cannot_be_used_in_an_evaluation_expression_2"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -908,6 +990,12 @@ ArrayType arrayType= node.getType(); + if (isALocalType(arrayType.resolveBinding().getElementType())) { + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Local_type_array_instance_creation_cannot_be_used_in_an_evaluation_expression_29"), node.getStartPosition())); //$NON-NLS-1$ + setHasError(true); + return true; + } + push(new ArrayAllocation(arrayType.getDimensions(), node.dimensions().size(), node.getInitializer() != null, fCounter)); return true; @@ -922,9 +1010,8 @@ } ITypeBinding typeBinding= node.resolveTypeBinding(); - int dimension= typeBinding.getDimensions(); - String signature= Signature.createTypeSignature(getQualifiedName(typeBinding.getElementType()), true); + String signature= getTypeSignature(typeBinding.getElementType()); push(new ArrayInitializerInstruction(signature, node.expressions().size(), dimension, fCounter)); @@ -938,10 +1025,9 @@ if (!isActive()) { return false; } - ITypeBinding typeBinding= node.getElementType().resolveBinding(); - - int dimension= node.getDimensions(); - String signature= Signature.createTypeSignature(getQualifiedName(typeBinding), true); + ITypeBinding arrayTypeBinding= node.resolveBinding(); + int dimension= arrayTypeBinding.getDimensions(); + String signature= getTypeSignature(arrayTypeBinding.getElementType()); push(new PushArrayType(signature, dimension, fCounter)); @@ -956,7 +1042,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Assert statement is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Assert_statement_cannot_be_used_in_an_evaluation_expression_3"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -1031,7 +1117,7 @@ if (unrecognized) { setHasError(true); - addErrorMessage(new Message("Unrecognized assignment operator : " + opToken, node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Unrecognized_assignment_operator____4") + opToken, node.getStartPosition())); //$NON-NLS-1$ } return true; @@ -1072,7 +1158,7 @@ */ public boolean visit(BreakStatement node) { setHasError(true); - addErrorMessage(new Message("Break Statement cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Break_Statement_cannot_be_used_in_an_evaluation_expression_5"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -1086,9 +1172,11 @@ int typeId = getTypeId(node.getType()); - push(new Cast(typeId, fCounter)); + push(new Cast(typeId, getTypeName(node.getType().resolveBinding()), fCounter)); - return true; + node.getExpression().accept(this); + + return false; } /** @@ -1099,7 +1187,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Catch clause is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Catch_clause_cannot_be_used_in_an_evaluation_expression_6"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -1117,7 +1205,7 @@ } /** - * return false, visit name & arguments, don't visit expression & body declaration + * return false, visit expression, type name & arguments, don't visit body declaration * @see ASTVisitor#visit(ClassInstanceCreation) */ public boolean visit(ClassInstanceCreation node) { @@ -1127,39 +1215,60 @@ if (node.getAnonymousClassDeclaration() != null) { setHasError(true); - addErrorMessage(new Message("Anonymous type declaration cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Anonymous_type_declaration_cannot_be_used_in_an_evaluation_expression_7"), node.getStartPosition())); //$NON-NLS-1$ } - if (node.getExpression() != null) { + + IMethodBinding methodBinding= node.resolveConstructorBinding(); + ITypeBinding typeBinding= methodBinding.getDeclaringClass(); + ITypeBinding enclosingTypeBinding= typeBinding.getDeclaringClass(); + + if (isALocalType(typeBinding)) { setHasError(true); - addErrorMessage(new Message("Class Instance Creation Expression is not managed", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Constructor_of_a_local_type_cannot_be_used_in_an_evaluation_expression_8"), node.getStartPosition())); //$NON-NLS-1$ + } + + if (containsALocalType(methodBinding)) { + setHasError(true); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Constructor_which_contains_a_local_type_as_parameter_cannot_be_used_in_an_evaluation_expression_30"), node.getStartPosition())); //$NON-NLS-1$ } if (hasErrors()) { return true; } - IMethodBinding methodBinding = node.resolveConstructorBinding(); + boolean isInstanceMemberType= typeBinding.isMember() &&! Modifier.isStatic(typeBinding.getModifiers()); int argCount= methodBinding.getParameterTypes().length; + + String enclosingTypeSignature= null; + if (isInstanceMemberType) { + enclosingTypeSignature= getTypeSignature(enclosingTypeBinding); + argCount++; + } - String signature= getMethodSignature(methodBinding).replace('.','/'); + String signature= getMethodSignature(methodBinding, enclosingTypeSignature).replace('.','/'); push(new Constructor(signature, argCount, fCounter)); -// node.getName().accept(this); - // TO DO: Use the method call above instead of the following code - push(new PushType(getTypeName(methodBinding.getDeclaringClass()), false)); + push(new PushType(getTypeName(typeBinding))); storeInstruction(); + if (isInstanceMemberType) { + Expression optionalExpression= node.getExpression(); + if (optionalExpression != null) { + optionalExpression.accept(this); + } else { + push(new PushThis(getEnclosingLevel(node, enclosingTypeBinding))); + storeInstruction(); + } + } + Iterator iterator= node.arguments().iterator(); while (iterator.hasNext()) { ((Expression) iterator.next()).accept(this); } - - return false; - } /** @@ -1190,7 +1299,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("this constructor invocation cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.this_constructor_invocation_cannot_be_used_in_an_evaluation_expression_9"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -1199,7 +1308,7 @@ */ public boolean visit(ContinueStatement node) { setHasError(true); - addErrorMessage(new Message("Continue statement cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Continue_statement_cannot_be_used_in_an_evaluation_expression_10"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -1208,7 +1317,7 @@ */ public boolean visit(DoStatement node) { setHasError(true); - addErrorMessage(new Message("Do statement cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Do_statement_cannot_be_used_in_an_evaluation_expression_11"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -1235,12 +1344,12 @@ Expression expression= node.getExpression(); if (expression instanceof MethodInvocation) { IMethodBinding methodBinding= (IMethodBinding)((MethodInvocation)expression).getName().resolveBinding(); - if ("void".equals(methodBinding.getReturnType().getName())) { + if ("void".equals(methodBinding.getReturnType().getName())) { //$NON-NLS-1$ pop= false; } } else if (expression instanceof SuperMethodInvocation) { IMethodBinding methodBinding= (IMethodBinding)((SuperMethodInvocation)expression).getName().resolveBinding(); - if ("void".equals(methodBinding.getReturnType().getName())) { + if ("void".equals(methodBinding.getReturnType().getName())) { //$NON-NLS-1$ pop= false; } } @@ -1262,11 +1371,30 @@ return false; } - String signature = getTypeSignature(node.getExpression().resolveTypeBinding()); + SimpleName fieldName= node.getName(); + IVariableBinding fieldBinding= (IVariableBinding) fieldName.resolveBinding(); + ITypeBinding declaringTypeBinding= fieldBinding.getDeclaringClass(); + Expression expression = node.getExpression(); + String fieldId = fieldName.getIdentifier(); - push(new PushFieldVariable(node.getName().getIdentifier(), signature, fCounter)); - - node.getExpression().accept(this); + if (Modifier.isStatic(fieldBinding.getModifiers())) { + push(new PushStaticFieldVariable(fieldId, getTypeName(declaringTypeBinding), fCounter)); + expression.accept(this); + push(new Pop()); + storeInstruction(); + } else { + if (declaringTypeBinding == null) { // it is a field without declaring type => it is the special length array field + push(new PushArrayLength(fCounter)); + } else { + if (isALocalType(declaringTypeBinding)) { + setHasError(true); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Qualified_local_type_field_access_cannot_be_used_in_an_evaluation_expression_31"), node.getStartPosition())); //$NON-NLS-1$ + return false; + } + push(new PushFieldVariable(fieldId, getTypeSignature(declaringTypeBinding), fCounter)); + } + expression.accept(this); + } return false; } @@ -1275,7 +1403,7 @@ * @see ASTVisitor#visit(FieldDeclaration) */ public boolean visit(FieldDeclaration node) { - return false; + return true; } /** @@ -1283,7 +1411,7 @@ */ public boolean visit(ForStatement node) { setHasError(true); - addErrorMessage(new Message("For statement cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.For_statement_cannot_be_used_in_an_evaluation_expression_12"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -1436,11 +1564,6 @@ break; } break; - case 'i': // instanceof - for (int i = operatorNumber - 1; i >= 0; i--) { - push(new InstanceOfOperator(fCounter)); - } - break; case '=': // equal equal for (int i = operatorNumber - 1; i >= 0; i--) { push(new EqualEqualOperator(types[i][1], types[i][2], true, fCounter)); @@ -1497,7 +1620,7 @@ if (unrecognized) { setHasError(true); - addErrorMessage(new Message("Unrecognized infix operator : " + opToken, node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Unrecognized_infix_operator____13") + opToken, node.getStartPosition())); //$NON-NLS-1$ } if (hasErrors()) { @@ -1572,6 +1695,17 @@ } /** + * @see ASTVisitor#visit(InstanceofExpression) + */ + public boolean visit(InstanceofExpression node) { + if (!isActive()) { + return false; + } + push(new InstanceOfOperator(fCounter)); + return true; + } + + /** * @see ASTVisitor#visit(Javadoc) */ public boolean visit(Javadoc node) { @@ -1583,7 +1717,7 @@ */ public boolean visit(LabeledStatement node) { setHasError(true); - addErrorMessage(new Message("Labaled Statement cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Labeled_Statement_cannot_be_used_in_an_evaluation_expression_14"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -1609,25 +1743,29 @@ return false; } + IMethodBinding methodBinding= (IMethodBinding) node.getName().resolveBinding(); + + if (containsALocalType(methodBinding)) { + setHasError(true); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Method_which_contains_a_local_type_as_parameter_cannot_be_used_in_an_evaluation_expression_32"), node.getStartPosition())); //$NON-NLS-1$ + } + if (hasErrors()) { return true; } - IMethodBinding methodBinding= (IMethodBinding) node.getName().resolveBinding(); - - ITypeBinding[] parameterTypes= methodBinding.getParameterTypes(); - int argCount= parameterTypes.length; + int argCount= methodBinding.getParameterTypes().length; String selector= methodBinding.getName(); - String signature= getMethodSignature(methodBinding).replace('.','/'); + String signature= getMethodSignature(methodBinding, null).replace('.','/'); boolean isStatic= Flags.isStatic(methodBinding.getModifiers()); Expression expression= node.getExpression(); + String typeSignature= getTypeSignature(methodBinding.getDeclaringClass()); + if (isStatic) { - String typeSignature= Signature.createTypeSignature(getQualifiedName(methodBinding.getDeclaringClass()), true); push(new SendStaticMessage(typeSignature, selector, signature, argCount, fCounter)); - if (expression != null) { node.getExpression().accept(this); push(new Pop()); @@ -1635,9 +1773,8 @@ } } else { push(new SendMessage(selector, signature, argCount, false, fCounter)); - if (expression == null) { - push(new PushThis()); + push(new PushThis(getEnclosingLevel(node, methodBinding.getDeclaringClass()))); storeInstruction(); } else { node.getExpression().accept(this); @@ -1738,7 +1875,7 @@ break; default: setHasError(true); - addErrorMessage(new Message("unrecognized postfix operator : " + opToken, node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.unrecognized_postfix_operator____15") + opToken, node.getStartPosition())); //$NON-NLS-1$ break; } @@ -1806,7 +1943,7 @@ if (unrecognized) { setHasError(true); - addErrorMessage(new Message("unrecognized prefix operator : " + opToken, node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.unrecognized_prefix_operator____16") + opToken, node.getStartPosition())); //$NON-NLS-1$ } return true; @@ -1820,8 +1957,6 @@ return false; } - push(new PushType(getPrimitiveTypeSignature(node.getPrimitiveTypeCode().toString()), true)); - return true; } @@ -1843,11 +1978,22 @@ node.getName().accept(this); break; case IBinding.VARIABLE: - String signature = getTypeSignature(node.getQualifier().resolveTypeBinding()); - - push(new PushFieldVariable(node.getName().getIdentifier(), signature, fCounter)); - node.getQualifier().accept(this); - storeInstruction(); + SimpleName fieldName= node.getName(); + IVariableBinding fieldBinding= (IVariableBinding) fieldName.resolveBinding(); + ITypeBinding declaringTypeBinding= fieldBinding.getDeclaringClass(); + String fieldId = fieldName.getIdentifier(); + + if (Modifier.isStatic(fieldBinding.getModifiers())) { + push(new PushStaticFieldVariable(fieldId, getTypeName(declaringTypeBinding), fCounter)); + storeInstruction(); + } else { + if (declaringTypeBinding == null) { + push(new PushArrayLength(fCounter)); + } else { + push(new PushFieldVariable(fieldId, getTypeSignature(declaringTypeBinding), fCounter)); + } + node.getQualifier().accept(this); + } break; } @@ -1861,6 +2007,7 @@ if (!isActive()) { return false; } + push(new ReturnInstruction(fCounter)); return true; } @@ -1872,28 +2019,37 @@ return false; } + if (hasErrors()) { + return true; + } + IBinding binding = node.resolveBinding(); + String variableId = node.getIdentifier(); if (binding == null) { setHasError(true); - addErrorMessage(new Message("binding == null for " + node.getIdentifier(), node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.binding_==_null_for__17") + variableId, node.getStartPosition())); //$NON-NLS-1$ return true; } switch (binding.getKind()) { case IBinding.TYPE: ITypeBinding typeBinding= (ITypeBinding) binding; - push(new PushType(getTypeName(typeBinding), false)); + push(new PushType(getTypeName(typeBinding))); break; case IBinding.VARIABLE: IVariableBinding variableBinding= (IVariableBinding) binding; - if (variableBinding.isField() && Modifier.isStatic(variableBinding.getModifiers())) { - push(new PushFieldVariable(node.getIdentifier(), false, fCounter)); - typeBinding= variableBinding.getDeclaringClass(); - push(new PushType(getTypeName(typeBinding), false)); - storeInstruction(); + ITypeBinding declaringTypeBinding= variableBinding.getDeclaringClass(); + if (variableBinding.isField()) { + if (Modifier.isStatic(variableBinding.getModifiers())) { + push(new PushStaticFieldVariable(variableId, getTypeName(declaringTypeBinding), fCounter)); + } else { + push(new PushFieldVariable(variableId, getTypeSignature(declaringTypeBinding), fCounter)); + push(new PushThis(getEnclosingLevel(node, declaringTypeBinding))); + storeInstruction(); + } } else { - push(new PushVariable(node.getIdentifier())); + push(new PushLocalVariable(variableId)); } break; } @@ -1911,7 +2067,7 @@ } ITypeBinding typeBinding = node.resolveBinding(); - push(new PushType(getTypeName(typeBinding), false)); + push(new PushType(getTypeName(typeBinding))); return false; } @@ -1924,7 +2080,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Single variable declaration is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Single_variable_declaration_cannot_be_used_in_an_evaluation_expression_18"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -1949,7 +2105,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("super constructor invocation cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.super_constructor_invocation_cannot_be_used_in_an_evaluation_expression_19"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -1961,11 +2117,26 @@ return false; } - push(new PushThis()); - storeInstruction(); + SimpleName fieldName= node.getName(); + IVariableBinding fieldBinding= (IVariableBinding) fieldName.resolveBinding(); + ITypeBinding declaringTypeBinding= fieldBinding.getDeclaringClass(); + String fieldId = fieldName.getIdentifier(); - push(new PushFieldVariable(node.getName().getIdentifier(), true, fCounter)); - + if (Modifier.isStatic(fieldBinding.getModifiers())) { + push(new PushStaticFieldVariable(fieldId, getTypeName(declaringTypeBinding), fCounter)); + } else { + Name qualifier = node.getQualifier(); + int superLevel= 1; + int enclosingLevel= 0; + if (qualifier != null) { + superLevel= getSuperLevel(qualifier.resolveTypeBinding(), declaringTypeBinding); + enclosingLevel= getEnclosingLevel(node, (ITypeBinding)qualifier.resolveBinding()); + } + push(new PushFieldVariable(fieldId, superLevel, fCounter)); + push(new PushThis(enclosingLevel)); + storeInstruction(); + } + return false; } @@ -1979,27 +2150,35 @@ return false; } - if (node.getQualifier() != null) { + IMethodBinding methodBinding = (IMethodBinding) node.getName().resolveBinding(); + + if (containsALocalType(methodBinding)) { setHasError(true); - addErrorMessage(new Message("Qualifier for super method invocation is not implemented", node.getStartPosition())); - return true; + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Method_which_contains_a_local_type_as_parameter_cannot_be_used_in_an_evaluation_expression_32"), node.getStartPosition())); //$NON-NLS-1$ } if (hasErrors()) { return true; } - IMethodBinding methodBinding = (IMethodBinding) node.getName().resolveBinding(); - ITypeBinding[] parameterTypes = methodBinding.getParameterTypes(); int argCount = parameterTypes.length; String selector = methodBinding.getName(); - String signature = getMethodSignature(methodBinding); - - push(new SendMessage(selector, signature, argCount, true, fCounter)); - - push(new PushThis()); - storeInstruction(); + String signature = getMethodSignature(methodBinding, null); + + Name qualifier= node.getQualifier(); + if (Modifier.isStatic(methodBinding.getModifiers())) { + String typeSignature= getTypeSignature(methodBinding.getDeclaringClass()); + push(new SendStaticMessage(typeSignature, selector, signature, argCount, fCounter)); + } else { + push(new SendMessage(selector, signature, argCount, true, fCounter)); + int enclosingLevel= 0; + if (qualifier != null) { + enclosingLevel= getEnclosingLevel(node, (ITypeBinding)qualifier.resolveBinding()); + } + push(new PushThis(enclosingLevel)); + storeInstruction(); + } Iterator iterator = node.arguments().iterator(); while (iterator.hasNext()) { @@ -2017,7 +2196,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Switch case is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Switch_case_cannot_be_used_in_an_evaluation_expression_20"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -2029,7 +2208,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Switch statement is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Switch_statement_cannot_be_used_in_an_evaluation_expression_21"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -2050,8 +2229,13 @@ if (!isActive()) { return false; } - - push(new PushThis()); + + Name qualifier= node.getQualifier(); + int enclosingLevel= 0; + if (qualifier != null) { + enclosingLevel= getEnclosingLevel(node, (ITypeBinding)qualifier.resolveBinding()); + } + push(new PushThis(enclosingLevel)); return false; } @@ -2064,7 +2248,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Throw statement is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Throw_statement_cannot_be_used_in_an_evaluation_expression_22"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -2076,7 +2260,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Try statement is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Try_statement_cannot_be_used_in_an_evaluation_expression_23"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -2088,7 +2272,7 @@ return true; } setHasError(true); - addErrorMessage(new Message("Type declaration cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Type_declaration_cannot_be_used_in_an_evaluation_expression_24"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -2100,7 +2284,7 @@ return true; } setHasError(true); - addErrorMessage(new Message("Type declaration statement cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Type_declaration_statement_cannot_be_used_in_an_evaluation_expression_25"), node.getStartPosition())); //$NON-NLS-1$ return false; } @@ -2125,7 +2309,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Variable declaration expression is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Variable_declaration_cannot_be_used_in_an_evaluation_expression_26"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -2133,11 +2317,10 @@ * @see ASTVisitor#visit(VariableDeclarationFragment) */ public boolean visit(VariableDeclarationFragment node) { - if (!isActive()) { - return false; - } - setHasError(true); - addErrorMessage(new Message("Variable declaration fragment is not implemented", node.getStartPosition())); + // Don't add error here. A variable declaration fragment is contained in a + // variable declaraction expression or statement, or in a field declaration. + // The appropriate error is already added inthe first case, no error should + // be added in the second case. return true; } @@ -2149,7 +2332,7 @@ return false; } setHasError(true); - addErrorMessage(new Message("Variable declaration statement is not implemented", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.Variable_declaration_cannot_be_used_in_an_evaluation_expression_27"), node.getStartPosition())); //$NON-NLS-1$ return true; } @@ -2158,23 +2341,18 @@ */ public boolean visit(WhileStatement node) { setHasError(true); - addErrorMessage(new Message("While statement cannot be used in an evaluation expression", node.getStartPosition())); + addErrorMessage(new Message(EvaluationEngineMessages.getString("ASTInstructionCompiler.While_statement_cannot_be_used_in_an_evaluation_expression_28"), node.getStartPosition())); //$NON-NLS-1$ return false; } //-------------------------- - private String getQualifiedName(ITypeBinding typeBinding) { - IPackageBinding packageBinding = typeBinding.getPackage(); - return ((packageBinding == null || packageBinding.isUnnamed())? "" : packageBinding.getName() + ".") + typeBinding.getName(); - } - private int getTypeId(Expression expression) { ITypeBinding typeBinding = expression.resolveTypeBinding(); String typeName = typeBinding.getName(); if (typeBinding.isPrimitive()) { return getPrimitiveTypeId(typeName); - } else if ("String".equals(typeName) && "java.lang".equals(typeBinding.getPackage().getName())){ + } else if ("String".equals(typeName) && "java.lang".equals(typeBinding.getPackage().getName())){ //$NON-NLS-1$ //$NON-NLS-2$ return Instruction.T_String; } else { return Instruction.T_Object; @@ -2186,7 +2364,7 @@ return getPrimitiveTypeId(((PrimitiveType)type).getPrimitiveTypeCode().toString()); } else if (type.isSimpleType()) { SimpleType simpleType = (SimpleType) type; - if ("java.lang.String".equals(simpleType.getName())){ + if ("java.lang.String".equals(simpleType.getName())){ //$NON-NLS-1$ return Instruction.T_String; } else { return Instruction.T_Object; @@ -2199,14 +2377,25 @@ } - private String getMethodSignature(IMethodBinding methodBinding) { + private String getMethodSignature(IMethodBinding methodBinding, String enclosingTypeSignature) { ITypeBinding[] parameterTypes = methodBinding.getParameterTypes(); - int argCount = parameterTypes.length; - String[] parameterSignatures = new String[argCount]; - for (int i = 0; i < argCount; i++) { - parameterSignatures[i] = Signature.createTypeSignature(getQualifiedName(parameterTypes[i]), true); + int i; + int argCount; + String[] parameterSignatures; + if (enclosingTypeSignature == null) { + i= 0; + argCount= parameterTypes.length; + parameterSignatures= new String[argCount]; + } else { + i= 1; + argCount= parameterTypes.length + 1; + parameterSignatures= new String[argCount]; + parameterSignatures[0]= enclosingTypeSignature; } - String signature = Signature.createMethodSignature(parameterSignatures, Signature.createTypeSignature(getQualifiedName(methodBinding.getReturnType()), true)); + for (; i < argCount; i++) { + parameterSignatures[i]= getTypeSignature(parameterTypes[i]); + } + String signature= Signature.createMethodSignature(parameterSignatures, getTypeSignature(methodBinding.getReturnType())); return signature; } @@ -2243,23 +2432,23 @@ private String getPrimitiveTypeSignature(String typeName) { switch (getPrimitiveTypeId(typeName)) { case Instruction.T_byte: - return "B"; + return "B"; //$NON-NLS-1$ case Instruction.T_char: - return "C"; + return "C"; //$NON-NLS-1$ case Instruction.T_double: - return "D"; + return "D"; //$NON-NLS-1$ case Instruction.T_float: - return "F"; + return "F"; //$NON-NLS-1$ case Instruction.T_int: - return "I"; + return "I"; //$NON-NLS-1$ case Instruction.T_long: - return "J"; + return "J"; //$NON-NLS-1$ case Instruction.T_short: - return "S"; + return "S"; //$NON-NLS-1$ case Instruction.T_boolean: - return "Z"; + return "Z"; //$NON-NLS-1$ case Instruction.T_void: - return "V"; + return "V"; //$NON-NLS-1$ } // throw exception return null;
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/BinaryBasedSourceGenerator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/BinaryBasedSourceGenerator.java index 5eacf9e..b5b1752 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/BinaryBasedSourceGenerator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/BinaryBasedSourceGenerator.java
@@ -14,6 +14,7 @@ import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue; import org.eclipse.jdt.internal.debug.core.model.JDIStackFrame; +import com.sun.jdi.ClassNotPreparedException; import com.sun.jdi.ClassType; import com.sun.jdi.Field; import com.sun.jdi.InterfaceType; @@ -24,27 +25,28 @@ public class BinaryBasedSourceGenerator { - private static final String RUN_METHOD_NAME= "___run"; + private static final String RUN_METHOD_NAME= "___run"; //$NON-NLS-1$ private static final String EVAL_METHOD_NAME= "___eval"; //$NON-NLS-1$ + private static final String ANONYMOUS_CLASS_NAME= "___EvalClass"; //$NON-NLS-1$ - private int[] fLocalModifiers; - private String[] fLocalTypesNames; + private String[] fLocalVariableTypeNames; - private String[] fLocalVariables; + private String[] fLocalVariableNames; private boolean fIsInStaticMethod; private StringBuffer fSource; + private int fRunMethodStartOffset; + private int fRunMethodLength; private int fCodeSnippetPosition; private String fCompilationUnitName; - public BinaryBasedSourceGenerator(int[] localModifiers, String[] localTypesNames, String[] localVariables, boolean isInStaticMethod) throws DebugException { - fLocalModifiers= localModifiers; - fLocalTypesNames= localTypesNames; - fLocalVariables= localVariables; + public BinaryBasedSourceGenerator(String[] localTypesNames, String[] localVariables, boolean isInStaticMethod) throws DebugException { + fLocalVariableTypeNames= localTypesNames; + fLocalVariableNames= localVariables; fIsInStaticMethod= isInStaticMethod; } @@ -65,10 +67,10 @@ return; } ReferenceType refType= (ReferenceType)underlyingType; - fSource= buildTypeDeclaration(refType, buildRunMethod(refType), null); + fSource= buildTypeDeclaration(refType, buildRunMethod(refType), null, false); String packageName = getPackageName(refType.name()); if (packageName != null) { - fSource.insert(0, "package " + packageName + ";\n"); + fSource.insert(0, "package " + packageName + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ fCodeSnippetPosition += 10 + packageName.length(); } fCompilationUnitName= getSimpleName(refType.name()); @@ -87,29 +89,27 @@ StringBuffer source = new StringBuffer(); if (isInStaticMethod()) { - source.append("static "); + source.append("static "); //$NON-NLS-1$ } - source.append("void "); + source.append("void "); //$NON-NLS-1$ source.append(getUniqueMethodName(RUN_METHOD_NAME, type)); source.append('('); - for(int i= 0, length= fLocalModifiers.length; i < length; i++) { - if (fLocalModifiers[i] != 0) { - source.append(Flags.toString(fLocalModifiers[i])); - source.append(' '); - } - source.append(getDotName(fLocalTypesNames[i])); + for(int i= 0, length= fLocalVariableNames.length; i < length; i++) { + source.append(getDotName(fLocalVariableTypeNames[i])); source.append(' '); - source.append(fLocalVariables[i]); + source.append(fLocalVariableNames[i]); if (i + 1 < length) - source.append(", "); + source.append(", "); //$NON-NLS-1$ } - source.append(") throws Throwable {"); + source.append(") throws Throwable {"); //$NON-NLS-1$ source.append('\n'); fCodeSnippetPosition= source.length(); + fRunMethodStartOffset= fCodeSnippetPosition; source.append('\n'); source.append('}').append('\n'); + fRunMethodLength= source.length(); return source; } @@ -117,26 +117,30 @@ ReferenceType referenceType = object.referenceType(); - StringBuffer source = buildTypeDeclaration(referenceType, buffer, nestedTypeName); - Field thisField= null; List fields= referenceType.visibleFields(); for (Iterator iterator= fields.iterator(); iterator.hasNext();) { Field field= (Field) iterator.next(); - if (field.name().startsWith("this$")) { + if (field.name().startsWith("this$")) { //$NON-NLS-1$ thisField = field; break; } } + StringBuffer source = buildTypeDeclaration(referenceType, buffer, nestedTypeName, thisField != null); + if (thisField == null) { String packageName = getPackageName(referenceType.name()); if (packageName != null) { - source.insert(0, "package " + packageName + ";\n"); + source.insert(0, "package " + packageName + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ fCodeSnippetPosition += 10 + packageName.length(); } - fCompilationUnitName= getSimpleName(referenceType.name()); + if (isAnonymousTypeName(referenceType.name())) { + fCompilationUnitName= ANONYMOUS_CLASS_NAME; + } else { + fCompilationUnitName= getSimpleName(referenceType.name()); + } } else { ObjectReference thisObject= (ObjectReference)object.getValue(thisField); return buildTypeDeclaration(thisObject, source, referenceType.name()); @@ -145,7 +149,7 @@ return source; } - private StringBuffer buildTypeDeclaration(ReferenceType referenceType, StringBuffer buffer, String nestedTypeName) { + private StringBuffer buildTypeDeclaration(ReferenceType referenceType, StringBuffer buffer, String nestedTypeName, boolean hasEnclosingInstance) { StringBuffer source= new StringBuffer(); String typeName= referenceType.name(); @@ -155,68 +159,94 @@ if (isAnonymousType) { ClassType classType= (ClassType) referenceType; - source.append("void "); - source.append(getUniqueMethodName(EVAL_METHOD_NAME, referenceType)); - source.append("() {\n"); - source.append("new ").append(getDotName(classType.superclass().name())).append("()"); + List interfaceList= classType.interfaces(); + String superClassName= classType.superclass().name(); + if (hasEnclosingInstance) { + source.append("void "); //$NON-NLS-1$ + source.append(getUniqueMethodName(EVAL_METHOD_NAME, referenceType)); + source.append("() {\nnew "); //$NON-NLS-1$ + if (interfaceList.size() != 0) { + source.append(getDotName(((InterfaceType)interfaceList.get(0)).name())); + } else { + source.append(getDotName(superClassName)); + } + source.append("()"); //$NON-NLS-1$ + } else { + source.append("public class ").append(ANONYMOUS_CLASS_NAME).append(" "); //$NON-NLS-1$ //$NON-NLS-2$ + if (interfaceList.size() != 0) { + source.append(" implements ").append(getDotName(((InterfaceType)interfaceList.get(0)).name())); //$NON-NLS-1$ + } else { + source.append(" implements ").append(getDotName(superClassName)); //$NON-NLS-1$ + } + } } else { if (referenceType.isFinal()) { - source.append("final "); + source.append("final "); //$NON-NLS-1$ } if (referenceType.isStatic()) { - source.append("static "); + source.append("static "); //$NON-NLS-1$ } if (referenceType instanceof ClassType) { ClassType classType= (ClassType) referenceType; if (classType.isAbstract()) { - source.append("abstract "); + source.append("abstract "); //$NON-NLS-1$ } - source.append("class "); + source.append("class "); //$NON-NLS-1$ source.append(getSimpleName(typeName)).append(' '); ClassType superClass= classType.superclass(); if (superClass != null) { - source.append("extends ").append(getDotName(superClass.name())).append(' '); + source.append("extends ").append(getDotName(superClass.name())).append(' '); //$NON-NLS-1$ } - - List interfaces= classType.interfaces(); + + List interfaces; + try { + interfaces= classType.interfaces(); + } catch (ClassNotPreparedException e) { + return new StringBuffer(); + } if (interfaces.size() != 0) { - source.append("implements "); + source.append("implements "); //$NON-NLS-1$ Iterator iterator= interfaces.iterator(); InterfaceType interface_= (InterfaceType)iterator.next(); - source.append(interface_.name()); + source.append(getDotName(interface_.name())); while (iterator.hasNext()) { - source.append(',').append(((InterfaceType)iterator.next()).name()); + source.append(',').append(getDotName(((InterfaceType)iterator.next()).name())); } } } else if (referenceType instanceof InterfaceType) { InterfaceType interfaceType= (InterfaceType) referenceType; - source.append("interface "); + source.append("interface "); //$NON-NLS-1$ - source.append(getSimpleName(typeName)); + source.append(getSimpleName(typeName)).append(' '); - List interfaces= interfaceType.superinterfaces(); + List interfaces; + try { + interfaces= interfaceType.superinterfaces(); + } catch (ClassNotPreparedException e) { + return new StringBuffer(); + } if (interfaces.size() != 0) { - source.append("extends "); + source.append("extends "); //$NON-NLS-1$ Iterator iterator= interfaces.iterator(); InterfaceType interface_= (InterfaceType)iterator.next(); - source.append(interface_.name()); + source.append(getDotName(interface_.name())); while (iterator.hasNext()) { - source.append(',').append(interface_.name()); + source.append(',').append(getDotName(((InterfaceType)iterator.next()).name())); } } } } - source.append(" {\n"); + source.append(" {\n"); //$NON-NLS-1$ if (buffer != null) { fCodeSnippetPosition += source.length(); @@ -226,7 +256,7 @@ List fields= referenceType.fields(); for (Iterator iterator= fields.iterator(); iterator.hasNext();) { Field field= (Field) iterator.next(); - if (!field.name().startsWith("this$")) { + if (!field.name().startsWith("this$")) { //$NON-NLS-1$ source.append(buildFieldDeclaration(field)); } } @@ -244,23 +274,23 @@ for (Iterator iterator = nestedTypes.iterator(); iterator.hasNext();) { ReferenceType nestedType= (ReferenceType) iterator.next(); if (isADirectInnerType(typeName, nestedType.name())) { - source.append(buildTypeDeclaration(nestedType, null, null)); + source.append(buildTypeDeclaration(nestedType, null, null, true)); } } } else { for (Iterator iterator = nestedTypes.iterator(); iterator.hasNext();) { ReferenceType nestedType= (ReferenceType) iterator.next(); if (!nestedTypeName.equals(nestedType.name()) && isADirectInnerType(typeName, nestedType.name())) { - source.append(buildTypeDeclaration(nestedType, null, null)); + source.append(buildTypeDeclaration(nestedType, null, null, true)); } } } - if (isAnonymousType) { - source.append("};\n"); + if (isAnonymousType & hasEnclosingInstance) { + source.append("};\n"); //$NON-NLS-1$ } - source.append("}\n"); + source.append("}\n"); //$NON-NLS-1$ return source; } @@ -269,22 +299,22 @@ StringBuffer source = new StringBuffer(); if (field.isFinal()) { - source.append("final "); + source.append("final "); //$NON-NLS-1$ } if (field.isStatic()) { - source.append("static "); + source.append("static "); //$NON-NLS-1$ } if (field.isPublic()) { - source.append("public "); + source.append("public "); //$NON-NLS-1$ } else if (field.isPrivate()) { - source.append("private "); + source.append("private "); //$NON-NLS-1$ } else if (field.isProtected()) { - source.append("protected "); + source.append("protected "); //$NON-NLS-1$ } - source.append(field.typeName()).append(' ').append(field.name()).append(';').append('\n'); + source.append(getDotName(field.typeName())).append(' ').append(field.name()).append(';').append('\n'); return source; } @@ -293,43 +323,43 @@ StringBuffer source= new StringBuffer(); if (method.isFinal()) { - source.append("final "); + source.append("final "); //$NON-NLS-1$ } if (method.isStatic()) { - source.append("static "); + source.append("static "); //$NON-NLS-1$ } if (method.isNative()) { - source.append("native "); + source.append("native "); //$NON-NLS-1$ } else if (method.isAbstract()) { - source.append("abstract "); + source.append("abstract "); //$NON-NLS-1$ } if (method.isPublic()) { - source.append("public "); + source.append("public "); //$NON-NLS-1$ } else if (method.isPrivate()) { - source.append("private "); + source.append("private "); //$NON-NLS-1$ } else if (method.isProtected()) { - source.append("protected "); + source.append("protected "); //$NON-NLS-1$ } - source.append(method.returnTypeName()).append(' ').append(method.name()).append('('); + source.append(getDotName(method.returnTypeName())).append(' ').append(method.name()).append('('); List arguments= method.argumentTypeNames(); int i= 0; if (arguments.size() != 0) { Iterator iterator= arguments.iterator(); - source.append((String) iterator.next()).append(" arg").append(i++); + source.append(getDotName((String) iterator.next())).append(" arg").append(i++); //$NON-NLS-1$ while (iterator.hasNext()) { - source.append(',').append(getDotName((String) iterator.next())).append(" arg").append(i++); + source.append(',').append(getDotName((String) iterator.next())).append(" arg").append(i++); //$NON-NLS-1$ } } source.append(')'); if (method.isAbstract() || method.isNative()) { // No body for abstract and native methods - source.append(";\n"); + source.append(";\n"); //$NON-NLS-1$ } else { source.append('{').append('\n'); source.append(getReturnStatement(method.returnTypeName())); @@ -342,14 +372,14 @@ private String getReturnStatement(String returnTypeName) { String typeName= getSimpleName(returnTypeName); if (typeName.charAt(typeName.length() - 1) == ']') { - return "return null;\n"; + return "return null;\n"; //$NON-NLS-1$ } switch (typeName.charAt(0)) { case 'v': - return ""; + return ""; //$NON-NLS-1$ case 'b': if (typeName.charAt(1) == 'o') { - return "return false;\n"; + return "return false;\n"; //$NON-NLS-1$ } case 's': case 'c': @@ -357,9 +387,9 @@ case 'l': case 'd': case 'f': - return "return 0;\n"; + return "return 0;\n"; //$NON-NLS-1$ default: - return "return null;\n"; + return "return null;\n"; //$NON-NLS-1$ } } @@ -406,8 +436,16 @@ return fCompilationUnitName; } - public int getBlockStar() { + public int getSnippetStart() { return fCodeSnippetPosition - 2; } + + public int getRunMethodStart() { + return fCodeSnippetPosition - fRunMethodStartOffset; + } + + public int getRunMethodLength() { + return fRunMethodLength; + } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java index 233a107..0fbaef5 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java
@@ -5,6 +5,15 @@ * All Rights Reserved. */ import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; + +import com.sun.jdi.AbsentInformationException; +import com.sun.jdi.ClassType; +import com.sun.jdi.Location; +import com.sun.jdi.Method; +import com.sun.jdi.ReferenceType; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; @@ -40,60 +49,97 @@ private String fCodeSnippet; - private String[] fImports; - private int[] fLocalModifiers; - private String[] fLocalTypesNames; - private String[] fLocalVariables; + private String[] fLocalVariableTypeNames; + private String[] fLocalVariableNames; private String fSource; private String fCompilationUnitName; - private int fStartPosition; + private int fSnippetStartPosition; + private int fRunMethodStartPosition; + private int fRunMethodLength; /** * Rebuild source in presence of external local variables */ - public EvaluationSourceGenerator(String[] imports, int[] localModifiers, String[] localTypesNames, String[] localVariables, String codeSnippet) { - fImports = imports; - fLocalModifiers = localModifiers; - fLocalTypesNames = localTypesNames; - fLocalVariables = localVariables; - fCodeSnippet= codeSnippet; + public EvaluationSourceGenerator(String[] localVariableTypesNames, String[] localVariableNames, String codeSnippet) { + fLocalVariableTypeNames = localVariableTypesNames; + fLocalVariableNames = localVariableNames; + fCodeSnippet= getCompleteSnippet(codeSnippet); + } + + public EvaluationSourceGenerator(String codeSnippet) { + this(new String[0], new String[0], codeSnippet); + } + + protected String getCompleteSnippet(String codeSnippet) { + + if (isExpression(codeSnippet)) { + codeSnippet = "return " + codeSnippet + ';'; //$NON-NLS-1$ + } + return codeSnippet; + } + + protected boolean isExpression(String codeSnippet) { + return codeSnippet.indexOf(';') == -1 && codeSnippet.indexOf('{') == -1 && codeSnippet.indexOf('}') == -1 && codeSnippet.indexOf("return") == -1; //$NON-NLS-1$ } public String getCompilationUnitName() { return fCompilationUnitName; } - public int getStartPosition() { - return fStartPosition; + public int getSnippetStart() { + return fSnippetStartPosition; + } + public int getRunMethodStart() { + return fRunMethodStartPosition; + } + public int getRunMethodLength() { + return fRunMethodLength; + } + protected void setSnippetStart(int position) { + fSnippetStartPosition= position; + } + protected void setRunMethodStart(int position) { + fRunMethodStartPosition= position; + } + protected void setRunMethodLength(int length) { + fRunMethodLength= length; + } + + public String getSnippet() { + return fCodeSnippet; } private void createEvaluationSourceFromSource(String source, int position, boolean isLineNumber) throws DebugException { CompilationUnit unit= AST.parseCompilationUnit(source.toCharArray()); - SourceBasedSourceGenerator visitor= new SourceBasedSourceGenerator(unit, position, isLineNumber, fLocalModifiers, fLocalTypesNames, fLocalVariables, fCodeSnippet); + SourceBasedSourceGenerator visitor= new SourceBasedSourceGenerator(unit, position, isLineNumber, fLocalVariableTypeNames, fLocalVariableNames, fCodeSnippet); unit.accept(visitor); setSource(visitor.getSource()); setCompilationUnitName(visitor.getCompilationUnitName()); - setStartPosition(visitor.getStartPosition()); + setSnippetStart(visitor.getSnippetStart()); + setRunMethodStart(visitor.getRunMethodStart()); + setRunMethodLength(visitor.getRunMethodLength()); } private void createEvaluationSourceFromJDIObject(BinaryBasedSourceGenerator objectToEvaluationSourceMapper) throws DebugException { setCompilationUnitName(objectToEvaluationSourceMapper.getCompilationUnitName()); - setStartPosition(objectToEvaluationSourceMapper.getBlockStar()); + setSnippetStart(objectToEvaluationSourceMapper.getSnippetStart()); + setRunMethodStart(objectToEvaluationSourceMapper.getRunMethodStart()); + setRunMethodLength(fCodeSnippet.length() + objectToEvaluationSourceMapper.getRunMethodLength()); setSource(objectToEvaluationSourceMapper.getSource().insert(objectToEvaluationSourceMapper.getCodeSnippetPosition(), fCodeSnippet).toString()); } private BinaryBasedSourceGenerator getInstanceSourceMapper(JDIObjectValue objectValue, boolean isInStaticMethod) throws DebugException { - BinaryBasedSourceGenerator objectToEvaluationSourceMapper = new BinaryBasedSourceGenerator(fLocalModifiers, fLocalTypesNames, fLocalVariables, isInStaticMethod); + BinaryBasedSourceGenerator objectToEvaluationSourceMapper = new BinaryBasedSourceGenerator(fLocalVariableTypeNames, fLocalVariableNames, isInStaticMethod); objectToEvaluationSourceMapper.buildSource(objectValue); return objectToEvaluationSourceMapper; } private BinaryBasedSourceGenerator getStaticSourceMapper(JDIClassType classType, boolean isInStaticMethod) throws DebugException { - BinaryBasedSourceGenerator objectToEvaluationSourceMapper = new BinaryBasedSourceGenerator(fLocalModifiers, fLocalTypesNames, fLocalVariables, isInStaticMethod); + BinaryBasedSourceGenerator objectToEvaluationSourceMapper = new BinaryBasedSourceGenerator(fLocalVariableTypeNames, fLocalVariableNames, isInStaticMethod); objectToEvaluationSourceMapper.buildSource(classType); return objectToEvaluationSourceMapper; } @@ -102,7 +148,8 @@ if (fSource == null) { try { String baseSource= getSourceFromFrame(frame); - if (baseSource != null) { + int lineNumber= frame.getLineNumber(); + if (baseSource != null && lineNumber != -1) { createEvaluationSourceFromSource(baseSource, frame.getLineNumber(), true); } else { JDIObjectValue object= (JDIObjectValue)frame.getThis(); @@ -125,33 +172,42 @@ public String getSource(IJavaObject thisObject, IJavaProject javaProject) throws DebugException { if (fSource == null) { - try { - IType type= getTypeFromProject(thisObject.getJavaType().getName() ,javaProject); - String baseSource= null; - if (type != null) { - ICompilationUnit compilationUnit= type.getCompilationUnit(); - if (compilationUnit != null) { - baseSource= compilationUnit.getSource(); - } else { - IClassFile classFile= type.getClassFile(); - if (classFile != null) { - baseSource= classFile.getSource(); - } - } - } - if (baseSource == null) { + String baseSource= getTypeSourceFromProject(thisObject.getJavaType().getName(), javaProject); + int lineNumber= getLineNumber((JDIObjectValue) thisObject); + if (baseSource == null || lineNumber == -1) { BinaryBasedSourceGenerator mapper= getInstanceSourceMapper((JDIObjectValue) thisObject, false); createEvaluationSourceFromJDIObject(mapper); } else { - createEvaluationSourceFromSource(baseSource, type.getSourceRange().getOffset(), false); + createEvaluationSourceFromSource(baseSource, lineNumber, true); } - } catch(JavaModelException e) { - throw new DebugException(e.getStatus()); - } } return fSource; } - + + private int getLineNumber(JDIObjectValue objectValue) { + ReferenceType referenceType= objectValue.getUnderlyingObject().referenceType(); + String referenceTypeName= referenceType.name(); + Location location; + Hashtable lineNumbers= new Hashtable(); + try { + for (Iterator iterator = referenceType.allLineLocations().iterator(); iterator.hasNext();) { + lineNumbers.put(new Integer(((Location)iterator.next()).lineNumber()), this); + } + for (Iterator iterator = referenceType.allLineLocations().iterator(); iterator.hasNext();) { + location= (Location)iterator.next(); + if (!location.declaringType().name().equals(referenceTypeName)) { + lineNumbers.remove(new Integer(((Location)iterator.next()).lineNumber())); + } + } + if (lineNumbers.size() > 0) { + return ((Integer)lineNumbers.keys().nextElement()).intValue(); + } + return -1; + } catch(AbsentInformationException e) { + return -1; + } + } + protected String getSourceFromFrame(IJavaStackFrame frame) throws JavaModelException { ILaunch launch= frame.getLaunch(); if (launch == null) { @@ -171,6 +227,9 @@ if (sourceElement instanceof ICompilationUnit) { return ((ICompilationUnit)sourceElement).getSource(); } + if (sourceElement instanceof IClassFile) { + return ((IClassFile)sourceElement).getSource(); + } return null; } @@ -178,79 +237,36 @@ fCompilationUnitName= name; } - protected void setStartPosition(int position) { - fStartPosition= position; - } - protected void setSource(String source) { fSource= source; } - - /** - * Returns the type associated with the specified - * name in this evaluation engine's associated Java project. - * - * @param typeName fully qualified name of type, for - * example, <code>java.lang.String</code> - * @return main type associated with source file - * @exception DebugException if:<ul> - * <li>the resolved type is an inner type</li> - * <li>unable to resolve a type</li> - * <li>a lower level Java exception occurs</li> - * </ul> - */ - private IType getTypeFromProject(String typeName, IJavaProject javaProject) throws DebugException { - String path = typeName.replace('.', IPath.SEPARATOR); + + private String getTypeSourceFromProject(String typeName, IJavaProject javaProject) throws DebugException { + String path = typeName; + int pos = path.indexOf('$'); + if (pos != -1) { + path= path.substring(0, pos); + } + pos++; + path = path.replace('.', IPath.SEPARATOR); path+= ".java"; //$NON-NLS-1$ IPath sourcePath = new Path(path); - IType type = null; + String source= null; try { IJavaElement result = javaProject.findElement(sourcePath); - String[] typeNames = getNestedTypeNames(typeName); if (result != null) { if (result instanceof IClassFile) { - type = ((IClassFile)result).getType(); + source = ((IClassFile)result).getSource(); } else if (result instanceof ICompilationUnit) { - type = ((ICompilationUnit)result).getType(typeNames[0]); - } else if (result instanceof IType) { - type = ((IType)result); - } - } - if (type != null) { - for (int i = 1; i < typeNames.length; i++) { - type = type.getType(typeNames[i]); + source = ((ICompilationUnit)result).getSource(); } } } catch (JavaModelException e) { throw new DebugException(e.getStatus()); } - return type; + return source; } - - /** - * Returns an array of simple type names that are - * part of the given type's qualified name. For - * example, if the given name is <code>x.y.A$B</code>, - * an array with <code>["A", "B"]</code> is returned. - * - * @param typeName fully qualified type name - * @return array of nested type names - */ - protected String[] getNestedTypeNames(String typeName) { - int index = typeName.lastIndexOf('.'); - if (index >= 0) { - typeName= typeName.substring(index + 1); - } - index = typeName.indexOf('$'); - ArrayList list = new ArrayList(1); - while (index >= 0) { - list.add(typeName.substring(0, index)); - typeName = typeName.substring(index + 1); - index = typeName.indexOf('$'); - } - list.add(typeName); - return (String[])list.toArray(new String[list.size()]); - } + }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationThread.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationThread.java index b13f8f9..2446342 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationThread.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationThread.java
@@ -9,6 +9,7 @@ import org.eclipse.jdt.debug.core.IEvaluationRunnable; import org.eclipse.jdt.debug.core.IJavaThread; import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.JDIDebugModel; import org.eclipse.jdt.debug.eval.ICompiledExpression; import org.eclipse.jdt.debug.eval.IEvaluationListener; import org.eclipse.jdt.debug.eval.IEvaluationResult; @@ -139,13 +140,13 @@ fException = exception; } catch (Throwable exception) { JDIDebugPlugin.log(exception); - fException = new CoreException(new Status(IStatus.ERROR, JDIDebugPlugin.getUniqueIdentifier(), IStatus.ERROR, InstructionsEvaluationMessages.getString("InstructionSequence.Runtime_exception_occurred_during_evaluation._See_log_for_details_1"), exception)); //$NON-NLS-1$ + fException = new CoreException(new Status(IStatus.ERROR, JDIDebugModel.getPluginIdentifier(), IStatus.ERROR, InstructionsEvaluationMessages.getString("InstructionSequence.Runtime_exception_occurred_during_evaluation._See_log_for_details_1"), exception)); //$NON-NLS-1$ } } }; CoreException exception = null; try { - fThread.runEvaluation(er, null, fEvaluationDetail, fHitBreakpoints); + fThread.runEvaluation(er, null, fEvaluationDetail); } catch (DebugException e) { exception = e; }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/Interpreter.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/Interpreter.java index 82d4169..3afa791 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/Interpreter.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/Interpreter.java
@@ -7,32 +7,38 @@ import java.util.Stack; import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.IJavaVariable; import org.eclipse.jdt.internal.debug.eval.ast.instructions.Instruction; -import org.eclipse.jdt.internal.debug.eval.model.IRuntimeContext; -import org.eclipse.jdt.internal.debug.eval.model.IValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; -import org.eclipse.jdt.internal.debug.eval.model.IVirtualMachine; +import org.eclipse.jdt.internal.debug.eval.ast.instructions.InstructionSequence; public class Interpreter { private Instruction[] fInstructions; private int fInstructionCounter; private IRuntimeContext fContext; private Stack fStack; + private IJavaValue fLastValue; - public Interpreter(Instruction[] instructions, IRuntimeContext context) { - fInstructions= instructions; + private boolean fStopped= false; + + public Interpreter(InstructionSequence instructions, IRuntimeContext context) { + fInstructions= instructions.getInstructions(); fContext= context; } public void execute() throws CoreException { reset(); - while(fInstructionCounter < fInstructions.length) { + while(fInstructionCounter < fInstructions.length && !fStopped) { Instruction instruction= fInstructions[fInstructionCounter++]; instruction.setInterpreter(this); instruction.execute(); instruction.setInterpreter(null); } } + + public void stop() { + fStopped= true; + } private void reset() { fStack= new Stack(); @@ -74,21 +80,29 @@ return fContext; } - public IValue getResult() { - if (fStack.isEmpty()) - return getContext().getVM().voidValue(); + public IJavaValue getResult() { + if (fStack == null || fStack.isEmpty()) { + if (fLastValue == null) { + return getContext().getVM().voidValue(); + } + return fLastValue; + } Object top= fStack.peek(); - if (top instanceof IVariable) { + if (top instanceof IJavaVariable) { try { - return ((IVariable)top).getValue(); + return (IJavaValue)((IJavaVariable)top).getValue(); } catch (CoreException exception) { return getContext().getVM().newValue(exception.getStatus().getMessage()); } } - if (top instanceof IValue) { - return (IValue)top; + if (top instanceof IJavaValue) { + return (IJavaValue)top; } // XXX: exception return null; - } + } + + public void setLastValue(IJavaValue value) { + fLastValue= value; + } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java index 9856e97..e5c731b 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
@@ -31,7 +31,6 @@ import org.eclipse.jdt.core.dom.ContinueStatement; import org.eclipse.jdt.core.dom.DoStatement; import org.eclipse.jdt.core.dom.EmptyStatement; -import org.eclipse.jdt.core.dom.Expression; import org.eclipse.jdt.core.dom.ExpressionStatement; import org.eclipse.jdt.core.dom.FieldAccess; import org.eclipse.jdt.core.dom.FieldDeclaration; @@ -57,7 +56,6 @@ import org.eclipse.jdt.core.dom.SimpleName; import org.eclipse.jdt.core.dom.SimpleType; import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.Statement; import org.eclipse.jdt.core.dom.StringLiteral; import org.eclipse.jdt.core.dom.SuperConstructorInvocation; import org.eclipse.jdt.core.dom.SuperFieldAccess; @@ -81,10 +79,10 @@ private static final String RUN_METHOD_NAME= "___run"; //$NON-NLS-1$ private static final String EVAL_METHOD_NAME= "___eval"; //$NON-NLS-1$ - - private int[] fLocalModifiers; - private String[] fLocalTypesNames; - private String[] fLocalVariables; + private static final String EVAL_FIELD_NAME= "___field"; //$NON-NLS-1$ + + private String[] fLocalVariableTypeNames; + private String[] fLocalVariableNames; private String fCodeSnippet; private boolean fRightTypeFound; @@ -105,15 +103,16 @@ private String fCompilationUnitName; - private int fStartPosOffset; + private int fSnippetStartPosition; + private int fRunMethodStartOffset; + private int fRunMethodLength; - public SourceBasedSourceGenerator(CompilationUnit unit, int position, boolean isLineNumber, int[] localModifiers, String[] localTypesNames, String[] localVariables, String codeSnippet) { + public SourceBasedSourceGenerator(CompilationUnit unit, int position, boolean isLineNumber, String[] localTypesNames, String[] localVariables, String codeSnippet) { fRightTypeFound= false; fUnit= unit; fPosition= position; - fLocalModifiers= localModifiers; - fLocalTypesNames= localTypesNames; - fLocalVariables= localVariables; + fLocalVariableTypeNames= localTypesNames; + fLocalVariableNames= localVariables; fCodeSnippet= codeSnippet; fIsInAStaticMethod= false; fIsLineNumber= isLineNumber; @@ -131,8 +130,14 @@ return fCompilationUnitName; } - public int getStartPosition() { - return fStartPosOffset; + public int getSnippetStart() { + return fSnippetStartPosition; + } + public int getRunMethodStart() { + return fSnippetStartPosition - fRunMethodStartOffset; + } + public int getRunMethodLength() { + return fRunMethodLength; } private int getPosition() { @@ -169,26 +174,24 @@ buffer.append("void "); //$NON-NLS-1$ buffer.append(getUniqueMethodName(RUN_METHOD_NAME, bodyDeclarations)); buffer.append('('); - for(int i= 0, length= fLocalModifiers.length; i < length; i++) { - if (fLocalModifiers[i] != 0) { - buffer.append(Flags.toString(fLocalModifiers[i])); - buffer.append(' '); - } - buffer.append(getDotName(fLocalTypesNames[i])); + for(int i= 0, length= fLocalVariableNames.length; i < length; i++) { + buffer.append(getDotName(fLocalVariableTypeNames[i])); buffer.append(' '); - buffer.append(fLocalVariables[i]); + buffer.append(fLocalVariableNames[i]); if (i + 1 < length) buffer.append(", "); //$NON-NLS-1$ } buffer.append(") throws Throwable {"); //$NON-NLS-1$ buffer.append('\n'); - fStartPosOffset= buffer.length() - 2; + fSnippetStartPosition= buffer.length() - 2; + fRunMethodStartOffset= fSnippetStartPosition; String codeSnippet= new String(fCodeSnippet).trim(); buffer.append(codeSnippet); buffer.append('\n'); buffer.append('}').append('\n'); + fRunMethodLength= buffer.length(); return buffer; } @@ -213,7 +216,7 @@ source.append('{').append('\n'); if (buffer != null) { - fStartPosOffset += source.length(); + fSnippetStartPosition += source.length(); source.append(buffer); } for (Iterator iterator= list.iterator(); iterator.hasNext();) { @@ -297,7 +300,7 @@ Name name = (Name) iterator.next(); if (first) { first = false; - source.append(" throws "); + source.append(" throws "); //$NON-NLS-1$ } else { source.append(','); } @@ -306,7 +309,7 @@ if (Flags.isAbstract(modifiers) || Flags.isNative(modifiers)) { // No body for abstract and native methods - source.append(";\n"); + source.append(";\n"); //$NON-NLS-1$ } else { source.append('{').append('\n'); source.append(getReturnExpression(methodDeclaration.getReturnType())); @@ -321,15 +324,15 @@ StringBuffer source = new StringBuffer(); source.append(Flags.toString(typeDeclaration.getModifiers())); if (typeDeclaration.isInterface()) { - source.append(" interface "); + source.append(" interface "); //$NON-NLS-1$ } else { - source.append(" class "); + source.append(" class "); //$NON-NLS-1$ } source.append(typeDeclaration.getName().getIdentifier()); Name superClass = typeDeclaration.getSuperclass(); if (superClass != null) { - source.append(" extends "); + source.append(" extends "); //$NON-NLS-1$ source.append(getQualifiedIdentifier(superClass)); } @@ -338,7 +341,7 @@ Name name = (Name) iterator.next(); if (first) { first = false; - source.append(" implements "); + source.append(" implements "); //$NON-NLS-1$ } else { source.append(','); } @@ -346,7 +349,7 @@ } if (buffer != null) { - fStartPosOffset+= source.length(); + fSnippetStartPosition+= source.length(); } source.append(buildTypeBody(buffer, typeDeclaration.bodyDeclarations())); @@ -358,22 +361,22 @@ PackageDeclaration packageDeclaration = compilationUnit.getPackage(); if (packageDeclaration != null) { - source.append("package "); + source.append("package "); //$NON-NLS-1$ source.append(getQualifiedIdentifier(packageDeclaration.getName())); - source.append(";\n"); + source.append(";\n"); //$NON-NLS-1$ } for (Iterator iterator = compilationUnit.imports().iterator(); iterator.hasNext();) { ImportDeclaration importDeclaration = (ImportDeclaration) iterator.next(); - source.append("import "); + source.append("import "); //$NON-NLS-1$ source.append(getQualifiedIdentifier(importDeclaration.getName())); if (importDeclaration.isOnDemand()) { - source.append(".*"); + source.append(".*"); //$NON-NLS-1$ } - source.append(";\n"); + source.append(";\n"); //$NON-NLS-1$ } - fStartPosOffset += source.length(); + fSnippetStartPosition += source.length(); source.append(buffer); for (Iterator iterator = compilationUnit.types().iterator(); iterator.hasNext();) { @@ -385,6 +388,11 @@ source.append(buildTypeDeclaration(null,typeDeclaration)); } } + if (fCompilationUnitName == null) { + // If no public class was found, the compilation unit + // name doesn't matter. + fCompilationUnitName= "Eval"; //$NON-NLS-1$ + } return source; } @@ -411,11 +419,36 @@ return methodName; } + /** + * Returns a field name that will be unique in the generated source. + * The generated name is baseName plus as many '_' characters as necessary + * to not duplicate an existing method name. + */ + private String getUniqueFieldName(String fieldName, List bodyDeclarations) { + Iterator iter= bodyDeclarations.iterator(); + BodyDeclaration bodyDeclaration; + FieldDeclaration fieldDeclaration; + String foundName; + while (iter.hasNext()) { + bodyDeclaration= (BodyDeclaration) iter.next(); + if (bodyDeclaration instanceof FieldDeclaration) { + fieldDeclaration= (FieldDeclaration)bodyDeclaration; + for (Iterator iterator= fieldDeclaration.fragments().iterator(); iterator.hasNext();) { + foundName= ((VariableDeclarationFragment) iterator.next()).getName().getIdentifier(); + if (foundName.startsWith(fieldName)) { + fieldName= foundName + '_'; + } + } + } + } + return fieldName; + } + private String getQualifiedIdentifier(Name name) { - String typeName= ""; + String typeName= ""; //$NON-NLS-1$ while (name.isQualifiedName()) { QualifiedName qualifiedName = (QualifiedName) name; - typeName= "." + qualifiedName.getName().getIdentifier() + typeName; + typeName= "." + qualifiedName.getName().getIdentifier() + typeName; //$NON-NLS-1$ name= qualifiedName.getQualifier(); } if (name.isSimpleName()) { @@ -434,7 +467,7 @@ ArrayType arrayType= (ArrayType) type; String res = getTypeName(arrayType.getElementType()); for (int i = 0, dim= arrayType.getDimensions(); i < dim; i++) { - res += "[]"; + res += "[]"; //$NON-NLS-1$ } return res; } else if (type.isPrimitiveType()) { @@ -447,18 +480,18 @@ public String getReturnExpression(Type type) { if (type.isSimpleType() || type.isArrayType()) { - return "return null;"; + return "return null;"; //$NON-NLS-1$ } else if (type.isPrimitiveType()) { String typeName= ((PrimitiveType) type).getPrimitiveTypeCode().toString(); char char0 = typeName.charAt(0); if (char0 == 'v') { - return ""; + return ""; //$NON-NLS-1$ } else { char char1 = typeName.charAt(1); if (char0 == 'b' && char1 == 'o') { - return "return false;"; + return "return false;"; //$NON-NLS-1$ } else { - return "return 0;"; + return "return 0;"; //$NON-NLS-1$ } } } @@ -487,28 +520,54 @@ StringBuffer source = buildTypeBody(fSource, bodyDeclarations); ASTNode parent = node.getParent(); - while (!(parent instanceof MethodDeclaration)) { + while (!(parent instanceof MethodDeclaration || parent instanceof FieldDeclaration)) { parent= parent.getParent(); } - MethodDeclaration enclosingMethodDeclaration = (MethodDeclaration) parent; fSource= new StringBuffer(); - - if (Flags.isStatic(enclosingMethodDeclaration.getModifiers())) { - fSource.append("static "); //$NON-NLS-1$ - } - fSource.append("void "); //$NON-NLS-1$ - fSource.append(getUniqueMethodName(EVAL_METHOD_NAME, bodyDeclarations)); - fSource.append("() {\n"); //$NON-NLS-1$ - fSource.append("new "); //$NON-NLS-1$ - fSource.append(getQualifiedIdentifier(node.getName())); - fSource.append("()"); //$NON-NLS-1$ - - fStartPosOffset+= fSource.length(); - fSource.append(source); - fSource.append(";}\n"); //$NON-NLS-1$ - + if (parent instanceof MethodDeclaration) { + MethodDeclaration enclosingMethodDeclaration = (MethodDeclaration) parent; + + if (Flags.isStatic(enclosingMethodDeclaration.getModifiers())) { + fSource.append("static "); //$NON-NLS-1$ + } + + fSource.append("void "); //$NON-NLS-1$ + fSource.append(getUniqueMethodName(EVAL_METHOD_NAME, bodyDeclarations)); + fSource.append("() {\n"); //$NON-NLS-1$ + fSource.append("new "); //$NON-NLS-1$ + fSource.append(getQualifiedIdentifier(node.getName())); + fSource.append("()"); //$NON-NLS-1$ + + fSnippetStartPosition+= fSource.length(); + fSource.append(source); + fSource.append(";}\n"); //$NON-NLS-1$ + + } else if (parent instanceof FieldDeclaration) { + FieldDeclaration enclosingFieldDeclaration = (FieldDeclaration) parent; + + if (Flags.isStatic(enclosingFieldDeclaration.getModifiers())) { + fSource.append("static "); //$NON-NLS-1$ + } + + Type type= enclosingFieldDeclaration.getType(); + while (type instanceof ArrayType) { + type= ((ArrayType)type).getComponentType(); + } + + fSource.append(getQualifiedIdentifier(((SimpleType)type).getName())); + fSource.append(' '); + fSource.append(getUniqueFieldName(EVAL_FIELD_NAME, bodyDeclarations)); + fSource.append(" = new "); //$NON-NLS-1$ + fSource.append(getQualifiedIdentifier(node.getName())); + fSource.append("()"); //$NON-NLS-1$ + + fSnippetStartPosition+= fSource.length(); + fSource.append(source); + fSource.append(";\n"); //$NON-NLS-1$ + + } fLastTypeName= ""; //$NON-NLS-1$ } @@ -572,15 +631,15 @@ fSource = new StringBuffer(); if (Flags.isStatic(enclosingMethodDeclaration.getModifiers())) { - fSource.append("static "); + fSource.append("static "); //$NON-NLS-1$ } - fSource.append("void ___eval() {\n"); - fStartPosOffset+= fSource.length(); + fSource.append("void ___eval() {\n"); //$NON-NLS-1$ + fSnippetStartPosition+= fSource.length(); fSource.append(source); - fSource.append("}\n"); + fSource.append("}\n"); //$NON-NLS-1$ - fLastTypeName = ""; + fLastTypeName = ""; //$NON-NLS-1$ } else { fSource = source; fLastTypeName = node.getName().getIdentifier();
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AndAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AndAssignmentOperator.java index 3140026..6f0cf40 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AndAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AndAssignmentOperator.java
@@ -11,7 +11,6 @@ } public String toString() { - return "'&=' operator"; + return InstructionsEvaluationMessages.getString("AndAssignmentOperator._&=___operator_1"); //$NON-NLS-1$ } - } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AndOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AndOperator.java index 03c2937..e50c782 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AndOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AndOperator.java
@@ -4,8 +4,9 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; + public class AndOperator extends BinaryOperator { public AndOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -17,49 +18,49 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getBooleanValue() & ((IPrimitiveValue) rightOperand).getBooleanValue(); + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getBooleanValue() & ((IJavaPrimitiveValue) rightOperand).getBooleanValue(); } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getIntValue() & ((IPrimitiveValue) rightOperand).getIntValue(); + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getIntValue() & ((IJavaPrimitiveValue) rightOperand).getIntValue(); } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getLongValue() & ((IPrimitiveValue) rightOperand).getLongValue(); + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getLongValue() & ((IJavaPrimitiveValue) rightOperand).getLongValue(); } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'&' operator"; + return InstructionsEvaluationMessages.getString("AndOperator_&___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayAccess.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayAccess.java index c8ffc36..a241d10 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayAccess.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayAccess.java
@@ -5,9 +5,13 @@ * All Rights Reserved. */ +import java.text.MessageFormat; + import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.*; -import org.eclipse.jdt.internal.debug.eval.model.EvaluationArrayVariable; +import org.eclipse.core.runtime.Status; +import org.eclipse.jdt.debug.core.IJavaArray; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.JDIDebugModel; /** * Resolves an array access - the top of the stack is @@ -21,13 +25,16 @@ } public void execute() throws CoreException { - int index = ((IPrimitiveValue)popValue()).getIntValue(); - IArray array = (IArray)popValue(); - push(new EvaluationArrayVariable(array, index)); + int index = ((IJavaPrimitiveValue)popValue()).getIntValue(); + IJavaArray array = (IJavaArray)popValue(); + if (index >= array.getLength() || index < 0) { + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, MessageFormat.format(InstructionsEvaluationMessages.getString("ArrayAccess.illegal_index"), new Object[] {new Integer(index)}), null)); //$NON-NLS-1$ + } + push(array.getVariables()[index]); } public String toString() { - return "array access"; + return InstructionsEvaluationMessages.getString("ArrayAccess.array_access_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayAllocation.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayAllocation.java index fc77dd8..6cbbbc9 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayAllocation.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayAllocation.java
@@ -5,10 +5,10 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IArray; -import org.eclipse.jdt.internal.debug.eval.model.IArrayType; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IType; +import org.eclipse.jdt.debug.core.IJavaArray; +import org.eclipse.jdt.debug.core.IJavaArrayType; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaType; public class ArrayAllocation extends ArrayInstruction { @@ -18,7 +18,7 @@ private boolean fHasInitializer; - private IArrayType[] fCachedArrayTypes; + private IJavaArrayType[] fCachedArrayTypes; /** * Constructor for ArrayAllocation. @@ -36,7 +36,7 @@ */ public void execute() throws CoreException { if (fHasInitializer) { - IArray array = (IArray) popValue(); + IJavaArray array = (IJavaArray) popValue(); pop(); // pop the type push(array); } else { @@ -44,19 +44,19 @@ int[] exprDimensions = new int[fExprDimension]; for (int i = fExprDimension - 1; i >= 0; i--) { - exprDimensions[i] = ((IPrimitiveValue)popValue()).getIntValue(); + exprDimensions[i] = ((IJavaPrimitiveValue)popValue()).getIntValue(); } - IType type = (IType) pop(); + IJavaType type = (IJavaType) pop(); - fCachedArrayTypes = new IArrayType[fDimension + 1]; + fCachedArrayTypes = new IJavaArrayType[fDimension + 1]; for (int i =fDimension, lim = fDimension - fExprDimension ; i > lim; i--) { - fCachedArrayTypes[i] = (IArrayType) type; - type = ((IArrayType)type).getComponentType(); + fCachedArrayTypes[i] = (IJavaArrayType) type; + type = ((IJavaArrayType)type).getComponentType(); } - IArray array = createArray(fDimension, exprDimensions); + IJavaArray array = createArray(fDimension, exprDimensions); push(array); } @@ -65,9 +65,9 @@ /** * Create and populate an array. */ - private IArray createArray(int dimension, int[] exprDimensions) throws CoreException { + private IJavaArray createArray(int dimension, int[] exprDimensions) throws CoreException { - IArray array = fCachedArrayTypes[dimension].newArray(exprDimensions[0]); + IJavaArray array = fCachedArrayTypes[dimension].newInstance(exprDimensions[0]); if (exprDimensions.length > 1) { int[] newExprDimension = new int[exprDimensions.length - 1]; @@ -85,7 +85,7 @@ } public String toString() { - return "array allocation"; + return InstructionsEvaluationMessages.getString("ArrayAllocation.array_allocation_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayInitializerInstruction.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayInitializerInstruction.java index 35380fb..65d2b1d 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayInitializerInstruction.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayInitializerInstruction.java
@@ -5,8 +5,8 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IArray; -import org.eclipse.jdt.internal.debug.eval.model.IArrayType; +import org.eclipse.jdt.debug.core.IJavaArray; +import org.eclipse.jdt.debug.core.IJavaArrayType; public class ArrayInitializerInstruction extends ArrayInstruction { @@ -32,8 +32,8 @@ */ public void execute() throws CoreException { - IArrayType arrayType = getType(fTypeSignature.replace('/','.'), fDimensions); - IArray array = arrayType.newArray(fLength); + IJavaArrayType arrayType = getType(fTypeSignature.replace('/','.'), fDimensions); + IJavaArray array = arrayType.newInstance(fLength); for (int i = fLength - 1; i >= 0; i--) { array.setValue(i, popValue()); @@ -44,7 +44,7 @@ } public String toString() { - return "array initializer"; + return InstructionsEvaluationMessages.getString("ArrayInitializerInstruction.array_initializer_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayInstruction.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayInstruction.java index d6ba6ef..8d60549 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayInstruction.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ArrayInstruction.java
@@ -6,9 +6,9 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.Signature; -import org.eclipse.jdt.internal.debug.eval.model.IArrayType; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IType; +import org.eclipse.jdt.debug.core.IJavaArrayType; +import org.eclipse.jdt.debug.core.IJavaObject; +import org.eclipse.jdt.debug.core.IJavaType; public abstract class ArrayInstruction extends CompoundInstruction { @@ -18,31 +18,31 @@ } - protected IArrayType getType(String sign, int dimension) throws CoreException { + protected IJavaArrayType getType(String sign, int dimension) throws CoreException { String qualifiedName = Signature.toString(sign); - String braces = ""; + String braces = ""; //$NON-NLS-1$ for (int i = 0; i < dimension; i++) { - qualifiedName += "[]"; - braces += "["; + qualifiedName += "[]"; //$NON-NLS-1$ + braces += "["; //$NON-NLS-1$ } String signature = braces + sign; // Force the class to be loaded, and record the class reference // for later use if there are multiple classes with the same name. - IObject classReference= classForName(signature); + IJavaObject classReference= classForName(signature); if (classReference == null) { throw new CoreException(null); // could not resolve type } - IType[] types= getVM().classesByName(qualifiedName); + IJavaType[] types= getVM().getJavaTypes(qualifiedName); checkTypes(types); if (types.length == 1) { // Found only one class. - return (IArrayType)types[0]; + return (IJavaArrayType)types[0]; } else { // Found many classes, look for the right one for this scope. for(int i= 0, length= types.length; i < length; i++) { - IType type= types[i]; + IJavaType type= types[i]; if (classReference.equals(getClassObject(type))) { - return (IArrayType)type; + return (IJavaArrayType)type; } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AssignmentOperator.java index 5eba2c7..6c52e4a 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/AssignmentOperator.java
@@ -5,9 +5,9 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.IJavaVariable; public class AssignmentOperator extends CompoundInstruction { @@ -25,11 +25,11 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IValue value = (IValue) popValue(); - IVariable variable = (IVariable) pop(); + IJavaValue value = (IJavaValue) popValue(); + IJavaVariable variable = (IJavaVariable) pop(); - if (value instanceof IPrimitiveValue) { - IPrimitiveValue primitiveValue = (IPrimitiveValue) value; + if (value instanceof IJavaPrimitiveValue) { + IJavaPrimitiveValue primitiveValue = (IJavaPrimitiveValue) value; switch (fVariableTypeId) { case T_boolean: variable.setValue(newValue(primitiveValue.getBooleanValue())); @@ -63,8 +63,6 @@ } public String toString() { - return "'=' operator"; + return InstructionsEvaluationMessages.getString("AssignmentOperator._=___operator_1"); //$NON-NLS-1$ } - - }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/BinaryOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/BinaryOperator.java index 19c978d..d58b7a9 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/BinaryOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/BinaryOperator.java
@@ -5,9 +5,8 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.IJavaVariable; public abstract class BinaryOperator extends CompoundInstruction { protected int fResultTypeId; @@ -35,9 +34,9 @@ } private void executeAssignment() throws CoreException { - IValue value = (IValue) popValue(); - IVariable variable = (IVariable) pop(); - IValue variableValue = variable.getValue(); + IJavaValue value = (IJavaValue) popValue(); + IJavaVariable variable = (IJavaVariable) pop(); + IJavaValue variableValue = (IJavaValue)variable.getValue(); switch (fResultTypeId) { case T_byte: @@ -73,8 +72,8 @@ } private void executeBinary() throws CoreException { - IValue right= (IValue)popValue(); - IValue left= (IValue)popValue(); + IJavaValue right= (IJavaValue)popValue(); + IJavaValue left= (IJavaValue)popValue(); switch (fResultTypeId) { case T_String: @@ -98,7 +97,7 @@ } } - private IValue getByteValueResult(IValue leftOperand, IValue rightOperand) throws CoreException { + private IJavaValue getByteValueResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { switch (getInternResultType()) { case T_double: return newValue((byte) getDoubleResult(leftOperand, rightOperand)); @@ -113,7 +112,7 @@ } } - private IValue getShortValueResult(IValue leftOperand, IValue rightOperand) throws CoreException { + private IJavaValue getShortValueResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { switch (getInternResultType()) { case T_double: return newValue((short) getDoubleResult(leftOperand, rightOperand)); @@ -128,7 +127,7 @@ } } - private IValue getCharValueResult(IValue leftOperand, IValue rightOperand) throws CoreException { + private IJavaValue getCharValueResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { switch (getInternResultType()) { case T_double: return newValue((char) getDoubleResult(leftOperand, rightOperand)); @@ -143,7 +142,7 @@ } } - private IValue getIntValueResult(IValue leftOperand, IValue rightOperand) throws CoreException { + private IJavaValue getIntValueResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { switch (getInternResultType()) { case T_double: return newValue((int) getDoubleResult(leftOperand, rightOperand)); @@ -158,7 +157,7 @@ } } - private IValue getLongValueResult(IValue leftOperand, IValue rightOperand) throws CoreException { + private IJavaValue getLongValueResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { switch (getInternResultType()) { case T_double: return newValue((long) getDoubleResult(leftOperand, rightOperand)); @@ -173,7 +172,7 @@ } } - private IValue getFloatValueResult(IValue leftOperand, IValue rightOperand) throws CoreException { + private IJavaValue getFloatValueResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { switch (getInternResultType()) { case T_double: return newValue((float) getDoubleResult(leftOperand, rightOperand)); @@ -188,7 +187,7 @@ } } - private IValue getDoubleValueResult(IValue leftOperand, IValue rightOperand) throws CoreException { + private IJavaValue getDoubleValueResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { switch (getInternResultType()) { case T_double: return newValue((double) getDoubleResult(leftOperand, rightOperand)); @@ -203,25 +202,25 @@ } } - private IValue getBooleanValueResult(IValue leftOperand, IValue rightOperand) { + private IJavaValue getBooleanValueResult(IJavaValue leftOperand, IJavaValue rightOperand) { return newValue(getBooleanResult(leftOperand, rightOperand)); } - private IValue getStringValueResult(IValue leftOperand, IValue rightOperand) { + private IJavaValue getStringValueResult(IJavaValue leftOperand, IJavaValue rightOperand) { return newValue(getStringResult(leftOperand, rightOperand)); } - protected abstract int getIntResult(IValue leftOperand, IValue rightOperand) throws CoreException; + protected abstract int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException; - protected abstract long getLongResult(IValue leftOperand, IValue rightOperand) throws CoreException; + protected abstract long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException; - protected abstract float getFloatResult(IValue leftOperand, IValue rightOperand); + protected abstract float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand); - protected abstract double getDoubleResult(IValue leftOperand, IValue rightOperand); + protected abstract double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand); - protected abstract boolean getBooleanResult(IValue leftOperand, IValue rightOperand); + protected abstract boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand); - protected abstract String getStringResult(IValue leftOperand, IValue rightOperand); + protected abstract String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand); protected int getInternResultType() { return getBinaryPromotionType(fLeftTypeId, fRightTypeId);
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Cast.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Cast.java index 4a05ecb..5263fe6 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Cast.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Cast.java
@@ -4,34 +4,38 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; +import java.text.MessageFormat; + import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveType; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IType; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.core.runtime.Status; +import org.eclipse.jdt.debug.core.IJavaObject; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.JDIDebugModel; public class Cast extends CompoundInstruction { - public static final String IS_INSTANCE= "isInstance"; - public static final String IS_INSTANCE_SIGNATURE= "(Ljava/lang/Object;)Z"; + public static final String IS_INSTANCE= "isInstance"; //$NON-NLS-1$ + public static final String IS_INSTANCE_SIGNATURE= "(Ljava/lang/Object;)Z"; //$NON-NLS-1$ private int fTypeTypeId; - public Cast(int typeTypeId, int start) { + private String fTypeName; + + public Cast(int typeTypeId, String typeName, int start) { super(start); - fTypeTypeId = typeTypeId; + fTypeTypeId= typeTypeId; + fTypeName= typeName; } /* * @see Instruction#execute() */ public void execute() throws CoreException { - IValue value= popValue(); - IType type= (IType)pop(); + IJavaValue value= popValue(); - if (type instanceof IPrimitiveType) { - IPrimitiveValue primitiveValue = (IPrimitiveValue) value; + if (value instanceof IJavaPrimitiveValue) { + IJavaPrimitiveValue primitiveValue = (IJavaPrimitiveValue) value; switch (fTypeTypeId) { case T_double: push(newValue(primitiveValue.getDoubleValue())); @@ -57,19 +61,14 @@ } } else { - IObject object = (IObject) value; - IObject classObject= getClassObject(type); + IJavaObject classObject= getClassObject(getType(fTypeName)); + IJavaObject objectValue= (IJavaObject)value; if (classObject == null) { throw new CoreException(null); - } else { - push(classObject); - push(object); - SendMessage send= new SendMessage(IS_INSTANCE,IS_INSTANCE_SIGNATURE,1,false, -1); - execute(send); - - IPrimitiveValue resultValue = (IPrimitiveValue)pop(); + } else { + IJavaPrimitiveValue resultValue = (IJavaPrimitiveValue)classObject.sendMessage(IS_INSTANCE, IS_INSTANCE_SIGNATURE, new IJavaValue[] {objectValue}, getContext().getThread(), false); if (!resultValue.getBooleanValue()) { - throw new CoreException(null); + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, MessageFormat.format(InstructionsEvaluationMessages.getString("Cast.ClassCastException__Cannot_cast_{0}_as_{1}__1"), new String[]{objectValue.toString(), fTypeName}), null)); //$NON-NLS-1$ } } @@ -81,7 +80,7 @@ * @see Object#toString() */ public String toString() { - return "cast"; + return InstructionsEvaluationMessages.getString("Cast.cast_3"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ConditionalJump.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ConditionalJump.java index 0cfd212..ef03bdc 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ConditionalJump.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/ConditionalJump.java
@@ -5,7 +5,7 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; public class ConditionalJump extends Jump { private boolean fJumpOnTrue; @@ -18,7 +18,7 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IPrimitiveValue condition= (IPrimitiveValue)popValue(); + IJavaPrimitiveValue condition= (IJavaPrimitiveValue)popValue(); if (!(fJumpOnTrue ^ condition.getBooleanValue())) { jump(fOffset); @@ -29,7 +29,7 @@ * @see Object#toString() */ public String toString() { - return "conditional jump"; + return InstructionsEvaluationMessages.getString("ConditionalJump.conditional_jump_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Constructor.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Constructor.java index 7d431f4..ad3495f 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Constructor.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Constructor.java
@@ -6,8 +6,8 @@ */ import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IClassType; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaClassType; +import org.eclipse.jdt.debug.core.IJavaValue; /** * Invokes a constructor. The arguments are on the @@ -26,18 +26,18 @@ } public void execute() throws CoreException { - IValue[] args = new IValue[fArgCount]; + IJavaValue[] args = new IJavaValue[fArgCount]; // args are in reverse order for (int i= fArgCount - 1; i >= 0; i--) { - args[i] = (IValue)popValue(); + args[i] = (IJavaValue)popValue(); } - IClassType clazz = (IClassType)pop(); - IValue result = clazz.newInstance(fSignature, args, getContext().getThread()); + IJavaClassType clazz = (IJavaClassType)pop(); + IJavaValue result = clazz.newInstance(fSignature, args, getContext().getThread()); push(result); } public String toString() { - return "constructor " + fSignature; + return InstructionsEvaluationMessages.getString("Constructor.constructor__1") + fSignature; //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/DivideAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/DivideAssignmentOperator.java index d5ed00d..c2b11c3 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/DivideAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/DivideAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'/=' operator"; + return InstructionsEvaluationMessages.getString("DivideAssignmentOperator._/=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/DivideOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/DivideOperator.java index 1bfff36..be78781 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/DivideOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/DivideOperator.java
@@ -6,8 +6,9 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Status; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.JDIDebugModel; public class DivideOperator extends BinaryOperator { public DivideOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -19,57 +20,57 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { return false; } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getDoubleValue() / ((IPrimitiveValue) rightOperand).getDoubleValue(); + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getDoubleValue() / ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getFloatValue() / ((IPrimitiveValue) rightOperand).getFloatValue(); + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getFloatValue() / ((IJavaPrimitiveValue) rightOperand).getFloatValue(); } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) throws CoreException { - int divisor= ((IPrimitiveValue) rightOperand).getIntValue(); + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { + int divisor= ((IJavaPrimitiveValue) rightOperand).getIntValue(); if (divisor == 0) { - throw new CoreException(new Status(Status.ERROR, "", Status.OK, "Divide by zero", null)); + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, InstructionsEvaluationMessages.getString("DivideOperator.Divide_by_zero_1"), null)); //$NON-NLS-1$ } - return ((IPrimitiveValue) leftOperand).getIntValue() / divisor; + return ((IJavaPrimitiveValue) leftOperand).getIntValue() / divisor; } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) throws CoreException { - long divisor= ((IPrimitiveValue) rightOperand).getLongValue(); + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { + long divisor= ((IJavaPrimitiveValue) rightOperand).getLongValue(); if (divisor == 0) { - throw new CoreException(new Status(Status.ERROR, "", Status.OK, "Divide by zero", null)); + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, InstructionsEvaluationMessages.getString("DivideOperator.Divide_by_zero_2"), null)); //$NON-NLS-1$ } - return ((IPrimitiveValue) leftOperand).getLongValue() / divisor; + return ((IJavaPrimitiveValue) leftOperand).getLongValue() / divisor; } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'/' operator"; + return InstructionsEvaluationMessages.getString("DivideOperator._/___operator_3"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/EqualEqualOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/EqualEqualOperator.java index 79a3eb4..37e703a 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/EqualEqualOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/EqualEqualOperator.java
@@ -1,11 +1,11 @@ -/* + /* * (c) Copyright IBM Corp. 2000, 2001, 2002. * All Rights Reserved. */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.*; -import org.eclipse.jdt.internal.debug.eval.model.EvaluationValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class EqualEqualOperator extends BinaryOperator { @@ -17,72 +17,70 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { boolean equals= false; switch (getInternResultType()) { case T_double : - equals= ((IPrimitiveValue) leftOperand).getDoubleValue() == ((IPrimitiveValue) rightOperand).getDoubleValue(); + equals= ((IJavaPrimitiveValue) leftOperand).getDoubleValue() == ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); break; case T_float : - equals= ((IPrimitiveValue) leftOperand).getFloatValue() == ((IPrimitiveValue) rightOperand).getFloatValue(); + equals= ((IJavaPrimitiveValue) leftOperand).getFloatValue() == ((IJavaPrimitiveValue) rightOperand).getFloatValue(); break; case T_long : - equals= ((IPrimitiveValue) leftOperand).getLongValue() == ((IPrimitiveValue) rightOperand).getLongValue(); + equals= ((IJavaPrimitiveValue) leftOperand).getLongValue() == ((IJavaPrimitiveValue) rightOperand).getLongValue(); break; case T_int : - equals= ((IPrimitiveValue) leftOperand).getIntValue() == ((IPrimitiveValue) rightOperand).getIntValue(); + equals= ((IJavaPrimitiveValue) leftOperand).getIntValue() == ((IJavaPrimitiveValue) rightOperand).getIntValue(); break; case T_boolean : - equals= ((IPrimitiveValue) leftOperand).getBooleanValue() == ((IPrimitiveValue) rightOperand).getBooleanValue(); + equals= ((IJavaPrimitiveValue) leftOperand).getBooleanValue() == ((IJavaPrimitiveValue) rightOperand).getBooleanValue(); break; default : - if (leftOperand instanceof EvaluationValue && rightOperand instanceof EvaluationValue) { - equals= ((EvaluationValue) leftOperand).getJavaValue().equals(((EvaluationValue) rightOperand).getJavaValue()); - } + equals= leftOperand.equals(rightOperand); break; } return ((fIsEquals) ? equals : !equals); } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'==' operator"; + return InstructionsEvaluationMessages.getString("EqualEqualOperator._==___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/GreaterEqualOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/GreaterEqualOperator.java index ef06f42..1e3d557 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/GreaterEqualOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/GreaterEqualOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class GreaterEqualOperator extends BinaryOperator { public GreaterEqualOperator(int leftTypeId, int rightTypeId, int start) { @@ -13,60 +13,60 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { switch (getInternResultType()) { case T_double : - return ((IPrimitiveValue) leftOperand).getDoubleValue() >= ((IPrimitiveValue) rightOperand).getDoubleValue(); + return ((IJavaPrimitiveValue) leftOperand).getDoubleValue() >= ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); case T_float : - return ((IPrimitiveValue) leftOperand).getFloatValue() >= ((IPrimitiveValue) rightOperand).getFloatValue(); + return ((IJavaPrimitiveValue) leftOperand).getFloatValue() >= ((IJavaPrimitiveValue) rightOperand).getFloatValue(); case T_long : - return ((IPrimitiveValue) leftOperand).getLongValue() >= ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() >= ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : - return ((IPrimitiveValue) leftOperand).getIntValue() >= ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() >= ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return false; } } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'>=' operator"; + return InstructionsEvaluationMessages.getString("GreaterEqualOperator._>=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/GreaterOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/GreaterOperator.java index d7416f6..1d0f2c3 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/GreaterOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/GreaterOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class GreaterOperator extends BinaryOperator { public GreaterOperator(int leftTypeId, int rightTypeId, int start) { @@ -13,60 +13,60 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { switch (getInternResultType()) { case T_double : - return ((IPrimitiveValue) leftOperand).getDoubleValue() > ((IPrimitiveValue) rightOperand).getDoubleValue(); + return ((IJavaPrimitiveValue) leftOperand).getDoubleValue() > ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); case T_float : - return ((IPrimitiveValue) leftOperand).getFloatValue() > ((IPrimitiveValue) rightOperand).getFloatValue(); + return ((IJavaPrimitiveValue) leftOperand).getFloatValue() > ((IJavaPrimitiveValue) rightOperand).getFloatValue(); case T_long : - return ((IPrimitiveValue) leftOperand).getLongValue() > ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() > ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : - return ((IPrimitiveValue) leftOperand).getIntValue() > ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() > ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return false; } } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'>' operator"; + return InstructionsEvaluationMessages.getString("GreaterOperator._>___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/InstanceOfOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/InstanceOfOperator.java index a6795cf..a11dbff 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/InstanceOfOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/InstanceOfOperator.java
@@ -5,14 +5,13 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IClassType; -import org.eclipse.jdt.internal.debug.eval.model.IInterfaceType; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IType; +import org.eclipse.jdt.debug.core.IJavaObject; +import org.eclipse.jdt.debug.core.IJavaType; +import org.eclipse.jdt.debug.core.IJavaValue; public class InstanceOfOperator extends CompoundInstruction { - public static final String IS_INSTANCE= "isInstance"; - public static final String IS_INSTANCE_SIGNATURE= "(Ljava/lang/Object;)Z"; + public static final String IS_INSTANCE= "isInstance"; //$NON-NLS-1$ + public static final String IS_INSTANCE_SIGNATURE= "(Ljava/lang/Object;)Z"; //$NON-NLS-1$ public InstanceOfOperator(int start) { super(start); @@ -22,23 +21,19 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IType type= (IType)pop(); - IObject object= (IObject)pop(); + IJavaType type= (IJavaType)pop(); + IJavaObject object= (IJavaObject)popValue(); - IObject classObject= getClassObject(type); + IJavaObject classObject= getClassObject(type); if (classObject == null) { throw new CoreException(null); } else { - push(classObject); - push(object); - SendMessage send= new SendMessage(IS_INSTANCE,IS_INSTANCE_SIGNATURE,1,false, -1); - execute(send); - // Do not pop because the result is left on the stack. + push(classObject.sendMessage(IS_INSTANCE, IS_INSTANCE_SIGNATURE, new IJavaValue[] {object}, getContext().getThread(), false)); } } public String toString() { - return "'instanceof' operator"; + return InstructionsEvaluationMessages.getString("InstanceOfOperator._instanceof___operator_3"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Instruction.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Instruction.java index 16ba815..9322c43 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Instruction.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Instruction.java
@@ -6,15 +6,16 @@ */ import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.ast.engine.*; -import org.eclipse.jdt.internal.debug.eval.model.IClassType; -import org.eclipse.jdt.internal.debug.eval.model.IInterfaceType; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IRuntimeContext; -import org.eclipse.jdt.internal.debug.eval.model.IType; -import org.eclipse.jdt.internal.debug.eval.model.IValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; -import org.eclipse.jdt.internal.debug.eval.model.IVirtualMachine; +import org.eclipse.debug.core.model.IDebugTarget; +import org.eclipse.jdt.debug.core.IJavaClassType; +import org.eclipse.jdt.debug.core.IJavaDebugTarget; +import org.eclipse.jdt.debug.core.IJavaInterfaceType; +import org.eclipse.jdt.debug.core.IJavaObject; +import org.eclipse.jdt.debug.core.IJavaType; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.IJavaVariable; +import org.eclipse.jdt.internal.debug.eval.ast.engine.IRuntimeContext; +import org.eclipse.jdt.internal.debug.eval.ast.engine.Interpreter; /** * Common behavoir for instructions. @@ -28,34 +29,37 @@ public void setInterpreter(Interpreter interpreter) { fInterpreter= interpreter; } + + public void setLastValue(IJavaValue value) { + fInterpreter.setLastValue(value); + } + + public void stop() { + fInterpreter.stop(); + } + public static int getBinaryPromotionType(int left, int right) { return fTypeTable[left][right]; } public abstract void execute() throws CoreException; - - protected void execute(Instruction instruction) throws CoreException { - instruction.setInterpreter(fInterpreter); - instruction.execute(); - instruction.setInterpreter(null); - } protected IRuntimeContext getContext() { return fInterpreter.getContext(); } - protected IVirtualMachine getVM() { + protected IJavaDebugTarget getVM() { return getContext().getVM(); } /** * Answers the instance of Class that the given type represents. */ - protected IObject getClassObject(IType type) throws CoreException { - if (type instanceof IClassType) { - return ((IClassType)type).getClassObject(); + protected IJavaObject getClassObject(IJavaType type) throws CoreException { + if (type instanceof IJavaClassType) { + return ((IJavaClassType)type).getClassObject(); } - if (type instanceof IInterfaceType) { - return ((IInterfaceType)type).getClassObject(); + if (type instanceof IJavaInterfaceType) { + return ((IJavaInterfaceType)type).getClassObject(); } return null; } @@ -72,19 +76,19 @@ return fInterpreter.pop(); } - protected IValue popValue() throws CoreException { + protected IJavaValue popValue() throws CoreException { Object element = fInterpreter.pop(); - if (element instanceof IVariable) { - return ((IVariable)element).getValue(); + if (element instanceof IJavaVariable) { + return (IJavaValue)((IJavaVariable)element).getValue(); } - return (IValue)element; + return (IJavaValue)element; } protected void pushNewValue(boolean value) { fInterpreter.push(newValue(value)); } - protected IValue newValue(boolean value) { + protected IJavaValue newValue(boolean value) { return getVM().newValue(value); } @@ -92,7 +96,7 @@ fInterpreter.push(newValue(value)); } - protected IValue newValue(byte value) { + protected IJavaValue newValue(byte value) { return getVM().newValue(value); } @@ -100,7 +104,7 @@ fInterpreter.push(newValue(value)); } - protected IValue newValue(short value) { + protected IJavaValue newValue(short value) { return getVM().newValue(value); } @@ -108,7 +112,7 @@ fInterpreter.push(newValue(value)); } - protected IValue newValue(int value) { + protected IJavaValue newValue(int value) { return getVM().newValue(value); } @@ -116,7 +120,7 @@ fInterpreter.push(newValue(value)); } - protected IValue newValue(long value) { + protected IJavaValue newValue(long value) { return getVM().newValue(value); } @@ -124,7 +128,7 @@ fInterpreter.push(newValue(value)); } - protected IValue newValue(char value) { + protected IJavaValue newValue(char value) { return getVM().newValue(value); } @@ -132,7 +136,7 @@ fInterpreter.push(newValue(value)); } - protected IValue newValue(float value) { + protected IJavaValue newValue(float value) { return getVM().newValue(value); } @@ -140,7 +144,7 @@ fInterpreter.push(newValue(value)); } - protected IValue newValue(double value) { + protected IJavaValue newValue(double value) { return getVM().newValue(value); } @@ -148,7 +152,7 @@ fInterpreter.push(newValue(value)); } - protected IValue newValue(String value) { + protected IJavaValue newValue(String value) { return getVM().newValue(value); } @@ -156,7 +160,7 @@ fInterpreter.push(nullValue()); } - protected IValue nullValue() { + protected IJavaValue nullValue() { return getVM().nullValue(); } @@ -164,14 +168,14 @@ return fTypeTable[typeId][T_int]; } - protected IType getType(String qualifiedName) throws CoreException { + protected IJavaType getType(String qualifiedName) throws CoreException { // Force the class to be loaded, and record the class reference // for later use if there are multiple classes with the same name. - IObject classReference= classForName(qualifiedName); + IJavaObject classReference= classForName(qualifiedName); if (classReference == null) { throw new CoreException(null); // could not resolve type } - IType[] types= getVM().classesByName(qualifiedName); + IJavaType[] types= getVM().getJavaTypes(qualifiedName); checkTypes(types); if (types.length == 1) { // Found only one class. @@ -179,7 +183,7 @@ } else { // Found many classes, look for the right one for this scope. for(int i= 0, length= types.length; i < length; i++) { - IType type= types[i]; + IJavaType type= types[i]; if (classReference.equals(getClassObject(type))) { return type; } @@ -195,21 +199,19 @@ } - protected IObject classForName(String qualifiedName) throws CoreException { - IType[] types= getVM().classesByName(CLASS); + protected IJavaObject classForName(String qualifiedName) throws CoreException { + IJavaType[] types= getVM().getJavaTypes(CLASS); checkTypes(types); if (types.length != 1) { throw new CoreException(null); } - push(types[0]); - pushNewValue(qualifiedName); - SendMessage send= new SendMessage(FOR_NAME, FOR_NAME_SIGNATURE, 1, false, -1); - execute(send); - return (IObject)pop(); + IJavaType receiver= types[0]; + IJavaValue[] args = new IJavaValue[] {newValue(qualifiedName)}; + return (IJavaObject)((IJavaClassType)receiver).sendMessage(FOR_NAME, FOR_NAME_SIGNATURE, args, getContext().getThread()); } - protected void checkTypes(IType[] types) throws CoreException { + protected void checkTypes(IJavaType[] types) throws CoreException { if (types == null || types.length == 0) { throw new CoreException(null); // unable to resolve type } @@ -246,13 +248,12 @@ /* null */ {T_undefined, T_undefined, T_undefined, T_undefined, T_undefined, T_undefined, T_undefined, T_undefined, T_undefined, T_undefined, T_undefined, T_String, T_undefined}, }; - public static final String CLASS= "java.lang.Class"; + public static final String CLASS= "java.lang.Class"; //$NON-NLS-1$ + + public static final String FOR_NAME= "forName"; //$NON-NLS-1$ - public static final String FOR_NAME= "forName"; - - - public static final String FOR_NAME_SIGNATURE= "(Ljava/lang/String;)Ljava/lang/Class;"; + public static final String FOR_NAME_SIGNATURE= "(Ljava/lang/String;)Ljava/lang/Class;"; //$NON-NLS-1$ }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/InstructionSequence.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/InstructionSequence.java index 6ef1c3e..ae5924d 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/InstructionSequence.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/InstructionSequence.java
@@ -8,11 +8,14 @@ import java.util.List; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.jdt.core.dom.Message; +import org.eclipse.jdt.debug.core.IJavaValue; import org.eclipse.jdt.debug.eval.ICompiledExpression; -import org.eclipse.jdt.internal.debug.eval.ast.engine.*; -import org.eclipse.jdt.internal.debug.eval.model.IRuntimeContext; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin; +import org.eclipse.jdt.internal.debug.eval.ast.engine.IRuntimeContext; +import org.eclipse.jdt.internal.debug.eval.ast.engine.Interpreter; public class InstructionSequence implements ICompiledExpression { @@ -32,22 +35,6 @@ } /** - * Runs this compiled expression in the given context, and retuns - * the result. - * - * @param context evaluation context - */ - public IValue evaluate(IRuntimeContext context) { - Interpreter interpreter= new Interpreter(getInstructions(), context); - try { - interpreter.execute(); - } catch (CoreException exception) { - fException= exception; - } - return interpreter.getResult(); - } - - /** * Returns the runtime exception that occurred while evaluating this expression * or <code>null</code> if no exception occurred. */ @@ -87,7 +74,7 @@ /** * Answers the array of instructions, or an empty array. */ - private Instruction[] getInstructions() { + public Instruction[] getInstructions() { int size= fInstructions.size(); Instruction[] instructions= new Instruction[size]; if (size > 0) {
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Jump.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Jump.java index 8357843..c918da7 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Jump.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Jump.java
@@ -5,7 +5,6 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; public class Jump extends SimpleInstruction { protected int fOffset; @@ -25,7 +24,7 @@ * @see Object#toString() */ public String toString() { - return "jump"; + return InstructionsEvaluationMessages.getString("Jump.jump_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LeftShiftAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LeftShiftAssignmentOperator.java index eb73673..e6d059d 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LeftShiftAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LeftShiftAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'<<=' operator"; + return InstructionsEvaluationMessages.getString("LeftShiftAssignmentOperator._<<=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LeftShiftOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LeftShiftOperator.java index 63fcc97..907207f 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LeftShiftOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LeftShiftOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class LeftShiftOperator extends BinaryOperator { public LeftShiftOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -17,66 +17,66 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { return false; } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { // unary type promotion on both operands see 5.6.1 and 15.18 switch (fRightTypeId) { case T_long : - return ((IPrimitiveValue) leftOperand).getIntValue() << ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() << ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : case T_short : case T_byte : case T_char : - return ((IPrimitiveValue) leftOperand).getIntValue() << ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() << ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return 0; } } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { // unary type promotion on both operands see 5.6.1 and 15.18 switch (fRightTypeId) { case T_long : - return ((IPrimitiveValue) leftOperand).getLongValue() << ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() << ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : case T_short : case T_byte : case T_char : - return ((IPrimitiveValue) leftOperand).getLongValue() << ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() << ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return 0; } } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } @@ -86,7 +86,7 @@ } public String toString() { - return "'<<' operator"; + return InstructionsEvaluationMessages.getString("LeftShiftOperator._<<___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LessEqualOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LessEqualOperator.java index 7e3a2ae..341e5fe 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LessEqualOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LessEqualOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class LessEqualOperator extends BinaryOperator { public LessEqualOperator(int leftTypeId, int rightTypeId, int start) { @@ -13,59 +13,59 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { switch (getInternResultType()) { case T_double : - return ((IPrimitiveValue) leftOperand).getDoubleValue() <= ((IPrimitiveValue) rightOperand).getDoubleValue(); + return ((IJavaPrimitiveValue) leftOperand).getDoubleValue() <= ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); case T_float : - return ((IPrimitiveValue) leftOperand).getFloatValue() <= ((IPrimitiveValue) rightOperand).getFloatValue(); + return ((IJavaPrimitiveValue) leftOperand).getFloatValue() <= ((IJavaPrimitiveValue) rightOperand).getFloatValue(); case T_long : - return ((IPrimitiveValue) leftOperand).getLongValue() <= ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() <= ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : - return ((IPrimitiveValue) leftOperand).getIntValue() <= ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() <= ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return false; } } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'<=' operator"; + return InstructionsEvaluationMessages.getString("LessEqualOperator._<=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LessOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LessOperator.java index 4ad60e0..822153e 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LessOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/LessOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class LessOperator extends BinaryOperator { public LessOperator(int leftTypeId, int rightTypeId, int start) { @@ -13,60 +13,60 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { switch (getInternResultType()) { case T_double : - return ((IPrimitiveValue) leftOperand).getDoubleValue() < ((IPrimitiveValue) rightOperand).getDoubleValue(); + return ((IJavaPrimitiveValue) leftOperand).getDoubleValue() < ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); case T_float : - return ((IPrimitiveValue) leftOperand).getFloatValue() < ((IPrimitiveValue) rightOperand).getFloatValue(); + return ((IJavaPrimitiveValue) leftOperand).getFloatValue() < ((IJavaPrimitiveValue) rightOperand).getFloatValue(); case T_long : - return ((IPrimitiveValue) leftOperand).getLongValue() < ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() < ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : - return ((IPrimitiveValue) leftOperand).getIntValue() < ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() < ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return false; } } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'<' operator"; + return InstructionsEvaluationMessages.getString("LessOperator._<___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MinusAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MinusAssignmentOperator.java index 39237f1..1d109f1 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MinusAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MinusAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'-=' operator"; + return InstructionsEvaluationMessages.getString("MinusAssignmentOperator._-=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MinusOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MinusOperator.java index aed05db..79b2537 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MinusOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MinusOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class MinusOperator extends BinaryOperator { @@ -18,49 +18,49 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { return false; } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getDoubleValue() - ((IPrimitiveValue) rightOperand).getDoubleValue(); + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getDoubleValue() - ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getFloatValue() - ((IPrimitiveValue) rightOperand).getFloatValue(); + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getFloatValue() - ((IJavaPrimitiveValue) rightOperand).getFloatValue(); } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getIntValue() - ((IPrimitiveValue) rightOperand).getIntValue(); + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getIntValue() - ((IJavaPrimitiveValue) rightOperand).getIntValue(); } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getLongValue() - ((IPrimitiveValue) rightOperand).getLongValue(); + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getLongValue() - ((IJavaPrimitiveValue) rightOperand).getLongValue(); } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'-' operator"; + return InstructionsEvaluationMessages.getString("MinusOperator._-___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MultiplyAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MultiplyAssignmentOperator.java index 1f5e0a3..3500757 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MultiplyAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MultiplyAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'*=' operator"; + return InstructionsEvaluationMessages.getString("MultiplyAssignmentOperator._*=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MultiplyOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MultiplyOperator.java index ca1806f..36acb4b 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MultiplyOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/MultiplyOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class MultiplyOperator extends BinaryOperator { public MultiplyOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -17,49 +17,49 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { return false; } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getDoubleValue() * ((IPrimitiveValue) rightOperand).getDoubleValue(); + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getDoubleValue() * ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getFloatValue() * ((IPrimitiveValue) rightOperand).getFloatValue(); + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getFloatValue() * ((IJavaPrimitiveValue) rightOperand).getFloatValue(); } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getIntValue() * ((IPrimitiveValue) rightOperand).getIntValue(); + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getIntValue() * ((IJavaPrimitiveValue) rightOperand).getIntValue(); } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getLongValue() * ((IPrimitiveValue) rightOperand).getLongValue(); + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getLongValue() * ((IJavaPrimitiveValue) rightOperand).getLongValue(); } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'*' operator"; + return InstructionsEvaluationMessages.getString("MultiplyOperator._*___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/NoOp.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/NoOp.java index 669fe7b..53ffb83 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/NoOp.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/NoOp.java
@@ -5,7 +5,6 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; public class NoOp extends CompoundInstruction { @@ -23,7 +22,7 @@ * @see Object#toString() */ public String toString() { - return "no op"; + return InstructionsEvaluationMessages.getString("NoOp.no_op_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/NotOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/NotOperator.java index 72830d5..3442c4f 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/NotOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/NotOperator.java
@@ -5,8 +5,7 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; public class NotOperator extends UnaryOperator { @@ -18,12 +17,12 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IPrimitiveValue value= (IPrimitiveValue)popValue(); + IJavaPrimitiveValue value= (IJavaPrimitiveValue)popValue(); pushNewValue(!value.getBooleanValue()); } public String toString() { - return "'!' operator"; + return InstructionsEvaluationMessages.getString("NotOperator._!___operator_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/OrAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/OrAssignmentOperator.java index bc8a903..0289dec 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/OrAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/OrAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'|=' operator"; + return InstructionsEvaluationMessages.getString("OrAssignmentOperator._|=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/OrOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/OrOperator.java index cf79314..0cc80c1 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/OrOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/OrOperator.java
@@ -4,8 +4,9 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; + public class OrOperator extends BinaryOperator { public OrOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -17,49 +18,49 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getBooleanValue() | ((IPrimitiveValue) rightOperand).getBooleanValue(); + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getBooleanValue() | ((IJavaPrimitiveValue) rightOperand).getBooleanValue(); } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getIntValue() | ((IPrimitiveValue) rightOperand).getIntValue(); + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getIntValue() | ((IJavaPrimitiveValue) rightOperand).getIntValue(); } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getLongValue() | ((IPrimitiveValue) rightOperand).getLongValue(); + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getLongValue() | ((IJavaPrimitiveValue) rightOperand).getLongValue(); } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'|' operator"; + return InstructionsEvaluationMessages.getString("OrOperator._|___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PlusAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PlusAssignmentOperator.java index 8cbf818..c4b23ca 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PlusAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PlusAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'+=' operator"; + return InstructionsEvaluationMessages.getString("PlusAssignmentOperator._+=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PlusOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PlusOperator.java index 1cad316..df8b85e 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PlusOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PlusOperator.java
@@ -5,15 +5,14 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.debug.core.IJavaObject; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; import org.eclipse.jdt.internal.debug.core.model.JDINullValue; -import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue; -import org.eclipse.jdt.internal.debug.eval.model.*; -import org.eclipse.jdt.internal.debug.eval.model.EvaluationObject; -import org.eclipse.jdt.internal.debug.eval.model.EvaluationValue; public class PlusOperator extends BinaryOperator { - public static final String NULL= "null"; + public static final String NULL= "null"; //$NON-NLS-1$ public PlusOperator(int resultId, int leftTypeId, int rightTypeId, int start) { this(resultId, leftTypeId, rightTypeId, false, start); @@ -23,26 +22,22 @@ super(resultId, leftTypeId, rightTypeId, isAssignmentOperator, start); } - private String getString(IValue value, int typeId) { + private String getString(IJavaValue value, int typeId) { // test if value == null - EvaluationValue eValue = (EvaluationValue)value; - if (eValue.getJavaValue() instanceof JDINullValue) { + if (value instanceof JDINullValue) { return NULL; } - if (value instanceof IObject) { - EvaluationObject object= (EvaluationObject)value; - JDIObjectValue javaValue= (JDIObjectValue)object.getJavaObject(); - + if (value instanceof IJavaObject) { try { - return javaValue.getValueString(); + return value.getValueString(); } catch (CoreException e) { e.printStackTrace(); return null; } } else { - IPrimitiveValue primitiveValue= (IPrimitiveValue)value; + IJavaPrimitiveValue primitiveValue= (IJavaPrimitiveValue)value; switch (typeId) { case T_boolean: return new Boolean(primitiveValue.getBooleanValue()).toString(); @@ -66,49 +61,49 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { return false; } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue)leftOperand).getDoubleValue() + ((IPrimitiveValue)rightOperand).getDoubleValue(); + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue)leftOperand).getDoubleValue() + ((IJavaPrimitiveValue)rightOperand).getDoubleValue(); } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue)leftOperand).getFloatValue() + ((IPrimitiveValue)rightOperand).getFloatValue(); + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue)leftOperand).getFloatValue() + ((IJavaPrimitiveValue)rightOperand).getFloatValue(); } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue)leftOperand).getIntValue() + ((IPrimitiveValue)rightOperand).getIntValue(); + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue)leftOperand).getIntValue() + ((IJavaPrimitiveValue)rightOperand).getIntValue(); } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue)leftOperand).getLongValue() + ((IPrimitiveValue)rightOperand).getLongValue(); + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue)leftOperand).getLongValue() + ((IJavaPrimitiveValue)rightOperand).getLongValue(); } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return getString(leftOperand, fLeftTypeId) + getString(rightOperand, fRightTypeId); } public String toString() { - return "'+' operator"; + return InstructionsEvaluationMessages.getString("PlusOperator._+___operator_2"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Pop.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Pop.java index 13239d0..a97db08 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Pop.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/Pop.java
@@ -19,7 +19,7 @@ * @see Object#toString() */ public String toString() { - return "pop"; + return InstructionsEvaluationMessages.getString("Pop.pop_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PostfixMinusMinusOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PostfixMinusMinusOperator.java index 147ff34..6a5507b 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PostfixMinusMinusOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PostfixMinusMinusOperator.java
@@ -5,8 +5,8 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaVariable; public class PostfixMinusMinusOperator extends XfixOperator { @@ -18,36 +18,36 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IVariable variable = (IVariable) pop(); + IJavaVariable variable = (IJavaVariable) pop(); push(variable.getValue()); switch (fVariableTypeId) { case T_byte : - variable.setValue(newValue((byte)((IPrimitiveValue)variable.getValue()).getByteValue() - 1)); + variable.setValue(newValue((byte)((IJavaPrimitiveValue)variable.getValue()).getByteValue() - 1)); break; case T_short : - variable.setValue(newValue((short)((IPrimitiveValue)variable.getValue()).getShortValue() - 1)); + variable.setValue(newValue((short)((IJavaPrimitiveValue)variable.getValue()).getShortValue() - 1)); break; case T_char : - variable.setValue(newValue((char)((IPrimitiveValue)variable.getValue()).getCharValue() - 1)); + variable.setValue(newValue((char)((IJavaPrimitiveValue)variable.getValue()).getCharValue() - 1)); break; case T_int : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getIntValue() - 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getIntValue() - 1)); break; case T_long : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getLongValue() - 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getLongValue() - 1)); break; case T_float : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getFloatValue() - 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getFloatValue() - 1)); break; case T_double : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getDoubleValue() - 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getDoubleValue() - 1)); break; } } public String toString() { - return "postfix '--' operator"; + return InstructionsEvaluationMessages.getString("PostfixMinusMinusOperator.postfix___--___operator_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PostfixPlusPlusOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PostfixPlusPlusOperator.java index 57d15d0..7ebe4d2 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PostfixPlusPlusOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PostfixPlusPlusOperator.java
@@ -5,8 +5,8 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaVariable; public class PostfixPlusPlusOperator extends XfixOperator { @@ -18,36 +18,36 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IVariable variable = (IVariable) pop(); + IJavaVariable variable = (IJavaVariable) pop(); push(variable.getValue()); switch (fVariableTypeId) { case T_byte : - variable.setValue(newValue((byte)((IPrimitiveValue)variable.getValue()).getByteValue() + 1)); + variable.setValue(newValue((byte)((IJavaPrimitiveValue)variable.getValue()).getByteValue() + 1)); break; case T_short : - variable.setValue(newValue((short)((IPrimitiveValue)variable.getValue()).getShortValue() + 1)); + variable.setValue(newValue((short)((IJavaPrimitiveValue)variable.getValue()).getShortValue() + 1)); break; case T_char : - variable.setValue(newValue((char)((IPrimitiveValue)variable.getValue()).getCharValue() + 1)); + variable.setValue(newValue((char)((IJavaPrimitiveValue)variable.getValue()).getCharValue() + 1)); break; case T_int : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getIntValue() + 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getIntValue() + 1)); break; case T_long : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getLongValue() + 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getLongValue() + 1)); break; case T_float : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getFloatValue() + 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getFloatValue() + 1)); break; case T_double : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getDoubleValue() + 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getDoubleValue() + 1)); break; } } public String toString() { - return "postfix '++' operator"; + return InstructionsEvaluationMessages.getString("PostfixPlusPlusOperator.postfix___++___operator_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PrefixMinusMinusOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PrefixMinusMinusOperator.java index 4813cae..f9d6163 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PrefixMinusMinusOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PrefixMinusMinusOperator.java
@@ -5,8 +5,8 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaVariable; public class PrefixMinusMinusOperator extends XfixOperator { @@ -18,29 +18,29 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IVariable variable = (IVariable) pop(); + IJavaVariable variable = (IJavaVariable) pop(); switch (fVariableTypeId) { case T_byte : - variable.setValue(newValue((byte)((IPrimitiveValue)variable.getValue()).getByteValue() - 1)); + variable.setValue(newValue((byte)((IJavaPrimitiveValue)variable.getValue()).getByteValue() - 1)); break; case T_short : - variable.setValue(newValue((short)((IPrimitiveValue)variable.getValue()).getShortValue() - 1)); + variable.setValue(newValue((short)((IJavaPrimitiveValue)variable.getValue()).getShortValue() - 1)); break; case T_char : - variable.setValue(newValue((char)((IPrimitiveValue)variable.getValue()).getCharValue() - 1)); + variable.setValue(newValue((char)((IJavaPrimitiveValue)variable.getValue()).getCharValue() - 1)); break; case T_int : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getIntValue() - 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getIntValue() - 1)); break; case T_long : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getLongValue() - 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getLongValue() - 1)); break; case T_float : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getFloatValue() - 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getFloatValue() - 1)); break; case T_double : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getDoubleValue() - 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getDoubleValue() - 1)); break; } @@ -48,7 +48,7 @@ } public String toString() { - return "prefix '--' operator"; + return InstructionsEvaluationMessages.getString("PrefixMinusMinusOperator.prefix___--___operator_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PrefixPlusPlusOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PrefixPlusPlusOperator.java index 3232cbe..a894674 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PrefixPlusPlusOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PrefixPlusPlusOperator.java
@@ -5,8 +5,8 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaVariable; public class PrefixPlusPlusOperator extends XfixOperator { @@ -18,29 +18,29 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IVariable variable = (IVariable) pop(); + IJavaVariable variable = (IJavaVariable) pop(); switch (fVariableTypeId) { case T_byte : - variable.setValue(newValue((byte)((IPrimitiveValue)variable.getValue()).getByteValue() + 1)); + variable.setValue(newValue((byte)((IJavaPrimitiveValue)variable.getValue()).getByteValue() + 1)); break; case T_short : - variable.setValue(newValue((short)((IPrimitiveValue)variable.getValue()).getShortValue() + 1)); + variable.setValue(newValue((short)((IJavaPrimitiveValue)variable.getValue()).getShortValue() + 1)); break; case T_char : - variable.setValue(newValue((char)((IPrimitiveValue)variable.getValue()).getCharValue() + 1)); + variable.setValue(newValue((char)((IJavaPrimitiveValue)variable.getValue()).getCharValue() + 1)); break; case T_int : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getIntValue() + 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getIntValue() + 1)); break; case T_long : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getLongValue() + 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getLongValue() + 1)); break; case T_float : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getFloatValue() + 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getFloatValue() + 1)); break; case T_double : - variable.setValue(newValue(((IPrimitiveValue)variable.getValue()).getDoubleValue() + 1)); + variable.setValue(newValue(((IJavaPrimitiveValue)variable.getValue()).getDoubleValue() + 1)); break; } @@ -48,7 +48,7 @@ } public String toString() { - return "prefix '++' operator"; + return InstructionsEvaluationMessages.getString("PrefixPlusPlusOperator.prefix___++___operator_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushBoolean.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushBoolean.java index d1276d4..813d00e 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushBoolean.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushBoolean.java
@@ -20,7 +20,7 @@ } public String toString() { - return "push " + fValue; + return InstructionsEvaluationMessages.getString("PushBoolean.push__1") + fValue; //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushChar.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushChar.java index 2548716..ab5240c 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushChar.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushChar.java
@@ -21,7 +21,7 @@ } public String toString() { - return "push " + fValue; + return InstructionsEvaluationMessages.getString("PushChar.push__1") + fValue; //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushClassLiteralValue.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushClassLiteralValue.java index c892ef6..f3eb4df 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushClassLiteralValue.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushClassLiteralValue.java
@@ -5,7 +5,7 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IType; +import org.eclipse.jdt.debug.core.IJavaType; /** * Handles code like "new Object().class" @@ -19,7 +19,7 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IType type = (IType)pop(); + IJavaType type = (IJavaType)pop(); push(getClassObject(type)); } @@ -27,7 +27,7 @@ * @see Object#toString() */ public String toString() { - return "push class literal value"; + return InstructionsEvaluationMessages.getString("PushClassLiteralValue.push_class_literal_value_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushDouble.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushDouble.java index 750ea0c..c85c71b 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushDouble.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushDouble.java
@@ -21,7 +21,7 @@ } public String toString() { - return "push " + fValue; + return InstructionsEvaluationMessages.getString("PushDouble.push__1") + fValue; //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushFieldVariable.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushFieldVariable.java index ba99444..5b21c9b 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushFieldVariable.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushFieldVariable.java
@@ -1,16 +1,16 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; /* - * (c) Copyright IBM Corp. 2000, 2001. + * (c) Copyright IBM Corp. 2002. * All Rights Reserved. */ import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IArray; -import org.eclipse.jdt.internal.debug.eval.model.IClassType; -import org.eclipse.jdt.internal.debug.eval.model.IInterfaceType; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.core.runtime.Status; +import org.eclipse.jdt.debug.core.IJavaObject; +import org.eclipse.jdt.debug.core.IJavaVariable; +import org.eclipse.jdt.debug.core.JDIDebugModel; +import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue; /** * Pops an object off the stack, and pushes the value @@ -18,60 +18,44 @@ */ public class PushFieldVariable extends CompoundInstruction { + private String fDeclaringTypeSignature; + private String fName; - private String fTypeSignature; + private int fSuperClassLevel; - private boolean fSuperField; - - public static final String LENGTH= "length"; - - public PushFieldVariable(String name, boolean superField, int start) { + public PushFieldVariable(String name, int superClassLevel, int start) { super(start); fName= name; - fSuperField= superField; + fSuperClassLevel= superClassLevel; } - public PushFieldVariable(String name, String typeSignature, int start) { + public PushFieldVariable(String name, String declaringTypeSignature, int start) { super(start); fName= name; - fTypeSignature= typeSignature; + fDeclaringTypeSignature= declaringTypeSignature; } public void execute() throws CoreException { - Object receiver= pop(); + IJavaObject receiver=(IJavaObject) popValue(); - IVariable field= null; + IJavaVariable field= null; - if (receiver instanceof IVariable) { - receiver = ((IVariable) receiver).getValue(); + if (fDeclaringTypeSignature == null) { + field= ((JDIObjectValue)receiver).getField(fName, fSuperClassLevel); + } else { + field= ((IJavaObject)receiver).getField(fName, fDeclaringTypeSignature); } - if (receiver instanceof IArray && LENGTH.equals(fName)) { - int length= ((IArray)receiver).getLength(); - pushNewValue(length); - return; - } else if (receiver instanceof IObject) { - if (fTypeSignature == null) { - field= ((IObject)receiver).getField(fName, fSuperField); - } else { - field= ((IObject)receiver).getField(fName, fTypeSignature); - } - } else if (receiver instanceof IInterfaceType) { - field= ((IInterfaceType)receiver).getField(fName); - } else if (receiver instanceof IClassType) { - field= ((IClassType)receiver).getField(fName); - } if (field == null) { - throw new CoreException(null); // couldn't find the field + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, InstructionsEvaluationMessages.getString("PushFieldVariable.Cannot_find_the_field__2") + fName + InstructionsEvaluationMessages.getString("PushFieldVariable._for_the_object__3") + receiver, null)); //$NON-NLS-1$ //$NON-NLS-2$ } else { push(field); } } public String toString() { - return "push field " + fName; + return InstructionsEvaluationMessages.getString("PushFieldVariable.push_field__4") + fName; //$NON-NLS-1$ } - }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushFloat.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushFloat.java index cf13928..40313da 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushFloat.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushFloat.java
@@ -21,7 +21,7 @@ } public String toString() { - return "push " + fValue; + return InstructionsEvaluationMessages.getString("PushFloat.push__1") + fValue; //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushInt.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushInt.java index 3134b7c..2c471ef 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushInt.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushInt.java
@@ -21,7 +21,7 @@ } public String toString() { - return "push " + fValue; + return InstructionsEvaluationMessages.getString("PushInt.push__1") + fValue; //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushLocalVariable.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushLocalVariable.java index 9165980..97b4cef 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushLocalVariable.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushLocalVariable.java
@@ -10,7 +10,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Status; import org.eclipse.jdt.debug.core.IJavaVariable; -import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin; +import org.eclipse.jdt.debug.core.JDIDebugModel; import org.eclipse.jdt.internal.debug.eval.ast.engine.IRuntimeContext; /** @@ -38,7 +38,7 @@ } } - throw new CoreException(new Status(Status.ERROR, JDIDebugPlugin.getUniqueIdentifier(), Status.OK, MessageFormat.format(InstructionsEvaluationMessages.getString("PushLocalVariable.Cannot_find_the_variable____1"), new String[]{fName}), null)); //$NON-NLS-1$ + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, MessageFormat.format(InstructionsEvaluationMessages.getString("PushLocalVariable.Cannot_find_the_variable____1"), new String[]{fName}), null)); //$NON-NLS-1$ } /**
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushLong.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushLong.java index 507b0c5..873e93e 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushLong.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushLong.java
@@ -21,7 +21,7 @@ } public String toString() { - return "push " + fValue; + return InstructionsEvaluationMessages.getString("PushLong.push__1") + fValue; //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushNull.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushNull.java index 519b2b1..c17062c 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushNull.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushNull.java
@@ -6,7 +6,6 @@ */ import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IObject; /** * Pushes the 'null' onto the stack. @@ -18,7 +17,7 @@ } public String toString() { - return "push 'null'"; + return InstructionsEvaluationMessages.getString("PushNull.push___null__1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushStaticFieldVariable.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushStaticFieldVariable.java index 8f3ad8e..a6a1699 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushStaticFieldVariable.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushStaticFieldVariable.java
@@ -13,44 +13,53 @@ import org.eclipse.jdt.debug.core.IJavaInterfaceType; import org.eclipse.jdt.debug.core.IJavaType; import org.eclipse.jdt.debug.core.IJavaVariable; -import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin; - +import org.eclipse.jdt.debug.core.JDIDebugModel; + /** * Pushes the value of the static fields of the given type * onto the stack. */ public class PushStaticFieldVariable extends CompoundInstruction { - + private String fFieldName; - + private String fQualifiedTypeName; - - public PushStaticFieldVariable(String fieldName, String qualifiedTypeName, int start) { + + public PushStaticFieldVariable( + String fieldName, + String qualifiedTypeName, + int start) { super(start); - fFieldName= fieldName; - fQualifiedTypeName= qualifiedTypeName; + fFieldName = fieldName; + fQualifiedTypeName = qualifiedTypeName; } - + public void execute() throws CoreException { - IJavaType receiver= getType(fQualifiedTypeName); - - IJavaVariable field= null; + IJavaType receiver = getType(fQualifiedTypeName); + + IJavaVariable field = null; if (receiver instanceof IJavaInterfaceType) { - field= ((IJavaInterfaceType)receiver).getField(fFieldName); + field = ((IJavaInterfaceType) receiver).getField(fFieldName); } else if (receiver instanceof IJavaClassType) { - field= ((IJavaClassType)receiver).getField(fFieldName); + field = ((IJavaClassType) receiver).getField(fFieldName); } if (field == null) { - String message= MessageFormat.format(InstructionsEvaluationMessages.getString("PushStaticFieldVariable.Cannot_find_the_field_{0}_in_{1}_1"), new String[]{fFieldName, fQualifiedTypeName}); //$NON-NLS-1$ - throw new CoreException(new Status(Status.ERROR, JDIDebugPlugin.getUniqueIdentifier(), Status.OK, message, null)); // couldn't find the field + String message = MessageFormat.format(InstructionsEvaluationMessages.getString("PushStaticFieldVariable.Cannot_find_the_field_{0}_in_{1}_1"), new String[] { fFieldName, fQualifiedTypeName }); //$NON-NLS-1$ + throw new CoreException( + new Status( + Status.ERROR, + JDIDebugModel.getPluginIdentifier(), + Status.OK, + message, + null)); + // couldn't find the field } push(field); } - + public String toString() { - return MessageFormat.format(InstructionsEvaluationMessages.getString("PushStaticFieldVariable.push_static_field_{0}_2"), new String[]{fFieldName}); //$NON-NLS-1$ + return MessageFormat.format(InstructionsEvaluationMessages.getString("PushStaticFieldVariable.push_static_field_{0}_2"), new String[] { fFieldName }); //$NON-NLS-1$ } -} - +} \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushString.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushString.java index f8a1b1b..c9f671b 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushString.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushString.java
@@ -21,7 +21,7 @@ } public String toString() { - return "push " + fValue; + return InstructionsEvaluationMessages.getString("PushString.push__1") + fValue; //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushThis.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushThis.java index b85f5ac..becb3ad 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushThis.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushThis.java
@@ -6,27 +6,42 @@ */ import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IRuntimeContext; +import org.eclipse.core.runtime.Status; +import org.eclipse.jdt.debug.core.IJavaObject; +import org.eclipse.jdt.debug.core.JDIDebugModel; +import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue; +import org.eclipse.jdt.internal.debug.eval.ast.engine.IRuntimeContext; /** * Pushes the 'this' object onto the stack. */ public class PushThis extends SimpleInstruction { + private int fEnclosingLevel; + + public PushThis(int enclosingLevel) { + fEnclosingLevel= enclosingLevel; + } + public void execute() throws CoreException { IRuntimeContext context= getContext(); - IObject rec = context.getThis(); - if (rec == null) { + IJavaObject thisInstance = context.getThis(); + if (thisInstance == null) { // static context push(context.getReceivingType()); } else { - push(rec); + if (fEnclosingLevel != 0) { + thisInstance= ((JDIObjectValue)thisInstance).getEnclosingObject(fEnclosingLevel); + if (thisInstance == null) { + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, InstructionsEvaluationMessages.getString("PushThis.Unable_to_retrieve_the_correct_enclosing_instance_of__this__2"), null)); //$NON-NLS-1$ + } + } + push(thisInstance); } } public String toString() { - return "push 'this'"; + return InstructionsEvaluationMessages.getString("PushThis.push___this__1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushType.java index 155af55..c3e55a9 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushType.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushType.java
@@ -9,33 +9,25 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.Signature; -import org.eclipse.jdt.internal.debug.eval.model.*; -import org.eclipse.jdt.internal.debug.eval.model.EvaluationPrimitiveType; /** - * Pushes a type onto the stack. + * Pushes a reference type onto the stack. */ public class PushType extends SimpleInstruction { private String fTypeName; - private boolean fIsBaseType; - public PushType(String signature, boolean isBaseType) { + public PushType(String signature) { fTypeName= signature; - fIsBaseType= isBaseType; } public void execute() throws CoreException { - if (fIsBaseType) { - push(EvaluationPrimitiveType.getType(fTypeName)); - } else { - push(getType(fTypeName)); - } + push(getType(fTypeName)); } public String toString() { - return "push type " + fTypeName; + return InstructionsEvaluationMessages.getString("PushType.push_type__1") + fTypeName; //$NON-NLS-1$ }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushVariable.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushVariable.java deleted file mode 100644 index 9ba7274..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/PushVariable.java +++ /dev/null
@@ -1,75 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.ast.instructions; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Status; -import org.eclipse.jdt.internal.debug.eval.model.IClassType; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IRuntimeContext; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; - - -/** - * Pushes the value of a local, instance, or static - * variable onto the stack. - */ -public class PushVariable extends SimpleInstruction { - - /** - * Name of variable to push. - */ - private String fName; - - public PushVariable(String name) { - fName = name; - } - - public void execute() throws CoreException { - IRuntimeContext context= getContext(); - IVariable var = null; - IVariable[] locals = context.getLocals(); - for (int i = 0; i < locals.length; i++) { - if (locals[i].getName().equals(getName())) { - push(locals[i]); - return; - } - } - IObject t = context.getThis(); - if (t != null) { - var = t.getField(getName(), false); - if (var != null) { - push(var); - return; - } - } - IClassType ty = context.getReceivingType(); - var = ty.getField(getName()); - if (var != null) { - push(var); - return; - } - - throw new CoreException(null); - } - - /** - * Returns the name of the variable to push - * onto the stack. - * - * @return the name of the variable to push - * onto the stack - */ - protected String getName() { - return fName; - } - - public String toString() { - return "push '" + getName() + "'"; - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RemainderAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RemainderAssignmentOperator.java index 673870b..1061798 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RemainderAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RemainderAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'%=' operator"; + return InstructionsEvaluationMessages.getString("RemainderAssignmentOperator._%=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RemainderOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RemainderOperator.java index e501c61..ec2b641 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RemainderOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RemainderOperator.java
@@ -6,8 +6,9 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Status; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.JDIDebugModel; public class RemainderOperator extends BinaryOperator { public RemainderOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -19,57 +20,57 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { return false; } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getDoubleValue() % ((IPrimitiveValue) rightOperand).getDoubleValue(); + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getDoubleValue() % ((IJavaPrimitiveValue) rightOperand).getDoubleValue(); } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getFloatValue() % ((IPrimitiveValue) rightOperand).getFloatValue(); + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getFloatValue() % ((IJavaPrimitiveValue) rightOperand).getFloatValue(); } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) throws CoreException { - int divisor= ((IPrimitiveValue) rightOperand).getIntValue(); + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { + int divisor= ((IJavaPrimitiveValue) rightOperand).getIntValue(); if (divisor == 0) { - throw new CoreException(new Status(Status.ERROR, "", Status.OK, "Divide by zero", null)); + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, InstructionsEvaluationMessages.getString("RemainderOperator.Divide_by_zero_1"), null)); //$NON-NLS-1$ } - return ((IPrimitiveValue) leftOperand).getIntValue() % divisor; + return ((IJavaPrimitiveValue) leftOperand).getIntValue() % divisor; } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) throws CoreException { - long divisor= ((IPrimitiveValue) rightOperand).getLongValue(); + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) throws CoreException { + long divisor= ((IJavaPrimitiveValue) rightOperand).getLongValue(); if (divisor == 0) { - throw new CoreException(new Status(Status.ERROR, "", Status.OK, "Divide by zero", null)); + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, InstructionsEvaluationMessages.getString("RemainderOperator.Divide_by_zero_2"), null)); //$NON-NLS-1$ } - return ((IPrimitiveValue) leftOperand).getLongValue() % divisor; + return ((IJavaPrimitiveValue) leftOperand).getLongValue() % divisor; } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'%' operator"; + return InstructionsEvaluationMessages.getString("RemainderOperator._%___operator_3"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RightShiftAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RightShiftAssignmentOperator.java index e0fd13a..0083628 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RightShiftAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RightShiftAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'>>=' operator"; + return InstructionsEvaluationMessages.getString("RightShiftAssignmentOperator._>>=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RightShiftOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RightShiftOperator.java index 0a720ad..c92bbb7 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RightShiftOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/RightShiftOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class RightShiftOperator extends BinaryOperator { public RightShiftOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -17,66 +17,66 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { return false; } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { // unary type promotion on both operands see 5.6.1 and 15.18 switch (fRightTypeId) { case T_long : - return ((IPrimitiveValue) leftOperand).getIntValue() >> ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() >> ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : case T_short : case T_byte : case T_char : - return ((IPrimitiveValue) leftOperand).getIntValue() >> ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() >> ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return 0; } } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { // unary type promotion on both operands see 5.6.1 and 15.18 switch (fRightTypeId) { case T_long : - return ((IPrimitiveValue) leftOperand).getLongValue() >> ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() >> ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : case T_short : case T_byte : case T_char : - return ((IPrimitiveValue) leftOperand).getLongValue() >> ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() >> ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return 0; } } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } @@ -86,7 +86,7 @@ } public String toString() { - return "'>>' operator"; + return InstructionsEvaluationMessages.getString("RightShiftOperator._>>___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SendMessage.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SendMessage.java index a69cc42..9ae3fec 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SendMessage.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SendMessage.java
@@ -5,14 +5,17 @@ * All Rights Reserved. */ +import java.text.MessageFormat; + import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IClassType; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.core.runtime.Status; +import org.eclipse.jdt.debug.core.IJavaObject; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.IJavaVariable; +import org.eclipse.jdt.debug.core.JDIDebugModel; /** - * Sends a message. The arguments are on the + * Sends an message to an instance. The arguments are on the * stack in reverse order, followed by the receiver. * Pushes the result, if any, onto the stack */ @@ -32,34 +35,32 @@ } public void execute() throws CoreException { - IValue[] args = new IValue[fArgCount]; + IJavaValue[] args = new IJavaValue[fArgCount]; // args are in reverse order for (int i= fArgCount - 1; i >= 0; i--) { - args[i] = (IValue)popValue(); + args[i] = (IJavaValue)popValue(); } Object receiver = pop(); - IValue result = null; + IJavaValue result = null; - if (receiver instanceof IVariable) { - receiver = ((IVariable) receiver).getValue(); + if (receiver instanceof IJavaVariable) { + receiver = ((IJavaVariable) receiver).getValue(); } - if (receiver instanceof IObject) { - result = ((IObject)receiver).sendMessage(fSelector, fSignature, args, fSuperSend, getContext().getThread()); - } else if (receiver instanceof IClassType) { - result = ((IClassType)receiver).sendMessage(fSelector, fSignature, args, getContext().getThread()); + if (receiver instanceof IJavaObject) { + result = ((IJavaObject)receiver).sendMessage(fSelector, fSignature, args, getContext().getThread(), fSuperSend); } else { - throw new CoreException(null); + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, InstructionsEvaluationMessages.getString("SendMessage.Attempt_to_send_a_message_to_a_non_object_value_1"), null)); //$NON-NLS-1$ } - if (!fSignature.endsWith(")V")) { + setLastValue(result); + if (!fSignature.endsWith(")V")) { //$NON-NLS-1$ // only push the result if not a void method push(result); } } public String toString() { - return "send message " + fSelector + " " + fSignature; + return MessageFormat.format(InstructionsEvaluationMessages.getString("SendMessage.send_message_{0}_{1}_2"), new String[]{fSelector,fSignature}); //$NON-NLS-1$ } - }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SendStaticMessage.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SendStaticMessage.java index d2dc417..5466349 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SendStaticMessage.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SendStaticMessage.java
@@ -5,12 +5,15 @@ * All Rights Reserved. */ +import java.text.MessageFormat; + import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.Status; import org.eclipse.jdt.core.Signature; -import org.eclipse.jdt.internal.debug.eval.model.IClassType; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IValue; -import org.eclipse.jdt.internal.debug.eval.model.IVariable; +import org.eclipse.jdt.debug.core.IJavaClassType; +import org.eclipse.jdt.debug.core.IJavaType; +import org.eclipse.jdt.debug.core.IJavaValue; +import org.eclipse.jdt.debug.core.JDIDebugModel; /** * Sends a message. The arguments are on the @@ -33,25 +36,28 @@ } public void execute() throws CoreException { - IValue[] args = new IValue[fArgCount]; + IJavaValue[] args = new IJavaValue[fArgCount]; // args are in reverse order for (int i= fArgCount - 1; i >= 0; i--) { - args[i] = (IValue)popValue(); + args[i] = (IJavaValue)popValue(); } - IClassType receiver= (IClassType)getType(Signature.toString(fTypeSignature)); - - IValue result= receiver.sendMessage(fSelector, fSignature, args, getContext().getThread()); - - if (!fSignature.endsWith(")V")) { + IJavaType receiver= getType(Signature.toString(fTypeSignature).replace('/', '.')); + IJavaValue result; + if (receiver instanceof IJavaClassType) { + result= ((IJavaClassType)receiver).sendMessage(fSelector, fSignature, args, getContext().getThread()); + } else { + throw new CoreException(new Status(Status.ERROR, JDIDebugModel.getPluginIdentifier(), Status.OK, InstructionsEvaluationMessages.getString("SendStaticMessage.Cannot_send_a_static_message_to_a_non_class_type_object_1"), null)); //$NON-NLS-1$ + } + setLastValue(result); + if (!fSignature.endsWith(")V")) { //$NON-NLS-1$ // only push the result if not a void method push(result); } } public String toString() { - return "send static message " + fSelector + " " + fSignature; + return MessageFormat.format(InstructionsEvaluationMessages.getString("SendStaticMessage.send_static_message_{0}_{1}_2"), new String[]{fSelector, fSignature}); //$NON-NLS-1$ } - }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SimpleInstruction.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SimpleInstruction.java index e106e8f..82086b6 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SimpleInstruction.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/SimpleInstruction.java
@@ -5,8 +5,6 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IType; /** * A simple instruction cannot contain other instructions
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/TwiddleOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/TwiddleOperator.java index 5c854eb..3bba46f 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/TwiddleOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/TwiddleOperator.java
@@ -5,8 +5,7 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; public class TwiddleOperator extends UnaryOperator { @@ -18,7 +17,7 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IPrimitiveValue value= (IPrimitiveValue)popValue(); + IJavaPrimitiveValue value= (IJavaPrimitiveValue)popValue(); switch (fExpressionTypeId) { case T_long: pushNewValue(~value.getLongValue()); @@ -33,7 +32,7 @@ } public String toString() { - return "'~' operator"; + return InstructionsEvaluationMessages.getString("TwiddleOperator._~___operator_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnaryMinusOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnaryMinusOperator.java index 523db2d..d1e6036 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnaryMinusOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnaryMinusOperator.java
@@ -5,8 +5,7 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; public class UnaryMinusOperator extends UnaryOperator { @@ -18,7 +17,7 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IPrimitiveValue value= (IPrimitiveValue)popValue(); + IJavaPrimitiveValue value= (IJavaPrimitiveValue)popValue(); switch (fExpressionTypeId) { case T_double: pushNewValue(-value.getDoubleValue()); @@ -42,7 +41,7 @@ * @see Object#toString() */ public String toString() { - return "unary minus operator"; + return InstructionsEvaluationMessages.getString("UnaryMinusOperator.unary_minus_operator_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnaryPlusOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnaryPlusOperator.java index 66f3ee7..a211d12 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnaryPlusOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnaryPlusOperator.java
@@ -5,8 +5,7 @@ package org.eclipse.jdt.internal.debug.eval.ast.instructions; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.internal.debug.eval.model.IObject; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; public class UnaryPlusOperator extends UnaryOperator { @@ -18,7 +17,7 @@ * @see Instruction#execute() */ public void execute() throws CoreException { - IPrimitiveValue value= (IPrimitiveValue)popValue(); + IJavaPrimitiveValue value= (IJavaPrimitiveValue)popValue(); switch (fExpressionTypeId) { case T_double: pushNewValue(+value.getDoubleValue()); @@ -39,7 +38,7 @@ } public String toString() { - return "unary plus operator"; + return InstructionsEvaluationMessages.getString("UnaryPlusOperator.unary_plus_operator_1"); //$NON-NLS-1$ } }
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnsignedRightShiftAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnsignedRightShiftAssignmentOperator.java index 0244726..2839c09 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnsignedRightShiftAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnsignedRightShiftAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'>>>=' operator"; + return InstructionsEvaluationMessages.getString("UnsignedRightShiftAssignmentOperator._>>>=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnsignedRightShiftOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnsignedRightShiftOperator.java index 555cf46..10b5376 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnsignedRightShiftOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/UnsignedRightShiftOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class UnsignedRightShiftOperator extends BinaryOperator { public UnsignedRightShiftOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -17,66 +17,66 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { return false; } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { // unary type promotion on both operands see 5.6.1 and 15.18 switch (fRightTypeId) { case T_long : - return ((IPrimitiveValue) leftOperand).getIntValue() >>> ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() >>> ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : case T_short : case T_byte : case T_char : - return ((IPrimitiveValue) leftOperand).getIntValue() >>> ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getIntValue() >>> ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return 0; } } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { // unary type promotion on both operands see 5.6.1 and 15.18 switch (fRightTypeId) { case T_long : - return ((IPrimitiveValue) leftOperand).getLongValue() >>> ((IPrimitiveValue) rightOperand).getLongValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() >>> ((IJavaPrimitiveValue) rightOperand).getLongValue(); case T_int : case T_short : case T_byte : case T_char : - return ((IPrimitiveValue) leftOperand).getLongValue() >>> ((IPrimitiveValue) rightOperand).getIntValue(); + return ((IJavaPrimitiveValue) leftOperand).getLongValue() >>> ((IJavaPrimitiveValue) rightOperand).getIntValue(); default : return 0; } } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } @@ -86,7 +86,7 @@ } public String toString() { - return "'>>>' operator"; + return InstructionsEvaluationMessages.getString("UnsignedRightShiftOperator._>>>___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/XorAssignmentOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/XorAssignmentOperator.java index 6ceb511..cceab28 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/XorAssignmentOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/XorAssignmentOperator.java
@@ -11,7 +11,7 @@ } public String toString() { - return "'^=' operator"; + return InstructionsEvaluationMessages.getString("XorAssignmentOperator._^=___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/XorOperator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/XorOperator.java index a306790..d0e3205 100644 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/XorOperator.java +++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/instructions/XorOperator.java
@@ -4,8 +4,8 @@ */ package org.eclipse.jdt.internal.debug.eval.ast.instructions; -import org.eclipse.jdt.internal.debug.eval.model.IPrimitiveValue; -import org.eclipse.jdt.internal.debug.eval.model.IValue; +import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; +import org.eclipse.jdt.debug.core.IJavaValue; public class XorOperator extends BinaryOperator { public XorOperator(int resultId, int leftTypeId, int rightTypeId, int start) { @@ -17,49 +17,49 @@ } /* - * @see BinaryOperator#getBooleanResult(IValue, IValue) + * @see BinaryOperator#getBooleanResult(IJavaValue, IJavaValue) */ - protected boolean getBooleanResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getBooleanValue() ^ ((IPrimitiveValue) rightOperand).getBooleanValue(); + protected boolean getBooleanResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getBooleanValue() ^ ((IJavaPrimitiveValue) rightOperand).getBooleanValue(); } /* - * @see BinaryOperator#getDoubleResult(IValue, IValue) + * @see BinaryOperator#getDoubleResult(IJavaValue, IJavaValue) */ - protected double getDoubleResult(IValue leftOperand, IValue rightOperand) { + protected double getDoubleResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getFloatResult(IValue, IValue) + * @see BinaryOperator#getFloatResult(IJavaValue, IJavaValue) */ - protected float getFloatResult(IValue leftOperand, IValue rightOperand) { + protected float getFloatResult(IJavaValue leftOperand, IJavaValue rightOperand) { return 0; } /* - * @see BinaryOperator#getIntResult(IValue, IValue) + * @see BinaryOperator#getIntResult(IJavaValue, IJavaValue) */ - protected int getIntResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getIntValue() ^ ((IPrimitiveValue) rightOperand).getIntValue(); + protected int getIntResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getIntValue() ^ ((IJavaPrimitiveValue) rightOperand).getIntValue(); } /* - * @see BinaryOperator#getLongResult(IValue, IValue) + * @see BinaryOperator#getLongResult(IJavaValue, IJavaValue) */ - protected long getLongResult(IValue leftOperand, IValue rightOperand) { - return ((IPrimitiveValue) leftOperand).getLongValue() ^ ((IPrimitiveValue) rightOperand).getLongValue(); + protected long getLongResult(IJavaValue leftOperand, IJavaValue rightOperand) { + return ((IJavaPrimitiveValue) leftOperand).getLongValue() ^ ((IJavaPrimitiveValue) rightOperand).getLongValue(); } /* - * @see BinaryOperator#getStringResult(IValue, IValue) + * @see BinaryOperator#getStringResult(IJavaValue, IJavaValue) */ - protected String getStringResult(IValue leftOperand, IValue rightOperand) { + protected String getStringResult(IJavaValue leftOperand, IJavaValue rightOperand) { return null; } public String toString() { - return "'^' operator"; + return InstructionsEvaluationMessages.getString("XorOperator._^___operator_1"); //$NON-NLS-1$ } } \ No newline at end of file
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArray.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArray.java deleted file mode 100644 index 081c6b2..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArray.java +++ /dev/null
@@ -1,59 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.debug.core.IJavaArray; -import org.eclipse.jdt.debug.core.IJavaValue; - -/** - * A proxy to a Java debug model array object - */ -public class EvaluationArray extends EvaluationObject implements IArray { - - /** - * Constructs a proxy to the given array. - * - * @param array underlying Java debug model array - * @return a proxy to the given array - */ - protected EvaluationArray(IJavaArray array) { - super(array); - } - - /** - * @see IArray#getLength() - */ - public int getLength() throws CoreException { - return getJavaArray().getLength(); - } - - /** - * @see IArray#getValue(int) - */ - public IValue getValue(int index) throws CoreException { - return EvaluationValue.createValue(getJavaArray().getValue(index)); - } - - /** - * @see IArray#setValue(int, IValue) - */ - public void setValue(int index, IValue value) throws CoreException { - IJavaValue jv = ((EvaluationValue)value).getJavaValue(); - getJavaArray().setValue(index, jv); - } - - /** - * Returns the underlying Java debug model array - * - * @return the underlying Java debug model array - */ - protected IJavaArray getJavaArray() { - return (IJavaArray)getJavaValue(); - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArrayType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArrayType.java deleted file mode 100644 index 1f61a93..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArrayType.java +++ /dev/null
@@ -1,56 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.debug.core.IJavaArray; -import org.eclipse.jdt.debug.core.IJavaArrayType; -import org.eclipse.jdt.debug.core.IJavaType; - -/** - * The type of an array - a proxy to a Java debug model - * array type - */ -public class EvaluationArrayType extends EvaluationType implements IArrayType { - - /** - * Constructs a proxy to the given Java debug model array - * type. - * - * @param type Java debug model array type - * @return a proxy to the Java debug model array type - */ - public EvaluationArrayType(IJavaArrayType type) { - super(type); - } - - /** - * Returns the underlying Java debug model array type - * - * @return the underlying Java debug model array type - */ - protected IJavaArrayType getJavaArrayType() { - return (IJavaArrayType)getJavaType(); - } - - /** - * @see IArrayType#getComponentType() - */ - public IType getComponentType() throws CoreException { - IJavaType jt = getJavaArrayType().getComponentType(); - return EvaluationType.createType(jt); - } - - /** - * @see IArrayType#newArray(int) - */ - public IArray newArray(int length) throws CoreException { - IJavaArray ja = getJavaArrayType().newInstance(length); - return (IArray)EvaluationValue.createValue(ja); - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArrayVariable.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArrayVariable.java deleted file mode 100644 index ce4fbbb..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationArrayVariable.java +++ /dev/null
@@ -1,48 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ -package org.eclipse.jdt.internal.debug.eval.model; - -import org.eclipse.core.runtime.CoreException; - -public class EvaluationArrayVariable implements IVariable { - - private IArray fArray; - - private int fIndex; - - public EvaluationArrayVariable(IArray array, int index) { - fArray = array; - fIndex = index; - } - - /* - * @see IVariable#getName() - */ - public String getName() throws CoreException { - return fArray.getType().getName() + "[" + fIndex + "]"; - } - - /* - * @see IVariable#getType() - */ - public IType getType() throws CoreException { - return ((IArrayType)fArray.getType()).getComponentType(); - } - - /* - * @see IVariable#getValue() - */ - public IValue getValue() throws CoreException { - return fArray.getValue(fIndex); - } - - /* - * @see IVariable#setValue(IValue) - */ - public void setValue(IValue value) throws CoreException { - fArray.setValue(fIndex, value); - } - -}
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationClassType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationClassType.java deleted file mode 100644 index f132bb9..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationClassType.java +++ /dev/null
@@ -1,109 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.debug.core.IJavaClassType; -import org.eclipse.jdt.debug.core.IJavaObject; -import org.eclipse.jdt.debug.core.IJavaThread; -import org.eclipse.jdt.debug.core.IJavaValue; -import org.eclipse.jdt.debug.core.IJavaVariable; - -/** - * The type of an object - provides access to static methods and fields. - */ -public class EvaluationClassType extends EvaluationType implements IClassType { - - /** - * Cosntructs a new type that represents a the given - * class. - */ - public EvaluationClassType(IJavaClassType type) { - super(type); - } - - /** - * @see IClassType#newInstance(String, IValue[], IThread) - */ - public IObject newInstance(String signature, IValue[] args, IThread thread) - throws CoreException { - IJavaValue[] javaArgs = getJavaArgs(args); - IJavaObject jo = getJavaClassType().newInstance(signature, javaArgs, ((EvaluationThread)thread).getJavaThread()); - return (IObject)EvaluationValue.createValue(jo); - } - - /** - * @see IClassType#sendMessage(String, String, IValue[], IThread) - */ - public IValue sendMessage( - String selector, - String signature, - IValue[] args, - IThread thread) - throws CoreException { - IJavaValue[] javaArgs =getJavaArgs(args); - IJavaThread javaThread = ((EvaluationThread)thread).getJavaThread(); - IJavaValue v = getJavaClassType().sendMessage(selector, signature, javaArgs, javaThread); - return EvaluationValue.createValue(v); - } - - /** - * Utility method to convert evaluation arguments - * to Java debug model arguments. - * - * @param args array of evaluation arguments (instances - * of <code>EvaluationValue</code> - * @return array of underlying associated <code>IJavaValue</code>s - */ - protected static IJavaValue[] getJavaArgs(IValue[] args) { - IJavaValue[] javaArgs = null; - if (args != null) { - javaArgs = new IJavaValue[args.length]; - for (int i = 0; i < args.length; i++) { - javaArgs[i] = ((EvaluationValue)args[i]).getJavaValue(); - } - } - return javaArgs; - } - - /** - * @see IClassType#getField(String) - */ - public IVariable getField(String name) throws CoreException { - IJavaVariable jv = getJavaClassType().getField(name); - if (jv != null) { - return new EvaluationVariable(jv); - } - return null; - } - - /** - * @see IClassType#getName() - */ - public String getName() throws CoreException { - return getJavaClassType().getName(); - } - - /** - * Returns the underlying java debug model class type that - * this a proxy to. - * - * @return the underlying java debug model class type that - * this a proxy to - */ - protected IJavaClassType getJavaClassType() { - return (IJavaClassType)getJavaType(); - } - - public IObject getClassObject() throws CoreException { - IJavaObject javaObject = getJavaClassType().getClassObject(); - if (javaObject != null) { - return new EvaluationObject(javaObject); - } - return null; - } -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationElement.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationElement.java deleted file mode 100644 index 04339a8..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationElement.java +++ /dev/null
@@ -1,38 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -import org.eclipse.debug.core.model.IDebugElement; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -/** - * A proxy to an underlying java debug model element - * used for evaluation. - */ -public abstract class EvaluationElement { - - /** - * Returns the underlying Java debug model element - */ - protected abstract Object getUnderlyingModelObject(); - - /** - * @see Object#equals(Object) - */ - public boolean equals(Object o) { - if (o instanceof EvaluationElement) { - return getUnderlyingModelObject().equals(((EvaluationElement)o).getUnderlyingModelObject()); - } - return false; - } - - /** - * @see Object#hashCode() - */ - public int hashCode() { - return getUnderlyingModelObject().hashCode(); - } -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationInterfaceType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationInterfaceType.java deleted file mode 100644 index 1d736e1..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationInterfaceType.java +++ /dev/null
@@ -1,67 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.debug.core.IJavaClassType; -import org.eclipse.jdt.debug.core.IJavaInterfaceType; -import org.eclipse.jdt.debug.core.IJavaObject; -import org.eclipse.jdt.debug.core.IJavaThread; -import org.eclipse.jdt.debug.core.IJavaValue; -import org.eclipse.jdt.debug.core.IJavaVariable; - -/** - * The type of an object - provides access to static methods and fields. - */ -public class EvaluationInterfaceType extends EvaluationType implements IInterfaceType { - - /** - * Cosntructs a new type that represents a the given - * class. - */ - public EvaluationInterfaceType(IJavaInterfaceType type) { - super(type); - } - - - /** - * @see IClassType#getField(String) - */ - public IVariable getField(String name) throws CoreException { - IJavaVariable jv = getJavaInterfaceType().getField(name); - if (jv != null) { - return new EvaluationVariable(jv); - } - return null; - } - - /** - * @see IClassType#getName() - */ - public String getName() throws CoreException { - return getJavaInterfaceType().getName(); - } - - /** - * Returns the underlying java debug model class type that - * this a proxy to. - * - * @return the underlying java debug model class type that - * this a proxy to - */ - protected IJavaInterfaceType getJavaInterfaceType() { - return (IJavaInterfaceType)getJavaType(); - } - - public IObject getClassObject() throws CoreException { - IJavaObject javaObject = getJavaInterfaceType().getClassObject(); - if (javaObject != null) { - return new EvaluationObject(javaObject); - } - return null; - } -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationObject.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationObject.java deleted file mode 100644 index 5b06f5c..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationObject.java +++ /dev/null
@@ -1,73 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.debug.core.IJavaObject; -import org.eclipse.jdt.debug.core.IJavaValue; -import org.eclipse.jdt.debug.core.IJavaVariable; - -/** - * A proxy to an object on a Java debug target - */ -public class EvaluationObject extends EvaluationValue implements IObject { - - /** - * Constructs a proxy to the given object - * - * @param object Java debug model object - * @return a proxy to the given object - */ - protected EvaluationObject(IJavaObject object) { - super(object); - } - - /** - * @see IObject#getField(String) - */ - public IVariable getField(String name, boolean superField) throws CoreException { - IJavaVariable jv = getJavaObject().getField(name, superField); - if (jv != null) { - return new EvaluationVariable(jv); - } - return null; - } - - public IVariable getField(String name, String typeSignature) throws CoreException { - IJavaVariable jv = getJavaObject().getField(name, typeSignature); - if (jv != null) { - return new EvaluationVariable(jv); - } - return null; - } - - /** - * @see IObject#sendMessage(String, String, IValue[], boolean, IThread) - */ - public IValue sendMessage( - String selector, - String signature, - IValue[] args, - boolean superSend, - IThread thread) - throws CoreException { - IJavaValue[] javaArgs = EvaluationClassType.getJavaArgs(args); - IJavaValue result = getJavaObject().sendMessage(selector, signature, javaArgs, ((EvaluationThread)thread).getJavaThread(), superSend); - return EvaluationValue.createValue(result); - } - - /** - * Returns the underlying Java debug model object this - * proxy references - * - * @return underlying Java debug model object - */ - public IJavaObject getJavaObject() { - return (IJavaObject)getJavaValue(); - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationPrimitiveType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationPrimitiveType.java deleted file mode 100644 index 45bf2c0..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationPrimitiveType.java +++ /dev/null
@@ -1,77 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2000, 2001, 2002. - * All Rights Reserved. - */ -package org.eclipse.jdt.internal.debug.eval.model; - -import org.eclipse.core.runtime.CoreException; - -public class EvaluationPrimitiveType implements IPrimitiveType { - - private String fName; - private String fSignature; - - static private final IPrimitiveType byteType = new EvaluationPrimitiveType("byte", "B"); - - static private final IPrimitiveType charType = new EvaluationPrimitiveType("char", "C"); - - static private final IPrimitiveType doubleType = new EvaluationPrimitiveType("double", "D"); - - static private final IPrimitiveType floatType = new EvaluationPrimitiveType("float", "F"); - - static private final IPrimitiveType intType = new EvaluationPrimitiveType("int", "I"); - - static private final IPrimitiveType longType = new EvaluationPrimitiveType("long", "J"); - - static private final IPrimitiveType shortType = new EvaluationPrimitiveType("short", "S"); - - static private final IPrimitiveType booleanType = new EvaluationPrimitiveType("boolean", "Z"); - - - - static public IPrimitiveType getType(String signature) { - switch (signature.charAt(0)) { - case 'B': - return byteType; - case 'C': - return charType; - case 'D': - return doubleType; - case 'F': - return floatType; - case 'I': - return intType; - case 'J': - return longType; - case 'S': - return shortType; - case 'Z': - return booleanType; - } - return null; - } - - /** - * Constructor for EvaluationPrimitiveType. - * @param type - */ - protected EvaluationPrimitiveType(String name, String signature) { - fName = name; - fSignature = signature; - } - - /* - * @see IType#getName() - */ - public String getName() throws CoreException { - return fName; - } - - /* - * @see IType#getSignature() - */ - public String getSignature() throws CoreException { - return fSignature; - } - -}
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationPrimitiveValue.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationPrimitiveValue.java deleted file mode 100644 index 0d4361c..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationPrimitiveValue.java +++ /dev/null
@@ -1,93 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; -import org.eclipse.jdt.debug.core.IJavaValue; - -/** - * A primitive value - */ -public class EvaluationPrimitiveValue - extends EvaluationValue - implements IPrimitiveValue { - - /** - * Constructs a primitive value. - * - * @param value underlying Java debug model value - */ - protected EvaluationPrimitiveValue(IJavaPrimitiveValue value) { - super(value); - } - - /** - * Returns the underlying Java debug model primitive value. - * - * @return underlying Java debug model primitive value - */ - protected IJavaPrimitiveValue getJavaPrimitiveValue() { - return (IJavaPrimitiveValue)getJavaValue(); - } - - /* - * @see IPrimitiveValue#getBooleanValue() - */ - public boolean getBooleanValue() { - return getJavaPrimitiveValue().getBooleanValue(); - } - - /* - * @see IPrimitiveValue#getByteValue() - */ - public byte getByteValue() { - return getJavaPrimitiveValue().getByteValue(); - } - - /* - * @see IPrimitiveValue#getCharValue() - */ - public char getCharValue() { - return getJavaPrimitiveValue().getCharValue(); - } - - /* - * @see IPrimitiveValue#getDoubleValue() - */ - public double getDoubleValue() { - return getJavaPrimitiveValue().getDoubleValue(); - } - - /* - * @see IPrimitiveValue#getFloatValue() - */ - public float getFloatValue() { - return getJavaPrimitiveValue().getFloatValue(); - } - - /* - * @see IPrimitiveValue#getIntValue() - */ - public int getIntValue() { - return getJavaPrimitiveValue().getIntValue(); - } - - /* - * @see IPrimitiveValue#getLongValue() - */ - public long getLongValue() { - return getJavaPrimitiveValue().getLongValue(); - } - - /* - * @see IPrimitiveValue#getShortValue() - */ - public short getShortValue() { - return getJavaPrimitiveValue().getShortValue(); - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationThread.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationThread.java deleted file mode 100644 index 06ae689..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationThread.java +++ /dev/null
@@ -1,57 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.jdt.debug.core.IJavaThread; - -/** - * A proxy to a Java debug model thread - */ -public class EvaluationThread extends EvaluationElement implements IThread { - - /** - * Underlying Java debug model thread - */ - private IJavaThread fJavaThread; - - /** - * Constructs an evaluation thread on the given - * underlying Java debug model thread. - * - * @param thread underlying Java debug model thread - * @return a thread used for evaluation - */ - protected EvaluationThread(IJavaThread thread) { - setJavaThread(thread); - } - - /** - * Returns the underlying Java debug model thread. - * - * @return the underlying Java debug model thread - */ - protected IJavaThread getJavaThread() { - return fJavaThread; - } - - /** - * Sets the underlying Java debug model thread. - * - * @param javaThread the underlying Java debug model thread - */ - private void setJavaThread(IJavaThread javaThread) { - fJavaThread = javaThread; - } - - /** - * @see EvaluationElement#getUnderlyingModelObject() - */ - protected Object getUnderlyingModelObject() { - return getJavaThread(); - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationType.java deleted file mode 100644 index b644397..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationType.java +++ /dev/null
@@ -1,105 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.model.IDebugElement; -import org.eclipse.jdt.debug.core.IJavaArrayType; -import org.eclipse.jdt.debug.core.IJavaClassType; -import org.eclipse.jdt.debug.core.IJavaInterfaceType; -import org.eclipse.jdt.debug.core.IJavaThread; -import org.eclipse.jdt.debug.core.IJavaType; -import org.eclipse.jdt.debug.core.IJavaValue; - -/** - * A type used for evaluation - a proxy to a java - * type in the java debug model. - */ -public class EvaluationType extends EvaluationElement implements IType { - - /** - * The underlying java debug model type - */ - private IJavaType fType; - - /** - * Constructs a type to be used for an evaluation - * based on the given underlying java debug model - * type - * - * @param type java debug model type - * @return a type to use for evalaution - */ - public EvaluationType(IJavaType type) { - setJavaType(type); - } - - /** - * @see IType#getSignature() - */ - public String getSignature() throws CoreException { - return getJavaType().getSignature(); - } - - /** - * @see IType#getName() - */ - public String getName() throws CoreException { - return getJavaType().getName(); - } - - /** - * Sets the type that this evaluation type - * is a proxy to. - * - * @param type the type that this evaluation type - * is a proxy to - */ - private void setJavaType(IJavaType type) { - fType = type; - } - - /** - * Returns the type that this evaluation type - * is a proxy to. - * - * @param type the type that this evaluation type - * is a proxy to - */ - protected IJavaType getJavaType() { - return fType; - } - - /** - * @see EvaluationElement#getUnderlyingModelObject() - */ - protected Object getUnderlyingModelObject() { - return getJavaType(); - } - - /** - * Returns an equivalent evaluation type for the given - * java debug model type. - * - * @param type a java debug model type - * @return an equivalent evaluation type for the given - * java debug model type - */ - protected static IType createType(IJavaType type) { - if (type instanceof IJavaClassType) { - return new EvaluationClassType((IJavaClassType)type); - } - if (type instanceof IJavaInterfaceType) { - return new EvaluationInterfaceType((IJavaInterfaceType)type); - } - if (type instanceof IJavaArrayType) { - return new EvaluationArrayType((IJavaArrayType)type); - } - return new EvaluationType(type); - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationVM.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationVM.java deleted file mode 100644 index 5c66f71..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationVM.java +++ /dev/null
@@ -1,160 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.debug.core.IJavaDebugTarget; -import org.eclipse.jdt.debug.core.IJavaType; -import org.eclipse.jdt.debug.core.IJavaValue; - -/** - * Proxy to a Java debug target - */ -public class EvaluationVM extends EvaluationElement implements IVirtualMachine { - - /** - * Underlying Java debug target - */ - private IJavaDebugTarget fJavaDebugTarget; - - /** - * Constructs a proxy to the given Java debug target. - * - * @param target Java debug target - * @return prxoxy to the given target - */ - protected EvaluationVM(IJavaDebugTarget target) { - setJavaDebugTarget(target); - } - - /** - * @see EvaluationElement#getUnderlyingModelObject() - */ - protected Object getUnderlyingModelObject() { - return getJavaDebugTarget(); - } - - /** - * @see IVirtualMachine#newValue(boolean) - */ - public IValue newValue(boolean value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#newValue(byte) - */ - public IValue newValue(byte value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#newValue(char) - */ - public IValue newValue(char value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#newValue(double) - */ - public IValue newValue(double value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#newValue(float) - */ - public IValue newValue(float value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#newValue(int) - */ - public IValue newValue(int value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#newValue(long) - */ - public IValue newValue(long value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#newValue(short) - */ - public IValue newValue(short value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#newValue(String) - */ - public IObject newValue(String value) { - IJavaValue v = getJavaDebugTarget().newValue(value); - return (IObject)EvaluationValue.createValue(v); - } - - /** - * @see IVirtualMachine#classesByName(String) - */ - public IType[] classesByName(String qualifiedName) throws CoreException { - IJavaType[] types = getJavaDebugTarget().getJavaTypes(qualifiedName); - if (types != null) { - IType[] theTypes = new IType[types.length]; - for (int i = 0; i < types.length; i++) { - theTypes[i] = EvaluationType.createType(types[i]); - } - return theTypes; - } - return new IType[0]; - } - - /** - * @see IVirtualMachine#nullValue() - */ - public IValue nullValue() { - return EvaluationValue.createValue(getJavaDebugTarget().nullValue()); - } - - /** - * @see IVirtualMachine#voidValue() - */ - public IValue voidValue() { - return EvaluationValue.createValue(getJavaDebugTarget().voidValue()); - } - - /** - * Returns the underlying Java debug target. - * - * @return the underlying Java debug target - */ - protected IJavaDebugTarget getJavaDebugTarget() { - return fJavaDebugTarget; - } - - /** - * Sets the underlying Java debug target. - * - * @param javaDebugTarget Java debug target - */ - private void setJavaDebugTarget(IJavaDebugTarget javaDebugTarget) { - fJavaDebugTarget = javaDebugTarget; - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationValue.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationValue.java deleted file mode 100644 index 6a9d632..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationValue.java +++ /dev/null
@@ -1,90 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.debug.core.IJavaArray; -import org.eclipse.jdt.debug.core.IJavaObject; -import org.eclipse.jdt.debug.core.IJavaPrimitiveValue; -import org.eclipse.jdt.debug.core.IJavaValue; - -/** - * An evaluation value - a proxy to an underlying java - * model value - */ -public class EvaluationValue extends EvaluationElement implements IValue { - - /** - * Underlying java debug model value - */ - private IJavaValue fJavaValue; - - /** - * Constructs a new proxy to the given underlying java - * debug model value - * - * @param value underling java debug model value - * @return a value to be used for evaluation - */ - protected EvaluationValue(IJavaValue value) { - setJavaValue(value); - } - - /** - * @see EvaluationElement#getUnderlyingModelObject() - */ - protected Object getUnderlyingModelObject() { - return getJavaValue(); - } - - /** - * @see IValue#getType() - */ - public IType getType() throws CoreException { - return EvaluationType.createType(getJavaValue().getJavaType()); - } - - /** - * Returns the underlying java debug model value. - * - * @return the underlying java debug model value - */ - public IJavaValue getJavaValue() { - return fJavaValue; - } - - /** - * Sets the underlying java debug model value. - * - * @param javaValue the underlying java debug model value - */ - private void setJavaValue(IJavaValue javaValue) { - fJavaValue = javaValue; - } - - /** - * Returns an equivalent evaluation value for the given - * java debug model value. - * - * @param value a java debug model value - * @return an equivalent evaluation value for the given - * java debug model value - */ - protected static IValue createValue(IJavaValue value) { - if (value instanceof IJavaArray) { - return new EvaluationArray((IJavaArray)value); - } - if (value instanceof IJavaObject) { - return new EvaluationObject((IJavaObject)value); - } - if (value instanceof IJavaPrimitiveValue) { - return new EvaluationPrimitiveValue((IJavaPrimitiveValue)value); - } - return new EvaluationValue(value); - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationVariable.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationVariable.java deleted file mode 100644 index 5f45713..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/EvaluationVariable.java +++ /dev/null
@@ -1,93 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.debug.core.IJavaValue; -import org.eclipse.jdt.debug.core.IJavaVariable; - -/** - * An evaluation variable - a proxy to a java variable - */ -public class EvaluationVariable extends EvaluationElement implements IVariable { - - /** - * Underlying variable - */ - private IJavaVariable fVariable; - - /** - * Constructs a new evaluation variable on the given - * Java variable - * - * @param variable the underlying java debug model variable - * @return a variable to be used for evaluation - */ - public EvaluationVariable(IJavaVariable variable) { - setJavaVariable(variable); - } - - - /** - * @see IVariable#getType() - */ - public IType getType() throws CoreException { - return new EvaluationType(getJavaVariable().getJavaType()); - } - - /** - * @see IVariable#getValue() - */ - public IValue getValue() throws CoreException { - return EvaluationValue.createValue((IJavaValue)getJavaVariable().getValue()); - } - - /** - * @see IVariable#setValue(IValue) - */ - public void setValue(IValue value) throws CoreException { - getJavaVariable().setValue(((EvaluationValue)value).getJavaValue()); - } - - /** - * @see IVariable#getName() - */ - public String getName() throws CoreException { - return getJavaVariable().getName(); - } - - /** - * Sets the variable that this evaluation variable - * is a proxy to. - * - * @param variable the variable that this evaluation variable - * is a proxy to - */ - private void setJavaVariable(IJavaVariable variable) { - fVariable = variable; - } - - /** - * Returns the variable that this evaluation variable - * is a proxy to. - * - * @param variable the variable that this evaluation variable - * is a proxy to - */ - private IJavaVariable getJavaVariable() { - return fVariable; - } - - /** - * @see EvaluationElement#getUnderlyingModelObject() - */ - protected Object getUnderlyingModelObject() { - return getJavaVariable(); - } - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IArray.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IArray.java deleted file mode 100644 index 0640e30..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IArray.java +++ /dev/null
@@ -1,64 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * An array on a virtual machine. - * <p> - * Clients are intended to implement this interface. - * </p> - * <p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ - -public interface IArray extends IObject { - - /** - * Returns the length of this array. - * - * @return length - * @exception EvaluationException if this method fails. Reasons include:<ul> - * <li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - int getLength() throws CoreException; - - /** - * Returns the value at the given index in this array. - * - * @param index index in this array - * @return value at the specified index - * @exception EvaluationException if this method fails. Reasons include:<ul> - * <li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - IValue getValue(int index) throws CoreException; - - /** - * Sets the value at the given index in this array. - * - * @param index index in this array - * @param new value for the specified index - * @exception CoreException if this method fails. Reasons include:<ul> - * <li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - void setValue(int index, IValue value) throws CoreException; - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IArrayType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IArrayType.java deleted file mode 100644 index 145b1eb..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IArrayType.java +++ /dev/null
@@ -1,50 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * The type of an array on a virtual machine. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ - -public interface IArrayType extends IType { - - /** - * Returns the type of the elements in this array. - * - * @return type - * @exception EvaluationException if this method fails. Reasons include:<ul> - * <li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - IType getComponentType() throws CoreException; - - /** - * Creates a new array of the same type as this array with the\ - * given length. - * - * @param length the length of the new array - * @exception CoreException if this method fails. Reasons include:<ul> - * <li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - IArray newArray(int length) throws CoreException; - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IClassType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IClassType.java deleted file mode 100644 index 3cadb7a..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IClassType.java +++ /dev/null
@@ -1,89 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * The class of an object on a virtual machine. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ -public interface IClassType extends IType { - /** - * Returns a new instance of this class by invoking the - * constructor with the specified signature and arguments. - * - * @param signature the JNI style signature of the cosntructor to - * be invoked - * @param args the arguments of the constructor, which - * can be <code>null</code> or emtpy if there are none - * @param thread the thread in which to construct the new object - * @return the result of invoking the constructor - * @exception EvaluationException if this method fails. Reasons include:<ul> - * <li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * <li>This class does not implement the specified constructor</li> - * <li>An exception occurrs on the target VM while invoking the - * specified constructor</li> - * </ul> - */ - IObject newInstance(String signature, IValue[] args, IThread thread) throws CoreException; - - /** - * Returns the result of sending the specified (static) message to - * this class with the given arguments. - * - * @param selector the selector of the method to be invoked - * @param signature the JNI style signature of the method to be invoked - * @param args the arguments of the method, which can be - * <code>null</code> or emtpy if there are none - * @param thread the thread in which to perform the message send - * @return the result of invoking the method - * @exception CoreException if this method fails. Reasons include:<ul> - * <li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * <li>This class does not implement the specified method</li> - * <li>An exception occurrs on the target VM while invoking the - * specified method</li> - * </ul> - */ - IValue sendMessage(String selector, String signature, IValue[] args, IThread thread) throws CoreException; - - /** - * Returns the (static) field of this class with the specified name, - * or <code>null</code> if none exists. - * - * @return the field of this class with the specified name, or - * <code>null</code> - * @exception CoreException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - IVariable getField(String name) throws CoreException; - - /** - * Returns the fully qualified name of this class. - * - * @return the fully qualified name of this class - */ - String getName() throws CoreException; - - /** - * Returns the Class object for this type - */ - IObject getClassObject() throws CoreException; -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IInterfaceType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IInterfaceType.java deleted file mode 100644 index 61c41ab..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IInterfaceType.java +++ /dev/null
@@ -1,47 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * The class of an object on a virtual machine. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ -public interface IInterfaceType extends IType { - /** - * Returns the (static) field of this class with the specified name, - * or <code>null</code> if none exists. - * - * @return the field of this class with the specified name, or - * <code>null</code> - * @exception CoreException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - IVariable getField(String name) throws CoreException; - - /** - * Returns the fully qualified name of this class. - * - * @return the fully qualified name of this class - */ - String getName() throws CoreException; - - /** - * Returns the Class object for this type - */ - IObject getClassObject() throws CoreException; -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IObject.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IObject.java deleted file mode 100644 index 0d13383..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IObject.java +++ /dev/null
@@ -1,62 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * A object on a virtual machine. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ - -public interface IObject extends IValue { - - /** - * Returns the field of this object with the specified name. - * Static and instance fields are available from this method. - * - * @return the field of this object with the specified name - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - IVariable getField(String name, boolean superField) throws CoreException; - - IVariable getField(String name, String typeSignature) throws CoreException; - - /** - * Returns the result of sending the specified message to - * this object with the given arguments. - * - * @param selector the selector of the method to be invoked - * @param signature the JNI style signature of the method to be invoked - * @param args the arguments of the method, which can be - * <code>null</code> or emtpy if there are none - * @param superSend whether method lookup will being in this object's - * superclass - * @param thread the thread in which to perform the message send - * @return the result of invoking the method - * @exception EvaluationException if this method fails. Reasons include:<ul> - * <li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * <li>This class does not implement the specified method</li> - * <li>An exception occurrs on the target VM while invoking the - * specified method</li> - * </ul> - */ - IValue sendMessage(String selector, String signature, IValue[] args, boolean superSend, IThread thread) throws CoreException; - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IPrimitiveType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IPrimitiveType.java deleted file mode 100644 index cd7cdc2..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IPrimitiveType.java +++ /dev/null
@@ -1,10 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2000, 2001, 2002. - * All Rights Reserved. - */ -package org.eclipse.jdt.internal.debug.eval.model; - -import org.eclipse.jdt.internal.debug.eval.model.*; - -public interface IPrimitiveType extends IType { -}
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IPrimitiveValue.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IPrimitiveValue.java deleted file mode 100644 index e559619..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IPrimitiveValue.java +++ /dev/null
@@ -1,76 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -/** - * A primitive value. - * <p> - * Clients are not intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ -public interface IPrimitiveValue extends IValue { - - /** - * Returns this value as a boolean. - * - * @return this value as a boolean - */ - public boolean getBooleanValue(); - - /** - * Returns this value as a byte - * - * @return this value as a byte - */ - public byte getByteValue(); - - /** - * Returns this value as a char - * - * @return this value as a char - */ - public char getCharValue(); - - /** - * Returns this value as a double - * - * @return this value as a double - */ - public double getDoubleValue(); - - /** - * Returns this value as a float - * - * @return this value as a float - */ - public float getFloatValue(); - - /** - * Returns this value as an int - * - * @return this value as an int - */ - public int getIntValue(); - - /** - * Returns this value as a long - * - * @return this value as a long - */ - public long getLongValue(); - - /** - * Returns this value as a short - * - * @return this value as a short - */ - public short getShortValue(); -}
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IRuntimeContext.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IRuntimeContext.java deleted file mode 100644 index 0963d6d..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IRuntimeContext.java +++ /dev/null
@@ -1,106 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.core.IJavaProject; - -/** - * The context in which an evaluation is to be performed. An - * evaluation is performed in the context of an object or class. - * The evaluation may be in the context of a method, in which case - * there could be local variables. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ - -public interface IRuntimeContext { - - /** - * Returns the virtual machine in which to perform the - * evaluation. - * - * @return virtual machine - */ - IVirtualMachine getVM(); - - /** - * Returns the receiving object context in which to perform - * the evaluation - equivalent to 'this'. Returns <code>null</code> - * if the context of an evaluation is in a class rather than - * an object. - * - * @return 'this', or <code>null</code> - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - IObject getThis() throws CoreException; - - /** - * Returns the receiving type context in which to perform - * the evaluation. The type of 'this', or in the case of a - * static context, the class in which the evaluation is being - * performed. - * - * @return receiving class - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - IClassType getReceivingType() throws CoreException; - - /** - * Returns the local variables visible for the evaluation. - * This includes method arguments, if any. Does not return - * <code>null</code> returns an empty collection if there - * are no locals. - * - * @return local variables - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - IVariable[] getLocals() throws CoreException; - - /** - * Returns the Java project context in which this expression - * should be compiled. - * - * @return project - */ - IJavaProject getProject(); - - /** - * Returns the thread in which message sends may be performed. - * - * @return thread - */ - IThread getThread(); - - /** - * Returns whether the context of this evaluation is within - * a constructor. - * - * @return whether the context of this evaluation is within - * a constructor - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - public boolean isConstructor() throws CoreException; -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IThread.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IThread.java deleted file mode 100644 index 8942343..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IThread.java +++ /dev/null
@@ -1,22 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -/** - * A thread in which a message send may be performed. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ -public interface IThread { - -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IType.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IType.java deleted file mode 100644 index 4881b72..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IType.java +++ /dev/null
@@ -1,46 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * The type of a value on a virtual machine - a primitive - * data type, class, interface, or array. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ -public interface IType { - /** - * Returns the JNI-style signature for this type. - * - * @return signature - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - String getSignature() throws CoreException; - - /** - * Returns the name of this type, for example - * <code>java.lang.String</code>. - * - * @return name - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - String getName() throws CoreException; -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IValue.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IValue.java deleted file mode 100644 index 9b18d46..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IValue.java +++ /dev/null
@@ -1,34 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * A value assigned to a field or variable on a virtual - * machine. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ -public interface IValue { - - /** - * Returns the type of this vlaue. - * - * @return the type of this value - * @exception CoreException if unable to retrieve this value's type - */ - IType getType() throws CoreException; - -} - -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IVariable.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IVariable.java deleted file mode 100644 index 3b623da..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IVariable.java +++ /dev/null
@@ -1,74 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * A variable on a virtual machine - local variable, argument, - * or field of an object. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ - -public interface IVariable { - - /** - * Returns the (declared) type of this variable. - * - * @return type - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - IType getType() throws CoreException; - - - /** - * Returns the current value of this variable. - * - * @return value - * @exception EvaluationException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li></ul> - */ - IValue getValue() throws CoreException; - - /** - * Sets the value of this variable. - * - * @param value the new value - * @exception CoreException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * <li>The given value is of an uncompatible type, or did not - * orginate from the same virtual machine as this variable.</li> - * </ul> - */ - void setValue(IValue vale) throws CoreException; - - /** - * Returns the name of this variable. - * - * @return the name of this variable - * @exception CoreException if this method fails. Reasons include: - * <ul><li>Failure communicating with the VM. The exception's - * status code contains the underlying exception responsible for - * the failure.</li> - * </ul> - */ - String getName() throws CoreException; -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IVirtualMachine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IVirtualMachine.java deleted file mode 100644 index 76fbc7d..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/IVirtualMachine.java +++ /dev/null
@@ -1,130 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; - -/** - * The virtual machine on which an evaluation is being - * performed. - * <p> - * Clients are intended to implement this interface. - * </p> - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ - -public interface IVirtualMachine { - - /** - * Creates and returns a new boolean value that can be - * used for comparing and setting values on the target VM. - * - * @param value boolean value to create - * @return value - */ - IValue newValue(boolean value); - - /** - * Creates and returns a new byte value that can be - * used for comparing and setting values on the target VM. - * - * @param value byte value to create - * @return value - */ - IValue newValue(byte value); - - /** - * Creates and returns a new char value that can be - * used for comparing and setting values on the target VM. - * - * @param value char value to create - * @return value - */ - IValue newValue(char value); - - /** - * Creates and returns a new double value that can be - * used for comparing and setting values on the target VM. - * - * @param value double value to create - * @return value - */ - IValue newValue(double value); - - /** - * Creates and returns a new float value that can be - * used for comparing and setting values on the target VM. - * - * @param value float value to create - * @return value - */ - IValue newValue(float value); - - /** - * Creates and returns a new int value that can be - * used for comparing and setting values on the target VM. - * - * @param value int value to create - * @return value - */ - IValue newValue(int value); - - /** - * Creates and returns a new long value that can be - * used for comparing and setting values on the target VM. - * - * @param value long value to create - * @return value - */ - IValue newValue(long value); - - /** - * Creates and returns a new short value that can be - * used for comparing and setting values on the target VM. - * - * @param value short value to create - * @return value - */ - IValue newValue(short value); - - /** - * Creates and returns a new String object that can be - * used for comparing and setting values on the target VM. - * - * @param value String value to create - * @return value - */ - IObject newValue(String value); - - /** - * Returns the loaded types (class or interfaces) on the target - * VM with the given fully qualified name. - * - * @param name fully qualified type name, for example, - * <code>java.lang.String</code> - * @return type - */ - IType[]classesByName(String qualifiedName) throws CoreException; - - /** - * Returns the value representing a null value in the target VM. - * - * @return null value - */ - IValue nullValue(); - - /** - * Returns the value representing a void value in the target VM. - * - * @return void value - */ - IValue voidValue(); -} -
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/JavaObjectRuntimeContext.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/JavaObjectRuntimeContext.java deleted file mode 100644 index 64ee305..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/JavaObjectRuntimeContext.java +++ /dev/null
@@ -1,93 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.debug.core.IJavaDebugTarget; -import org.eclipse.jdt.debug.core.IJavaObject; -import org.eclipse.jdt.debug.core.IJavaThread; - -public class JavaObjectRuntimeContext implements IRuntimeContext { - - /** - * <code>this</code> object or this context. - */ - private IJavaObject fThisObject; - - /** - * The project for this context. - */ - private IJavaProject fJavaProject; - - /** - * The thread for this context. - */ - private IJavaThread fThread; - - /** - * ObjectValueRuntimeContext constructor. - * - * @param thisObject <code>this</code> object of this context. - * @param javaProject the project for this context. - * @param thread the thread for this context. - */ - public JavaObjectRuntimeContext(IJavaObject thisObject, IJavaProject javaProject, IJavaThread thread) { - fThisObject= thisObject; - fJavaProject= javaProject; - fThread= thread; - } - - /** - * @see IRuntimeContext#getVM() - */ - public IVirtualMachine getVM() { - return new EvaluationVM((IJavaDebugTarget)fThisObject.getDebugTarget()); - } - - /** - * @see IRuntimeContext#getThis() - */ - public IObject getThis() throws CoreException { - return (IObject)EvaluationObject.createValue(fThisObject); - } - - /** - * @see IRuntimeContext#getReceivingType() - */ - public IClassType getReceivingType() throws CoreException { - return (IClassType)getThis().getType(); - } - - /** - * @see IRuntimeContext#getLocals() - */ - public IVariable[] getLocals() throws CoreException { - return new IVariable[0]; - } - - /** - * @see IRuntimeContext#getProject() - */ - public IJavaProject getProject() { - return fJavaProject; - } - - /** - * @see IRuntimeContext#getThread() - */ - public IThread getThread() { - return new EvaluationThread(fThread); - } - - /** - * @see IRuntimeContext#isConstructor() - */ - public boolean isConstructor() throws CoreException { - return false; - } - -}
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/RuntimeContext.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/RuntimeContext.java deleted file mode 100644 index d833e21..0000000 --- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/model/RuntimeContext.java +++ /dev/null
@@ -1,141 +0,0 @@ -package org.eclipse.jdt.internal.debug.eval.model; - -/* - * (c) Copyright IBM Corp. 2002. - * All Rights Reserved. - */ - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.debug.core.IJavaClassType; -import org.eclipse.jdt.debug.core.IJavaDebugTarget; -import org.eclipse.jdt.debug.core.IJavaObject; -import org.eclipse.jdt.debug.core.IJavaStackFrame; -import org.eclipse.jdt.debug.core.IJavaThread; -import org.eclipse.jdt.debug.core.IJavaVariable; - -/** - * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to - * change significantly before reaching stability. It is being made available at this early stage to solicit feedback - * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken - * (repeatedly) as the API evolves. - * </p> - */ -public class RuntimeContext implements IRuntimeContext { - - /** - * Java project context - */ - private IJavaProject fProject; - - /** - * Stack frame context - */ - private IJavaStackFrame fFrame; - - /** - * Creates a runtime context for the given java project and - * stack frame. - * - * @param project Java project context used to compile expressions in - * @param frame stack frame used to define locals and receiving type - * context - * @return a new runtime context - */ - public RuntimeContext(IJavaProject project, IJavaStackFrame frame) { - setProject(project); - setFrame(frame); - } - - /** - * @see IRuntimeContext#getVM() - */ - public IVirtualMachine getVM() { - return new EvaluationVM((IJavaDebugTarget)getFrame().getDebugTarget()); - } - - /** - * @see IRuntimeContext#getThis() - */ - public IObject getThis() throws CoreException { - IJavaObject jo = getFrame().getThis(); - if (jo != null) { - return new EvaluationObject(getFrame().getThis()); - } - return null; - } - - /** - * @see IRuntimeContext#getReceivingType() - */ - public IClassType getReceivingType() throws CoreException { - IObject rec = getThis(); - if (rec != null) { - return (IClassType)rec.getType(); - } - IJavaClassType type = getFrame().getDeclaringType(); - return (IClassType)EvaluationType.createType(type); - } - - /** - * @see IRuntimeContext#getLocals() - */ - public IVariable[] getLocals() throws CoreException { - IJavaVariable[] locals = getFrame().getLocalVariables(); - IVariable[] vars = new IVariable[locals.length]; - for (int i = 0; i < locals.length; i++) { - vars[i] = new EvaluationVariable(locals[i]); - } - return vars; - } - - /** - * @see IRuntimeContext#getProject() - */ - public IJavaProject getProject() { - return fProject; - } - - /** - * Sets the project context used to compile expressions - * - * @param project the project context used to compile expressions - */ - private void setProject(IJavaProject project) { - fProject = project; - } - - /** - * Sets the stack frame context used to compile/run expressions - * - * @param frame the stack frame context used to compile/run expressions - */ - protected IJavaStackFrame getFrame() { - return fFrame; - } - - /** - * Sets the stack frame context used to compile/run expressions - * - * @param frame the stack frame context used to compile/run expressions - */ - private void setFrame(IJavaStackFrame frame) { - fFrame = frame; - } - - /** - * @see IRuntimeContext#getThread() - */ - public IThread getThread() { - return new EvaluationThread((IJavaThread)getFrame().getThread()); - } - - /** - * @see IRuntimeContext#isConstructor() - */ - public boolean isConstructor() throws CoreException { - return getFrame().isConstructor(); - } - -} -
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaLineBreakpoint.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaLineBreakpoint.java index 4b0be70..ae077bb 100644 --- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaLineBreakpoint.java +++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaLineBreakpoint.java
@@ -15,6 +15,7 @@ import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.core.model.IValue; @@ -401,7 +402,7 @@ return !suspendForEvent(event, thread); } fSuspendEvents.put(thread, event); - engine.evaluateExpression(fCompiledExpression, frame, listener); + engine.evaluateExpression(fCompiledExpression, frame, listener, DebugEvent.EVALUATION, false); // Do not resume. When the evaluation returns, the evaluation listener // will resume the thread if necessary or update for suspension.
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIObjectValue.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIObjectValue.java index 56fbe75..9f13087 100644 --- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIObjectValue.java +++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIObjectValue.java
@@ -20,6 +20,7 @@ import com.sun.jdi.ClassType; import com.sun.jdi.Field; +import com.sun.jdi.InterfaceType; import com.sun.jdi.Method; import com.sun.jdi.ObjectReference; import com.sun.jdi.ReferenceType; @@ -118,25 +119,52 @@ /** * @see IJavaObject#getField(String, String) */ - public IJavaFieldVariable getField(String name, String typeSignature) throws DebugException { + public IJavaFieldVariable getField(String name, String declaringTypeSignature) throws DebugException { ReferenceType ref= getUnderlyingReferenceType(); try { Field field= null, enclosingThis= null, fieldTmp= null; - Iterator fields= ref.fields().iterator(); + Iterator fields= ref.allFields().iterator(); while (fields.hasNext()) { fieldTmp = (Field)fields.next(); - if (name.equals(fieldTmp.name()) && typeSignature.equals(fieldTmp.declaringType().signature())) { + if (name.equals(fieldTmp.name()) && declaringTypeSignature.equals(fieldTmp.declaringType().signature())) { field= fieldTmp; break; } - if (fieldTmp.name().startsWith("this$")) { - enclosingThis= fieldTmp; - } } if (field != null) { return new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), field, getUnderlyingObject()); - } else { - return ((JDIObjectValue)(new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), enclosingThis, getUnderlyingObject())).getValue()).getField(name, typeSignature); + } + } catch (RuntimeException e) { + targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.getString("JDIObjectValue.exception_retrieving_field"), new String[]{e.toString()}), e); //$NON-NLS-1$ + } + // it is possible to return null + return null; + } + + /** + * Returns a variable representing the field in this object + * with the given name, or <code>null</code> if there is no + * field with the given name, or the name is ambiguous. + * + * @param name field name + * @param superClassLevel the level of the desired field in the + * hierarchy. Level 0 returns the field from the current type, level 1 from the + * super type, etc. + * @return the variable representing the field, or <code>null</code> + * @exception DebugException if this method fails. Reasons include: + * <ul><li>Failure communicating with the VM. The DebugException's + * status code contains the underlying exception responsible for + * the failure.</li> + */ + public IJavaFieldVariable getField(String name, int superClassLevel) throws DebugException { + ReferenceType ref= getUnderlyingReferenceType(); + try { + for (int i= 0 ; i < superClassLevel; i++) { + ref= ((ClassType)ref).superclass(); + } + Field field = ref.fieldByName(name); + if (field != null) { + return new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), field, getUnderlyingObject()); } } catch (RuntimeException e) { targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.getString("JDIObjectValue.exception_retrieving_field"), new String[]{e.toString()}), e); //$NON-NLS-1$ @@ -165,5 +193,34 @@ } + /** + * Return the enclosing object of this object at the specified level. + * Level 0 returns the object, level 1 returns the enclosing object, etc. + */ + public IJavaObject getEnclosingObject(int enclosingLevel) throws DebugException { + JDIObjectValue res= this; + for (int i= 0; i < enclosingLevel; i ++) { + ReferenceType ref= res.getUnderlyingReferenceType(); + try { + Field enclosingThis= null, fieldTmp= null; + Iterator fields= ref.fields().iterator(); + while (fields.hasNext()) { + fieldTmp = (Field)fields.next(); + if (fieldTmp.name().startsWith("this$")) { + enclosingThis= fieldTmp; + } + } + if (enclosingThis != null) { + res= (JDIObjectValue)(new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), enclosingThis, res.getUnderlyingObject())).getValue(); + } else { + // it is possible to return null + return null; + } + } catch (RuntimeException e) { + targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.getString("JDIObjectValue.exception_retrieving_field"), new String[]{e.toString()}), e); //$NON-NLS-1$ + } + } + return res; + } }