Skip to content

Commit 5e0cf5e

Browse files
committed
Fix module processing.
1 parent 4a05b62 commit 5e0cf5e

File tree

2 files changed

+70
-71
lines changed

2 files changed

+70
-71
lines changed

byte-buddy-dep/src/main/java/net/bytebuddy/description/module/ModuleDescription.java

Lines changed: 39 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import net.bytebuddy.utility.dispatcher.JavaDispatcher;
2424
import net.bytebuddy.utility.nullability.AlwaysNull;
2525
import net.bytebuddy.utility.nullability.MaybeNull;
26+
import org.objectweb.asm.Opcodes;
2627

2728
import java.lang.reflect.AnnotatedElement;
2829
import java.security.PrivilegedAction;
@@ -493,31 +494,16 @@ class ForLoadedModule extends AbstractBase {
493494
*/
494495
protected static final ModuleDescriptor.Exports MODULE_DESCRIPTOR_EXPORTS = doPrivileged(JavaDispatcher.of(ModuleDescriptor.Exports.class));
495496

496-
/**
497-
* A dispatcher for accessing {@code java.lang.ModuleDescriptor.Exports.Modifier} methods.
498-
*/
499-
protected static final ModuleDescriptor.Exports.Modifier MODULE_DESCRIPTOR_EXPORTS_MODIFIER = doPrivileged(JavaDispatcher.of(ModuleDescriptor.Exports.Modifier.class));
500-
501497
/**
502498
* A dispatcher for accessing {@code java.lang.ModuleDescriptor.Opens} methods.
503499
*/
504500
protected static final ModuleDescriptor.Opens MODULE_DESCRIPTOR_OPENS = doPrivileged(JavaDispatcher.of(ModuleDescriptor.Opens.class));
505501

506-
/**
507-
* A dispatcher for accessing {@code java.lang.ModuleDescriptor.Opens.Modifier} methods.
508-
*/
509-
protected static final ModuleDescriptor.Opens.Modifier MODULE_DESCRIPTOR_OPENS_MODIFIER = doPrivileged(JavaDispatcher.of(ModuleDescriptor.Opens.Modifier.class));
510-
511502
/**
512503
* A dispatcher for accessing {@code java.lang.ModuleDescriptor.Requires} methods.
513504
*/
514505
protected static final ModuleDescriptor.Requires MODULE_DESCRIPTOR_REQUIRES = doPrivileged(JavaDispatcher.of(ModuleDescriptor.Requires.class));
515506

516-
/**
517-
* A dispatcher for accessing {@code java.lang.ModuleDescriptor.Requires.Modifier} methods.
518-
*/
519-
protected static final ModuleDescriptor.Requires.Modifier MODULE_DESCRIPTOR_REQUIRES_MODIFIER = doPrivileged(JavaDispatcher.of(ModuleDescriptor.Requires.Modifier.class));
520-
521507
/**
522508
* A dispatcher for accessing {@code java.lang.ModuleDescriptor.Provides} methods.
523509
*/
@@ -615,7 +601,14 @@ public Map<String, Exports> getExports() {
615601
for (Object export : MODULE_DESCRIPTOR.exports(MODULE.getDescriptor(module))) {
616602
int modifiers = 0;
617603
for (Object modifier : MODULE_DESCRIPTOR_EXPORTS.modifiers(export)) {
618-
modifiers |= MODULE_DESCRIPTOR_EXPORTS_MODIFIER.mask(modifier);
604+
String name = ((Enum<?>) modifier).name();
605+
if (name.equals("SYNTHETIC")) {
606+
modifiers |= Opcodes.ACC_SYNTHETIC;
607+
} else if (name.equals("MANDATED")) {
608+
modifiers |= Opcodes.ACC_MANDATED;
609+
} else {
610+
throw new IllegalStateException("Unknown export modifier: " + name);
611+
}
619612
}
620613
exports.put(MODULE_DESCRIPTOR_EXPORTS.source(export), new Exports.Simple(MODULE_DESCRIPTOR_EXPORTS.targets(export), modifiers));
621614
}
@@ -630,7 +623,14 @@ public Map<String, Opens> getOpens() {
630623
for (Object open : MODULE_DESCRIPTOR.opens(MODULE.getDescriptor(module))) {
631624
int modifiers = 0;
632625
for (Object modifier : MODULE_DESCRIPTOR_OPENS.modifiers(open)) {
633-
modifiers |= MODULE_DESCRIPTOR_OPENS_MODIFIER.mask(modifier);
626+
String name = ((Enum<?>) modifier).name();
627+
if (name.equals("SYNTHETIC")) {
628+
modifiers |= Opcodes.ACC_SYNTHETIC;
629+
} else if (name.equals("MANDATED")) {
630+
modifiers |= Opcodes.ACC_MANDATED;
631+
} else {
632+
throw new IllegalStateException("Unknown opens modifier: " + name);
633+
}
634634
}
635635
opens.put(MODULE_DESCRIPTOR_OPENS.source(open), new Opens.Simple(MODULE_DESCRIPTOR_OPENS.targets(open), modifiers));
636636
}
@@ -645,7 +645,18 @@ public Map<String, Requires> getRequires() {
645645
for (Object require : MODULE_DESCRIPTOR.requires(MODULE.getDescriptor(module))) {
646646
int modifiers = 0;
647647
for (Object modifier : MODULE_DESCRIPTOR_REQUIRES.modifiers(require)) {
648-
modifiers |= MODULE_DESCRIPTOR_REQUIRES_MODIFIER.mask(modifier);
648+
String name = ((Enum<?>) modifier).name();
649+
if (name.equals("SYNTHETIC")) {
650+
modifiers |= Opcodes.ACC_SYNTHETIC;
651+
} else if (name.equals("MANDATED")) {
652+
modifiers |= Opcodes.ACC_MANDATED;
653+
} else if (name.equals("TRANSITIVE")) {
654+
modifiers |= Opcodes.ACC_TRANSITIVE;
655+
} else if (name.equals("STATIC")) {
656+
modifiers |= Opcodes.ACC_STATIC_PHASE;
657+
} else {
658+
throw new IllegalStateException("Unknown requires modifier: " + name);
659+
}
649660
}
650661
requires.put(MODULE_DESCRIPTOR_REQUIRES.name(require), new Requires.Simple(
651662
(String) OPTIONAL.orElse(MODULE_DESCRIPTOR_REQUIRES.rawCompiledVersion(require), null),
@@ -671,7 +682,16 @@ public Map<String, Provides> getProvides() {
671682
public int getModifiers() {
672683
int modifiers = 0;
673684
for (Object modifier : MODULE_DESCRIPTOR.modifiers(module)) {
674-
modifiers |= MODULE_DESCRIPTOR_REQUIRES_MODIFIER.mask(modifier);
685+
String name = ((Enum<?>) modifier).name();
686+
if (name.equals("SYNTHETIC")) {
687+
modifiers |= Opcodes.ACC_SYNTHETIC;
688+
} else if (name.equals("MANDATED")) {
689+
modifiers |= Opcodes.ACC_MANDATED;
690+
} else if (name.equals("OPEN")) {
691+
modifiers |= Opcodes.ACC_OPEN;
692+
} else {
693+
throw new IllegalStateException("Unknown module modifier: " + name);
694+
}
675695
}
676696
return modifiers;
677697
}
@@ -860,21 +880,6 @@ interface Requires {
860880
* @return The raw compiled version as an {@code Optional}.
861881
*/
862882
Object rawCompiledVersion(Object value);
863-
864-
/**
865-
* A proxy for interacting with {@code java.lang.ModuleDescriptor.Requires.Modifier}.
866-
*/
867-
@JavaDispatcher.Proxied("java.lang.module.ModuleDescriptor$Requires$Modifier")
868-
interface Modifier {
869-
870-
/**
871-
* Returns the mask value for this modifier.
872-
*
873-
* @param value The {@code java.lang.ModuleDescriptor.Requires.Modifier} instance.
874-
* @return The mask value for this modifier.
875-
*/
876-
int mask(Object value);
877-
}
878883
}
879884

880885
/**
@@ -906,21 +911,6 @@ interface Exports {
906911
* @return The target modules for this export.
907912
*/
908913
Set<String> targets(Object value);
909-
910-
/**
911-
* A proxy for interacting with {@code java.lang.ModuleDescriptor.Exports.Modifier}.
912-
*/
913-
@JavaDispatcher.Proxied("java.lang.module.ModuleDescriptor$Exports$Modifier")
914-
interface Modifier {
915-
916-
/**
917-
* Returns the mask value for this modifier.
918-
*
919-
* @param value The {@code java.lang.ModuleDescriptor.Exports.Modifier} instance.
920-
* @return The mask value for this modifier.
921-
*/
922-
int mask(Object value);
923-
}
924914
}
925915

926916
/**
@@ -952,21 +942,6 @@ interface Opens {
952942
* @return The target modules for this opens declaration.
953943
*/
954944
Set<String> targets(Object value);
955-
956-
/**
957-
* A proxy for interacting with {@code java.lang.ModuleDescriptor.Opens.Modifier}.
958-
*/
959-
@JavaDispatcher.Proxied("java.lang.module.ModuleDescriptor$Opens$Modifier")
960-
interface Modifier {
961-
962-
/**
963-
* Returns the mask value for this modifier.
964-
*
965-
* @param value The {@code java.lang.ModuleDescriptor.Opens.Modifier} instance.
966-
* @return The mask value for this modifier.
967-
*/
968-
int mask(Object value);
969-
}
970945
}
971946

972947
/**

byte-buddy-dep/src/main/java/net/bytebuddy/pool/TypePool.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7973,35 +7973,51 @@ public String getVersion() {
79737973
*/
79747974
@MaybeNull
79757975
public String getMainClass() {
7976-
return mainClass;
7976+
return mainClass == null ? null : mainClass.replace('/', '.');
79777977
}
79787978

79797979
/**
79807980
* {@inheritDoc}
79817981
*/
79827982
public Set<String> getPackages() {
7983-
return new LinkedHashSet<String>(packages);
7983+
Set<String> packages = new LinkedHashSet<String>();
7984+
for (String aPackage : this.packages) {
7985+
packages.add(aPackage.replace('/', '.'));
7986+
}
7987+
return packages;
79847988
}
79857989

79867990
/**
79877991
* {@inheritDoc}
79887992
*/
79897993
public Set<String> getUses() {
7990-
return new LinkedHashSet<String>(uses);
7994+
Set<String> uses = new LinkedHashSet<String>();
7995+
for (String use : this.uses) {
7996+
uses.add(use.replace('/', '.'));
7997+
}
7998+
return uses;
79917999
}
79928000

79938001
/**
79948002
* {@inheritDoc}
79958003
*/
79968004
public Map<String, ModuleDescription.Exports> getExports() {
7997-
return new LinkedHashMap<String, ModuleDescription.Exports>(exports);
8005+
Map<String, ModuleDescription.Exports> exports = new LinkedHashMap<String, ModuleDescription.Exports>();
8006+
for (Map.Entry<String, Exports> entry : this.exports.entrySet()) {
8007+
exports.put(entry.getKey().replace('/', '.'), new Exports.Simple(new LinkedHashSet<String>(entry.getValue().getTargets()), entry.getValue().getModifiers()));
8008+
}
8009+
return exports;
79988010
}
79998011

80008012
/**
80018013
* {@inheritDoc}
80028014
*/
80038015
public Map<String, ModuleDescription.Opens> getOpens() {
8004-
return new LinkedHashMap<String, ModuleDescription.Opens>(opens);
8016+
Map<String, ModuleDescription.Opens> opens = new LinkedHashMap<String, ModuleDescription.Opens>();
8017+
for (Map.Entry<String, Opens> entry : this.opens.entrySet()) {
8018+
opens.put(entry.getKey().replace('/', '.'), new Opens.Simple(new LinkedHashSet<String>(entry.getValue().getTargets()), entry.getValue().getModifiers()));
8019+
}
8020+
return opens;
80058021
}
80068022

80078023
/**
@@ -8015,7 +8031,15 @@ public Map<String, ModuleDescription.Requires> getRequires() {
80158031
* {@inheritDoc}
80168032
*/
80178033
public Map<String, ModuleDescription.Provides> getProvides() {
8018-
return new LinkedHashMap<String, ModuleDescription.Provides>(provides);
8034+
Map<String, ModuleDescription.Provides> provides = new LinkedHashMap<String, ModuleDescription.Provides>();
8035+
for (Map.Entry<String, Provides> entry : this.provides.entrySet()) {
8036+
Set<String> providers = new LinkedHashSet<String>();
8037+
for (String provider : entry.getValue().getProviders()) {
8038+
providers.add(provider.replace('/', '.'));
8039+
}
8040+
provides.put(entry.getKey().replace('/', '.'), new Provides.Simple(providers));
8041+
}
8042+
return provides;
80198043
}
80208044

80218045
/**
@@ -9457,7 +9481,7 @@ public void visitPackage(String aPackage) {
94579481
}
94589482

94599483
@Override
9460-
public void visitRequire(String module, int access, @MaybeNull String version) {
9484+
public void visitRequire(String module, int modifiers, @MaybeNull String version) {
94619485
requires.put(module, new ModuleDescription.Requires.Simple(version, modifiers));
94629486
}
94639487

0 commit comments

Comments
 (0)