Skip to content

Commit 0668c5d

Browse files
committed
Addtional tuning
1 parent dadb032 commit 0668c5d

File tree

7 files changed

+76
-37
lines changed

7 files changed

+76
-37
lines changed

src/main/java/org/kohsuke/github/GHCommitFileIterable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ private static PaginatedEndpoint<GHCommitFilesPage, File> createEndpointIterable
2323
PaginatedEndpoint<GHCommitFilesPage, File> iterable;
2424
if (files != null && files.length < GH_FILE_LIMIT_PER_COMMIT_PAGE) {
2525
// create a page iterator that only provides one page
26-
iterable = PaginatedEndpoint.ofSinglePage(new GHCommitFilesPage(files), GHCommit.File.class);
26+
iterable = PaginatedEndpoint.fromSinglePage(new GHCommitFilesPage(files), GHCommit.File.class);
2727
} else {
2828
GitHubRequest request = owner.root()
2929
.createRequest()

src/main/java/org/kohsuke/github/GHCompare.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ public PagedIterable<Commit> listCommits() {
346346
.withPageSize(10);
347347
} else {
348348
// if not using paginated commits, adapt the returned commits array
349-
return new PagedIterable<>(PaginatedEndpoint.ofSinglePage(this.commits, Commit.class));
349+
return new PagedIterable<>(PaginatedEndpoint.fromSinglePage(this.commits, Commit.class));
350350
}
351351
}
352352

src/main/java/org/kohsuke/github/PaginatedEndpoint.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,30 @@ public I[] getItems() {
9191
}
9292
}
9393

94-
private static class SinglePage<P extends GitHubPage<I>, I> extends PaginatedEndpoint<P, I> {
94+
private static class SinglePageEndpoint<P extends GitHubPage<I>, I> extends PaginatedEndpoint<P, I> {
9595
private final P page;
9696

97-
SinglePage(P page, Class<I> itemType) {
97+
SinglePageEndpoint(P page, Class<I> itemType) {
9898
super(null, null, (Class<P>) page.getClass(), itemType, null);
9999
this.page = page;
100100
}
101101

102102
@Nonnull
103103
@Override
104104
public PaginatedEndpointPages<P, I> pages() {
105-
return PaginatedEndpointPages.ofSinglePage(pageType, page);
105+
return PaginatedEndpointPages.fromSinglePage(pageType, page);
106106
}
107107

108108
}
109109

110+
static <I> PaginatedEndpoint<GitHubArrayPage<I>, I> fromSinglePage(I[] array, Class<I> itemType) {
111+
return fromSinglePage(new GitHubArrayPage<>(array), itemType);
112+
}
113+
114+
static <P extends GitHubPage<I>, I> PaginatedEndpoint<P, I> fromSinglePage(P page, Class<I> itemType) {
115+
return new SinglePageEndpoint<>(page, itemType);
116+
}
117+
110118
static <I> PaginatedEndpoint<GitHubArrayPage<I>, I> ofArrayEndpoint(GitHubClient client,
111119
GitHubRequest request,
112120
Class<I[]> receiverType,
@@ -118,14 +126,6 @@ static <I> PaginatedEndpoint<GitHubArrayPage<I>, I> ofArrayEndpoint(GitHubClient
118126
itemInitializer);
119127
}
120128

121-
static <I> PaginatedEndpoint<GitHubArrayPage<I>, I> ofSinglePage(I[] array, Class<I> itemType) {
122-
return ofSinglePage(new GitHubArrayPage<>(array), itemType);
123-
}
124-
125-
static <P extends GitHubPage<I>, I> PaginatedEndpoint<P, I> ofSinglePage(P page, Class<I> itemType) {
126-
return new SinglePage<>(page, itemType);
127-
}
128-
129129
protected final GitHubClient client;
130130
protected final Consumer<Item> itemInitializer;
131131
protected final Class<Item> itemType;

src/main/java/org/kohsuke/github/PaginatedEndpointPages.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*/
2727
class PaginatedEndpointPages<P extends GitHubPage<Item>, Item> implements java.util.Iterator<P> {
2828

29-
static <P extends GitHubPage<Item>, Item> PaginatedEndpointPages<P, Item> ofSinglePage(Class<P> pageType,
29+
static <P extends GitHubPage<Item>, Item> PaginatedEndpointPages<P, Item> fromSinglePage(Class<P> pageType,
3030
final P page) {
3131
return new PaginatedEndpointPages<>(pageType, page);
3232
}

src/main/resources/META-INF/native-image/org.kohsuke/github-api/reflect-config.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6958,5 +6958,20 @@
69586958
"allDeclaredMethods": true,
69596959
"allPublicClasses": true,
69606960
"allDeclaredClasses": true
6961+
},
6962+
{
6963+
"name": "org.kohsuke.github.PaginatedEndpoint$SinglePageEndpoint",
6964+
"allPublicFields": true,
6965+
"allDeclaredFields": true,
6966+
"queryAllPublicConstructors": true,
6967+
"queryAllDeclaredConstructors": true,
6968+
"allPublicConstructors": true,
6969+
"allDeclaredConstructors": true,
6970+
"queryAllPublicMethods": true,
6971+
"queryAllDeclaredMethods": true,
6972+
"allPublicMethods": true,
6973+
"allDeclaredMethods": true,
6974+
"allPublicClasses": true,
6975+
"allDeclaredClasses": true
69616976
}
69626977
]

src/main/resources/META-INF/native-image/org.kohsuke/github-api/serialization-config.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,5 +1393,8 @@
13931393
},
13941394
{
13951395
"name": "org.kohsuke.github.PaginatedEndpointPages"
1396+
},
1397+
{
1398+
"name": "org.kohsuke.github.PaginatedEndpoint$SinglePageEndpoint"
13961399
}
13971400
]

src/test/java/org/kohsuke/github/AotIntegrationTest.java

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -41,41 +41,62 @@ public AotIntegrationTest() {
4141
public void testIfAllRequiredClassesAreRegisteredForAot() throws IOException {
4242
String artifactId = System.getProperty("test.projectArtifactId", "default");
4343

44-
Stream<String> providedReflectionConfigStreamOfNames = readAotConfigToStreamOfClassNames(
45-
"./target/classes/META-INF/native-image/org.kohsuke/" + artifactId + "/reflect-config.json");
46-
Stream<String> providedNoReflectStreamOfNames = Files
47-
.lines(Path.of("./target/test-classes/no-reflect-and-serialization-list"));
48-
Stream<String> providedSerializationStreamOfNames = readAotConfigToStreamOfClassNames(
49-
"./target/classes/META-INF/native-image/org.kohsuke/" + artifactId + "/serialization-config.json");
50-
Stream<String> providedAotConfigClassNamesPart = Stream
51-
.concat(providedSerializationStreamOfNames,
52-
Stream.concat(providedReflectionConfigStreamOfNames, providedNoReflectStreamOfNames))
53-
.distinct();
54-
List<String> providedReflectionAndNoReflectionConfigNames = providedAotConfigClassNamesPart
44+
String reflectConfigPath = "./target/classes/META-INF/native-image/org.kohsuke/" + artifactId
45+
+ "/reflect-config.json";
46+
String noReflectPath = "./target/test-classes/no-reflect-and-serialization-list";
47+
String serializationConfigPath = "./target/classes/META-INF/native-image/org.kohsuke/" + artifactId
48+
+ "/serialization-config.json";
49+
String generatedReflectConfigPath = "./target/spring-aot/test/resources/META-INF/native-image/org.kohsuke/"
50+
+ artifactId + "/reflect-config.json";
51+
String generatedSerializationConfigPath = "./target/spring-aot/test/resources/META-INF/native-image/org.kohsuke/"
52+
+ artifactId + "/serialization-config.json";
53+
54+
Stream<String> reflectConfigNames = readAotConfigToStreamOfClassNames(reflectConfigPath);
55+
Stream<String> noReflectNames = Files.lines(Path.of(noReflectPath));
56+
Stream<String> serializationNames = readAotConfigToStreamOfClassNames(serializationConfigPath);
57+
List<String> allConfigClassNames = Stream
58+
.concat(serializationNames, Stream.concat(reflectConfigNames, noReflectNames))
59+
.distinct()
60+
.sorted()
61+
.collect(Collectors.toList());
62+
63+
Stream<String> generatedReflectConfigNames = readAotConfigToStreamOfClassNames(generatedReflectConfigPath);
64+
Stream<String> generatedSerializationNames = readAotConfigToStreamOfClassNames(
65+
generatedSerializationConfigPath);
66+
List<String> allGeneratedConfigClassNames = Stream
67+
.concat(generatedReflectConfigNames, generatedSerializationNames)
68+
.distinct()
69+
.sorted()
5570
.collect(Collectors.toList());
5671

57-
Stream<String> generatedReflectConfigStreamOfClassNames = readAotConfigToStreamOfClassNames(
58-
"./target/spring-aot/test/resources/META-INF/native-image/org.kohsuke/" + artifactId
59-
+ "/reflect-config.json");
60-
Stream<String> generatedSerializationStreamOfNames = readAotConfigToStreamOfClassNames(
61-
"./target/spring-aot/test/resources/META-INF/native-image/org.kohsuke/" + artifactId
62-
+ "/serialization-config.json");
63-
Stream<String> generatedAotConfigClassNames = Stream.concat(generatedReflectConfigStreamOfClassNames,
64-
generatedSerializationStreamOfNames);
72+
StringBuilder failures = new StringBuilder();
6573

66-
generatedAotConfigClassNames.forEach(generatedReflectionConfigClassName -> {
74+
allGeneratedConfigClassNames.forEach(generatedReflectionConfigClassName -> {
6775
try {
68-
if (!providedReflectionAndNoReflectionConfigNames.contains(generatedReflectionConfigClassName)) {
69-
fail(String.format(
76+
if (!allConfigClassNames.contains(generatedReflectionConfigClassName)) {
77+
failures.append(String.format(
7078
Files.readString(
7179
Path.of("./target/test-classes/reflection-and-serialization-test-error-message")),
72-
generatedReflectionConfigClassName));
80+
generatedReflectionConfigClassName)).append('\n');
7381
}
7482
} catch (IOException e) {
7583
throw new RuntimeException(e);
7684
}
7785
});
7886

87+
// Future cleanup
88+
// allConfigClassNames.forEach(reflectionConfigClassName -> {
89+
// if (!allGeneratedConfigClassNames.contains(reflectionConfigClassName)) {
90+
// failures.append(
91+
// String.format("Extra class name found in config files: %1$s\n", reflectionConfigClassName));
92+
// }
93+
// });
94+
95+
// Report all failures at once rather than one at a time
96+
String failureString = failures.toString();
97+
if (!failureString.isEmpty()) {
98+
fail("\n" + failureString);
99+
}
79100
}
80101

81102
private Stream<String> readAotConfigToStreamOfClassNames(String reflectionConfig) throws IOException {

0 commit comments

Comments
 (0)