< prev index next >

src/jdk.jdeps/share/classes/com/sun/tools/javap/ClassWriter.java

Print this page
*** 23,10 ***
--- 23,12 ---
   * questions.
   */
  
  package com.sun.tools.javap;
  
+ import com.sun.tools.javac.code.Source;
+ 
  import java.lang.classfile.AccessFlags;
  import java.lang.classfile.Attributes;
  import java.lang.classfile.ClassFile;
  import java.lang.classfile.ClassHierarchyResolver;
  import java.lang.classfile.ClassModel;

*** 119,12 ***
          var major = classModel.majorVersion();
          if (major < JAVA_1_VERSION || major > ClassFile.latestMajorVersion())
              // something not representable by CFFV, let's fall back
              return ClassFileFormatVersion.latest();
          if (major >= JAVA_12_VERSION && classModel.minorVersion() != 0) {
!             // preview versions aren't explicitly supported, but latest is good enough for now
-             return ClassFileFormatVersion.latest();
          }
          return ClassFileFormatVersion.fromMajor(major);
      }
  
      public boolean write(ClassModel cm) {
--- 121,11 ---
          var major = classModel.majorVersion();
          if (major < JAVA_1_VERSION || major > ClassFile.latestMajorVersion())
              // something not representable by CFFV, let's fall back
              return ClassFileFormatVersion.latest();
          if (major >= JAVA_12_VERSION && classModel.minorVersion() != 0) {
!             return ClassFileFormatVersion.CURRENT_PREVIEW_FEATURES;
          }
          return ClassFileFormatVersion.fromMajor(major);
      }
  
      public boolean write(ClassModel cm) {

*** 164,11 ***
  
          if (options.sysInfo || options.verbose) {
              indent(-1);
          }
  
!         writeModifiers(getClassModifiers(cm.flags()));
  
          if ((classModel.flags().flagsMask() & ACC_MODULE) != 0) {
              var attr = classModel.findAttribute(Attributes.module());
              if (attr.isPresent()) {
                  var modAttr = attr.get();
--- 165,11 ---
  
          if (options.sysInfo || options.verbose) {
              indent(-1);
          }
  
!         writeModifiers(getClassModifiers(cm.flags(), classModel.majorVersion(), classModel.minorVersion()));
  
          if ((classModel.flags().flagsMask() & ACC_MODULE) != 0) {
              var attr = classModel.findAttribute(Attributes.module());
              if (attr.isPresent()) {
                  var modAttr = attr.get();

*** 810,10 ***
--- 811,24 ---
              set = flagSet;
          }
          return getModifiers(set);
      }
  
+     private Set<String> getClassModifiers(AccessFlags flags, int majorVersion, int minorVersion) {
+         boolean previewClassFile = minorVersion == ClassFile.PREVIEW_MINOR_VERSION;
+         Set<AccessFlag> flagSet = flagsReportUnknown(flags, cffv());
+         if (flagSet.contains(AccessFlag.INTERFACE)) {
+             flagSet = EnumSet.copyOf(flagSet);
+             flagSet.remove(AccessFlag.ABSTRACT);
+         } else if (Source.isSupported(Source.Feature.VALUE_CLASSES, majorVersion) && previewClassFile) {
+             Set<String> classModifers = getModifiers(flagSet);
+             classModifers.add("value");
+             return classModifers;
+         }
+         return getModifiers(flagSet);
+     }
+ 
      private static Set<String> getModifiers(Set<AccessFlag> flags) {
          Set<String> s = new LinkedHashSet<>();
          for (var f : flags)
              if (f.sourceModifier()) s.add(Modifier.toString(f.mask()));
          return s;
< prev index next >