8005252: pack200 should support MethodParameters
authorksrini
Mon, 14 Jan 2013 15:46:54 -0800
changeset 15261 c5b882836677
parent 15260 7af2d7a87806
child 15262 eba81418067a
8005252: pack200 should support MethodParameters Reviewed-by: jrose
jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java
jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java
jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java
jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java
jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java
jdk/src/share/native/com/sun/java/util/jar/pack/bands.cpp
jdk/src/share/native/com/sun/java/util/jar/pack/bands.h
jdk/src/share/native/com/sun/java/util/jar/pack/constants.h
jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp
jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp
jdk/test/ProblemList.txt
jdk/test/tools/pack200/AttributeTests.java
jdk/test/tools/pack200/pack200-verifier/src/xmlkit/ClassReader.java
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -177,6 +177,7 @@
         define(sd, ATTR_CONTEXT_METHOD, "Synthetic", "");
         define(sd, ATTR_CONTEXT_METHOD, "Deprecated", "");
         define(sd, ATTR_CONTEXT_METHOD, "Exceptions", "NH[RCH]");
+        define(sd, ATTR_CONTEXT_METHOD, "MethodParameters", "NB[RUNHI]");
         //define(sd, ATTR_CONTEXT_METHOD, "Code", "HHNI[B]NH[PHPOHPOHRCNH]NH[RUHNI[B]]");
 
         define(sd, ATTR_CONTEXT_CODE, "StackMapTable",
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1502,6 +1502,10 @@
     CPRefBand method_Exceptions_RC = method_attr_bands.newCPRefBand("method_Exceptions_RC", CONSTANT_Class);
     CPRefBand method_Signature_RS = method_attr_bands.newCPRefBand("method_Signature_RS", CONSTANT_Signature);
     MultiBand method_metadata_bands = method_attr_bands.newMultiBand("(method_metadata_bands)", UNSIGNED5);
+    // band for predefine method parameters
+    IntBand  method_MethodParameters_NB = method_attr_bands.newIntBand("method_MethodParameters_NB", BYTE1);
+    CPRefBand method_MethodParameters_name_RUN = method_attr_bands.newCPRefBand("method_MethodParameters_name_RUN", UNSIGNED5, CONSTANT_Utf8, NULL_IS_OK);
+    IntBand   method_MethodParameters_flag_I = method_attr_bands.newIntBand("method_MethodParameters_flag_I");
 
     MultiBand class_attr_bands = class_bands.newMultiBand("(class_attr_bands)", UNSIGNED5);
     IntBand class_flags_hi = class_attr_bands.newIntBand("class_flags_hi");
@@ -1768,6 +1772,13 @@
                                method_Exceptions_RC
                            },
                            "Exceptions", "NH[RCH]");
+        predefineAttribute(METHOD_ATTR_MethodParameters, ATTR_CONTEXT_METHOD,
+                           new Band[]{
+                                method_MethodParameters_NB,
+                                method_MethodParameters_name_RUN,
+                                method_MethodParameters_flag_I
+                           },
+                           "MethodParameters", "NB[RUNHI]");
         assert(attrCodeEmpty == Package.attrCodeEmpty);
         predefineAttribute(X_ATTR_Signature, ATTR_CONTEXT_METHOD,
                            new Band[] { method_Signature_RS },
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -73,6 +73,9 @@
     public final static Package.Version JAVA7_PACKAGE_VERSION =
             Package.Version.of(170, 1);
 
+    public final static Package.Version JAVA8_PACKAGE_VERSION =
+            Package.Version.of(171, 0);
+
     // upper limit, should point to the latest class version
     public final static Package.Version JAVA_MAX_CLASS_VERSION =
             JAVA8_MAX_CLASS_VERSION;
@@ -158,6 +161,7 @@
         METHOD_ATTR_RuntimeInvisibleParameterAnnotations = 24,
         CLASS_ATTR_ClassFile_version = 24,
         METHOD_ATTR_AnnotationDefault = 25,
+        METHOD_ATTR_MethodParameters = 26,
         CODE_ATTR_StackMapTable = 0,  // new in Java 6
         CODE_ATTR_LineNumberTable = 1,
         CODE_ATTR_LocalVariableTable = 2,
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -242,6 +242,7 @@
     void checkArchiveVersion() throws IOException {
         Package.Version versionFound = null;
         for (Package.Version v : new Package.Version[] {
+                JAVA8_PACKAGE_VERSION,
                 JAVA7_PACKAGE_VERSION,
                 JAVA6_PACKAGE_VERSION,
                 JAVA5_PACKAGE_VERSION
@@ -252,7 +253,9 @@
             }
         }
         if (versionFound == null) {
-            String expVer = JAVA7_PACKAGE_VERSION.toString()
+            String expVer =   JAVA8_PACKAGE_VERSION.toString()
+                            + "OR"
+                            + JAVA7_PACKAGE_VERSION.toString()
                             + " OR "
                             + JAVA6_PACKAGE_VERSION.toString()
                             + " OR "
@@ -1516,6 +1519,9 @@
         //        method_metadata_bands
         //        *method_Exceptions_N :UNSIGNED5
         //        *method_Exceptions_RC :UNSIGNED5  (cp_Class)
+        //        *method_MethodParameters_NB: BYTE1
+        //        *method_MethodParameters_RUN: UNSIGNED5 (cp_Utf8)
+        //        *method_MethodParameters_I:  UNSIGNED5 (flag)
         //
         //  code_attr_bands:
         //        *code_flags :UNSIGNED5
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -142,12 +142,14 @@
         } else if (highV.equals(JAVA6_MAX_CLASS_VERSION) ||
                 (highV.equals(JAVA7_MAX_CLASS_VERSION) && !pkg.cp.haveExtraTags())) {
             // force down the package version if we have jdk7 classes without
-            // any Indy references, this is because jdk7 class file (52.0) without
-            // Indy is identical to jdk6 class file (51.0).
+            // any Indy references, this is because jdk7 class file (51.0) without
+            // Indy is identical to jdk6 class file (50.0).
             packageVersion = JAVA6_PACKAGE_VERSION;
+        } else if (highV.equals(JAVA7_MAX_CLASS_VERSION)) {
+            packageVersion = JAVA7_PACKAGE_VERSION;
         } else {
             // Normal case.  Use the newest archive format, when available
-            packageVersion = JAVA7_PACKAGE_VERSION;
+            packageVersion = JAVA8_PACKAGE_VERSION;
         }
 
         if (verbose > 0) {
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/bands.cpp	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/bands.cpp	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -352,6 +352,9 @@
   BAND_INIT(method_Exceptions_RC, UNSIGNED5_spec, INDEX(CONSTANT_Class)),
   BAND_INIT(method_Signature_RS, UNSIGNED5_spec, INDEX(CONSTANT_Signature)),
   BAND_INIT(method_metadata_bands, -1, -1),
+  BAND_INIT(method_MethodParameters_NB, BYTE1_spec, 0),
+  BAND_INIT(method_MethodParameters_name_RUN, UNSIGNED5_spec, NULL_OR_INDEX(CONSTANT_Utf8)),
+  BAND_INIT(method_MethodParameters_flag_I, UNSIGNED5_spec, 0),
   BAND_INIT(method_attr_bands, -1, -1),
   BAND_INIT(class_flags_hi, UNSIGNED5_spec, 0),
   BAND_INIT(class_flags_lo, UNSIGNED5_spec, 0),
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/bands.h	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/bands.h	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -212,6 +212,9 @@
     e_method_Exceptions_RC,
     e_method_Signature_RS,
     e_method_metadata_bands,
+    e_method_MethodParameters_NB,
+    e_method_MethodParameters_name_RUN,
+    e_method_MethodParameters_flag_I,
     e_method_attr_bands,
 
     e_class_flags_hi,
@@ -388,6 +391,9 @@
 #define method_Exceptions_N all_bands[e_method_Exceptions_N]
 #define method_Exceptions_RC all_bands[e_method_Exceptions_RC]
 #define method_Signature_RS all_bands[e_method_Signature_RS]
+#define method_MethodParameters_NB all_bands[e_method_MethodParameters_NB]
+#define method_MethodParameters_name_RUN all_bands[e_method_MethodParameters_name_RUN]
+#define method_MethodParameters_flag_I all_bands[e_method_MethodParameters_flag_I]
 #define method_attr_bands all_bands[e_method_attr_bands]
 #define class_flags_hi all_bands[e_class_flags_hi]
 #define class_flags_lo all_bands[e_class_flags_lo]
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/constants.h	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/constants.h	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -59,6 +59,9 @@
 #define JAVA7_PACKAGE_MAJOR_VERSION 170
 #define JAVA7_PACKAGE_MINOR_VERSION 1
 
+#define JAVA8_PACKAGE_MAJOR_VERSION 171
+#define JAVA8_PACKAGE_MINOR_VERSION 0
+
 // magic number for gzip streams (for processing pack200-gzip data)
 #define GZIP_MAGIC      0x1F8B0800
 #define GZIP_MAGIC_MASK 0xFFFFFF00  // last byte is variable "flg" field
@@ -120,6 +123,7 @@
     METHOD_ATTR_RuntimeVisibleParameterAnnotations   = 23,
     METHOD_ATTR_RuntimeInvisibleParameterAnnotations = 24,
     METHOD_ATTR_AnnotationDefault                    = 25,
+    METHOD_ATTR_MethodParameters                     = 26,
     CODE_ATTR_StackMapTable          = 0,
     CODE_ATTR_LineNumberTable        = 1,
     CODE_ATTR_LocalVariableTable     = 2,
@@ -160,6 +164,7 @@
         F(METHOD_ATTR_RuntimeVisibleParameterAnnotations,RuntimeVisibleParameterAnnotations) \
         F(METHOD_ATTR_RuntimeInvisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations) \
         F(METHOD_ATTR_AnnotationDefault,AnnotationDefault) \
+        F(METHOD_ATTR_MethodParameters,MethodParameters) \
           /*(end)*/
 #define CODE_ATTR_DO(F) \
         F(CODE_ATTR_StackMapTable,StackMapTable) \
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -71,7 +71,7 @@
 
 unpacker* unpacker::non_mt_current = null;
 unpacker* unpacker::current() {
-  assert(uThread == THREAD_SELF);
+  //assert(uThread == THREAD_SELF);
   return non_mt_current;
 }
 static void set_current_unpacker(unpacker* u) {
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -648,13 +648,14 @@
   majver = hdr.getInt();
   hdrVals += 2;
 
-  int majmin[3][2] = {
+  int majmin[4][2] = {
       {JAVA5_PACKAGE_MAJOR_VERSION, JAVA5_PACKAGE_MINOR_VERSION},
       {JAVA6_PACKAGE_MAJOR_VERSION, JAVA6_PACKAGE_MINOR_VERSION},
-      {JAVA7_PACKAGE_MAJOR_VERSION, JAVA7_PACKAGE_MINOR_VERSION}
+      {JAVA7_PACKAGE_MAJOR_VERSION, JAVA7_PACKAGE_MINOR_VERSION},
+      {JAVA8_PACKAGE_MAJOR_VERSION, JAVA8_PACKAGE_MINOR_VERSION}
   };
   int majminfound = false;
-  for (int i = 0 ; i < 3 ; i++) {
+  for (int i = 0 ; i < 4 ; i++) {
       if (majver == majmin[i][0] && minver == majmin[i][1]) {
           majminfound = true;
           break;
@@ -663,11 +664,12 @@
   if (majminfound == null) {
     char message[200];
     sprintf(message, "@" ERROR_FORMAT ": magic/ver = "
-            "%08X/%d.%d should be %08X/%d.%d OR %08X/%d.%d OR %08X/%d.%d\n",
+            "%08X/%d.%d should be %08X/%d.%d OR %08X/%d.%d OR %08X/%d.%d OR %08X/%d.%d\n",
             magic, majver, minver,
             JAVA_PACKAGE_MAGIC, JAVA5_PACKAGE_MAJOR_VERSION, JAVA5_PACKAGE_MINOR_VERSION,
             JAVA_PACKAGE_MAGIC, JAVA6_PACKAGE_MAJOR_VERSION, JAVA6_PACKAGE_MINOR_VERSION,
-            JAVA_PACKAGE_MAGIC, JAVA7_PACKAGE_MAJOR_VERSION, JAVA7_PACKAGE_MINOR_VERSION);
+            JAVA_PACKAGE_MAGIC, JAVA7_PACKAGE_MAJOR_VERSION, JAVA7_PACKAGE_MINOR_VERSION,
+            JAVA_PACKAGE_MAGIC, JAVA8_PACKAGE_MAJOR_VERSION, JAVA8_PACKAGE_MINOR_VERSION);
     abort(message);
   }
   CHECK;
@@ -2481,6 +2483,13 @@
     ad.readBandData(METHOD_ATTR_RuntimeInvisibleParameterAnnotations);
     ad.readBandData(METHOD_ATTR_AnnotationDefault);
     CHECK;
+
+    count = ad.predefCount(METHOD_ATTR_MethodParameters);
+    method_MethodParameters_NB.readData(count);
+    count = method_MethodParameters_NB.getIntTotal();
+    method_MethodParameters_name_RUN.readData(count);
+    method_MethodParameters_flag_I.readData(count);
+    CHECK;
     break;
 
   case ATTR_CONTEXT_CODE:
@@ -4417,6 +4426,15 @@
         }
         break;
 
+      case ADH_BYTE(ATTR_CONTEXT_METHOD, METHOD_ATTR_MethodParameters):
+        aname = cp.sym[cpool::s_MethodParameters];
+        putu1(count = method_MethodParameters_NB.getByte());
+        for (j = 0; j < count; j++) {
+          putref(method_MethodParameters_name_RUN.getRefN());
+          putu4(method_MethodParameters_flag_I.getInt());
+        }
+        break;
+
       case ADH_BYTE(ATTR_CONTEXT_CODE, CODE_ATTR_StackMapTable):
         aname = cp.sym[cpool::s_StackMapTable];
         // (keep this code aligned with its brother in unpacker::read_attrs)
--- a/jdk/test/ProblemList.txt	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/test/ProblemList.txt	Mon Jan 14 15:46:54 2013 -0800
@@ -321,9 +321,6 @@
 # 7150569
 tools/launcher/UnicodeTest.java                                 macosx-all
 
-# 8005252
-tools/pack200/AttributeTests.java                               generic-all
-
 ############################################################################
 
 # jdk_jdi
--- a/jdk/test/tools/pack200/AttributeTests.java	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/test/tools/pack200/AttributeTests.java	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,13 +21,15 @@
  * questions.
  */
 import java.io.File;
-import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import static java.nio.file.StandardOpenOption.*;
 /*
  * @test
- * @bug 6746111
+ * @bug 6746111 8005252
  * @summary tests various classfile format and attribute handling by pack200
  * @compile -XDignore.symbol.file Utils.java AttributeTests.java
  * @run main AttributeTests
@@ -37,9 +39,47 @@
 
     public static void main(String... args) throws Exception {
         test6746111();
+        testMethodParameters();
     }
 
     /*
+     * this tests ensure that MethodParameters produces by javac is packed
+     * correctly. Usually this is not the case as new attributes are available
+     * in the sdk jars, since MethodParameters happens to be an optional
+     * attribute, thus this test.
+     */
+    static void testMethodParameters() throws Exception {
+        List<String> scratch = new ArrayList<>();
+        final String fname = "MP";
+        String javaFileName = fname + Utils.JAVA_FILE_EXT;
+        String javaClassName = fname + Utils.CLASS_FILE_EXT;
+        scratch.add("class " + fname + " {");
+        scratch.add("void foo2(int j, final int k){}");
+        scratch.add("}");
+        File cwd = new File(".");
+        File javaFile = new File(cwd, javaFileName);
+        Files.write(javaFile.toPath(), scratch, Charset.defaultCharset(),
+                CREATE, TRUNCATE_EXISTING);
+
+        Utils.compiler(javaFile.getName(), "-parameters");
+
+        // jar the file up
+        File testjarFile = new File(cwd, "test" + Utils.JAR_FILE_EXT);
+        Utils.jar("cvf", testjarFile.getName(), javaClassName);
+
+        // pack using --repack
+        File outjarFile = new File(cwd, "out" + Utils.JAR_FILE_EXT);
+        scratch.clear();
+        scratch.add(Utils.getPack200Cmd());
+        scratch.add("--repack");
+        scratch.add("--unknown-attribute=error");
+        scratch.add(outjarFile.getName());
+        scratch.add(testjarFile.getName());
+        Utils.runExec(scratch);
+
+        Utils.doCompareVerify(testjarFile, outjarFile);
+    }
+    /*
      * this test checks to see if we get the expected strings for output
      */
     static void test6746111() throws Exception {
--- a/jdk/test/tools/pack200/pack200-verifier/src/xmlkit/ClassReader.java	Mon Jan 14 11:09:53 2013 -0800
+++ b/jdk/test/tools/pack200/pack200-verifier/src/xmlkit/ClassReader.java	Mon Jan 14 15:46:54 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -53,6 +53,7 @@
 import com.sun.tools.classfile.LocalVariableTable_attribute;
 import com.sun.tools.classfile.LocalVariableTypeTable_attribute;
 import com.sun.tools.classfile.Method;
+import com.sun.tools.classfile.MethodParameters_attribute;
 import com.sun.tools.classfile.Opcode;
 import com.sun.tools.classfile.RuntimeInvisibleAnnotations_attribute;
 import com.sun.tools.classfile.RuntimeInvisibleParameterAnnotations_attribute;
@@ -1073,6 +1074,19 @@
         return null; // already added to parent
     }
 
+    @Override
+    public Element visitMethodParameters(MethodParameters_attribute mp, Element p) {
+        String name = x.getCpString(mp.attribute_name_index);
+        for (MethodParameters_attribute.Entry e : mp.method_parameter_table) {
+            Element l = new Element(name);
+            l.setAttr("name", x.getCpString(e.name_index));
+            l.setAttr("flag", "" + e.flags);
+            l.trimToSize();
+            p.add(l);
+        }
+        return null; // already added to parent
+    }
+
     private void parseAnnotations(Annotation[] ra, Element p) {
          for (Annotation anno : ra) {
             Element ea = new Element("Member");