http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/cb4a93dc/freemarker-core/src/main/java/org/apache/freemarker/core/ASTNode.java ---------------------------------------------------------------------- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTNode.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTNode.java index 18e34c1..6a2ce15 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTNode.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTNode.java @@ -173,7 +173,7 @@ abstract class ASTNode { * source, assuming we turn off automatic white-space removal when parsing the canonical form. * * @see ASTElement#getDescription() - * @see #getNodeTypeSymbol() + * @see #getASTNodeDescriptor() */ abstract public String getCanonicalForm(); @@ -183,14 +183,11 @@ abstract class ASTNode { * be suitable as tree node labels in a tree view. Yet, they should be consistent and complete enough so that an AST * that is equivalent with the original could be reconstructed from the tree view. Thus, for literal values that are * leaf nodes the symbols should be the canonical form of value. - * - * Note that {@link ASTElement#getDescription()} has similar role, only it doesn't go under the element level - * (i.e. down to the expression level), instead it always prints the embedded expressions itself. - * + * * @see #getCanonicalForm() * @see ASTElement#getDescription() */ - abstract String getNodeTypeSymbol(); + abstract String getASTNodeDescriptor(); /** * Returns highest valid parameter index + 1. So one should scan indexes with {@link #getParameterValue(int)}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/cb4a93dc/freemarker-core/src/main/java/org/apache/freemarker/core/ASTStaticText.java ---------------------------------------------------------------------- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTStaticText.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTStaticText.java index 7766012..5e4b957 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTStaticText.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTStaticText.java @@ -81,7 +81,7 @@ final class ASTStaticText extends ASTElement { } @Override - String getNodeTypeSymbol() { + String getASTNodeDescriptor() { return "#text"; } http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/cb4a93dc/freemarker-core/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java ---------------------------------------------------------------------- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java deleted file mode 100644 index 764ec8a..0000000 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/ArithmeticExpression.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.freemarker.core; - -import org.apache.freemarker.core.arithmetic.ArithmeticEngine; -import org.apache.freemarker.core.model.TemplateModel; -import org.apache.freemarker.core.model.impl.SimpleNumber; - -/** - * An operator for arithmetic operations. Note that the + operator is in {@link ASTExpAddOrConcat}, because its - * overloaded (does string concatenation and more). - */ -final class ArithmeticExpression extends ASTExpression { - - static final int TYPE_SUBSTRACTION = 0; - static final int TYPE_MULTIPLICATION = 1; - static final int TYPE_DIVISION = 2; - static final int TYPE_MODULO = 3; - - private static final char[] OPERATOR_IMAGES = new char[] { '-', '*', '/', '%' }; - - private final ASTExpression lho; - private final ASTExpression rho; - private final int operator; - - ArithmeticExpression(ASTExpression lho, ASTExpression rho, int operator) { - this.lho = lho; - this.rho = rho; - this.operator = operator; - } - - @Override - TemplateModel _eval(Environment env) throws TemplateException { - return _eval(env, this, lho.evalToNumber(env), operator, rho.evalToNumber(env)); - } - - static TemplateModel _eval(Environment env, ASTNode parent, Number lhoNumber, int operator, Number rhoNumber) - throws TemplateException { - ArithmeticEngine ae = _EvalUtil.getArithmeticEngine(env, parent); - switch (operator) { - case TYPE_SUBSTRACTION : - return new SimpleNumber(ae.subtract(lhoNumber, rhoNumber)); - case TYPE_MULTIPLICATION : - return new SimpleNumber(ae.multiply(lhoNumber, rhoNumber)); - case TYPE_DIVISION : - return new SimpleNumber(ae.divide(lhoNumber, rhoNumber)); - case TYPE_MODULO : - return new SimpleNumber(ae.modulus(lhoNumber, rhoNumber)); - default: - if (parent instanceof ASTExpression) { - throw new _MiscTemplateException((ASTExpression) parent, - "Unknown operation: ", Integer.valueOf(operator)); - } else { - throw new _MiscTemplateException("Unknown operation: ", Integer.valueOf(operator)); - } - } - } - - @Override - public String getCanonicalForm() { - return lho.getCanonicalForm() + ' ' + getOperatorSymbol(operator) + ' ' + rho.getCanonicalForm(); - } - - @Override - String getNodeTypeSymbol() { - return String.valueOf(getOperatorSymbol(operator)); - } - - static char getOperatorSymbol(int operator) { - return OPERATOR_IMAGES[operator]; - } - - @Override - boolean isLiteral() { - return constantValue != null || (lho.isLiteral() && rho.isLiteral()); - } - - @Override - protected ASTExpression deepCloneWithIdentifierReplaced_inner( - String replacedIdentifier, ASTExpression replacement, ReplacemenetState replacementState) { - return new ArithmeticExpression( - lho.deepCloneWithIdentifierReplaced(replacedIdentifier, replacement, replacementState), - rho.deepCloneWithIdentifierReplaced(replacedIdentifier, replacement, replacementState), - operator); - } - - @Override - int getParameterCount() { - return 3; - } - - @Override - Object getParameterValue(int idx) { - switch (idx) { - case 0: return lho; - case 1: return rho; - case 2: return Integer.valueOf(operator); - default: throw new IndexOutOfBoundsException(); - } - } - - @Override - ParameterRole getParameterRole(int idx) { - switch (idx) { - case 0: return ParameterRole.LEFT_HAND_OPERAND; - case 1: return ParameterRole.RIGHT_HAND_OPERAND; - case 2: return ParameterRole.AST_NODE_SUBTYPE; - default: throw new IndexOutOfBoundsException(); - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/cb4a93dc/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInWithParseTimeParameters.java ---------------------------------------------------------------------- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInWithParseTimeParameters.java b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInWithParseTimeParameters.java index d2fa8be..47a37bd 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInWithParseTimeParameters.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInWithParseTimeParameters.java @@ -48,8 +48,8 @@ abstract class BuiltInWithParseTimeParameters extends SpecialBuiltIn { } @Override - String getNodeTypeSymbol() { - return super.getNodeTypeSymbol() + "(...)"; + String getASTNodeDescriptor() { + return super.getASTNodeDescriptor() + "(...)"; } @Override http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/cb4a93dc/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java ---------------------------------------------------------------------- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java index c5797c7..8edc322 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ParsingConfiguration.java @@ -237,8 +237,9 @@ public interface ParsingConfiguration { * messages (or the column number you get through other API-s). So for example if the users edit templates in an * editor where the tab width is set to 4, you should set this to 4 so that the column numbers printed by FreeMarker * will match the column number shown in the editor. This setting doesn't affect the output of templates, as a tab - * in the template will remain a tab in the output too. - * It's value is at least 1, at most 256. + * in the template will remain a tab in the output too. The value of this setting is at least 1, and at most 256. + * When it's 1, tab characters will be kept in the return value of {@link Template#getSource(int, int, int, int)}, + * otherwise they will be replaced with the appropriate number of spaces. */ int getTabSize(); http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/cb4a93dc/freemarker-core/src/main/java/org/apache/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java ---------------------------------------------------------------------- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java b/freemarker-core/src/main/java/org/apache/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java index d05ba08..05a786e 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java @@ -93,11 +93,11 @@ class ThreadInterruptionSupportTemplatePostProcessor extends TemplatePostProcess @Override protected String dump(boolean canonical) { - return canonical ? "" : "<#--" + getNodeTypeSymbol() + "--#>"; + return canonical ? "" : "<#--" + getASTNodeDescriptor() + "--#>"; } @Override - String getNodeTypeSymbol() { + String getASTNodeDescriptor() { return "##threadInterruptionCheck"; } http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/cb4a93dc/freemarker-core/src/main/java/org/apache/freemarker/core/_ErrorDescriptionBuilder.java ---------------------------------------------------------------------- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/_ErrorDescriptionBuilder.java b/freemarker-core/src/main/java/org/apache/freemarker/core/_ErrorDescriptionBuilder.java index 5dfa623..4723f58 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/_ErrorDescriptionBuilder.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/_ErrorDescriptionBuilder.java @@ -76,7 +76,7 @@ public class _ErrorDescriptionBuilder { Blaming blaming = findBlaming(parentElement, blamed, 0); if (blaming != null) { sb.append("For "); - String nss = blaming.blamer.getNodeTypeSymbol(); + String nss = blaming.blamer.getASTNodeDescriptor(); char q = nss.indexOf('"') == -1 ? '\"' : '`'; sb.append(q).append(nss).append(q); sb.append(" ").append(blaming.roleOfblamed).append(": "); http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/cb4a93dc/freemarker-core/src/main/javacc/FTL.jj ---------------------------------------------------------------------- diff --git a/freemarker-core/src/main/javacc/FTL.jj b/freemarker-core/src/main/javacc/FTL.jj index 552f236..7a39545 100644 --- a/freemarker-core/src/main/javacc/FTL.jj +++ b/freemarker-core/src/main/javacc/FTL.jj @@ -1544,7 +1544,7 @@ ASTExpression AdditiveExpression() : } else { numberLiteralOnly(lhs); numberLiteralOnly(rhs); - result = new ArithmeticExpression(lhs, rhs, ArithmeticExpression.TYPE_SUBSTRACTION); + result = new ASTExpArithmetic(lhs, rhs, ASTExpArithmetic.TYPE_SUBSTRACTION); } result.setLocation(template, lhs, rhs); lhs = result; @@ -1562,7 +1562,7 @@ ASTExpression AdditiveExpression() : ASTExpression MultiplicativeExpression() : { ASTExpression lhs, rhs, result; - int operation = ArithmeticExpression.TYPE_MULTIPLICATION; + int operation = ASTExpArithmetic.TYPE_MULTIPLICATION; } { lhs = UnaryExpression() { result = lhs; } @@ -1570,18 +1570,18 @@ ASTExpression MultiplicativeExpression() : LOOKAHEAD(<TIMES>|<DIVIDE>|<PERCENT>) ( ( - <TIMES> { operation = ArithmeticExpression.TYPE_MULTIPLICATION; } + <TIMES> { operation = ASTExpArithmetic.TYPE_MULTIPLICATION; } | - <DIVIDE> { operation = ArithmeticExpression.TYPE_DIVISION; } + <DIVIDE> { operation = ASTExpArithmetic.TYPE_DIVISION; } | - <PERCENT> {operation = ArithmeticExpression.TYPE_MODULO; } + <PERCENT> {operation = ASTExpArithmetic.TYPE_MODULO; } ) ) rhs = UnaryExpression() { numberLiteralOnly(lhs); numberLiteralOnly(rhs); - result = new ArithmeticExpression(lhs, rhs, operation); + result = new ASTExpArithmetic(lhs, rhs, operation); result.setLocation(template, lhs, rhs); lhs = result; }