Repository: quarkusio/quarkus
Issue: Changes to configmappings not being applied during hot reload

### Describe the bug

Newly added configmappings are only available for injection after a full restart. A hot reload is not enough.
Removed configmappings result in class not found exceptions.



### Expected behavior

Configmappings work directly after a hot reload, and do not require a full restart.

### Actual behavior

Startet without the mapping, and adding it. After hot reload this exception happens:
```
__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \\/ / / / _ | / _ \\/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\\ \\   
--\\___\\_\\____/_/ |_/_/|_/_/|_|\\____/___/   
2022-12-02 06:39:52,101 INFO  [io.quarkus] (Quarkus Main Thread) unremovable-configmapping 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.14.2.Final) started in 0.405s. Listening on: http://localhost:8080
2022-12-02 06:39:52,102 INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2022-12-02 06:39:52,102 INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]
2022-12-02 06:39:52,102 INFO  [io.qua.dep.dev.RuntimeUpdatesProcessor] (vert.x-worker-thread-0) Live reload total time: 1.175s 
2022-12-02 06:39:52,108 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-0) HTTP Request to /hello failed, error id: aa2f8dcb-6516-4407-84ff-02d755799c76-1: java.lang.RuntimeException: Error injecting org.acme.AppConfig org.acme.GreetingResource.config
	at org.acme.GreetingResource_Bean.create(Unknown Source)
	at org.acme.GreetingResource_Bean.create(Unknown Source)
	at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:113)
	at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:37)
	at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:34)
	at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:26)
	at io.quarkus.arc.impl.ComputingCache.computeIfAbsent(ComputingCache.java:69)
	at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:34)
	at org.acme.GreetingResource_Bean.get(Unknown Source)
	at org.acme.GreetingResource_Bean.get(Unknown Source)
	at io.quarkus.arc.impl.ArcContainerImpl.beanInstanceHandle(ArcContainerImpl.java:476)
	at io.quarkus.arc.impl.ArcContainerImpl.beanInstanceHandle(ArcContainerImpl.java:489)
	at io.quarkus.arc.impl.ArcContainerImpl$2.get(ArcContainerImpl.java:279)
	at io.quarkus.arc.impl.ArcContainerImpl$2.get(ArcContainerImpl.java:276)
	at io.quarkus.arc.runtime.BeanContainerImpl$1.create(BeanContainerImpl.java:46)
	at io.quarkus.resteasy.reactive.common.runtime.ArcBeanFactory.createInstance(ArcBeanFactory.java:27)
	at org.jboss.resteasy.reactive.server.handlers.InstanceHandler.handle(InstanceHandler.java:26)
	at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:112)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:145)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:576)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.util.NoSuchElementException: SRCFG00027: Could not find a mapping for org.acme.AppConfig
	at io.smallrye.config.ConfigMappings.getConfigMapping(ConfigMappings.java:101)
	at io.smallrye.config.SmallRyeConfig.getConfigMapping(SmallRyeConfig.java:415)
	at io.quarkus.arc.runtime.ConfigMappingCreator.create(ConfigMappingCreator.java:31)
	at org.acme.AppConfig_3b122e7acaecf984e5d14008b48492761a901be1_Synthetic_Bean.create(Unknown Source)
	at org.acme.AppConfig_3b122e7acaecf984e5d14008b48492761a901be1_Synthetic_Bean.get(Unknown Source)
	at org.acme.AppConfig_3b122e7acaecf984e5d14008b48492761a901be1_Synthetic_Bean.get(Unknown Source)
	at io.quarkus.arc.impl.CurrentInjectionPointProvider.get(CurrentInjectionPointProvider.java:62)
	... 26 more

2022-12-02 06:39:52,110 ERROR [org.jbo.res.rea.com.cor.AbstractResteasyReactiveContext] (executor-thread-0) Request failed: java.lang.RuntimeException: Error injecting org.acme.AppConfig org.acme.GreetingResource.config
	at org.acme.GreetingResource_Bean.create(Unknown Source)
	at org.acme.GreetingResource_Bean.create(Unknown Source)
	at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:113)
	at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:37)
	at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:34)
	at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:26)
	at io.quarkus.arc.impl.ComputingCache.computeIfAbsent(ComputingCache.java:69)
	at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:34)
	at org.acme.GreetingResource_Bean.get(Unknown Source)
	at org.acme.GreetingResource_Bean.get(Unknown Source)
	at io.quarkus.arc.impl.ArcContainerImpl.beanInstanceHandle(ArcContainerImpl.java:476)
	at io.quarkus.arc.impl.ArcContainerImpl.beanInstanceHandle(ArcContainerImpl.java:489)
	at io.quarkus.arc.impl.ArcContainerImpl$2.get(ArcContainerImpl.java:279)
	at io.quarkus.arc.impl.ArcContainerImpl$2.get(ArcContainerImpl.java:276)
	at io.quarkus.arc.runtime.BeanContainerImpl$1.create(BeanContainerImpl.java:46)
	at io.quarkus.resteasy.reactive.common.runtime.ArcBeanFactory.createInstance(ArcBeanFactory.java:27)
	at org.jboss.resteasy.reactive.server.handlers.InstanceHandler.handle(InstanceHandler.java:26)
	at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:112)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:145)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:576)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.util.NoSuchElementException: SRCFG00027: Could not find a mapping for org.acme.AppConfig
	at io.smallrye.config.ConfigMappings.getConfigMapping(ConfigMappings.java:101)
	at io.smallrye.config.SmallRyeConfig.getConfigMapping(SmallRyeConfig.java:415)
	at io.quarkus.arc.runtime.ConfigMappingCreator.create(ConfigMappingCreator.java:31)
	at org.acme.AppConfig_3b122e7acaecf984e5d14008b48492761a901be1_Synthetic_Bean.create(Unknown Source)
	at org.acme.AppConfig_3b122e7acaecf984e5d14008b48492761a901be1_Synthetic_Bean.get(Unknown Source)
	at org.acme.AppConfig_3b122e7acaecf984e5d14008b48492761a901be1_Synthetic_Bean.get(Unknown Source)
	at io.quarkus.arc.impl.CurrentInjectionPointProvider.get(CurrentInjectionPointProvider.java:62)
	... 26 more

```

Starting with mapping, and removing it. After hot reload this exception happens:
```
java.lang.ClassNotFoundException: org.acme.AppConfig
	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:479)
	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:455)
	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:505)
	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:455)
	at io.quarkus.runtime.configuration.ConfigUtils.addMapping(ConfigUtils.java:257)
	at io.quarkus.runtime.generated.Config.readConfig(Unknown Source)
	at io.quarkus.deployment.steps.RuntimeConfigSetup.deploy(Unknown Source)
	at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
	at io.quarkus.runtime.Application.start(Application.java:101)
	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:110)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:70)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:43)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:123)
	at io.quarkus.runner.GeneratedMain.main(Unknown Source)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
	at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:104)
	at java.base/java.lang.Thread.run(Thread.java:1589)
Resulted in: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.acme.AppConfig
	at io.quarkus.runtime.configuration.ConfigUtils.addMapping(ConfigUtils.java:259)
	... 13 more
Resulted in: java.lang.RuntimeException: Failed to start quarkus
	... 11 more
Resulted in: io.quarkus.dev.appstate.ApplicationStartException: java.lang.RuntimeException: Failed to start quarkus
	at io.quarkus.dev.appstate.ApplicationStateNotification.waitForApplicationStart(ApplicationStateNotification.java:58)
	at io.quarkus.runner.bootstrap.StartupActionImpl.runMainClass(StartupActionImpl.java:123)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.restartApp(IsolatedDevModeMain.java:222)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.restartCallback(IsolatedDevModeMain.java:203)
	at io.quarkus.deployment.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:537)
	at io.quarkus.deployment.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:437)
	at io.quarkus.vertx.http.runtime.devmode.VertxHttpHotReplacementSetup$4.handle(VertxHttpHotReplacementSetup.java:152)
	at io.quarkus.vertx.http.runtime.devmode.VertxHttpHotReplacementSetup$4.handle(VertxHttpHotReplacementSetup.java:139)
	at io.vertx.core.impl.ContextBase.lambda$null$0(ContextBase.java:137)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264)
	at io.vertx.core.impl.ContextBase.lambda$executeBlocking$1(ContextBase.java:135)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	... 1 more
```

### How to Reproduce?

Reproducer: 
[unremovable-configmapping.zip](https://github.com/quarkusio/quarkus/files/10138391/unremovable-configmapping.zip)


1. mvn quarkus:dev
2. Go to http://localhost:8080/hello -> no exception
3. Add a ConfigMapping Class like:
```
@ConfigMapping(prefix = "appconfig")
public interface AppConfig {
    String defaultLanguage();
}
```
4. In GreetingResource, switch the commented out lines around so that the configmapping is used, and defaultLanguage() is returned in the resource
5. Go to http://localhost:8080/hello -> first exception from above
6. shut down quarkus
7. mvn quarkus:dev
8. Go to http://localhost:8080/hello -> no exception
9. Completly remove the configmapping -> Class Not found Exception

### Output of `uname -a` or `ver`

Microsoft Windows [Version 10.0.19044.2251]   

### Output of `java -version`

openjdk 19 2022-09-20 OpenJDK Runtime Environment Temurin-19+36 (build 19+36) OpenJDK 64-Bit Server VM Temurin-19+36 (build 19+36, mixed mode, sharing)

### GraalVM version (if different from Java)

_No response_

### Quarkus version or git rev

2.14.2.Final

### Build tool (ie. output of `mvnw --version` or `gradlew --version`)

Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537) Maven home: C:\\eclipse\\tools\\java\\maven Java version: 17.0.4, vendor: Eclipse Adoptium, runtime: C:\\eclipse\\tools\\java\\17 Default locale: de_DE, platform encoding: Cp1252 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

### Additional information

_No response_

Changed files:
core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigGenerationBuildStep.java
core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java
integration-tests/test-extension/extension/deployment/src/test/java/io/quarkus/config/SecretKeysConfigTest.java

diff --git a/core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java b/core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java
index b841edc24ee..111b6171fdb 100644
--- a/core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java
+++ b/core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java
@@ -403,11 +403,6 @@ public static final class GenerateOperation implements AutoCloseable {
                 clinit.invokeStaticMethod(CU_ADD_SOURCE_FACTORY_PROVIDER, buildTimeBuilder,
                         clinit.newInstance(RCSF_NEW, clinit.load(discoveredConfigSourceFactory)));
             }
-            // add mappings
-            for (ConfigClassWithPrefix configMapping : staticConfigMappings) {
-                clinit.invokeStaticMethod(CU_WITH_MAPPING, buildTimeBuilder,
-                        clinit.load(configMapping.getKlass().getName()), clinit.load(configMapping.getPrefix()));
-            }
 
             // additional config builders
             ResultHandle configBuilders = clinit.newInstance(AL_NEW);
@@ -468,11 +463,12 @@ public void run() {
                     reinit.invokeStaticMethod(CU_ADD_SOURCE_FACTORY_PROVIDER, buildTimeBuilder,
                             reinit.newInstance(RCSF_NEW, reinit.load(discoveredConfigSourceFactory)));
                 }
-                // add mappings
-                for (ConfigClassWithPrefix configMapping : staticConfigMappings) {
-                    reinit.invokeStaticMethod(CU_WITH_MAPPING, buildTimeBuilder,
-                            reinit.load(configMapping.getKlass().getName()), reinit.load(configMapping.getPrefix()));
+                // additional config builders
+                ResultHandle configBuilders = reinit.newInstance(AL_NEW);
+                for (String configBuilder : staticConfigBuilders) {
+                    reinit.invokeVirtualMethod(AL_ADD, configBuilders, reinit.load(configBuilder));
                 }
+                reinit.invokeStaticMethod(CU_CONFIG_BUILDER_LIST, buildTimeBuilder, configBuilders);
 
                 ResultHandle clinitConfig = reinit.checkCast(reinit.invokeVirtualMethod(SRCB_BUILD, buildTimeBuilder),
                         SmallRyeConfig.class);
@@ -555,12 +551,6 @@ public void run() {
                     readBootstrapConfig.invokeStaticMethod(CU_ADD_SOURCE_FACTORY_PROVIDER, bootstrapBuilder,
                             readBootstrapConfig.newInstance(RCSF_NEW, readBootstrapConfig.load(discoveredConfigSourceFactory)));
                 }
-                // add bootstrap mappings
-                for (ConfigClassWithPrefix configMapping : staticConfigMappings) {
-                    readBootstrapConfig.invokeStaticMethod(CU_WITH_MAPPING, bootstrapBuilder,
-                            readBootstrapConfig.load(configMapping.getKlass().getName()),
-                            readBootstrapConfig.load(configMapping.getPrefix()));
-                }
 
                 // add bootstrap config builders
                 ResultHandle bootstrapConfigBuilders = readBootstrapConfig.newInstance(AL_NEW);
@@ -649,12 +639,6 @@ public void run() {
                         readConfig.newInstance(RCSF_NEW, readConfig.load(discoveredConfigSourceFactory)));
             }
 
-            // add mappings
-            for (ConfigClassWithPrefix configMapping : runtimeConfigMappings) {
-                readConfig.invokeStaticMethod(CU_WITH_MAPPING, runTimeBuilder,
-                        readConfig.load(configMapping.getKlass().getName()), readConfig.load(configMapping.getPrefix()));
-            }
-
             // additional config builders
             ResultHandle configBuilders = readConfig.newInstance(AL_NEW);
             for (String configBuilder : runtimeConfigBuilders) {
diff --git a/core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigGenerationBuildStep.java b/core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigGenerationBuildStep.java
index 111a05329b9..4a9aa31c796 100644
--- a/core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigGenerationBuildStep.java
+++ b/core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigGenerationBuildStep.java
@@ -88,6 +88,10 @@ public class ConfigGenerationBuildStep {
             SmallRyeConfigBuilder.class, "withSources",
             SmallRyeConfigBuilder.class, ConfigSource[].class);
 
+    private static final MethodDescriptor WITH_MAPPING = MethodDescriptor.ofMethod(
+            SmallRyeConfigBuilder.class, "withMapping",
+            SmallRyeConfigBuilder.class, Class.class, String.class);
+
     @BuildStep
     void staticInitSources(
             BuildProducer<StaticInitConfigSourceProviderBuildItem> staticInitConfigSourceProviderBuildItem,
@@ -217,6 +221,33 @@ void extensionMappings(ConfigurationBuildItem configItem,
         }
     }
 
+    @BuildStep
+    void builderMappings(
+            ConfigurationBuildItem configItem,
+            List<ConfigMappingBuildItem> configMappings,
+            BuildProducer<GeneratedClassBuildItem> generatedClass,
+            BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
+            BuildProducer<StaticInitConfigBuilderBuildItem> staticInitConfigBuilder,
+            BuildProducer<RunTimeConfigBuilderBuildItem> runTimeConfigBuilder) {
+
+        // For Static Init Config
+        Set<ConfigClassWithPrefix> staticMappings = new HashSet<>();
+        staticMappings.addAll(staticSafeConfigMappings(configMappings));
+        staticMappings.addAll(configItem.getReadResult().getBuildTimeRunTimeMappings());
+        String staticInitMappingsConfigBuilder = "io.quarkus.runtime.generated.StaticInitMappingsConfigBuilder";
+        generateMappingsConfigBuilder(generatedClass, reflectiveClass, staticInitMappingsConfigBuilder, staticMappings);
+        staticInitConfigBuilder.produce(new StaticInitConfigBuilderBuildItem(staticInitMappingsConfigBuilder));
+
+        // For RunTime Config
+        Set<ConfigClassWithPrefix> runTimeMappings = new HashSet<>();
+        runTimeMappings.addAll(runtimeConfigMappings(configMappings));
+        runTimeMappings.addAll(configItem.getReadResult().getBuildTimeRunTimeMappings());
+        runTimeMappings.addAll(configItem.getReadResult().getRunTimeMappings());
+        String runTimeMappingsConfigBuilder = "io.quarkus.runtime.generated.RunTimeMappingsConfigBuilder";
+        generateMappingsConfigBuilder(generatedClass, reflectiveClass, runTimeMappingsConfigBuilder, runTimeMappings);
+        runTimeConfigBuilder.produce(new RunTimeConfigBuilderBuildItem(runTimeMappingsConfigBuilder));
+    }
+
     /**
      * Generate the Config class that instantiates MP Config and holds all the config objects
      */
@@ -256,6 +287,7 @@ void generateConfigClass(
         staticConfigSourceFactories.addAll(staticInitConfigSourceFactories.stream()
                 .map(StaticInitConfigSourceFactoryBuildItem::getFactoryClassName).collect(Collectors.toSet()));
 
+        // TODO - duplicated now builderMappings. Still required to filter the unknown properties
         Set<ConfigClassWithPrefix> staticMappings = new HashSet<>();
         staticMappings.addAll(staticSafeConfigMappings(configMappings));
         staticMappings.addAll(configItem.getReadResult().getBuildTimeRunTimeMappings());
@@ -484,6 +516,34 @@ private static void generateDefaultsConfigSource(
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, false, className));
     }
 
+    private static void generateMappingsConfigBuilder(
+            BuildProducer<GeneratedClassBuildItem> generatedClass,
+            BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
+            String className,
+            Set<ConfigClassWithPrefix> mappings) {
+
+        try (ClassCreator classCreator = ClassCreator.builder()
+                .classOutput(new GeneratedClassGizmoAdaptor(generatedClass, true))
+                .className(className)
+                .interfaces(ConfigBuilder.class)
+                .setFinal(true)
+                .build()) {
+
+            MethodCreator method = classCreator.getMethodCreator(CONFIG_BUILDER);
+            ResultHandle configBuilder = method.getMethodParam(0);
+
+            for (ConfigClassWithPrefix mapping : mappings) {
+                method.invokeVirtualMethod(WITH_MAPPING, configBuilder,
+                        method.loadClass(mapping.getKlass()),
+                        method.load(mapping.getPrefix()));
+            }
+
+            method.returnValue(configBuilder);
+        }
+
+        reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, false, className));
+    }
+
     private static Set<String> discoverService(
             Class<?> serviceClass,
             BuildProducer<ReflectiveClassBuildItem> reflectiveClass) throws IOException {
diff --git a/integration-tests/test-extension/extension/deployment/src/test/java/io/quarkus/config/SecretKeysConfigTest.java b/integration-tests/test-extension/extension/deployment/src/test/java/io/quarkus/config/SecretKeysConfigTest.java
index 120c4c6da57..c299b5b3de4 100644
--- a/integration-tests/test-extension/extension/deployment/src/test/java/io/quarkus/config/SecretKeysConfigTest.java
+++ b/integration-tests/test-extension/extension/deployment/src/test/java/io/quarkus/config/SecretKeysConfigTest.java
@@ -39,7 +39,7 @@ void secrets() {
     }
 
     @ConfigMapping(prefix = "secrets.my")
-    interface MappingSecret {
+    public interface MappingSecret {
         String secret();
     }
 }