< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ModuleNameReader.java

Print this page

        

@@ -98,34 +98,28 @@
 
         int access_flags = nextChar();
         if (access_flags != 0x8000)
             throw new BadClassFile("invalid access flags for module: 0x" + Integer.toHexString(access_flags));
 
-        // FIXME: temporary compatibility code
         int this_class = nextChar();
-        if (this_class == 0) {
-            // new form
+        // could, should, check this_class == CONSTANT_Class("mdoule-info")
             checkZero(nextChar(), "super_class");
             checkZero(nextChar(), "interface_count");
             checkZero(nextChar(), "fields_count");
             checkZero(nextChar(), "methods_count");
             int attributes_count = nextChar();
             for (int i = 0; i < attributes_count; i++) {
                 int attr_name = nextChar();
                 int attr_length = nextInt();
                 if (getUtf8Value(attr_name, false).equals("Module") && attr_length > 2) {
-                    return getUtf8Value(nextChar(), true);
+                return getModuleName(nextChar());
                 } else {
                     // skip over unknown attributes
                     bp += attr_length;
                 }
             }
             throw new BadClassFile("no Module attribute");
-        } else {
-            // old form
-            return readModuleInfoName(this_class);
-        }
     }
 
     void checkZero(int count, String name) throws BadClassFile {
         if (count != 0)
             throw new BadClassFile("invalid " + name + " for module: " + count);

@@ -170,10 +164,12 @@
                 break;
             }
             case CONSTANT_Class:
             case CONSTANT_String:
             case CONSTANT_MethodType:
+            case CONSTANT_Module:
+            case CONSTANT_Package:
                 bp = bp + 2;
                 break;
             case CONSTANT_MethodHandle:
                 bp = bp + 3;
                 break;

@@ -209,37 +205,17 @@
             }
         }
         throw new BadClassFile("bad name at index " + index);
     }
 
-    /** Read the class name of a module-info.class file.
-     * The name is stored in a CONSTANT_Class entry, where the
-     * class name is of the form module-name/module-info.
-     */
-    String readModuleInfoName(int i) throws BadClassFile {
-        int classIndex = poolIdx[i];
-        if (buf[classIndex] == CONSTANT_Class) {
-            int utf8Index = poolIdx[getChar(classIndex + 1)];
-            if (buf[utf8Index] == CONSTANT_Utf8) {
-                int len = getChar(utf8Index + 1);
-                int start = utf8Index + 3;
-                String suffix = "/module-info";
-                if (endsWith(buf, start, len, suffix))
-                    return new String(ClassFile.internalize(buf, start, len - suffix.length()));
-            }
-        }
-        throw new BadClassFile("bad module-info name");
-    }
-
-    private boolean endsWith(byte[] buf, int start, int len, String suffix) {
-        if (len <= suffix.length())
-            return false;
-        for (int i = 0; i < suffix.length(); i++) {
-            if (buf[start + len - suffix.length() + i] != suffix.charAt(i))
-                return false;
+    String getModuleName(int index) throws BadClassFile {
+        int infoIndex = poolIdx[index];
+        if (buf[infoIndex] == CONSTANT_Module) {
+            return getUtf8Value(getChar(infoIndex + 1), true);
+        } else {
+            throw new BadClassFile("bad module name at index " + index);
         }
-        return true;
     }
 
     private static byte[] readInputStream(byte[] buf, InputStream s) throws IOException {
         try {
             buf = ensureCapacity(buf, s.available());
< prev index next >