Merge pull request #10352 from atorralba/atorralba/promote-template-injection

Java: Promote Server-side template injection from experimental
This commit is contained in:
Tony Torralba
2022-09-20 16:11:58 +02:00
committed by GitHub
615 changed files with 16792 additions and 711 deletions

View File

@@ -117,6 +117,7 @@ private module Frameworks {
private import semmle.code.java.frameworks.Retrofit private import semmle.code.java.frameworks.Retrofit
private import semmle.code.java.frameworks.Stream private import semmle.code.java.frameworks.Stream
private import semmle.code.java.frameworks.Strings private import semmle.code.java.frameworks.Strings
private import semmle.code.java.frameworks.Thymeleaf
private import semmle.code.java.frameworks.ratpack.Ratpack private import semmle.code.java.frameworks.ratpack.Ratpack
private import semmle.code.java.frameworks.ratpack.RatpackExec private import semmle.code.java.frameworks.ratpack.RatpackExec
private import semmle.code.java.frameworks.spring.SpringCache private import semmle.code.java.frameworks.spring.SpringCache
@@ -141,6 +142,7 @@ private module Frameworks {
private import semmle.code.java.security.LdapInjection private import semmle.code.java.security.LdapInjection
private import semmle.code.java.security.MvelInjection private import semmle.code.java.security.MvelInjection
private import semmle.code.java.security.OgnlInjection private import semmle.code.java.security.OgnlInjection
private import semmle.code.java.security.TemplateInjection
private import semmle.code.java.security.XPath private import semmle.code.java.security.XPath
private import semmle.code.java.security.XsltInjection private import semmle.code.java.security.XsltInjection
private import semmle.code.java.frameworks.Jdbc private import semmle.code.java.frameworks.Jdbc
@@ -625,7 +627,7 @@ module CsvValidation {
"open-url", "jndi-injection", "ldap", "sql", "jdbc-url", "logging", "mvel", "xpath", "open-url", "jndi-injection", "ldap", "sql", "jdbc-url", "logging", "mvel", "xpath",
"groovy", "xss", "ognl-injection", "intent-start", "pending-intent-sent", "groovy", "xss", "ognl-injection", "intent-start", "pending-intent-sent",
"url-open-stream", "url-redirect", "create-file", "write-file", "set-hostname-verifier", "url-open-stream", "url-redirect", "create-file", "write-file", "set-hostname-verifier",
"header-splitting", "information-leak", "xslt", "jexl", "bean-validation" "header-splitting", "information-leak", "xslt", "jexl", "bean-validation", "ssti"
] and ] and
not kind.matches("regex-use%") and not kind.matches("regex-use%") and
not kind.matches("qltest%") and not kind.matches("qltest%") and

View File

@@ -0,0 +1,16 @@
/**
* Provides classes and predicates for working with the Thymeleaf template engine.
*/
import java
private import semmle.code.java.dataflow.ExternalFlow
private class ThymeleafSummaryModels extends SummaryModelCsv {
override predicate row(string row) {
row =
[
"org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual",
"org.thymeleaf;TemplateSpec;false;getTemplate;;;Argument[-1];ReturnValue;taint;manual",
]
}
}

View File

@@ -0,0 +1,108 @@
/** Definitions related to the server-side template injection (SST) query. */
import java
private import semmle.code.java.dataflow.FlowSources
private import semmle.code.java.dataflow.ExternalFlow
private import semmle.code.java.dataflow.TaintTracking
/**
* A source for server-side template injection (SST) vulnerabilities.
*/
abstract class TemplateInjectionSource extends DataFlow::Node {
/** Holds if this source has the specified `state`. */
predicate hasState(DataFlow::FlowState state) { state instanceof DataFlow::FlowStateEmpty }
}
/**
* A sink for server-side template injection (SST) vulnerabilities.
*/
abstract class TemplateInjectionSink extends DataFlow::Node {
/** Holds if this sink has the specified `state`. */
predicate hasState(DataFlow::FlowState state) { state instanceof DataFlow::FlowStateEmpty }
}
/**
* A unit class for adding additional taint steps.
*
* Extend this class to add additional taint steps that should apply to flows related to
* server-side template injection (SST) vulnerabilities.
*/
class TemplateInjectionAdditionalTaintStep extends Unit {
/**
* Holds if the step from `node1` to `node2` should be considered a taint
* step for flows related to server-side template injection (SST) vulnerabilities.
*/
predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() }
/**
* Holds if the step from `node1` to `node2` should be considered a taint
* step for flows related toserver-side template injection (SST) vulnerabilities.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
none()
}
}
/**
* A sanitizer for server-side template injection (SST) vulnerabilities.
*/
abstract class TemplateInjectionSanitizer extends DataFlow::Node { }
/**
* A sanitizer for server-side template injection (SST) vulnerabilities.
* This sanitizer is only applicable when `TemplateInjectionSanitizerWithState::hasState`
* holds for the flow state.
*/
abstract class TemplateInjectionSanitizerWithState extends DataFlow::Node {
/** Holds if this sanitizer has the specified `state`. */
abstract predicate hasState(DataFlow::FlowState state);
}
private class DefaultTemplateInjectionSource extends TemplateInjectionSource instanceof RemoteFlowSource {
}
private class DefaultTemplateInjectionSink extends TemplateInjectionSink {
DefaultTemplateInjectionSink() { sinkNode(this, "ssti") }
}
private class DefaultTemplateInjectionSanitizer extends TemplateInjectionSanitizer {
DefaultTemplateInjectionSanitizer() {
this.getType() instanceof PrimitiveType or
this.getType() instanceof BoxedType or
this.getType() instanceof NumericType
}
}
private class TemplateInjectionSinkModels extends SinkModelCsv {
override predicate row(string row) {
row =
[
"freemarker.template;Template;true;Template;(String,Reader);;Argument[1];ssti;manual",
"freemarker.template;Template;true;Template;(String,Reader,Configuration);;Argument[1];ssti;manual",
"freemarker.template;Template;true;Template;(String,Reader,Configuration,String);;Argument[1];ssti;manual",
"freemarker.template;Template;true;Template;(String,String,Reader,Configuration);;Argument[2];ssti;manual",
"freemarker.template;Template;true;Template;(String,String,Reader,Configuration,String);;Argument[2];ssti;manual",
"freemarker.template;Template;true;Template;(String,String,Reader,Configuration,ParserConfiguration,String);;Argument[2];ssti;manual",
"freemarker.template;Template;true;Template;(String,String,Configuration);;Argument[1];ssti;manual",
"freemarker.cache;StringTemplateLoader;true;putTemplate;;;Argument[1];ssti;manual",
"com.mitchellbosecke.pebble;PebbleEngine;true;getTemplate;;;Argument[0];ssti;manual",
"com.mitchellbosecke.pebble;PebbleEngine;true;getLiteralTemplate;;;Argument[0];ssti;manual",
"com.hubspot.jinjava;Jinjava;true;renderForResult;;;Argument[0];ssti;manual",
"com.hubspot.jinjava;Jinjava;true;render;;;Argument[0];ssti;manual",
"org.thymeleaf;ITemplateEngine;true;process;;;Argument[0];ssti;manual",
"org.thymeleaf;ITemplateEngine;true;processThrottled;;;Argument[0];ssti;manual",
"org.apache.velocity.app;Velocity;true;evaluate;;;Argument[3];ssti;manual",
"org.apache.velocity.app;Velocity;true;mergeTemplate;;;Argument[2];ssti;manual",
"org.apache.velocity.app;VelocityEngine;true;evaluate;;;Argument[3];ssti;manual",
"org.apache.velocity.app;VelocityEngine;true;mergeTemplate;;;Argument[2];ssti;manual",
"org.apache.velocity.runtime.resource.util;StringResourceRepository;true;putStringResource;;;Argument[1];ssti;manual",
"org.apache.velocity.runtime;RuntimeServices;true;evaluate;;;Argument[3];ssti;manual",
"org.apache.velocity.runtime;RuntimeServices;true;parse;;;Argument[0];ssti;manual",
"org.apache.velocity.runtime;RuntimeSingleton;true;parse;;;Argument[0];ssti;manual"
]
}
}

View File

@@ -0,0 +1,38 @@
/** Provides a taint tracking configuration for server-side template injection (SST) vulnerabilities */
import java
import semmle.code.java.dataflow.TaintTracking
import semmle.code.java.dataflow.FlowSources
import semmle.code.java.security.TemplateInjection
/** A taint tracking configuration to reason about server-side template injection (SST) vulnerabilities */
class TemplateInjectionFlowConfig extends TaintTracking::Configuration {
TemplateInjectionFlowConfig() { this = "TemplateInjectionFlowConfig" }
override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) {
source.(TemplateInjectionSource).hasState(state)
}
override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) {
sink.(TemplateInjectionSink).hasState(state)
}
override predicate isSanitizer(DataFlow::Node sanitizer) {
sanitizer instanceof TemplateInjectionSanitizer
}
override predicate isSanitizer(DataFlow::Node sanitizer, DataFlow::FlowState state) {
sanitizer.(TemplateInjectionSanitizerWithState).hasState(state)
}
override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
any(TemplateInjectionAdditionalTaintStep a).isAdditionalTaintStep(node1, node2)
}
override predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
any(TemplateInjectionAdditionalTaintStep a).isAdditionalTaintStep(node1, state1, node2, state2)
}
}

View File

@@ -0,0 +1,32 @@
<!DOCTYPE qhelp PUBLIC "-//Semmle//qhelp//EN" "qhelp.dtd">
<qhelp>
<overview>
<p>
Template injection occurs when user input is embedded in a template's code in an unsafe manner.
An attacker can use native template syntax to inject a malicious payload into a template, which is then executed server-side.
This permits the attacker to run arbitrary code in the server's context.
</p>
</overview>
<recommendation>
<p>
To fix this, ensure that untrusted input is not used as part of a template's code. If the application requirements do not allow this,
use a sandboxed environment where access to unsafe attributes and methods is prohibited.
</p>
</recommendation>
<example>
<p>
In the example given below, an untrusted HTTP parameter <code>code</code> is used as a Velocity template string.
This can lead to remote code execution.
</p>
<sample src="SSTIBad.java" />
<p>
In the next example, the problem is avoided by using a fixed template string <code>s</code>.
Since the template's code is not attacker-controlled in this case, this solution prevents the execution of untrusted code.
</p>
<sample src="SSTIGood.java" />
</example>
<references>
<li>Portswigger: <a href="https://portswigger.net/web-security/server-side-template-injection">Server Side Template Injection</a>.</li>
</references>
</qhelp>

View File

@@ -1,16 +1,18 @@
/** /**
* @name Server Side Template Injection * @name Server-side template injection
* @description Untrusted input used as a template parameter can lead to remote code execution. * @description Untrusted input interpreted as a template can lead to remote code execution.
* @kind path-problem * @kind path-problem
* @problem.severity error * @problem.severity error
* @security-severity 9.3
* @precision high * @precision high
* @id java/server-side-template-injection * @id java/server-side-template-injection
* @tags security * @tags security
* external/cwe/cwe-1336
* external/cwe/cwe-094 * external/cwe/cwe-094
*/ */
import java import java
import TemplateInjection import semmle.code.java.security.TemplateInjectionQuery
import DataFlow::PathGraph import DataFlow::PathGraph
from TemplateInjectionFlowConfig config, DataFlow::PathNode source, DataFlow::PathNode sink from TemplateInjectionFlowConfig config, DataFlow::PathNode source, DataFlow::PathNode sink

View File

@@ -0,0 +1,4 @@
---
category: newQuery
---
* The query "Server-side template injection" (`java/server-side-template-injection`) has been promoted from experimental to the main query pack. This query was originally [submitted as an experimental query by @porcupineyhairs](https://github.com/github/codeql/pull/5935).

View File

@@ -1,31 +0,0 @@
<!DOCTYPE qhelp PUBLIC "-//Semmle//qhelp//EN" "qhelp.dtd">
<qhelp>
<overview>
<p>
Template Injection occurs when user input is embedded in a template in an unsafe manner.
An attacker can use native template syntax to inject a malicious payload into a template, which is then executed server-side. This permits the attacker to run arbitrary code in the server's context.</p>
</overview>
<recommendation>
<p>
To fix this, ensure that an untrusted value is not used as a template. If the application requirements do not allow this, use a sandboxed environment where access to unsafe attributes and methods is prohibited.
</p>
</recommendation>
<example>
<p>
In the example given below, an untrusted HTTP parameter
<code>code</code>
is used as a Velocity template string. This can lead to remote code execution.
</p>
<sample src="SSTIBad.java" />
<p>
In the next example the problem is avoided by using a fixed template string
<code>s</code>
. Since, the template is not attacker controlled in this case, we prevent untrusted code execution.
</p>
<sample src="SSTIGood.java" />
</example>
<references>
<li>Portswigger : [Server Side Template Injection](https://portswigger.net/web-security/server-side-template-injection)</li>
</references>
</qhelp>

View File

@@ -1,209 +0,0 @@
/** Definitions related to the Server Side Template Injection (SSTI) query. */
import java
import semmle.code.java.dataflow.TaintTracking
import semmle.code.java.dataflow.FlowSources
import experimental.semmle.code.java.frameworks.FreeMarker
import experimental.semmle.code.java.frameworks.Velocity
import experimental.semmle.code.java.frameworks.JinJava
import experimental.semmle.code.java.frameworks.Pebble
import experimental.semmle.code.java.frameworks.Thymeleaf
/** A taint tracking configuration to reason about Server Side Template Injection (SSTI) vulnerabilities */
class TemplateInjectionFlowConfig extends TaintTracking::Configuration {
TemplateInjectionFlowConfig() { this = "TemplateInjectionFlowConfig" }
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
override predicate isSanitizer(DataFlow::Node node) {
node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType
}
override predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ) {
exists(AdditionalFlowStep a | a.isAdditionalTaintStep(prev, succ))
}
}
/**
* A data flow sink for Server Side Template Injection (SSTI) vulnerabilities
*/
abstract private class Sink extends DataFlow::ExprNode { }
/**
* A data flow step for Server Side Template Injection (SSTI) vulnerabilities
*/
private class AdditionalFlowStep extends Unit {
abstract predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ);
}
/**
* An argument to FreeMarker template engine's `process` method call.
*/
private class FreeMarkerProcessSink extends Sink {
FreeMarkerProcessSink() {
exists(MethodAccess m |
m.getCallee() instanceof MethodFreeMarkerTemplateProcess and
m.getArgument(0) = this.getExpr()
)
}
}
/**
* An reader passed an argument to FreeMarker template engine's `Template`
* construtor call.
*/
private class FreeMarkerConstructorSink extends Sink {
FreeMarkerConstructorSink() {
// Template(java.lang.String name, java.io.Reader reader)
// Template(java.lang.String name, java.io.Reader reader, Configuration cfg)
// Template(java.lang.String name, java.io.Reader reader, Configuration cfg, java.lang.String encoding)
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader reader, Configuration cfg)
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader reader, Configuration cfg, ParserConfiguration customParserConfiguration, java.lang.String encoding)
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader reader, Configuration cfg, java.lang.String encoding)
exists(ConstructorCall cc, Expr e |
cc.getConstructor().getDeclaringType() instanceof TypeFreeMarkerTemplate and
e = cc.getAnArgument() and
(
e.getType().(RefType).hasQualifiedName("java.io", "Reader") and
this.asExpr() = e
)
)
or
exists(ConstructorCall cc |
cc.getConstructor().getDeclaringType() instanceof TypeFreeMarkerTemplate and
// Template(java.lang.String name, java.lang.String sourceCode, Configuration cfg)
cc.getNumArgument() = 3 and
cc.getArgument(1).getType() instanceof TypeString and
this.asExpr() = cc.getArgument(1)
)
}
}
/**
* An argument to FreeMarker template engine's `putTemplate` method call.
*/
private class FreeMarkerStringTemplateLoaderPutTemplateSink extends Sink {
FreeMarkerStringTemplateLoaderPutTemplateSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(1) and
ma.getMethod() instanceof MethodFreeMarkerStringTemplateLoaderPutTemplate
)
}
}
/**
* An argument to Pebble template engine's `getLiteralTemplate` or `getTemplate` method call.
*/
private class PebbleGetTemplateSinkTemplateSink extends Sink {
PebbleGetTemplateSinkTemplateSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(0) and
ma.getMethod() instanceof MethodPebbleGetTemplate
)
}
}
/**
* An argument to JinJava template engine's `render` or `renderForResult` method call.
*/
private class JinjavaRenderSink extends Sink {
JinjavaRenderSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(0) and
(
ma.getMethod() instanceof MethodJinjavaRenderForResult
or
ma.getMethod() instanceof MethodJinjavaRender
)
)
}
}
/**
* An argument to ThymeLeaf template engine's `process` method call.
*/
private class ThymeLeafRenderSink extends Sink {
ThymeLeafRenderSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(0) and
ma.getMethod() instanceof MethodThymeleafProcess
)
}
}
/**
* Tainted data flowing into a Velocity Context through `put` method taints the context.
*/
private class VelocityContextFlow extends AdditionalFlowStep {
override predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ) {
exists(MethodAccess m | m.getMethod() instanceof MethodVelocityContextPut |
m.getArgument(1) = prev.asExpr() and
succ.asExpr() = m.getQualifier()
)
}
}
/**
* An argument to Velocity template engine's `mergeTemplate` method call.
*/
private class VelocityMergeTempSink extends Sink {
VelocityMergeTempSink() {
exists(MethodAccess m |
// static boolean mergeTemplate(String templateName, String encoding, Context context, Writer writer)
m.getCallee() instanceof MethodVelocityMergeTemplate and
m.getArgument(2) = this.getExpr()
)
}
}
/**
* An argument to Velocity template engine's `mergeTemplate` method call.
*/
private class VelocityMergeSink extends Sink {
VelocityMergeSink() {
exists(MethodAccess m |
m.getCallee() instanceof MethodVelocityMerge and
// public void merge(Context context, Writer writer)
// public void merge(Context context, Writer writer, List<String> macroLibraries)
m.getArgument(0) = this.getExpr()
)
}
}
/**
* An argument to Velocity template engine's `evaluate` method call.
*/
private class VelocityEvaluateSink extends Sink {
VelocityEvaluateSink() {
exists(MethodAccess m |
m.getCallee() instanceof MethodVelocityEvaluate and
m.getArgument([0, 3]) = this.getExpr()
)
}
}
/**
* An argument to Velocity template engine's `parse` method call.
*/
private class VelocityParseSink extends Sink {
VelocityParseSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(0) and
ma.getMethod() instanceof MethodVelocityParse
)
}
}
/**
* An argument to Velocity template engine's `putStringResource` method call.
*/
private class VelocityPutStringResSink extends Sink {
VelocityPutStringResSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(1) and
ma.getMethod() instanceof MethodVelocityPutStringResource
)
}
}

View File

@@ -1,29 +0,0 @@
/** Definitions related to the FreeMarker Templating library. */
import java
/** The `Template` class of the FreeMarker Template Engine */
class TypeFreeMarkerTemplate extends Class {
TypeFreeMarkerTemplate() { this.hasQualifiedName("freemarker.template", "Template") }
}
/** The `process` method of the FreeMarker Template Engine's `Template` class */
class MethodFreeMarkerTemplateProcess extends Method {
MethodFreeMarkerTemplateProcess() {
this.getDeclaringType() instanceof TypeFreeMarkerTemplate and
this.hasName("process")
}
}
/** The `StringTemplateLoader` class of the FreeMarker Template Engine */
class TypeFreeMarkerStringLoader extends Class {
TypeFreeMarkerStringLoader() { this.hasQualifiedName("freemarker.cache", "StringTemplateLoader") }
}
/** The `process` method of the FreeMarker Template Engine's `StringTemplateLoader` class */
class MethodFreeMarkerStringTemplateLoaderPutTemplate extends Method {
MethodFreeMarkerStringTemplateLoaderPutTemplate() {
this.getDeclaringType() instanceof TypeFreeMarkerStringLoader and
this.hasName("putTemplate")
}
}

View File

@@ -1,24 +0,0 @@
/** Definitions related to the Jinjava Templating library. */
import java
/** The `Jinjava` class of the Jinjava Templating Engine. */
class TypeJinjava extends Class {
TypeJinjava() { this.hasQualifiedName("com.hubspot.jinjava", "Jinjava") }
}
/** The `render` method of the Jinjava Templating Engine. */
class MethodJinjavaRender extends Method {
MethodJinjavaRender() {
this.getDeclaringType() instanceof TypeJinjava and
this.hasName("render")
}
}
/** The `render` method of the Jinjava Templating Engine. */
class MethodJinjavaRenderForResult extends Method {
MethodJinjavaRenderForResult() {
this.getDeclaringType() instanceof TypeJinjava and
this.hasName("renderForResult")
}
}

View File

@@ -1,16 +0,0 @@
/** Definitions related to the Pebble Templating library. */
import java
/** The `PebbleEngine` class of the Pebble Templating Engine. */
class TypePebbleEngine extends Class {
TypePebbleEngine() { this.hasQualifiedName("com.mitchellbosecke.pebble", "PebbleEngine") }
}
/** The `getTemplate` method of the Pebble Templating Engine. */
class MethodPebbleGetTemplate extends Method {
MethodPebbleGetTemplate() {
this.getDeclaringType() instanceof TypePebbleEngine and
this.hasName(["getTemplate", "getLiteralTemplate"])
}
}

View File

@@ -1,25 +0,0 @@
/** Definitions related to the Thymeleaf Templating library. */
import java
/**
* A class implementing the `ITemplateEngine` interface of the Thymeleaf
* Templating Engine such as the `TemplateEngine` class.
*/
class TypeThymeleafTemplateEngine extends Class {
TypeThymeleafTemplateEngine() {
this.hasQualifiedName("org.thymeleaf", "TemplateEngine")
or
exists(Type t | this.getASupertype*().extendsOrImplements(t) |
t.hasName("org.thymeleaf.ITemplateEngine")
)
}
}
/** The `process` or `processThrottled` method of the Thymeleaf Templating Engine. */
class MethodThymeleafProcess extends Method {
MethodThymeleafProcess() {
this.getDeclaringType() instanceof TypeThymeleafTemplateEngine and
this.hasName(["process", "processThrottled"])
}
}

View File

@@ -1,119 +0,0 @@
/** Definitions related to the Apache Velocity Templating library. */
import java
/** The `org.apache.velocity.context.AbstractContext` class of the Velocity Templating Engine. */
class TypeVelocityAbstractContext extends Class {
TypeVelocityAbstractContext() {
this.hasQualifiedName("org.apache.velocity.context", "AbstractContext")
}
}
/** The `org.apache.velocity.runtime.RuntimeServices` class of the Velocity Templating Engine. */
class TypeVelocityRuntimeRuntimeServices extends Class {
TypeVelocityRuntimeRuntimeServices() {
this.hasQualifiedName("org.apache.velocity.runtime", "RuntimeServices")
}
}
/** The `org.apache.velocity.Template` class of the Velocity Templating Engine. */
class TypeVelocityTemplate extends Class {
TypeVelocityTemplate() { this.hasQualifiedName("org.apache.velocity", "Template") }
}
/** The `org.apache.velocity.runtime.RuntimeSingleton` classTemplating Engine. */
class TypeVelocityRuntimeRuntimeSingleton extends Class {
TypeVelocityRuntimeRuntimeSingleton() {
this.hasQualifiedName("org.apache.velocity.runtime", "RuntimeSingleton")
}
}
/** The `org.apache.velocity.VelocityEngine` class of the Velocity Templating Engine. */
class TypeVelocityVelocityEngine extends Class {
TypeVelocityVelocityEngine() { this.hasQualifiedName("org.apache.velocity", "VelocityEngine") }
}
/** The `org.apache.velocity.app.VelocityEngine` class of the Velocity Templating Engine. */
class TypeVelocityAppVelocityEngine extends RefType {
TypeVelocityAppVelocityEngine() {
this.hasQualifiedName("org.apache.velocity.app", "VelocityEngine")
}
}
/** The `org.apache.velocity.app.Velocity` class of the Velocity Templating Engine. */
class TypeVelocityAppVelocity extends RefType {
TypeVelocityAppVelocity() { this.hasQualifiedName("org.apache.velocity.app", "Velocity") }
}
/**
* The `org.apache.velocity.runtime.resource.util.StringResourceRepository` interface
* of the Velocity Templating Engine.
*/
class TypeVelocityStringResourceRepo extends RefType {
TypeVelocityStringResourceRepo() {
this.hasQualifiedName("org.apache.velocity.runtime.resource.util", "StringResourceRepository")
}
}
/** The `internalPut` and `put` methods of the Velocity Templating Engine. */
class MethodVelocityContextPut extends Method {
MethodVelocityContextPut() {
this.getDeclaringType().getASupertype*() instanceof TypeVelocityAbstractContext and
this.hasName(["put", "internalPut"])
}
}
/** The `evaluate` method of the Velocity Templating Engine. */
class MethodVelocityEvaluate extends Method {
MethodVelocityEvaluate() {
// static boolean evaluate(Context context, Writer out, String logTag, String instring)
// static boolean evaluate(Context context, Writer writer, String logTag, Reader reader)
(
this.getDeclaringType() instanceof TypeVelocityAppVelocity or
this.getDeclaringType() instanceof TypeVelocityAppVelocityEngine or
this.getDeclaringType().getASupertype*() instanceof TypeVelocityRuntimeRuntimeServices
) and
this.hasName("evaluate")
}
}
/** The `mergeTemplate` method of the Velocity Templating Engine. */
class MethodVelocityMergeTemplate extends Method {
MethodVelocityMergeTemplate() {
// static boolean mergeTemplate(String templateName, String encoding, Context context, Writer writer)
(
this.getDeclaringType() instanceof TypeVelocityAppVelocity or
this.getDeclaringType() instanceof TypeVelocityAppVelocityEngine
) and
this.hasName("mergeTemplate")
}
}
/** The `merge` method of the Velocity Templating Engine. */
class MethodVelocityMerge extends Method {
MethodVelocityMerge() {
// void merge(Context context, Writer writer)
// void merge(Context context, Writer writer, List<String> macroLibraries)
this.getDeclaringType() instanceof TypeVelocityTemplate and
this.hasName("merge")
}
}
/** The `parse` method of the Velocity Templating Engine. */
class MethodVelocityParse extends Method {
MethodVelocityParse() {
(
this.getDeclaringType().getASupertype*() instanceof TypeVelocityRuntimeRuntimeSingleton or
this.getDeclaringType().getASupertype*() instanceof TypeVelocityRuntimeRuntimeServices
) and
this.hasName("parse")
}
}
/** The `putStringResource` method of the Velocity Templating Engine. */
class MethodVelocityPutStringResource extends Method {
MethodVelocityPutStringResource() {
this.getDeclaringType().getASupertype*() instanceof TypeVelocityStringResourceRepo and
this.hasName("putStringResource")
}
}

View File

@@ -1,136 +0,0 @@
edges
| FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | FreemarkerSSTI.java:24:36:24:39 | code : String |
| FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:27:35:27:40 | reader |
| FreemarkerSSTI.java:24:36:24:39 | code : String | FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:33:17:33:44 | getParameter(...) : String | FreemarkerSSTI.java:34:36:34:39 | code : String |
| FreemarkerSSTI.java:34:19:34:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:38:35:38:40 | reader |
| FreemarkerSSTI.java:34:36:34:39 | code : String | FreemarkerSSTI.java:34:19:34:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:44:17:44:44 | getParameter(...) : String | FreemarkerSSTI.java:45:36:45:39 | code : String |
| FreemarkerSSTI.java:45:19:45:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:50:35:50:40 | reader |
| FreemarkerSSTI.java:45:36:45:39 | code : String | FreemarkerSSTI.java:45:19:45:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:56:23:56:56 | getParameter(...) : String | FreemarkerSSTI.java:61:35:61:44 | sourceCode |
| FreemarkerSSTI.java:67:17:67:44 | getParameter(...) : String | FreemarkerSSTI.java:69:36:69:39 | code : String |
| FreemarkerSSTI.java:69:19:69:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:73:47:73:52 | reader |
| FreemarkerSSTI.java:69:36:69:39 | code : String | FreemarkerSSTI.java:69:19:69:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:79:17:79:44 | getParameter(...) : String | FreemarkerSSTI.java:82:36:82:39 | code : String |
| FreemarkerSSTI.java:82:19:82:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:87:47:87:52 | reader |
| FreemarkerSSTI.java:82:36:82:39 | code : String | FreemarkerSSTI.java:82:19:82:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | FreemarkerSSTI.java:96:36:96:39 | code : String |
| FreemarkerSSTI.java:96:19:96:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:100:47:100:52 | reader |
| FreemarkerSSTI.java:96:36:96:39 | code : String | FreemarkerSSTI.java:96:19:96:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:105:17:105:44 | getParameter(...) : String | FreemarkerSSTI.java:109:42:109:45 | code |
| FreemarkerSSTI.java:114:17:114:44 | getParameter(...) : String | FreemarkerSSTI.java:119:42:119:45 | code |
| FreemarkerSSTI.java:125:17:125:44 | getParameter(...) : String | FreemarkerSSTI.java:126:26:126:29 | code : String |
| FreemarkerSSTI.java:126:9:126:12 | root [post update] [<map.value>] : String | FreemarkerSSTI.java:130:22:130:25 | root |
| FreemarkerSSTI.java:126:26:126:29 | code : String | FreemarkerSSTI.java:126:9:126:12 | root [post update] [<map.value>] : String |
| JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | JinJavaSSTI.java:25:44:25:51 | template |
| JinJavaSSTI.java:30:21:30:52 | getParameter(...) : String | JinJavaSSTI.java:34:55:34:62 | template |
| JinJavaSSTI.java:39:21:39:52 | getParameter(...) : String | JinJavaSSTI.java:46:55:46:62 | template |
| PebbleSSTI.java:18:17:18:44 | getParameter(...) : String | PebbleSSTI.java:21:56:21:59 | code |
| PebbleSSTI.java:25:17:25:44 | getParameter(...) : String | PebbleSSTI.java:28:63:28:66 | code |
| ThymeleafSSTI.java:22:17:22:44 | getParameter(...) : String | ThymeleafSSTI.java:27:27:27:30 | code |
| VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | VelocitySSTI.java:38:45:38:48 | code |
| VelocitySSTI.java:44:17:44:44 | getParameter(...) : String | VelocitySSTI.java:50:42:50:45 | code : String |
| VelocitySSTI.java:50:25:50:46 | new StringReader(...) : StringReader | VelocitySSTI.java:53:45:53:50 | reader |
| VelocitySSTI.java:50:42:50:45 | code : String | VelocitySSTI.java:50:25:50:46 | new StringReader(...) : StringReader |
| VelocitySSTI.java:59:17:59:44 | getParameter(...) : String | VelocitySSTI.java:62:42:62:45 | code : String |
| VelocitySSTI.java:62:25:62:46 | new StringReader(...) : StringReader | VelocitySSTI.java:63:25:63:30 | reader |
| VelocitySSTI.java:62:42:62:45 | code : String | VelocitySSTI.java:62:25:62:46 | new StringReader(...) : StringReader |
| VelocitySSTI.java:69:17:69:44 | getParameter(...) : String | VelocitySSTI.java:77:21:77:27 | context |
| VelocitySSTI.java:83:17:83:44 | getParameter(...) : String | VelocitySSTI.java:89:60:89:66 | context |
| VelocitySSTI.java:95:17:95:44 | getParameter(...) : String | VelocitySSTI.java:102:11:102:17 | context |
| VelocitySSTI.java:108:17:108:44 | getParameter(...) : String | VelocitySSTI.java:115:11:115:17 | context |
| VelocitySSTI.java:120:17:120:44 | getParameter(...) : String | VelocitySSTI.java:123:37:123:40 | code |
nodes
| FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:24:36:24:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:27:35:27:40 | reader | semmle.label | reader |
| FreemarkerSSTI.java:33:17:33:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:34:19:34:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:34:36:34:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:38:35:38:40 | reader | semmle.label | reader |
| FreemarkerSSTI.java:44:17:44:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:45:19:45:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:45:36:45:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:50:35:50:40 | reader | semmle.label | reader |
| FreemarkerSSTI.java:56:23:56:56 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:61:35:61:44 | sourceCode | semmle.label | sourceCode |
| FreemarkerSSTI.java:67:17:67:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:69:19:69:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:69:36:69:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:73:47:73:52 | reader | semmle.label | reader |
| FreemarkerSSTI.java:79:17:79:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:82:19:82:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:82:36:82:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:87:47:87:52 | reader | semmle.label | reader |
| FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:96:19:96:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:96:36:96:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:100:47:100:52 | reader | semmle.label | reader |
| FreemarkerSSTI.java:105:17:105:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:109:42:109:45 | code | semmle.label | code |
| FreemarkerSSTI.java:114:17:114:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:119:42:119:45 | code | semmle.label | code |
| FreemarkerSSTI.java:125:17:125:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:126:9:126:12 | root [post update] [<map.value>] : String | semmle.label | root [post update] [<map.value>] : String |
| FreemarkerSSTI.java:126:26:126:29 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:130:22:130:25 | root | semmle.label | root |
| JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| JinJavaSSTI.java:25:44:25:51 | template | semmle.label | template |
| JinJavaSSTI.java:30:21:30:52 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| JinJavaSSTI.java:34:55:34:62 | template | semmle.label | template |
| JinJavaSSTI.java:39:21:39:52 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| JinJavaSSTI.java:46:55:46:62 | template | semmle.label | template |
| PebbleSSTI.java:18:17:18:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| PebbleSSTI.java:21:56:21:59 | code | semmle.label | code |
| PebbleSSTI.java:25:17:25:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| PebbleSSTI.java:28:63:28:66 | code | semmle.label | code |
| ThymeleafSSTI.java:22:17:22:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| ThymeleafSSTI.java:27:27:27:30 | code | semmle.label | code |
| VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:38:45:38:48 | code | semmle.label | code |
| VelocitySSTI.java:44:17:44:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:50:25:50:46 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| VelocitySSTI.java:50:42:50:45 | code : String | semmle.label | code : String |
| VelocitySSTI.java:53:45:53:50 | reader | semmle.label | reader |
| VelocitySSTI.java:59:17:59:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:62:25:62:46 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| VelocitySSTI.java:62:42:62:45 | code : String | semmle.label | code : String |
| VelocitySSTI.java:63:25:63:30 | reader | semmle.label | reader |
| VelocitySSTI.java:69:17:69:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:77:21:77:27 | context | semmle.label | context |
| VelocitySSTI.java:83:17:83:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:89:60:89:66 | context | semmle.label | context |
| VelocitySSTI.java:95:17:95:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:102:11:102:17 | context | semmle.label | context |
| VelocitySSTI.java:108:17:108:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:115:11:115:17 | context | semmle.label | context |
| VelocitySSTI.java:120:17:120:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:123:37:123:40 | code | semmle.label | code |
subpaths
#select
| FreemarkerSSTI.java:27:35:27:40 | reader | FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | FreemarkerSSTI.java:27:35:27:40 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:23:17:23:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:38:35:38:40 | reader | FreemarkerSSTI.java:33:17:33:44 | getParameter(...) : String | FreemarkerSSTI.java:38:35:38:40 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:33:17:33:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:50:35:50:40 | reader | FreemarkerSSTI.java:44:17:44:44 | getParameter(...) : String | FreemarkerSSTI.java:50:35:50:40 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:44:17:44:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:61:35:61:44 | sourceCode | FreemarkerSSTI.java:56:23:56:56 | getParameter(...) : String | FreemarkerSSTI.java:61:35:61:44 | sourceCode | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:56:23:56:56 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:73:47:73:52 | reader | FreemarkerSSTI.java:67:17:67:44 | getParameter(...) : String | FreemarkerSSTI.java:73:47:73:52 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:67:17:67:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:87:47:87:52 | reader | FreemarkerSSTI.java:79:17:79:44 | getParameter(...) : String | FreemarkerSSTI.java:87:47:87:52 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:79:17:79:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:100:47:100:52 | reader | FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | FreemarkerSSTI.java:100:47:100:52 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:93:17:93:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:109:42:109:45 | code | FreemarkerSSTI.java:105:17:105:44 | getParameter(...) : String | FreemarkerSSTI.java:109:42:109:45 | code | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:105:17:105:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:119:42:119:45 | code | FreemarkerSSTI.java:114:17:114:44 | getParameter(...) : String | FreemarkerSSTI.java:119:42:119:45 | code | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:114:17:114:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:130:22:130:25 | root | FreemarkerSSTI.java:125:17:125:44 | getParameter(...) : String | FreemarkerSSTI.java:130:22:130:25 | root | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:125:17:125:44 | getParameter(...) | a template value loaded from a remote source. |
| JinJavaSSTI.java:25:44:25:51 | template | JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | JinJavaSSTI.java:25:44:25:51 | template | Potential arbitrary code execution due to $@. | JinJavaSSTI.java:21:21:21:52 | getParameter(...) | a template value loaded from a remote source. |
| JinJavaSSTI.java:34:55:34:62 | template | JinJavaSSTI.java:30:21:30:52 | getParameter(...) : String | JinJavaSSTI.java:34:55:34:62 | template | Potential arbitrary code execution due to $@. | JinJavaSSTI.java:30:21:30:52 | getParameter(...) | a template value loaded from a remote source. |
| JinJavaSSTI.java:46:55:46:62 | template | JinJavaSSTI.java:39:21:39:52 | getParameter(...) : String | JinJavaSSTI.java:46:55:46:62 | template | Potential arbitrary code execution due to $@. | JinJavaSSTI.java:39:21:39:52 | getParameter(...) | a template value loaded from a remote source. |
| PebbleSSTI.java:21:56:21:59 | code | PebbleSSTI.java:18:17:18:44 | getParameter(...) : String | PebbleSSTI.java:21:56:21:59 | code | Potential arbitrary code execution due to $@. | PebbleSSTI.java:18:17:18:44 | getParameter(...) | a template value loaded from a remote source. |
| PebbleSSTI.java:28:63:28:66 | code | PebbleSSTI.java:25:17:25:44 | getParameter(...) : String | PebbleSSTI.java:28:63:28:66 | code | Potential arbitrary code execution due to $@. | PebbleSSTI.java:25:17:25:44 | getParameter(...) | a template value loaded from a remote source. |
| ThymeleafSSTI.java:27:27:27:30 | code | ThymeleafSSTI.java:22:17:22:44 | getParameter(...) : String | ThymeleafSSTI.java:27:27:27:30 | code | Potential arbitrary code execution due to $@. | ThymeleafSSTI.java:22:17:22:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:38:45:38:48 | code | VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | VelocitySSTI.java:38:45:38:48 | code | Potential arbitrary code execution due to $@. | VelocitySSTI.java:31:17:31:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:53:45:53:50 | reader | VelocitySSTI.java:44:17:44:44 | getParameter(...) : String | VelocitySSTI.java:53:45:53:50 | reader | Potential arbitrary code execution due to $@. | VelocitySSTI.java:44:17:44:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:63:25:63:30 | reader | VelocitySSTI.java:59:17:59:44 | getParameter(...) : String | VelocitySSTI.java:63:25:63:30 | reader | Potential arbitrary code execution due to $@. | VelocitySSTI.java:59:17:59:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:77:21:77:27 | context | VelocitySSTI.java:69:17:69:44 | getParameter(...) : String | VelocitySSTI.java:77:21:77:27 | context | Potential arbitrary code execution due to $@. | VelocitySSTI.java:69:17:69:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:89:60:89:66 | context | VelocitySSTI.java:83:17:83:44 | getParameter(...) : String | VelocitySSTI.java:89:60:89:66 | context | Potential arbitrary code execution due to $@. | VelocitySSTI.java:83:17:83:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:102:11:102:17 | context | VelocitySSTI.java:95:17:95:44 | getParameter(...) : String | VelocitySSTI.java:102:11:102:17 | context | Potential arbitrary code execution due to $@. | VelocitySSTI.java:95:17:95:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:115:11:115:17 | context | VelocitySSTI.java:108:17:108:44 | getParameter(...) : String | VelocitySSTI.java:115:11:115:17 | context | Potential arbitrary code execution due to $@. | VelocitySSTI.java:108:17:108:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:123:37:123:40 | code | VelocitySSTI.java:120:17:120:44 | getParameter(...) : String | VelocitySSTI.java:123:37:123:40 | code | Potential arbitrary code execution due to $@. | VelocitySSTI.java:120:17:120:44 | getParameter(...) | a template value loaded from a remote source. |

View File

@@ -1 +0,0 @@
experimental/Security/CWE/CWE-094/TemplateInjection.ql

View File

@@ -1,31 +0,0 @@
import javax.imageio.stream.FileImageInputStream;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.lang.String;
import java.io.File;
import java.io.FileWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import org.thymeleaf.*;
import org.thymeleaf.context.Context;
@Controller
public class ThymeleafSSTI {
String sourceName = "sourceName";
@GetMapping(value = "bad1")
public void bad1(HttpServletRequest request) {
String code = request.getParameter("code");
Context ctx = new Context();
try {
FileWriter fw = new FileWriter(new File("as"));
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.process(code, ctx, fw);
} catch (Exception e) {
}
}
}

View File

@@ -0,0 +1,61 @@
package generatedtest;
import java.util.Map;
import java.util.Set;
import org.thymeleaf.TemplateSpec;
import org.thymeleaf.templatemode.TemplateMode;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object source() { return null; }
void sink(Object o) { }
public void test() throws Exception {
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (Map)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (Set)null, (String)null, (Map)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (Set)null, (TemplateMode)null, (Map)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (String)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (TemplateMode)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;getTemplate;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
TemplateSpec in = (TemplateSpec)source();
out = in.getTemplate();
sink(out); // $ hasTaintFlow
}
}
}

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/thymeleaf-3.0.14

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest

View File

@@ -11,7 +11,7 @@ import java.util.HashMap;
import freemarker.template.Template; import freemarker.template.Template;
import freemarker.template.Configuration; import freemarker.template.Configuration;
import freemarker.cache.StringTemplateLoader; import freemarker.cache.StringTemplateLoader;
import freemarker.template.ParserConfiguration; import freemarker.core.ParserConfiguration;
@Controller @Controller
public class FreemarkerSSTI { public class FreemarkerSSTI {
@@ -23,8 +23,7 @@ public class FreemarkerSSTI {
String code = request.getParameter("code"); String code = request.getParameter("code");
Reader reader = new StringReader(code); Reader reader = new StringReader(code);
// Template(java.lang.String name, java.io.Reader reader) Template t = new Template(name, reader); // $hasTemplateInjection
Template t = new Template(name, reader);
} }
@GetMapping(value = "bad2") @GetMapping(value = "bad2")
@@ -33,9 +32,8 @@ public class FreemarkerSSTI {
String code = request.getParameter("code"); String code = request.getParameter("code");
Reader reader = new StringReader(code); Reader reader = new StringReader(code);
Configuration cfg = new Configuration(); Configuration cfg = new Configuration();
// Template(java.lang.String name, java.io.Reader reader, Configuration cfg) Template t = new Template(name, reader, cfg); // $hasTemplateInjection
Template t = new Template(name, reader, cfg);
} }
@GetMapping(value = "bad3") @GetMapping(value = "bad3")
@@ -45,9 +43,7 @@ public class FreemarkerSSTI {
Reader reader = new StringReader(code); Reader reader = new StringReader(code);
Configuration cfg = new Configuration(); Configuration cfg = new Configuration();
// Template(java.lang.String name, java.io.Reader reader, Configuration cfg, Template t = new Template(name, reader, cfg, "UTF-8"); // $hasTemplateInjection
// java.lang.String encoding)
Template t = new Template(name, reader, cfg, "UTF-8");
} }
@GetMapping(value = "bad4") @GetMapping(value = "bad4")
@@ -56,9 +52,7 @@ public class FreemarkerSSTI {
String sourceCode = request.getParameter("sourceCode"); String sourceCode = request.getParameter("sourceCode");
Configuration cfg = new Configuration(); Configuration cfg = new Configuration();
// Template(java.lang.String name, java.lang.String sourceCode, Configuration Template t = new Template(name, sourceCode, cfg); // $hasTemplateInjection
// cfg)
Template t = new Template(name, sourceCode, cfg);
} }
@GetMapping(value = "bad5") @GetMapping(value = "bad5")
@@ -68,9 +62,7 @@ public class FreemarkerSSTI {
Configuration cfg = new Configuration(); Configuration cfg = new Configuration();
Reader reader = new StringReader(code); Reader reader = new StringReader(code);
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader Template t = new Template(name, sourceName, reader, cfg); // $hasTemplateInjection
// reader, Configuration cfg)
Template t = new Template(name, sourceName, reader, cfg);
} }
@GetMapping(value = "bad6") @GetMapping(value = "bad6")
@@ -81,10 +73,8 @@ public class FreemarkerSSTI {
ParserConfiguration customParserConfiguration = new Configuration(); ParserConfiguration customParserConfiguration = new Configuration();
Reader reader = new StringReader(code); Reader reader = new StringReader(code);
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader Template t =
// reader, Configuration cfg, ParserConfiguration customParserConfiguration, new Template(name, sourceName, reader, cfg, customParserConfiguration, "UTF-8"); // $hasTemplateInjection
// java.lang.String encoding)
Template t = new Template(name, sourceName, reader, cfg, customParserConfiguration, "UTF-8");
} }
@GetMapping(value = "bad7") @GetMapping(value = "bad7")
@@ -95,9 +85,7 @@ public class FreemarkerSSTI {
ParserConfiguration customParserConfiguration = new Configuration(); ParserConfiguration customParserConfiguration = new Configuration();
Reader reader = new StringReader(code); Reader reader = new StringReader(code);
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader Template t = new Template(name, sourceName, reader, cfg, "UTF-8"); // $hasTemplateInjection
// reader, Configuration cfg, java.lang.String encoding)
Template t = new Template(name, sourceName, reader, cfg, "UTF-8");
} }
@GetMapping(value = "bad8") @GetMapping(value = "bad8")
@@ -105,28 +93,25 @@ public class FreemarkerSSTI {
String code = request.getParameter("code"); String code = request.getParameter("code");
StringTemplateLoader stringLoader = new StringTemplateLoader(); StringTemplateLoader stringLoader = new StringTemplateLoader();
// void putTemplate(java.lang.String name, java.lang.String templateContent) stringLoader.putTemplate("myTemplate", code); // $hasTemplateInjection
stringLoader.putTemplate("myTemplate", code);
} }
@GetMapping(value = "bad9") @GetMapping(value = "bad9")
public void bad9(HttpServletRequest request) { public void bad9(HttpServletRequest request) {
String code = request.getParameter("code"); String code = request.getParameter("code");
StringTemplateLoader stringLoader = new StringTemplateLoader(); StringTemplateLoader stringLoader = new StringTemplateLoader();
// void putTemplate(java.lang.String name, java.lang.String templateContent, stringLoader.putTemplate("myTemplate", code, 0); // $hasTemplateInjection
// long lastModified)
stringLoader.putTemplate("myTemplate", code, 0);
} }
@GetMapping(value = "bad10") @GetMapping(value = "good1")
public void bad10(HttpServletRequest request) { public void good1(HttpServletRequest request) {
HashMap root = new HashMap(); HashMap<Object, Object> root = new HashMap();
String code = request.getParameter("code"); String code = request.getParameter("code");
root.put("code", code); root.put("code", code);
Configuration cfg = new Configuration(); Configuration cfg = new Configuration();
Template temp = cfg.getTemplate("test.ftlh"); Template temp = cfg.getTemplate("test.ftlh");
OutputStreamWriter out = new OutputStreamWriter(System.out); OutputStreamWriter out = new OutputStreamWriter(System.out);
temp.process(root, out); temp.process(root, out); // Safe
} }
} }

View File

@@ -21,8 +21,7 @@ public class JinJavaSSTI {
String template = request.getParameter("template"); String template = request.getParameter("template");
Jinjava jinjava = new Jinjava(); Jinjava jinjava = new Jinjava();
Map<String, Object> context = new HashMap<>(); Map<String, Object> context = new HashMap<>();
// String render(String template, Map<String, ?> bindings) String renderedTemplate = jinjava.render(template, context); // $hasTemplateInjection
String renderedTemplate = jinjava.render(template, context);
} }
@GetMapping(value = "bad2") @GetMapping(value = "bad2")
@@ -30,8 +29,7 @@ public class JinJavaSSTI {
String template = request.getParameter("template"); String template = request.getParameter("template");
Jinjava jinjava = new Jinjava(); Jinjava jinjava = new Jinjava();
Map<String, Object> bindings = new HashMap<>(); Map<String, Object> bindings = new HashMap<>();
// RenderResult renderForResult (String template, Map<String, ?> bindings) RenderResult renderResult = jinjava.renderForResult(template, bindings); // $hasTemplateInjection
RenderResult renderResult = jinjava.renderForResult(template, bindings);
} }
@GetMapping(value = "bad3") @GetMapping(value = "bad3")
@@ -41,8 +39,6 @@ public class JinJavaSSTI {
Map<String, Object> bindings = new HashMap<>(); Map<String, Object> bindings = new HashMap<>();
JinjavaConfig renderConfig = new JinjavaConfig(); JinjavaConfig renderConfig = new JinjavaConfig();
// RenderResult renderForResult (String template, Map<String, ?> bindings, RenderResult renderResult = jinjava.renderForResult(template, bindings, renderConfig); // $hasTemplateInjection
// JinjavaConfig renderConfig)
RenderResult renderResult = jinjava.renderForResult(template, bindings, renderConfig);
} }
} }

View File

@@ -15,16 +15,15 @@ public class PebbleSSTI {
@GetMapping(value = "bad1") @GetMapping(value = "bad1")
public void bad1(HttpServletRequest request) { public void bad1(HttpServletRequest request) {
String code = request.getParameter("code"); String templateName = request.getParameter("templateName");
PebbleEngine engine = new PebbleEngine.Builder().build(); PebbleEngine engine = new PebbleEngine.Builder().build();
// public PebbleTemplate getTemplate(String templateName) PebbleTemplate compiledTemplate = engine.getTemplate(templateName); // $hasTemplateInjection
PebbleTemplate compiledTemplate = engine.getTemplate(code);
} }
@GetMapping(value = "bad2") @GetMapping(value = "bad2")
public void bad2(HttpServletRequest request) { public void bad2(HttpServletRequest request) {
String code = request.getParameter("code"); String templateName = request.getParameter("templateName");
PebbleEngine engine = new PebbleEngine.Builder().build(); PebbleEngine engine = new PebbleEngine.Builder().build();
// public PebbleTemplate getLiteralTemplate(String templateName) PebbleTemplate compiledTemplate = engine.getLiteralTemplate(templateName); // $hasTemplateInjection
PebbleTemplate compiledTemplate = engine.getLiteralTemplate(code);
} }
} }

View File

@@ -0,0 +1,20 @@
import java
import semmle.code.java.security.TemplateInjectionQuery
import TestUtilities.InlineExpectationsTest
class TemplateInjectionTest extends InlineExpectationsTest {
TemplateInjectionTest() { this = "TemplateInjectionTest" }
override string getARelevantTag() { result = "hasTemplateInjection" }
override predicate hasActualResult(Location location, string element, string tag, string value) {
tag = "hasTemplateInjection" and
exists(DataFlow::Node src, DataFlow::Node sink, TemplateInjectionFlowConfig conf |
conf.hasFlow(src, sink)
|
sink.getLocation() = location and
element = sink.toString() and
value = ""
)
}
}

View File

@@ -0,0 +1,38 @@
import javax.imageio.stream.FileImageInputStream;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.lang.String;
import java.io.File;
import java.io.FileWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import java.util.Set;
import org.thymeleaf.*;
import org.thymeleaf.context.Context;
@Controller
public class ThymeleafSSTI {
@GetMapping(value = "bad1")
public void bad1(HttpServletRequest request) {
String code = request.getParameter("code");
try {
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.process(code, (Set<String>) null, (Context) null); // $hasTemplateInjection
templateEngine.process(code, (Set<String>) null, (Context) null, (Writer) null); // $hasTemplateInjection
templateEngine.process(code, (Context) null); // $hasTemplateInjection
templateEngine.process(code, (Context) null, (Writer) null); // $hasTemplateInjection
templateEngine.processThrottled(code, (Set<String>) null, (Context) null); // $hasTemplateInjection
templateEngine.processThrottled(code, (Context) null); // $hasTemplateInjection
TemplateSpec spec = new TemplateSpec(code, "");
templateEngine.process(spec, (Context) null); // $hasTemplateInjection
templateEngine.process(spec, (Context) null, (Writer) null); // $hasTemplateInjection
templateEngine.processThrottled(spec, (Context) null); // $hasTemplateInjection
} catch (Exception e) {
}
}
}

View File

@@ -34,8 +34,7 @@ public class VelocitySSTI {
String s = "We are using $project $name to render this."; String s = "We are using $project $name to render this.";
StringWriter w = new StringWriter(); StringWriter w = new StringWriter();
// evaluate( Context context, Writer out, String logTag, String instring ) Velocity.evaluate(context, w, "mystring", code); // $hasTemplateInjection
Velocity.evaluate(context, w, "mystring", code);
} }
@GetMapping(value = "bad2") @GetMapping(value = "bad2")
@@ -49,8 +48,7 @@ public class VelocitySSTI {
StringWriter w = new StringWriter(); StringWriter w = new StringWriter();
StringReader reader = new StringReader(code); StringReader reader = new StringReader(code);
// evaluate(Context context, Writer writer, String logTag, Reader reader) Velocity.evaluate(context, w, "mystring", reader); // $hasTemplateInjection
Velocity.evaluate(context, w, "mystring", reader);
} }
@GetMapping(value = "bad3") @GetMapping(value = "bad3")
@@ -58,13 +56,13 @@ public class VelocitySSTI {
String name = "ttemplate"; String name = "ttemplate";
String code = request.getParameter("code"); String code = request.getParameter("code");
RuntimeServices runtimeServices = new RuntimeServices(); RuntimeServices runtimeServices = null;
StringReader reader = new StringReader(code); StringReader reader = new StringReader(code);
runtimeServices.parse(reader, new Template()); runtimeServices.parse(reader, new Template()); // $hasTemplateInjection
} }
@GetMapping(value = "bad4") @GetMapping(value = "good1")
public void bad4(HttpServletRequest request) { public void good1(HttpServletRequest request) {
String name = "ttemplate"; String name = "ttemplate";
String code = request.getParameter("code"); String code = request.getParameter("code");
@@ -74,7 +72,7 @@ public class VelocitySSTI {
StringWriter w = new StringWriter(); StringWriter w = new StringWriter();
StringReader reader = new StringReader("test"); StringReader reader = new StringReader("test");
Velocity.evaluate(context, w, "mystring", reader); Velocity.evaluate(context, w, "mystring", reader); // Safe
} }
@GetMapping(value = "bad5") @GetMapping(value = "bad5")
@@ -86,41 +84,37 @@ public class VelocitySSTI {
context.put("code", code); context.put("code", code);
StringWriter w = new StringWriter(); StringWriter w = new StringWriter();
VelocityEngine.mergeTemplate("testtemplate.vm", "UTF-8", context, w); VelocityEngine engine = null;
engine.mergeTemplate("testtemplate.vm", "UTF-8", context, w); // Safe
AbstractContext ctx = null;
ctx.put("key", code);
engine.evaluate(ctx, null, null, (String) null); // Safe
engine.evaluate(ctx, null, null, (Reader) null); // Safe
engine.evaluate(null, null, null, code); // $hasTemplateInjection
engine.evaluate(null, null, null, new StringReader(code)); // $hasTemplateInjection
}
@GetMapping(value = "good2")
public void good2(HttpServletRequest request) {
String name = "ttemplate";
String code = request.getParameter("code");
VelocityContext context = new VelocityContext();
context.put("code", code);
StringWriter w = new StringWriter();
Template t = new Template();
t.merge(context, w); // Safe
t.merge(context, w, new LinkedList<String>()); // Safe
} }
@GetMapping(value = "bad6") @GetMapping(value = "bad6")
public void bad6(HttpServletRequest request) { public void bad6(HttpServletRequest request) {
String name = "ttemplate";
String code = request.getParameter("code");
VelocityContext context = new VelocityContext();
context.put("code", code);
StringWriter w = new StringWriter();
Template t = new Template();
t.merge(context, w);
}
@GetMapping(value = "bad7")
public void bad7(HttpServletRequest request) {
String name = "ttemplate";
String code = request.getParameter("code");
VelocityContext context = new VelocityContext();
context.put("code", code);
StringWriter w = new StringWriter();
Template t = new Template();
t.merge(context, w, new LinkedList<String>());
}
@GetMapping(value = "bad8")
public void bad8(HttpServletRequest request) {
String code = request.getParameter("code"); String code = request.getParameter("code");
StringResourceRepository repo = new StringResourceRepositoryImpl(); StringResourceRepository repo = new StringResourceRepositoryImpl();
repo.putStringResource("woogie2", code); repo.putStringResource("woogie2", code); // $hasTemplateInjection
} }
} }

View File

@@ -1 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../stubs/apache-commons-logging-1.2:${testdir}/../../../stubs/mvel2-2.4.7:${testdir}/../../../stubs/groovy-all-3.0.7:${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/scriptengine:${testdir}/../../../stubs/jsr223-api //semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../stubs/apache-commons-logging-1.2:${testdir}/../../../stubs/mvel2-2.4.7:${testdir}/../../../stubs/groovy-all-3.0.7:${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/scriptengine:${testdir}/../../../stubs/jsr223-api:${testdir}/../../../stubs/apache-freemarker-2.3.31:${testdir}/../../../stubs/jinjava-2.6.0:${testdir}/../../../stubs/pebble-3.1.5:${testdir}/../../../stubs/thymeleaf-3.0.14:${testdir}/../../../stubs/apache-velocity-2.3

View File

@@ -0,0 +1,12 @@
// Generated automatically from freemarker.cache.CacheStorage for testing purposes
package freemarker.cache;
public interface CacheStorage
{
Object get(Object p0);
void clear();
void put(Object p0, Object p1);
void remove(Object p0);
}

View File

@@ -0,0 +1,19 @@
// Generated automatically from freemarker.cache.StringTemplateLoader for testing purposes
package freemarker.cache;
import freemarker.cache.TemplateLoader;
import java.io.Reader;
public class StringTemplateLoader implements TemplateLoader
{
public Object findTemplateSource(String p0){ return null; }
public Reader getReader(Object p0, String p1){ return null; }
public String toString(){ return null; }
public StringTemplateLoader(){}
public boolean removeTemplate(String p0){ return false; }
public long getLastModified(Object p0){ return 0; }
public void closeTemplateSource(Object p0){}
public void putTemplate(String p0, String p1){}
public void putTemplate(String p0, String p1, long p2){}
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from freemarker.cache.TemplateConfigurationFactory for testing purposes
package freemarker.cache;
import freemarker.core.TemplateConfiguration;
import freemarker.template.Configuration;
abstract public class TemplateConfigurationFactory
{
protected abstract void setConfigurationOfChildren(Configuration p0);
public Configuration getConfiguration(){ return null; }
public TemplateConfigurationFactory(){}
public abstract TemplateConfiguration get(String p0, Object p1);
public final void setConfiguration(Configuration p0){}
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.cache.TemplateLoader for testing purposes
package freemarker.cache;
import java.io.Reader;
public interface TemplateLoader
{
Object findTemplateSource(String p0);
Reader getReader(Object p0, String p1);
long getLastModified(Object p0);
void closeTemplateSource(Object p0);
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from freemarker.cache.TemplateLookupContext for testing purposes
package freemarker.cache;
import freemarker.cache.TemplateLookupResult;
import java.util.Locale;
abstract public class TemplateLookupContext
{
protected TemplateLookupContext() {}
public Locale getTemplateLocale(){ return null; }
public Object getCustomLookupCondition(){ return null; }
public String getTemplateName(){ return null; }
public TemplateLookupResult createNegativeLookupResult(){ return null; }
public abstract TemplateLookupResult lookupWithAcquisitionStrategy(String p0);
public abstract TemplateLookupResult lookupWithLocalizedThenAcquisitionStrategy(String p0, Locale p1);
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.cache.TemplateLookupResult for testing purposes
package freemarker.cache;
abstract public class TemplateLookupResult
{
protected TemplateLookupResult() {}
public abstract String getTemplateSourceName();
public abstract boolean isPositive();
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.cache.TemplateLookupStrategy for testing purposes
package freemarker.cache;
import freemarker.cache.TemplateLookupContext;
import freemarker.cache.TemplateLookupResult;
abstract public class TemplateLookupStrategy
{
public TemplateLookupStrategy(){}
public abstract TemplateLookupResult lookup(TemplateLookupContext p0);
public static TemplateLookupStrategy DEFAULT_2_3_0 = null;
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.cache.TemplateNameFormat for testing purposes
package freemarker.cache;
abstract public class TemplateNameFormat
{
protected TemplateNameFormat() {}
public static TemplateNameFormat DEFAULT_2_3_0 = null;
public static TemplateNameFormat DEFAULT_2_4_0 = null;
}

View File

@@ -0,0 +1,46 @@
// Generated automatically from freemarker.core.ArithmeticEngine for testing purposes
package freemarker.core;
abstract public class ArithmeticEngine
{
protected int maxScale = 0;
protected int minScale = 0;
protected int roundingPolicy = 0;
public ArithmeticEngine(){}
public abstract Number add(Number p0, Number p1);
public abstract Number divide(Number p0, Number p1);
public abstract Number modulus(Number p0, Number p1);
public abstract Number multiply(Number p0, Number p1);
public abstract Number subtract(Number p0, Number p1);
public abstract Number toNumber(String p0);
public abstract int compareNumbers(Number p0, Number p1);
public static ArithmeticEngine.BigDecimalEngine BIGDECIMAL_ENGINE = null;
public static ArithmeticEngine.ConservativeEngine CONSERVATIVE_ENGINE = null;
public void setMaxScale(int p0){}
public void setMinScale(int p0){}
public void setRoundingPolicy(int p0){}
static public class BigDecimalEngine extends ArithmeticEngine
{
public BigDecimalEngine(){}
public Number add(Number p0, Number p1){ return null; }
public Number divide(Number p0, Number p1){ return null; }
public Number modulus(Number p0, Number p1){ return null; }
public Number multiply(Number p0, Number p1){ return null; }
public Number subtract(Number p0, Number p1){ return null; }
public Number toNumber(String p0){ return null; }
public int compareNumbers(Number p0, Number p1){ return 0; }
}
static public class ConservativeEngine extends ArithmeticEngine
{
public ConservativeEngine(){}
public Number add(Number p0, Number p1){ return null; }
public Number divide(Number p0, Number p1){ return null; }
public Number modulus(Number p0, Number p1){ return null; }
public Number multiply(Number p0, Number p1){ return null; }
public Number subtract(Number p0, Number p1){ return null; }
public Number toNumber(String p0){ return null; }
public int compareNumbers(Number p0, Number p1){ return 0; }
}
}

View File

@@ -0,0 +1,238 @@
// Generated automatically from freemarker.core.Configurable for testing purposes
package freemarker.core;
import freemarker.core.ArithmeticEngine;
import freemarker.core.Environment;
import freemarker.core.TemplateClassResolver;
import freemarker.core.TemplateDateFormatFactory;
import freemarker.core.TemplateNumberFormatFactory;
import freemarker.core.TruncateBuiltinAlgorithm;
import freemarker.template.AttemptExceptionReporter;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.Version;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TimeZone;
public class Configurable
{
protected ArrayList parseAsList(String p0){ return null; }
protected ArrayList parseAsSegmentedList(String p0){ return null; }
protected Configurable(Version p0){}
protected Environment getEnvironment(){ return null; }
protected HashMap parseAsImportList(String p0){ return null; }
protected Object clone(){ return null; }
protected String getCorrectedNameForUnknownSetting(String p0){ return null; }
protected TemplateException invalidSettingValueException(String p0, String p1){ return null; }
protected TemplateException settingValueAssignmentException(String p0, String p1, Throwable p2){ return null; }
protected TemplateException unknownSettingException(String p0){ return null; }
protected void doAutoImportsAndIncludes(Environment p0){}
public ArithmeticEngine getArithmeticEngine(){ return null; }
public AttemptExceptionReporter getAttemptExceptionReporter(){ return null; }
public Boolean getLazyAutoImports(){ return null; }
public Configurable(){}
public Configurable(Configurable p0){}
public List<String> getAutoIncludes(){ return null; }
public List<String> getAutoIncludesWithoutFallback(){ return null; }
public Locale getLocale(){ return null; }
public Map getSettings(){ return null; }
public Map<String, ? extends TemplateDateFormatFactory> getCustomDateFormats(){ return null; }
public Map<String, ? extends TemplateDateFormatFactory> getCustomDateFormatsWithoutFallback(){ return null; }
public Map<String, ? extends TemplateNumberFormatFactory> getCustomNumberFormats(){ return null; }
public Map<String, ? extends TemplateNumberFormatFactory> getCustomNumberFormatsWithoutFallback(){ return null; }
public Map<String, String> getAutoImports(){ return null; }
public Map<String, String> getAutoImportsWithoutFallback(){ return null; }
public Object getCustomAttribute(String p0){ return null; }
public ObjectWrapper getObjectWrapper(){ return null; }
public Set<String> getSettingNames(boolean p0){ return null; }
public String getBooleanFormat(){ return null; }
public String getDateFormat(){ return null; }
public String getDateTimeFormat(){ return null; }
public String getNumberFormat(){ return null; }
public String getOutputEncoding(){ return null; }
public String getSetting(String p0){ return null; }
public String getTimeFormat(){ return null; }
public String getURLEscapingCharset(){ return null; }
public String[] getCustomAttributeNames(){ return null; }
public TemplateClassResolver getNewBuiltinClassResolver(){ return null; }
public TemplateDateFormatFactory getCustomDateFormat(String p0){ return null; }
public TemplateExceptionHandler getTemplateExceptionHandler(){ return null; }
public TemplateNumberFormatFactory getCustomNumberFormat(String p0){ return null; }
public TimeZone getSQLDateAndTimeTimeZone(){ return null; }
public TimeZone getTimeZone(){ return null; }
public TruncateBuiltinAlgorithm getTruncateBuiltinAlgorithm(){ return null; }
public boolean getAutoFlush(){ return false; }
public boolean getLazyImports(){ return false; }
public boolean getLogTemplateExceptions(){ return false; }
public boolean getShowErrorTips(){ return false; }
public boolean getWrapUncheckedExceptions(){ return false; }
public boolean hasCustomFormats(){ return false; }
public boolean isAPIBuiltinEnabled(){ return false; }
public boolean isAPIBuiltinEnabledSet(){ return false; }
public boolean isArithmeticEngineSet(){ return false; }
public boolean isAttemptExceptionReporterSet(){ return false; }
public boolean isAutoFlushSet(){ return false; }
public boolean isAutoImportsSet(){ return false; }
public boolean isAutoIncludesSet(){ return false; }
public boolean isBooleanFormatSet(){ return false; }
public boolean isClassicCompatible(){ return false; }
public boolean isClassicCompatibleSet(){ return false; }
public boolean isCustomDateFormatsSet(){ return false; }
public boolean isCustomNumberFormatsSet(){ return false; }
public boolean isDateFormatSet(){ return false; }
public boolean isDateTimeFormatSet(){ return false; }
public boolean isLazyAutoImportsSet(){ return false; }
public boolean isLazyImportsSet(){ return false; }
public boolean isLocaleSet(){ return false; }
public boolean isLogTemplateExceptionsSet(){ return false; }
public boolean isNewBuiltinClassResolverSet(){ return false; }
public boolean isNumberFormatSet(){ return false; }
public boolean isObjectWrapperSet(){ return false; }
public boolean isOutputEncodingSet(){ return false; }
public boolean isSQLDateAndTimeTimeZoneSet(){ return false; }
public boolean isShowErrorTipsSet(){ return false; }
public boolean isTemplateExceptionHandlerSet(){ return false; }
public boolean isTimeFormatSet(){ return false; }
public boolean isTimeZoneSet(){ return false; }
public boolean isTruncateBuiltinAlgorithmSet(){ return false; }
public boolean isURLEscapingCharsetSet(){ return false; }
public boolean isWrapUncheckedExceptionsSet(){ return false; }
public final Configurable getParent(){ return null; }
public int getClassicCompatibleAsInt(){ return 0; }
public static String API_BUILTIN_ENABLED_KEY = null;
public static String API_BUILTIN_ENABLED_KEY_CAMEL_CASE = null;
public static String API_BUILTIN_ENABLED_KEY_SNAKE_CASE = null;
public static String ARITHMETIC_ENGINE_KEY = null;
public static String ARITHMETIC_ENGINE_KEY_CAMEL_CASE = null;
public static String ARITHMETIC_ENGINE_KEY_SNAKE_CASE = null;
public static String ATTEMPT_EXCEPTION_REPORTER_KEY = null;
public static String ATTEMPT_EXCEPTION_REPORTER_KEY_CAMEL_CASE = null;
public static String ATTEMPT_EXCEPTION_REPORTER_KEY_SNAKE_CASE = null;
public static String AUTO_FLUSH_KEY = null;
public static String AUTO_FLUSH_KEY_CAMEL_CASE = null;
public static String AUTO_FLUSH_KEY_SNAKE_CASE = null;
public static String AUTO_IMPORT_KEY = null;
public static String AUTO_IMPORT_KEY_CAMEL_CASE = null;
public static String AUTO_IMPORT_KEY_SNAKE_CASE = null;
public static String AUTO_INCLUDE_KEY = null;
public static String AUTO_INCLUDE_KEY_CAMEL_CASE = null;
public static String AUTO_INCLUDE_KEY_SNAKE_CASE = null;
public static String BOOLEAN_FORMAT_KEY = null;
public static String BOOLEAN_FORMAT_KEY_CAMEL_CASE = null;
public static String BOOLEAN_FORMAT_KEY_SNAKE_CASE = null;
public static String CLASSIC_COMPATIBLE_KEY = null;
public static String CLASSIC_COMPATIBLE_KEY_CAMEL_CASE = null;
public static String CLASSIC_COMPATIBLE_KEY_SNAKE_CASE = null;
public static String CUSTOM_DATE_FORMATS_KEY = null;
public static String CUSTOM_DATE_FORMATS_KEY_CAMEL_CASE = null;
public static String CUSTOM_DATE_FORMATS_KEY_SNAKE_CASE = null;
public static String CUSTOM_NUMBER_FORMATS_KEY = null;
public static String CUSTOM_NUMBER_FORMATS_KEY_CAMEL_CASE = null;
public static String CUSTOM_NUMBER_FORMATS_KEY_SNAKE_CASE = null;
public static String DATETIME_FORMAT_KEY = null;
public static String DATETIME_FORMAT_KEY_CAMEL_CASE = null;
public static String DATETIME_FORMAT_KEY_SNAKE_CASE = null;
public static String DATE_FORMAT_KEY = null;
public static String DATE_FORMAT_KEY_CAMEL_CASE = null;
public static String DATE_FORMAT_KEY_SNAKE_CASE = null;
public static String LAZY_AUTO_IMPORTS_KEY = null;
public static String LAZY_AUTO_IMPORTS_KEY_CAMEL_CASE = null;
public static String LAZY_AUTO_IMPORTS_KEY_SNAKE_CASE = null;
public static String LAZY_IMPORTS_KEY = null;
public static String LAZY_IMPORTS_KEY_CAMEL_CASE = null;
public static String LAZY_IMPORTS_KEY_SNAKE_CASE = null;
public static String LOCALE_KEY = null;
public static String LOCALE_KEY_CAMEL_CASE = null;
public static String LOCALE_KEY_SNAKE_CASE = null;
public static String LOG_TEMPLATE_EXCEPTIONS_KEY = null;
public static String LOG_TEMPLATE_EXCEPTIONS_KEY_CAMEL_CASE = null;
public static String LOG_TEMPLATE_EXCEPTIONS_KEY_SNAKE_CASE = null;
public static String NEW_BUILTIN_CLASS_RESOLVER_KEY = null;
public static String NEW_BUILTIN_CLASS_RESOLVER_KEY_CAMEL_CASE = null;
public static String NEW_BUILTIN_CLASS_RESOLVER_KEY_SNAKE_CASE = null;
public static String NUMBER_FORMAT_KEY = null;
public static String NUMBER_FORMAT_KEY_CAMEL_CASE = null;
public static String NUMBER_FORMAT_KEY_SNAKE_CASE = null;
public static String OBJECT_WRAPPER_KEY = null;
public static String OBJECT_WRAPPER_KEY_CAMEL_CASE = null;
public static String OBJECT_WRAPPER_KEY_SNAKE_CASE = null;
public static String OUTPUT_ENCODING_KEY = null;
public static String OUTPUT_ENCODING_KEY_CAMEL_CASE = null;
public static String OUTPUT_ENCODING_KEY_SNAKE_CASE = null;
public static String SHOW_ERROR_TIPS_KEY = null;
public static String SHOW_ERROR_TIPS_KEY_CAMEL_CASE = null;
public static String SHOW_ERROR_TIPS_KEY_SNAKE_CASE = null;
public static String SQL_DATE_AND_TIME_TIME_ZONE_KEY = null;
public static String SQL_DATE_AND_TIME_TIME_ZONE_KEY_CAMEL_CASE = null;
public static String SQL_DATE_AND_TIME_TIME_ZONE_KEY_SNAKE_CASE = null;
public static String STRICT_BEAN_MODELS = null;
public static String STRICT_BEAN_MODELS_KEY = null;
public static String STRICT_BEAN_MODELS_KEY_CAMEL_CASE = null;
public static String STRICT_BEAN_MODELS_KEY_SNAKE_CASE = null;
public static String TEMPLATE_EXCEPTION_HANDLER_KEY = null;
public static String TEMPLATE_EXCEPTION_HANDLER_KEY_CAMEL_CASE = null;
public static String TEMPLATE_EXCEPTION_HANDLER_KEY_SNAKE_CASE = null;
public static String TIME_FORMAT_KEY = null;
public static String TIME_FORMAT_KEY_CAMEL_CASE = null;
public static String TIME_FORMAT_KEY_SNAKE_CASE = null;
public static String TIME_ZONE_KEY = null;
public static String TIME_ZONE_KEY_CAMEL_CASE = null;
public static String TIME_ZONE_KEY_SNAKE_CASE = null;
public static String TRUNCATE_BUILTIN_ALGORITHM_KEY = null;
public static String TRUNCATE_BUILTIN_ALGORITHM_KEY_CAMEL_CASE = null;
public static String TRUNCATE_BUILTIN_ALGORITHM_KEY_SNAKE_CASE = null;
public static String URL_ESCAPING_CHARSET_KEY = null;
public static String URL_ESCAPING_CHARSET_KEY_CAMEL_CASE = null;
public static String URL_ESCAPING_CHARSET_KEY_SNAKE_CASE = null;
public static String WRAP_UNCHECKED_EXCEPTIONS_KEY = null;
public static String WRAP_UNCHECKED_EXCEPTIONS_KEY_CAMEL_CASE = null;
public static String WRAP_UNCHECKED_EXCEPTIONS_KEY_SNAKE_CASE = null;
public void addAutoImport(String p0, String p1){}
public void addAutoInclude(String p0){}
public void removeAutoImport(String p0){}
public void removeAutoInclude(String p0){}
public void removeCustomAttribute(String p0){}
public void setAPIBuiltinEnabled(boolean p0){}
public void setArithmeticEngine(ArithmeticEngine p0){}
public void setAttemptExceptionReporter(AttemptExceptionReporter p0){}
public void setAutoFlush(boolean p0){}
public void setAutoImports(Map p0){}
public void setAutoIncludes(List p0){}
public void setBooleanFormat(String p0){}
public void setClassicCompatible(boolean p0){}
public void setClassicCompatibleAsInt(int p0){}
public void setCustomAttribute(String p0, Object p1){}
public void setCustomDateFormats(Map<String, ? extends TemplateDateFormatFactory> p0){}
public void setCustomNumberFormats(Map<String, ? extends TemplateNumberFormatFactory> p0){}
public void setDateFormat(String p0){}
public void setDateTimeFormat(String p0){}
public void setLazyAutoImports(Boolean p0){}
public void setLazyImports(boolean p0){}
public void setLocale(Locale p0){}
public void setLogTemplateExceptions(boolean p0){}
public void setNewBuiltinClassResolver(TemplateClassResolver p0){}
public void setNumberFormat(String p0){}
public void setObjectWrapper(ObjectWrapper p0){}
public void setOutputEncoding(String p0){}
public void setSQLDateAndTimeTimeZone(TimeZone p0){}
public void setSetting(String p0, String p1){}
public void setSettings(InputStream p0){}
public void setSettings(Properties p0){}
public void setShowErrorTips(boolean p0){}
public void setStrictBeanModels(boolean p0){}
public void setTemplateExceptionHandler(TemplateExceptionHandler p0){}
public void setTimeFormat(String p0){}
public void setTimeZone(TimeZone p0){}
public void setTruncateBuiltinAlgorithm(TruncateBuiltinAlgorithm p0){}
public void setURLEscapingCharset(String p0){}
public void setWrapUncheckedExceptions(boolean p0){}
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from freemarker.core.DirectiveCallPlace for testing purposes
package freemarker.core;
import freemarker.template.Template;
import freemarker.template.utility.ObjectFactory;
public interface DirectiveCallPlace
{
Object getOrCreateCustomData(Object p0, ObjectFactory p1);
Template getTemplate();
boolean isNestedOutputCacheable();
int getBeginColumn();
int getBeginLine();
int getEndColumn();
int getEndLine();
}

View File

@@ -0,0 +1,106 @@
// Generated automatically from freemarker.core.Environment for testing purposes
package freemarker.core;
import freemarker.core.Configurable;
import freemarker.core.DirectiveCallPlace;
import freemarker.core.TemplateDateFormat;
import freemarker.core.TemplateElement;
import freemarker.core.TemplateNumberFormat;
import freemarker.template.Configuration;
import freemarker.template.SimpleHash;
import freemarker.template.Template;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.TemplateHashModel;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateNodeModel;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.NumberFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
public class Environment extends Configurable
{
protected Environment() {}
public Configuration getConfiguration(){ return null; }
public DirectiveCallPlace getCurrentDirectiveCallPlace(){ return null; }
public Environment(Template p0, TemplateHashModel p1, Writer p2){}
public Environment.Namespace getCurrentNamespace(){ return null; }
public Environment.Namespace getGlobalNamespace(){ return null; }
public Environment.Namespace getMainNamespace(){ return null; }
public Environment.Namespace getNamespace(String p0){ return null; }
public Environment.Namespace importLib(String p0, String p1){ return null; }
public Environment.Namespace importLib(String p0, String p1, boolean p2){ return null; }
public Environment.Namespace importLib(Template p0, String p1){ return null; }
public NumberFormat getCNumberFormat(){ return null; }
public Object __getitem__(String p0){ return null; }
public Object getCustomState(Object p0){ return null; }
public Object setCustomState(Object p0, Object p1){ return null; }
public Set getKnownVariableNames(){ return null; }
public String getDefaultNS(){ return null; }
public String getNamespaceForPrefix(String p0){ return null; }
public String getPrefixForNamespace(String p0){ return null; }
public String rootBasedToAbsoluteTemplateName(String p0){ return null; }
public String toFullTemplateName(String p0, String p1){ return null; }
public Template getCurrentTemplate(){ return null; }
public Template getMainTemplate(){ return null; }
public Template getTemplate(){ return null; }
public Template getTemplateForImporting(String p0){ return null; }
public Template getTemplateForInclusion(String p0, String p1, boolean p2){ return null; }
public Template getTemplateForInclusion(String p0, String p1, boolean p2, boolean p3){ return null; }
public TemplateDateFormat getTemplateDateFormat(String p0, int p1, Class<? extends Date> p2){ return null; }
public TemplateDateFormat getTemplateDateFormat(String p0, int p1, Class<? extends Date> p2, Locale p3){ return null; }
public TemplateDateFormat getTemplateDateFormat(String p0, int p1, Class<? extends Date> p2, Locale p3, TimeZone p4, TimeZone p5){ return null; }
public TemplateDateFormat getTemplateDateFormat(String p0, int p1, Locale p2, TimeZone p3, boolean p4){ return null; }
public TemplateDateFormat getTemplateDateFormat(int p0, Class<? extends Date> p1){ return null; }
public TemplateHashModel getDataModel(){ return null; }
public TemplateHashModel getGlobalVariables(){ return null; }
public TemplateModel getDataModelOrSharedVariable(String p0){ return null; }
public TemplateModel getGlobalVariable(String p0){ return null; }
public TemplateModel getLocalVariable(String p0){ return null; }
public TemplateModel getVariable(String p0){ return null; }
public TemplateNodeModel getCurrentVisitorNode(){ return null; }
public TemplateNumberFormat getTemplateNumberFormat(){ return null; }
public TemplateNumberFormat getTemplateNumberFormat(String p0){ return null; }
public TemplateNumberFormat getTemplateNumberFormat(String p0, Locale p1){ return null; }
public Writer getOut(){ return null; }
public boolean applyEqualsOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyEqualsOperatorLenient(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyGreaterThanOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyLessThanOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyLessThanOrEqualsOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyWithGreaterThanOrEqualsOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean isInAttemptBlock(){ return false; }
public class Namespace extends SimpleHash
{
public Template getTemplate(){ return null; }
}
public static Environment getCurrentEnvironment(){ return null; }
public void __setitem__(String p0, Object p1){}
public void include(String p0, String p1, boolean p2){}
public void include(Template p0){}
public void outputInstructionStack(PrintWriter p0){}
public void process(){}
public void setCurrentVisitorNode(TemplateNodeModel p0){}
public void setDateFormat(String p0){}
public void setDateTimeFormat(String p0){}
public void setGlobalVariable(String p0, TemplateModel p1){}
public void setLocalVariable(String p0, TemplateModel p1){}
public void setLocale(Locale p0){}
public void setNumberFormat(String p0){}
public void setOut(Writer p0){}
public void setOutputEncoding(String p0){}
public void setSQLDateAndTimeTimeZone(TimeZone p0){}
public void setTemplateExceptionHandler(TemplateExceptionHandler p0){}
public void setTimeFormat(String p0){}
public void setTimeZone(TimeZone p0){}
public void setURLEscapingCharset(String p0){}
public void setVariable(String p0, TemplateModel p1){}
public void visit(TemplateElement p0, TemplateDirectiveModel p1, Map p2, List p3){}
}

View File

@@ -0,0 +1,21 @@
// Generated automatically from freemarker.core.Expression for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.core.TemplateObject;
import freemarker.template.TemplateModel;
abstract public class Expression extends TemplateObject {
protected abstract Expression deepCloneWithIdentifierReplaced_inner(String p0, Expression p1,
Expression.ReplacemenetState p2);
public Expression() {}
public final TemplateModel getAsTemplateModel(Environment p0) {
return null;
}
class ReplacemenetState {
}
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from freemarker.core.LibraryLoad for testing purposes
package freemarker.core;
import freemarker.core.TemplateElement;
public class LibraryLoad extends TemplateElement
{
protected LibraryLoad() {}
protected String dump(boolean p0){ return null; }
public String getTemplateName(){ return null; }
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from freemarker.core.LocalContext for testing purposes
package freemarker.core;
import freemarker.template.TemplateModel;
import java.util.Collection;
public interface LocalContext
{
Collection getLocalVariableNames();
TemplateModel getLocalVariable(String p0);
}

View File

@@ -0,0 +1,49 @@
// Generated automatically from freemarker.core.Macro for testing purposes
package freemarker.core;
import freemarker.core.LocalContext;
import freemarker.core.TemplateElement;
import freemarker.template.TemplateHashModelEx;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateSequenceModel;
import java.util.Collection;
public class Macro extends TemplateElement implements TemplateModel {
protected Macro() {}
protected String dump(boolean p0) {
return null;
}
public Macro.WithArgs getWithArgs() {
return null;
}
public Object getNamespaceLookupKey() {
return null;
}
public String getCatchAll() {
return null;
}
public String getName() {
return null;
}
public String[] getArgumentNames() {
return null;
}
public boolean hasArgNamed(String p0) {
return false;
}
public boolean isFunction() {
return false;
}
class WithArgs {
}
}

View File

@@ -0,0 +1,14 @@
// Generated automatically from freemarker.core.OutputFormat for testing purposes
package freemarker.core;
abstract public class OutputFormat
{
protected String toStringExtraProperties(){ return null; }
public OutputFormat(){}
public abstract String getMimeType();
public abstract String getName();
public abstract boolean isOutputFormatMixingAllowed();
public final String toString(){ return null; }
}

View File

@@ -0,0 +1,22 @@
// Generated automatically from freemarker.core.ParserConfiguration for testing purposes
package freemarker.core;
import freemarker.core.ArithmeticEngine;
import freemarker.core.OutputFormat;
import freemarker.template.Version;
public interface ParserConfiguration
{
ArithmeticEngine getArithmeticEngine();
OutputFormat getOutputFormat();
Version getIncompatibleImprovements();
boolean getRecognizeStandardFileExtensions();
boolean getStrictSyntaxMode();
boolean getWhitespaceStripping();
int getAutoEscapingPolicy();
int getInterpolationSyntax();
int getNamingConvention();
int getTabSize();
int getTagSyntax();
}

View File

@@ -0,0 +1,14 @@
// Generated automatically from freemarker.core.TemplateClassResolver for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.template.Template;
public interface TemplateClassResolver
{
Class resolve(String p0, Environment p1, Template p2);
static TemplateClassResolver ALLOWS_NOTHING_RESOLVER = null;
static TemplateClassResolver SAFER_RESOLVER = null;
static TemplateClassResolver UNRESTRICTED_RESOLVER = null;
}

View File

@@ -0,0 +1,51 @@
// Generated automatically from freemarker.core.TemplateConfiguration for testing purposes
package freemarker.core;
import freemarker.core.Configurable;
import freemarker.core.OutputFormat;
import freemarker.core.ParserConfiguration;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
public class TemplateConfiguration extends Configurable implements ParserConfiguration
{
public Configuration getParentConfiguration(){ return null; }
public OutputFormat getOutputFormat(){ return null; }
public String getEncoding(){ return null; }
public TemplateConfiguration(){}
public Version getIncompatibleImprovements(){ return null; }
public boolean getRecognizeStandardFileExtensions(){ return false; }
public boolean getStrictSyntaxMode(){ return false; }
public boolean getWhitespaceStripping(){ return false; }
public boolean isAutoEscapingPolicySet(){ return false; }
public boolean isEncodingSet(){ return false; }
public boolean isInterpolationSyntaxSet(){ return false; }
public boolean isNamingConventionSet(){ return false; }
public boolean isOutputFormatSet(){ return false; }
public boolean isRecognizeStandardFileExtensionsSet(){ return false; }
public boolean isStrictSyntaxModeSet(){ return false; }
public boolean isTabSizeSet(){ return false; }
public boolean isTagSyntaxSet(){ return false; }
public boolean isWhitespaceStrippingSet(){ return false; }
public int getAutoEscapingPolicy(){ return 0; }
public int getInterpolationSyntax(){ return 0; }
public int getNamingConvention(){ return 0; }
public int getTabSize(){ return 0; }
public int getTagSyntax(){ return 0; }
public void apply(Template p0){}
public void merge(TemplateConfiguration p0){}
public void setAutoEscapingPolicy(int p0){}
public void setEncoding(String p0){}
public void setInterpolationSyntax(int p0){}
public void setNamingConvention(int p0){}
public void setOutputFormat(OutputFormat p0){}
public void setParentConfiguration(Configuration p0){}
public void setRecognizeStandardFileExtensions(boolean p0){}
public void setStrictBeanModels(boolean p0){}
public void setStrictSyntaxMode(boolean p0){}
public void setTabSize(int p0){}
public void setTagSyntax(int p0){}
public void setWhitespaceStripping(boolean p0){}
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from freemarker.core.TemplateDateFormat for testing purposes
package freemarker.core;
import freemarker.core.TemplateValueFormat;
import freemarker.template.TemplateDateModel;
abstract public class TemplateDateFormat extends TemplateValueFormat
{
public Object format(TemplateDateModel p0){ return null; }
public TemplateDateFormat(){}
public abstract Object parse(String p0, int p1);
public abstract String formatToPlainText(TemplateDateModel p0);
public abstract boolean isLocaleBound();
public abstract boolean isTimeZoneBound();
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from freemarker.core.TemplateDateFormatFactory for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.core.TemplateDateFormat;
import freemarker.core.TemplateValueFormatFactory;
import java.util.Locale;
import java.util.TimeZone;
abstract public class TemplateDateFormatFactory extends TemplateValueFormatFactory
{
public TemplateDateFormatFactory(){}
public abstract TemplateDateFormat get(String p0, int p1, Locale p2, TimeZone p3, boolean p4, Environment p5);
}

View File

@@ -0,0 +1,30 @@
// Generated automatically from freemarker.core.TemplateElement for testing purposes
package freemarker.core;
import freemarker.core.TemplateObject;
import freemarker.template.TemplateNodeModel;
import freemarker.template.TemplateSequenceModel;
import java.util.Enumeration;
import javax.swing.tree.TreeNode;
abstract public class TemplateElement extends TemplateObject implements TreeNode
{
protected abstract String dump(boolean p0);
public Enumeration children(){ return null; }
public String getNodeName(){ return null; }
public String getNodeNamespace(){ return null; }
public String getNodeType(){ return null; }
public TemplateElement(){}
public TemplateNodeModel getParentNode(){ return null; }
public TemplateSequenceModel getChildNodes(){ return null; }
public TreeNode getChildAt(int p0){ return null; }
public TreeNode getParent(){ return null; }
public boolean getAllowsChildren(){ return false; }
public boolean isLeaf(){ return false; }
public final String getCanonicalForm(){ return null; }
public final String getDescription(){ return null; }
public int getChildCount(){ return 0; }
public int getIndex(TreeNode p0){ return 0; }
public void setChildAt(int p0, TemplateElement p1){}
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from freemarker.core.TemplateNumberFormat for testing purposes
package freemarker.core;
import freemarker.core.TemplateValueFormat;
import freemarker.template.TemplateNumberModel;
abstract public class TemplateNumberFormat extends TemplateValueFormat
{
public Object format(TemplateNumberModel p0){ return null; }
public TemplateNumberFormat(){}
public abstract String formatToPlainText(TemplateNumberModel p0);
public abstract boolean isLocaleBound();
public final Object parse(String p0){ return null; }
}

View File

@@ -0,0 +1,14 @@
// Generated automatically from freemarker.core.TemplateNumberFormatFactory for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.core.TemplateNumberFormat;
import freemarker.core.TemplateValueFormatFactory;
import java.util.Locale;
abstract public class TemplateNumberFormatFactory extends TemplateValueFormatFactory
{
public TemplateNumberFormatFactory(){}
public abstract TemplateNumberFormat get(String p0, Locale p1, Environment p2);
}

View File

@@ -0,0 +1,23 @@
// Generated automatically from freemarker.core.TemplateObject for testing purposes
package freemarker.core;
import freemarker.template.Template;
abstract public class TemplateObject
{
public String getEndLocation(){ return null; }
public String getEndLocationQuoted(){ return null; }
public String getStartLocation(){ return null; }
public String getStartLocationQuoted(){ return null; }
public String toString(){ return null; }
public Template getTemplate(){ return null; }
public TemplateObject(){}
public abstract String getCanonicalForm();
public boolean contains(int p0, int p1){ return false; }
public final String getSource(){ return null; }
public final int getBeginColumn(){ return 0; }
public final int getBeginLine(){ return 0; }
public final int getEndColumn(){ return 0; }
public final int getEndLine(){ return 0; }
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from freemarker.core.TemplateValueFormat for testing purposes
package freemarker.core;
abstract public class TemplateValueFormat
{
public TemplateValueFormat(){}
public abstract String getDescription();
}

View File

@@ -0,0 +1,9 @@
// Generated automatically from freemarker.core.TemplateValueFormatFactory for testing purposes
package freemarker.core;
abstract public class TemplateValueFormatFactory
{
public TemplateValueFormatFactory(){}
}

View File

@@ -0,0 +1,18 @@
// Generated automatically from freemarker.core.TruncateBuiltinAlgorithm for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateScalarModel;
abstract public class TruncateBuiltinAlgorithm
{
public TruncateBuiltinAlgorithm(){}
public abstract TemplateModel truncateCM(String p0, int p1, TemplateModel p2, Integer p3, Environment p4);
public abstract TemplateModel truncateM(String p0, int p1, TemplateModel p2, Integer p3, Environment p4);
public abstract TemplateModel truncateWM(String p0, int p1, TemplateModel p2, Integer p3, Environment p4);
public abstract TemplateScalarModel truncate(String p0, int p1, TemplateScalarModel p2, Integer p3, Environment p4);
public abstract TemplateScalarModel truncateC(String p0, int p1, TemplateScalarModel p2, Integer p3, Environment p4);
public abstract TemplateScalarModel truncateW(String p0, int p1, TemplateScalarModel p2, Integer p3, Environment p4);
}

View File

@@ -0,0 +1,24 @@
// Generated automatically from freemarker.core._ErrorDescriptionBuilder for testing purposes
package freemarker.core;
import freemarker.core.Expression;
import freemarker.core.TemplateElement;
import freemarker.template.Template;
public class _ErrorDescriptionBuilder
{
protected _ErrorDescriptionBuilder() {}
public String toString(){ return null; }
public String toString(TemplateElement p0, boolean p1){ return null; }
public _ErrorDescriptionBuilder blame(Expression p0){ return null; }
public _ErrorDescriptionBuilder showBlamer(boolean p0){ return null; }
public _ErrorDescriptionBuilder template(Template p0){ return null; }
public _ErrorDescriptionBuilder tip(Object... p0){ return null; }
public _ErrorDescriptionBuilder tip(String p0){ return null; }
public _ErrorDescriptionBuilder tips(Object... p0){ return null; }
public _ErrorDescriptionBuilder(Object... p0){}
public _ErrorDescriptionBuilder(String p0){}
public static String toString(Object p0){ return null; }
public static String tryToString(Object p0){ return null; }
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.template.AttemptExceptionReporter for testing purposes
package freemarker.template;
import freemarker.core.Environment;
import freemarker.template.TemplateException;
public interface AttemptExceptionReporter
{
static AttemptExceptionReporter LOG_ERROR_REPORTER = null;
static AttemptExceptionReporter LOG_WARN_REPORTER = null;
void report(TemplateException p0, Environment p1);
}

View File

@@ -0,0 +1,253 @@
// Generated automatically from freemarker.template.Configuration for testing purposes
package freemarker.template;
import freemarker.cache.CacheStorage;
import freemarker.cache.TemplateConfigurationFactory;
import freemarker.cache.TemplateLoader;
import freemarker.cache.TemplateLookupStrategy;
import freemarker.cache.TemplateNameFormat;
import freemarker.core.Configurable;
import freemarker.core.Environment;
import freemarker.core.OutputFormat;
import freemarker.core.ParserConfiguration;
import freemarker.template.AttemptExceptionReporter;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.TemplateHashModelEx;
import freemarker.template.TemplateModel;
import freemarker.template.Version;
import java.io.File;
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
public class Configuration extends Configurable implements Cloneable, ParserConfiguration
{
protected String getCorrectedNameForUnknownSetting(String p0){ return null; }
protected void doAutoImportsAndIncludes(Environment p0){}
public CacheStorage getCacheStorage(){ return null; }
public Collection<? extends OutputFormat> getRegisteredCustomOutputFormats(){ return null; }
public Configuration(){}
public Configuration(Version p0){}
public Object clone(){ return null; }
public OutputFormat getOutputFormat(){ return null; }
public OutputFormat getOutputFormat(String p0){ return null; }
public Set getSharedVariableNames(){ return null; }
public Set getSupportedBuiltInDirectiveNames(){ return null; }
public Set getSupportedBuiltInNames(){ return null; }
public Set<String> getSettingNames(boolean p0){ return null; }
public Set<String> getSupportedBuiltInDirectiveNames(int p0){ return null; }
public Set<String> getSupportedBuiltInNames(int p0){ return null; }
public String getDefaultEncoding(){ return null; }
public String getEncoding(Locale p0){ return null; }
public String getIncompatibleEnhancements(){ return null; }
public Template getTemplate(String p0){ return null; }
public Template getTemplate(String p0, Locale p1){ return null; }
public Template getTemplate(String p0, Locale p1, Object p2, String p3, boolean p4, boolean p5){ return null; }
public Template getTemplate(String p0, Locale p1, String p2){ return null; }
public Template getTemplate(String p0, Locale p1, String p2, boolean p3){ return null; }
public Template getTemplate(String p0, Locale p1, String p2, boolean p3, boolean p4){ return null; }
public Template getTemplate(String p0, String p1){ return null; }
public TemplateConfigurationFactory getTemplateConfigurations(){ return null; }
public TemplateLoader getTemplateLoader(){ return null; }
public TemplateLookupStrategy getTemplateLookupStrategy(){ return null; }
public TemplateModel getSharedVariable(String p0){ return null; }
public TemplateNameFormat getTemplateNameFormat(){ return null; }
public Version getIncompatibleImprovements(){ return null; }
public boolean getFallbackOnNullLoopVariable(){ return false; }
public boolean getLocalizedLookup(){ return false; }
public boolean getRecognizeStandardFileExtensions(){ return false; }
public boolean getStrictSyntaxMode(){ return false; }
public boolean getWhitespaceStripping(){ return false; }
public boolean isAttemptExceptionReporterExplicitlySet(){ return false; }
public boolean isCacheStorageExplicitlySet(){ return false; }
public boolean isDefaultEncodingExplicitlySet(){ return false; }
public boolean isLocaleExplicitlySet(){ return false; }
public boolean isLogTemplateExceptionsExplicitlySet(){ return false; }
public boolean isObjectWrapperExplicitlySet(){ return false; }
public boolean isOutputFormatExplicitlySet(){ return false; }
public boolean isRecognizeStandardFileExtensionsExplicitlySet(){ return false; }
public boolean isTemplateExceptionHandlerExplicitlySet(){ return false; }
public boolean isTemplateLoaderExplicitlySet(){ return false; }
public boolean isTemplateLookupStrategyExplicitlySet(){ return false; }
public boolean isTemplateNameFormatExplicitlySet(){ return false; }
public boolean isTimeZoneExplicitlySet(){ return false; }
public boolean isWrapUncheckedExceptionsExplicitlySet(){ return false; }
public int getAutoEscapingPolicy(){ return 0; }
public int getInterpolationSyntax(){ return 0; }
public int getNamingConvention(){ return 0; }
public int getParsedIncompatibleEnhancements(){ return 0; }
public int getTabSize(){ return 0; }
public int getTagSyntax(){ return 0; }
public long getTemplateUpdateDelayMilliseconds(){ return 0; }
public static Configuration getDefaultConfiguration(){ return null; }
public static ObjectWrapper getDefaultObjectWrapper(Version p0){ return null; }
public static String AUTO_ESCAPING_POLICY_KEY = null;
public static String AUTO_ESCAPING_POLICY_KEY_CAMEL_CASE = null;
public static String AUTO_ESCAPING_POLICY_KEY_SNAKE_CASE = null;
public static String AUTO_IMPORT_KEY = null;
public static String AUTO_IMPORT_KEY_CAMEL_CASE = null;
public static String AUTO_IMPORT_KEY_SNAKE_CASE = null;
public static String AUTO_INCLUDE_KEY = null;
public static String AUTO_INCLUDE_KEY_CAMEL_CASE = null;
public static String AUTO_INCLUDE_KEY_SNAKE_CASE = null;
public static String CACHE_STORAGE_KEY = null;
public static String CACHE_STORAGE_KEY_CAMEL_CASE = null;
public static String CACHE_STORAGE_KEY_SNAKE_CASE = null;
public static String DEFAULT_ENCODING_KEY = null;
public static String DEFAULT_ENCODING_KEY_CAMEL_CASE = null;
public static String DEFAULT_ENCODING_KEY_SNAKE_CASE = null;
public static String DEFAULT_INCOMPATIBLE_ENHANCEMENTS = null;
public static String FALLBACK_ON_NULL_LOOP_VARIABLE_KEY = null;
public static String FALLBACK_ON_NULL_LOOP_VARIABLE_KEY_CAMEL_CASE = null;
public static String FALLBACK_ON_NULL_LOOP_VARIABLE_KEY_SNAKE_CASE = null;
public static String INCOMPATIBLE_ENHANCEMENTS = null;
public static String INCOMPATIBLE_IMPROVEMENTS = null;
public static String INCOMPATIBLE_IMPROVEMENTS_KEY = null;
public static String INCOMPATIBLE_IMPROVEMENTS_KEY_CAMEL_CASE = null;
public static String INCOMPATIBLE_IMPROVEMENTS_KEY_SNAKE_CASE = null;
public static String INTERPOLATION_SYNTAX_KEY = null;
public static String INTERPOLATION_SYNTAX_KEY_CAMEL_CASE = null;
public static String INTERPOLATION_SYNTAX_KEY_SNAKE_CASE = null;
public static String LOCALIZED_LOOKUP_KEY = null;
public static String LOCALIZED_LOOKUP_KEY_CAMEL_CASE = null;
public static String LOCALIZED_LOOKUP_KEY_SNAKE_CASE = null;
public static String NAMING_CONVENTION_KEY = null;
public static String NAMING_CONVENTION_KEY_CAMEL_CASE = null;
public static String NAMING_CONVENTION_KEY_SNAKE_CASE = null;
public static String OUTPUT_FORMAT_KEY = null;
public static String OUTPUT_FORMAT_KEY_CAMEL_CASE = null;
public static String OUTPUT_FORMAT_KEY_SNAKE_CASE = null;
public static String RECOGNIZE_STANDARD_FILE_EXTENSIONS_KEY = null;
public static String RECOGNIZE_STANDARD_FILE_EXTENSIONS_KEY_CAMEL_CASE = null;
public static String RECOGNIZE_STANDARD_FILE_EXTENSIONS_KEY_SNAKE_CASE = null;
public static String REGISTERED_CUSTOM_OUTPUT_FORMATS_KEY = null;
public static String REGISTERED_CUSTOM_OUTPUT_FORMATS_KEY_CAMEL_CASE = null;
public static String REGISTERED_CUSTOM_OUTPUT_FORMATS_KEY_SNAKE_CASE = null;
public static String STRICT_SYNTAX_KEY = null;
public static String STRICT_SYNTAX_KEY_CAMEL_CASE = null;
public static String STRICT_SYNTAX_KEY_SNAKE_CASE = null;
public static String TAB_SIZE_KEY = null;
public static String TAB_SIZE_KEY_CAMEL_CASE = null;
public static String TAB_SIZE_KEY_SNAKE_CASE = null;
public static String TAG_SYNTAX_KEY = null;
public static String TAG_SYNTAX_KEY_CAMEL_CASE = null;
public static String TAG_SYNTAX_KEY_SNAKE_CASE = null;
public static String TEMPLATE_CONFIGURATIONS_KEY = null;
public static String TEMPLATE_CONFIGURATIONS_KEY_CAMEL_CASE = null;
public static String TEMPLATE_CONFIGURATIONS_KEY_SNAKE_CASE = null;
public static String TEMPLATE_LOADER_KEY = null;
public static String TEMPLATE_LOADER_KEY_CAMEL_CASE = null;
public static String TEMPLATE_LOADER_KEY_SNAKE_CASE = null;
public static String TEMPLATE_LOOKUP_STRATEGY_KEY = null;
public static String TEMPLATE_LOOKUP_STRATEGY_KEY_CAMEL_CASE = null;
public static String TEMPLATE_LOOKUP_STRATEGY_KEY_SNAKE_CASE = null;
public static String TEMPLATE_NAME_FORMAT_KEY = null;
public static String TEMPLATE_NAME_FORMAT_KEY_CAMEL_CASE = null;
public static String TEMPLATE_NAME_FORMAT_KEY_SNAKE_CASE = null;
public static String TEMPLATE_UPDATE_DELAY_KEY = null;
public static String TEMPLATE_UPDATE_DELAY_KEY_CAMEL_CASE = null;
public static String TEMPLATE_UPDATE_DELAY_KEY_SNAKE_CASE = null;
public static String WHITESPACE_STRIPPING_KEY = null;
public static String WHITESPACE_STRIPPING_KEY_CAMEL_CASE = null;
public static String WHITESPACE_STRIPPING_KEY_SNAKE_CASE = null;
public static String getVersionNumber(){ return null; }
public static Version DEFAULT_INCOMPATIBLE_IMPROVEMENTS = null;
public static Version VERSION_2_3_0 = null;
public static Version VERSION_2_3_19 = null;
public static Version VERSION_2_3_20 = null;
public static Version VERSION_2_3_21 = null;
public static Version VERSION_2_3_22 = null;
public static Version VERSION_2_3_23 = null;
public static Version VERSION_2_3_24 = null;
public static Version VERSION_2_3_25 = null;
public static Version VERSION_2_3_26 = null;
public static Version VERSION_2_3_27 = null;
public static Version VERSION_2_3_28 = null;
public static Version VERSION_2_3_29 = null;
public static Version VERSION_2_3_30 = null;
public static Version VERSION_2_3_31 = null;
public static Version getVersion(){ return null; }
public static int ANGLE_BRACKET_TAG_SYNTAX = 0;
public static int AUTO_DETECT_NAMING_CONVENTION = 0;
public static int AUTO_DETECT_TAG_SYNTAX = 0;
public static int CAMEL_CASE_NAMING_CONVENTION = 0;
public static int DISABLE_AUTO_ESCAPING_POLICY = 0;
public static int DOLLAR_INTERPOLATION_SYNTAX = 0;
public static int ENABLE_IF_DEFAULT_AUTO_ESCAPING_POLICY = 0;
public static int ENABLE_IF_SUPPORTED_AUTO_ESCAPING_POLICY = 0;
public static int LEGACY_INTERPOLATION_SYNTAX = 0;
public static int LEGACY_NAMING_CONVENTION = 0;
public static int PARSED_DEFAULT_INCOMPATIBLE_ENHANCEMENTS = 0;
public static int SQUARE_BRACKET_INTERPOLATION_SYNTAX = 0;
public static int SQUARE_BRACKET_TAG_SYNTAX = 0;
public static void setDefaultConfiguration(Configuration p0){}
public void clearEncodingMap(){}
public void clearSharedVariables(){}
public void clearTemplateCache(){}
public void loadBuiltInEncodingMap(){}
public void removeTemplateFromCache(String p0){}
public void removeTemplateFromCache(String p0, Locale p1){}
public void removeTemplateFromCache(String p0, Locale p1, Object p2, String p3, boolean p4){}
public void removeTemplateFromCache(String p0, Locale p1, String p2){}
public void removeTemplateFromCache(String p0, Locale p1, String p2, boolean p3){}
public void removeTemplateFromCache(String p0, String p1){}
public void setAllSharedVariables(TemplateHashModelEx p0){}
public void setAttemptExceptionReporter(AttemptExceptionReporter p0){}
public void setAutoEscapingPolicy(int p0){}
public void setCacheStorage(CacheStorage p0){}
public void setClassForTemplateLoading(Class p0, String p1){}
public void setClassLoaderForTemplateLoading(ClassLoader p0, String p1){}
public void setDefaultEncoding(String p0){}
public void setDirectoryForTemplateLoading(File p0){}
public void setEncoding(Locale p0, String p1){}
public void setFallbackOnNullLoopVariable(boolean p0){}
public void setIncompatibleEnhancements(String p0){}
public void setIncompatibleImprovements(Version p0){}
public void setInterpolationSyntax(int p0){}
public void setLocale(Locale p0){}
public void setLocalizedLookup(boolean p0){}
public void setLogTemplateExceptions(boolean p0){}
public void setNamingConvention(int p0){}
public void setObjectWrapper(ObjectWrapper p0){}
public void setOutputFormat(OutputFormat p0){}
public void setRecognizeStandardFileExtensions(boolean p0){}
public void setRegisteredCustomOutputFormats(Collection<? extends OutputFormat> p0){}
public void setServletContextForTemplateLoading(Object p0, String p1){}
public void setSetting(String p0, String p1){}
public void setSharedVariable(String p0, Object p1){}
public void setSharedVariable(String p0, TemplateModel p1){}
public void setSharedVariables(Map<String, ? extends Object> p0){}
public void setSharedVaribles(Map p0){}
public void setStrictSyntaxMode(boolean p0){}
public void setTabSize(int p0){}
public void setTagSyntax(int p0){}
public void setTemplateConfigurations(TemplateConfigurationFactory p0){}
public void setTemplateExceptionHandler(TemplateExceptionHandler p0){}
public void setTemplateLoader(TemplateLoader p0){}
public void setTemplateLookupStrategy(TemplateLookupStrategy p0){}
public void setTemplateNameFormat(TemplateNameFormat p0){}
public void setTemplateUpdateDelay(int p0){}
public void setTemplateUpdateDelayMilliseconds(long p0){}
public void setTimeZone(TimeZone p0){}
public void setWhitespaceStripping(boolean p0){}
public void setWrapUncheckedExceptions(boolean p0){}
public void unsetAttemptExceptionReporter(){}
public void unsetCacheStorage(){}
public void unsetDefaultEncoding(){}
public void unsetLocale(){}
public void unsetLogTemplateExceptions(){}
public void unsetObjectWrapper(){}
public void unsetOutputFormat(){}
public void unsetRecognizeStandardFileExtensions(){}
public void unsetTemplateExceptionHandler(){}
public void unsetTemplateLoader(){}
public void unsetTemplateLookupStrategy(){}
public void unsetTemplateNameFormat(){}
public void unsetTimeZone(){}
public void unsetWrapUncheckedExceptions(){}
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.template.ObjectWrapper for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface ObjectWrapper
{
TemplateModel wrap(Object p0);
static ObjectWrapper BEANS_WRAPPER = null;
static ObjectWrapper DEFAULT_WRAPPER = null;
static ObjectWrapper SIMPLE_WRAPPER = null;
}

View File

@@ -0,0 +1,35 @@
// Generated automatically from freemarker.template.SimpleHash for testing purposes
package freemarker.template;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateCollectionModel;
import freemarker.template.TemplateHashModelEx2;
import freemarker.template.TemplateModel;
import freemarker.template.WrappingTemplateModel;
import java.io.Serializable;
import java.util.Map;
public class SimpleHash extends WrappingTemplateModel implements Serializable, TemplateHashModelEx2
{
protected Map copyMap(Map p0){ return null; }
public Map toMap(){ return null; }
public SimpleHash synchronizedWrapper(){ return null; }
public SimpleHash(){}
public SimpleHash(Map p0){}
public SimpleHash(Map p0, ObjectWrapper p1){}
public SimpleHash(Map<String, Object> p0, ObjectWrapper p1, int p2){}
public SimpleHash(ObjectWrapper p0){}
public String toString(){ return null; }
public TemplateCollectionModel keys(){ return null; }
public TemplateCollectionModel values(){ return null; }
public TemplateHashModelEx2.KeyValuePairIterator keyValuePairIterator(){ return null; }
public TemplateModel get(String p0){ return null; }
public boolean containsKey(String p0){ return false; }
public boolean isEmpty(){ return false; }
public int size(){ return 0; }
public void put(String p0, Object p1){}
public void put(String p0, boolean p1){}
public void putAll(Map p0){}
public void remove(String p0){}
}

View File

@@ -0,0 +1,69 @@
// Generated automatically from freemarker.template.Template for testing purposes
package freemarker.template;
import freemarker.core.Configurable;
import freemarker.core.Environment;
import freemarker.core.LibraryLoad;
import freemarker.core.Macro;
import freemarker.core.OutputFormat;
import freemarker.core.ParserConfiguration;
import freemarker.core.TemplateElement;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateNodeModel;
import java.io.PrintStream;
import java.io.Reader;
import java.io.Writer;
import java.util.List;
import java.util.Map;
import javax.swing.tree.TreePath;
public class Template extends Configurable
{
protected Template() {}
public Configuration getConfiguration(){ return null; }
public Environment createProcessingEnvironment(Object p0, Writer p1){ return null; }
public Environment createProcessingEnvironment(Object p0, Writer p1, ObjectWrapper p2){ return null; }
public List getImports(){ return null; }
public Map getMacros(){ return null; }
public Object getCustomLookupCondition(){ return null; }
public OutputFormat getOutputFormat(){ return null; }
public ParserConfiguration getParserConfiguration(){ return null; }
public String getDefaultNS(){ return null; }
public String getEncoding(){ return null; }
public String getName(){ return null; }
public String getNamespaceForPrefix(String p0){ return null; }
public String getPrefixForNamespace(String p0){ return null; }
public String getPrefixedName(String p0, String p1){ return null; }
public String getSource(int p0, int p1, int p2, int p3){ return null; }
public String getSourceName(){ return null; }
public String toString(){ return null; }
public Template(String p0, Reader p1){}
public Template(String p0, Reader p1, Configuration p2){}
public Template(String p0, Reader p1, Configuration p2, String p3){}
public Template(String p0, String p1, Configuration p2){}
public Template(String p0, String p1, Reader p2, Configuration p3){}
public Template(String p0, String p1, Reader p2, Configuration p3, ParserConfiguration p4, String p5){}
public Template(String p0, String p1, Reader p2, Configuration p3, String p4){}
public TemplateElement getRootTreeNode(){ return null; }
public TreePath containingElements(int p0, int p1){ return null; }
public boolean getAutoEscaping(){ return false; }
public int getActualNamingConvention(){ return 0; }
public int getActualTagSyntax(){ return 0; }
public int getInterpolationSyntax(){ return 0; }
public static String DEFAULT_NAMESPACE_PREFIX = null;
public static String NO_NS_PREFIX = null;
public static Template getPlainTextTemplate(String p0, String p1, Configuration p2){ return null; }
public static Template getPlainTextTemplate(String p0, String p1, String p2, Configuration p3){ return null; }
public void addImport(LibraryLoad p0){}
public void addMacro(Macro p0){}
public void addPrefixNSMapping(String p0, String p1){}
public void dump(PrintStream p0){}
public void dump(Writer p0){}
public void process(Object p0, Writer p1){}
public void process(Object p0, Writer p1, ObjectWrapper p2){}
public void process(Object p0, Writer p1, ObjectWrapper p2, TemplateNodeModel p3){}
public void setCustomLookupCondition(Object p0){}
public void setEncoding(String p0){}
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateCollectionModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelIterator;
public interface TemplateCollectionModel extends TemplateModel
{
TemplateModelIterator iterator();
}

View File

@@ -0,0 +1,18 @@
// Generated automatically from freemarker.template.TemplateDateModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
import java.util.Date;
import java.util.List;
public interface TemplateDateModel extends TemplateModel
{
Date getAsDate();
int getDateType();
static List TYPE_NAMES = null;
static int DATE = 0;
static int DATETIME = 0;
static int TIME = 0;
static int UNKNOWN = 0;
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from freemarker.template.TemplateDirectiveBody for testing purposes
package freemarker.template;
import java.io.Writer;
public interface TemplateDirectiveBody
{
void render(Writer p0);
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.template.TemplateDirectiveModel for testing purposes
package freemarker.template;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateModel;
import java.util.Map;
public interface TemplateDirectiveModel extends TemplateModel
{
void execute(Environment p0, Map p1, TemplateModel[] p2, TemplateDirectiveBody p3);
}

View File

@@ -0,0 +1,39 @@
// Generated automatically from freemarker.template.TemplateException for testing purposes
package freemarker.template;
import freemarker.core.Environment;
import freemarker.core.Expression;
import freemarker.core._ErrorDescriptionBuilder;
import java.io.PrintStream;
import java.io.PrintWriter;
public class TemplateException extends Exception
{
protected TemplateException() {}
protected TemplateException(Throwable p0, Environment p1, Expression p2, _ErrorDescriptionBuilder p3){}
public Environment getEnvironment(){ return null; }
public Exception getCauseException(){ return null; }
public Integer getColumnNumber(){ return null; }
public Integer getEndColumnNumber(){ return null; }
public Integer getEndLineNumber(){ return null; }
public Integer getLineNumber(){ return null; }
public String getBlamedExpressionString(){ return null; }
public String getFTLInstructionStack(){ return null; }
public String getMessage(){ return null; }
public String getMessageWithoutStackTop(){ return null; }
public String getTemplateName(){ return null; }
public String getTemplateSourceName(){ return null; }
public TemplateException(Environment p0){}
public TemplateException(Exception p0, Environment p1){}
public TemplateException(String p0, Environment p1){}
public TemplateException(String p0, Exception p1, Environment p2){}
public TemplateException(String p0, Throwable p1, Environment p2){}
public TemplateException(Throwable p0, Environment p1){}
public void printStackTrace(PrintStream p0){}
public void printStackTrace(PrintStream p0, boolean p1, boolean p2, boolean p3){}
public void printStackTrace(PrintWriter p0){}
public void printStackTrace(PrintWriter p0, boolean p1, boolean p2, boolean p3){}
public void printStandardStackTrace(PrintStream p0){}
public void printStandardStackTrace(PrintWriter p0){}
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from freemarker.template.TemplateExceptionHandler for testing purposes
package freemarker.template;
import freemarker.core.Environment;
import freemarker.template.TemplateException;
import java.io.Writer;
public interface TemplateExceptionHandler
{
static TemplateExceptionHandler DEBUG_HANDLER = null;
static TemplateExceptionHandler HTML_DEBUG_HANDLER = null;
static TemplateExceptionHandler IGNORE_HANDLER = null;
static TemplateExceptionHandler RETHROW_HANDLER = null;
void handleTemplateException(TemplateException p0, Environment p1, Writer p2);
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateHashModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateHashModel extends TemplateModel
{
TemplateModel get(String p0);
boolean isEmpty();
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.template.TemplateHashModelEx for testing purposes
package freemarker.template;
import freemarker.template.TemplateCollectionModel;
import freemarker.template.TemplateHashModel;
public interface TemplateHashModelEx extends TemplateHashModel
{
TemplateCollectionModel keys();
TemplateCollectionModel values();
int size();
}

View File

@@ -0,0 +1,21 @@
// Generated automatically from freemarker.template.TemplateHashModelEx2 for testing purposes
package freemarker.template;
import freemarker.template.TemplateHashModelEx;
import freemarker.template.TemplateModel;
public interface TemplateHashModelEx2 extends TemplateHashModelEx
{
TemplateHashModelEx2.KeyValuePairIterator keyValuePairIterator();
static public interface KeyValuePair
{
TemplateModel getKey();
TemplateModel getValue();
}
static public interface KeyValuePairIterator
{
TemplateHashModelEx2.KeyValuePair next();
boolean hasNext();
}
}

View File

@@ -0,0 +1,9 @@
// Generated automatically from freemarker.template.TemplateModel for testing purposes
package freemarker.template;
public interface TemplateModel
{
static TemplateModel NOTHING = null;
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateModelIterator for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateModelIterator
{
TemplateModel next();
boolean hasNext();
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from freemarker.template.TemplateNodeModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateSequenceModel;
public interface TemplateNodeModel extends TemplateModel
{
String getNodeName();
String getNodeNamespace();
String getNodeType();
TemplateNodeModel getParentNode();
TemplateSequenceModel getChildNodes();
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from freemarker.template.TemplateNumberModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateNumberModel extends TemplateModel
{
Number getAsNumber();
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateScalarModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateScalarModel extends TemplateModel
{
String getAsString();
static TemplateModel EMPTY_STRING = null;
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateSequenceModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateSequenceModel extends TemplateModel
{
TemplateModel get(int p0);
int size();
}

View File

@@ -0,0 +1,27 @@
// Generated automatically from freemarker.template.Version for testing purposes
package freemarker.template;
import java.io.Serializable;
import java.util.Date;
public class Version implements Serializable
{
protected Version() {}
public Boolean isGAECompliant(){ return null; }
public Date getBuildDate(){ return null; }
public String getExtraInfo(){ return null; }
public String toString(){ return null; }
public Version(String p0){}
public Version(String p0, Boolean p1, Date p2){}
public Version(int p0){}
public Version(int p0, int p1, int p2){}
public Version(int p0, int p1, int p2, String p3, Boolean p4, Date p5){}
public boolean equals(Object p0){ return false; }
public int getMajor(){ return 0; }
public int getMicro(){ return 0; }
public int getMinor(){ return 0; }
public int hashCode(){ return 0; }
public int intValue(){ return 0; }
public static int intValueFor(int p0, int p1, int p2){ return 0; }
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from freemarker.template.WrappingTemplateModel for testing purposes
package freemarker.template;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateModel;
abstract public class WrappingTemplateModel
{
protected WrappingTemplateModel(){}
protected WrappingTemplateModel(ObjectWrapper p0){}
protected final TemplateModel wrap(Object p0){ return null; }
public ObjectWrapper getObjectWrapper(){ return null; }
public static ObjectWrapper getDefaultObjectWrapper(){ return null; }
public static void setDefaultObjectWrapper(ObjectWrapper p0){}
public void setObjectWrapper(ObjectWrapper p0){}
}

View File

@@ -0,0 +1,9 @@
// Generated automatically from freemarker.template.utility.ObjectFactory for testing purposes
package freemarker.template.utility;
public interface ObjectFactory<T>
{
T createObject();
}

View File

@@ -0,0 +1,19 @@
// Generated automatically from org.apache.velocity.Template for testing purposes
package org.apache.velocity;
import java.io.Writer;
import java.util.List;
import java.util.Map;
import org.apache.velocity.context.Context;
import org.apache.velocity.runtime.resource.Resource;
public class Template extends Resource
{
public Map<String, Object> getMacros(){ return null; }
public Template(){}
public boolean process(){ return false; }
public void initDocument(){}
public void merge(Context p0, Writer p1){}
public void merge(Context p0, Writer p1, List<String> p2){}
}

View File

@@ -0,0 +1,22 @@
// Generated automatically from org.apache.velocity.VelocityContext for testing purposes
package org.apache.velocity;
import java.io.Serializable;
import java.util.Map;
import org.apache.velocity.context.AbstractContext;
import org.apache.velocity.context.Context;
public class VelocityContext extends AbstractContext implements Cloneable, Serializable
{
public Object clone(){ return null; }
public Object internalGet(String p0){ return null; }
public Object internalPut(String p0, Object p1){ return null; }
public Object internalRemove(String p0){ return null; }
public String[] internalGetKeys(){ return null; }
public VelocityContext(){}
public VelocityContext(Context p0){}
public VelocityContext(Map<String, Object> p0){}
public VelocityContext(Map<String, Object> p0, Context p1){}
public boolean internalContainsKey(String p0){ return false; }
}

View File

@@ -0,0 +1,36 @@
// Generated automatically from org.apache.velocity.app.Velocity for testing purposes
package org.apache.velocity.app;
import java.io.Reader;
import java.io.Writer;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.runtime.RuntimeConstants;
import org.slf4j.Logger;
public class Velocity implements RuntimeConstants
{
public Velocity(){}
public static Logger getLog(){ return null; }
public static Object getProperty(String p0){ return null; }
public static Template getTemplate(String p0){ return null; }
public static Template getTemplate(String p0, String p1){ return null; }
public static boolean evaluate(Context p0, Writer p1, String p2, Reader p3){ return false; }
public static boolean evaluate(Context p0, Writer p1, String p2, String p3){ return false; }
public static boolean invokeVelocimacro(String p0, String p1, String[] p2, Context p3, Writer p4){ return false; }
public static boolean mergeTemplate(String p0, String p1, Context p2, Writer p3){ return false; }
public static boolean resourceExists(String p0){ return false; }
public static void addProperty(String p0, Object p1){}
public static void clearProperty(String p0){}
public static void init(){}
public static void init(Properties p0){}
public static void init(String p0){}
public static void reset(){}
public static void setApplicationAttribute(Object p0, Object p1){}
public static void setProperties(Properties p0){}
public static void setProperty(String p0, Object p1){}
public void loadDirective(String p0){}
public void removeDirective(String p0){}
}

View File

@@ -0,0 +1,40 @@
// Generated automatically from org.apache.velocity.app.VelocityEngine for testing purposes
package org.apache.velocity.app;
import java.io.Reader;
import java.io.Writer;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.runtime.RuntimeConstants;
import org.slf4j.Logger;
public class VelocityEngine implements RuntimeConstants
{
public Logger getLog(){ return null; }
public Object getApplicationAttribute(Object p0){ return null; }
public Object getProperty(String p0){ return null; }
public Template getTemplate(String p0){ return null; }
public Template getTemplate(String p0, String p1){ return null; }
public VelocityEngine(){}
public VelocityEngine(Properties p0){}
public VelocityEngine(String p0){}
public boolean evaluate(Context p0, Writer p1, String p2, Reader p3){ return false; }
public boolean evaluate(Context p0, Writer p1, String p2, String p3){ return false; }
public boolean invokeVelocimacro(String p0, String p1, String[] p2, Context p3, Writer p4){ return false; }
public boolean mergeTemplate(String p0, String p1, Context p2, Writer p3){ return false; }
public boolean resourceExists(String p0){ return false; }
public void addProperty(String p0, Object p1){}
public void clearProperty(String p0){}
public void init(){}
public void init(Properties p0){}
public void init(String p0){}
public void loadDirective(String p0){}
public void removeDirective(String p0){}
public void reset(){}
public void setApplicationAttribute(Object p0, Object p1){}
public void setProperties(Properties p0){}
public void setProperties(String p0){}
public void setProperty(String p0, Object p1){}
}

View File

@@ -0,0 +1,35 @@
// Generated automatically from org.apache.velocity.app.event.EventCartridge for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.app.event.IncludeEventHandler;
import org.apache.velocity.app.event.InvalidReferenceEventHandler;
import org.apache.velocity.app.event.MethodExceptionEventHandler;
import org.apache.velocity.app.event.ReferenceInsertionEventHandler;
import org.apache.velocity.context.Context;
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.runtime.RuntimeServices;
import org.apache.velocity.util.introspection.Info;
import org.slf4j.Logger;
public class EventCartridge
{
protected Logger getLog(){ return null; }
protected RuntimeServices rsvc = null;
public EventCartridge(){}
public Object invalidGetMethod(Context p0, String p1, Object p2, String p3, Info p4){ return null; }
public Object invalidMethod(Context p0, String p1, Object p2, String p3, Info p4){ return null; }
public Object methodException(Context p0, Class<? extends Object> p1, String p2, Exception p3, Info p4){ return null; }
public Object referenceInsert(InternalContextAdapter p0, String p1, Object p2){ return null; }
public String includeEvent(Context p0, String p1, String p2, String p3){ return null; }
public boolean addEventHandler(EventHandler p0){ return false; }
public boolean invalidSetMethod(Context p0, String p1, String p2, Info p3){ return false; }
public boolean removeEventHandler(EventHandler p0){ return false; }
public final boolean attachToContext(Context p0){ return false; }
public void addIncludeEventHandler(IncludeEventHandler p0){}
public void addInvalidReferenceEventHandler(InvalidReferenceEventHandler p0){}
public void addMethodExceptionHandler(MethodExceptionEventHandler p0){}
public void addReferenceInsertionEventHandler(ReferenceInsertionEventHandler p0){}
public void setRuntimeServices(RuntimeServices p0){}
}

View File

@@ -0,0 +1,8 @@
// Generated automatically from org.apache.velocity.app.event.EventHandler for testing purposes
package org.apache.velocity.app.event;
public interface EventHandler
{
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from org.apache.velocity.app.event.IncludeEventHandler for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.context.Context;
public interface IncludeEventHandler extends EventHandler
{
String includeEvent(Context p0, String p1, String p2, String p3);
}

View File

@@ -0,0 +1,14 @@
// Generated automatically from org.apache.velocity.app.event.InvalidReferenceEventHandler for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.context.Context;
import org.apache.velocity.util.introspection.Info;
public interface InvalidReferenceEventHandler extends EventHandler
{
Object invalidGetMethod(Context p0, String p1, Object p2, String p3, Info p4);
Object invalidMethod(Context p0, String p1, Object p2, String p3, Info p4);
boolean invalidSetMethod(Context p0, String p1, String p2, Info p3);
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from org.apache.velocity.app.event.MethodExceptionEventHandler for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.context.Context;
import org.apache.velocity.util.introspection.Info;
public interface MethodExceptionEventHandler extends EventHandler
{
Object methodException(Context p0, Class<? extends Object> p1, String p2, Exception p3, Info p4);
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from org.apache.velocity.app.event.ReferenceInsertionEventHandler for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.context.Context;
public interface ReferenceInsertionEventHandler extends EventHandler
{
Object referenceInsert(Context p0, String p1, Object p2);
}

View File

@@ -0,0 +1,23 @@
// Generated automatically from org.apache.velocity.context.AbstractContext for testing purposes
package org.apache.velocity.context;
import org.apache.velocity.context.Context;
import org.apache.velocity.context.InternalContextBase;
abstract public class AbstractContext extends InternalContextBase implements Context
{
public AbstractContext(){}
public AbstractContext(Context p0){}
public Context getChainedContext(){ return null; }
public Object get(String p0){ return null; }
public Object put(String p0, Object p1){ return null; }
public Object remove(String p0){ return null; }
public String[] getKeys(){ return null; }
public abstract Object internalGet(String p0);
public abstract Object internalPut(String p0, Object p1);
public abstract Object internalRemove(String p0);
public abstract String[] internalGetKeys();
public abstract boolean internalContainsKey(String p0);
public boolean containsKey(String p0){ return false; }
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from org.apache.velocity.context.Context for testing purposes
package org.apache.velocity.context;
public interface Context
{
Object get(String p0);
Object put(String p0, Object p1);
Object remove(String p0);
String[] getKeys();
boolean containsKey(String p0);
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from org.apache.velocity.context.InternalContextAdapter for testing purposes
package org.apache.velocity.context;
import org.apache.velocity.context.Context;
import org.apache.velocity.context.InternalEventContext;
import org.apache.velocity.context.InternalHousekeepingContext;
import org.apache.velocity.context.InternalWrapperContext;
public interface InternalContextAdapter extends Context, InternalEventContext, InternalHousekeepingContext, InternalWrapperContext
{
}

View File

@@ -0,0 +1,32 @@
// Generated automatically from org.apache.velocity.context.InternalContextBase for testing purposes
package org.apache.velocity.context;
import java.util.List;
import org.apache.velocity.Template;
import org.apache.velocity.app.event.EventCartridge;
import org.apache.velocity.context.InternalEventContext;
import org.apache.velocity.context.InternalHousekeepingContext;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.util.introspection.IntrospectionCacheData;
class InternalContextBase implements InternalEventContext, InternalHousekeepingContext
{
public EventCartridge attachEventCartridge(EventCartridge p0){ return null; }
public EventCartridge getEventCartridge(){ return null; }
public IntrospectionCacheData icacheGet(Object p0){ return null; }
public List<Template> getMacroLibraries(){ return null; }
public Resource getCurrentResource(){ return null; }
public String getCurrentMacroName(){ return null; }
public String getCurrentTemplateName(){ return null; }
public String[] getMacroNameStack(){ return null; }
public String[] getTemplateNameStack(){ return null; }
public int getCurrentMacroCallDepth(){ return 0; }
public void icachePut(Object p0, IntrospectionCacheData p1){}
public void popCurrentMacroName(){}
public void popCurrentTemplateName(){}
public void pushCurrentMacroName(String p0){}
public void pushCurrentTemplateName(String p0){}
public void setCurrentResource(Resource p0){}
public void setMacroLibraries(List<Template> p0){}
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from org.apache.velocity.context.InternalEventContext for testing purposes
package org.apache.velocity.context;
import org.apache.velocity.app.event.EventCartridge;
public interface InternalEventContext
{
EventCartridge attachEventCartridge(EventCartridge p0);
EventCartridge getEventCartridge();
}

View File

@@ -0,0 +1,27 @@
// Generated automatically from org.apache.velocity.context.InternalHousekeepingContext for testing purposes
package org.apache.velocity.context;
import java.util.List;
import org.apache.velocity.Template;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.util.introspection.IntrospectionCacheData;
interface InternalHousekeepingContext
{
IntrospectionCacheData icacheGet(Object p0);
List<Template> getMacroLibraries();
Resource getCurrentResource();
String getCurrentMacroName();
String getCurrentTemplateName();
String[] getMacroNameStack();
String[] getTemplateNameStack();
int getCurrentMacroCallDepth();
void icachePut(Object p0, IntrospectionCacheData p1);
void popCurrentMacroName();
void popCurrentTemplateName();
void pushCurrentMacroName(String p0);
void pushCurrentTemplateName(String p0);
void setCurrentResource(Resource p0);
void setMacroLibraries(List<Template> p0);
}

Some files were not shown because too many files have changed in this diff Show More