diff --git a/src/org/jetbrains/java/decompiler/main/ClassWriter.java b/src/org/jetbrains/java/decompiler/main/ClassWriter.java index 3f111a6..2d57c02 100644 --- a/src/org/jetbrains/java/decompiler/main/ClassWriter.java +++ b/src/org/jetbrains/java/decompiler/main/ClassWriter.java @@ -308,39 +308,45 @@ public class ClassWriter { List requiresEntries = moduleAttribute.requires; if (!requiresEntries.isEmpty()) { for (StructModuleAttribute.RequiresEntry requires : requiresEntries) { - buffer.appendIndent(1).append("requires ").append(requires.moduleName.replace('/', '.')).append(';').appendLineSeparator(); + if (!isGenerated(requires.flags)) { + buffer.appendIndent(1).append("requires ").append(requires.moduleName.replace('/', '.')).append(';').appendLineSeparator(); + newLineNeeded = true; + } } - newLineNeeded = true; } List exportsEntries = moduleAttribute.exports; if (!exportsEntries.isEmpty()) { if (newLineNeeded) buffer.appendLineSeparator(); for (StructModuleAttribute.ExportsEntry exports : exportsEntries) { - buffer.appendIndent(1).append("exports ").append(exports.packageName.replace('/', '.')); - List exportToModules = exports.exportToModules; - if (exportToModules.size() > 0) { - buffer.append(" to").appendLineSeparator(); - appendFQClassNames(buffer, exportToModules); + if (!isGenerated(exports.flags)) { + buffer.appendIndent(1).append("exports ").append(exports.packageName.replace('/', '.')); + List exportToModules = exports.exportToModules; + if (exportToModules.size() > 0) { + buffer.append(" to").appendLineSeparator(); + appendFQClassNames(buffer, exportToModules); + } + buffer.append(';').appendLineSeparator(); + newLineNeeded = true; } - buffer.append(';').appendLineSeparator(); } - newLineNeeded = true; } List opensEntries = moduleAttribute.opens; if (!opensEntries.isEmpty()) { if (newLineNeeded) buffer.appendLineSeparator(); for (StructModuleAttribute.OpensEntry opens : opensEntries) { - buffer.appendIndent(1).append("opens ").append(opens.packageName.replace('/', '.')); - List opensToModules = opens.opensToModules; - if (opensToModules.size() > 0) { - buffer.append(" to").appendLineSeparator(); - appendFQClassNames(buffer, opensToModules); + if (!isGenerated(opens.flags)) { + buffer.appendIndent(1).append("opens ").append(opens.packageName.replace('/', '.')); + List opensToModules = opens.opensToModules; + if (opensToModules.size() > 0) { + buffer.append(" to").appendLineSeparator(); + appendFQClassNames(buffer, opensToModules); + } + buffer.append(';').appendLineSeparator(); + newLineNeeded = true; } - buffer.append(';').appendLineSeparator(); } - newLineNeeded = true; } List usesEntries = moduleAttribute.uses; @@ -363,6 +369,10 @@ public class ClassWriter { } } + private static boolean isGenerated(int flags) { + return (flags & (CodeConstants.ACC_SYNTHETIC | CodeConstants.ACC_MANDATED)) != 0; + } + private static void addTracer(StructClass cls, StructMethod method, BytecodeMappingTracer tracer) { StructLineNumberTableAttribute table = method.getAttribute(StructGeneralAttribute.ATTRIBUTE_LINE_NUMBER_TABLE); tracer.setLineNumberTable(table); @@ -1266,4 +1276,4 @@ public class ClassWriter { } } } -} +} \ No newline at end of file diff --git a/src/org/jetbrains/java/decompiler/struct/attr/StructModuleAttribute.java b/src/org/jetbrains/java/decompiler/struct/attr/StructModuleAttribute.java index ba2005b..9fd6f89 100644 --- a/src/org/jetbrains/java/decompiler/struct/attr/StructModuleAttribute.java +++ b/src/org/jetbrains/java/decompiler/struct/attr/StructModuleAttribute.java @@ -45,11 +45,11 @@ public class StructModuleAttribute extends StructGeneralAttribute { List requires = new ArrayList<>(requiresCount); for (int i = 0; i < requiresCount; i++) { int moduleNameIndex = data.readUnsignedShort(); - int moduleFlags = data.readUnsignedShort(); + int requiresFlags = data.readUnsignedShort(); int versionIndex = data.readUnsignedShort(); String moduleName = pool.getPrimitiveConstant(moduleNameIndex).getString(); String version = versionIndex == 0 ? null : pool.getPrimitiveConstant(versionIndex).getString(); - requires.add(new RequiresEntry(moduleName, moduleFlags, version)); + requires.add(new RequiresEntry(moduleName, requiresFlags, version)); } return requires; } @@ -119,36 +119,36 @@ public class StructModuleAttribute extends StructGeneralAttribute { public static final class RequiresEntry { public final String moduleName; - public final int moduleFlags; + public final int flags; public final String moduleVersion; - public RequiresEntry(String moduleName, int moduleFlags, String moduleVersion) { + public RequiresEntry(String moduleName, int flags, String moduleVersion) { this.moduleName = moduleName; - this.moduleFlags = moduleFlags; + this.flags = flags; this.moduleVersion = moduleVersion; } } public static final class ExportsEntry { public final String packageName; - public final int exportsFlags; + public final int flags; public final List exportToModules; - public ExportsEntry(String packageName, int exportsFlags, List exportToModules) { + public ExportsEntry(String packageName, int flags, List exportToModules) { this.packageName = packageName; - this.exportsFlags = exportsFlags; + this.flags = flags; this.exportToModules = exportToModules; } } public static final class OpensEntry { public final String packageName; - public final int opensFlags; + public final int flags; public final List opensToModules; - public OpensEntry(String packageName, int exportsFlags, List exportToModules) { + public OpensEntry(String packageName, int flags, List exportToModules) { this.packageName = packageName; - this.opensFlags = exportsFlags; + this.flags = flags; this.opensToModules = exportToModules; } } @@ -162,4 +162,4 @@ public class StructModuleAttribute extends StructGeneralAttribute { this.implementationNames = implementationNames; } } -} +} \ No newline at end of file diff --git a/testData/classes/java9/module-info.class b/testData/classes/java9/module-info.class index 0380f41..cc01403 100644 Binary files a/testData/classes/java9/module-info.class and b/testData/classes/java9/module-info.class differ diff --git a/testData/results/module-info.dec b/testData/results/module-info.dec index ec5e268..a2018a5 100644 --- a/testData/results/module-info.dec +++ b/testData/results/module-info.dec @@ -1,8 +1,8 @@ -import pkg.test1.TestModuleAnno; +import sample.pkg1.TestModuleAnno; @TestModuleAnno("...") module sample.module { - requires java.base; + requires java.desktop; exports sample.pkg1; exports sample.pkg2 to diff --git a/testData/src/java9/sample.module/TestModuleAnno.java b/testData/src/java9/sample.module/TestModuleAnno.java index fb28aca..192ee2b 100644 --- a/testData/src/java9/sample.module/TestModuleAnno.java +++ b/testData/src/java9/sample.module/TestModuleAnno.java @@ -1,4 +1,4 @@ -package pkg.test1; +package sample.pkg1; import java.lang.annotation.*; diff --git a/testData/src/java9/sample.module/module-info.java b/testData/src/java9/sample.module/module-info.java index f301ac5..9f42e18 100644 --- a/testData/src/java9/sample.module/module-info.java +++ b/testData/src/java9/sample.module/module-info.java @@ -1,8 +1,8 @@ -import pkg.test1.TestModuleAnno; +import sample.pkg1.TestModuleAnno; @TestModuleAnno("...") module sample.module { - requires java.base; + requires java.desktop; uses java.util.spi.ToolProvider;