Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2014 Attila Szegedi, Daniel Dekany, Jonathan Revusky
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   * http://www.apache.org/licenses/LICENSE-2.0
   * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package freemarker.core;
 
 
Utilities for creating error messages (and other messages).
 
 class MessageUtil {
 
             = "Can't convert the date-like value to string because it isn't "
               + "known if it's a date (no time part), time or date-time value.";
     
     static final String UNKNOWN_DATE_TYPE_ERROR_TIP = 
             "Use ?date, ?time, or ?datetime to tell FreeMarker the exact type.";
     
     static final String[] UNKNOWN_DATE_TO_STRING_TIPS = new String[] {
             ,
             "If you need a particular format only once, use ?string(pattern), like ?string('dd.MM.yyyy HH:mm:ss'), "
             + "to specify which fields to display. "
     };
 
     static final String EMBEDDED_MESSAGE_BEGIN = "---begin-message---\n";
 
     static final String EMBEDDED_MESSAGE_END = "\n---end-message---";
 
     // Can't be instantiated
     private MessageUtil() { }
         
     static String formatLocationForSimpleParsingError(Template templateint lineint column) {
         return formatLocation("in"templatelinecolumn);
     }
 
     static String formatLocationForSimpleParsingError(String templateSourceNameint lineint column) {
         return formatLocation("in"templateSourceNamelinecolumn);
     }
 
     static String formatLocationForDependentParsingError(Template templateint lineint column) {
         return formatLocation("on"templatelinecolumn);
     }
 
     static String formatLocationForDependentParsingError(String templateSourceNameint lineint column) {
         return formatLocation("on"templateSourceNamelinecolumn);
     }
 
     static String formatLocationForEvaluationError(Template templateint lineint column) {
         return formatLocation("at"templatelinecolumn);
     }
 
     static String formatLocationForEvaluationError(Macro macroint lineint column) {
         Template t = macro.getTemplate();
         return formatLocation("at"t != null ? t.getSourceName() : nullmacro.getName(), macro.isFunction(), linecolumn);
     }
     
     static String formatLocationForEvaluationError(String templateSourceNameint lineint column) {
         return formatLocation("at"templateSourceNamelinecolumn);
     }
 
     private static String formatLocation(String prepositionTemplate templateint lineint column) {
         return formatLocation(prepositiontemplate != null ? template.getSourceName() : nulllinecolumn);
     }
     
     private static String formatLocation(String prepositionString templateSourceNameint lineint column) {
         return formatLocation(
                 prepositiontemplateSourceName,
                 nullfalse,
                 linecolumn);
     }
 
     private static String formatLocation(
             String prepositionString templateSourceName,
             String macroOrFuncNameboolean isFunction,
             int lineint column) {
         String templateDesc;
         if (line < 0) {
             templateDesc = "?eval-ed string";
             macroOrFuncName = null;
        } else { 
            templateDesc = templateSourceName != null
                ? "template " + StringUtil.jQuoteNoXSS(templateSourceName)
                : "nameless template";
        }
        return "in " + templateDesc
              + (macroOrFuncName != null
                      ? " in " + (isFunction ? "function " : "macro ") + StringUtil.jQuote(macroOrFuncName)
                      : "")
              + " "
              + preposition + " " + formatPosition(linecolumn);
    }
    
    static String formatPosition(int lineint column) {
        return "line " + (line >= 0 ? line : line - (. - 1))
                + ", column " + column;
    }

    
Returns a single line string that is no longer than maxLength. If will truncate the string at line-breaks too. The truncation is always signaled with a a "..." at the end of the result string.
    static String shorten(String sint maxLength) {
        if (maxLength < 5) maxLength = 5;
        
        boolean isTruncated = false;
        
        int brIdx = s.indexOf('\n');
        if (brIdx != -1) {
            s = s.substring(0, brIdx);
            isTruncated = true;
        };
        brIdx = s.indexOf('\r');
        if (brIdx != -1) {
            s = s.substring(0, brIdx);
            isTruncated = true;
        }
        
        if (s.length() > maxLength) {
            s = s.substring(0, maxLength - 3);
            isTruncated = true;
        }
        
        if (!isTruncated) {
            return s;
        } else {
            if (s.endsWith(".")) {
                if (s.endsWith("..")) {
                    if (s.endsWith("...")) {
                        return s;
                    } else {
                        return s + ".";
                    }
                } else {
                    return s + "..";
                }
            } else {
                return s + "...";
            }
        }
    }
    
        boolean needParen =
                !(argExp instanceof NumberLiteral)
                && !(argExp instanceof StringLiteral)
                && !(argExp instanceof BooleanLiteral)
                && !(argExp instanceof ListLiteral)
                && !(argExp instanceof HashLiteral)
                && !(argExp instanceof Identifier)
                && !(argExp instanceof Dot)
                && !(argExp instanceof DynamicKeyName)
                && !(argExp instanceof MethodCall)
                && !(argExp instanceof BuiltIn);
        if (needParensb.append('(');
        sb.append(argExp.getCanonicalForm());
        if (needParensb.append(')');
        return sb;
    }
    static TemplateModelException newArgCntError(String methodNameint argCntint expectedCnt) {
        return newArgCntError(methodNameargCntexpectedCntexpectedCnt);
    }
    
    static TemplateModelException newArgCntError(String methodNameint argCntint minCntint maxCnt) {
        ArrayList/*<Object>*/ desc = new ArrayList(20);
        
        desc.add(methodName);
        
        desc.add("(");
        if (maxCnt != 0) desc.add("...");
        desc.add(") expects ");
        
        if (minCnt == maxCnt) {
            if (maxCnt == 0) {
                desc.add("no");
            } else {
                desc.add(new Integer(maxCnt));
            }
        } else if (maxCnt - minCnt == 1) {
            desc.add(new Integer(minCnt));
            desc.add(" or ");
            desc.add(new Integer(maxCnt));
        } else {
            desc.add(new Integer(minCnt));
            if (maxCnt != .) {
                desc.add(" to ");
                desc.add(new Integer(maxCnt));
            } else {
                desc.add(" or more (unlimited)");
            }
        }
        desc.add(" argument");
        if (maxCnt > 1) desc.add("s");
        
        desc.add(" but has received ");
        if (argCnt == 0) {
            desc.add("none");
        } else {
            desc.add(new Integer(argCnt));
        }
        desc.add(".");
        
        return new _TemplateModelException(desc.toArray());
    }
    static TemplateModelException newMethodArgMustBeStringException(String methodNameint argIdxTemplateModel arg) {
        return newMethodArgUnexpectedTypeException(methodNameargIdx"string"arg);
    }
    static TemplateModelException newMethodArgMustBeNumberException(String methodNameint argIdxTemplateModel arg) {
        return newMethodArgUnexpectedTypeException(methodNameargIdx"number"arg);
    }
    
    static TemplateModelException newMethodArgMustBeBooleanException(String methodNameint argIdxTemplateModel arg) {
        return newMethodArgUnexpectedTypeException(methodNameargIdx"boolean"arg);
    }
    
            String methodNameint argIdxTemplateModel arg) {
        return newMethodArgUnexpectedTypeException(methodNameargIdx"extended hash"arg);
    }
    
            String methodNameint argIdxTemplateModel arg) {
        return newMethodArgUnexpectedTypeException(methodNameargIdx"sequence"arg);
    }
    
            String methodNameint argIdxTemplateModel arg) {
        return newMethodArgUnexpectedTypeException(methodNameargIdx"sequence or collection"arg);
    }
    
            String methodNameint argIdxString expectedTypeTemplateModel arg) {
        return new _TemplateModelException(new Object[] {
                methodName"(...) expects "new _DelayedAOrAn(expectedType), " as argument #"new Integer(argIdx + 1),
                ", but received "new _DelayedAOrAn(new _DelayedFTLTypeDescription(arg)), "." });
    }
    
    
The type of the argument was good, but it's value wasn't.
            String methodNameint argIdxObject[] details) {
        return new _TemplateModelException(new Object[] {
                methodName"(...) argument #"new Integer(argIdx + 1),
                " had invalid value: "details });
    }

    
The type of the argument was good, but the values of two or more arguments are inconsistent with each other.
            String methodNameObject[] details) {
        return new _TemplateModelException(new Object[] {
                methodName"(...) arguments have invalid value: "details });
    }
    
        return new _MiscTemplateException(envnew Object[] {
                "Instantiating "className" is not allowed in the template for security reasons." });
    }
    
            Expression dateSourceExprUnknownDateTypeFormattingUnsupportedException cause) {
        return new _TemplateModelException(causenullnew _ErrorDescriptionBuilder(
                .)
                .blame(dateSourceExpr)
                .tips(.));
    }
            Expression dateSourceExprUnformattableDateException cause) {
        return new _TemplateModelException(causenullnew _ErrorDescriptionBuilder(
                cause.getMessage())
                .blame(dateSourceExpr));
    }

    

Returns:
"a" or "an" or "a(n)" (or "" for empty string) for an FTL type name
    static String getAOrAn(String s) {
        if (s == nullreturn null;
        if (s.length() == 0) return "";
        
        char fc = Character.toLowerCase(s.charAt(0));
        if (fc == 'a' || fc == 'e' || fc == 'i') {
            return "an";
        } else if (fc == 'h') { 
            String ls = s.toLowerCase();
            if (ls.startsWith("has") || ls.startsWith("hi")) { 
                return "a";
            } else if (ls.startsWith("ht")) { 
                return "an";
            } else {
                return "a(n)";
            }
        } else if (fc == 'u' || fc == 'o') {
            return "a(n)";
        } else {
            char sc = (s.length() > 1) ? s.charAt(1) : '\0'
            if (fc == 'x' && !(sc == 'a' || sc == 'e' || sc == 'i' || sc == 'a' || sc == 'o' || sc == 'u')) {
                return "an";
            } else {
                return "a";
            }
        }
    }
    
New to GrepCode? Check out our FAQ X