Skip to content

Commit

Permalink
Merge pull request #29653 from radcortez/fix-29583
Browse files Browse the repository at this point in the history
Do not remove ConfigMappings marked as not removable via build item
  • Loading branch information
geoand authored Dec 5, 2022
2 parents b7d944e + 564d112 commit 35b6eae
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,7 @@ void registerConfigMappingConverters(CombinedIndexBuildItem indexBuildItem,
void validateConfigMappingsInjectionPoints(
ArcConfig arcConfig,
ValidationPhaseBuildItem validationPhase,
List<UnremovableBeanBuildItem> unremovableBeans,
List<ConfigClassBuildItem> configClasses,
BuildProducer<ConfigMappingBuildItem> configMappings) {

Expand Down Expand Up @@ -422,10 +423,17 @@ void validateConfigMappingsInjectionPoints(
}
}

for (ConfigClassBuildItem configClass : configMappingTypes.values()) {
// We don't look in the beans here, because SR Config has an API that can retrieve the mapping without CDI
if (!arcConfig.shouldEnableBeanRemoval() || configClass.getConfigClass().isAnnotationPresent(Unremovable.class)) {
toRegister.add(new ConfigMappingBuildItem(configClass.getConfigClass(), configClass.getPrefix()));
if (arcConfig.shouldEnableBeanRemoval()) {
Set<String> unremovableClassNames = unremovableBeans.stream()
.map(UnremovableBeanBuildItem::getClassNames)
.flatMap(Collection::stream)
.collect(toSet());

for (ConfigClassBuildItem configClass : configMappingTypes.values()) {
if (configClass.getConfigClass().isAnnotationPresent(Unremovable.class)
|| unremovableClassNames.contains(configClass.getName().toString())) {
toRegister.add(new ConfigMappingBuildItem(configClass.getConfigClass(), configClass.getPrefix()));
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,41 @@
public final class UnremovableBeanBuildItem extends MultiBuildItem {

private final Predicate<BeanInfo> predicate;
private final Set<String> classNames;

public UnremovableBeanBuildItem(Predicate<BeanInfo> predicate) {
this.predicate = predicate;
this.classNames = Collections.emptySet();
}

public UnremovableBeanBuildItem(BeanClassNameExclusion predicate) {
this.predicate = predicate;
this.classNames = Collections.singleton(predicate.className);
}

public UnremovableBeanBuildItem(BeanClassNamesExclusion predicate) {
this.predicate = predicate;
this.classNames = predicate.classNames;
}

public UnremovableBeanBuildItem(BeanTypeExclusion predicate) {
this.predicate = predicate;
this.classNames = Collections.singleton(predicate.dotName.toString());
}

public UnremovableBeanBuildItem(BeanTypesExclusion predicate) {
this.predicate = predicate;
this.classNames = predicate.dotNames.stream().map(DotName::toString).collect(Collectors.toSet());
}

public Predicate<BeanInfo> getPredicate() {
return predicate;
}

public Set<String> getClassNames() {
return classNames;
}

/**
* Match beans whose bean class matches any of the specified class names.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.arc.deployment.BeanContainerBuildItem;
import io.quarkus.arc.deployment.ConfigPropertyBuildItem;
import io.quarkus.arc.deployment.UnremovableBeanBuildItem;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.Record;
Expand Down Expand Up @@ -62,6 +63,7 @@
import io.quarkus.extest.runtime.config.TestMappingBuildTime;
import io.quarkus.extest.runtime.config.TestMappingBuildTimeRunTime;
import io.quarkus.extest.runtime.config.TestMappingRunTime;
import io.quarkus.extest.runtime.config.UnremovableMappingFromBuildItem;
import io.quarkus.extest.runtime.config.XmlConfig;
import io.quarkus.extest.runtime.logging.AdditionalLogHandlerValueFactory;
import io.quarkus.extest.runtime.runtimeinitializedpackage.RuntimeInitializedClass;
Expand Down Expand Up @@ -475,6 +477,11 @@ void runTimeConfigBuilder(BuildProducer<RunTimeConfigBuilderBuildItem> configBui
configBuilders.produce(new RunTimeConfigBuilderBuildItem(RunTimeConfigBuilder.class.getName()));
}

@BuildStep
void unremoveableBeans(BuildProducer<UnremovableBeanBuildItem> unremovableBeans) {
unremovableBeans.produce(UnremovableBeanBuildItem.beanTypes(UnremovableMappingFromBuildItem.class));
}

@BuildStep(onlyIf = Never.class)
void neverRunThisOne() {
throw new IllegalStateException("Not supposed to run!");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,5 @@ my.prefix.bt.nested.oov=nested-1234+nested-5678

another.another-prefix.prop=5678
another.another-prefix.map.prop=5678

unremoveable.value=1234
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.quarkus.config;

import static org.junit.jupiter.api.Assertions.assertEquals;

import javax.inject.Inject;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.extest.runtime.config.UnremovableMappingFromBuildItem;
import io.quarkus.test.QuarkusUnitTest;
import io.smallrye.config.SmallRyeConfig;

public class UnremoveableConfigMappingTest {
@RegisterExtension
static final QuarkusUnitTest TEST = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClass(UnremovableMappingFromBuildItem.class));

@Inject
SmallRyeConfig config;

@Test
void unremoveableMapping() {
UnremovableMappingFromBuildItem mapping = config.getConfigMapping(UnremovableMappingFromBuildItem.class);
assertEquals("1234", mapping.value());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.quarkus.extest.runtime.config;

import io.smallrye.config.ConfigMapping;

@ConfigMapping(prefix = "unremoveable")
public interface UnremovableMappingFromBuildItem {
String value();
}

0 comments on commit 35b6eae

Please sign in to comment.