In the class DefaultComponentBuilder, make the type of builder passed in
the ctor match the result type of the getBuilder() method. This means
introducing a type parameter ("CB") to the class
DefaultComponentBuilder. All subclasses use the same type for this
(DefaultConfigurationBuilder<? extends Configuration>) so we capture
that type in a new class DefaultComponentAndConfigurationBuilder which
all other ComponentBuilders subclass.Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/021f7d19 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/021f7d19 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/021f7d19 Branch: refs/heads/master Commit: 021f7d1983de65a6614f435bdb55b0794a18277c Parents: 100c2ac Author: ggregory <[email protected]> Authored: Tue Sep 1 14:35:25 2015 -0700 Committer: ggregory <[email protected]> Committed: Tue Sep 1 14:35:25 2015 -0700 ---------------------------------------------------------------------- .../impl/DefaultAppenderComponentBuilder.java | 4 +- .../DefaultAppenderRefComponentBuilder.java | 4 +- ...DefaultComponentAndConfigurationBuilder.java | 45 ++++++++++++++++++++ .../builder/impl/DefaultComponentBuilder.java | 13 +++--- .../DefaultCompositeFilterComponentBuilder.java | 5 ++- .../impl/DefaultConfigurationBuilder.java | 11 ----- .../DefaultCustomLevelComponentBuilder.java | 4 +- .../impl/DefaultFilterComponentBuilder.java | 4 +- .../impl/DefaultLayoutComponentBuilder.java | 4 +- .../impl/DefaultLoggerComponentBuilder.java | 4 +- .../impl/DefaultRootLoggerComponentBuilder.java | 4 +- 11 files changed, 69 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderComponentBuilder.java index f6e5452..10c5d51 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderComponentBuilder.java @@ -24,8 +24,8 @@ import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder; /** * Holds the Appender Component attributes and subcomponents. */ -class DefaultAppenderComponentBuilder extends DefaultComponentBuilder<AppenderComponentBuilder> implements - AppenderComponentBuilder { +class DefaultAppenderComponentBuilder extends DefaultComponentAndConfigurationBuilder<AppenderComponentBuilder> + implements AppenderComponentBuilder { public DefaultAppenderComponentBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, String name, String type) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderRefComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderRefComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderRefComponentBuilder.java index a503d9d..19f7b17 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderRefComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderRefComponentBuilder.java @@ -23,8 +23,8 @@ import org.apache.logging.log4j.core.config.builder.api.FilterComponentBuilder; /** * Holds the Appender Component attributes and subcomponents. */ -class DefaultAppenderRefComponentBuilder extends DefaultComponentBuilder<AppenderRefComponentBuilder> implements - AppenderRefComponentBuilder { +class DefaultAppenderRefComponentBuilder extends DefaultComponentAndConfigurationBuilder<AppenderRefComponentBuilder> + implements AppenderRefComponentBuilder { public DefaultAppenderRefComponentBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, String ref) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentAndConfigurationBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentAndConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentAndConfigurationBuilder.java new file mode 100644 index 0000000..d4c2b36 --- /dev/null +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentAndConfigurationBuilder.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ +package org.apache.logging.log4j.core.config.builder.impl; + +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder; + +/** + * Extends {@code DefaultComponentBuilder} to specify + * {@code DefaultConfigurationBuilder<? extends Configuration>} as the + * {@code ConfigurationBuilder} type. + */ +class DefaultComponentAndConfigurationBuilder<T extends ComponentBuilder<T>> + extends DefaultComponentBuilder<T, DefaultConfigurationBuilder<? extends Configuration>> { + + DefaultComponentAndConfigurationBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, String name, + String type, String value) { + super(builder, name, type, value); + } + + DefaultComponentAndConfigurationBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, String name, + String type) { + super(builder, name, type); + } + + public DefaultComponentAndConfigurationBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, + String type) { + super(builder, type); + } + +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentBuilder.java index a84b03a..a4609fe 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultComponentBuilder.java @@ -31,24 +31,25 @@ import java.util.Map; * Generic component that captures attributes and Components in preparation for assembling the Appender's * Component. */ -class DefaultComponentBuilder<T extends ComponentBuilder<T>> implements ComponentBuilder<T> { +class DefaultComponentBuilder<T extends ComponentBuilder<T>, CB extends ConfigurationBuilder<? extends Configuration>> + implements ComponentBuilder<T> { - private ConfigurationBuilder<? extends Configuration> builder; + private CB builder; private String type; private Map<String, String> attributes = new HashMap<>(); private List<Component> components = new ArrayList<>(); private String name; private String value; - public DefaultComponentBuilder(ConfigurationBuilder<? extends Configuration> builder, String type) { + public DefaultComponentBuilder(CB builder, String type) { this(builder, null, type, null); } - public DefaultComponentBuilder(ConfigurationBuilder<? extends Configuration> builder, String name, String type) { + public DefaultComponentBuilder(CB builder, String name, String type) { this(builder, name, type, null); } - public DefaultComponentBuilder(ConfigurationBuilder<? extends Configuration> builder, String name, String type, + public DefaultComponentBuilder(CB builder, String name, String type, String value) { this.type = type; this.builder = builder; @@ -104,7 +105,7 @@ class DefaultComponentBuilder<T extends ComponentBuilder<T>> implements Componen } @Override - public ConfigurationBuilder<? extends Configuration> getBuilder() { + public CB getBuilder() { return builder; } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCompositeFilterComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCompositeFilterComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCompositeFilterComponentBuilder.java index a66cd8c..95d17f3 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCompositeFilterComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCompositeFilterComponentBuilder.java @@ -23,8 +23,9 @@ import org.apache.logging.log4j.core.config.builder.api.FilterComponentBuilder; /** * */ -class DefaultCompositeFilterComponentBuilder extends DefaultComponentBuilder<CompositeFilterComponentBuilder> implements - CompositeFilterComponentBuilder { +class DefaultCompositeFilterComponentBuilder + extends DefaultComponentAndConfigurationBuilder<CompositeFilterComponentBuilder> + implements CompositeFilterComponentBuilder { public DefaultCompositeFilterComponentBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, String onMatch, String onMisMatch) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java index 8d023d4..c225a9d 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java @@ -124,14 +124,12 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement } @Override - @SuppressWarnings("unchecked") public ConfigurationBuilder<T> addProperty(String key, String value) { properties.addComponent(newComponent(key, "Property", value).build()); return this; } @Override - @SuppressWarnings({"unchecked"}) public T build() { T configuration; try { @@ -211,13 +209,11 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement } @Override - @SuppressWarnings("rawtypes") public FilterComponentBuilder newFilter(String type, Filter.Result onMatch, Filter.Result onMisMatch) { return new DefaultFilterComponentBuilder(this, type, onMatch.name(), onMisMatch.name()); } @Override - @SuppressWarnings("rawtypes") public FilterComponentBuilder newFilter(String type, String onMatch, String onMisMatch) { return new DefaultFilterComponentBuilder(this, type, onMatch, onMisMatch); } @@ -255,7 +251,6 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement * @return this builder instance */ @Override - @SuppressWarnings("unchecked") public ConfigurationBuilder<T> setConfigurationName(String name) { this.name = name; return this; @@ -268,42 +263,36 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement * @return this builder instance */ @Override - @SuppressWarnings("unchecked") public ConfigurationBuilder<T> setConfigurationSource(ConfigurationSource configurationSource) { source = configurationSource; return this; } @Override - @SuppressWarnings("unchecked") public ConfigurationBuilder<T> setMonitorInterval(String intervalSeconds) { monitorInterval = Integer.parseInt(intervalSeconds); return this; } @Override - @SuppressWarnings("unchecked") public ConfigurationBuilder<T> setPackages(String packages) { this.packages = packages; return this; } @Override - @SuppressWarnings("unchecked") public ConfigurationBuilder<T> setShutdownHook(String flag) { this.shutdownFlag = flag; return this; } @Override - @SuppressWarnings("unchecked") public ConfigurationBuilder<T> setStatusLevel(Level level) { this.level = level; return this; } @Override - @SuppressWarnings("unchecked") public ConfigurationBuilder<T> setVerbosity(String verbosity) { this.verbosity = verbosity; return this; http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCustomLevelComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCustomLevelComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCustomLevelComponentBuilder.java index 28c2632..378582b 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCustomLevelComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultCustomLevelComponentBuilder.java @@ -22,8 +22,8 @@ import org.apache.logging.log4j.core.config.builder.api.CustomLevelComponentBuil /** * */ -class DefaultCustomLevelComponentBuilder extends DefaultComponentBuilder<CustomLevelComponentBuilder> implements - CustomLevelComponentBuilder { +class DefaultCustomLevelComponentBuilder extends DefaultComponentAndConfigurationBuilder<CustomLevelComponentBuilder> + implements CustomLevelComponentBuilder { public DefaultCustomLevelComponentBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, String name, int level) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultFilterComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultFilterComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultFilterComponentBuilder.java index f67e1f6..362b3ec 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultFilterComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultFilterComponentBuilder.java @@ -22,8 +22,8 @@ import org.apache.logging.log4j.core.config.builder.api.FilterComponentBuilder; /** * */ -class DefaultFilterComponentBuilder extends DefaultComponentBuilder<FilterComponentBuilder> implements - FilterComponentBuilder { +class DefaultFilterComponentBuilder extends DefaultComponentAndConfigurationBuilder<FilterComponentBuilder> + implements FilterComponentBuilder { public DefaultFilterComponentBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, String type, String onMatch, String onMisMatch) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLayoutComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLayoutComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLayoutComponentBuilder.java index 55b14df..275f7db 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLayoutComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLayoutComponentBuilder.java @@ -22,8 +22,8 @@ import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder; /** * */ -class DefaultLayoutComponentBuilder extends DefaultComponentBuilder<LayoutComponentBuilder> implements - LayoutComponentBuilder { +class DefaultLayoutComponentBuilder extends DefaultComponentAndConfigurationBuilder<LayoutComponentBuilder> + implements LayoutComponentBuilder { public DefaultLayoutComponentBuilder(DefaultConfigurationBuilder<? extends Configuration> builder, String type) { super(builder, type); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLoggerComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLoggerComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLoggerComponentBuilder.java index 39451a4..7c5f4dc 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLoggerComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultLoggerComponentBuilder.java @@ -24,8 +24,8 @@ import org.apache.logging.log4j.core.config.builder.api.LoggerComponentBuilder; /** * */ -class DefaultLoggerComponentBuilder extends DefaultComponentBuilder<LoggerComponentBuilder> implements - LoggerComponentBuilder { +class DefaultLoggerComponentBuilder extends DefaultComponentAndConfigurationBuilder<LoggerComponentBuilder> + implements LoggerComponentBuilder { /** * Configure a logger. http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/021f7d19/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultRootLoggerComponentBuilder.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultRootLoggerComponentBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultRootLoggerComponentBuilder.java index 26b9967..19f84c5 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultRootLoggerComponentBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultRootLoggerComponentBuilder.java @@ -24,8 +24,8 @@ import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuild /** * */ -class DefaultRootLoggerComponentBuilder extends DefaultComponentBuilder<RootLoggerComponentBuilder> implements - RootLoggerComponentBuilder { +class DefaultRootLoggerComponentBuilder extends DefaultComponentAndConfigurationBuilder<RootLoggerComponentBuilder> + implements RootLoggerComponentBuilder { /** * Configure the root logger.
