package com.github.czyzby.lml.uedi.logger; import java.lang.reflect.Member; import com.badlogic.gdx.Gdx; import com.github.czyzby.kiwi.log.Logger; import com.github.czyzby.kiwi.log.LoggerService; import com.github.czyzby.uedi.reflection.impl.ConstructorMember; import com.github.czyzby.uedi.stereotype.Provider; /** Provides {@link Logger} instances aware of the class of component that they are injected into. Supports both field * and constructor injection. Logging utility. * * @author MJ */ public class LoggerProvider implements Provider<Logger> { @Override public Class<? extends Logger> getType() { return Logger.class; } @Override public Logger provide(final Object target, final Member member) { if (target != null) { return getLogger(target.getClass()); } else if (member instanceof ConstructorMember) { // Extracting component class from constructor: final ConstructorMember constructor = (ConstructorMember) member; return getLogger(constructor.getConstructor().getDeclaringClass()); } return getGlobalLogger(); } /** @return {@link Logger} assigned to the current application listener implementation. Can be treated as global * logger. */ public Logger getGlobalLogger() { return getLogger(Gdx.app.getApplicationListener().getClass()); } /** @param forClass will be included in the logs. * @return a {@link Logger} instance unique to the selected class. */ public Logger getLogger(final Class<?> forClass) { return LoggerService.forClass(forClass); } }