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/09/06 15:42:16 UTC

[1/3] incubator-freemarker git commit: (Git ignore adjustment)

Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 0b7d96596 -> b63e44880


(Git ignore adjustment)


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/ec1501b1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/ec1501b1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/ec1501b1

Branch: refs/heads/3
Commit: ec1501b1e400b0839dcb1ee47290e2c776724ce6
Parents: 0b7d965
Author: ddekany <dd...@apache.org>
Authored: Wed Sep 6 14:33:39 2017 +0200
Committer: ddekany <dd...@apache.org>
Committed: Wed Sep 6 14:33:39 2017 +0200

----------------------------------------------------------------------
 .gitignore | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ec1501b1/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 5407d43..700005d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,8 @@
-**/build/
-/.out/
-/bin/
-/.bin/
-/target/
+build/
+.out/
+bin/
+.bin/
+target/
 
 /gradle.properties
 /archive/


[2/3] incubator-freemarker git commit: (JavaDoc errors)

Posted by dd...@apache.org.
(JavaDoc errors)


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/5c65373c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/5c65373c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/5c65373c

Branch: refs/heads/3
Commit: 5c65373c225313615cf773a113967317389477e6
Parents: ec1501b
Author: ddekany <dd...@apache.org>
Authored: Wed Sep 6 14:38:42 2017 +0200
Committer: ddekany <dd...@apache.org>
Committed: Wed Sep 6 14:48:22 2017 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/freemarker/core/ASTElement.java  | 5 +----
 .../java/org/apache/freemarker/core/ParsingConfiguration.java | 1 +
 .../java/org/apache/freemarker/core/util/CallableUtils.java   | 4 ++--
 .../java/org/apache/freemarker/servlet/FreemarkerServlet.java | 7 ++++---
 .../freemarker/spring/SpringResourceTemplateLoader.java       | 1 -
 .../org/apache/freemarker/spring/web/view/FreeMarkerView.java | 2 +-
 .../freemarker/spring/web/view/FreeMarkerViewResolver.java    | 2 +-
 7 files changed, 10 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5c65373c/freemarker-core/src/main/java/org/apache/freemarker/core/ASTElement.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTElement.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTElement.java
index b67d54d..5bc68e0 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTElement.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTElement.java
@@ -27,11 +27,8 @@ import org.apache.freemarker.core.util._ArrayEnumeration;
 
 /**
  * AST non-expression node superclass: Superclass of directive calls, interpolations, static text, top-level comments,
- * or other such non-expression node in the parsed template. Some information that can be found here can be accessed
- * through the {@link Environment#getCurrentDirectiveCallPlace()}, which is a published API, and thus promises backward
- * compatibility.
+ * or other such non-expression node in the parsed template.
  */
-// TODO [FM3] Get rid of "public" and thus the "_" prefix
 abstract class ASTElement extends ASTNode {
 
     private static final int INITIAL_CHILD_BUFFER_CAPACITY = 6;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5c65373c/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java
index 5b6d619..96d00f9 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java
@@ -18,6 +18,7 @@
  */
 package org.apache.freemarker.core;
 
+import java.io.Writer;
 import java.nio.charset.Charset;
 
 import org.apache.freemarker.core.arithmetic.ArithmeticEngine;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5c65373c/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
index f305d3c..9bf96e2 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
@@ -41,8 +41,8 @@ import org.apache.freemarker.core.model.TemplateDirectiveModel;
 import org.apache.freemarker.core.model.TemplateFunctionModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateNumberModel;
-import org.apache.freemarker.core.model.TemplateStringModel;
 import org.apache.freemarker.core.model.TemplateSequenceModel;
+import org.apache.freemarker.core.model.TemplateStringModel;
 
 /**
  * Utilities for implementing and calling {@link TemplateCallableModel}-s (such as {@link TemplateDirectiveModel}-s
@@ -597,7 +597,7 @@ public final class CallableUtils {
     /**
      * See {@link #castArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel,
      * boolean)}; this does the same, but with {@link TemplateNumberModel} as {@code type} and with the restriction that
-     * the number must be convertable to {@code int} losselessly, and with {@link int} return value.
+     * the number must be convertable to {@code int} losselessly, and with {@code int} return value.
      */
     public static int castArgumentValueToInt(
             TemplateModel argValue, int argIdx, boolean optional, int defaultValue, TemplateCallableModel callable,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5c65373c/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
----------------------------------------------------------------------
diff --git a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
index 1e484fc..9faa83c 100644
--- a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
+++ b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
@@ -64,6 +64,7 @@ import org.apache.freemarker.core.util._CollectionUtils;
 import org.apache.freemarker.core.util._SecurityUtils;
 import org.apache.freemarker.core.util._StringUtils;
 import org.apache.freemarker.servlet.jsp.TaglibFactory;
+import org.apache.freemarker.servlet.jsp.TaglibFactory.Builder;
 import org.apache.freemarker.servlet.jsp.TaglibFactory.ClasspathMetaInfTldSource;
 import org.apache.freemarker.servlet.jsp.TaglibFactory.MetaInfTldSource;
 import org.slf4j.Logger;
@@ -241,7 +242,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
  * optionally followed by colon and a regular expression, or {@value #META_INF_TLD_LOCATION_CLEAR}. For example {@code 
  * <param-value>classpath:.*myoverride.*\.jar$, webInfPerLibJars, classpath:.*taglib.*\.jar$</param-value>}, or {@code 
  * <param-value>classpath</param-value>}. (Whitespace around the commas and list items will be ignored.) See
- * {@link TaglibFactory.Builder#setMetaInfTldSources(List)} for more information. Defaults to a list that contains
+ * {@link Builder#setMetaInfTldSources(List)} for more information. Defaults to a list that contains
  * {@value #META_INF_TLD_LOCATION_WEB_INF_PER_LIB_JARS} only (can be overridden with
  * {@link #createDefaultMetaInfTldSources()}). Note that this can be also specified with the
  * {@value #SYSTEM_PROPERTY_META_INF_TLD_SOURCES} system property. If both the init-param and the system property
@@ -253,7 +254,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
  * Jetty's {@code "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern"} servlet context attribute.</li>
  * 
  * <li><strong>{@value #INIT_PARAM_CLASSPATH_TLDS}</strong> (since 2.3.22): Comma separated list of paths; see
- * {@link TaglibFactory.Builder#setClasspathTlds(List)}. Whitespace around the list items will be ignored. Defaults to
+ * {@link Builder#setClasspathTlds(List)}. Whitespace around the list items will be ignored. Defaults to
  * no paths (can be overidden with {@link #createDefaultClassPathTlds()}). Note that this can also be specified with the
  * {@value #SYSTEM_PROPERTY_CLASSPATH_TLDS} system property. If both the init-param and the system property exists, the
  * items listed in system property will be added after those specified by the init-param.</li>
@@ -556,7 +557,7 @@ public class FreemarkerServlet extends HttpServlet {
 
         // Process all other init-params:
         for (Enumeration<String> initPNames = getServletConfig().getInitParameterNames(); initPNames.hasMoreElements();) {
-            final String name = (String) initPNames.nextElement();
+            final String name = initPNames.nextElement();
             final String value = getInitParameter(name);
             if (name == null) {
                 throw new MalformedWebXmlException(

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5c65373c/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java
index 2607e57..bf430b7 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java
@@ -55,7 +55,6 @@ public class SpringResourceTemplateLoader implements TemplateLoader, ResourceLoa
 
     /**
      * Base resource location which can be prepended to the template name internally when resolving a resource.
-     * @return
      */
     public String getBaseLocation() {
         return baseLocation;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5c65373c/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java
index e827db5..4f286a1 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java
@@ -43,7 +43,7 @@ public class FreeMarkerView extends AbstractFreeMarkerView {
 
     /**
      * Internal servlet instance to provide a page object in JSP tag library usages.
-     * @see {@link javax.servlet.jsp.PageContext#getPage()}
+     * @see javax.servlet.jsp.PageContext#getPage()
      */
     private GenericServlet pageContextServlet;
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5c65373c/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java
index 101f5be..3a5a554 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java
@@ -56,7 +56,7 @@ public class FreeMarkerViewResolver extends AbstractTemplateViewResolver impleme
 
     /**
      * Internal servlet instance to provide a page object in JSP tag library usages.
-     * @see {@link javax.servlet.jsp.PageContext#getPage()}
+     * @see javax.servlet.jsp.PageContext#getPage()
      */
     private GenericServlet pageContextServlet;
 


[3/3] incubator-freemarker git commit: Changes for Eclipse compatibility, related README update

Posted by dd...@apache.org.
Changes for Eclipse compatibility, related README update


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/b63e4488
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/b63e4488
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/b63e4488

Branch: refs/heads/3
Commit: b63e44880f65d50f5088fb2877b871151d0da959
Parents: 5c65373
Author: ddekany <dd...@apache.org>
Authored: Wed Sep 6 17:41:59 2017 +0200
Committer: ddekany <dd...@apache.org>
Committed: Wed Sep 6 17:41:59 2017 +0200

----------------------------------------------------------------------
 README.md                                       |  63 ++++----
 build.gradle                                    |   8 +-
 freemarker-servlet/build.gradle                 |  18 +--
 .../servlet/DummyMockServletContext.java        | 142 ++++++++++++++++++-
 4 files changed, 192 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b63e4488/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 2380c2b..db0c623 100644
--- a/README.md
+++ b/README.md
@@ -142,24 +142,25 @@ IDE setup
 
 ### Eclipse
 
-Last tested Eclipse Neon.1.
+Last tested Eclipse Oxygen (4.7.0)
 
+- First, build the project with Gradle if you haven't yet (see earlier how).
 - Start Eclipse
-- You may prefer to start a new workspace (File -> "Switch workspace"), but
-  it's optional.
+- Start a new workspace (File -> "Switch workspace")
 - 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:
+  - General -> Editors -> Text Editors, set:
     - Insert space for tabs
     - Show print margin, 120 columns
   - Java -> Code Style -> Formatter -> Import...
-    Select src\ide-settings\Eclipse\Formatter-profile-FreeMarker.xml
-    inside the FreeMarker project directory.
-    This profile uses space-only indentation policy and 120 character line
-    width, and formatting rules that are pretty much standard in modern Java.
+    Select `src\ide-settings\Eclipse\Formatter-profile-FreeMarker.xml`
+    inside the FreeMarker project directory. That select "FreeMarker" as the
+    "Active profile".
+    (This profile uses space-only indentation policy and 120 character line
+    width, and formatting rules that are pretty much standard in modern Java.)
   - Java -> Code Style -> Organize imports
-    The order is this (the Eclipse default): java, javax, org, com.
+    Order: java, javax, org, com.
     Number of imports required for .*: 99
     Number of static imports needed for .*: 1
   - Java -> Installed JRE-s:
@@ -168,29 +169,37 @@ Last tested Eclipse Neon.1.
   - Java -> Compiler -> Javadoc:
     "Malformed Javadoc comments": Error
     "Only consider members as visible": Private
-    "Validate tag argunebts": true
+    "Validate tag arguments": true
     "Missing tag descriptions": Validate @return tags
     "Missing Javadoc tags": Ignore
     "Missing Javadoc comments": Ignore
-- Project -> Properties -> Java Compiler -> Errors/Warnings:
-  Check in "Enable project specific settings", then set "Forbidden reference
-  (access rules)" from "Error" to "Warning".
-- At Project -> Properties -> Java Code Style -> Formatter, check in "Enable
-  project specific settings", and then select "FreeMarker" as active profile.
-- At Project -> Properties -> Java Editor -> Save Actions, check "Enable project
-  specific settings", then "Perform the selected actions on save", and have
-  only "Organize imports" and "Additional actions" checked (the list for the
-  last should contain "Add missing @Override annotations",
-  "Add missing @Override annotations to implementations of interface methods",
-  "Add missing @Deprecated annotations", and "Remove unnecessary cast").
-- Right click on the root project -> Run As -> JUnit Test [TODO: Try this]
-  It should run without problems (all green).
+  - Java -> Compiler -> Errors/Warnings:
+    Set "Forbidden reference (access rules)" from "Error" to "Warning".
+  - Java -> Editor -> Save Actions:
+    Check "Perform the selected actions on save", and under that have only
+    "Organize imports" and "Additional actions" checked. The list for the
+    last should contain
+    "Add missing @Override annotations",
+    "Add missing @Override annotations to implementations of interface methods",
+    "Add missing @Deprecated annotations", and
+    "Remove unnecessary cast".
+- File -> Import... -> Gradle / Existing Gradle Project
+  Import the FreeMarker project directory. Everything can remain at its default.
+- Now Eclipse will automatically build the broject in the backround. There shouldn't
+  be any errors.
+- You may right-click on a all the project in the project tree, and chose
+  "Run as..." -> "JUnit test". Not all projects contains tests though (notably,
+  freemarker-core tests are in separate projects).
+- To run all the tests at once, you must use Gradle. To do that from under Eclipse,
+  go to "Run" -> "Run Configurations...", then right click on "Gradle Project" in the
+  tree, then "New". The "Gradle task" (and the "Name") should be `test`, and the
+  "Working directory" `${workspace_loc:/freemarker}`.
 - It's highly recommened to use the Eclipse FindBugs plugin.
-  - Install it from Eclipse Marketplace (3.0.1 as of this writing)
+  - Install it from Eclipse Marketplace (3.0.2 as of this writing)
   - Window -> Preferences -> Java -> FindBugs:
     Set all bug marker ranks from Warning to Error. (For false alarms we add
     @SuppressFBWarnings(value = "...", justification = "...") annotations.)
-  - Project -> Properties -> FindBugs -> [x] Run Automatically
+  - Fro each project: Project -> Properties -> FindBugs -> [x] Run Automatically
   - There should 0 errors. But sometimes the plugin fails to take the
     @SuppressFBWarnings annotations into account; then use Project -> Clean. 
 
@@ -198,7 +207,7 @@ Last tested Eclipse Neon.1.
 
 Last tested on IntelliJ IDEA Community 2017.1.5.
     
-- First build the project with Gradle if you haven't yet (see earlier how)
+- First, build the project with Gradle if you haven't yet (see earlier how).
 - "New..." -> "Project from existing source"
   - Point to the root project `incubator-freemarker`) directory
   - On the next screen, select "Import project from external model" and "Gradle"
@@ -224,7 +233,7 @@ Last tested on IntelliJ IDEA Community 2017.1.5.
     go back to "Copyrigth" in the tree, and set "Default project copyright" to "ASL2".
 - Testing your setup:
   - You may do "Bulild"/"Build project" (Ctrl+F9) to see if everyting compiles now.
-  - You may ran the `test` task of the root project with Gradle to see that everything works as
+  - You may run the `test` task of the root project with Gradle to see that everything works as
     expected. To do that from IntelliJ, create a run configuration:
     "Run" \ "Run Configurations..." \ "+" \ "Gradle" then:
     - Set "Name" to `All tests` for example

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b63e4488/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index d94794f..15e20be 100644
--- a/build.gradle
+++ b/build.gradle
@@ -215,9 +215,11 @@ subprojects {
         compile "org.slf4j:slf4j-api:$slf4jVersion"
         // All subprojects might use Findbugs annotations:
         compileOnly libraries.findbugs
-    
-        // Test libraries and utilities might come handy during testing:
-        testCompile project(":freemarker-test-utils")
+        // We don't add test dependencies to freemarker-core, as Eclipse sees that as circular dependency:
+        if (path != ':freemarker-core') {   
+            // Test libraries and utilities might come handy during testing:
+            testCompile project(":freemarker-test-utils")
+        }
     }
 
     // Like Maven's Enforcer plugin, make the build fail if certain libraries get in. (The problem with the

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b63e4488/freemarker-servlet/build.gradle
----------------------------------------------------------------------
diff --git a/freemarker-servlet/build.gradle b/freemarker-servlet/build.gradle
index 2f28100..2d0aa3b 100644
--- a/freemarker-servlet/build.gradle
+++ b/freemarker-servlet/build.gradle
@@ -28,18 +28,20 @@ inAggregateJavadoc = true
 dependencies {
     compile project(":freemarker-core")
 
-    def geronimoServletSpec3Version = "1.0"
-    def geronimoJspSpec22Version = "1.2"
-    def geronimoELSpec22Version = "1.0.4"
-
-    compileOnly "org.apache.geronimo.specs:geronimo-servlet_3.0_spec:${geronimoServletSpec3Version}"
-    compileOnly "org.apache.geronimo.specs:geronimo-jsp_2.2_spec:${geronimoJspSpec22Version}"
-    compileOnly "org.apache.geronimo.specs:geronimo-el_2.2_spec:${geronimoELSpec22Version}"
+    // Because of the limitations of Eclipse dependency handling, we have to use the dependency artifacts from
+    // Jetty ${jettyVersion} here, which is the Jetty version used for the tests. When the jettyVersion changes, run
+    // `gradlew freemarker-servlet:dependencies` and copy-paste the exact versions to here:
+    compileOnly "org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016"
+    compileOnly "org.eclipse.jetty.orbit:javax.servlet.jsp:2.2.0.v201112011158"
+    compileOnly "org.eclipse.jetty.orbit:javax.el:2.2.0.v201108011116"
 
     // ------------------------------------------------------------------------
     // For tests
 
-    def jettyVersion = "7.6.16.v20140903"
+    // When changing this, the non-test org.eclipse.jetty.orbit dependencies must be updated as well! Thus, it must use
+    // exactly the same Servlet/JSP-related specification versions as the minimal requirements of FreeMarker.
+    def jettyVersion = "8.1.22.v20160922" 
+     
     testCompile "org.eclipse.jetty:jetty-server:$jettyVersion"
     testCompile "org.eclipse.jetty:jetty-webapp:$jettyVersion"
     testCompile "org.eclipse.jetty:jetty-jsp:$jettyVersion"

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b63e4488/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/DummyMockServletContext.java
----------------------------------------------------------------------
diff --git a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/DummyMockServletContext.java b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/DummyMockServletContext.java
index 9ad670a..7f508c0 100644
--- a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/DummyMockServletContext.java
+++ b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/DummyMockServletContext.java
@@ -22,12 +22,21 @@ import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
 import java.util.Set;
 
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.Servlet;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.ServletRegistration.Dynamic;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
 
 public class DummyMockServletContext implements ServletContext {
 
@@ -153,5 +162,136 @@ public class DummyMockServletContext implements ServletContext {
     @Override
     public void setAttribute(String arg0, Object arg1) {
     }
-    
+
+    @Override
+    public boolean setInitParameter(String name, String value) {
+        return false;
+    }
+
+    @Override
+    public Dynamic addServlet(String servletName, String className)
+            throws IllegalArgumentException, IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public Dynamic addServlet(String servletName, Servlet servlet)
+            throws IllegalArgumentException, IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public Dynamic addServlet(String servletName, Class<? extends Servlet> clazz)
+            throws IllegalArgumentException, IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public <T extends Servlet> T createServlet(Class<T> clazz) throws ServletException {
+        return null;
+    }
+
+    @Override
+    public ServletRegistration getServletRegistration(String servletName) {
+        return null;
+    }
+
+    @Override
+    public Map<String, ? extends ServletRegistration> getServletRegistrations() {
+        return null;
+    }
+
+    @Override
+    public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, String className)
+            throws IllegalArgumentException, IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Filter filter)
+            throws IllegalArgumentException, IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Class<? extends Filter> filterClass)
+            throws IllegalArgumentException, IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public <T extends Filter> T createFilter(Class<T> clazz) throws ServletException {
+        return null;
+    }
+
+    @Override
+    public FilterRegistration getFilterRegistration(String filterName) {
+        return null;
+    }
+
+    @Override
+    public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+        return null;
+    }
+
+    @Override
+    public void addListener(Class<? extends EventListener> listenerClass) {
+    }
+
+    @Override
+    public void addListener(String className) {
+    }
+
+    @Override
+    public <T extends EventListener> void addListener(T t) {
+    }
+
+    @Override
+    public <T extends EventListener> T createListener(Class<T> clazz) throws ServletException {
+        return null;
+    }
+
+    @Override
+    public void declareRoles(String... roleNames) {
+    }
+
+    @Override
+    public SessionCookieConfig getSessionCookieConfig() {
+        return null;
+    }
+
+    @Override
+    public void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) {
+    }
+
+    @Override
+    public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+        return null;
+    }
+
+    @Override
+    public int getEffectiveMajorVersion() throws UnsupportedOperationException {
+        return 3;
+    }
+
+    @Override
+    public int getEffectiveMinorVersion() throws UnsupportedOperationException {
+        return 0;
+    }
+
+    @Override
+    public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+        return null;
+    }
+
+    @Override
+    public ClassLoader getClassLoader() {
+        return null;
+    }
+
+    @Override
+    public JspConfigDescriptor getJspConfigDescriptor() {
+        return null;
+    }
+
 }
\ No newline at end of file