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 2020/03/15 17:26:36 UTC

[logging-log4j2] 02/07: Remove unused type parameter in Variable

This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch mean-bean-machine
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit f089940964de2ff32555d7e83cb7f5fd9865b702
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sat Mar 14 13:54:07 2020 -0500

    Remove unused type parameter in Variable
    
    Signed-off-by: Matt Sicker <bo...@gmail.com>
---
 .../log4j/plugins/defaults/bean/AbstractBean.java  |  4 +-
 .../plugins/defaults/bean/DefaultBeanManager.java  | 62 ++++++++++------------
 .../plugins/defaults/bean/InjectionTargetBean.java |  2 +-
 .../log4j/plugins/defaults/bean/OptionalBean.java  |  2 +-
 .../log4j/plugins/defaults/bean/ProducerBean.java  |  2 +-
 .../log4j/plugins/defaults/bean/ProvidedBean.java  |  2 +-
 .../log4j/plugins/defaults/bean/ProviderBean.java  |  2 +-
 .../log4j/plugins/defaults/bean/SystemBean.java    |  4 +-
 .../defaults/model/DefaultElementManager.java      |  6 +--
 .../plugins/defaults/model/DefaultVariable.java    | 10 ++--
 .../logging/log4j/plugins/spi/bean/Bean.java       |  2 +-
 .../log4j/plugins/spi/model/ElementManager.java    |  4 +-
 .../logging/log4j/plugins/spi/model/Variable.java  |  6 +--
 13 files changed, 50 insertions(+), 58 deletions(-)

diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/AbstractBean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/AbstractBean.java
index e46f7d2..947d722 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/AbstractBean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/AbstractBean.java
@@ -28,10 +28,10 @@ import java.util.Collection;
 import java.util.Objects;
 
 abstract class AbstractBean<D, T> implements Bean<T> {
-    private final Variable<T> variable;
+    private final Variable variable;
     private final MetaClass<D> declaringClass;
 
-    AbstractBean(final Variable<T> variable, final MetaClass<D> declaringClass) {
+    AbstractBean(final Variable variable, final MetaClass<D> declaringClass) {
         this.variable = Objects.requireNonNull(variable);
         this.declaringClass = declaringClass;
     }
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/DefaultBeanManager.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/DefaultBeanManager.java
index 8163bbf..6028c43 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/DefaultBeanManager.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/DefaultBeanManager.java
@@ -103,7 +103,7 @@ public class DefaultBeanManager implements BeanManager {
     private <T> Collection<Bean<?>> loadBeans(final MetaClass<T> metaClass) {
         final Bean<T> created;
         if (elementManager.isInjectable(metaClass)) {
-            final Variable<T> variable = elementManager.createVariable(metaClass);
+            final Variable variable = elementManager.createVariable(metaClass);
             final InjectionTargetFactory<T> factory =
                     new DefaultInjectionTargetFactory<>(elementManager, injector, metaClass);
             created = addBean(new InjectionTargetBean<>(variable, metaClass, factory));
@@ -162,47 +162,47 @@ public class DefaultBeanManager implements BeanManager {
         }
     }
 
-    private <T> Collection<Bean<?>> loadProducerBeans(final MetaClass<T> metaClass, final Bean<T> bean) {
+    private <P> Collection<Bean<?>> loadProducerBeans(final MetaClass<P> producingClass, final Bean<P> producingBean) {
         final Collection<Bean<?>> beans = new HashSet<>();
-        for (final MetaMethod<T, ?> method : metaClass.getMethods()) {
+        for (final MetaMethod<P, ?> method : producingClass.getMethods()) {
             if (method.isAnnotationPresent(Produces.class)) {
-                beans.add(loadProducerBean(method, bean));
+                beans.add(loadProducerBean(method, producingBean));
             }
         }
-        for (final MetaField<T, ?> field : metaClass.getFields()) {
+        for (final MetaField<P, ?> field : producingClass.getFields()) {
             if (field.isAnnotationPresent(Produces.class)) {
-                beans.add(loadProducerBean(field, bean));
+                beans.add(loadProducerBean(field, producingBean));
             }
         }
         return beans;
     }
 
-    private <D, T> Bean<T> loadProducerBean(final MetaMember<D, T> member, final Bean<D> bean) {
-        final Variable<T> variable = elementManager.createVariable(member);
-        final MetaClass<D> declaringType = member.getDeclaringClass();
-        final ProducerFactory<D> factory = getProducerFactory(member, bean);
+    private <P, T> Bean<T> loadProducerBean(final MetaMember<P, T> member, final Bean<P> producingBean) {
+        final Variable variable = elementManager.createVariable(member);
+        final MetaClass<P> declaringType = member.getDeclaringClass();
+        final ProducerFactory<P> factory = getProducerFactory(member, producingBean);
         return addBean(new ProducerBean<>(variable, declaringType, factory));
     }
 
-    private <D> ProducerFactory<D> getProducerFactory(final MetaMember<D, ?> member, final Bean<D> declaringBean) {
-        final Variable<?> variable = elementManager.createVariable(member);
-        final MetaMethod<D, ?> disposerMethod = resolveDisposerMethod(variable, declaringBean);
+    private <P> ProducerFactory<P> getProducerFactory(final MetaMember<P, ?> member, final Bean<P> producingBean) {
+        final Variable variable = elementManager.createVariable(member);
+        final MetaMethod<P, ?> disposerMethod = resolveDisposerMethod(variable, producingBean);
         final Collection<InjectionPoint<?>> disposerIPs = disposerMethod == null ? Collections.emptySet() :
-                elementManager.createExecutableInjectionPoints(disposerMethod, declaringBean);
+                elementManager.createExecutableInjectionPoints(disposerMethod, producingBean);
         if (member instanceof MetaField<?, ?>) {
-            final MetaField<D, ?> field = TypeUtil.cast(member);
-            return new FieldProducerFactory<>(this, declaringBean, field, disposerMethod, disposerIPs);
+            final MetaField<P, ?> field = TypeUtil.cast(member);
+            return new FieldProducerFactory<>(this, producingBean, field, disposerMethod, disposerIPs);
         } else {
-            final MetaMethod<D, ?> method = TypeUtil.cast(member);
+            final MetaMethod<P, ?> method = TypeUtil.cast(member);
             final Collection<InjectionPoint<?>> producerIPs =
-                    elementManager.createExecutableInjectionPoints(method, declaringBean);
-            return new MethodProducerFactory<>(this, declaringBean, method, producerIPs, disposerMethod, disposerIPs);
+                    elementManager.createExecutableInjectionPoints(method, producingBean);
+            return new MethodProducerFactory<>(this, producingBean, method, producerIPs, disposerMethod, disposerIPs);
         }
     }
 
-    private <D, T> MetaMethod<D, ?> resolveDisposerMethod(final Variable<T> variable, final Bean<D> bean) {
+    private <D> MetaMethod<D, ?> resolveDisposerMethod(final Variable variable, final Bean<D> disposingBean) {
         final List<MetaMethod<?, ?>> methods = disposesMethods.stream()
-                .filter(method -> method.matches(variable, bean))
+                .filter(method -> method.matches(variable, disposingBean))
                 .map(method -> method.disposesMethod)
                 .collect(Collectors.toList());
         if (methods.isEmpty()) {
@@ -286,8 +286,8 @@ public class DefaultBeanManager implements BeanManager {
         // first, look for an existing bean
         final Type type = point.getType();
         final Qualifiers qualifiers = point.getQualifiers();
-        final Optional<Bean<T>> existingBean = getExistingOrProvidedBean(type, qualifiers,
-                () -> elementManager.createVariable(point));
+        final Variable variable = elementManager.createVariable(point);
+        final Optional<Bean<T>> existingBean = getExistingOrProvidedBean(type, qualifiers, () -> variable);
         if (existingBean.isPresent()) {
             return existingBean;
         }
@@ -295,22 +295,17 @@ public class DefaultBeanManager implements BeanManager {
             final Class<?> rawType = TypeUtil.getRawType(type);
             final Type actualType = ((ParameterizedType) type).getActualTypeArguments()[0];
             if (rawType.equals(Provider.class)) {
-                // generics abuse ahoy
-                final InjectionPoint<Provider<T>> ip = TypeUtil.cast(point);
-                final Variable<Provider<T>> variable = elementManager.createVariable(ip);
                 // if a Provider<T> is requested, we can convert an existing Bean<T> into a Bean<Provider<T>>
                 return this.<T>getBean(actualType, qualifiers)
                         .map(bean -> new ProviderBean<>(variable, context -> getValue(bean, context)))
                         .map(this::addBean)
                         .map(TypeUtil::cast);
             } else if (rawType.equals(Optional.class)) {
-                final InjectionPoint<Optional<T>> ip = TypeUtil.cast(point);
-                final Variable<Optional<T>> optionalVariable = elementManager.createVariable(ip);
                 final Optional<Bean<T>> actualExistingBean = getExistingOrProvidedBean(actualType, qualifiers,
                         // FIXME: remove need for DefaultVariable to be public
                         () -> DefaultVariable.newVariable(
-                                TypeUtil.getTypeClosure(actualType), qualifiers, optionalVariable.getScopeType()));
-                final Bean<Optional<T>> optionalBean = addBean(new OptionalBean<>(optionalVariable,
+                                TypeUtil.getTypeClosure(actualType), qualifiers, variable.getScopeType()));
+                final Bean<Optional<T>> optionalBean = addBean(new OptionalBean<>(variable,
                         context -> actualExistingBean.map(bean -> getValue(bean, context))));
                 return Optional.of(TypeUtil.cast(optionalBean));
             }
@@ -319,18 +314,19 @@ public class DefaultBeanManager implements BeanManager {
     }
 
     private <T> Optional<Bean<T>> getExistingOrProvidedBean(final Type type, final Qualifiers qualifiers,
-                                                            final Supplier<Variable<T>> variableSupplier) {
+                                                            final Supplier<Variable> variableSupplier) {
         final Optional<Bean<T>> existingBean = getBean(type, qualifiers);
         if (existingBean.isPresent()) {
             return existingBean;
         }
-        final Variable<T> variable = variableSupplier.get();
+        final Variable variable = variableSupplier.get();
         final Type providerType = new ParameterizedTypeImpl(null, Provider.class, type);
         final Optional<Bean<Provider<T>>> providerBean = getBean(providerType, qualifiers);
         return providerBean.map(bean -> new ProvidedBean<>(variable, context -> getValue(bean, context).get()))
                 .map(this::addBean);
     }
 
+    // FIXME: this needs to consider scopes
     private <T> Optional<Bean<T>> getBean(final Type type, final Qualifiers qualifiers) {
         final Set<Bean<T>> beans = this.<T>streamBeansMatchingType(type)
                 .filter(bean -> qualifiers.equals(bean.getQualifiers()))
@@ -427,7 +423,7 @@ public class DefaultBeanManager implements BeanManager {
             this.disposesMethod = disposesMethod;
         }
 
-        boolean matches(final Variable<?> variable, final Bean<?> declaringBean) {
+        boolean matches(final Variable variable, final Bean<?> declaringBean) {
             return Objects.equals(declaringBean, this.declaringBean) &&
                     variable.hasMatchingType(type) &&
                     qualifiers.equals(variable.getQualifiers());
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/InjectionTargetBean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/InjectionTargetBean.java
index a5f071d..9535f02 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/InjectionTargetBean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/InjectionTargetBean.java
@@ -31,7 +31,7 @@ import java.util.Objects;
 class InjectionTargetBean<T> extends AbstractBean<T, T> {
     private final InjectionTarget<T> injectionTarget;
 
-    InjectionTargetBean(final Variable<T> variable, final MetaClass<T> declaringClass,
+    InjectionTargetBean(final Variable variable, final MetaClass<T> declaringClass,
                         final InjectionTargetFactory<T> factory) {
         super(variable, declaringClass);
         Objects.requireNonNull(factory);
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/OptionalBean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/OptionalBean.java
index 0d753c8..d98ce88 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/OptionalBean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/OptionalBean.java
@@ -26,7 +26,7 @@ import java.util.function.Function;
 class OptionalBean<T> extends SystemBean<Optional<T>> {
     private final Function<InitializationContext<?>, Optional<T>> optionalValueFactory;
 
-    OptionalBean(final Variable<Optional<T>> variable, final Function<InitializationContext<?>, Optional<T>> optionalValueFactory) {
+    OptionalBean(final Variable variable, final Function<InitializationContext<?>, Optional<T>> optionalValueFactory) {
         super(variable);
         this.optionalValueFactory = optionalValueFactory;
     }
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProducerBean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProducerBean.java
index 6a382fe..5eea07b 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProducerBean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProducerBean.java
@@ -33,7 +33,7 @@ class ProducerBean<D, T> extends AbstractBean<D, T> {
     private final Producer<T> producer;
     private final Type type;
 
-    ProducerBean(final Variable<T> variable, final MetaClass<D> declaringClass, final ProducerFactory<D> factory) {
+    ProducerBean(final Variable variable, final MetaClass<D> declaringClass, final ProducerFactory<D> factory) {
         super(variable, declaringClass);
         Objects.requireNonNull(factory);
         producer = factory.createProducer(this);
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProvidedBean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProvidedBean.java
index 632218d..80a6c26 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProvidedBean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProvidedBean.java
@@ -25,7 +25,7 @@ import java.util.function.Function;
 class ProvidedBean<T> extends SystemBean<T> {
     private final Function<InitializationContext<?>, T> providedValueFactory;
 
-    ProvidedBean(final Variable<T> variable, final Function<InitializationContext<?>, T> providedValueFactory) {
+    ProvidedBean(final Variable variable, final Function<InitializationContext<?>, T> providedValueFactory) {
         super(variable);
         this.providedValueFactory = providedValueFactory;
     }
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProviderBean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProviderBean.java
index bbd8522..d3ae88f 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProviderBean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/ProviderBean.java
@@ -26,7 +26,7 @@ import java.util.function.Function;
 class ProviderBean<T> extends SystemBean<Provider<T>> {
     private final Function<InitializationContext<?>, T> providedValueFactory;
 
-    ProviderBean(final Variable<Provider<T>> variable, final Function<InitializationContext<?>, T> providedValueFactory) {
+    ProviderBean(final Variable variable, final Function<InitializationContext<?>, T> providedValueFactory) {
         super(variable);
         this.providedValueFactory = providedValueFactory;
     }
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/SystemBean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/SystemBean.java
index b5c9519..8b55f3d 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/SystemBean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/bean/SystemBean.java
@@ -30,9 +30,9 @@ import java.util.Collection;
 import java.util.Collections;
 
 abstract class SystemBean<T> implements Bean<T> {
-    private final Variable<T> variable;
+    private final Variable variable;
 
-    SystemBean(final Variable<T> variable) {
+    SystemBean(final Variable variable) {
         this.variable = variable;
     }
 
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/model/DefaultElementManager.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/model/DefaultElementManager.java
index 9daaf65..6144a14 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/model/DefaultElementManager.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/model/DefaultElementManager.java
@@ -154,18 +154,18 @@ public class DefaultElementManager implements ElementManager {
     }
 
     @Override
-    public <T> Variable<T> createVariable(final MetaElement<T> element) {
+    public Variable createVariable(final MetaElement<?> element) {
         Objects.requireNonNull(element);
         return createVariable(element, getQualifiers(element));
     }
 
     @Override
-    public <T> Variable<T> createVariable(final InjectionPoint<T> point) {
+    public Variable createVariable(final InjectionPoint<?> point) {
         Objects.requireNonNull(point);
         return createVariable(point.getElement(), point.getQualifiers());
     }
 
-    private <T> Variable<T> createVariable(final MetaElement<T> element, final Qualifiers qualifiers) {
+    private Variable createVariable(final MetaElement<?> element, final Qualifiers qualifiers) {
         final Collection<Type> types = element.getTypeClosure();
         final Class<? extends Annotation> scopeType = getScopeType(element);
         return DefaultVariable.newVariable(types, qualifiers, scopeType);
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/model/DefaultVariable.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/model/DefaultVariable.java
index f756908..f06d8b4 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/model/DefaultVariable.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/defaults/model/DefaultVariable.java
@@ -25,11 +25,11 @@ import java.lang.reflect.Type;
 import java.util.Collection;
 import java.util.Objects;
 
-public class DefaultVariable<T> implements Variable<T> {
+public class DefaultVariable implements Variable {
 
-    public static <T> DefaultVariable<T> newVariable(final Collection<Type> types, final Qualifiers qualifiers,
-                                                     final Class<? extends Annotation> scopeType) {
-        return new DefaultVariable<>(types, qualifiers, scopeType);
+    public static DefaultVariable newVariable(final Collection<Type> types, final Qualifiers qualifiers,
+                                              final Class<? extends Annotation> scopeType) {
+        return new DefaultVariable(types, qualifiers, scopeType);
     }
 
     private final Collection<Type> types;
@@ -62,7 +62,7 @@ public class DefaultVariable<T> implements Variable<T> {
     public boolean equals(final Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
-        final DefaultVariable<?> that = (DefaultVariable<?>) o;
+        final DefaultVariable that = (DefaultVariable) o;
         return types.equals(that.types) &&
                 qualifiers.equals(that.qualifiers) &&
                 scopeType.equals(that.scopeType);
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/bean/Bean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/bean/Bean.java
index 3e93e2f..482aeec 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/bean/Bean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/bean/Bean.java
@@ -23,7 +23,7 @@ import org.apache.logging.log4j.plugins.spi.model.Variable;
 
 import java.util.Collection;
 
-public interface Bean<T> extends Variable<T> {
+public interface Bean<T> extends Variable {
     /**
      * Creates a new instance of this bean. The given {@link InitializationContext} should be used by implementations
      * to track dependent objects.
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/model/ElementManager.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/model/ElementManager.java
index 00aa67d..c979eee 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/model/ElementManager.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/model/ElementManager.java
@@ -147,12 +147,12 @@ public interface ElementManager extends AutoCloseable {
     /**
      * Creates a variable for an element.
      */
-    <T> Variable<T> createVariable(final MetaElement<T> element);
+    Variable createVariable(final MetaElement<?> element);
 
     /**
      * Creates a variable for an injection point.
      */
-    <T> Variable<T> createVariable(final InjectionPoint<T> point);
+    Variable createVariable(final InjectionPoint<?> point);
 
     @Override
     void close();
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/model/Variable.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/model/Variable.java
index 1cc9186..af703ac 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/model/Variable.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/model/Variable.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.util.Collection;
 
-public interface Variable<T> {
+public interface Variable {
     Collection<Type> getTypes();
 
     default boolean hasMatchingType(final Type requiredType) {
@@ -44,8 +44,4 @@ public interface Variable<T> {
     default boolean isDependentScoped() {
         return getScopeType() == Dependent.class;
     }
-
-    default boolean isSingletonScoped() {
-        return getScopeType() == Singleton.class;
-    }
 }