You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/01/20 21:32:21 UTC
[1/2] incubator-freemarker git commit: Removed freemarker.ext.log,
our log abstraction layer from the old times when there was no clear
winner on this field. Added org.slf4j:slf4j-api as required dependency
instead.
Repository: incubator-freemarker
Updated Branches:
refs/heads/3 1588a7f5a -> 8952cbbba
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/CommonsLoggingLoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/CommonsLoggingLoggerFactory.java b/src/main/java/freemarker/log/CommonsLoggingLoggerFactory.java
deleted file mode 100644
index e157d41..0000000
--- a/src/main/java/freemarker/log/CommonsLoggingLoggerFactory.java
+++ /dev/null
@@ -1,109 +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 freemarker.log;
-
-/**
- * @deprecated Don't use it, meant to be internal.
- */
-// 2.4: Remove
-@Deprecated
-public class CommonsLoggingLoggerFactory implements LoggerFactory {
-
- public Logger getLogger(String category) {
- return new CommonsLoggingLogger(
- org.apache.commons.logging.LogFactory.getLog(category));
- }
-
- static private class CommonsLoggingLogger extends Logger {
-
- private final org.apache.commons.logging.Log logger;
-
- CommonsLoggingLogger(org.apache.commons.logging.Log logger) {
- this.logger = logger;
- }
-
- @Override
- public void debug(String message) {
- logger.debug(message);
- }
-
- @Override
- public void debug(String message, Throwable t) {
- logger.debug(message, t);
- }
-
- @Override
- public void info(String message) {
- logger.info(message);
- }
-
- @Override
- public void info(String message, Throwable t) {
- logger.info(message, t);
- }
-
- @Override
- public void warn(String message) {
- logger.warn(message);
- }
-
- @Override
- public void warn(String message, Throwable t) {
- logger.warn(message, t);
- }
-
- @Override
- public void error(String message) {
- logger.error(message);
- }
-
- @Override
- public void error(String message, Throwable t) {
- logger.error(message, t);
- }
-
- @Override
- public boolean isDebugEnabled() {
- return logger.isDebugEnabled();
- }
-
- @Override
- public boolean isInfoEnabled() {
- return logger.isInfoEnabled();
- }
-
- @Override
- public boolean isWarnEnabled() {
- return logger.isWarnEnabled();
- }
-
- @Override
- public boolean isErrorEnabled() {
- return logger.isErrorEnabled();
- }
-
- @Override
- public boolean isFatalEnabled() {
- return logger.isFatalEnabled();
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/Logger.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/Logger.java b/src/main/java/freemarker/log/Logger.java
deleted file mode 100644
index a084fb0..0000000
--- a/src/main/java/freemarker/log/Logger.java
+++ /dev/null
@@ -1,580 +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 freemarker.log;
-
-import java.security.AccessControlException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Delegates logger creation to an actual logging library. By default it looks for logger libraries in this order (in
- * FreeMarker 2.3.x): Log4J, Avalon LogKit, JUL (i.e., <tt>java.util.logging</tt>). Prior to FreeMarker 2.4, SLF4J and
- * Apache Commons Logging aren't searched automatically due to backward compatibility constraints. But if you have
- * {@code log4j-over-slf4j} properly installed (means, you have no real Log4j in your class path, and SLF4J has a
- * backing implementation like {@code logback-classic}), then FreeMarker will use SLF4J directly instead of Log4j (since
- * FreeMarker 2.3.22).
- *
- * <p>
- * If the auto detection sequence describet above doesn't give you the result that you want, see
- * {@link #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY}.
- */
-public abstract class Logger {
-
- /**
- * The {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} system property is used to select a logger library explicitly,
- * rather than relying on automatic selection. You meant to set this system property where the JVM is started, like
- * {@code java ... -Dorg.freemarker.loggerLibrary=SLF4j}. Setting it from Java code isn't reliable, also it can
- * cause confusion if you override the value set by others with {@code -D}.
- *
- * <p>
- * If the requested logging library is not available, an error will be printed to the stderr, then logging will be
- * disabled.
- *
- * <p>
- * The supported values are:
- * <ul>
- * <li>{@value #LIBRARY_NAME_SLF4J}: Use SLF4J (recommended)</li>
- * <li>{@value #LIBRARY_NAME_COMMONS_LOGGING}: Use Apache Commons Logging.</li>
- * <li>{@value #LIBRARY_NAME_LOG4J}: Use Log4j.</li>
- * <li>{@value #LIBRARY_NAME_JUL}: Use {@code java.util.logging}.</li>
- * <li>{@value #LIBRARY_NAME_AVALON}: Use Avalon LogKit (deprecated)</li>
- * <li>{@value #LIBRARY_NAME_AUTO}: Use automatic selection (default behavior). See {@link Logger} class
- * documentation for more.</li>
- * <li>{@value #LIBRARY_NAME_NONE}: Don't log.</li>
- * </ul>
- *
- * @since 2.3.22
- */
- public static final String SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY = "org.freemarker.loggerLibrary";
-
- /**
- * Enum value used for {@link #selectLoggerLibrary(int)}; indicates auto-selection as described in the class
- * documentation of {@link #Logger()}.
- */
- public static final int LIBRARY_AUTO = -1;
- private static final int MIN_LIBRARY_ENUM = LIBRARY_AUTO;
-
- /**
- * {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} property value; indicates auto-selection as described in the class
- * documentation of {@link #Logger()}. @since 2.3.22
- */
- public static final String LIBRARY_NAME_AUTO = "auto";
-
- /**
- * Enum value used for {@link #selectLoggerLibrary(int)}; indicates that no logging should occur.
- */
- public static final int LIBRARY_NONE = 0;
-
- /**
- * {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} property value; indicates that no logging should occur. @since
- * 2.3.22
- */
- public static final String LIBRARY_NAME_NONE = "none";
-
- /**
- * Enum value used for {@link #selectLoggerLibrary(int)}; indicates that {@code java.util.logging} should be used.
- */
- public static final int LIBRARY_JAVA = 1;
-
- /**
- * {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} property value; indicates that {@code java.util.logging} should be
- * used. @since 2.3.22
- */
- public static final String LIBRARY_NAME_JUL = "JUL";
-
- /**
- * Enum value used for {@link #selectLoggerLibrary(int)}; indicates that Avalon LogKit should be used.
- *
- * @deprecated Avalon LogKit support will be removed sometimes in the future.
- */
- @Deprecated
- public static final int LIBRARY_AVALON = 2;
-
- /**
- * {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} property value; indicates that Avalon LogKit should be used. @since
- * 2.3.22
- *
- * @deprecated Avalon LogKit support will be removed sometimes in the future.
- */
- // This value is also used as part of the factory class name.
- @Deprecated
- public static final String LIBRARY_NAME_AVALON = "Avalon";
-
- /**
- * Enum value used for {@link #selectLoggerLibrary(int)}; indicates that Log4J should be used.
- */
- public static final int LIBRARY_LOG4J = 3;
-
- /**
- * {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} property value; indicates that Log4J should be used. @since 2.3.22
- */
- // This value is also used as part of the factory class name.
- public static final String LIBRARY_NAME_LOG4J = "Log4j";
-
- /**
- * Enum value used for {@link #selectLoggerLibrary(int)}; indicates that Apache commons-logging should be used.
- */
- public static final int LIBRARY_COMMONS = 4;
-
- /**
- * {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} property value; indicates that Apache commons-logging should be
- * used. @since 2.3.22
- */
- // This value is also used as part of the factory class name.
- public static final String LIBRARY_NAME_COMMONS_LOGGING = "CommonsLogging";
-
- /**
- * Constant used with {@link #selectLoggerLibrary(int)}; indicates that SLF4J should be used.
- */
- public static final int LIBRARY_SLF4J = 5;
-
- /**
- * {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} property value; indicates that SLF4J should be used. @since 2.3.22
- */
- // This value is also used as part of the factory class name.
- public static final String LIBRARY_NAME_SLF4J = "SLF4J";
- private static final int MAX_LIBRARY_ENUM = LIBRARY_SLF4J;
-
- private static final String REAL_LOG4J_PRESENCE_CLASS = "org.apache.log4j.FileAppender";
- private static final String LOG4J_OVER_SLF4J_TESTER_CLASS = "freemarker.log._Log4jOverSLF4JTester";
-
- /**
- * Order matters! Starts with the lowest priority.
- */
- private static final String[] LIBRARIES_BY_PRIORITY = {
- null, LIBRARY_NAME_JUL,
- "org.apache.log.Logger", LIBRARY_NAME_AVALON,
- "org.apache.log4j.Logger", LIBRARY_NAME_LOG4J,
- /* In 2.3.x this two is skipped by LIBRARY_AUTO: */
- "org.apache.commons.logging.Log", LIBRARY_NAME_COMMONS_LOGGING,
- "org.slf4j.Logger", LIBRARY_NAME_SLF4J,
- };
-
- private static String getAvailabilityCheckClassName(int libraryEnum) {
- if (libraryEnum == LIBRARY_AUTO || libraryEnum == LIBRARY_NONE) {
- // Statically linked
- return null;
- }
- return LIBRARIES_BY_PRIORITY[(libraryEnum - 1) * 2];
- }
-
- static {
- if (LIBRARIES_BY_PRIORITY.length / 2 != MAX_LIBRARY_ENUM) {
- throw new AssertionError();
- }
- }
-
- private static String getLibraryName(int libraryEnum) {
- if (libraryEnum == LIBRARY_AUTO) {
- return LIBRARY_NAME_AUTO;
- }
- if (libraryEnum == LIBRARY_NONE) {
- return LIBRARY_NAME_NONE;
- }
- return LIBRARIES_BY_PRIORITY[(libraryEnum - 1) * 2 + 1];
- }
-
- private static boolean isAutoDetected(int libraryEnum) {
- // 2.4: Remove libraryEnum == LIBRARY_SLF4J || libraryEnum == LIBRARY_COMMONS
- return !(libraryEnum == LIBRARY_AUTO || libraryEnum == LIBRARY_NONE
- || libraryEnum == LIBRARY_SLF4J || libraryEnum == LIBRARY_COMMONS);
- }
-
- private static int libraryEnum;
- private static LoggerFactory loggerFactory;
- private static boolean initializedFromSystemProperty;
-
- private static String categoryPrefix = "";
-
- private static final Map loggersByCategory = new HashMap();
-
- /**
- * Selects the logger library to use, unless it's already specified by the
- * {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} system property. Call this early in application initialization
- * phase, before calling any other FreeMarker API-s, since once parts of the FreeMarker library bind to the logging
- * subsystem, the change in this value will have no effect on them.
- *
- * @param libraryEnum
- * One of <tt>LIBRARY_...</tt> constants. By default, {@link #LIBRARY_AUTO} is used.
- *
- * @throws ClassNotFoundException
- * if an explicit logging library is asked for (that is, not {@value #LIBRARY_AUTO} or
- * {@value #LIBRARY_NONE}) and it's not found in the classpath.
- *
- * @deprecated This method isn't reliable, unless you can somehow ensure that you access the FreeMarker classes
- * first; use the {@value #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} Java system property instead, like
- * {@code java ... -Dorg.freemarker.loggerLibrary=slf4j}. See
- * {@link #SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY} for more.
- */
- @Deprecated
- public static void selectLoggerLibrary(int libraryEnum) throws ClassNotFoundException {
- if (libraryEnum < MIN_LIBRARY_ENUM || libraryEnum > MAX_LIBRARY_ENUM) {
- throw new IllegalArgumentException("Library enum value out of range");
- }
-
- synchronized (Logger.class) {
- final boolean loggerFactoryWasAlreadySet = loggerFactory != null;
- if (!loggerFactoryWasAlreadySet || libraryEnum != Logger.libraryEnum) {
- // Creates the factory only if it can be done based on system property:
- ensureLoggerFactorySet(true);
-
- // The system property has precedence because this method was deprecated by it:
- if (!initializedFromSystemProperty || loggerFactory == null) {
- int replacedLibraryEnum = Logger.libraryEnum;
- setLibrary(libraryEnum);
- loggersByCategory.clear();
- if (loggerFactoryWasAlreadySet) {
- logWarnInLogger("Logger library was already set earlier to \""
- + getLibraryName(replacedLibraryEnum) + "\"; "
- + "change to \"" + getLibraryName(libraryEnum) + "\" won't effect loggers created "
- + "earlier.");
- }
- } else if (libraryEnum != Logger.libraryEnum) {
- logWarnInLogger("Ignored " + Logger.class.getName() + ".selectLoggerLibrary(\""
- + getLibraryName(libraryEnum)
- + "\") call, because the \"" + SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY
- + "\" system property is set to \"" + getLibraryName(Logger.libraryEnum) + "\".");
- }
- }
- }
- }
-
- /**
- * Sets a category prefix. This prefix is prepended to any logger category name. This makes it possible to have
- * different FreeMarker logger categories on a per-application basis (better said, per-classloader basis). By
- * default the category prefix is the empty string. If you set a non-empty category prefix, be sure to include the
- * trailing separator dot (i.e. "MyApp.") If you want to change the default setting, do it early in application
- * initialization phase, before calling any other FreeMarker API since once various parts of the FreeMarker library
- * bind to the logging subsystem, the change in this value will have no effect on them.
- *
- * @deprecated This wasn't reliable, unless you can somehow ensure that you access the FreeMarker classes first. As
- * it's not known to be useful for users, consider it removed.
- */
- @Deprecated
- public static void setCategoryPrefix(String prefix) {
- synchronized (Logger.class) {
- if (prefix == null) {
- throw new IllegalArgumentException();
- }
- categoryPrefix = prefix;
- }
- }
-
- /**
- * Logs a debugging message.
- */
- public abstract void debug(String message);
-
- /**
- * Logs a debugging message with accompanying throwable.
- */
- public abstract void debug(String message, Throwable t);
-
- /**
- * Logs an informational message.
- */
- public abstract void info(String message);
-
- /**
- * Logs an informational message with accompanying throwable.
- */
- public abstract void info(String message, Throwable t);
-
- /**
- * Logs a warning message.
- */
- public abstract void warn(String message);
-
- /**
- * Logs a warning message with accompanying throwable.
- */
- public abstract void warn(String message, Throwable t);
-
- /**
- * Logs an error message.
- */
- public abstract void error(String message);
-
- /**
- * Logs an error message with accompanying throwable.
- */
- public abstract void error(String message, Throwable t);
-
- /**
- * Returns true if this logger will log debug messages.
- */
- public abstract boolean isDebugEnabled();
-
- /**
- * Returns true if this logger will log informational messages.
- */
- public abstract boolean isInfoEnabled();
-
- /**
- * Returns true if this logger will log warning messages.
- */
- public abstract boolean isWarnEnabled();
-
- /**
- * Returns true if this logger will log error messages.
- */
- public abstract boolean isErrorEnabled();
-
- /**
- * Returns true if this logger will log fatal error messages.
- */
- public abstract boolean isFatalEnabled();
-
- /**
- * Returns a logger for the specified category.
- *
- * @param category
- * a dot separated hierarchical category name. If a category prefix is in effect, it's prepended to the
- * category name.
- */
- public static Logger getLogger(String category) {
- if (categoryPrefix.length() != 0) {
- category = categoryPrefix + category;
- }
- synchronized (loggersByCategory) {
- Logger logger = (Logger) loggersByCategory.get(category);
- if (logger == null) {
- ensureLoggerFactorySet(false);
- logger = loggerFactory.getLogger(category);
- loggersByCategory.put(category, logger);
- }
- return logger;
- }
- }
-
- private static void ensureLoggerFactorySet(boolean onlyIfCanBeSetFromSysProp) {
- if (loggerFactory != null) return;
- synchronized (Logger.class) {
- if (loggerFactory != null) return;
-
- String sysPropVal = getSystemProperty(SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY);
-
- final int libraryEnum;
- if (sysPropVal != null) {
- sysPropVal = sysPropVal.trim();
-
- boolean foundMatch = false;
- int matchedEnum = MIN_LIBRARY_ENUM;
- do {
- if (sysPropVal.equalsIgnoreCase(getLibraryName(matchedEnum))) {
- foundMatch = true;
- } else {
- matchedEnum++;
- }
- } while (matchedEnum <= MAX_LIBRARY_ENUM && !foundMatch);
-
- if (!foundMatch) {
- logWarnInLogger("Ignored invalid \"" + SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY
- + "\" system property value: \"" + sysPropVal + "\"");
- if (onlyIfCanBeSetFromSysProp) return;
- }
-
- libraryEnum = foundMatch ? matchedEnum : LIBRARY_AUTO;
- } else {
- if (onlyIfCanBeSetFromSysProp) return;
- libraryEnum = LIBRARY_AUTO;
- }
-
- try {
- setLibrary(libraryEnum);
- if (sysPropVal != null) {
- initializedFromSystemProperty = true;
- }
- } catch (Throwable e) {
- final boolean disableLogging = !(onlyIfCanBeSetFromSysProp && sysPropVal != null);
- logErrorInLogger(
- "Couldn't set up logger for \"" + getLibraryName(libraryEnum) + "\""
- + (disableLogging ? "; logging disabled" : "."), e);
- if (disableLogging) {
- try {
- setLibrary(LIBRARY_NONE);
- } catch (ClassNotFoundException e2) {
- throw new RuntimeException("Bug", e2);
- }
- }
- }
- }
- }
-
- /**
- * @throws ClassNotFoundException
- * If the requested logger library is not available. Never thrown for {@link #LIBRARY_AUTO}.
- */
- private static LoggerFactory createLoggerFactory(int libraryEnum) throws ClassNotFoundException {
- if (libraryEnum == LIBRARY_AUTO) {
- for (int libraryEnumToTry = MAX_LIBRARY_ENUM; libraryEnumToTry >= MIN_LIBRARY_ENUM; libraryEnumToTry--) {
- if (!isAutoDetected(libraryEnumToTry)) continue;
- if (libraryEnumToTry == LIBRARY_LOG4J && hasLog4LibraryThatDelegatesToWorkingSLF4J()) {
- libraryEnumToTry = LIBRARY_SLF4J;
- }
-
- try {
- return createLoggerFactoryForNonAuto(libraryEnumToTry);
- } catch (ClassNotFoundException e) {
- // Expected, intentionally suppressed.
- } catch (Throwable e) {
- logErrorInLogger(
- "Unexpected error when initializing logging for \""
- + getLibraryName(libraryEnumToTry) + "\".",
- e);
- }
- }
- logWarnInLogger("Auto detecton couldn't set up any logger libraries; FreeMarker logging suppressed.");
- return new _NullLoggerFactory();
- } else {
- return createLoggerFactoryForNonAuto(libraryEnum);
- }
- }
-
- /**
- * @throws ClassNotFoundException
- * If the required logger library is not available.
- */
- private static LoggerFactory createLoggerFactoryForNonAuto(int libraryEnum) throws ClassNotFoundException {
- final String availabilityCheckClassName = getAvailabilityCheckClassName(libraryEnum);
- if (availabilityCheckClassName != null) { // Dynamically created factory
- Class.forName(availabilityCheckClassName);
- String libraryName = getLibraryName(libraryEnum);
- try {
- return (LoggerFactory) Class.forName(
- "freemarker.log._" + libraryName + "LoggerFactory").newInstance();
- } catch (Exception e) {
- throw new RuntimeException(
- "Unexpected error when creating logger factory for \"" + libraryName + "\".", e);
- }
- } else { // Non-dynamically created factory
- if (libraryEnum == LIBRARY_JAVA) {
- return new _JULLoggerFactory();
- } else if (libraryEnum == LIBRARY_NONE) {
- return new _NullLoggerFactory();
- } else {
- throw new RuntimeException("Bug");
- }
- }
- }
-
- private static boolean hasLog4LibraryThatDelegatesToWorkingSLF4J() {
- try {
- Class.forName(getAvailabilityCheckClassName(LIBRARY_LOG4J));
- Class.forName(getAvailabilityCheckClassName(LIBRARY_SLF4J));
- } catch (Throwable e) {
- return false;
- }
- try {
- Class.forName(REAL_LOG4J_PRESENCE_CLASS);
- return false;
- } catch (ClassNotFoundException e) {
- try {
- Object r = Class.forName(LOG4J_OVER_SLF4J_TESTER_CLASS)
- .getMethod("test", new Class[] {}).invoke(null);
- return ((Boolean) r).booleanValue();
- } catch (Throwable e2) {
- return false;
- }
- }
- }
-
- private synchronized static void setLibrary(int libraryEnum) throws ClassNotFoundException {
- loggerFactory = createLoggerFactory(libraryEnum);
- Logger.libraryEnum = libraryEnum;
- }
-
- private static void logWarnInLogger(String message) {
- logInLogger(false, message, null);
- }
-
- private static void logErrorInLogger(String message, Throwable exception) {
- logInLogger(true, message, exception);
- }
-
- private static void logInLogger(boolean error, String message, Throwable exception) {
- boolean canUseRealLogger;
- synchronized (Logger.class) {
- canUseRealLogger = loggerFactory != null && !(loggerFactory instanceof _NullLoggerFactory);
- }
-
- if (canUseRealLogger) {
- try {
- final Logger logger = Logger.getLogger("freemarker.logger");
- if (error) {
- logger.error(message);
- } else {
- logger.warn(message);
- }
- } catch (Throwable e) {
- canUseRealLogger = false;
- }
- }
-
- if (!canUseRealLogger) {
- System.err.println((error ? "ERROR" : "WARN") + " "
- + LoggerFactory.class.getName() + ": " + message);
- if (exception != null) {
- System.err.println("\tException: " + tryToString(exception));
- while (exception.getCause() != null) {
- exception = exception.getCause();
- System.err.println("\tCaused by: " + tryToString(exception));
- }
- }
- }
- }
-
- /**
- * Don't use {@link freemarker.template.utility.SecurityUtilities#getSystemProperty(String, String)} here, as it
- * (might) depends on the logger, hence interfering with the initialization.
- */
- private static String getSystemProperty(final String key) {
- try {
- return (String) AccessController.doPrivileged(
- new PrivilegedAction() {
- public Object run() {
- return System.getProperty(key, null);
- }
- });
- } catch (AccessControlException e) {
- logWarnInLogger("Insufficient permissions to read system property \"" + key + "\".");
- return null;
- } catch (Throwable e) {
- logErrorInLogger("Failed to read system property \"" + key + "\".", e);
- return null;
- }
- }
-
- /**
- * Don't use {@link freemarker.template.utility.StringUtil#tryToString(Object)} here, as it might depends on the
- * logger, hence interfering with the initialization.
- */
- private static String tryToString(Object object) {
- if (object == null) return null;
- try {
- return object.toString();
- } catch (Throwable e) {
- return object.getClass().getName();
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/LoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/LoggerFactory.java b/src/main/java/freemarker/log/LoggerFactory.java
deleted file mode 100644
index 5c4acef..0000000
--- a/src/main/java/freemarker/log/LoggerFactory.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 freemarker.log;
-
-interface LoggerFactory {
- public Logger getLogger(String category);
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/SLF4JLoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/SLF4JLoggerFactory.java b/src/main/java/freemarker/log/SLF4JLoggerFactory.java
deleted file mode 100644
index d0efbf2..0000000
--- a/src/main/java/freemarker/log/SLF4JLoggerFactory.java
+++ /dev/null
@@ -1,205 +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 freemarker.log;
-
-import org.slf4j.spi.LocationAwareLogger;
-
-/**
- * @deprecated Don't use it, meant to be internal.
- */
-// 2.4: Remove
-@Deprecated
-public class SLF4JLoggerFactory implements LoggerFactory {
-
- public Logger getLogger(String category) {
- org.slf4j.Logger slf4jLogger = org.slf4j.LoggerFactory.getLogger(category);
- if (slf4jLogger instanceof LocationAwareLogger) {
- return new LocationAwareSLF4JLogger((LocationAwareLogger) slf4jLogger);
- } else {
- return new LocationUnawareSLF4JLogger(slf4jLogger);
- }
- }
-
- /**
- * Logger where the log entry issuer (class, method) will be correctly
- * shown to be the caller of <tt>LocationAwareSLF4JLogger</tt> methods.
- */
- private static final class LocationAwareSLF4JLogger extends Logger {
-
- private static final String ADAPTER_FQCN
- = LocationAwareSLF4JLogger.class.getName();
-
- private final LocationAwareLogger logger;
-
- LocationAwareSLF4JLogger(LocationAwareLogger logger) {
- this.logger = logger;
- }
-
- @Override
- public void debug(String message) {
- debug(message, null);
- }
-
- @Override
- public void debug(String message, Throwable t) {
- logger.log(null, ADAPTER_FQCN,
- LocationAwareLogger.DEBUG_INT, message, null, t);
- }
-
- @Override
- public void info(String message) {
- info(message, null);
- }
-
- @Override
- public void info(String message, Throwable t) {
- logger.log(null, ADAPTER_FQCN,
- LocationAwareLogger.INFO_INT, message, null, t);
- }
-
- @Override
- public void warn(String message) {
- warn(message, null);
- }
-
- @Override
- public void warn(String message, Throwable t) {
- logger.log(null, ADAPTER_FQCN,
- LocationAwareLogger.WARN_INT, message, null, t);
- }
-
- @Override
- public void error(String message) {
- error(message, null);
- }
-
- @Override
- public void error(String message, Throwable t) {
- logger.log(null, ADAPTER_FQCN,
- LocationAwareLogger.ERROR_INT, message, null, t);
- }
-
- @Override
- public boolean isDebugEnabled() {
- return logger.isDebugEnabled();
- }
-
- @Override
- public boolean isInfoEnabled() {
- return logger.isInfoEnabled();
- }
-
- @Override
- public boolean isWarnEnabled() {
- return logger.isWarnEnabled();
- }
-
- @Override
- public boolean isErrorEnabled() {
- return logger.isErrorEnabled();
- }
-
- @Override
- public boolean isFatalEnabled() {
- return logger.isErrorEnabled();
- }
-
- }
-
- /**
- * Logger where the log entry issuer (class, method) will be incorrectly
- * shown to be a method of this class.
- */
- private static class LocationUnawareSLF4JLogger extends Logger {
-
- private final org.slf4j.Logger logger;
-
- LocationUnawareSLF4JLogger(org.slf4j.Logger logger) {
- this.logger = logger;
- }
-
- @Override
- public void debug(String message) {
- logger.debug(message);
- }
-
- @Override
- public void debug(String message, Throwable t) {
- logger.debug(message, t);
- }
-
- @Override
- public void info(String message) {
- logger.info(message);
- }
-
- @Override
- public void info(String message, Throwable t) {
- logger.info(message, t);
- }
-
- @Override
- public void warn(String message) {
- logger.warn(message);
- }
-
- @Override
- public void warn(String message, Throwable t) {
- logger.warn(message, t);
- }
-
- @Override
- public void error(String message) {
- logger.error(message);
- }
-
- @Override
- public void error(String message, Throwable t) {
- logger.error(message, t);
- }
-
- @Override
- public boolean isDebugEnabled() {
- return logger.isDebugEnabled();
- }
-
- @Override
- public boolean isInfoEnabled() {
- return logger.isInfoEnabled();
- }
-
- @Override
- public boolean isWarnEnabled() {
- return logger.isWarnEnabled();
- }
-
- @Override
- public boolean isErrorEnabled() {
- return logger.isErrorEnabled();
- }
-
- @Override
- public boolean isFatalEnabled() {
- return logger.isErrorEnabled();
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/_AvalonLoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/_AvalonLoggerFactory.java b/src/main/java/freemarker/log/_AvalonLoggerFactory.java
deleted file mode 100644
index 9e274b1..0000000
--- a/src/main/java/freemarker/log/_AvalonLoggerFactory.java
+++ /dev/null
@@ -1,107 +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 freemarker.log;
-
-import org.apache.log.Hierarchy;
-
-/**
- * Don't use this class; it's only public to work around Google App Engine Java
- * compliance issues. FreeMarker developers only: treat this class as package-visible.
- */
-public class _AvalonLoggerFactory implements LoggerFactory {
- public Logger getLogger(String category) {
- return new AvalonLogger(Hierarchy.getDefaultHierarchy().getLoggerFor(category));
- }
-
- private static class AvalonLogger
- extends
- Logger {
- private final org.apache.log.Logger logger;
-
- AvalonLogger(org.apache.log.Logger logger) {
- this.logger = logger;
- }
-
- @Override
- public void debug(String message) {
- logger.debug(message);
- }
-
- @Override
- public void debug(String message, Throwable t) {
- logger.debug(message, t);
- }
-
- @Override
- public void error(String message) {
- logger.error(message);
- }
-
- @Override
- public void error(String message, Throwable t) {
- logger.error(message, t);
- }
-
- @Override
- public void info(String message) {
- logger.info(message);
- }
-
- @Override
- public void info(String message, Throwable t) {
- logger.info(message, t);
- }
-
- @Override
- public void warn(String message) {
- logger.warn(message);
- }
-
- @Override
- public void warn(String message, Throwable t) {
- logger.warn(message, t);
- }
-
- @Override
- public boolean isDebugEnabled() {
- return logger.isDebugEnabled();
- }
-
- @Override
- public boolean isInfoEnabled() {
- return logger.isInfoEnabled();
- }
-
- @Override
- public boolean isWarnEnabled() {
- return logger.isWarnEnabled();
- }
-
- @Override
- public boolean isErrorEnabled() {
- return logger.isErrorEnabled();
- }
-
- @Override
- public boolean isFatalEnabled() {
- return logger.isFatalErrorEnabled();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/_CommonsLoggingLoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/_CommonsLoggingLoggerFactory.java b/src/main/java/freemarker/log/_CommonsLoggingLoggerFactory.java
deleted file mode 100644
index 551aa52..0000000
--- a/src/main/java/freemarker/log/_CommonsLoggingLoggerFactory.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 freemarker.log;
-
-/**
- * Don't use this class; it's only public to work around Google App Engine Java
- * compliance issues. FreeMarker developers only: treat this class as package-visible.
- */
-public class _CommonsLoggingLoggerFactory extends CommonsLoggingLoggerFactory {
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/_JULLoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/_JULLoggerFactory.java b/src/main/java/freemarker/log/_JULLoggerFactory.java
deleted file mode 100644
index 7eb11b3..0000000
--- a/src/main/java/freemarker/log/_JULLoggerFactory.java
+++ /dev/null
@@ -1,107 +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 freemarker.log;
-
-import java.util.logging.Level;
-
-/**
- * Don't use this class; it's only public to work around Google App Engine Java
- * compliance issues. FreeMarker developers only: treat this class as package-visible.
- */
-public class _JULLoggerFactory implements LoggerFactory {
- public Logger getLogger(String category) {
- return new JULLogger(java.util.logging.Logger.getLogger(category));
- }
-
- private static class JULLogger
- extends
- Logger {
- private final java.util.logging.Logger logger;
-
- JULLogger(java.util.logging.Logger logger) {
- this.logger = logger;
- }
-
- @Override
- public void debug(String message) {
- logger.log(Level.FINE, message);
- }
-
- @Override
- public void debug(String message, Throwable t) {
- logger.log(Level.FINE, message, t);
- }
-
- @Override
- public void error(String message) {
- logger.log(Level.SEVERE, message);
- }
-
- @Override
- public void error(String message, Throwable t) {
- logger.log(Level.SEVERE, message, t);
- }
-
- @Override
- public void info(String message) {
- logger.log(Level.INFO, message);
- }
-
- @Override
- public void info(String message, Throwable t) {
- logger.log(Level.INFO, message, t);
- }
-
- @Override
- public void warn(String message) {
- logger.log(Level.WARNING, message);
- }
-
- @Override
- public void warn(String message, Throwable t) {
- logger.log(Level.WARNING, message, t);
- }
-
- @Override
- public boolean isDebugEnabled() {
- return logger.isLoggable(Level.FINE);
- }
-
- @Override
- public boolean isInfoEnabled() {
- return logger.isLoggable(Level.INFO);
- }
-
- @Override
- public boolean isWarnEnabled() {
- return logger.isLoggable(Level.WARNING);
- }
-
- @Override
- public boolean isErrorEnabled() {
- return logger.isLoggable(Level.SEVERE);
- }
-
- @Override
- public boolean isFatalEnabled() {
- return logger.isLoggable(Level.SEVERE);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/_Log4jLoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/_Log4jLoggerFactory.java b/src/main/java/freemarker/log/_Log4jLoggerFactory.java
deleted file mode 100644
index d78a164..0000000
--- a/src/main/java/freemarker/log/_Log4jLoggerFactory.java
+++ /dev/null
@@ -1,107 +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 freemarker.log;
-
-import org.apache.log4j.Level;
-
-/**
- * Don't use this class; it's only public to work around Google App Engine Java
- * compliance issues. FreeMarker developers only: treat this class as package-visible.
- */
-public class _Log4jLoggerFactory implements LoggerFactory {
- public Logger getLogger(String category) {
- return new Log4jLogger(org.apache.log4j.Logger.getLogger(category));
- }
-
- private static class Log4jLogger
- extends
- Logger {
- private final org.apache.log4j.Logger logger;
-
- Log4jLogger(org.apache.log4j.Logger logger) {
- this.logger = logger;
- }
-
- @Override
- public void debug(String message) {
- logger.debug(message);
- }
-
- @Override
- public void debug(String message, Throwable t) {
- logger.debug(message, t);
- }
-
- @Override
- public void error(String message) {
- logger.error(message);
- }
-
- @Override
- public void error(String message, Throwable t) {
- logger.error(message, t);
- }
-
- @Override
- public void info(String message) {
- logger.info(message);
- }
-
- @Override
- public void info(String message, Throwable t) {
- logger.info(message, t);
- }
-
- @Override
- public void warn(String message) {
- logger.warn(message);
- }
-
- @Override
- public void warn(String message, Throwable t) {
- logger.warn(message, t);
- }
-
- @Override
- public boolean isDebugEnabled() {
- return logger.isDebugEnabled();
- }
-
- @Override
- public boolean isInfoEnabled() {
- return logger.isInfoEnabled();
- }
-
- @Override
- public boolean isWarnEnabled() {
- return logger.isEnabledFor(Level.WARN);
- }
-
- @Override
- public boolean isErrorEnabled() {
- return logger.isEnabledFor(Level.ERROR);
- }
-
- @Override
- public boolean isFatalEnabled() {
- return logger.isEnabledFor(Level.FATAL);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/_Log4jOverSLF4JTester.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/_Log4jOverSLF4JTester.java b/src/main/java/freemarker/log/_Log4jOverSLF4JTester.java
deleted file mode 100644
index 5afcadf..0000000
--- a/src/main/java/freemarker/log/_Log4jOverSLF4JTester.java
+++ /dev/null
@@ -1,43 +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 freemarker.log;
-
-/**
- * Don't use this class; it's only public to work around Google App Engine Java
- * compliance issues. FreeMarker developers only: treat this class as package-visible.
- */
-public class _Log4jOverSLF4JTester {
-
- private static final String MDC_KEY = _Log4jOverSLF4JTester.class.getName();
-
- /**
- * Returns if Log4j-over-SLF4J is actually working. Sometimes the API classes are present, but there's no SLF4J
- * implementation around.
- */
- public static final boolean test() {
- org.apache.log4j.MDC.put(MDC_KEY, "");
- try {
- return org.slf4j.MDC.get(MDC_KEY) != null;
- } finally {
- org.apache.log4j.MDC.remove(MDC_KEY);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/_NullLoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/_NullLoggerFactory.java b/src/main/java/freemarker/log/_NullLoggerFactory.java
deleted file mode 100644
index 7e161a5..0000000
--- a/src/main/java/freemarker/log/_NullLoggerFactory.java
+++ /dev/null
@@ -1,93 +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 freemarker.log;
-
-/**
- * Don't use this class; it's only public to work around Google App Engine Java
- * compliance issues. FreeMarker developers only: treat this class as package-visible.
- */
-public class _NullLoggerFactory implements LoggerFactory {
- _NullLoggerFactory() {
- }
-
- public Logger getLogger(String category) {
- return INSTANCE;
- }
-
- private static final Logger INSTANCE = new Logger()
- {
- @Override
- public void debug(String message) {
- }
-
- @Override
- public void debug(String message, Throwable t) {
- }
-
- @Override
- public void error(String message) {
- }
-
- @Override
- public void error(String message, Throwable t) {
- }
-
- @Override
- public void info(String message) {
- }
-
- @Override
- public void info(String message, Throwable t) {
- }
-
- @Override
- public void warn(String message) {
- }
-
- @Override
- public void warn(String message, Throwable t) {
- }
-
- @Override
- public boolean isDebugEnabled() {
- return false;
- }
-
- @Override
- public boolean isInfoEnabled() {
- return false;
- }
-
- @Override
- public boolean isWarnEnabled() {
- return false;
- }
-
- @Override
- public boolean isErrorEnabled() {
- return false;
- }
-
- @Override
- public boolean isFatalEnabled() {
- return false;
- }
- };
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/_SLF4JLoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/_SLF4JLoggerFactory.java b/src/main/java/freemarker/log/_SLF4JLoggerFactory.java
deleted file mode 100644
index 6332130..0000000
--- a/src/main/java/freemarker/log/_SLF4JLoggerFactory.java
+++ /dev/null
@@ -1,29 +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 freemarker.log;
-
-
-/**
- * Don't use this class; it's only public to work around Google App Engine Java
- * compliance issues. FreeMarker developers only: treat this class as package-visible.
- */
-public class _SLF4JLoggerFactory extends SLF4JLoggerFactory {
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/log/package.html
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/log/package.html b/src/main/java/freemarker/log/package.html
deleted file mode 100644
index afc773c..0000000
--- a/src/main/java/freemarker/log/package.html
+++ /dev/null
@@ -1,27 +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.
--->
-<html>
-<head>
-</head>
-<BODY>
-<p>
-Logging facility; dispatches FreeMarker log messages to the chosen logger library.
-
-</body>
-</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/template/Configuration.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/template/Configuration.java b/src/main/java/freemarker/template/Configuration.java
index 368ce23..f460eac 100644
--- a/src/main/java/freemarker/template/Configuration.java
+++ b/src/main/java/freemarker/template/Configuration.java
@@ -42,6 +42,9 @@ import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.cache.CacheStorage;
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.FileTemplateLoader;
@@ -85,7 +88,6 @@ import freemarker.core._SortedArraySet;
import freemarker.core._UnmodifiableCompositeSet;
import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.beans.BeansWrapperBuilder;
-import freemarker.log.Logger;
import freemarker.template.utility.CaptureOutput;
import freemarker.template.utility.ClassUtil;
import freemarker.template.utility.Constants;
@@ -146,7 +148,7 @@ import freemarker.template.utility.XmlEscape;
*/
public class Configuration extends Configurable implements Cloneable, ParserConfiguration {
- private static final Logger CACHE_LOG = Logger.getLogger("freemarker.cache");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.cache");
private static final String VERSION_PROPERTIES_PATH = "freemarker/version.properties";
@@ -225,16 +227,19 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
* Legacy, snake case ({@code like_this}) variation of the setting name. @since 2.3.23
* @deprecated Use {@link Configurable#AUTO_IMPORT_KEY_SNAKE_CASE} instead.
*/
+ @Deprecated
public static final String AUTO_IMPORT_KEY_SNAKE_CASE = "auto_import";
/**
* Modern, camel case ({@code likeThis}) variation of the setting name. @since 2.3.23
* @deprecated Use {@link Configurable#AUTO_IMPORT_KEY_CAMEL_CASE} instead.
*/
+ @Deprecated
public static final String AUTO_IMPORT_KEY_CAMEL_CASE = "autoImport";
/**
* Alias to the {@code ..._SNAKE_CASE} variation due to backward compatibility constraints.
* @deprecated Use {@link Configurable#AUTO_IMPORT_KEY_SNAKE_CASE} instead.
*/
+ @Deprecated
public static final String AUTO_IMPORT_KEY = AUTO_IMPORT_KEY_SNAKE_CASE;
/** Legacy, snake case ({@code like_this}) variation of the setting name. @since 2.3.23 */
@@ -895,7 +900,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
try {
return new LegacyDefaultFileTemplateLoader();
} catch (Exception e) {
- CACHE_LOG.warn("Couldn't create legacy default TemplateLoader which accesses the current directory. "
+ LOG.warn("Couldn't create legacy default TemplateLoader which accesses the current directory. "
+ "(Use new Configuration(Configuration.VERSION_2_3_21) or higher to avoid this.)", e);
return null;
}
@@ -904,6 +909,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
}
}
+ // [FM3] Remove
private static class LegacyDefaultFileTemplateLoader extends FileTemplateLoader {
public LegacyDefaultFileTemplateLoader() throws IOException {
@@ -1665,6 +1671,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
/**
* The getter pair of {@link #setStrictSyntaxMode}.
*/
+ @Override
public boolean getStrictSyntaxMode() {
return strictSyntax;
}
@@ -1734,6 +1741,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
* @return Never {@code null}.
* @since 2.3.20
*/
+ @Override
public Version getIncompatibleImprovements() {
return incompatibleImprovements;
}
@@ -1777,6 +1785,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
*
* @see #setWhitespaceStripping
*/
+ @Override
public boolean getWhitespaceStripping() {
return whitespaceStripping;
}
@@ -1841,6 +1850,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
*
* @since 2.3.24
*/
+ @Override
public int getAutoEscapingPolicy() {
return autoEscapingPolicy;
}
@@ -1886,6 +1896,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
*
* @since 2.3.24
*/
+ @Override
public OutputFormat getOutputFormat() {
return outputFormat;
}
@@ -2138,6 +2149,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
*
* @since 2.3.24
*/
+ @Override
public boolean getRecognizeStandardFileExtensions() {
return recognizeStandardFileExtensions == null
? incompatibleImprovements.intValue() >= _TemplateAPI.VERSION_INT_2_3_24
@@ -2175,6 +2187,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
/**
* The getter pair of {@link #setTagSyntax(int)}.
*/
+ @Override
public int getTagSyntax() {
return tagSyntax;
}
@@ -2240,6 +2253,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
*
* @since 2.3.23
*/
+ @Override
public int getNamingConvention() {
return namingConvention;
}
@@ -2272,6 +2286,7 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
*
* @since 2.3.25
*/
+ @Override
public int getTabSize() {
return tabSize;
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/template/utility/CaptureOutput.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/template/utility/CaptureOutput.java b/src/main/java/freemarker/template/utility/CaptureOutput.java
index d505d0a..fa98871 100644
--- a/src/main/java/freemarker/template/utility/CaptureOutput.java
+++ b/src/main/java/freemarker/template/utility/CaptureOutput.java
@@ -61,6 +61,7 @@ import freemarker.template.TemplateTransformModel;
@Deprecated
public class CaptureOutput implements TemplateTransformModel {
+ @Override
public Writer getWriter(final Writer out, final Map args) throws TemplateModelException {
String errmsg = "Must specify the name of the variable in "
+ "which to capture the output with the 'var' or 'local' or 'global' parameter.";
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/template/utility/SecurityUtilities.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/template/utility/SecurityUtilities.java b/src/main/java/freemarker/template/utility/SecurityUtilities.java
index e17289f..95bcf4b 100644
--- a/src/main/java/freemarker/template/utility/SecurityUtilities.java
+++ b/src/main/java/freemarker/template/utility/SecurityUtilities.java
@@ -23,12 +23,13 @@ import java.security.AccessControlException;
import java.security.AccessController;
import java.security.PrivilegedAction;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
*/
public class SecurityUtilities {
- private static final Logger LOG = Logger.getLogger("freemarker.security");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.security");
private SecurityUtilities() {
}
@@ -36,6 +37,7 @@ public class SecurityUtilities {
return (String) AccessController.doPrivileged(
new PrivilegedAction()
{
+ @Override
public Object run() {
return System.getProperty(key);
}
@@ -47,14 +49,17 @@ public class SecurityUtilities {
return (String) AccessController.doPrivileged(
new PrivilegedAction()
{
+ @Override
public Object run() {
return System.getProperty(key, defValue);
}
});
} catch (AccessControlException e) {
- LOG.warn("Insufficient permissions to read system property " +
- StringUtil.jQuoteNoXSS(key) + ", using default value " +
- StringUtil.jQuoteNoXSS(defValue));
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Insufficient permissions to read system property " +
+ StringUtil.jQuoteNoXSS(key) + ", using default value " +
+ StringUtil.jQuoteNoXSS(defValue));
+ }
return defValue;
}
}
@@ -64,13 +69,16 @@ public class SecurityUtilities {
return (Integer) AccessController.doPrivileged(
new PrivilegedAction()
{
+ @Override
public Object run() {
return Integer.getInteger(key, defValue);
}
});
} catch (AccessControlException e) {
- LOG.warn("Insufficient permissions to read system property " +
- StringUtil.jQuote(key) + ", using default value " + defValue);
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Insufficient permissions to read system property " +
+ StringUtil.jQuote(key) + ", using default value " + defValue);
+ }
return Integer.valueOf(defValue);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/manual/en_US/FM3-CHANGE-LOG.txt
----------------------------------------------------------------------
diff --git a/src/manual/en_US/FM3-CHANGE-LOG.txt b/src/manual/en_US/FM3-CHANGE-LOG.txt
index e5c57dd..5c526c4 100644
--- a/src/manual/en_US/FM3-CHANGE-LOG.txt
+++ b/src/manual/en_US/FM3-CHANGE-LOG.txt
@@ -3,4 +3,6 @@ the FreeMarer 3 changelog here:
- Increased version number to 3.0.0 (nightly aka. SNAPSHOT)
- Removed legacy extensions: rhyno, jython, xml (not to be confused with dom), jdom, ant.
-- Removed JSP 2.0 support (2.1 is the minimum for now, but maybe it will be 2.2 and Servlet 3.0 later).
\ No newline at end of file
+- Removed JSP 2.0 support (2.1 is the minimum for now, but maybe it will be 2.2 and Servlet 3.0 later).
+- Removed freemarker.ext.log, our log abstraction layer from the old times when there was no clear winner on this field.
+ Added org.slf4j:slf4j-api as required dependency instead.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/template/DefaultObjectWrapperTest.java b/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
index 5bb9152..00432ce 100644
--- a/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
+++ b/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
@@ -1029,6 +1029,7 @@ public class DefaultObjectWrapperTest {
}
private static final class PureIterable implements Iterable<String> {
+ @Override
public Iterator<String> iterator() {
return ImmutableList.of("a", "b", "c").iterator();
}
@@ -1050,6 +1051,7 @@ public class DefaultObjectWrapperTest {
final static NullModel INSTANCE = new NullModel();
+ @Override
public Object getAdaptedObject(Class hint) {
return null;
}
@@ -1145,10 +1147,12 @@ public class DefaultObjectWrapperTest {
this.tupple = tupple;
}
+ @Override
public int size() throws TemplateModelException {
return 2;
}
+ @Override
public TemplateModel get(int index) throws TemplateModelException {
switch (index) {
case 0: return wrap(tupple.getE1());
@@ -1157,6 +1161,7 @@ public class DefaultObjectWrapperTest {
}
}
+ @Override
public Object getAdaptedObject(Class hint) {
return tupple;
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/test/servlet/Model2TesterServlet.java b/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
index 8b41be9..e6414a8 100644
--- a/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
+++ b/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
@@ -28,7 +28,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import freemarker.ext.servlet.FreemarkerServlet;
import freemarker.template.utility.StringUtil;
@@ -44,7 +45,7 @@ import freemarker.template.utility.StringUtil;
*/
public class Model2TesterServlet extends HttpServlet {
- private static final Logger LOG = Logger.getLogger(Model2TesterServlet.class);
+ private static final Logger LOG = LoggerFactory.getLogger(Model2TesterServlet.class);
public static final String VIEW_PARAM_NAME = "view";
public static final String ACTION_PARAM_NAME = "action";
[2/2] incubator-freemarker git commit: Removed freemarker.ext.log,
our log abstraction layer from the old times when there was no clear
winner on this field. Added org.slf4j:slf4j-api as required dependency
instead.
Posted by dd...@apache.org.
Removed freemarker.ext.log, our log abstraction layer from the old times when there was no clear winner on this field. Added org.slf4j:slf4j-api as required dependency instead.
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/8952cbbb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/8952cbbb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/8952cbbb
Branch: refs/heads/3
Commit: 8952cbbba8143038428441831ea22bb3ecb300e1
Parents: 1588a7f
Author: ddekany <dd...@apache.org>
Authored: Fri Jan 20 22:32:08 2017 +0100
Committer: ddekany <dd...@apache.org>
Committed: Fri Jan 20 22:32:08 2017 +0100
----------------------------------------------------------------------
README | 15 +-
build.xml | 7 +-
ivy.xml | 18 +-
.../freemarker/cache/FileTemplateLoader.java | 16 +-
.../java/freemarker/cache/TemplateCache.java | 10 +-
.../freemarker/cache/WebappTemplateLoader.java | 15 +-
src/main/java/freemarker/core/Environment.java | 24 +-
.../core/JavaTemplateDateFormatFactory.java | 12 +-
.../core/JavaTemplateNumberFormatFactory.java | 11 +-
src/main/java/freemarker/core/RegexpHelper.java | 7 +-
.../core/_ErrorDescriptionBuilder.java | 6 +-
.../java/freemarker/core/_JavaVersions.java | 5 +-
.../freemarker/debug/impl/DebuggerServer.java | 11 +-
.../debug/impl/RmiDebuggerListenerImpl.java | 8 +-
.../java/freemarker/ext/beans/BeanModel.java | 27 +-
.../java/freemarker/ext/beans/BeansWrapper.java | 20 +-
.../freemarker/ext/beans/ClassIntrospector.java | 40 +-
.../java/freemarker/ext/beans/StaticModel.java | 12 +-
.../java/freemarker/ext/dom/NodeListModel.java | 4 +
src/main/java/freemarker/ext/dom/NodeModel.java | 17 +-
.../freemarker/ext/jsp/EventForwarding.java | 21 +-
.../jsp/FreeMarkerJspApplicationContext.java | 21 +-
.../freemarker/ext/jsp/TagTransformModel.java | 12 +-
.../java/freemarker/ext/jsp/TaglibFactory.java | 52 +-
.../ext/jsp/_FreeMarkerPageContext21.java | 8 +-
.../ext/servlet/FreemarkerServlet.java | 19 +-
.../freemarker/ext/servlet/InitParamParser.java | 10 +-
.../log/CommonsLoggingLoggerFactory.java | 109 ----
src/main/java/freemarker/log/Logger.java | 580 -------------------
src/main/java/freemarker/log/LoggerFactory.java | 24 -
.../java/freemarker/log/SLF4JLoggerFactory.java | 205 -------
.../freemarker/log/_AvalonLoggerFactory.java | 107 ----
.../log/_CommonsLoggingLoggerFactory.java | 28 -
.../java/freemarker/log/_JULLoggerFactory.java | 107 ----
.../freemarker/log/_Log4jLoggerFactory.java | 107 ----
.../freemarker/log/_Log4jOverSLF4JTester.java | 43 --
.../java/freemarker/log/_NullLoggerFactory.java | 93 ---
.../freemarker/log/_SLF4JLoggerFactory.java | 29 -
src/main/java/freemarker/log/package.html | 27 -
.../java/freemarker/template/Configuration.java | 21 +-
.../template/utility/CaptureOutput.java | 1 +
.../template/utility/SecurityUtilities.java | 22 +-
src/manual/en_US/FM3-CHANGE-LOG.txt | 4 +-
.../template/DefaultObjectWrapperTest.java | 5 +
.../test/servlet/Model2TesterServlet.java | 5 +-
45 files changed, 330 insertions(+), 1615 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/README
----------------------------------------------------------------------
diff --git a/README b/README
index 2098ad3..0c1f042 100644
--- a/README
+++ b/README
@@ -72,7 +72,7 @@ in the documentation/index.html directory.
Installing
----------
-If you are using Maven, just add this dependency:
+If you are using Maven (or Gradle, etc.), just add this dependency:
<!--
Attention: Be sure nothing pulls in an old dependency with groupId
@@ -90,10 +90,12 @@ application's ClassLoader will find it. For example, if you are using
FreeMarker in a web application, you probably want to put
freemarker.jar into the WEB-INF/lib directory of your web application.
-FreeMarker has no required dependencies. It has several optional
-dependencies, but usually you don't have to deal with them, because if
-you are using an optional feature that's certainly because your
-application already uses the related library.
+FreeMarker 3 has only one required dependency, slf4j-api. (Of course,
+it will be automatically downloaded by Maven, Gradle, and the like.)
+It has several optional dependencies, but usually you don't have
+to deal with them, because if you are using an optional feature
+that's certainly because your application already uses the related
+library.
Change log
@@ -146,6 +148,9 @@ apply it to your development environment:
- Window -> Preferences
- General -> Workspace, set the text file encoding
to "UTF-8". (Or, you can set the same later on project level instead.)
+ - General -> Editors, set:
+ - Insert space for tabs
+ - Show print margin, 120 columns
- Java -> Code Style -> Formatter -> Import...
Select src\ide-settings\Eclipse-Mars\Formatter-profile-FreeMarker.xml
inside the FreeMarker project directory.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/build.xml
----------------------------------------------------------------------
diff --git a/build.xml b/build.xml
index 096e000..e6e3b13 100644
--- a/build.xml
+++ b/build.xml
@@ -756,7 +756,6 @@
<name>Apache FreeMarker</name>
<description>
- Google App Engine compliant variation of FreeMarker.
FreeMarker is a "template engine"; a generic tool to generate text output based on templates.
</description>
<url>http://freemarker.org/</url>
@@ -807,7 +806,11 @@
</mailingLists>
<dependencies>
- <!-- no required dependencies -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.22</version>
+ </dependency>
</dependencies>
</project>
]]></echo>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/ivy.xml
----------------------------------------------------------------------
diff --git a/ivy.xml b/ivy.xml
index 9bcaf23..196b468 100644
--- a/ivy.xml
+++ b/ivy.xml
@@ -22,7 +22,7 @@
-->
<!DOCTYPE ivy-module [
<!ENTITY jetty.version "7.6.16.v20140903">
- <!ENTITY slf4j.version "1.6.1">
+ <!ENTITY slf4j.version "1.7.22">
<!ENTITY spring.version "2.5.6.SEC03">
]>
<ivy-module version="2.0">
@@ -85,19 +85,10 @@
<exclude org="xml-apis" module="xml-apis" />
</dependency>
- <dependency org="ant" name="ant" rev="1.6.5" conf="build.base->default">
- <!-- The lowerst supported xml-apis version depends on JDK version; prevent any collosion: -->
- <exclude org="xml-apis" module="xml-apis" />
- </dependency>
-
<dependency org="javax.servlet.jsp" name="jsp-api" rev="2.1" conf="build.jsp2.1->default" />
<dependency org="javax.servlet" name="servlet-api" rev="2.5" conf="build.jsp2.1->default" />
- <dependency org="avalon-logkit" name="avalon-logkit" rev="2.0" conf="build.base->default" />
<dependency org="org.slf4j" name="slf4j-api" rev="&slf4j.version;" conf="build.base->default" />
- <dependency org="org.slf4j" name="log4j-over-slf4j" rev="&slf4j.version;" conf="build.base->default" />
- <dependency org="org.slf4j" name="jcl-over-slf4j" rev="&slf4j.version;" conf="build.base->default" />
- <dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="build.base->default" />
<dependency org="org.zeroturnaround" name="javarebel-sdk" rev="1.2.2" conf="build.base->default" />
@@ -109,11 +100,11 @@
<!-- test -->
- <!-- Note: Ant doesn't contain junit.jar any more -->
<dependency org="junit" name="junit" rev="4.12" conf="test->default" />
<dependency org="org.hamcrest" name="hamcrest-library" rev="1.3" conf="test->default" />
- <dependency org="ch.qos.logback" name="logback-classic" rev="1.1.2" conf="test->default" />
+ <dependency org="ch.qos.logback" name="logback-classic" rev="1.1.8" conf="test->default" />
+ <dependency org="org.slf4j" name="jcl-over-slf4j" rev="&slf4j.version;" conf="test->default" />
<dependency org="commons-io" name="commons-io" rev="2.2" conf="test->default" />
<dependency org="com.google.guava" name="guava-jdk5" rev="17.0" conf="test->default" />
@@ -153,9 +144,6 @@
<dependency org="org.apache.rat" name="apache-rat-tasks" rev="0.11" conf="rat->default" />
- <!-- As the tests *run* on Ant, so it's a provided dependency there. -->
- <exclude org="ant" module="ant" conf="run.test" />
-
<!-- Ensure that JSP versions don't accidentally hide each-other -->
<conflict org="javax.servlet.jsp" module="jsp-api" manager="strict" />
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/cache/FileTemplateLoader.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/cache/FileTemplateLoader.java b/src/main/java/freemarker/cache/FileTemplateLoader.java
index d14368f..166f128 100644
--- a/src/main/java/freemarker/cache/FileTemplateLoader.java
+++ b/src/main/java/freemarker/cache/FileTemplateLoader.java
@@ -30,7 +30,9 @@ import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.template.Configuration;
import freemarker.template.utility.SecurityUtilities;
import freemarker.template.utility.StringUtil;
@@ -67,7 +69,7 @@ public class FileTemplateLoader implements TemplateLoader {
private static final int CASE_CHECK_CACHE__SOFT_SIZE = 1000;
private static final boolean SEP_IS_SLASH = File.separatorChar == '/';
- private static final Logger LOG = Logger.getLogger("freemarker.cache");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.cache");
public final File baseDir;
private final String canonicalBasePath;
@@ -120,6 +122,7 @@ public class FileTemplateLoader implements TemplateLoader {
throws IOException {
try {
Object[] retval = (Object[]) AccessController.doPrivileged(new PrivilegedExceptionAction() {
+ @Override
public Object run() throws IOException {
if (!baseDir.exists()) {
throw new FileNotFoundException(baseDir + " does not exist.");
@@ -153,10 +156,12 @@ public class FileTemplateLoader implements TemplateLoader {
}
}
+ @Override
public Object findTemplateSource(final String name)
throws IOException {
try {
return AccessController.doPrivileged(new PrivilegedExceptionAction() {
+ @Override
public Object run() throws IOException {
File source = new File(baseDir, SEP_IS_SLASH ? name :
name.replace('/', File.separatorChar));
@@ -187,9 +192,11 @@ public class FileTemplateLoader implements TemplateLoader {
}
}
+ @Override
public long getLastModified(final Object templateSource) {
return ((Long) (AccessController.doPrivileged(new PrivilegedAction()
{
+ @Override
public Object run() {
return Long.valueOf(((File) templateSource).lastModified());
}
@@ -198,11 +205,13 @@ public class FileTemplateLoader implements TemplateLoader {
}
+ @Override
public Reader getReader(final Object templateSource, final String encoding)
throws IOException {
try {
return (Reader) AccessController.doPrivileged(new PrivilegedExceptionAction()
{
+ @Override
public Object run()
throws IOException {
if (!(templateSource instanceof File)) {
@@ -255,7 +264,7 @@ public class FileTemplateLoader implements TemplateLoader {
if (fileName.equalsIgnoreCase(listingEntry)) {
if (LOG.isDebugEnabled()) {
LOG.debug("Emulating file-not-found because of letter case differences to the "
- + "real file, for: " + sourcePath);
+ + "real file, for: {}", sourcePath);
}
return false;
}
@@ -270,6 +279,7 @@ public class FileTemplateLoader implements TemplateLoader {
return true;
}
+ @Override
public void closeTemplateSource(Object templateSource) {
// Do nothing.
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/cache/TemplateCache.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/cache/TemplateCache.java b/src/main/java/freemarker/cache/TemplateCache.java
index 4f62d05..fa8df50 100644
--- a/src/main/java/freemarker/cache/TemplateCache.java
+++ b/src/main/java/freemarker/cache/TemplateCache.java
@@ -30,11 +30,13 @@ import java.util.List;
import java.util.Locale;
import java.util.StringTokenizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.cache.MultiTemplateLoader.MultiSource;
import freemarker.core.BugException;
import freemarker.core.Environment;
import freemarker.core.TemplateConfiguration;
-import freemarker.log.Logger;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
@@ -68,7 +70,7 @@ public class TemplateCache {
private static final char ASTERISK = '*';
private static final char SLASH = '/';
private static final String LOCALE_PART_SEPARATOR = "_";
- private static final Logger LOG = Logger.getLogger("freemarker.cache");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.cache");
/** Maybe {@code null}. */
private final TemplateLoader templateLoader;
@@ -701,7 +703,9 @@ public class TemplateCache {
storage.remove(tk);
}
}
- LOG.debug(debugName + " was removed from the cache, if it was there");
+ if (debug) {
+ LOG.debug(debugName + " was removed from the cache, if it was there");
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/cache/WebappTemplateLoader.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/cache/WebappTemplateLoader.java b/src/main/java/freemarker/cache/WebappTemplateLoader.java
index 44c40df..57fb1f4 100644
--- a/src/main/java/freemarker/cache/WebappTemplateLoader.java
+++ b/src/main/java/freemarker/cache/WebappTemplateLoader.java
@@ -30,7 +30,9 @@ import java.net.URL;
import javax.servlet.ServletContext;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.template.Configuration;
import freemarker.template.utility.CollectionUtils;
import freemarker.template.utility.StringUtil;
@@ -41,7 +43,7 @@ import freemarker.template.utility.StringUtil;
*/
public class WebappTemplateLoader implements TemplateLoader {
- private static final Logger LOG = Logger.getLogger("freemarker.cache");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.cache");
private final ServletContext servletContext;
private final String subdirPath;
@@ -94,6 +96,7 @@ public class WebappTemplateLoader implements TemplateLoader {
this.servletContext = servletContext;
}
+ @Override
public Object findTemplateSource(String name) throws IOException {
String fullPath = subdirPath + name;
@@ -117,13 +120,15 @@ public class WebappTemplateLoader implements TemplateLoader {
try {
url = servletContext.getResource(fullPath);
} catch (MalformedURLException e) {
- LOG.warn("Could not retrieve resource " + StringUtil.jQuoteNoXSS(fullPath),
- e);
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Could not retrieve resource " + StringUtil.jQuoteNoXSS(fullPath), e);
+ }
return null;
}
return url == null ? null : new URLTemplateSource(url, getURLConnectionUsesCaches());
}
+ @Override
public long getLastModified(Object templateSource) {
if (templateSource instanceof File) {
return ((File) templateSource).lastModified();
@@ -132,6 +137,7 @@ public class WebappTemplateLoader implements TemplateLoader {
}
}
+ @Override
public Reader getReader(Object templateSource, String encoding)
throws IOException {
if (templateSource instanceof File) {
@@ -145,6 +151,7 @@ public class WebappTemplateLoader implements TemplateLoader {
}
}
+ @Override
public void closeTemplateSource(Object templateSource) throws IOException {
if (templateSource instanceof File) {
// Do nothing.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/core/Environment.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/Environment.java b/src/main/java/freemarker/core/Environment.java
index e1cd94f..f8921f4 100644
--- a/src/main/java/freemarker/core/Environment.java
+++ b/src/main/java/freemarker/core/Environment.java
@@ -41,10 +41,12 @@ import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import freemarker.cache.TemplateNameFormat;
import freemarker.cache._CacheAPI;
-import freemarker.log.Logger;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.ObjectWrapper;
@@ -94,8 +96,8 @@ public final class Environment extends Configurable {
private static final ThreadLocal threadEnv = new ThreadLocal();
- private static final Logger LOG = Logger.getLogger("freemarker.runtime");
- private static final Logger ATTEMPT_LOGGER = Logger.getLogger("freemarker.runtime.attempt");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.runtime");
+ private static final Logger LOG_ATTEMPT = LoggerFactory.getLogger("freemarker.runtime.attempt");
// Do not use this object directly; clone it first! DecimalFormat isn't
// thread-safe.
@@ -411,11 +413,13 @@ public final class Environment extends Configurable {
if (outArgs.length > 0) {
pushLocalContext(new LocalContext() {
+ @Override
public TemplateModel getLocalVariable(String name) {
int index = bodyParameterNames.indexOf(name);
return index != -1 ? outArgs[index] : null;
}
+ @Override
public Collection getLocalVariableNames() {
return bodyParameterNames;
}
@@ -509,8 +513,8 @@ public final class Environment extends Configurable {
this.out = prevOut;
}
if (thrownException != null) {
- if (ATTEMPT_LOGGER.isDebugEnabled()) {
- ATTEMPT_LOGGER.debug("Error in attempt block " +
+ if (LOG_ATTEMPT.isDebugEnabled()) {
+ LOG_ATTEMPT.debug("Error in attempt block " +
attemptBlock.getStartLocationQuoted(), thrownException);
}
try {
@@ -2207,10 +2211,12 @@ public final class Environment extends Configurable {
public TemplateHashModel getDataModel() {
final TemplateHashModel result = new TemplateHashModel() {
+ @Override
public boolean isEmpty() {
return false;
}
+ @Override
public TemplateModel get(String key) throws TemplateModelException {
TemplateModel value = rootDataModel.get(key);
if (value == null) {
@@ -2223,10 +2229,12 @@ public final class Environment extends Configurable {
if (rootDataModel instanceof TemplateHashModelEx) {
return new TemplateHashModelEx() {
+ @Override
public boolean isEmpty() throws TemplateModelException {
return result.isEmpty();
}
+ @Override
public TemplateModel get(String key) throws TemplateModelException {
return result.get(key);
}
@@ -2234,14 +2242,17 @@ public final class Environment extends Configurable {
// NB: The methods below do not take into account
// configuration shared variables even though
// the hash will return them, if only for BWC reasons
+ @Override
public TemplateCollectionModel values() throws TemplateModelException {
return ((TemplateHashModelEx) rootDataModel).values();
}
+ @Override
public TemplateCollectionModel keys() throws TemplateModelException {
return ((TemplateHashModelEx) rootDataModel).keys();
}
+ @Override
public int size() throws TemplateModelException {
return ((TemplateHashModelEx) rootDataModel).size();
}
@@ -2258,10 +2269,12 @@ public final class Environment extends Configurable {
public TemplateHashModel getGlobalVariables() {
return new TemplateHashModel() {
+ @Override
public boolean isEmpty() {
return false;
}
+ @Override
public TemplateModel get(String key) throws TemplateModelException {
TemplateModel result = globalNamespace.get(key);
if (result == null) {
@@ -2779,6 +2792,7 @@ public final class Environment extends Configurable {
this.childBuffer = childBuffer;
}
+ @Override
public void render(Writer newOut) throws TemplateException, IOException {
Writer prevOut = out;
out = newOut;
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java b/src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java
index 286eeff..c8d851f 100644
--- a/src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java
+++ b/src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java
@@ -26,14 +26,16 @@ import java.util.StringTokenizer;
import java.util.TimeZone;
import java.util.concurrent.ConcurrentHashMap;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.template.TemplateDateModel;
class JavaTemplateDateFormatFactory extends TemplateDateFormatFactory {
static final JavaTemplateDateFormatFactory INSTANCE = new JavaTemplateDateFormatFactory();
- private static final Logger LOG = Logger.getLogger("freemarker.runtime");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.runtime");
private static final ConcurrentHashMap<CacheKey, DateFormat> GLOBAL_FORMAT_CACHE
= new ConcurrentHashMap<CacheKey, DateFormat>();
@@ -110,9 +112,9 @@ class JavaTemplateDateFormatFactory extends TemplateDateFormatFactory {
}
}
if (triggered) {
- LOG.warn("Global Java DateFormat cache has exceeded " + LEAK_ALERT_NUMBER_FORMAT_CACHE_SIZE
- + " entries => cache flushed. "
- + "Typical cause: Some template generates high variety of format pattern strings.");
+ LOG.warn("Global Java DateFormat cache has exceeded {} entries => cache flushed. "
+ + "Typical cause: Some template generates high variety of format pattern strings.",
+ LEAK_ALERT_NUMBER_FORMAT_CACHE_SIZE);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java b/src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java
index 330d4f6..ec8db4b 100644
--- a/src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java
+++ b/src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java
@@ -23,7 +23,8 @@ import java.text.ParseException;
import java.util.Locale;
import java.util.concurrent.ConcurrentHashMap;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Deals with {@link TemplateNumberFormat}-s that just wrap a Java {@link NumberFormat}.
@@ -32,7 +33,7 @@ class JavaTemplateNumberFormatFactory extends TemplateNumberFormatFactory {
static final JavaTemplateNumberFormatFactory INSTANCE = new JavaTemplateNumberFormatFactory();
- private static final Logger LOG = Logger.getLogger("freemarker.runtime");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.runtime");
private static final ConcurrentHashMap<CacheKey, NumberFormat> GLOBAL_FORMAT_CACHE
= new ConcurrentHashMap<CacheKey, NumberFormat>();
@@ -75,9 +76,9 @@ class JavaTemplateNumberFormatFactory extends TemplateNumberFormatFactory {
}
}
if (triggered) {
- LOG.warn("Global Java NumberFormat cache has exceeded " + LEAK_ALERT_NUMBER_FORMAT_CACHE_SIZE
- + " entries => cache flushed. "
- + "Typical cause: Some template generates high variety of format pattern strings.");
+ LOG.warn("Global Java NumberFormat cache has exceeded {} entries => cache flushed. "
+ + "Typical cause: Some template generates high variety of format pattern strings.",
+ LEAK_ALERT_NUMBER_FORMAT_CACHE_SIZE);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/core/RegexpHelper.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/RegexpHelper.java b/src/main/java/freemarker/core/RegexpHelper.java
index 3743b23..30d4dcf 100644
--- a/src/main/java/freemarker/core/RegexpHelper.java
+++ b/src/main/java/freemarker/core/RegexpHelper.java
@@ -22,8 +22,10 @@ package freemarker.core;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.cache.MruCacheStorage;
-import freemarker.log.Logger;
import freemarker.template.TemplateModelException;
import freemarker.template.utility.StringUtil;
@@ -32,7 +34,7 @@ import freemarker.template.utility.StringUtil;
*/
final class RegexpHelper {
- private static final Logger LOG = Logger.getLogger("freemarker.runtime");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.runtime");
private static volatile boolean flagWarningsEnabled = LOG.isWarnEnabled();
private static final int MAX_FLAG_WARNINGS_LOGGED = 25;
@@ -141,6 +143,7 @@ final class RegexpHelper {
break;
default:
if (flagWarningsEnabled) {
+ // [FM3] Should be an error
RegexpHelper.logFlagWarning(
"Unrecognized regular expression flag: "
+ StringUtil.jQuote(String.valueOf(c)) + ".");
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/core/_ErrorDescriptionBuilder.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/_ErrorDescriptionBuilder.java b/src/main/java/freemarker/core/_ErrorDescriptionBuilder.java
index 9249f20..0900aa1 100644
--- a/src/main/java/freemarker/core/_ErrorDescriptionBuilder.java
+++ b/src/main/java/freemarker/core/_ErrorDescriptionBuilder.java
@@ -23,8 +23,10 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.ext.beans._MethodUtil;
-import freemarker.log.Logger;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.utility.ClassUtil;
@@ -38,7 +40,7 @@ import freemarker.template.utility.StringUtil;
*/
public class _ErrorDescriptionBuilder {
- private static final Logger LOG = Logger.getLogger("freemarker.runtime");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.runtime");
private final String description;
private final Object[] descriptionParts;
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/core/_JavaVersions.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/_JavaVersions.java b/src/main/java/freemarker/core/_JavaVersions.java
index 244862d..8d6295f 100644
--- a/src/main/java/freemarker/core/_JavaVersions.java
+++ b/src/main/java/freemarker/core/_JavaVersions.java
@@ -18,7 +18,8 @@
*/
package freemarker.core;
-import freemarker.log.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.template.Version;
import freemarker.template.utility.SecurityUtilities;
@@ -62,7 +63,7 @@ public final class _JavaVersions {
java6 = (_Java6) Class.forName("freemarker.core._Java6Impl").getField("INSTANCE").get(null);
} catch (Exception e) {
try {
- Logger.getLogger("freemarker.runtime").error("Failed to access Java 6 functionality", e);
+ LoggerFactory.getLogger("freemarker.runtime").error("Failed to access Java 6 functionality", e);
} catch (Exception e2) {
// Suppressed
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/debug/impl/DebuggerServer.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/debug/impl/DebuggerServer.java b/src/main/java/freemarker/debug/impl/DebuggerServer.java
index fc6f777..fa7a2ad 100644
--- a/src/main/java/freemarker/debug/impl/DebuggerServer.java
+++ b/src/main/java/freemarker/debug/impl/DebuggerServer.java
@@ -31,16 +31,19 @@ import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Random;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.debug.Debugger;
-import freemarker.log.Logger;
import freemarker.template.utility.SecurityUtilities;
import freemarker.template.utility.UndeclaredThrowableException;
/**
*/
class DebuggerServer {
- private static final Logger LOG = Logger.getLogger("freemarker.debug.server");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.debug.server");
// TODO: Eventually replace with Yarrow
+ // TODO: Can be extremely slow (on Linux, not enough entropy)
private static final Random R = new SecureRandom();
private final byte[] password;
@@ -62,6 +65,7 @@ class DebuggerServer {
public void start() {
new Thread(new Runnable()
{
+ @Override
public void run() {
startInternal();
}
@@ -87,6 +91,7 @@ class DebuggerServer {
this.s = s;
}
+ @Override
public void run() {
try {
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
@@ -105,7 +110,7 @@ class DebuggerServer {
out.writeObject(null);
}
} catch (Exception e) {
- LOG.warn("Connection to " + s.getInetAddress().getHostAddress() + " abruply broke", e);
+ LOG.warn("Connection to {} abruply broke", s.getInetAddress().getHostAddress(), e);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java b/src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java
index dcb5cd1..da65308 100644
--- a/src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java
+++ b/src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java
@@ -24,10 +24,12 @@ import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.server.Unreferenced;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.debug.DebuggerClient;
import freemarker.debug.DebuggerListener;
import freemarker.debug.EnvironmentSuspendedEvent;
-import freemarker.log.Logger;
/**
* Used by the {@link DebuggerClient} to create local
@@ -37,13 +39,14 @@ extends
UnicastRemoteObject
implements
DebuggerListener, Unreferenced {
- private static final Logger LOG = Logger.getLogger(
+ private static final Logger LOG = LoggerFactory.getLogger(
"freemarker.debug.client");
private static final long serialVersionUID = 1L;
private final DebuggerListener listener;
+ @Override
public void unreferenced() {
try {
UnicastRemoteObject.unexportObject(this, false);
@@ -57,6 +60,7 @@ implements
this.listener = listener;
}
+ @Override
public void environmentSuspended(EnvironmentSuspendedEvent e)
throws RemoteException {
listener.environmentSuspended(e);
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/beans/BeanModel.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/beans/BeanModel.java b/src/main/java/freemarker/ext/beans/BeanModel.java
index 24f8590..9ccdfc0 100644
--- a/src/main/java/freemarker/ext/beans/BeanModel.java
+++ b/src/main/java/freemarker/ext/beans/BeanModel.java
@@ -32,13 +32,15 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.core.CollectionAndSequence;
import freemarker.core._DelayedFTLTypeDescription;
import freemarker.core._DelayedJQuote;
import freemarker.core._TemplateModelException;
import freemarker.ext.util.ModelFactory;
import freemarker.ext.util.WrapperTemplateModel;
-import freemarker.log.Logger;
import freemarker.template.AdapterTemplateModel;
import freemarker.template.ObjectWrapper;
import freemarker.template.SimpleScalar;
@@ -65,7 +67,9 @@ import freemarker.template.utility.StringUtil;
public class BeanModel
implements
TemplateHashModelEx, AdapterTemplateModel, WrapperTemplateModel, TemplateModelWithAPISupport {
- private static final Logger LOG = Logger.getLogger("freemarker.beans");
+
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.beans");
+
protected final Object object;
protected final BeansWrapper wrapper;
@@ -75,6 +79,7 @@ implements
static final ModelFactory FACTORY =
new ModelFactory()
{
+ @Override
public TemplateModel create(Object object, ObjectWrapper wrapper) {
return new BeanModel(object, (BeansWrapper) wrapper);
}
@@ -140,6 +145,7 @@ implements
* @throws TemplateModelException if there was no property nor method nor
* a generic <tt>get</tt> method to invoke.
*/
+ @Override
public TemplateModel get(String key)
throws TemplateModelException {
Class<?> clazz = object.getClass();
@@ -174,7 +180,7 @@ implements
if (retval == UNKNOWN) {
if (wrapper.isStrict()) {
throw new InvalidPropertyException("No such bean property: " + key);
- } else if (LOG.isDebugEnabled()) {
+ } else {
logNoSuchKey(key, classInfo);
}
retval = wrapper.wrap(null);
@@ -192,9 +198,11 @@ implements
}
private void logNoSuchKey(String key, Map<?, ?> keyMap) {
- LOG.debug("Key " + StringUtil.jQuoteNoXSS(key) + " was not found on instance of " +
- object.getClass().getName() + ". Introspection information for " +
- "the class is: " + keyMap);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Key " + StringUtil.jQuoteNoXSS(key) + " was not found on instance of " +
+ object.getClass().getName() + ". Introspection information for " +
+ "the class is: " + keyMap);
+ }
}
/**
@@ -282,6 +290,7 @@ implements
* Tells whether the model is empty. It is empty if either the wrapped
* object is null, or it's a Boolean with false value.
*/
+ @Override
public boolean isEmpty() {
if (object instanceof String) {
return ((String) object).length() == 0;
@@ -302,22 +311,27 @@ implements
* Returns the same as {@link #getWrappedObject()}; to ensure that, this method will be final starting from 2.4.
* This behavior of {@link BeanModel} is assumed by some FreeMarker code.
*/
+ @Override
public Object getAdaptedObject(Class<?> hint) {
return object; // return getWrappedObject(); starting from 2.4
}
+ @Override
public Object getWrappedObject() {
return object;
}
+ @Override
public int size() {
return wrapper.getClassIntrospector().keyCount(object.getClass());
}
+ @Override
public TemplateCollectionModel keys() {
return new CollectionAndSequence(new SimpleSequence(keySet(), wrapper));
}
+ @Override
public TemplateCollectionModel values() throws TemplateModelException {
List<Object> values = new ArrayList<Object>(size());
TemplateModelIterator it = keys().iterator();
@@ -359,6 +373,7 @@ implements
return wrapper.getClassIntrospector().keySet(object.getClass());
}
+ @Override
public TemplateModel getAPI() throws TemplateModelException {
return wrapper.wrapAsAPI(object);
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/beans/BeansWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/beans/BeansWrapper.java b/src/main/java/freemarker/ext/beans/BeansWrapper.java
index 28da1e4..0dd3e24 100644
--- a/src/main/java/freemarker/ext/beans/BeansWrapper.java
+++ b/src/main/java/freemarker/ext/beans/BeansWrapper.java
@@ -38,6 +38,9 @@ import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.core.BugException;
import freemarker.core._DelayedFTLTypeDescription;
import freemarker.core._DelayedShortClassName;
@@ -45,7 +48,6 @@ import freemarker.core._TemplateModelException;
import freemarker.ext.util.ModelCache;
import freemarker.ext.util.ModelFactory;
import freemarker.ext.util.WrapperTemplateModel;
-import freemarker.log.Logger;
import freemarker.template.AdapterTemplateModel;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
@@ -85,7 +87,7 @@ import freemarker.template.utility.WriteProtectable;
* published and then left unmodified. Using {@link BeansWrapperBuilder} also guarantees thread safety.
*/
public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
- private static final Logger LOG = Logger.getLogger("freemarker.beans");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.beans");
/**
* @deprecated Use {@link ObjectWrapperAndUnwrapper#CANT_UNWRAP_TO_TARGET_CLASS} instead. It's not a public field
@@ -302,9 +304,9 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
}
} catch (Throwable e) {
// The security manager sometimes doesn't allow this
- LOG.info("Failed to check if finetuneMethodAppearance is overidden in " + thisClass.getName()
+ LOG.info("Failed to check if finetuneMethodAppearance is overidden in {}"
+ "; acting like if it was, but this way it won't utilize the shared class introspection "
- + "cache.",
+ + "cache.", thisClass.getName(),
e);
overridden = true;
testFailed = true;
@@ -318,6 +320,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
bwConf = (BeansWrapperConfiguration) bwConf.clone(false);
bwConf.setMethodAppearanceFineTuner(new MethodAppearanceFineTuner() {
+ @Override
public void process(
MethodAppearanceDecisionInput in, MethodAppearanceDecision out) {
BeansWrapper.this.finetuneMethodAppearance(in.getContainingClass(), in.getMethod(), out);
@@ -389,6 +392,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
*
* @since 2.3.21
*/
+ @Override
public void writeProtect() {
writeProtected = true;
}
@@ -396,6 +400,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
/**
* @since 2.3.21
*/
+ @Override
public boolean isWriteProtected() {
return writeProtected;
}
@@ -855,6 +860,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
* <li>otherwise, returns a generic {@link StringModel} for it.
* </ul>
*/
+ @Override
public TemplateModel wrap(Object object) throws TemplateModelException {
if (object == null) return nullModel;
return modelCache.getInstance(object);
@@ -881,6 +887,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
/**
* @since 2.3.22
*/
+ @Override
public TemplateHashModel wrapAsAPI(Object obj) throws TemplateModelException {
return new APIModel(obj, this);
}
@@ -898,18 +905,21 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
}
private final ModelFactory BOOLEAN_FACTORY = new ModelFactory() {
+ @Override
public TemplateModel create(Object object, ObjectWrapper wrapper) {
return ((Boolean) object).booleanValue() ? trueModel : falseModel;
}
};
private static final ModelFactory ITERATOR_FACTORY = new ModelFactory() {
+ @Override
public TemplateModel create(Object object, ObjectWrapper wrapper) {
return new IteratorModel((Iterator<?>) object, (BeansWrapper) wrapper);
}
};
private static final ModelFactory ENUMERATION_FACTORY = new ModelFactory() {
+ @Override
public TemplateModel create(Object object, ObjectWrapper wrapper) {
return new EnumerationModel((Enumeration<?>) object, (BeansWrapper) wrapper);
}
@@ -959,6 +969,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
* returned unchanged.
* @throws TemplateModelException if an attempted unwrapping fails.
*/
+ @Override
public Object unwrap(TemplateModel model) throws TemplateModelException {
return unwrap(model, Object.class);
}
@@ -989,6 +1000,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable {
/**
* @since 2.3.22
*/
+ @Override
public Object tryUnwrapTo(TemplateModel model, Class<?> targetClass) throws TemplateModelException {
return tryUnwrapTo(model, targetClass, 0);
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/beans/ClassIntrospector.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/beans/ClassIntrospector.java b/src/main/java/freemarker/ext/beans/ClassIntrospector.java
index 7c08e49..fb9664f 100644
--- a/src/main/java/freemarker/ext/beans/ClassIntrospector.java
+++ b/src/main/java/freemarker/ext/beans/ClassIntrospector.java
@@ -44,11 +44,13 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.core.BugException;
import freemarker.ext.beans.BeansWrapper.MethodAppearanceDecision;
import freemarker.ext.beans.BeansWrapper.MethodAppearanceDecisionInput;
import freemarker.ext.util.ModelCache;
-import freemarker.log.Logger;
import freemarker.template.utility.NullArgumentException;
import freemarker.template.utility.SecurityUtilities;
@@ -67,7 +69,7 @@ class ClassIntrospector {
// these are shared by many object wrappers, and concurrency related glitches due to user errors must remain
// local to the object wrappers, not corrupting the shared ClassIntrospector.
- private static final Logger LOG = Logger.getLogger("freemarker.beans");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.beans");
private static final String JREBEL_SDK_CLASS_NAME = "org.zeroturnaround.javarebel.ClassEventListener";
private static final String JREBEL_INTEGRATION_ERROR_MSG
@@ -280,7 +282,7 @@ class ClassIntrospector {
try {
addBeanInfoToClassIntrospectionData(introspData, clazz, accessibleMethods);
} catch (IntrospectionException e) {
- LOG.warn("Couldn't properly perform introspection for class " + clazz, e);
+ LOG.warn("Couldn't properly perform introspection for class {}", clazz.getName(), e);
introspData.clear(); // FIXME NBC: Don't drop everything here.
}
}
@@ -396,10 +398,9 @@ class ClassIntrospector {
introspData.put(ipd.getName(), ipd);
getArgTypesByMethod(introspData).put(publicReadMethod, publicReadMethod.getParameterTypes());
} catch (IntrospectionException e) {
- LOG.warn("Failed creating a publicly-accessible " +
- "property descriptor for " + clazz.getName() +
- " indexed property " + pd.getName() +
- ", read method " + publicReadMethod,
+ LOG.warn("Failed creating a publicly-accessible property descriptor "
+ + "for {} indexed property {}, read method {}",
+ clazz.getName(), pd.getName(), publicReadMethod,
e);
}
}
@@ -414,10 +415,10 @@ class ClassIntrospector {
}
introspData.put(pd.getName(), pd);
} catch (IntrospectionException e) {
- LOG.warn("Failed creating a publicly-accessible " +
- "property descriptor for " + clazz.getName() +
- " property " + pd.getName() + ", read method " +
- publicReadMethod, e);
+ LOG.warn("Failed creating a publicly-accessible property descriptor "
+ + "for {} property {}, read method {}",
+ clazz.getName(), pd.getName(), publicReadMethod,
+ e);
}
}
}
@@ -451,7 +452,7 @@ class ClassIntrospector {
introspData.put(CONSTRUCTORS_KEY, overloadedCtors);
}
} catch (SecurityException e) {
- LOG.warn("Can't discover constructors for class " + clazz.getName(), e);
+ LOG.warn("Can't discover constructors for class {}", clazz.getName(), e);
}
}
@@ -494,9 +495,8 @@ class ClassIntrospector {
}
return;
} catch (SecurityException e) {
- LOG.warn("Could not discover accessible methods of class " +
- clazz.getName() +
- ", attemping superclasses/interfaces.", e);
+ LOG.warn("Could not discover accessible methods of class {}, attemping superclasses/interfaces.",
+ clazz.getName(), e);
// Fall through and attempt to discover superclass/interface methods
}
}
@@ -672,12 +672,10 @@ class ClassIntrospector {
// some classes are often reloaded or multiple versions of the
// same class is normal (OSGi), this will drop the cache contents
// too often.
- if (LOG.isInfoEnabled()) {
- LOG.info(
- "Detected multiple classes with the same name, \"" + className +
- "\". Assuming it was a class-reloading. Clearing class introspection " +
- "caches to release old data.");
- }
+ LOG.info(
+ "Detected multiple classes with the same name, \"{}\". "
+ + "Assuming it was a class-reloading. Clearing class introspection caches to release old data.",
+ className);
forcedClearCache();
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/beans/StaticModel.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/beans/StaticModel.java b/src/main/java/freemarker/ext/beans/StaticModel.java
index e55f3c2..5c11719 100644
--- a/src/main/java/freemarker/ext/beans/StaticModel.java
+++ b/src/main/java/freemarker/ext/beans/StaticModel.java
@@ -26,7 +26,9 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.template.TemplateCollectionModel;
import freemarker.template.TemplateHashModelEx;
import freemarker.template.TemplateModel;
@@ -41,7 +43,8 @@ import freemarker.template.TemplateModelException;
* calls of static methods, similar to that in {@link BeanModel}.
*/
final class StaticModel implements TemplateHashModelEx {
- private static final Logger LOG = Logger.getLogger("freemarker.beans");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.beans");
+
private final Class clazz;
private final BeansWrapper wrapper;
private final Map map = new HashMap();
@@ -56,6 +59,7 @@ final class StaticModel implements TemplateHashModelEx {
* Returns the field or method named by the <tt>key</tt>
* parameter.
*/
+ @Override
public TemplateModel get(String key) throws TemplateModelException {
Object model = map.get(key);
// Simple method, overloaded method or final field -- these have cached
@@ -80,18 +84,22 @@ final class StaticModel implements TemplateHashModelEx {
* Returns true if there is at least one public static
* field or method in the underlying class.
*/
+ @Override
public boolean isEmpty() {
return map.isEmpty();
}
+ @Override
public int size() {
return map.size();
}
+ @Override
public TemplateCollectionModel keys() throws TemplateModelException {
return (TemplateCollectionModel) wrapper.getOuterIdentity().wrap(map.keySet());
}
+ @Override
public TemplateCollectionModel values() throws TemplateModelException {
return (TemplateCollectionModel) wrapper.getOuterIdentity().wrap(map.values());
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/dom/NodeListModel.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/dom/NodeListModel.java b/src/main/java/freemarker/ext/dom/NodeListModel.java
index 1a97e37..676e2ec 100644
--- a/src/main/java/freemarker/ext/dom/NodeListModel.java
+++ b/src/main/java/freemarker/ext/dom/NodeListModel.java
@@ -58,6 +58,7 @@ class NodeListModel extends SimpleSequence implements TemplateHashModel, _Unexpe
XPathSupport xpathSupport;
private static ObjectWrapper nodeWrapper = new ObjectWrapper() {
+ @Override
public TemplateModel wrap(Object obj) {
if (obj instanceof NodeModel) {
return (NodeModel) obj;
@@ -114,10 +115,12 @@ class NodeListModel extends SimpleSequence implements TemplateHashModel, _Unexpe
return result;
}
+ @Override
public boolean isEmpty() {
return size() == 0;
}
+ @Override
public TemplateModel get(String key) throws TemplateModelException {
if (size() == 1) {
NodeModel nm = (NodeModel) get(0);
@@ -200,6 +203,7 @@ class NodeListModel extends SimpleSequence implements TemplateHashModel, _Unexpe
return xpathSupport;
}
+ @Override
public Object[] explainTypeError(Class[] expectedClasses) {
for (int i = 0; i < expectedClasses.length; i++) {
Class expectedClass = expectedClasses[i];
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/dom/NodeModel.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/dom/NodeModel.java b/src/main/java/freemarker/ext/dom/NodeModel.java
index b5b0ebe..1cff441 100644
--- a/src/main/java/freemarker/ext/dom/NodeModel.java
+++ b/src/main/java/freemarker/ext/dom/NodeModel.java
@@ -34,6 +34,8 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.CDATASection;
import org.w3c.dom.CharacterData;
@@ -50,7 +52,6 @@ import org.xml.sax.SAXException;
import freemarker.core._UnexpectedTypeErrorExplainerTemplateModel;
import freemarker.ext.util.WrapperTemplateModel;
-import freemarker.log.Logger;
import freemarker.template.AdapterTemplateModel;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
@@ -86,7 +87,7 @@ abstract public class NodeModel
implements TemplateNodeModelEx, TemplateHashModel, TemplateSequenceModel,
AdapterTemplateModel, WrapperTemplateModel, _UnexpectedTypeErrorExplainerTemplateModel {
- static private final Logger LOG = Logger.getLogger("freemarker.dom");
+ static private final Logger LOG = LoggerFactory.getLogger("freemarker.dom");
private static final Object STATIC_LOCK = new Object();
@@ -297,6 +298,7 @@ implements TemplateNodeModelEx, TemplateHashModel, TemplateSequenceModel,
return node;
}
+ @Override
public TemplateModel get(String key) throws TemplateModelException {
if (key.startsWith("@@")) {
if (key.equals(AtAtKey.TEXT.getKey())) {
@@ -344,6 +346,7 @@ implements TemplateNodeModelEx, TemplateHashModel, TemplateSequenceModel,
}
}
+ @Override
public TemplateNodeModel getParentNode() {
if (parent == null) {
Node parentNode = node.getParentNode();
@@ -357,14 +360,17 @@ implements TemplateNodeModelEx, TemplateHashModel, TemplateSequenceModel,
return parent;
}
+ @Override
public TemplateNodeModelEx getPreviousSibling() throws TemplateModelException {
return wrap(node.getPreviousSibling());
}
+ @Override
public TemplateNodeModelEx getNextSibling() throws TemplateModelException {
return wrap(node.getNextSibling());
}
+ @Override
public TemplateSequenceModel getChildNodes() {
if (children == null) {
children = new NodeListModel(node.getChildNodes(), this);
@@ -372,6 +378,7 @@ implements TemplateNodeModelEx, TemplateHashModel, TemplateSequenceModel,
return children;
}
+ @Override
public final String getNodeType() throws TemplateModelException {
short nodeType = node.getNodeType();
switch (nodeType) {
@@ -407,14 +414,17 @@ implements TemplateNodeModelEx, TemplateHashModel, TemplateSequenceModel,
/**
* Always returns 1.
*/
+ @Override
public final int size() {
return 1;
}
+ @Override
public final TemplateModel get(int i) {
return i == 0 ? this : null;
}
+ @Override
public String getNodeNamespace() {
int nodeType = node.getNodeType();
if (nodeType != Node.ATTRIBUTE_NODE && nodeType != Node.ELEMENT_NODE) {
@@ -750,14 +760,17 @@ implements TemplateNodeModelEx, TemplateHashModel, TemplateSequenceModel,
return getNodeName();
}
+ @Override
public Object getAdaptedObject(Class hint) {
return node;
}
+ @Override
public Object getWrappedObject() {
return node;
}
+ @Override
public Object[] explainTypeError(Class[] expectedClasses) {
for (int i = 0; i < expectedClasses.length; i++) {
Class expectedClass = expectedClasses[i];
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/jsp/EventForwarding.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/jsp/EventForwarding.java b/src/main/java/freemarker/ext/jsp/EventForwarding.java
index cb617cf..d4b124f 100644
--- a/src/main/java/freemarker/ext/jsp/EventForwarding.java
+++ b/src/main/java/freemarker/ext/jsp/EventForwarding.java
@@ -34,7 +34,8 @@ import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* An instance of this class should be registered as a <tt><listener></tt> in
@@ -47,7 +48,7 @@ public class EventForwarding
ServletContextListener,
HttpSessionListener,
HttpSessionAttributeListener {
- private static final Logger LOG = Logger.getLogger("freemarker.jsp");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.jsp");
private static final String ATTR_NAME = EventForwarding.class.getName();
@@ -81,10 +82,8 @@ public class EventForwarding
added = true;
}
if (!added) {
- LOG.warn(
- "Listener of class " + listener.getClass().getName() +
- "wasn't registered as it doesn't implement any of the " +
- "recognized listener interfaces.");
+ LOG.warn("Listener of class {} wasn't registered as it doesn't implement any of the recognized listener "
+ + "interfaces.", listener.getClass().getName());
}
}
@@ -97,6 +96,7 @@ public class EventForwarding
}
}
+ @Override
public void attributeAdded(ServletContextAttributeEvent arg0) {
synchronized (servletContextAttributeListeners) {
int s = servletContextAttributeListeners.size();
@@ -106,6 +106,7 @@ public class EventForwarding
}
}
+ @Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
synchronized (servletContextAttributeListeners) {
int s = servletContextAttributeListeners.size();
@@ -115,6 +116,7 @@ public class EventForwarding
}
}
+ @Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
synchronized (servletContextAttributeListeners) {
int s = servletContextAttributeListeners.size();
@@ -124,6 +126,7 @@ public class EventForwarding
}
}
+ @Override
public void contextInitialized(ServletContextEvent arg0) {
arg0.getServletContext().setAttribute(ATTR_NAME, this);
@@ -135,6 +138,7 @@ public class EventForwarding
}
}
+ @Override
public void contextDestroyed(ServletContextEvent arg0) {
synchronized (servletContextListeners) {
int s = servletContextListeners.size();
@@ -144,6 +148,7 @@ public class EventForwarding
}
}
+ @Override
public void sessionCreated(HttpSessionEvent arg0) {
synchronized (httpSessionListeners) {
int s = httpSessionListeners.size();
@@ -153,6 +158,7 @@ public class EventForwarding
}
}
+ @Override
public void sessionDestroyed(HttpSessionEvent arg0) {
synchronized (httpSessionListeners) {
int s = httpSessionListeners.size();
@@ -162,6 +168,7 @@ public class EventForwarding
}
}
+ @Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
synchronized (httpSessionAttributeListeners) {
int s = httpSessionAttributeListeners.size();
@@ -171,6 +178,7 @@ public class EventForwarding
}
}
+ @Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
synchronized (httpSessionAttributeListeners) {
int s = httpSessionAttributeListeners.size();
@@ -180,6 +188,7 @@ public class EventForwarding
}
}
+ @Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
synchronized (httpSessionAttributeListeners) {
int s = httpSessionAttributeListeners.size();
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java b/src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java
index 63077b3..5a24869 100644
--- a/src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java
+++ b/src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java
@@ -40,13 +40,15 @@ import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.el.ImplicitObjectELResolver;
import javax.servlet.jsp.el.ScopedAttributeELResolver;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.template.utility.ClassUtil;
/**
*/
class FreeMarkerJspApplicationContext implements JspApplicationContext {
- private static final Logger LOG = Logger.getLogger("freemarker.jsp");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.jsp");
private static final ExpressionFactory expressionFactoryImpl = findExpressionFactoryImplementation();
private final LinkedList listeners = new LinkedList();
@@ -63,6 +65,7 @@ class FreeMarkerJspApplicationContext implements JspApplicationContext {
elResolver.add(new ScopedAttributeELResolver());
}
+ @Override
public void addELContextListener(ELContextListener listener) {
synchronized (listeners) {
listeners.addLast(listener);
@@ -74,8 +77,7 @@ class FreeMarkerJspApplicationContext implements JspApplicationContext {
if (ef == null) {
ef = tryExpressionFactoryImplementation("org.apache");
if (ef == null) {
- LOG.warn("Could not find any implementation for " +
- ExpressionFactory.class.getName());
+ LOG.warn("Could not find any implementation for {}", ExpressionFactory.class.getName());
}
}
return ef;
@@ -86,23 +88,24 @@ class FreeMarkerJspApplicationContext implements JspApplicationContext {
try {
Class cl = ClassUtil.forName(className);
if (ExpressionFactory.class.isAssignableFrom(cl)) {
- LOG.info("Using " + className + " as implementation of " +
- ExpressionFactory.class.getName());
+ LOG.info("Using {} as implementation of {}", className, ExpressionFactory.class.getName());
return (ExpressionFactory) cl.newInstance();
}
- LOG.warn("Class " + className + " does not implement " +
- ExpressionFactory.class.getName());
+ LOG.warn("Class {} does not implement {}", className, ExpressionFactory.class.getName());
} catch (ClassNotFoundException e) {
+ // skip
} catch (Exception e) {
- LOG.error("Failed to instantiate " + className, e);
+ LOG.error("Failed to instantiate {}", className, e);
}
return null;
}
+ @Override
public void addELResolver(ELResolver resolver) {
additionalResolvers.add(resolver);
}
+ @Override
public ExpressionFactory getExpressionFactory() {
return expressionFactoryImpl;
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/jsp/TagTransformModel.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/jsp/TagTransformModel.java b/src/main/java/freemarker/ext/jsp/TagTransformModel.java
index a69d5ec..8ff7fc1 100644
--- a/src/main/java/freemarker/ext/jsp/TagTransformModel.java
+++ b/src/main/java/freemarker/ext/jsp/TagTransformModel.java
@@ -36,7 +36,9 @@ import javax.servlet.jsp.tagext.SimpleTag;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TryCatchFinally;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateTransformModel;
import freemarker.template.TransformControl;
@@ -46,7 +48,7 @@ import freemarker.template.TransformControl;
* For {@link SimpleTag}-based custom JSP tags {@link SimpleTagDirectiveModel} is used instead.
*/
class TagTransformModel extends JspTagModelBase implements TemplateTransformModel {
- private static final Logger LOG = Logger.getLogger("freemarker.jsp");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.jsp");
private final boolean isBodyTag;
private final boolean isIterationTag;
@@ -59,6 +61,7 @@ class TagTransformModel extends JspTagModelBase implements TemplateTransformMode
isTryCatchFinally = TryCatchFinally.class.isAssignableFrom(tagClass);
}
+ @Override
public Writer getWriter(Writer out, Map args) throws TemplateModelException {
try {
Tag tag = (Tag) getTagInstance();
@@ -313,6 +316,7 @@ class TagTransformModel extends JspTagModelBase implements TemplateTransformMode
return pageContext;
}
+ @Override
public int onStart()
throws TemplateModelException {
try {
@@ -351,6 +355,7 @@ class TagTransformModel extends JspTagModelBase implements TemplateTransformMode
}
}
+ @Override
public int afterBody()
throws TemplateModelException {
try {
@@ -379,10 +384,11 @@ class TagTransformModel extends JspTagModelBase implements TemplateTransformMode
needPop = false;
}
if (tag.doEndTag() == Tag.SKIP_PAGE) {
- LOG.warn("Tag.SKIP_PAGE was ignored from a " + tag.getClass().getName() + " tag.");
+ LOG.warn("Tag.SKIP_PAGE was ignored from a {} tag.", tag.getClass().getName());
}
}
+ @Override
public void onError(Throwable t) throws Throwable {
if (isTryCatchFinally) {
((TryCatchFinally) tag).doCatch(t);
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/jsp/TaglibFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/jsp/TaglibFactory.java b/src/main/java/freemarker/ext/jsp/TaglibFactory.java
index f9ae4e6..1da76c2 100644
--- a/src/main/java/freemarker/ext/jsp/TaglibFactory.java
+++ b/src/main/java/freemarker/ext/jsp/TaglibFactory.java
@@ -60,6 +60,8 @@ import javax.servlet.jsp.tagext.Tag;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
@@ -74,7 +76,6 @@ import freemarker.core.Environment;
import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.servlet.FreemarkerServlet;
import freemarker.ext.servlet.HttpRequestHashModel;
-import freemarker.log.Logger;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateHashModel;
@@ -112,7 +113,7 @@ public class TaglibFactory implements TemplateHashModel {
public static final List/*<? extends MetaInfTldSource>*/ DEFAULT_META_INF_TLD_SOURCES
= Collections.singletonList(WebInfPerLibJarMetaInfTldSource.INSTANCE);
- private static final Logger LOG = Logger.getLogger("freemarker.jsp");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.jsp");
private static final int URL_TYPE_FULL = 0;
private static final int URL_TYPE_ABSOLUTE = 1;
@@ -175,6 +176,7 @@ public class TaglibFactory implements TemplateHashModel {
* custom tag or EL function from the library, implemented as a {@link TemplateTransformModel} or
* {@link TemplateMethodModelEx}, respectively.
*/
+ @Override
public TemplateModel get(final String taglibUri) throws TemplateModelException {
synchronized (lock) {
{
@@ -287,6 +289,7 @@ public class TaglibFactory implements TemplateHashModel {
/**
* Returns false.
*/
+ @Override
public boolean isEmpty() {
return false;
}
@@ -520,10 +523,8 @@ public class TaglibFactory implements TemplateHashModel {
} else if (isJarUrl) {
addTldLocationsFromJarDirectoryEntryURL(url);
} else {
- if (LOG.isDebugEnabled()) {
- LOG.warn("Can't list entries under this URL; TLD-s won't be discovered here: "
- + urlWithEF.getExternalForm());
- }
+ LOG.debug("Can't list entries under this URL; TLD-s won't be discovered here: {}",
+ urlWithEF.getExternalForm());
}
}
}
@@ -534,10 +535,7 @@ public class TaglibFactory implements TemplateHashModel {
}
private void addTldLocationsFromWebInfPerLibJarMetaInfTlds() throws IOException, SAXException {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Looking for TLD locations in servletContext:/WEB-INF/lib/*.{jar,zip}" + META_INF_ABS_PATH
- + "*.tld");
- }
+ LOG.debug("Looking for TLD locations in servletContext:/WEB-INF/lib/*.{jar,zip}{}*.tld", META_INF_ABS_PATH);
Set libEntPaths = servletContext.getResourcePaths("/WEB-INF/lib");
if (libEntPaths != null) {
@@ -748,6 +746,7 @@ public class TaglibFactory implements TemplateHashModel {
}
File[] tldFiles = dir.listFiles(new FilenameFilter() {
+ @Override
public boolean accept(File urlAsFile, String name) {
return isTldFileNameIgnoreCase(name);
}
@@ -790,7 +789,7 @@ public class TaglibFactory implements TemplateHashModel {
try {
taglibUri = getTaglibUriFromTld(reusedIn, tldLocation.getXmlSystemId());
} catch (SAXException e) {
- LOG.error("Error while parsing TLD; skipping: " + tldLocation, e);
+ LOG.error("Error while parsing TLD; skipping: {}", tldLocation, e);
synchronized (failedTldLocations) {
failedTldLocations.add(tldLocation.toString());
}
@@ -1039,7 +1038,7 @@ public class TaglibFactory implements TemplateHashModel {
IOException {
URL jarResourceUrl = servletContext.getResource(jarResourcePath);
if (jarResourceUrl == null) {
- LOG.error("ServletContext resource URL was null (missing resource?): " + jarResourcePath);
+ LOG.error("ServletContext resource URL was null (missing resource?): {}", jarResourcePath);
return null;
}
@@ -1050,7 +1049,7 @@ public class TaglibFactory implements TemplateHashModel {
}
if (!jarResourceAsFile.isFile()) {
- LOG.error("Jar file doesn't exist - falling back to stream mode: " + jarResourceAsFile);
+ LOG.error("Jar file doesn't exist - falling back to stream mode: {}", jarResourceAsFile);
return null;
}
@@ -1210,6 +1209,7 @@ public class TaglibFactory implements TemplateHashModel {
this.fileResourcePath = fileResourcePath;
}
+ @Override
public InputStream getInputStream() throws IOException {
final InputStream in = servletContext.getResourceAsStream(fileResourcePath);
if (in == null) {
@@ -1218,6 +1218,7 @@ public class TaglibFactory implements TemplateHashModel {
return in;
}
+ @Override
public String getXmlSystemId() throws IOException {
final URL url = servletContext.getResource(fileResourcePath);
return url != null ? url.toExternalForm() : null;
@@ -1254,6 +1255,7 @@ public class TaglibFactory implements TemplateHashModel {
return "classpath:" + resourcePath;
}
+ @Override
public InputStream getInputStream() throws IOException {
ClassLoader tccl = tryGetThreadContextClassLoader();
if (tccl != null) {
@@ -1270,6 +1272,7 @@ public class TaglibFactory implements TemplateHashModel {
return in;
}
+ @Override
public String getXmlSystemId() throws IOException {
ClassLoader tccl = tryGetThreadContextClassLoader();
if (tccl != null) {
@@ -1311,6 +1314,7 @@ public class TaglibFactory implements TemplateHashModel {
this.entryPath = entryPath != null ? normalizeJarEntryPath(entryPath, false) : null;
}
+ @Override
public InputStream getInputStream() throws IOException {
if (entryUrl != null) {
try {
@@ -1329,7 +1333,7 @@ public class TaglibFactory implements TemplateHashModel {
}
throw new RuntimeException(e);
}
- LOG.error("Failed to open InputStream for URL (will try fallback stream): " + entryUrl);
+ LOG.error("Failed to open InputStream for URL (will try fallback stream): {}", entryUrl);
}
// Retry with the fallbackRawJarContentInputStreamFactory comes.
}
@@ -1385,6 +1389,7 @@ public class TaglibFactory implements TemplateHashModel {
}
}
+ @Override
public String getXmlSystemId() {
return entryUrl != null ? entryUrl.toExternalForm() : null;
}
@@ -1420,6 +1425,7 @@ public class TaglibFactory implements TemplateHashModel {
super(
tryCreateServletContextJarEntryUrl(servletContext, servletContextJarFilePath, entryPath),
new InputStreamFactory() {
+ @Override
public InputStream getInputStream() {
return servletContext.getResourceAsStream(servletContextJarFilePath);
}
@@ -1442,10 +1448,12 @@ public class TaglibFactory implements TemplateHashModel {
this.file = file;
}
+ @Override
public InputStream getInputStream() throws IOException {
return new FileInputStream(file);
}
+ @Override
public String getXmlSystemId() throws IOException {
return file.toURI().toURL().toExternalForm();
}
@@ -1464,10 +1472,12 @@ public class TaglibFactory implements TemplateHashModel {
tagsAndFunctions = parseToTagsAndFunctions(ctx, tldPath, wrapper);
}
+ @Override
public TemplateModel get(String key) {
return (TemplateModel) tagsAndFunctions.get(key);
}
+ @Override
public boolean isEmpty() {
return tagsAndFunctions.isEmpty();
}
@@ -1730,8 +1740,10 @@ public class TaglibFactory implements TemplateHashModel {
tagsAndFunctions.put(tagNameCData, CustomTagAndELFunctionCombiner.combine(
customTagModel, (TemplateMethodModelEx) replacedTagOrFunction));
} else {
- LOG.warn("TLD contains multiple tags with name " + StringUtil.jQuote(tagNameCData)
- + "; keeping only the last one.");
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("TLD contains multiple tags with name " + StringUtil.jQuote(tagNameCData)
+ + "; keeping only the last one.");
+ }
}
}
@@ -1780,8 +1792,10 @@ public class TaglibFactory implements TemplateHashModel {
tagsAndFunctions.put(functionNameCData, CustomTagAndELFunctionCombiner.combine(
replacedTagOrFunction, elFunctionModel));
} else {
- LOG.warn("TLD contains multiple functions with name " + StringUtil.jQuote(functionNameCData)
- + "; keeping only the last one.");
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("TLD contains multiple functions with name "
+ + StringUtil.jQuote(functionNameCData) + "; keeping only the last one.");
+ }
}
}
@@ -1866,6 +1880,7 @@ public class TaglibFactory implements TemplateHashModel {
*/
private static final class EmptyContentEntityResolver implements EntityResolver {
+ @Override
public InputSource resolveEntity(String publicId, String systemId) {
InputSource is = new InputSource(new ByteArrayInputStream(new byte[0]));
is.setPublicId(publicId);
@@ -1983,6 +1998,7 @@ public class TaglibFactory implements TemplateHashModel {
return "URLWithExternalForm(" + externalForm + ")";
}
+ @Override
public int compareTo(Object that) {
return this.getExternalForm().compareTo(((URLWithExternalForm) that).getExternalForm());
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java b/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java
index a3f6aa3..172f8c5 100644
--- a/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java
+++ b/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java
@@ -31,7 +31,9 @@ import javax.servlet.jsp.el.ELException;
import javax.servlet.jsp.el.ExpressionEvaluator;
import javax.servlet.jsp.el.VariableResolver;
-import freemarker.log.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.template.TemplateModelException;
import freemarker.template.utility.ClassUtil;
@@ -42,13 +44,13 @@ import freemarker.template.utility.ClassUtil;
* Implementation of PageContext that contains all JSP 2.1 methods.
*/
public class _FreeMarkerPageContext21 extends FreeMarkerPageContext {
- private static final Logger LOG = Logger.getLogger("freemarker.jsp");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.jsp");
static {
if (JspFactory.getDefaultFactory() == null) {
JspFactory.setDefaultFactory(new FreeMarkerJspFactory21());
}
- LOG.debug("Using JspFactory implementation class " +
+ LOG.debug("Using JspFactory implementation class {}",
JspFactory.getDefaultFactory().getClass().getName());
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java b/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java
index 504bbeb..ea78ac4 100644
--- a/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java
+++ b/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java
@@ -40,6 +40,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.FileTemplateLoader;
@@ -55,7 +58,6 @@ import freemarker.ext.jsp.TaglibFactory.ClasspathMetaInfTldSource;
import freemarker.ext.jsp.TaglibFactory.ClearMetaInfTldSource;
import freemarker.ext.jsp.TaglibFactory.MetaInfTldSource;
import freemarker.ext.jsp.TaglibFactory.WebInfPerLibJarMetaInfTldSource;
-import freemarker.log.Logger;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
@@ -318,8 +320,10 @@ import freemarker.template.utility.StringUtil;
* </ul>
*/
public class FreemarkerServlet extends HttpServlet {
- private static final Logger LOG = Logger.getLogger("freemarker.servlet");
- private static final Logger LOG_RT = Logger.getLogger("freemarker.runtime");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.servlet");
+
+ @Deprecated
+ private static final Logger LOG_RT = LoggerFactory.getLogger("freemarker.runtime");
public static final long serialVersionUID = -2440216393145762479L;
@@ -575,9 +579,7 @@ public class FreemarkerServlet extends HttpServlet {
// Process object_wrapper init-param out of order:
wrapper = createObjectWrapper();
- if (LOG.isDebugEnabled()) {
- LOG.debug("Using object wrapper: " + wrapper);
- }
+ LOG.debug("Using object wrapper {}", wrapper);
config.setObjectWrapper(wrapper);
// Process TemplatePath init-param out of order:
@@ -784,7 +786,7 @@ public class FreemarkerServlet extends HttpServlet {
try {
response.setBufferSize(bufferSize.intValue());
} catch (IllegalStateException e) {
- LOG.debug("Can't set buffer size any more,", e);
+ LOG.debug("Can't set the response buffer size any more", e);
}
}
@@ -1621,6 +1623,7 @@ public class FreemarkerServlet extends HttpServlet {
this.initParamValue = initParamValue;
}
+ @Override
public String getInitParamValue() {
return initParamValue;
}
@@ -1638,6 +1641,7 @@ public class FreemarkerServlet extends HttpServlet {
this.initParamValue = initParamValue;
}
+ @Override
public String getInitParamValue() {
return initParamValue;
}
@@ -1653,6 +1657,7 @@ public class FreemarkerServlet extends HttpServlet {
this.initParamValue = initParamValue;
}
+ @Override
public String getInitParamValue() {
return initParamValue;
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8952cbbb/src/main/java/freemarker/ext/servlet/InitParamParser.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/ext/servlet/InitParamParser.java b/src/main/java/freemarker/ext/servlet/InitParamParser.java
index 6b0665d..c7c4f98 100644
--- a/src/main/java/freemarker/ext/servlet/InitParamParser.java
+++ b/src/main/java/freemarker/ext/servlet/InitParamParser.java
@@ -27,6 +27,9 @@ import java.util.regex.Pattern;
import javax.servlet.ServletContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.FileTemplateLoader;
import freemarker.cache.MultiTemplateLoader;
@@ -34,7 +37,6 @@ import freemarker.cache.TemplateLoader;
import freemarker.cache.WebappTemplateLoader;
import freemarker.core._ObjectBuilderSettingEvaluator;
import freemarker.core._SettingEvaluationEnvironment;
-import freemarker.log.Logger;
import freemarker.template.Configuration;
import freemarker.template._TemplateAPI;
import freemarker.template.utility.StringUtil;
@@ -47,7 +49,7 @@ final class InitParamParser {
static final String TEMPLATE_PATH_PREFIX_FILE = "file://";
static final String TEMPLATE_PATH_SETTINGS_BI_NAME = "settings";
- private static final Logger LOG = Logger.getLogger("freemarker.servlet");
+ private static final Logger LOG = LoggerFactory.getLogger("freemarker.servlet");
private InitParamParser() {
// Not to be instantiated
@@ -72,8 +74,8 @@ final class InitParamParser {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
- LOG.warn("No Thread Context Class Loader was found. Falling back to the class loader of "
- + classLoaderClass.getName() + ".");
+ LOG.warn("No Thread Context Class Loader was found. Falling back to the class loader of {}.",
+ classLoaderClass.getName());
classLoader = classLoaderClass.getClassLoader();
}