Skip to content

Commit 3f969d1

Browse files
committed
Fix handling of modules.
1 parent 9b440d1 commit 3f969d1

File tree

5 files changed

+34
-17
lines changed

5 files changed

+34
-17
lines changed

byte-buddy-dep/src/main/java/net/bytebuddy/ByteBuddy.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -819,9 +819,21 @@ public DynamicType.Builder.ModuleDefinition<?> makeModule(String name,
819819
*/
820820
public DynamicType.Builder.ModuleDefinition<?> makeModule(String name,
821821
Collection<? extends ModifierContributor.ForModule> modifierContributors) {
822-
return subclass(Object.class)
823-
.name(ModuleDescription.MODULE_CLASS_NAME)
824-
.module(name, modifierContributors);
822+
return new SubclassDynamicTypeBuilder<Object>(instrumentedTypeFactory.subclass(ModuleDescription.MODULE_CLASS_NAME,
823+
Opcodes.ACC_MODULE,
824+
TypeDescription.Generic.UNDEFINED),
825+
classFileVersion,
826+
auxiliaryTypeNamingStrategy,
827+
annotationValueFilterFactory,
828+
annotationRetention,
829+
implementationContextFactory,
830+
methodGraphCompiler,
831+
typeValidation,
832+
visibilityBridgeStrategy,
833+
classReaderFactory,
834+
classWriterFactory,
835+
ignoredMethods,
836+
ConstructorStrategy.Default.NO_CONSTRUCTORS).module(name, modifierContributors);
825837
}
826838

827839
/**

byte-buddy-dep/src/main/java/net/bytebuddy/description/type/TypeDescription.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8017,11 +8017,13 @@ public String getInternalName() {
80178017
* {@inheritDoc}
80188018
*/
80198019
public int getActualModifiers(boolean superFlag) {
8020+
if (isModule()) {
8021+
return Opcodes.ACC_MODULE;
8022+
}
80208023
int actualModifiers = getModifiers()
80218024
| (getDeclaredAnnotations().isAnnotationPresent(Deprecated.class) ? Opcodes.ACC_DEPRECATED : EMPTY_MASK)
80228025
| (isRecord() ? Opcodes.ACC_RECORD : EMPTY_MASK)
8023-
| (superFlag ? Opcodes.ACC_SUPER : EMPTY_MASK)
8024-
| (isModule() ? Opcodes.ACC_MODULE : EMPTY_MASK);
8026+
| (superFlag ? Opcodes.ACC_SUPER : EMPTY_MASK);
80258027
if (isPrivate()) {
80268028
return actualModifiers & ~(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC);
80278029
} else if (isProtected()) {

byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/DynamicType.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5476,7 +5476,7 @@ public Builder<U> annotateType(Collection<? extends AnnotationDescription> annot
54765476
moduleDescription.getOpens(),
54775477
moduleDescription.getUses(),
54785478
moduleDescription.getProvides(),
5479-
CompoundList.of(instrumentedType.getDeclaredAnnotations(), new ArrayList<>(annotations)))),
5479+
CompoundList.of(instrumentedType.getDeclaredAnnotations(), new ArrayList<AnnotationDescription>(annotations)))),
54805480
fieldRegistry,
54815481
methodRegistry,
54825482
recordComponentRegistry,
@@ -5740,7 +5740,7 @@ public ModuleDefinition<U> mainClass(@MaybeNull String name) {
57405740
* {@inheritDoc}
57415741
*/
57425742
public ModuleDefinition<U> packages(Collection<String> packages) {
5743-
Set<String> merged = new LinkedHashSet<>(this.packages);
5743+
Set<String> merged = new LinkedHashSet<String>(this.packages);
57445744
merged.addAll(packages);
57455745
return new ModuleDefinitionAdapter(name,
57465746
modifiers,
@@ -5779,7 +5779,7 @@ public OpensDefinition<U> open(String aPackage, int modifiers) {
57795779
* {@inheritDoc}
57805780
*/
57815781
public ModuleDefinition<U> uses(Collection<String> services) {
5782-
Set<String> merged = new LinkedHashSet<>(this.packages);
5782+
Set<String> merged = new LinkedHashSet<String>(this.packages);
57835783
merged.addAll(packages);
57845784
return new ModuleDefinitionAdapter(name,
57855785
modifiers,
@@ -5913,7 +5913,6 @@ protected ModuleDefinition<U> materialize() {
59135913
}
59145914
}
59155915

5916-
59175916
/**
59185917
* An adapter for defining a module export.
59195918
*/
@@ -5970,7 +5969,7 @@ public ExportsDefinition<U> to(Collection<String> modules) {
59705969
@Override
59715970
protected ModuleDefinition<U> materialize() {
59725971
Map<String, ModuleDescription.Exports> exports = new LinkedHashMap<String, ModuleDescription.Exports>(ModuleDefinitionAdapter.this.exports);
5973-
exports.put(name, new ModuleDescription.Exports.Simple(targets, modifiers));
5972+
exports.put(aPackage, new ModuleDescription.Exports.Simple(targets, modifiers));
59745973
return new ModuleDefinitionAdapter(name,
59755974
ModuleDefinitionAdapter.this.modifiers,
59765975
version,
@@ -6040,7 +6039,7 @@ public OpensDefinition<U> to(Collection<String> modules) {
60406039
@Override
60416040
protected ModuleDefinition<U> materialize() {
60426041
Map<String, ModuleDescription.Opens> opens = new LinkedHashMap<String, ModuleDescription.Opens>(ModuleDefinitionAdapter.this.opens);
6043-
opens.put(name, new ModuleDescription.Opens.Simple(targets, modifiers));
6042+
opens.put(aPackage, new ModuleDescription.Opens.Simple(targets, modifiers));
60446043
return new ModuleDefinitionAdapter(name,
60456044
ModuleDefinitionAdapter.this.modifiers,
60466045
version,
@@ -7728,9 +7727,13 @@ protected Loaded(TypeDescription typeDescription,
77287727
/**
77297728
* {@inheritDoc}
77307729
*/
7731-
@SuppressWarnings("unchecked")
77327730
public Class<? extends T> getLoaded() {
7733-
return (Class<? extends T>) loadedTypes.get(typeDescription);
7731+
@SuppressWarnings("unchecked")
7732+
Class<? extends T> type = (Class<? extends T>) loadedTypes.get(typeDescription);
7733+
if (type == null) {
7734+
throw new IllegalStateException(typeDescription + " cannot be loaded explicitly");
7735+
}
7736+
return type;
77347737
}
77357738

77367739
/**

byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/scaffold/InstrumentedType.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -440,10 +440,10 @@ interface Factory {
440440
*
441441
* @param name The type's name.
442442
* @param modifiers The type's modifiers.
443-
* @param superClass The type's super class.
443+
* @param superClass The type's super class or {@code null} if no super class.
444444
* @return A new instrumented type representing a subclass of the given parameters.
445445
*/
446-
InstrumentedType.WithFlexibleName subclass(String name, int modifiers, TypeDescription.Generic superClass);
446+
InstrumentedType.WithFlexibleName subclass(String name, int modifiers, @MaybeNull TypeDescription.Generic superClass);
447447

448448
/**
449449
* Default implementations of instrumented type factories.
@@ -501,7 +501,7 @@ public InstrumentedType.WithFlexibleName represent(TypeDescription typeDescripti
501501
/**
502502
* {@inheritDoc}
503503
*/
504-
public InstrumentedType.WithFlexibleName subclass(String name, int modifiers, TypeDescription.Generic superClass) {
504+
public InstrumentedType.WithFlexibleName subclass(String name, int modifiers, @MaybeNull TypeDescription.Generic superClass) {
505505
return new InstrumentedType.Default(name,
506506
modifiers,
507507
ModuleDescription.UNDEFINED,

byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/scaffold/TypeWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6108,7 +6108,7 @@ protected UnresolvedType create(TypeInitializer typeInitializer, ClassDumpAction
61086108
instrumentedType.getActualModifiers(!instrumentedType.isInterface()),
61096109
instrumentedType.getInternalName(),
61106110
instrumentedType.getGenericSignature(),
6111-
(instrumentedType.getSuperClass() == null
6111+
instrumentedType.getName().equals(ModuleDescription.MODULE_CLASS_NAME) ? null : (instrumentedType.getSuperClass() == null
61126112
? TypeDescription.ForLoadedType.of(Object.class)
61136113
: instrumentedType.getSuperClass().asErasure()).getInternalName(),
61146114
instrumentedType.getInterfaces().asErasures().toInternalNames());

0 commit comments

Comments
 (0)