merge with HEAD
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDetailFormattersManager.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDetailFormattersManager.java
index ea785f2..0ff5694 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDetailFormattersManager.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDetailFormattersManager.java
@@ -394,8 +394,9 @@
 		int nesting = Signature.getArrayCount(signature);
 		if (nesting > 1) {
 			// for nested primitive arrays, print everything
-			if (Signature.getElementType(signature).length() == 1) {
-				// return null so we get to "valueToString(IJavaValue)"
+			String sig = Signature.getElementType(signature);
+			if (sig.length() == 1 || "Ljava/lang/String;".equals(sig)) { //$NON-NLS-1$
+				// return null so we get to "valueToString(IJavaValue)" for primitive and string types
 				return null;
 			}
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/AddVMDialog.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/AddVMDialog.java
index 6f9ad5a..9ebc5d2 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/AddVMDialog.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/AddVMDialog.java
@@ -39,6 +39,7 @@
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -521,6 +522,26 @@
          } 
          return section;
     }
+    
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
+	 */
+	protected Point getInitialSize() {
+		IDialogSettings settings = getDialogBoundsSettings();
+		if(settings != null) {
+			try {
+				int width = settings.getInt("DIALOG_WIDTH"); //$NON-NLS-1$
+				int height = settings.getInt("DIALOG_HEIGHT"); //$NON-NLS-1$
+				if(width > 0 & height > 0) {
+					return new Point(width, height);
+				}
+			}
+			catch (NumberFormatException nfe) {
+				return new Point(500, 500);
+			}
+		}
+		return new Point(500, 500);
+	}
 
 	protected void setButtonLayoutData(Button button) {
 		super.setButtonLayoutData(button);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
index b8d0f80..59b2277 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
@@ -31,6 +31,7 @@
 import org.eclipse.jdt.launching.VMStandin;
 import org.eclipse.jdt.ui.ISharedImages;
 import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
@@ -57,6 +58,7 @@
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Cursor;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
@@ -688,7 +690,22 @@
 		};
 		
 		try {
-            ProgressMonitorDialog progress = new ProgressMonitorDialog(getShell());
+            ProgressMonitorDialog progress = new ProgressMonitorDialog(getShell()) {
+                /*
+                 * Overidden createCancelButton to replace Cancel label with Stop label
+                 * More accurately reflects action taken when button pressed.
+                 * Bug [162902]
+                 */
+                protected void createCancelButton(Composite parent) {
+                    cancel = createButton(parent, IDialogConstants.CANCEL_ID,
+                            IDialogConstants.STOP_LABEL, true);
+                    if (arrowCursor == null) {
+            			arrowCursor = new Cursor(cancel.getDisplay(), SWT.CURSOR_ARROW);
+            		}
+                    cancel.setCursor(arrowCursor);
+                    setOperationCancelButtonEnabled(enableCancelButton);
+                }
+            };
             progress.run(true, true, r);
 		} catch (InvocationTargetException e) {
 			JDIDebugUIPlugin.log(e);
diff --git a/org.eclipse.jdt.debug/buildnotes_jdt-debug.html b/org.eclipse.jdt.debug/buildnotes_jdt-debug.html
index c125b67..771068a 100644
--- a/org.eclipse.jdt.debug/buildnotes_jdt-debug.html
+++ b/org.eclipse.jdt.debug/buildnotes_jdt-debug.html
@@ -19,7 +19,14 @@
   <li>added <code>IJavaDebugUIConstants.PREF_ALLINSTANCES_MAX_COUNT</code> and <code>IJavaDebugUIConstants.PREF_ALLREFERENCES_MAX_COUNT</code></li>
 </ul>
 
+<h2>Nov 6, 2006</h2>
+<h3>Problem Reports Fixed</h3>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163463">163463</a>: Template method call needed in JDIDebugTarget.createThread<br>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162902">162902</a>: [jres] &quot;cancel&quot; button should probably be &quot;stop&quot; for JRE search<br>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162899">162899</a>: [jres] Initial size of &quot;add jre dialog&quot; is too narrow<br>
+
 <h2>3.3 Milestone 3 - Nov 3, 2006</h2>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153913">153913</a>: step over action becomes disabled<br>
 <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161243">161243</a>: details for multi-dimensional arrays<br>
 <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162366">162366</a>: org.eclipse.jdt.debug.tests.testSimpleStepFilter/testInactiveStepFilter depend on VM behavior<br>
 <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162675">162675</a>: Javadoc warnings in N20061028-0010<br>
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDINullValue.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDINullValue.java
index 9fe5d01..70a79e8 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDINullValue.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDINullValue.java
@@ -19,7 +19,7 @@
 /**
  * Represents a value of "null"
  */
-public class JDINullValue extends JDIValue {
+public class JDINullValue extends JDIObjectValue {
 	
 	
 	public JDINullValue(JDIDebugTarget target) {
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 796924f..3934623 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
@@ -271,7 +271,7 @@
 				if (enclosingThis != null) {
 				    JDIDebugTarget debugTarget = (JDIDebugTarget)getDebugTarget();
 				    JDIFieldVariable fieldVariable = new JDIFieldVariable(debugTarget, enclosingThis, res.getUnderlyingObject());
-				    res= (JDIObjectValue)fieldVariable.getValue();
+				    res = (JDIObjectValue)fieldVariable.getValue();
 				} else {
 				    // it is possible to return null
 				    return null;