<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="Author" content="IBM">
   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
   <title>Java Debug Release Notes</title>
</head>
<body>
<h1> Eclipse 3.2 Java Debug Build Notes&nbsp;</h1>

<h2>October 18, 2005</h2>
<h3>Enhancements</h3>
<ol>
  <li> <code>IVMInstallChangedListener</code> has been enhanced to provide change 
    notification for VM arguments via a property change event. A new property 
    identifier, <code>PROPERTY_VM_ARGUMENTS</code>, has been added to indicate 
    VM arguments have changed.</li>
  <li>Property tests have been added to the core Java debug plug-in (org.eclipse.jdt.debug), 
    to support launch short enablement expressions. By pushing common property 
    tests down to the core Java debug plug-in, more launch shortcut enablement 
    expressions will run even though their plug-in may noe be loaded (as the Java 
    debug plug-in is loaded earlier on), resulting in fewew choices in the run/debug 
    cascade menus. Property tests have been added for the following. 
    <ul>
      <li>hasMethod - accepts two arguments: method name and method signature 
        in JLS format, for example &quot;main, ([QString;)V&quot; or &quot;main, 
        ([Ljava/lang/String;)V&quot;</li>
      <li>hasSuperClass - expected value specifies fully qualified type name of 
        a super class (does not consider interfaces)</li>
      <li>hasImport - expected value specifies fully name of import to match in 
        JSL format, for example &quot;java.io.File&quot; or &quot;java.io.*&quot;. 
        Only works on compilation units.</li>
      <li>hasSwtOnBuildPath - whether the associated element's build path contains 
        a reference to &quot;swt.jar&quot; or the &quot;org.eclipse.swt&quot; 
        plug-in</li>
      <li>hasItemOnBuildPath - expected value specifies a substring to match. 
        Returns true when the associated element's build path contains an entry 
        containing the given substring.</li>
      <li>matchesJavaFileExtension - returns true if the associated element has 
        a resource adapter that has a .class or .java file extension.</li>
      <li>matchesContentType - expected value describes a content type as desribed 
        by the IContentTypeManager</li>
      <li>hasProjectNature - expected value is a project nature</li>
      <li>implementsInterface - expected value is a fully qualified name of an 
        interface </li>
    </ul>
  </li>
</ol>
<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112455">112455</a>: Change JavaElementPropertyTester to not use JavaModelUtil.getAllSuperTypes<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104104">104104</a>: Make 'hasMainType' and 'isApplet' property tests part of launching plug-in<br>

<h2>October 11, 2005</h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109358">109358</a>: Default installed JRE has no Javadoc Location<br>

<h2>October 4, 2005</h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111136">111136</a>: JavaStackTraceHyperlink broken.<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111256">111256</a>: multiple hyperlinks on the same line not painted correctly<br>

<h2>September 27, 2005</h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110191">110191</a>: ArrayIndexOutOfBoundsException in ExpressionInformationControl<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110021">110021</a>: Java 5 inconsistency<br>

<h2>September 20, 2005</h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99416">99416</a>: Evaluation in context of superclass fails to resolve instvar in subclass<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103026">103026</a>: When detected a 1.5 JDK on a fresh workspace as a default the default compiler complaince should be switch to 5.0<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109392">109392</a>: JavaRuntime.detectDefaultVM changes my options<br>

<h2>September 13, 2005</h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108426">108426</a>: In debug mode, when hoovering over constants, their value should be showed<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106682">106682</a>: Java debug code assist inconsistent<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108498">108498</a>: Toggle watchpoint for field in external source<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108505">108505</a>: refactor debug 'open type' actions<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108640">108640</a>: jdi model presentation missing dispose method<br>

<h2>Aug 23, 2005</h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29565">29565</a>: Working Directory UI<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86066">86066</a>: testJavaVersion() failure on mac<br>

<h2>Aug 16, 2005</h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106748">106748</a>: details fail for interface defined in the default package<br>

<h2>Aug 10, 2005</h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106479">106479</a>: Exception Processing async thread queue<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106492">106492</a>: NPE on console during debug session<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106489">106489</a>: CCE from watch Expression<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106660">106660</a>: Array details for type in default package fails<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106665">106665</a>: array details fail for interface types<br>

<h2>Aug 8, 2005</h2>
<h3>API Changes</h3>
<ol>
  <li> 
    <h4>API contract changes to IJavaReferenceType</h4>
  </li>
  <blockquote> 
    <h4><strong>What is affected:</strong> Clients that call <code>IJavaReferenceType.getClassLoaderObject()</code>.</h4>
    <p><strong>Description:</strong> In Eclipse 3.1, the method <code>org.eclipse.jdt.debug.core.IJavaReferenceType.getClassLoaderObject()</code> 
      was added to <code>IJavaReferenceType</code>. The method was not specified 
      to return <code>null</code>, but could. In Eclipse 3.2, the specification 
      has been updated to indicate that <code>null</code> is a valid return value. 
      The behavior of the method has not changed, but callers should be aware 
      that <code>null</code> can be returned and should add appropriate checks.</p>
    <p><strong>Action required:</strong> Clients calling <code>IJavaReferenceType.getClassLoaderObject()</code> 
      should be modified to handle <code>null</code> as a return value.</p>
  </blockquote>
</ol>
<h3>Enhancements</h3>
<ol>
  <li>Evaluations in the Java debugger are now supported in the context of array 
    objects. The user may select a variable in the Variables View that references 
    an array and enter an expression in the details area using <code>this</code> 
    to refer to the array - for example, <code>&quot;this.length</code>&quot;. 
    Code assist also works for arrays. The API for evaluations has not changed 
    although the behavior has. In releases prior to 3.2, <code>IAstEvaluationEngine</code> 
    used to throw an exception when an evaluation was attempted for a receiver 
    object that was an array. In 3.2, the evaluation proceeds.</li>
  <li>The UI for editing a JREs libraries has been improved. In 3.1 and earlier, 
    users were required to uncheck the button labelled '<code>Use default libraries</code>' 
    in order modify library settings. This button has been removed and the function 
    has been replaced with a '<code>Restore Defaults</code>' button, which is 
    a more common style in the Eclipse UI.</li>
</ol>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105965">105965</a>: IJavaReferenceType.getClassLoaderObejct() can return null<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25362">25362</a>: Cannot evaluate in the context of an array<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106091">106091</a>: Code assist for eval in context of an array<br> 
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106243">106243</a>: clear detail formatter cache when 'max detail length' pref changes<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106361">106361</a>: NPE when adding a new JRE<br>

<h2>Aug 2, 2005</h2>
<h3>Enhancements</h3>
<ol>
  <li>Added NL support for images.</li>
</ol>
<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105255">105255</a>: [BIDI] need to add $nl$/ to icon paths for reversed icons<br>
<h2>July 26, 2005 </h2>
<h3>
Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103700">103700</a>: ClassCastException when evaluating assigment of array of interfaces<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101075">101075</a>: Cannot assign array type to local variable of type Object.<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98141">98141</a>: Evaluation in context of interface fails<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103326">103326</a>: NPE executing step into command<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81045">81045</a>: ClassNotLoadedException when trying to change a value<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104654">104654</a>: Breakpoint on label is not honoured<br>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102427">102427</a>: Cannot inspect/display static import methods<br>

</body>
</html>