diff --git a/commafeed-server/pom.xml b/commafeed-server/pom.xml index 6c1ba4de..270bdd1c 100644 --- a/commafeed-server/pom.xml +++ b/commafeed-server/pom.xml @@ -456,6 +456,13 @@ 1.46.0 test + + org.reflections + reflections + 0.10.2 + test + + diff --git a/commafeed-server/src/main/java/com/commafeed/NativeImageClasses.java b/commafeed-server/src/main/java/com/commafeed/NativeImageClasses.java index c1715beb..9f5211d9 100644 --- a/commafeed-server/src/main/java/com/commafeed/NativeImageClasses.java +++ b/commafeed-server/src/main/java/com/commafeed/NativeImageClasses.java @@ -14,10 +14,23 @@ import io.quarkus.runtime.annotations.RegisterForReflection; // metrics MetricRegistry.class, Meter.class, Gauge.class, Counter.class, Timer.class, Histogram.class, - // rome - java.util.Date.class, com.rometools.rome.feed.module.DCModuleImpl.class, com.rometools.rome.feed.module.DCSubjectImpl.class, - com.rometools.modules.content.ContentModuleImpl.class, com.rometools.modules.mediarss.MediaModuleImpl.class, - com.rometools.modules.mediarss.MediaEntryModuleImpl.class, + // rome modules + java.util.Date.class, com.rometools.modules.sse.modules.Conflict.class, com.rometools.modules.sse.modules.Conflicts.class, + com.rometools.modules.cc.CreativeCommonsImpl.class, com.rometools.modules.feedpress.modules.FeedpressModuleImpl.class, + com.rometools.modules.opensearch.impl.OpenSearchModuleImpl.class, com.rometools.modules.sse.modules.Sharing.class, + com.rometools.modules.georss.SimpleModuleImpl.class, com.rometools.modules.atom.modules.AtomLinkModuleImpl.class, + com.rometools.modules.itunes.EntryInformationImpl.class, com.rometools.modules.sse.modules.Update.class, + com.rometools.modules.photocast.PhotocastModuleImpl.class, com.rometools.modules.itunes.FeedInformationImpl.class, + com.rometools.modules.yahooweather.YWeatherModuleImpl.class, com.rometools.modules.feedburner.FeedBurnerImpl.class, + com.rometools.modules.sse.modules.Related.class, com.rometools.modules.fyyd.modules.FyydModuleImpl.class, + com.rometools.modules.psc.modules.PodloveSimpleChapterModuleImpl.class, com.rometools.modules.thr.ThreadingModuleImpl.class, + com.rometools.modules.sse.modules.Sync.class, com.rometools.modules.sle.SimpleListExtensionImpl.class, + com.rometools.modules.slash.SlashImpl.class, com.rometools.modules.sse.modules.History.class, + com.rometools.modules.georss.GMLModuleImpl.class, com.rometools.modules.base.CustomTagsImpl.class, + com.rometools.modules.base.GoogleBaseImpl.class, com.rometools.modules.sle.SleEntryImpl.class, + com.rometools.modules.mediarss.MediaEntryModuleImpl.class, com.rometools.modules.content.ContentModuleImpl.class, + com.rometools.modules.georss.W3CGeoModuleImpl.class, com.rometools.rome.feed.module.DCModuleImpl.class, + com.rometools.modules.mediarss.MediaModuleImpl.class, com.rometools.rome.feed.module.SyModuleImpl.class, // extracted from all 3 rome.properties files of rome library com.rometools.rome.io.impl.RSS090Parser.class, com.rometools.rome.io.impl.RSS091NetscapeParser.class, diff --git a/commafeed-server/src/test/java/com/commafeed/NativeImageClassesTest.java b/commafeed-server/src/test/java/com/commafeed/NativeImageClassesTest.java new file mode 100644 index 00000000..8b00dd90 --- /dev/null +++ b/commafeed-server/src/test/java/com/commafeed/NativeImageClassesTest.java @@ -0,0 +1,38 @@ +package com.commafeed; + +import java.lang.reflect.Modifier; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.reflections.Reflections; +import org.reflections.scanners.Scanners; + +import com.rometools.rome.feed.module.Module; +import com.rometools.rome.io.WireFeedGenerator; +import com.rometools.rome.io.WireFeedParser; + +import io.quarkus.runtime.annotations.RegisterForReflection; + +class NativeImageClassesTest { + + @Test + void annotationContainsAllRequiredRomeClasses() { + Reflections reflections = new Reflections("com.rometools"); + Set> classesInAnnotation = Set + .copyOf(List.of(NativeImageClasses.class.getAnnotation(RegisterForReflection.class).targets())); + + for (Class clazz : Set.of(Module.class, WireFeedParser.class, WireFeedGenerator.class)) { + Set> moduleClasses = new HashSet<>(reflections.get(Scanners.SubTypes.of(clazz).asClass())); + moduleClasses.removeIf(c -> c.isInterface() || Modifier.isAbstract(c.getModifiers())); + moduleClasses.removeAll(classesInAnnotation); + + moduleClasses.forEach(c -> System.out.println(c.getName() + ".class,")); + Assertions.assertEquals(Set.of(), moduleClasses); + } + + } + +} \ No newline at end of file