You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2025/08/11 16:17:14 UTC
(logging-log4j2) branch feature/3.x/simplify-name-alias-processing updated (4fea2f1c79 -> af74f15af8)
This is an automated email from the ASF dual-hosted git repository.
mattsicker pushed a change to branch feature/3.x/simplify-name-alias-processing
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
discard 4fea2f1c79 Simplify name and alias annotation processing
new af74f15af8 Simplify name and alias annotation processing
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (4fea2f1c79)
\
N -- N -- N refs/heads/feature/3.x/simplify-name-alias-processing (af74f15af8)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../3870_simplify_name_aliases_providers.xml} | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
copy src/changelog/{3.0.0-beta1/change_basic_auth_encoding.xml => .3.x.x/3870_simplify_name_aliases_providers.xml} (55%)
(logging-log4j2) 01/01: Simplify name and alias annotation processing
Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mattsicker pushed a commit to branch feature/3.x/simplify-name-alias-processing
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit af74f15af8cb4a1ab460679797f6e3bdd81da356
Author: Matt Sicker <ms...@apple.com>
AuthorDate: Fri Aug 8 17:23:15 2025 -0500
Simplify name and alias annotation processing
---
.../logging/log4j/core/test/junit/Named.java | 16 +----
.../log4j/core/config/plugins/PluginAliases.java | 5 +-
.../log4j/core/config/plugins/PluginAttribute.java | 5 +-
.../config/plugins/PluginBuilderAttribute.java | 5 +-
.../log4j/core/config/plugins/PluginElement.java | 5 +-
.../log4j/core/config/plugins/PluginValue.java | 5 +-
.../config/plugins/util/PluginAliasesProvider.java | 31 ----------
.../plugins/util/PluginAttributeNameProvider.java | 33 ----------
.../util/PluginBuilderAttributeNameProvider.java | 33 ----------
.../plugins/util/PluginElementNameProvider.java | 33 ----------
.../plugins/util/PluginValueNameProvider.java | 33 ----------
.../apache/logging/log4j/plugins/di/KeyTest.java | 13 +---
.../NameProvider.java => AliasesProvider.java} | 13 ++--
.../AliasesProvider.java => NameProvider.java} | 12 ++--
.../org/apache/logging/log4j/plugins/Named.java | 7 +--
.../apache/logging/log4j/plugins/Namespace.java | 2 +-
.../org/apache/logging/log4j/plugins/Plugin.java | 4 +-
.../logging/log4j/plugins/PluginAliases.java | 4 +-
.../logging/log4j/plugins/PluginAttribute.java | 4 +-
.../log4j/plugins/PluginBuilderAttribute.java | 4 +-
.../logging/log4j/plugins/PluginElement.java | 4 +-
.../apache/logging/log4j/plugins/PluginValue.java | 4 +-
.../org/apache/logging/log4j/plugins/di/Keys.java | 72 +++++++++++++---------
.../name/AnnotatedElementAliasesProvider.java | 24 --------
.../plugins/name/AnnotatedElementNameProvider.java | 36 -----------
.../log4j/plugins/name/CategoryNameProvider.java | 30 ---------
.../plugins/name/NamedQualifierNameProvider.java | 50 ---------------
.../log4j/plugins/name/PluginAliasesProvider.java | 28 ---------
.../plugins/name/PluginAttributeNameProvider.java | 30 ---------
.../name/PluginBuilderAttributeNameProvider.java | 30 ---------
.../plugins/name/PluginElementNameProvider.java | 30 ---------
.../log4j/plugins/name/PluginNameProvider.java | 30 ---------
.../plugins/name/PluginValueNameProvider.java | 30 ---------
.../logging/log4j/plugins/name/package-info.java | 26 --------
.../3870_simplify_name_aliases_providers.xml | 11 ++++
.../ROOT/pages/manual/dependencyinjection.adoc | 6 +-
36 files changed, 93 insertions(+), 615 deletions(-)
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/Named.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/Named.java
index 9fe8f7493a..293f54af46 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/Named.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/Named.java
@@ -16,17 +16,12 @@
*/
package org.apache.logging.log4j.core.test.junit;
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import java.util.Optional;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
-import org.apache.logging.log4j.plugins.name.NameProvider;
+import org.apache.logging.log4j.plugins.NameProvider;
/**
* Specifies the name of an {@link org.apache.logging.log4j.core.Appender} to inject into JUnit 5 tests from the specified
@@ -38,17 +33,10 @@ import org.apache.logging.log4j.plugins.name.NameProvider;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@Documented
-@NameProvider(Named.Provider.class)
+@NameProvider
public @interface Named {
/**
* Specifies the name of the configuration item to inject. If blank, uses the name of the annotated parameter.
*/
String value() default "";
-
- class Provider implements AnnotatedElementNameProvider<Named> {
- @Override
- public Optional<String> getSpecifiedName(final Named annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
- }
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java
index cd0352821b..2f6e7f4bdf 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAliases.java
@@ -21,8 +21,7 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.core.config.plugins.util.PluginAliasesProvider;
-import org.apache.logging.log4j.plugins.name.AliasesProvider;
+import org.apache.logging.log4j.plugins.AliasesProvider;
/**
* Identifies a list of aliases for a Plugin, PluginAttribute, or PluginBuilderAttribute.
@@ -31,7 +30,7 @@ import org.apache.logging.log4j.plugins.name.AliasesProvider;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.TYPE, ElementType.FIELD})
-@AliasesProvider(PluginAliasesProvider.class)
+@AliasesProvider
@Deprecated(since = "3.0", forRemoval = true)
@SuppressWarnings("removal")
public @interface PluginAliases {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java
index bdd50b7a41..97eb9db19d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java
@@ -21,9 +21,8 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.core.config.plugins.util.PluginAttributeNameProvider;
+import org.apache.logging.log4j.plugins.NameProvider;
import org.apache.logging.log4j.plugins.QualifierType;
-import org.apache.logging.log4j.plugins.name.NameProvider;
import org.apache.logging.log4j.util.Strings;
/**
@@ -37,7 +36,7 @@ import org.apache.logging.log4j.util.Strings;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD})
-@NameProvider(PluginAttributeNameProvider.class)
+@NameProvider
@QualifierType
@Deprecated(since = "3.0", forRemoval = true)
@SuppressWarnings("removal")
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginBuilderAttribute.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginBuilderAttribute.java
index 1255b01c1b..952f57a693 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginBuilderAttribute.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginBuilderAttribute.java
@@ -21,9 +21,8 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.core.config.plugins.util.PluginBuilderAttributeNameProvider;
+import org.apache.logging.log4j.plugins.NameProvider;
import org.apache.logging.log4j.plugins.QualifierType;
-import org.apache.logging.log4j.plugins.name.NameProvider;
import org.apache.logging.log4j.util.Strings;
/**
@@ -33,7 +32,7 @@ import org.apache.logging.log4j.util.Strings;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD})
-@NameProvider(PluginBuilderAttributeNameProvider.class)
+@NameProvider
@QualifierType
@Deprecated(since = "3.0", forRemoval = true)
@SuppressWarnings("removal")
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java
index 112853c494..a09240e528 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java
@@ -21,9 +21,8 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.core.config.plugins.util.PluginElementNameProvider;
+import org.apache.logging.log4j.plugins.NameProvider;
import org.apache.logging.log4j.plugins.QualifierType;
-import org.apache.logging.log4j.plugins.name.NameProvider;
/**
* Identifies a parameter as a Plugin and corresponds with an XML element (or equivalent) in configuration files.
@@ -32,7 +31,7 @@ import org.apache.logging.log4j.plugins.name.NameProvider;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD})
-@NameProvider(PluginElementNameProvider.class)
+@NameProvider
@QualifierType
@Deprecated(since = "3.0", forRemoval = true)
@SuppressWarnings("removal")
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java
index d26b535113..b42e1bf20e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java
@@ -21,9 +21,8 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.core.config.plugins.util.PluginValueNameProvider;
+import org.apache.logging.log4j.plugins.NameProvider;
import org.apache.logging.log4j.plugins.QualifierType;
-import org.apache.logging.log4j.plugins.name.NameProvider;
/**
* Identifies a parameter as a value. These correspond with property values generally, but are meant as values to be
@@ -35,7 +34,7 @@ import org.apache.logging.log4j.plugins.name.NameProvider;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD})
-@NameProvider(PluginValueNameProvider.class)
+@NameProvider
@QualifierType
@Deprecated(since = "3.0", forRemoval = true)
@SuppressWarnings("removal")
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginAliasesProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginAliasesProvider.java
deleted file mode 100644
index b83d62165f..0000000000
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginAliasesProvider.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.plugins.util;
-
-import java.util.Collection;
-import java.util.List;
-import org.apache.logging.log4j.core.config.plugins.PluginAliases;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementAliasesProvider;
-
-@Deprecated(since = "3.0", forRemoval = true)
-@SuppressWarnings("removal")
-public class PluginAliasesProvider implements AnnotatedElementAliasesProvider<PluginAliases> {
- @Override
- public Collection<String> getAliases(final PluginAliases annotation) {
- return List.of(annotation.value());
- }
-}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginAttributeNameProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginAttributeNameProvider.java
deleted file mode 100644
index 91b34613db..0000000000
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginAttributeNameProvider.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.plugins.util;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
-
-@Deprecated(since = "3.0", forRemoval = true)
-@SuppressWarnings("removal")
-public class PluginAttributeNameProvider implements AnnotatedElementNameProvider<PluginAttribute> {
- @Override
- public Optional<String> getSpecifiedName(final PluginAttribute annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilderAttributeNameProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilderAttributeNameProvider.java
deleted file mode 100644
index e4a3747722..0000000000
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilderAttributeNameProvider.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.plugins.util;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
-
-@Deprecated(since = "3.0", forRemoval = true)
-@SuppressWarnings("removal")
-public class PluginBuilderAttributeNameProvider implements AnnotatedElementNameProvider<PluginBuilderAttribute> {
- @Override
- public Optional<String> getSpecifiedName(final PluginBuilderAttribute annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginElementNameProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginElementNameProvider.java
deleted file mode 100644
index e4efb370c7..0000000000
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginElementNameProvider.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.plugins.util;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
-
-@Deprecated(since = "3.0", forRemoval = true)
-@SuppressWarnings("removal")
-public class PluginElementNameProvider implements AnnotatedElementNameProvider<PluginElement> {
- @Override
- public Optional<String> getSpecifiedName(final PluginElement annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginValueNameProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginValueNameProvider.java
deleted file mode 100644
index 18d849066e..0000000000
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginValueNameProvider.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.plugins.util;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.core.config.plugins.PluginValue;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
-
-@Deprecated(since = "3.0", forRemoval = true)
-@SuppressWarnings("removal")
-public class PluginValueNameProvider implements AnnotatedElementNameProvider<PluginValue> {
- @Override
- public Optional<String> getSpecifiedName(final PluginValue annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/KeyTest.java b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/KeyTest.java
index 0bdf724977..c50ddbc9f6 100644
--- a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/KeyTest.java
+++ b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/KeyTest.java
@@ -25,13 +25,11 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
-import java.util.Optional;
+import org.apache.logging.log4j.plugins.NameProvider;
import org.apache.logging.log4j.plugins.Named;
import org.apache.logging.log4j.plugins.Namespace;
import org.apache.logging.log4j.plugins.Ordered;
import org.apache.logging.log4j.plugins.QualifierType;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
-import org.apache.logging.log4j.plugins.name.NameProvider;
import org.junit.jupiter.api.Test;
// TODO: add tests for more complex types with generics etc
@@ -107,18 +105,11 @@ class KeyTest {
@Retention(RetentionPolicy.RUNTIME)
@QualifierType
- @NameProvider(CustomQualifierNameProvider.class)
+ @NameProvider
@interface CustomQualifier {
String value();
}
- static class CustomQualifierNameProvider implements AnnotatedElementNameProvider<CustomQualifier> {
- @Override
- public Optional<String> getSpecifiedName(final CustomQualifier annotation) {
- return Optional.of(annotation.value());
- }
- }
-
@Retention(RetentionPolicy.RUNTIME)
@Namespace("logical")
@interface LogicalNamespace {}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/NameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/AliasesProvider.java
similarity index 72%
rename from log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/NameProvider.java
rename to log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/AliasesProvider.java
index 38ab42a232..02df1a67c0 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/NameProvider.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/AliasesProvider.java
@@ -14,9 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.plugins.name;
+package org.apache.logging.log4j.plugins;
-import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -24,14 +23,16 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * Meta annotation for specifying named annotations and how to get a specified name from the named annotation.
+ * Marks another annotation as one providing aliases for an object. The annotation must define an element
+ * named {@code value} of type {@code String[]} that contains the aliases. An offset can define where to
+ * begin reading the aliases.
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
-public @interface NameProvider {
+public @interface AliasesProvider {
/**
- * Strategy for extracting a specified name from an annotated element.
+ * Offset within the {@code value} array to read aliases from.
*/
- Class<? extends AnnotatedElementNameProvider<? extends Annotation>> value();
+ int offset() default 0;
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AliasesProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/NameProvider.java
similarity index 76%
rename from log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AliasesProvider.java
rename to log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/NameProvider.java
index d93b947a95..3073520a21 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AliasesProvider.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/NameProvider.java
@@ -14,18 +14,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.logging.log4j.plugins.name;
+package org.apache.logging.log4j.plugins;
-import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+/**
+ * Marks another annotation as one providing a name for an object. The name is obtained from
+ * the annotation element named {@code value}. This element can be a {@code String} or {@code String[]}.
+ * When specified as an array, the first element is used.
+ */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
-public @interface AliasesProvider {
- Class<? extends AnnotatedElementAliasesProvider<? extends Annotation>> value();
-}
+public @interface NameProvider {}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Named.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Named.java
index 6f284f9b4b..4df623283c 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Named.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Named.java
@@ -21,9 +21,6 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.plugins.name.AliasesProvider;
-import org.apache.logging.log4j.plugins.name.NameProvider;
-import org.apache.logging.log4j.plugins.name.NamedQualifierNameProvider;
/**
* General naming qualifier for injectable objects. The first value given is the primary name while subsequent values are
@@ -32,8 +29,8 @@ import org.apache.logging.log4j.plugins.name.NamedQualifierNameProvider;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE_USE})
@Documented
-@NameProvider(NamedQualifierNameProvider.class)
-@AliasesProvider(NamedQualifierNameProvider.class)
+@NameProvider
+@AliasesProvider(offset = 1)
@QualifierType
public @interface Named {
/**
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Namespace.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Namespace.java
index 4612cc1dfc..7980e1b6ac 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Namespace.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Namespace.java
@@ -23,7 +23,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * Annotations to separate {@link org.apache.logging.log4j.plugins.name.NameProvider} names into namespaces.
+ * Annotations to separate {@link NameProvider} names into namespaces.
* For example, the {@linkplain Configurable Core namespace} is used with the {@link Node} API, while the TypeConverter
* namespace is used with the {@link org.apache.logging.log4j.plugins.convert.TypeConverter} API.
* This can be annotated on another annotation to create an alias annotation for a common namespace.
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Plugin.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Plugin.java
index 29ad60bee1..013ea7727e 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Plugin.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Plugin.java
@@ -22,8 +22,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.logging.log4j.plugins.model.PluginService;
-import org.apache.logging.log4j.plugins.name.NameProvider;
-import org.apache.logging.log4j.plugins.name.PluginNameProvider;
import org.apache.logging.log4j.util.Strings;
/**
@@ -44,7 +42,7 @@ import org.apache.logging.log4j.util.Strings;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
-@NameProvider(PluginNameProvider.class)
+@NameProvider
public @interface Plugin {
/**
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginAliases.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginAliases.java
index 0e9f22668b..9562d88b0f 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginAliases.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginAliases.java
@@ -21,8 +21,6 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.plugins.name.AliasesProvider;
-import org.apache.logging.log4j.plugins.name.PluginAliasesProvider;
/**
* Identifies a list of aliases for an annotated plugin element. This is supported by plugin classes and other element
@@ -31,7 +29,7 @@ import org.apache.logging.log4j.plugins.name.PluginAliasesProvider;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
-@AliasesProvider(PluginAliasesProvider.class)
+@AliasesProvider
public @interface PluginAliases {
/**
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginAttribute.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginAttribute.java
index 9ac1128a0a..e248e6aeb7 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginAttribute.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginAttribute.java
@@ -24,8 +24,6 @@ import java.lang.annotation.Target;
import java.util.function.Supplier;
import org.apache.logging.log4j.plugins.convert.TypeConverter;
import org.apache.logging.log4j.plugins.di.resolver.PluginAttributeFactoryResolver;
-import org.apache.logging.log4j.plugins.name.NameProvider;
-import org.apache.logging.log4j.plugins.name.PluginAttributeNameProvider;
import org.apache.logging.log4j.util.Strings;
/**
@@ -57,7 +55,7 @@ import org.apache.logging.log4j.util.Strings;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE_USE})
-@NameProvider(PluginAttributeNameProvider.class)
+@NameProvider
@QualifierType
public @interface PluginAttribute {
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginBuilderAttribute.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginBuilderAttribute.java
index b539e59cfd..9d5fe39daf 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginBuilderAttribute.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginBuilderAttribute.java
@@ -21,8 +21,6 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.plugins.name.NameProvider;
-import org.apache.logging.log4j.plugins.name.PluginBuilderAttributeNameProvider;
import org.apache.logging.log4j.util.Strings;
/**
@@ -33,7 +31,7 @@ import org.apache.logging.log4j.util.Strings;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.TYPE, ElementType.TYPE_USE})
-@NameProvider(PluginBuilderAttributeNameProvider.class)
+@NameProvider
@QualifierType
public @interface PluginBuilderAttribute {
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginElement.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginElement.java
index 1ddba1a415..c5d0dcd178 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginElement.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginElement.java
@@ -22,8 +22,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.logging.log4j.plugins.di.resolver.PluginElementFactoryResolver;
-import org.apache.logging.log4j.plugins.name.NameProvider;
-import org.apache.logging.log4j.plugins.name.PluginElementNameProvider;
import org.apache.logging.log4j.util.Strings;
/**
@@ -36,7 +34,7 @@ import org.apache.logging.log4j.util.Strings;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE_USE})
-@NameProvider(PluginElementNameProvider.class)
+@NameProvider
@QualifierType
@Configurable
public @interface PluginElement {
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginValue.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginValue.java
index 8d4f98d575..e724a940fe 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginValue.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/PluginValue.java
@@ -21,8 +21,6 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.logging.log4j.plugins.name.NameProvider;
-import org.apache.logging.log4j.plugins.name.PluginValueNameProvider;
/**
* Identifies a Plugin Value and its corresponding attribute alias for configuration formats that don't distinguish
@@ -37,7 +35,7 @@ import org.apache.logging.log4j.plugins.name.PluginValueNameProvider;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE_USE})
-@NameProvider(PluginValueNameProvider.class)
+@NameProvider
@QualifierType
public @interface PluginValue {
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java
index d4f2ae7f8d..564448e51e 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java
@@ -20,21 +20,19 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.AnnotatedType;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
+import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
+import org.apache.logging.log4j.plugins.AliasesProvider;
+import org.apache.logging.log4j.plugins.NameProvider;
import org.apache.logging.log4j.plugins.Namespace;
import org.apache.logging.log4j.plugins.internal.util.AnnotatedAnnotation;
import org.apache.logging.log4j.plugins.internal.util.AnnotationUtil;
import org.apache.logging.log4j.plugins.internal.util.BeanUtils;
-import org.apache.logging.log4j.plugins.name.AliasesProvider;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementAliasesProvider;
-import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
-import org.apache.logging.log4j.plugins.name.NameProvider;
-import org.apache.logging.log4j.plugins.util.ReflectionUtil;
-import org.apache.logging.log4j.util.Cast;
import org.apache.logging.log4j.util.Strings;
public final class Keys {
@@ -66,9 +64,9 @@ public final class Keys {
}
/**
- * Gets the name of the annotated field using the corresponding {@link AnnotatedElementNameProvider}
+ * Gets the name of the annotated field using the corresponding {@link NameProvider}
* strategy for the named annotation on the field. If no named annotations are present, then an empty string
- * is returned. If no {@linkplain AnnotatedElementNameProvider#getSpecifiedName(Annotation) specified name} is given
+ * is returned. If no specified name is given
* by the name provider, the {@linkplain Field#getName() field name} is returned.
*
* @param field annotated field to find name for
@@ -79,9 +77,9 @@ public final class Keys {
}
/**
- * Gets the name of the given annotated parameter using the corresponding {@link AnnotatedElementNameProvider}
+ * Gets the name of the given annotated parameter using the corresponding {@link NameProvider}
* strategy for the named annotation on the parameter. If no named annotations are present, then an empty string
- * is returned. If no {@linkplain AnnotatedElementNameProvider#getSpecifiedName(Annotation) specified name} is given
+ * is returned. If no specified name is given
* by the name provider, the {@linkplain Parameter#getName() parameter name} is returned.
*
* @param parameter annotated parameter to find name for
@@ -92,9 +90,9 @@ public final class Keys {
}
/**
- * Gets the name of the given annotated method using the corresponding {@link AnnotatedElementNameProvider}
+ * Gets the name of the given annotated method using the corresponding {@link NameProvider}
* strategy for the named annotation on the method. If no named annotations are present, then an empty string
- * is returned. If no {@linkplain AnnotatedElementNameProvider#getSpecifiedName(Annotation) specified name} is given by
+ * is returned. If no specified name is given by
* the name provider, the {@linkplain Method#getName() method name} is used with {@code is}, {@code set}, {@code get},
* and {@code with} prefixes removed and the result being de-capitalized.
*
@@ -120,9 +118,9 @@ public final class Keys {
}
/**
- * Gets the name of the given annotated type using the corresponding {@link AnnotatedElementNameProvider}
+ * Gets the name of the given annotated type using the corresponding {@link NameProvider}
* strategy for the named annotation on the type. If no named annotations are present or if no
- * {@linkplain AnnotatedElementNameProvider#getSpecifiedName(Annotation) specified name} is given by the name provider,
+ * specified name is given by the name provider,
* then an empty string is returned.
*
* @param annotatedType annotated type to find name for
@@ -133,9 +131,9 @@ public final class Keys {
}
/**
- * Gets the name of the given annotated class using the corresponding {@link AnnotatedElementNameProvider}
+ * Gets the name of the given annotated class using the corresponding {@link NameProvider}
* strategy for the named annotation on the class. If no named annotations are present, then an empty
- * string is returned. If no {@linkplain AnnotatedElementNameProvider#getSpecifiedName(Annotation) specified name} is given
+ * string is returned. If no specified name is given
* by the name provider, then the {@linkplain Class#getSimpleName() simple name} of the annotated class is returned.
*
* @param type annotated class to find name for
@@ -145,19 +143,24 @@ public final class Keys {
return hasName(type) ? getSpecifiedName(type).orElseGet(type::getSimpleName) : Strings.EMPTY;
}
- // TODO(ms): these name and alias providers should work via DI
private static Optional<String> getSpecifiedName(final AnnotatedElement element) {
- return AnnotationUtil.findAnnotatedAnnotations(element, NameProvider.class)
- .findFirst()
- .flatMap(Keys::getSpecifiedName);
+ var annotation = AnnotationUtil.getElementAnnotationHavingMetaAnnotation(element, NameProvider.class);
+ return Optional.ofNullable(annotation).flatMap(Keys::getSpecifiedName);
}
- private static <A extends Annotation> Optional<String> getSpecifiedName(
- final AnnotatedAnnotation<A, NameProvider> annotatedAnnotation) {
- final Class<? extends AnnotatedElementNameProvider<A>> providerType =
- Cast.cast(annotatedAnnotation.metaAnnotation().value());
- final AnnotatedElementNameProvider<A> provider = ReflectionUtil.instantiate(providerType);
- return provider.getSpecifiedName(annotatedAnnotation.annotation());
+ private static Optional<String> getSpecifiedName(final Annotation annotation) {
+ try {
+ final Method nameProvidingElement = annotation.annotationType().getDeclaredMethod("value");
+ final Object value = nameProvidingElement.invoke(annotation);
+ if (value instanceof final String string) {
+ return Optional.ofNullable(Strings.trimToNull(string));
+ }
+ if (value instanceof final String[] array && array.length > 0) {
+ return Optional.ofNullable(Strings.trimToNull(array[0]));
+ }
+ } catch (final NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) {
+ }
+ return Optional.empty();
}
public static Collection<String> getAliases(final AnnotatedElement element) {
@@ -169,9 +172,18 @@ public final class Keys {
private static <A extends Annotation> Collection<String> getAliases(
final AnnotatedAnnotation<A, AliasesProvider> annotatedAnnotation) {
- final Class<? extends AnnotatedElementAliasesProvider<A>> providerType =
- Cast.cast(annotatedAnnotation.metaAnnotation().value());
- final AnnotatedElementAliasesProvider<A> provider = ReflectionUtil.instantiate(providerType);
- return provider.getAliases(annotatedAnnotation.annotation());
+ final A annotation = annotatedAnnotation.annotation();
+ try {
+ final Method valueMethod = annotation.annotationType().getDeclaredMethod("value");
+ final String[] value = (String[]) valueMethod.invoke(annotation);
+ final List<String> list = Arrays.asList(value);
+ if (!list.isEmpty()) {
+ final AliasesProvider aliasesProvider = annotatedAnnotation.metaAnnotation();
+ final int offset = aliasesProvider.offset();
+ return offset > 0 ? list.subList(offset, list.size()) : list;
+ }
+ } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) {
+ }
+ return List.of();
}
}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AnnotatedElementAliasesProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AnnotatedElementAliasesProvider.java
deleted file mode 100644
index 36695b0fae..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AnnotatedElementAliasesProvider.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.plugins.name;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-
-public interface AnnotatedElementAliasesProvider<A extends Annotation> {
- Collection<String> getAliases(final A annotation);
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AnnotatedElementNameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AnnotatedElementNameProvider.java
deleted file mode 100644
index 78bacb8692..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/AnnotatedElementNameProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.plugins.name;
-
-import java.lang.annotation.Annotation;
-import java.util.Optional;
-
-/**
- * Extracts a specified name for some configurable annotated element. A specified name is one given in a non-empty
- * string in an annotation as opposed to relying on the default name taken from the annotated element itself.
- *
- * @param <A> plugin configuration annotation
- */
-public interface AnnotatedElementNameProvider<A extends Annotation> {
- /**
- * Returns the specified name from this annotation if given or {@code Optional.empty()} if none given.
- *
- * @param annotation annotation value of configuration element
- * @return specified name of configuration element or empty if none specified
- */
- Optional<String> getSpecifiedName(final A annotation);
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/CategoryNameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/CategoryNameProvider.java
deleted file mode 100644
index 8772f7d217..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/CategoryNameProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.plugins.name;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.plugins.Namespace;
-
-public class CategoryNameProvider implements AnnotatedElementNameProvider<Namespace> {
- @Override
- public Optional<String> getSpecifiedName(final Namespace annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/NamedQualifierNameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/NamedQualifierNameProvider.java
deleted file mode 100644
index edeb7a6d93..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/NamedQualifierNameProvider.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.plugins.name;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-import org.apache.logging.log4j.plugins.Named;
-
-public class NamedQualifierNameProvider
- implements AnnotatedElementNameProvider<Named>, AnnotatedElementAliasesProvider<Named> {
- @Override
- public Optional<String> getSpecifiedName(final Named annotation) {
- final String[] names = annotation.value();
- if (names == null || names.length == 0) {
- return Optional.empty();
- }
- return ofNullable(trimToNull(names[0]));
- }
-
- @Override
- public Collection<String> getAliases(final Named annotation) {
- final String[] names = annotation.value();
- if (names == null || names.length <= 1) {
- return List.of();
- }
- final String[] aliases = new String[names.length - 1];
- for (int i = 0; i < aliases.length; i++) {
- aliases[i] = names[i + 1].trim();
- }
- return List.of(aliases);
- }
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginAliasesProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginAliasesProvider.java
deleted file mode 100644
index 79dcdf2dcd..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginAliasesProvider.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.plugins.name;
-
-import java.util.Collection;
-import java.util.List;
-import org.apache.logging.log4j.plugins.PluginAliases;
-
-public class PluginAliasesProvider implements AnnotatedElementAliasesProvider<PluginAliases> {
- @Override
- public Collection<String> getAliases(final PluginAliases annotation) {
- return List.of(annotation.value());
- }
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginAttributeNameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginAttributeNameProvider.java
deleted file mode 100644
index 37f8a1544b..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginAttributeNameProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.plugins.name;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.plugins.PluginAttribute;
-
-public class PluginAttributeNameProvider implements AnnotatedElementNameProvider<PluginAttribute> {
- @Override
- public Optional<String> getSpecifiedName(final PluginAttribute annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginBuilderAttributeNameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginBuilderAttributeNameProvider.java
deleted file mode 100644
index c61cb4dd4c..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginBuilderAttributeNameProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.plugins.name;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.plugins.PluginBuilderAttribute;
-
-public class PluginBuilderAttributeNameProvider implements AnnotatedElementNameProvider<PluginBuilderAttribute> {
- @Override
- public Optional<String> getSpecifiedName(final PluginBuilderAttribute annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginElementNameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginElementNameProvider.java
deleted file mode 100644
index ec3c3dd10d..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginElementNameProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.plugins.name;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.plugins.PluginElement;
-
-public class PluginElementNameProvider implements AnnotatedElementNameProvider<PluginElement> {
- @Override
- public Optional<String> getSpecifiedName(final PluginElement annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginNameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginNameProvider.java
deleted file mode 100644
index 5072ed6347..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginNameProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.plugins.name;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.plugins.Plugin;
-
-public class PluginNameProvider implements AnnotatedElementNameProvider<Plugin> {
- @Override
- public Optional<String> getSpecifiedName(final Plugin annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginValueNameProvider.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginValueNameProvider.java
deleted file mode 100644
index 2bcaa27d07..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/PluginValueNameProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.plugins.name;
-
-import static java.util.Optional.ofNullable;
-import static org.apache.logging.log4j.util.Strings.trimToNull;
-
-import java.util.Optional;
-import org.apache.logging.log4j.plugins.PluginValue;
-
-public class PluginValueNameProvider implements AnnotatedElementNameProvider<PluginValue> {
- @Override
- public Optional<String> getSpecifiedName(final PluginValue annotation) {
- return ofNullable(trimToNull(annotation.value()));
- }
-}
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/package-info.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/package-info.java
deleted file mode 100644
index 6458d1520f..0000000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/name/package-info.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Strategies for extracting names and aliases from annotations.
- */
-@Export
-@Version("1.0.0")
-package org.apache.logging.log4j.plugins.name;
-
-import org.osgi.annotation.bundle.Export;
-import org.osgi.annotation.versioning.Version;
diff --git a/src/changelog/.3.x.x/3870_simplify_name_aliases_providers.xml b/src/changelog/.3.x.x/3870_simplify_name_aliases_providers.xml
new file mode 100644
index 0000000000..ee97e70c22
--- /dev/null
+++ b/src/changelog/.3.x.x/3870_simplify_name_aliases_providers.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="https://logging.apache.org/xml/ns"
+ xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
+ type="changed">
+ <issue id="3870" link="https://github.com/apache/logging-log4j2/pull/3870"/>
+ <description format="asciidoc">
+ Simplifies how the `@NameProvider` and `@AliasesProvider` plugin meta-annotations work.
+ This reduces the need for reflection and simplifies name/alias extraction based on how they normally work.
+ </description>
+</entry>
diff --git a/src/site/antora/modules/ROOT/pages/manual/dependencyinjection.adoc b/src/site/antora/modules/ROOT/pages/manual/dependencyinjection.adoc
index e6686c541a..e2b8619fea 100644
--- a/src/site/antora/modules/ROOT/pages/manual/dependencyinjection.adoc
+++ b/src/site/antora/modules/ROOT/pages/manual/dependencyinjection.adoc
@@ -53,7 +53,7 @@ Injection points are injectable fields or parameters where a dependency should b
_Injectable fields_ are fields annotated with `@Inject` or a qualifier annotation.
_Injectable methods_ are methods annotated with `@Inject` or are not annotated with a factory annotation and have at least one parameter annotated with a qualifier annotation.
_Injectable constructors_ are constructors annotated with `@Inject`; only one such constructor should exist per class.
-When a field or parameter is annotated with a name-providing annotation (i.e., an annotation annotated with `@org.apache.logging.log4j.plugins.name.NameProvider`), then the provided name or name of the field or parameter are included in the `Key<T>` for the injection point.
+When a field or parameter is annotated with a name-providing annotation (i.e., an annotation annotated with `@org.apache.logging.log4j.plugins.NameProvider`), then the provided name or name of the field or parameter are included in the `Key<T>` for the injection point.
When these elements are annotated with a `@Namespace` annotation or meta-annotation, then that namespace name is included in the `Key<T>` for the injection point.
Similarly, when a field or parameter is annotated with a qualifier annotation, then that qualifier annotation type is included in the `Key<T>` for the injection point.
@@ -114,8 +114,8 @@ Qualifiers provide a way to match dependencies and factories based on more than
For example, the `@org.apache.logging.log4j.plugins.Named` qualifier allows for creating different bindings of the same type with different names (along with support for aliases).
Qualifiers on an injection point request a binding with that qualifier type and name.
Qualifiers on a factory method register a binding with that qualifier type and name.
-The name for a qualifier is provided via an `org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider` strategy class given in the `@NameProvider` annotation declared on the qualifier annotation.
-Aliases are likewise provided via an `org.apache.logging.log4j.plugins.name.AnnotatedElementAliasesProvider` strategy class given in the `@AliasesProvider` annotated declared on the qualifier annotation.
+The name for a qualifier is provided via a `@NameProvider` annotation declared on the qualifier annotation.
+Aliases are likewise provided via a `@AliasesProvider` annotated declared on the qualifier annotation.
=== Scopes