Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.quarkus.deployment;

import java.util.Optional;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigRoot;

/**
* This is used currently only to suppress warnings about unknown properties
* when the user supplies something like: -Dquarkus.debug.reflection=true
*
* TODO refactor code to actually use these values
*/
@ConfigRoot
public class DebugConfig {

/**
* If set to true, writes a list of all reflective classes to META-INF
*/
@ConfigItem(defaultValue = "false")
boolean reflection;

/**
* If set to a directory, all generated classes will be written into that directory
*/
@ConfigItem
Optional<String> generatedClassesDir;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.quarkus.deployment;

import java.util.Optional;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigRoot;

/**
* This is used currently only to suppress warnings about unknown properties
* when the user supplies something like: -Dquarkus.live-reload.password=secret
*
* TODO refactor code to actually use these values
*/
@ConfigRoot
public class LiveReloadConfig {

/**
* Password used to use to connect to the remote dev-mode application
*/
@ConfigItem
Optional<String> password;

/**
* URL used to use to connect to the remote dev-mode application
*/
@ConfigItem
Optional<String> url;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.quarkus.deployment;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigRoot;

/**
* This is used currently only to suppress warnings about unknown properties
* when the user supplies something like: -Dquarkus.platform.group-id=someGroup
*
* TODO refactor code to actually use these values
*/
@ConfigRoot
public class PlatformConfig {

/**
* groupId of the platform to use
*/
@ConfigItem(defaultValue = "io.quarkus")
String groupId;

/**
* artifactId of the platform to use
*/
@ConfigItem(defaultValue = "quarkus-universe-bom")
String artifactId;

/**
* version of the platform to use
*/
@ConfigItem(defaultValue = "999-SNAPSHOT")
String version;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.quarkus.deployment;

import java.time.Duration;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigRoot;

/**
* This is used currently only to suppress warnings about unknown properties
* when the user supplies something like: -Dquarkus.test.native-image-profile=someProfile
*
* TODO refactor code to actually use these values
*/
@ConfigRoot
public class TestConfig {

/**
* Duration to wait for the native image to built during testing
*/
@ConfigItem(defaultValue = "PT5M")
Duration nativeImageWaitTime;

/**
* The profile to use when testing the native image
*/
@ConfigItem(defaultValue = "prod")
String nativeImageProfile;
}
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,9 @@ ReadResult run() {
}
objectsByRootClass.put(clazz, instance);
String rootName = root.getRootName();
nameBuilder.append('.').append(rootName);
if (!rootName.isEmpty()) {
nameBuilder.append('.').append(rootName);
}
readConfigGroup(root, instance, nameBuilder);
nameBuilder.setLength(len);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ static final class GenerateOperation implements AutoCloseable {
clinit.setModifiers(Opcodes.ACC_STATIC);
clinit.invokeStaticMethod(PM_SET_RUNTIME_DEFAULT_PROFILE, clinit.load(ProfileManager.getActiveProfile()));
clinitNameBuilder = clinit.newInstance(SB_NEW);
clinit.invokeVirtualMethod(SB_APPEND_STRING, clinitNameBuilder, clinit.load("quarkus."));
clinit.invokeVirtualMethod(SB_APPEND_STRING, clinitNameBuilder, clinit.load("quarkus"));

// create the map for build time config source
final ResultHandle buildTimeValues = clinit.newInstance(HM_NEW);
Expand Down Expand Up @@ -329,7 +329,7 @@ static final class GenerateOperation implements AutoCloseable {
readConfig = cc.getMethodCreator(C_READ_CONFIG);
// the readConfig name builder
readConfigNameBuilder = readConfig.newInstance(SB_NEW);
readConfig.invokeVirtualMethod(SB_APPEND_STRING, readConfigNameBuilder, readConfig.load("quarkus."));
readConfig.invokeVirtualMethod(SB_APPEND_STRING, readConfigNameBuilder, readConfig.load("quarkus"));
runTimePatternMap = buildTimeReadResult.getRunTimePatternMap();
accessorFinder = new AccessorFinder();
}
Expand Down Expand Up @@ -466,6 +466,7 @@ public void run() {
.getConstructorFor(MethodDescriptor.ofConstructor(configurationClass));

// specific actions based on config phase
String rootName = root.getRootName();
if (root.getConfigPhase() == ConfigPhase.BUILD_AND_RUN_TIME_FIXED) {
// config root field is final; we initialize it from clinit
cc.getFieldCreator(rootFieldDescriptor)
Expand All @@ -476,7 +477,10 @@ public void run() {
clinit.writeStaticField(rootFieldDescriptor, instance);
instanceCache.put(rootFieldDescriptor, instance);
// eager init as appropriate
clinit.invokeVirtualMethod(SB_APPEND_STRING, clinitNameBuilder, clinit.load(root.getRootName()));
if (!rootName.isEmpty()) {
clinit.invokeVirtualMethod(SB_APPEND_CHAR, clinitNameBuilder, clinit.load('.'));
clinit.invokeVirtualMethod(SB_APPEND_STRING, clinitNameBuilder, clinit.load(rootName));
}
clinit.invokeStaticMethod(initGroup, clinitConfig, clinitNameBuilder, instance);
clinit.invokeVirtualMethod(SB_SET_LENGTH, clinitNameBuilder, clInitOldLen);
} else if (root.getConfigPhase() == ConfigPhase.RUN_TIME) {
Expand All @@ -487,8 +491,11 @@ public void run() {
final ResultHandle instance = readConfig.invokeStaticMethod(ctor);
// assign instance to field
readConfig.writeStaticField(rootFieldDescriptor, instance);
readConfig.invokeVirtualMethod(SB_APPEND_STRING, readConfigNameBuilder,
readConfig.load(root.getRootName()));
if (!rootName.isEmpty()) {
readConfig.invokeVirtualMethod(SB_APPEND_CHAR, readConfigNameBuilder, readConfig.load('.'));
readConfig.invokeVirtualMethod(SB_APPEND_STRING, readConfigNameBuilder,
readConfig.load(rootName));
}
readConfig.invokeStaticMethod(initGroup, runTimeConfig, readConfigNameBuilder, instance);
readConfig.invokeVirtualMethod(SB_SET_LENGTH, readConfigNameBuilder, rcOldLen);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public final class RootDefinition extends ClassDefinition {
"Config");
}
if (rootName.equals(ConfigItem.PARENT)) {
throw reportError(configClass, "Root cannot inherit parent name because it has no parent");
rootName = "";
} else if (rootName.equals(ConfigItem.ELEMENT_NAME)) {
rootName = String.join("", (Iterable<String>) () -> lowerCaseFirst(trimmedSegments.iterator()));
} else if (rootName.equals(ConfigItem.HYPHENATED_ELEMENT_NAME)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,11 @@ StringBuilder getCombinedName(final StringBuilder sb) {
}
final ClassDefinition enclosing = member.getEnclosingDefinition();
if (enclosing instanceof RootDefinition) {
sb.append(((RootDefinition) enclosing).getRootName().replace('.', ':'));
RootDefinition rootDefinition = (RootDefinition) enclosing;
String rootName = rootDefinition.getRootName();
if (!rootName.isEmpty()) {
sb.append(rootName.replace('.', ':'));
}
}
if (sb.length() > 0) {
sb.append(':');
Expand All @@ -48,7 +52,11 @@ StringBuilder getPropertyName(final StringBuilder sb) {
}
final ClassDefinition enclosing = member.getEnclosingDefinition();
if (enclosing instanceof RootDefinition) {
sb.append(((RootDefinition) enclosing).getRootName());
RootDefinition rootDefinition = (RootDefinition) enclosing;
String rootName = rootDefinition.getRootName();
if (!rootName.isEmpty()) {
sb.append(rootName);
}
}
final String propertyName = member.getPropertyName();
if (!propertyName.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,19 @@ public static ConfigPatternMap<Container> makePatterns(List<RootDefinition> root
for (RootDefinition rootDefinition : rootDefinitions) {
final String rootName = rootDefinition.getRootName();
ConfigPatternMap<Container> addTo = patternMap, child;
assert !rootName.isEmpty();
NameIterator ni = new NameIterator(rootName);
assert ni.hasNext();
do {
final String seg = ni.getNextSegment();
child = addTo.getChild(seg);
ni.next();
if (child == null) {
addTo.addChild(seg, child = new ConfigPatternMap<>());
}
addTo = child;
} while (ni.hasNext());
if (!rootName.isEmpty()) {
NameIterator ni = new NameIterator(rootName);
assert ni.hasNext();
do {
final String seg = ni.getNextSegment();
child = addTo.getChild(seg);
ni.next();
if (child == null) {
addTo.addChild(seg, child = new ConfigPatternMap<>());
}
addTo = child;
} while (ni.hasNext());
}
addGroup(addTo, rootDefinition, null);
}
return patternMap;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,14 +233,16 @@ MainClassBuildItem build(List<StaticBytecodeRecorderBuildItem> staticInitTasks,
.map(f -> f.getInfo())
.sorted()
.collect(Collectors.joining(", ")));
ResultHandle activeProfile = tryBlock
.invokeStaticMethod(ofMethod(ProfileManager.class, "getActiveProfile", String.class));
tryBlock.invokeStaticMethod(
ofMethod(Timing.class, "printStartupTime", void.class, String.class, String.class, String.class, String.class,
String.class, boolean.class),
tryBlock.load(applicationInfo.getName()),
tryBlock.load(applicationInfo.getVersion()),
tryBlock.load(Version.getVersion()),
featuresHandle,
tryBlock.load(ProfileManager.getActiveProfile()),
activeProfile,
tryBlock.load(LaunchMode.DEVELOPMENT.equals(launchMode.getLaunchMode())));

cb = tryBlock.addCatch(Throwable.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ public void addConfigRoot(final PackageElement pkg, TypeElement clazz) {

if (name.isEmpty()) {
name = deriveConfigRootName(clazz.getSimpleName().toString(), configPhase);
} else if (name.endsWith(Constants.DOT + Constants.PARENT)) {
// take into account the root case which would contain characters that can't be used to create the final file
name = name.replace(Constants.DOT + Constants.PARENT, "");
}

ConfigRootInfo configRootInfo = new ConfigRootInfo(name, clazz, extensionName, configPhase);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.quarkus.runtime;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;

/**
* This is used currently only to suppress warnings about unknown properties
* when the user supplies something like: -Dquarkus.profile=someProfile
*
* TODO refactor code to actually use these values
*/
@ConfigRoot(name = ConfigItem.PARENT, phase = ConfigPhase.RUN_TIME)
public class TopLevelRootConfig {

/**
* Profile that will be active when Quarkus launches
*/
@ConfigItem(defaultValue = "prod")
String profile;
}
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,6 @@ quarkus.btrt.map-of-numbers.key1=one
quarkus.btrt.map-of-numbers.key2=two
quarkus.btrt.my-enum=optional
quarkus.btrt.my-enums=optional,enum-one,enum-two

### anonymous root property
quarkus.test-property=foo
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.quarkus.extest.runtime.config;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigRoot;

/**
*
*/
@ConfigRoot(name = ConfigItem.PARENT)
public class TopLevelRootConfig {
String testProperty;
}
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,6 @@ quarkus.btrt.map-of-numbers.key1=one
quarkus.btrt.map-of-numbers.key2=two
quarkus.btrt.my-enum=optional
quarkus.btrt.my-enums=optional,enum-one,enum-two

### anonymous root property
quarkus.test-property=foo