Skip to content

Commit ba7e98f

Browse files
committed
Allow class file locator resolution based on class file version.
1 parent d3a15cb commit ba7e98f

File tree

8 files changed

+48
-43
lines changed

8 files changed

+48
-43
lines changed

byte-buddy-dep/src/main/java/net/bytebuddy/build/Plugin.java

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2256,13 +2256,15 @@ interface Origin extends Iterable<Element>, Closeable {
22562256
Manifest getManifest() throws IOException;
22572257

22582258
/**
2259-
* Returns a class file locator for the represented source. If the class file locator needs to be closed, it is the responsibility
2260-
* of this origin to close the locator or its underlying resources.
2259+
* Creates a class file locator for the represented source. If the class file locator needs to be closed,
2260+
* it is the responsibility of this origin to close the locator or its underlying resources.
22612261
*
2262+
* @param classFileVersion The class file version to consider for multi-release jars or {@code null}
2263+
* if multi-release jars should not be considered.
22622264
* @return A class file locator for locating class files of this instance.
22632265
* @throws IOException If an I/O exception occurs.
22642266
*/
2265-
ClassFileLocator getClassFileLocator() throws IOException;
2267+
ClassFileLocator toClassFileLocator(@MaybeNull ClassFileVersion classFileVersion) throws IOException;
22662268

22672269
/**
22682270
* An origin implementation for a jar file.
@@ -2294,8 +2296,10 @@ public Manifest getManifest() throws IOException {
22942296
/**
22952297
* {@inheritDoc}
22962298
*/
2297-
public ClassFileLocator getClassFileLocator() {
2298-
return new ClassFileLocator.ForJarFile(file);
2299+
public ClassFileLocator toClassFileLocator(@MaybeNull ClassFileVersion classFileVersion) throws IOException {
2300+
return classFileVersion == null
2301+
? new ClassFileLocator.ForJarFile(file)
2302+
: ClassFileLocator.ForJarFile.of(file, classFileVersion);
22992303
}
23002304

23012305
/**
@@ -2409,8 +2413,8 @@ public Manifest getManifest() throws IOException {
24092413
/**
24102414
* {@inheritDoc}
24112415
*/
2412-
public ClassFileLocator getClassFileLocator() throws IOException {
2413-
return delegate.getClassFileLocator();
2416+
public ClassFileLocator toClassFileLocator(@MaybeNull ClassFileVersion classFileVersion) throws IOException {
2417+
return delegate.toClassFileLocator(classFileVersion);
24142418
}
24152419

24162420
/**
@@ -2715,7 +2719,7 @@ public Origin read() {
27152719
/**
27162720
* {@inheritDoc}
27172721
*/
2718-
public ClassFileLocator getClassFileLocator() {
2722+
public ClassFileLocator toClassFileLocator(@MaybeNull ClassFileVersion classFileVersion) {
27192723
return ClassFileLocator.NoOp.INSTANCE;
27202724
}
27212725

@@ -2821,10 +2825,10 @@ public Manifest getManifest() throws IOException {
28212825
/**
28222826
* {@inheritDoc}
28232827
*/
2824-
public ClassFileLocator getClassFileLocator() throws IOException {
2828+
public ClassFileLocator toClassFileLocator(@MaybeNull ClassFileVersion classFileVersion) throws IOException {
28252829
List<ClassFileLocator> classFileLocators = new ArrayList<ClassFileLocator>(origins.size());
28262830
for (Source.Origin origin : origins) {
2827-
classFileLocators.add(origin.getClassFileLocator());
2831+
classFileLocators.add(origin.toClassFileLocator(classFileVersion));
28282832
}
28292833
return new ClassFileLocator.Compound(classFileLocators);
28302834
}
@@ -2980,7 +2984,7 @@ public Origin read() {
29802984
/**
29812985
* {@inheritDoc}
29822986
*/
2983-
public ClassFileLocator getClassFileLocator() {
2987+
public ClassFileLocator toClassFileLocator(@MaybeNull ClassFileVersion classFileVersion) {
29842988
return ClassFileLocator.Simple.ofResources(storage);
29852989
}
29862990

@@ -3086,8 +3090,10 @@ public Origin read() {
30863090
/**
30873091
* {@inheritDoc}
30883092
*/
3089-
public ClassFileLocator getClassFileLocator() {
3090-
return new ClassFileLocator.ForFolder(folder);
3093+
public ClassFileLocator toClassFileLocator(@MaybeNull ClassFileVersion classFileVersion) throws IOException {
3094+
return classFileVersion == null
3095+
? new ClassFileLocator.ForFolder(folder)
3096+
: ClassFileLocator.ForFolder.of(folder, classFileVersion);
30913097
}
30923098

30933099
/**
@@ -4749,8 +4755,8 @@ public Summary apply(Source source, Target target, List<? extends Plugin.Factory
47494755
}
47504756
}
47514757
Source.Origin origin = source.read();
4752-
try {
4753-
ClassFileLocator classFileLocator = new ClassFileLocator.Compound(origin.getClassFileLocator(), this.classFileLocator);
4758+
try { // TODO: class file locator.
4759+
ClassFileLocator classFileLocator = new ClassFileLocator.Compound(origin.toClassFileLocator(null), this.classFileLocator);
47544760
TypePool typePool = poolStrategy.typePool(classFileLocator);
47554761
Manifest manifest = origin.getManifest();
47564762
listener.onManifest(manifest);

byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineDefaultTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ public void testUnresolved() throws Exception {
254254
Sample.class.getName().replace('.', '/') + ".class",
255255
ClassFileLocator.ForClassLoader.read(Sample.class))) {
256256
@Override
257-
public ClassFileLocator getClassFileLocator() {
257+
public ClassFileLocator toClassFileLocator() {
258258
return ClassFileLocator.NoOp.INSTANCE;
259259
}
260260
};

byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceCompoundTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ public class PluginEngineSourceCompoundTest {
5656
public void setUp() throws Exception {
5757
when(left.read()).thenReturn(leftOrigin);
5858
when(right.read()).thenReturn(rightOrigin);
59-
when(leftOrigin.getClassFileLocator()).thenReturn(leftLocator);
60-
when(rightOrigin.getClassFileLocator()).thenReturn(rightLocator);
59+
when(leftOrigin.toClassFileLocator(null)).thenReturn(leftLocator);
60+
when(rightOrigin.toClassFileLocator(null)).thenReturn(rightLocator);
6161
when(leftLocator.locate(Mockito.any(String.class))).thenReturn(new ClassFileLocator.Resolution.Illegal(FOO));
6262
when(rightLocator.locate(Mockito.any(String.class))).thenReturn(new ClassFileLocator.Resolution.Illegal(FOO));
6363
when(leftOrigin.iterator()).then(new Answer<Iterator<Plugin.Engine.Source.Element>>() {
@@ -81,7 +81,7 @@ public void testEmptyCompound() throws Exception {
8181

8282
@Test
8383
public void testClassFileLocator() throws Exception {
84-
assertThat(new Plugin.Engine.Source.Compound(Arrays.asList(left, right)).read().getClassFileLocator().locate(FOO).isResolved(), is(false));
84+
assertThat(new Plugin.Engine.Source.Compound(Arrays.asList(left, right)).read().toClassFileLocator(null).locate(FOO).isResolved(), is(false));
8585
verify(leftLocator).locate(FOO);
8686
verify(rightLocator).locate(FOO);
8787
}

byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceEmptyTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class PluginEngineSourceEmptyTest {
1313

1414
@Test
1515
public void testNonOperational() throws Exception {
16-
assertThat(Plugin.Engine.Source.Empty.INSTANCE.getClassFileLocator(), is((ClassFileLocator) ClassFileLocator.NoOp.INSTANCE));
16+
assertThat(Plugin.Engine.Source.Empty.INSTANCE.toClassFileLocator(null), is((ClassFileLocator) ClassFileLocator.NoOp.INSTANCE));
1717
assertThat(Plugin.Engine.Source.Empty.INSTANCE.getManifest(), nullValue(Manifest.class));
1818
assertThat(Plugin.Engine.Source.Empty.INSTANCE.iterator().hasNext(), is(false));
1919
}

byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceFilteringTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ public void testClassFileLocator() throws Exception {
8080
ClassFileLocator classFileLocator = mock(ClassFileLocator.class);
8181

8282
when(source.read()).thenReturn(origin);
83-
when(origin.getClassFileLocator()).thenReturn(classFileLocator);
83+
when(origin.toClassFileLocator(null)).thenReturn(classFileLocator);
8484

85-
assertThat(new Plugin.Engine.Source.Filtering(source, matcher).read().getClassFileLocator(), is(classFileLocator));
85+
assertThat(new Plugin.Engine.Source.Filtering(source, matcher).read().toClassFileLocator(null), is(classFileLocator));
8686
}
8787
}

byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceForFolderTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void testEmpty() throws Exception {
3535
Plugin.Engine.Source.Origin origin = new Plugin.Engine.Source.ForFolder(folder).read();
3636
try {
3737
assertThat(origin.getManifest(), nullValue(Manifest.class));
38-
assertThat(origin.getClassFileLocator().locate(Object.class.getName()).isResolved(), is(false));
38+
assertThat(origin.toClassFileLocator(null).locate(Object.class.getName()).isResolved(), is(false));
3939
assertThat(origin.iterator().hasNext(), is(false));
4040
} finally {
4141
origin.close();
@@ -54,9 +54,9 @@ public void testFile() throws Exception {
5454
Plugin.Engine.Source.Origin origin = new Plugin.Engine.Source.ForFolder(folder).read();
5555
try {
5656
assertThat(origin.getManifest(), nullValue(Manifest.class));
57-
assertThat(origin.getClassFileLocator().locate("Foo").isResolved(), is(true));
58-
assertThat(origin.getClassFileLocator().locate("Foo").resolve(), is(new byte[]{1, 2, 3}));
59-
assertThat(origin.getClassFileLocator().locate("Bar").isResolved(), is(false));
57+
assertThat(origin.toClassFileLocator(null).locate("Foo").isResolved(), is(true));
58+
assertThat(origin.toClassFileLocator(null).locate("Foo").resolve(), is(new byte[]{1, 2, 3}));
59+
assertThat(origin.toClassFileLocator(null).locate("Bar").isResolved(), is(false));
6060
Iterator<Plugin.Engine.Source.Element> iterator = origin.iterator();
6161
assertThat(iterator.hasNext(), is(true));
6262
Plugin.Engine.Source.Element element = iterator.next();
@@ -89,9 +89,9 @@ public void testFileInSubFolder() throws Exception {
8989
Plugin.Engine.Source.Origin origin = new Plugin.Engine.Source.ForFolder(folder).read();
9090
try {
9191
assertThat(origin.getManifest(), nullValue(Manifest.class));
92-
assertThat(origin.getClassFileLocator().locate("bar.Foo").isResolved(), is(true));
93-
assertThat(origin.getClassFileLocator().locate("bar.Foo").resolve(), is(new byte[]{1, 2, 3}));
94-
assertThat(origin.getClassFileLocator().locate("Bar").isResolved(), is(false));
92+
assertThat(origin.toClassFileLocator(null).locate("bar.Foo").isResolved(), is(true));
93+
assertThat(origin.toClassFileLocator(null).locate("bar.Foo").resolve(), is(new byte[]{1, 2, 3}));
94+
assertThat(origin.toClassFileLocator(null).locate("Bar").isResolved(), is(false));
9595
Iterator<Plugin.Engine.Source.Element> iterator = origin.iterator();
9696
assertThat(iterator.hasNext(), is(true));
9797
Plugin.Engine.Source.Element element = iterator.next();

byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceForJarFileTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.bytebuddy.build;
22

33
import net.bytebuddy.utility.StreamDrainer;
4-
import org.junit.After;
54
import org.junit.Before;
65
import org.junit.Rule;
76
import org.junit.Test;
@@ -41,9 +40,9 @@ public void testFile() throws Exception {
4140
Plugin.Engine.Source.Origin origin = new Plugin.Engine.Source.ForJarFile(this.file).read();
4241
try {
4342
assertThat(origin.getManifest(), nullValue(Manifest.class));
44-
assertThat(origin.getClassFileLocator().locate("Foo").isResolved(), is(true));
45-
assertThat(origin.getClassFileLocator().locate("Foo").resolve(), is(new byte[]{1, 2, 3}));
46-
assertThat(origin.getClassFileLocator().locate("Bar").isResolved(), is(false));
43+
assertThat(origin.toClassFileLocator(null).locate("Foo").isResolved(), is(true));
44+
assertThat(origin.toClassFileLocator(null).locate("Foo").resolve(), is(new byte[]{1, 2, 3}));
45+
assertThat(origin.toClassFileLocator(null).locate("Bar").isResolved(), is(false));
4746
Iterator<Plugin.Engine.Source.Element> iterator = origin.iterator();
4847
assertThat(iterator.hasNext(), is(true));
4948
Plugin.Engine.Source.Element element = iterator.next();
@@ -75,9 +74,9 @@ public void testFileInSubFolder() throws Exception {
7574
Plugin.Engine.Source.Origin origin = new Plugin.Engine.Source.ForJarFile(this.file).read();
7675
try {
7776
assertThat(origin.getManifest(), nullValue(Manifest.class));
78-
assertThat(origin.getClassFileLocator().locate("bar.Foo").isResolved(), is(true));
79-
assertThat(origin.getClassFileLocator().locate("bar.Foo").resolve(), is(new byte[]{1, 2, 3}));
80-
assertThat(origin.getClassFileLocator().locate("Bar").isResolved(), is(false));
77+
assertThat(origin.toClassFileLocator(null).locate("bar.Foo").isResolved(), is(true));
78+
assertThat(origin.toClassFileLocator(null).locate("bar.Foo").resolve(), is(new byte[]{1, 2, 3}));
79+
assertThat(origin.toClassFileLocator(null).locate("Bar").isResolved(), is(false));
8180
Iterator<Plugin.Engine.Source.Element> iterator = origin.iterator();
8281
assertThat(iterator.hasNext(), is(true));
8382
Plugin.Engine.Source.Element element = iterator.next();

byte-buddy-dep/src/test/java/net/bytebuddy/build/PluginEngineSourceInMemoryTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public class PluginEngineSourceInMemoryTest {
2020
public void testNoManifest() throws Exception {
2121
Plugin.Engine.Source.Origin origin = new Plugin.Engine.Source.InMemory(Collections.singletonMap("foo/Bar.class", new byte[]{1, 2, 3})).read();
2222
try {
23-
assertThat(origin.getClassFileLocator().locate("foo.Bar").isResolved(), is(true));
24-
assertThat(origin.getClassFileLocator().locate("foo.Bar").resolve(), is(new byte[]{1, 2, 3}));
25-
assertThat(origin.getClassFileLocator().locate("qux.Baz").isResolved(), is(false));
23+
assertThat(origin.toClassFileLocator().locate("foo.Bar").isResolved(), is(true));
24+
assertThat(origin.toClassFileLocator().locate("foo.Bar").resolve(), is(new byte[]{1, 2, 3}));
25+
assertThat(origin.toClassFileLocator().locate("qux.Baz").isResolved(), is(false));
2626
assertThat(origin.getManifest(), nullValue(Manifest.class));
2727
Iterator<Plugin.Engine.Source.Element> iterator = origin.iterator();
2828
assertThat(iterator.hasNext(), is(true));
@@ -40,9 +40,9 @@ public void testNoManifest() throws Exception {
4040
public void testOfTypes() throws Exception {
4141
Plugin.Engine.Source.Origin origin = Plugin.Engine.Source.InMemory.ofTypes(Foo.class).read();
4242
try {
43-
assertThat(origin.getClassFileLocator().locate(Foo.class.getName()).isResolved(), is(true));
44-
assertThat(origin.getClassFileLocator().locate(Foo.class.getName()).resolve(), is(ClassFileLocator.ForClassLoader.read(Foo.class)));
45-
assertThat(origin.getClassFileLocator().locate("qux.Baz").isResolved(), is(false));
43+
assertThat(origin.toClassFileLocator(null).locate(Foo.class.getName()).isResolved(), is(true));
44+
assertThat(origin.toClassFileLocator(null).locate(Foo.class.getName()).resolve(), is(ClassFileLocator.ForClassLoader.read(Foo.class)));
45+
assertThat(origin.toClassFileLocator(null).locate("qux.Baz").isResolved(), is(false));
4646
assertThat(origin.getManifest(), nullValue(Manifest.class));
4747
Iterator<Plugin.Engine.Source.Element> iterator = origin.iterator();
4848
assertThat(iterator.hasNext(), is(true));
@@ -64,7 +64,7 @@ public void testManifest() throws Exception {
6464
manifest.write(outputStream);
6565
Plugin.Engine.Source.Origin origin = new Plugin.Engine.Source.InMemory(Collections.singletonMap(JarFile.MANIFEST_NAME, outputStream.toByteArray())).read();
6666
try {
67-
assertThat(origin.getClassFileLocator().locate("foo.Bar").isResolved(), is(false));
67+
assertThat(origin.toClassFileLocator(null).locate("foo.Bar").isResolved(), is(false));
6868
assertThat(origin.getManifest(), notNullValue(Manifest.class));
6969
assertThat(origin.getManifest().getMainAttributes().getValue(Attributes.Name.MANIFEST_VERSION), is((Object) "1.0"));
7070
} finally {

0 commit comments

Comments
 (0)