Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4879871

REGRESSION: javap no longer finds classes in rt.jar without a -classpath option

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P3 P3
    • None
    • 1.4.2
    • tools
    • x86
    • windows_xp



      Name: rmT116609 Date: 06/17/2003


      FULL PRODUCT VERSION :
      java version "1.4.2-beta"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b19)
      Java HotSpot(TM) Client VM (build 1.4.2-beta-b19, mixed mode)

      FULL OS VERSION :
      Microsoft Windows XP [Version 5.1.2600]

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      * environment with or without JAVA_HOME=c:\java.
      * I have the JDK installed in c:\java.
      * My PATH picks up javap from c:\java\bin.

      A DESCRIPTION OF THE PROBLEM :
      Two problems

      1. The plain command

        javap java.lang.Object

      (no explicit -classpath option) no longer works in 1.4.2-beta. It used to work in all versions upto and including 1.4.1_02.

      I have to specify a classpath of $JAVA_HOME/jre/lib/rt.jar for it to work.

      2. Even if I do specify this classpath explicitly, it no longer prints out the flag bits or the inner classes.

      For instance,

        javap java.util.Map

      used to print out flags like "ACC_SUPER not set", and also the contents of the nested interface Map.Entry. In 1.4.2-beta, it no longer prints these out.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1. Run 'javap java.util.Map' from the command line

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Javap output:

      Compiled from Map.java
      public interface java.util.Map
          /* ACC_SUPER bit NOT set */
      {
          public abstract int size();
          public abstract boolean isEmpty();
          public abstract boolean containsKey(java.lang.Object);
          public abstract boolean containsValue(java.lang.Object);
          public abstract java.lang.Object get(java.lang.Object);
          public abstract java.lang.Object put(java.lang.Object, java.lang.Object);
          public abstract java.lang.Object remove(java.lang.Object);
          public abstract void putAll(java.util.Map);
          public abstract void clear();
          public abstract java.util.Set keySet();
          public abstract java.util.Collection values();
          public abstract java.util.Set entrySet();
          public abstract boolean equals(java.lang.Object);
          public abstract int hashCode();
          public static interface java.util.Map. Entry
          /* ACC_SUPER bit NOT set */
      {
              public abstract java.lang.Object getKey();
              public abstract java.lang.Object getValue();
              public abstract java.lang.Object setValue(java.lang.Object);
              public abstract boolean equals(java.lang.Object);
              public abstract int hashCode();
          }
      }
      ACTUAL -
      1. Without the -classpath option:

         ERROR:could not find java.util.Map.

      2. With the -classpath option:

      Compiled from "Map.java"
      interface java.util.Map{
          public abstract int hashCode();
          public abstract int size();
          public abstract void clear();
          public abstract boolean isEmpty();
          public abstract boolean containsKey(java.lang.Object);
          public abstract boolean containsValue(java.lang.Object);
          public abstract boolean equals(java.lang.Object);
          public abstract java.util.Collection values();
          public abstract void putAll(java.util.Map);
          public abstract java.util.Set entrySet();
          public abstract java.util.Set keySet();
          public abstract java.lang.Object get(java.lang.Object);
          public abstract java.lang.Object remove(java.lang.Object);
          public abstract java.lang.Object put(java.lang.Object,java.lang.Object);
      }

      Notice:
      (a) inner class not printed.
      (b) flags not printed
      (c) formatting slightly screwed up ({ on the same line as the classname, and
      no spacing before the {).

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      ERROR:could not find java.util.Map.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      CUSTOMER SUBMITTED WORKAROUND :
      Specify -classpath $JAVA_HOME/jre/lib/rt.jar to at least get the top-level class.

      No workaround for displaying the nested class.

      Release Regression From : 1.4.1_03
      The above release value was the last known release where this
      bug was known to work. Since then there has been a regression.

      (Review ID: 188240)
      ======================================================================

            darcy Joe Darcy
            rmandalasunw Ranjith Mandala (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: