Merge

Fri, 05 Feb 2016 23:31:09 -0800

author
asaha
date
Fri, 05 Feb 2016 23:31:09 -0800
changeset 3182
7c32c34b4d02
parent 3178
98580a5b393d
parent 3181
a644431b3a9c
child 3184
959f061122f3

Merge

.hgtags file | annotate | diff | comparison | revisions
     1.1 --- a/.hgtags	Tue Jan 26 11:35:08 2016 -0800
     1.2 +++ b/.hgtags	Fri Feb 05 23:31:09 2016 -0800
     1.3 @@ -536,9 +536,32 @@
     1.4  5b67278c6616dca433488697eb6f2f81fcbbf22d jdk8u72-b13
     1.5  0ee6d8ae247d449950c18623513ccae4349e70d6 jdk8u72-b14
     1.6  48d0c20256a37ad20d075091285ea23788186f9a jdk8u72-b15
     1.7 +1a1711b8d11959992c27462d652003965ef3dc36 jdk8u73-b00
     1.8 +c63c6cfda4da83e04dcc378e4c1f7e0d4fd6a008 jdk8u73-b01
     1.9 +a6b8965d1e3e717205a02006c46bb3409c6187cb jdk8u73-b02
    1.10 +0e6608ec3e9faa29e3ff1bc7fdb166602f698988 jdk8u74-b00
    1.11 +4b10a2b486a9a950302de55e2495ac59bddae61a jdk8u74-b01
    1.12 +55934388691bbbd9c53299cc6f2bdceb6af8860c jdk8u74-b02
    1.13  ee6ec29fce4fa75ff846f7cbf61da162d8c5b605 jdk8u72-b31
    1.14 +1a1711b8d11959992c27462d652003965ef3dc36 jdk8u73-b00
    1.15 +c63c6cfda4da83e04dcc378e4c1f7e0d4fd6a008 jdk8u73-b01
    1.16 +a6b8965d1e3e717205a02006c46bb3409c6187cb jdk8u73-b02
    1.17 +0e6608ec3e9faa29e3ff1bc7fdb166602f698988 jdk8u74-b00
    1.18 +4b10a2b486a9a950302de55e2495ac59bddae61a jdk8u74-b01
    1.19 +55934388691bbbd9c53299cc6f2bdceb6af8860c jdk8u74-b02
    1.20 +c5b33f88707967dc3b9ddb628e4efb57c0abc2db jdk8u74-b31
    1.21  90b497af2ba5329448da3a46a185687ae17f7098 jdk8u75-b00
    1.22  374719365422fa4867bc68f4edb00403289cd862 jdk8u75-b01
    1.23  58a3f185c67cefee5ebf63fcc9c6da5e609c3705 jdk8u75-b02
    1.24  400115d04e6eac9af5a7ee7ab8b1c570e2a3803b jdk8u75-b03
    1.25 +580f87c4d91aa8cc493dbbd84a1be9671fd733f3 jdk8u75-b04
    1.26 +4fd1c0d25a9cb847d9a0f6fe2be011eed6910a7f jdk8u75-b05
    1.27 +494f23cf6614142b0138fadccd2252506b2aa7f8 jdk8u75-b06
    1.28 +10ffafaf53404de7fd23784aa3ff6016d107b9c8 jdk8u76-b00
    1.29 +0caab0d65a04d8cce71976a6bdc1ca0841bcbcf0 jdk8u76-b01
    1.30 +78f0aa6199150e10f387989b9bd5997f72cdc4e1 jdk8u76-b02
    1.31 +8969d6096fe123922bb3ac0c8f6f7b18c1c7668e jdk8u76-b03
    1.32 +f8173fa5db9ba23e7cd935600f56a8a53157eb6e jdk8u76-b04
    1.33 +a614462a11b25ebd1daa61c5c3678a695b7bb7df jdk8u76-b05
    1.34 +05277263bb6532abb966fa0585248cb40c43a530 jdk8u76-b06
    1.35  580f87c4d91aa8cc493dbbd84a1be9671fd733f3 jdk8u81-b00
     2.1 --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java	Tue Jan 26 11:35:08 2016 -0800
     2.2 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java	Fri Feb 05 23:31:09 2016 -0800
     2.3 @@ -1,5 +1,5 @@
     2.4  /*
     2.5 - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
     2.6 + * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
     2.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     2.8   *
     2.9   * This code is free software; you can redistribute it and/or modify it
    2.10 @@ -250,7 +250,7 @@
    2.11          for (int i = 0; i < list.size(); i++) {
    2.12              Object key = getMemberKey(list.get(i));
    2.13              Map<ProgramElementDoc, String> memberLevelMap = memberNameMap.get(key);
    2.14 -            if (level.equals(memberLevelMap.get(list.get(i))))
    2.15 +            if (memberLevelMap != null && level.equals(memberLevelMap.get(list.get(i))))
    2.16                  memberLevelMap.remove(list.get(i));
    2.17          }
    2.18      }
     3.1 --- a/src/share/classes/com/sun/tools/javac/comp/Attr.java	Tue Jan 26 11:35:08 2016 -0800
     3.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java	Fri Feb 05 23:31:09 2016 -0800
     3.3 @@ -156,6 +156,8 @@
     3.4          unknownTypeInfo = new ResultInfo(TYP, Type.noType);
     3.5          unknownTypeExprInfo = new ResultInfo(Kinds.TYP | Kinds.VAL, Type.noType);
     3.6          recoveryInfo = new RecoveryInfo(deferredAttr.emptyDeferredAttrContext);
     3.7 +
     3.8 +        noCheckTree = make.at(-1).Skip();
     3.9      }
    3.10  
    3.11      /** Switch: relax some constraints for retrofit mode.
    3.12 @@ -253,31 +255,34 @@
    3.13      Type check(final JCTree tree, final Type found, final int ownkind, final ResultInfo resultInfo) {
    3.14          InferenceContext inferenceContext = resultInfo.checkContext.inferenceContext();
    3.15          Type owntype;
    3.16 -        if (!found.hasTag(ERROR) && !resultInfo.pt.hasTag(METHOD) && !resultInfo.pt.hasTag(FORALL)) {
    3.17 -            if ((ownkind & ~resultInfo.pkind) != 0) {
    3.18 -                log.error(tree.pos(), "unexpected.type",
    3.19 +        boolean shouldCheck = !found.hasTag(ERROR) &&
    3.20 +                !resultInfo.pt.hasTag(METHOD) &&
    3.21 +                !resultInfo.pt.hasTag(FORALL);
    3.22 +        if (shouldCheck && (ownkind & ~resultInfo.pkind) != 0) {
    3.23 +            log.error(tree.pos(), "unexpected.type",
    3.24                          kindNames(resultInfo.pkind),
    3.25                          kindName(ownkind));
    3.26 -                owntype = types.createErrorType(found);
    3.27 -            } else if (allowPoly && inferenceContext.free(found)) {
    3.28 -                //delay the check if there are inference variables in the found type
    3.29 -                //this means we are dealing with a partially inferred poly expression
    3.30 -                owntype = resultInfo.pt;
    3.31 -                inferenceContext.addFreeTypeListener(List.of(found, resultInfo.pt), new FreeTypeListener() {
    3.32 +            owntype = types.createErrorType(found);
    3.33 +        } else if (allowPoly && inferenceContext.free(found)) {
    3.34 +            //delay the check if there are inference variables in the found type
    3.35 +            //this means we are dealing with a partially inferred poly expression
    3.36 +            owntype = shouldCheck ? resultInfo.pt : found;
    3.37 +            inferenceContext.addFreeTypeListener(List.of(found, resultInfo.pt), new FreeTypeListener() {
    3.38                      @Override
    3.39                      public void typesInferred(InferenceContext inferenceContext) {
    3.40                          ResultInfo pendingResult =
    3.41                                  resultInfo.dup(inferenceContext.asInstType(resultInfo.pt));
    3.42                          check(tree, inferenceContext.asInstType(found), ownkind, pendingResult);
    3.43                      }
    3.44 -                });
    3.45 -            } else {
    3.46 -                owntype = resultInfo.check(tree, found);
    3.47 -            }
    3.48 +            });
    3.49          } else {
    3.50 -            owntype = found;
    3.51 +            owntype = shouldCheck ?
    3.52 +            resultInfo.check(tree, found) :
    3.53 +            found;
    3.54          }
    3.55 -        tree.type = owntype;
    3.56 +        if (tree != noCheckTree) {
    3.57 +            tree.type = owntype;
    3.58 +        }
    3.59          return owntype;
    3.60      }
    3.61  
    3.62 @@ -550,6 +555,10 @@
    3.63       */
    3.64      Type result;
    3.65  
    3.66 +    /** Synthetic tree to be used during 'fake' checks.
    3.67 +     */
    3.68 +    JCTree noCheckTree;
    3.69 +
    3.70      /** Visitor method: attribute a tree, catching any completion failure
    3.71       *  exceptions. Return the tree's type.
    3.72       *
    3.73 @@ -653,8 +662,8 @@
    3.74  
    3.75      /** Attribute the arguments in a method call, returning the method kind.
    3.76       */
    3.77 -    int attribArgs(List<JCExpression> trees, Env<AttrContext> env, ListBuffer<Type> argtypes) {
    3.78 -        int kind = VAL;
    3.79 +    int attribArgs(int initialKind, List<JCExpression> trees, Env<AttrContext> env, ListBuffer<Type> argtypes) {
    3.80 +        int kind = initialKind;
    3.81          for (JCExpression arg : trees) {
    3.82              Type argtype;
    3.83              if (allowPoly && deferredAttr.isDeferred(env, arg)) {
    3.84 @@ -1730,7 +1739,7 @@
    3.85                  localEnv.info.isSelfCall = true;
    3.86  
    3.87                  // Attribute arguments, yielding list of argument types.
    3.88 -                attribArgs(tree.args, localEnv, argtypesBuf);
    3.89 +                int kind = attribArgs(MTH, tree.args, localEnv, argtypesBuf);
    3.90                  argtypes = argtypesBuf.toList();
    3.91                  typeargtypes = attribTypes(tree.typeargs, localEnv);
    3.92  
    3.93 @@ -1795,7 +1804,7 @@
    3.94                      // ...and check that it is legal in the current context.
    3.95                      // (this will also set the tree's type)
    3.96                      Type mpt = newMethodTemplate(resultInfo.pt, argtypes, typeargtypes);
    3.97 -                    checkId(tree.meth, site, sym, localEnv, new ResultInfo(MTH, mpt));
    3.98 +                    checkId(tree.meth, site, sym, localEnv, new ResultInfo(kind, mpt));
    3.99                  }
   3.100                  // Otherwise, `site' is an error type and we do nothing
   3.101              }
   3.102 @@ -1803,7 +1812,7 @@
   3.103          } else {
   3.104              // Otherwise, we are seeing a regular method call.
   3.105              // Attribute the arguments, yielding list of argument types, ...
   3.106 -            int kind = attribArgs(tree.args, localEnv, argtypesBuf);
   3.107 +            int kind = attribArgs(VAL, tree.args, localEnv, argtypesBuf);
   3.108              argtypes = argtypesBuf.toList();
   3.109              typeargtypes = attribAnyTypes(tree.typeargs, localEnv);
   3.110  
   3.111 @@ -1985,7 +1994,7 @@
   3.112  
   3.113          // Attribute constructor arguments.
   3.114          ListBuffer<Type> argtypesBuf = new ListBuffer<>();
   3.115 -        int pkind = attribArgs(tree.args, localEnv, argtypesBuf);
   3.116 +        int pkind = attribArgs(VAL, tree.args, localEnv, argtypesBuf);
   3.117          List<Type> argtypes = argtypesBuf.toList();
   3.118          List<Type> typeargtypes = attribTypes(tree.typeargs, localEnv);
   3.119  
   3.120 @@ -2043,7 +2052,7 @@
   3.121                      }
   3.122                  });
   3.123                  Type constructorType = tree.constructorType = types.createErrorType(clazztype);
   3.124 -                constructorType = checkId(tree, site,
   3.125 +                constructorType = checkId(noCheckTree, site,
   3.126                          constructor,
   3.127                          diamondEnv,
   3.128                          diamondResult);
   3.129 @@ -2069,7 +2078,7 @@
   3.130                  tree.constructor = rs.resolveConstructor(
   3.131                      tree.pos(), rsEnv, clazztype, argtypes, typeargtypes);
   3.132                  if (cdef == null) { //do not check twice!
   3.133 -                    tree.constructorType = checkId(tree,
   3.134 +                    tree.constructorType = checkId(noCheckTree,
   3.135                              clazztype,
   3.136                              tree.constructor,
   3.137                              rsEnv,
   3.138 @@ -2150,7 +2159,7 @@
   3.139                      tree.pos(), localEnv, clazztype, argtypes, typeargtypes);
   3.140                  Assert.check(sym.kind < AMBIGUOUS);
   3.141                  tree.constructor = sym;
   3.142 -                tree.constructorType = checkId(tree,
   3.143 +                tree.constructorType = checkId(noCheckTree,
   3.144                      clazztype,
   3.145                      tree.constructor,
   3.146                      localEnv,
   3.147 @@ -2161,6 +2170,17 @@
   3.148                  owntype = clazztype;
   3.149          }
   3.150          result = check(tree, owntype, VAL, resultInfo);
   3.151 +        InferenceContext inferenceContext = resultInfo.checkContext.inferenceContext();
   3.152 +        if (tree.constructorType != null && inferenceContext.free(tree.constructorType)) {
   3.153 +            //we need to wait for inference to finish and then replace inference vars in the constructor type
   3.154 +            inferenceContext.addFreeTypeListener(List.of(tree.constructorType),
   3.155 +                    new FreeTypeListener() {
   3.156 +                        @Override
   3.157 +                        public void typesInferred(InferenceContext instantiatedContext) {
   3.158 +                            tree.constructorType = instantiatedContext.asInstType(tree.constructorType);
   3.159 +                        }
   3.160 +                    });
   3.161 +        }
   3.162          chk.validate(tree.typeargs, localEnv);
   3.163      }
   3.164      //where
   3.165 @@ -2388,6 +2408,7 @@
   3.166              preFlow(that);
   3.167              flow.analyzeLambda(env, that, make, isSpeculativeRound);
   3.168  
   3.169 +            that.type = currentTarget; //avoids recovery at this stage
   3.170              checkLambdaCompatible(that, lambdaType, resultInfo.checkContext);
   3.171  
   3.172              if (!isSpeculativeRound) {
   3.173 @@ -2826,7 +2847,7 @@
   3.174                          that.kind.isUnbound() ? argtypes.tail : argtypes, typeargtypes),
   3.175                          new FunctionalReturnContext(resultInfo.checkContext));
   3.176  
   3.177 -            Type refType = checkId(that, lookupHelper.site, refSym, localEnv, checkInfo);
   3.178 +            Type refType = checkId(noCheckTree, lookupHelper.site, refSym, localEnv, checkInfo);
   3.179  
   3.180              if (that.kind.isUnbound() &&
   3.181                      resultInfo.checkContext.inferenceContext().free(argtypes.head)) {
   3.182 @@ -2848,6 +2869,8 @@
   3.183              //is a no-op (as this has been taken care during method applicability)
   3.184              boolean isSpeculativeRound =
   3.185                      resultInfo.checkContext.deferredAttrContext().mode == DeferredAttr.AttrMode.SPECULATIVE;
   3.186 +
   3.187 +            that.type = currentTarget; //avoids recovery at this stage
   3.188              checkReferenceCompatible(that, desc, refType, resultInfo.checkContext, isSpeculativeRound);
   3.189              if (!isSpeculativeRound) {
   3.190                  checkAccessibleTypes(that, localEnv, resultInfo.checkContext.inferenceContext(), desc, currentTarget);
   3.191 @@ -3968,7 +3991,7 @@
   3.192                  all_multicatchTypes.append(ctype);
   3.193              }
   3.194          }
   3.195 -        Type t = check(tree, types.lub(multicatchTypes.toList()), TYP, resultInfo);
   3.196 +        Type t = check(noCheckTree, types.lub(multicatchTypes.toList()), TYP, resultInfo);
   3.197          if (t.hasTag(CLASS)) {
   3.198              List<Type> alternatives =
   3.199                  ((all_multicatchTypes == null) ? multicatchTypes : all_multicatchTypes).toList();
     4.1 --- a/src/share/classes/com/sun/tools/javac/comp/AttrContext.java	Tue Jan 26 11:35:08 2016 -0800
     4.2 +++ b/src/share/classes/com/sun/tools/javac/comp/AttrContext.java	Fri Feb 05 23:31:09 2016 -0800
     4.3 @@ -25,6 +25,7 @@
     4.4  
     4.5  package com.sun.tools.javac.comp;
     4.6  
     4.7 +import com.sun.tools.javac.tree.JCTree;
     4.8  import com.sun.tools.javac.util.*;
     4.9  import com.sun.tools.javac.code.*;
    4.10  
    4.11 @@ -80,6 +81,13 @@
    4.12       */
    4.13      Type defaultSuperCallSite = null;
    4.14  
    4.15 +    /** Tree that when non null, is to be preferentially used in diagnostics.
    4.16 +     *  Usually Env<AttrContext>.tree is the tree to be referred to in messages,
    4.17 +     *  but this may not be true during the window a method is looked up in enclosing
    4.18 +     *  contexts (JDK-8145466)
    4.19 +     */
    4.20 +    JCTree preferredTreeForDiagnostics;
    4.21 +
    4.22      /** Duplicate this context, replacing scope field and copying all others.
    4.23       */
    4.24      AttrContext dup(Scope scope) {
    4.25 @@ -94,6 +102,7 @@
    4.26          info.returnResult = returnResult;
    4.27          info.defaultSuperCallSite = defaultSuperCallSite;
    4.28          info.isSerializable = isSerializable;
    4.29 +        info.preferredTreeForDiagnostics = preferredTreeForDiagnostics;
    4.30          return info;
    4.31      }
    4.32  
     5.1 --- a/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Tue Jan 26 11:35:08 2016 -0800
     5.2 +++ b/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Fri Feb 05 23:31:09 2016 -0800
     5.3 @@ -877,11 +877,9 @@
     5.4           */
     5.5          private JCExpression expressionInvoke(VarSymbol rcvr) {
     5.6              JCExpression qualifier =
     5.7 -                    tree.sym.isStatic() ?
     5.8 -                        make.Type(tree.sym.owner.type) :
     5.9 -                        (rcvr != null) ?
    5.10 -                            makeReceiver(rcvr) :
    5.11 -                            tree.getQualifierExpression();
    5.12 +                    (rcvr != null) ?
    5.13 +                        makeReceiver(rcvr) :
    5.14 +                        tree.getQualifierExpression();
    5.15  
    5.16              //create the qualifier expression
    5.17              JCFieldAccess select = make.Select(qualifier, tree.sym.name);
     6.1 --- a/src/share/classes/com/sun/tools/javac/comp/Resolve.java	Tue Jan 26 11:35:08 2016 -0800
     6.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Resolve.java	Fri Feb 05 23:31:09 2016 -0800
     6.3 @@ -717,7 +717,8 @@
     6.4                                      Warner warn) {
     6.5              //should we expand formals?
     6.6              boolean useVarargs = deferredAttrContext.phase.isVarargsRequired();
     6.7 -            List<JCExpression> trees = TreeInfo.args(env.tree);
     6.8 +            JCTree callTree = treeForDiagnostics(env);
     6.9 +            List<JCExpression> trees = TreeInfo.args(callTree);
    6.10  
    6.11              //inference context used during this method check
    6.12              InferenceContext inferenceContext = deferredAttrContext.inferenceContext;
    6.13 @@ -726,7 +727,7 @@
    6.14  
    6.15              if (varargsFormal == null &&
    6.16                      argtypes.size() != formals.size()) {
    6.17 -                reportMC(env.tree, MethodCheckDiag.ARITY_MISMATCH, inferenceContext); // not enough args
    6.18 +                reportMC(callTree, MethodCheckDiag.ARITY_MISMATCH, inferenceContext); // not enough args
    6.19              }
    6.20  
    6.21              while (argtypes.nonEmpty() && formals.head != varargsFormal) {
    6.22 @@ -738,7 +739,7 @@
    6.23              }
    6.24  
    6.25              if (formals.head != varargsFormal) {
    6.26 -                reportMC(env.tree, MethodCheckDiag.ARITY_MISMATCH, inferenceContext); // not enough args
    6.27 +                reportMC(callTree, MethodCheckDiag.ARITY_MISMATCH, inferenceContext); // not enough args
    6.28              }
    6.29  
    6.30              if (useVarargs) {
    6.31 @@ -754,6 +755,11 @@
    6.32              }
    6.33          }
    6.34  
    6.35 +            // where
    6.36 +            private JCTree treeForDiagnostics(Env<AttrContext> env) {
    6.37 +                return env.info.preferredTreeForDiagnostics != null ? env.info.preferredTreeForDiagnostics : env.tree;
    6.38 +            }
    6.39 +
    6.40          /**
    6.41           * Does the actual argument conforms to the corresponding formal?
    6.42           */
    6.43 @@ -1828,17 +1834,23 @@
    6.44          boolean staticOnly = false;
    6.45          while (env1.outer != null) {
    6.46              if (isStatic(env1)) staticOnly = true;
    6.47 -            sym = findMethod(
    6.48 -                env1, env1.enclClass.sym.type, name, argtypes, typeargtypes,
    6.49 -                allowBoxing, useVarargs, false);
    6.50 -            if (sym.exists()) {
    6.51 -                if (staticOnly &&
    6.52 -                    sym.kind == MTH &&
    6.53 -                    sym.owner.kind == TYP &&
    6.54 -                    (sym.flags() & STATIC) == 0) return new StaticError(sym);
    6.55 -                else return sym;
    6.56 -            } else if (sym.kind < bestSoFar.kind) {
    6.57 -                bestSoFar = sym;
    6.58 +            Assert.check(env1.info.preferredTreeForDiagnostics == null);
    6.59 +            env1.info.preferredTreeForDiagnostics = env.tree;
    6.60 +            try {
    6.61 +                sym = findMethod(
    6.62 +                    env1, env1.enclClass.sym.type, name, argtypes, typeargtypes,
    6.63 +                    allowBoxing, useVarargs, false);
    6.64 +                if (sym.exists()) {
    6.65 +                    if (staticOnly &&
    6.66 +                        sym.kind == MTH &&
    6.67 +                        sym.owner.kind == TYP &&
    6.68 +                        (sym.flags() & STATIC) == 0) return new StaticError(sym);
    6.69 +                    else return sym;
    6.70 +                } else if (sym.kind < bestSoFar.kind) {
    6.71 +                    bestSoFar = sym;
    6.72 +                }
    6.73 +            } finally {
    6.74 +                env1.info.preferredTreeForDiagnostics = null;
    6.75              }
    6.76              if ((env1.enclClass.sym.flags() & STATIC) != 0) staticOnly = true;
    6.77              env1 = env1.outer;
    6.78 @@ -2466,7 +2478,9 @@
    6.79                  return spMethod;
    6.80              }
    6.81          };
    6.82 -        polymorphicSignatureScope.enter(msym);
    6.83 +        if (!mtype.isErroneous()) { // Cache only if kosher.
    6.84 +            polymorphicSignatureScope.enter(msym);
    6.85 +        }
    6.86          return msym;
    6.87      }
    6.88  
    6.89 @@ -4214,7 +4228,11 @@
    6.90                          DiagnosticPosition preferedPos, DiagnosticSource preferredSource,
    6.91                          DiagnosticType preferredKind, JCDiagnostic d) {
    6.92                      JCDiagnostic cause = (JCDiagnostic)d.getArgs()[0];
    6.93 -                    return diags.create(preferredKind, preferredSource, d.getDiagnosticPosition(),
    6.94 +                    DiagnosticPosition pos = d.getDiagnosticPosition();
    6.95 +                    if (pos == null) {
    6.96 +                        pos = preferedPos;
    6.97 +                    }
    6.98 +                    return diags.create(preferredKind, preferredSource, pos,
    6.99                              "prob.found.req", cause);
   6.100                  }
   6.101              });
     7.1 --- a/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Tue Jan 26 11:35:08 2016 -0800
     7.2 +++ b/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Fri Feb 05 23:31:09 2016 -0800
     7.3 @@ -1793,6 +1793,11 @@
     7.4      public void visitReturn(JCReturn tree) {
     7.5          int limit = code.nextreg;
     7.6          final Env<GenContext> targetEnv;
     7.7 +
     7.8 +        /* Save and then restore the location of the return in case a finally
     7.9 +         * is expanded (with unwind()) in the middle of our bytecodes.
    7.10 +         */
    7.11 +        int tmpPos = code.pendingStatPos;
    7.12          if (tree.expr != null) {
    7.13              Item r = genExpr(tree.expr, pt).load();
    7.14              if (hasFinally(env.enclMethod, env)) {
    7.15 @@ -1800,17 +1805,10 @@
    7.16                  r.store();
    7.17              }
    7.18              targetEnv = unwind(env.enclMethod, env);
    7.19 +            code.pendingStatPos = tmpPos;
    7.20              r.load();
    7.21              code.emitop0(ireturn + Code.truncate(Code.typecode(pt)));
    7.22          } else {
    7.23 -            /*  If we have a statement like:
    7.24 -             *
    7.25 -             *  return;
    7.26 -             *
    7.27 -             *  we need to store the code.pendingStatPos value before generating
    7.28 -             *  the finalizer.
    7.29 -             */
    7.30 -            int tmpPos = code.pendingStatPos;
    7.31              targetEnv = unwind(env.enclMethod, env);
    7.32              code.pendingStatPos = tmpPos;
    7.33              code.emitop0(return_);
     8.1 --- a/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Tue Jan 26 11:35:08 2016 -0800
     8.2 +++ b/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Fri Feb 05 23:31:09 2016 -0800
     8.3 @@ -515,7 +515,7 @@
     8.4          if (mods != 0) {
     8.5              long lowestMod = mods & -mods;
     8.6              error(token.pos, "mod.not.allowed.here",
     8.7 -                      Flags.asFlagSet(lowestMod));
     8.8 +                    Flags.asFlagSet(lowestMod));
     8.9          }
    8.10      }
    8.11  
    8.12 @@ -954,10 +954,7 @@
    8.13          t = odStack[0];
    8.14  
    8.15          if (t.hasTag(JCTree.Tag.PLUS)) {
    8.16 -            StringBuilder buf = foldStrings(t);
    8.17 -            if (buf != null) {
    8.18 -                t = toP(F.at(startPos).Literal(TypeTag.CLASS, buf.toString()));
    8.19 -            }
    8.20 +            t = foldStrings(t);
    8.21          }
    8.22  
    8.23          odStackSupply.add(odStack);
    8.24 @@ -981,37 +978,79 @@
    8.25          /** If tree is a concatenation of string literals, replace it
    8.26           *  by a single literal representing the concatenated string.
    8.27           */
    8.28 -        protected StringBuilder foldStrings(JCTree tree) {
    8.29 +        protected JCExpression foldStrings(JCExpression tree) {
    8.30              if (!allowStringFolding)
    8.31 -                return null;
    8.32 -            List<String> buf = List.nil();
    8.33 +                return tree;
    8.34 +            ListBuffer<JCExpression> opStack = new ListBuffer<>();
    8.35 +            ListBuffer<JCLiteral> litBuf = new ListBuffer<>();
    8.36 +            boolean needsFolding = false;
    8.37 +            JCExpression curr = tree;
    8.38              while (true) {
    8.39 -                if (tree.hasTag(LITERAL)) {
    8.40 -                    JCLiteral lit = (JCLiteral) tree;
    8.41 -                    if (lit.typetag == TypeTag.CLASS) {
    8.42 -                        StringBuilder sbuf =
    8.43 -                            new StringBuilder((String)lit.value);
    8.44 -                        while (buf.nonEmpty()) {
    8.45 -                            sbuf.append(buf.head);
    8.46 -                            buf = buf.tail;
    8.47 -                        }
    8.48 -                        return sbuf;
    8.49 -                    }
    8.50 -                } else if (tree.hasTag(JCTree.Tag.PLUS)) {
    8.51 -                    JCBinary op = (JCBinary)tree;
    8.52 -                    if (op.rhs.hasTag(LITERAL)) {
    8.53 -                        JCLiteral lit = (JCLiteral) op.rhs;
    8.54 -                        if (lit.typetag == TypeTag.CLASS) {
    8.55 -                            buf = buf.prepend((String) lit.value);
    8.56 -                            tree = op.lhs;
    8.57 -                            continue;
    8.58 -                        }
    8.59 -                    }
    8.60 +                if (curr.hasTag(JCTree.Tag.PLUS)) {
    8.61 +                    JCBinary op = (JCBinary)curr;
    8.62 +                    needsFolding |= foldIfNeeded(op.rhs, litBuf, opStack, false);
    8.63 +                    curr = op.lhs;
    8.64 +                } else {
    8.65 +                    needsFolding |= foldIfNeeded(curr, litBuf, opStack, true);
    8.66 +                    break; //last one!
    8.67                  }
    8.68 -                return null;
    8.69 +            }
    8.70 +            if (needsFolding) {
    8.71 +                List<JCExpression> ops = opStack.toList();
    8.72 +                JCExpression res = ops.head;
    8.73 +                for (JCExpression op : ops.tail) {
    8.74 +                    res = F.at(op.getStartPosition()).Binary(optag(TokenKind.PLUS), res, op);
    8.75 +                    storeEnd(res, getEndPos(op));
    8.76 +                }
    8.77 +                return res;
    8.78 +            } else {
    8.79 +                return tree;
    8.80              }
    8.81          }
    8.82  
    8.83 +        private boolean foldIfNeeded(JCExpression tree, ListBuffer<JCLiteral> litBuf,
    8.84 +                                                ListBuffer<JCExpression> opStack, boolean last) {
    8.85 +            JCLiteral str = stringLiteral(tree);
    8.86 +            if (str != null) {
    8.87 +                litBuf.prepend(str);
    8.88 +                return last && merge(litBuf, opStack);
    8.89 +            } else {
    8.90 +                boolean res = merge(litBuf, opStack);
    8.91 +                litBuf.clear();
    8.92 +                opStack.prepend(tree);
    8.93 +                return res;
    8.94 +            }
    8.95 +        }
    8.96 +
    8.97 +        boolean merge(ListBuffer<JCLiteral> litBuf, ListBuffer<JCExpression> opStack) {
    8.98 +            if (litBuf.isEmpty()) {
    8.99 +                return false;
   8.100 +            } else if (litBuf.size() == 1) {
   8.101 +                opStack.prepend(litBuf.first());
   8.102 +                return false;
   8.103 +            } else {
   8.104 +                StringBuilder sb = new StringBuilder();
   8.105 +                for (JCLiteral lit : litBuf) {
   8.106 +                    sb.append(lit.getValue());
   8.107 +                }
   8.108 +                JCExpression t = F.at(litBuf.first().getStartPosition()).Literal(TypeTag.CLASS, sb.toString());
   8.109 +                storeEnd(t, litBuf.last().getEndPosition(endPosTable));
   8.110 +                opStack.prepend(t);
   8.111 +                return true;
   8.112 +            }
   8.113 +        }
   8.114 +
   8.115 +        private JCLiteral stringLiteral(JCTree tree) {
   8.116 +            if (tree.hasTag(LITERAL)) {
   8.117 +                JCLiteral lit = (JCLiteral)tree;
   8.118 +                if (lit.typetag == TypeTag.CLASS) {
   8.119 +                    return lit;
   8.120 +                }
   8.121 +            }
   8.122 +            return null;
   8.123 +        }
   8.124 +
   8.125 +
   8.126          /** optimization: To save allocating a new operand/operator stack
   8.127           *  for every binary operation, we use supplys.
   8.128           */
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/test/tools/javac/diags/DiagnosticRewriterTest.java	Fri Feb 05 23:31:09 2016 -0800
     9.3 @@ -0,0 +1,18 @@
     9.4 +/*
     9.5 + * @test /nodynamiccopyright/
     9.6 + * @bug 8145466 8146533
     9.7 + * @summary javac: No line numbers in compilation error
     9.8 + * @compile/fail/ref=DiagnosticRewriterTest.out -Xdiags:compact -XDrawDiagnostics DiagnosticRewriterTest.java
     9.9 + */
    9.10 +
    9.11 +class DiagnosticRewriterTest {
    9.12 +   void test() {
    9.13 +      new Object() {
    9.14 +         void g() {
    9.15 +            m(2L);
    9.16 +         }
    9.17 +      };
    9.18 +   }
    9.19 +
    9.20 +   void m(int i) { }
    9.21 +}
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/test/tools/javac/diags/DiagnosticRewriterTest.out	Fri Feb 05 23:31:09 2016 -0800
    10.3 @@ -0,0 +1,3 @@
    10.4 +DiagnosticRewriterTest.java:12:15: compiler.err.prob.found.req: (compiler.misc.possible.loss.of.precision: long, int)
    10.5 +- compiler.note.compressed.diags
    10.6 +1 error
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/test/tools/javac/diags/DiagnosticRewriterTest2.java	Fri Feb 05 23:31:09 2016 -0800
    11.3 @@ -0,0 +1,22 @@
    11.4 +/*
    11.5 + * @test /nodynamiccopyright/
    11.6 + * @bug 8145466 8146533
    11.7 + * @summary javac: No line numbers in compilation error
    11.8 + * @compile/fail/ref=DiagnosticRewriterTest2.out -Xdiags:compact -XDrawDiagnostics DiagnosticRewriterTest2.java
    11.9 + */
   11.10 +
   11.11 +class DiagnosticRewriterTest2 {
   11.12 +   class Bar {
   11.13 +       Bar(Object o) { }
   11.14 +   }
   11.15 +   void test() {
   11.16 +      new Bar(null) {
   11.17 +         void g() {
   11.18 +            m(2L);
   11.19 +            m();
   11.20 +         }
   11.21 +      };
   11.22 +   }
   11.23 +
   11.24 +   void m(int i) { }
   11.25 +}
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/test/tools/javac/diags/DiagnosticRewriterTest2.out	Fri Feb 05 23:31:09 2016 -0800
    12.3 @@ -0,0 +1,4 @@
    12.4 +DiagnosticRewriterTest2.java:15:15: compiler.err.prob.found.req: (compiler.misc.possible.loss.of.precision: long, int)
    12.5 +DiagnosticRewriterTest2.java:16:13: compiler.err.cant.apply.symbol: kindname.method, m, int, compiler.misc.no.args, kindname.class, DiagnosticRewriterTest2, (compiler.misc.arg.length.mismatch)
    12.6 +- compiler.note.compressed.diags
    12.7 +2 errors
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/test/tools/javac/generics/diamond/8065986/T8065986a.java	Fri Feb 05 23:31:09 2016 -0800
    13.3 @@ -0,0 +1,33 @@
    13.4 +/*
    13.5 + * @test /nodynamiccopyright/
    13.6 + * @bug 8065986
    13.7 + *
    13.8 + * @summary Compiler fails to NullPointerException when calling super with Object<>()
    13.9 + * @compile/fail/ref=T8065986a.out T8065986a.java -XDrawDiagnostics
   13.10 + *
   13.11 + */
   13.12 +import java.util.ArrayList;
   13.13 +
   13.14 +class T8065986a {
   13.15 +    T8065986a() {
   13.16 +        super(new Object<>());
   13.17 +    }
   13.18 +
   13.19 +    T8065986a(boolean b) {
   13.20 +        super(new ArrayList<>());
   13.21 +    }
   13.22 +
   13.23 +    T8065986a(boolean b1, boolean b2) {
   13.24 +        super(()->{});
   13.25 +    }
   13.26 +
   13.27 +    T8065986a(boolean b1, boolean b2, boolean b3) {
   13.28 +        super(T8065986a::m);
   13.29 +    }
   13.30 +
   13.31 +    T8065986a(boolean cond, Object o1, Object o2) {
   13.32 +        super(cond ? o1 : o2);
   13.33 +    }
   13.34 +
   13.35 +    static void m() { }
   13.36 +}
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/test/tools/javac/generics/diamond/8065986/T8065986a.out	Fri Feb 05 23:31:09 2016 -0800
    14.3 @@ -0,0 +1,6 @@
    14.4 +T8065986a.java:13:25: compiler.err.cant.apply.diamond.1: java.lang.Object, (compiler.misc.diamond.non.generic: java.lang.Object)
    14.5 +T8065986a.java:17:9: compiler.err.cant.apply.symbol: kindname.constructor, Object, compiler.misc.no.args, java.util.ArrayList<java.lang.Object>, kindname.class, java.lang.Object, (compiler.misc.arg.length.mismatch)
    14.6 +T8065986a.java:21:9: compiler.err.cant.apply.symbol: kindname.constructor, Object, compiler.misc.no.args, @438, kindname.class, java.lang.Object, (compiler.misc.arg.length.mismatch)
    14.7 +T8065986a.java:25:9: compiler.err.cant.apply.symbol: kindname.constructor, Object, compiler.misc.no.args, @520, kindname.class, java.lang.Object, (compiler.misc.arg.length.mismatch)
    14.8 +T8065986a.java:29:9: compiler.err.cant.apply.symbol: kindname.constructor, Object, compiler.misc.no.args, @608, kindname.class, java.lang.Object, (compiler.misc.arg.length.mismatch)
    14.9 +5 errors
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/test/tools/javac/generics/diamond/8065986/T8065986b.java	Fri Feb 05 23:31:09 2016 -0800
    15.3 @@ -0,0 +1,33 @@
    15.4 +/*
    15.5 + * @test /nodynamiccopyright/
    15.6 + * @bug 8065986
    15.7 + *
    15.8 + * @summary Compiler fails to NullPointerException when calling super with Object<>()
    15.9 + * @compile/fail/ref=T8065986b.out T8065986b.java -XDrawDiagnostics
   15.10 + *
   15.11 + */
   15.12 +import java.util.ArrayList;
   15.13 +
   15.14 +class T8065986b {
   15.15 +    T8065986b() {
   15.16 +        this(new Object<>());
   15.17 +    }
   15.18 +
   15.19 +    T8065986b(boolean b) {
   15.20 +        this(new ArrayList<>());
   15.21 +    }
   15.22 +
   15.23 +    T8065986b(boolean b1, boolean b2) {
   15.24 +        this(()->{});
   15.25 +    }
   15.26 +
   15.27 +    T8065986b(boolean b1, boolean b2, boolean b3) {
   15.28 +        this(T8065986b::m);
   15.29 +    }
   15.30 +
   15.31 +    T8065986b(boolean cond, Object o1, Object o2) {
   15.32 +        this(cond ? o1 : o2);
   15.33 +    }
   15.34 +
   15.35 +    static void m() { }
   15.36 +}
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/test/tools/javac/generics/diamond/8065986/T8065986b.out	Fri Feb 05 23:31:09 2016 -0800
    16.3 @@ -0,0 +1,6 @@
    16.4 +T8065986b.java:13:24: compiler.err.cant.apply.diamond.1: java.lang.Object, (compiler.misc.diamond.non.generic: java.lang.Object)
    16.5 +T8065986b.java:17:9: compiler.err.cant.apply.symbols: kindname.constructor, T8065986b, java.util.ArrayList<java.lang.Object>,{(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.cant.apply.diamond.1: (compiler.misc.diamond: java.util.ArrayList), (compiler.misc.infer.no.conforming.instance.exists: E, java.util.ArrayList<E>, boolean)))),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,boolean), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,boolean,boolean), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,java.lang.Object,java.lang.Object), (compiler.misc.arg.length.mismatch))}
    16.6 +T8065986b.java:21:9: compiler.err.cant.apply.symbols: kindname.constructor, T8065986b, @435,{(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.not.a.functional.intf: boolean))),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,boolean), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,boolean,boolean), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,java.lang.Object,java.lang.Object), (compiler.misc.arg.length.mismatch))}
    16.7 +T8065986b.java:25:9: compiler.err.cant.apply.symbols: kindname.constructor, T8065986b, @516,{(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.not.a.functional.intf: boolean))),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,boolean), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,boolean,boolean), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,java.lang.Object,java.lang.Object), (compiler.misc.arg.length.mismatch))}
    16.8 +T8065986b.java:29:9: compiler.err.cant.apply.symbols: kindname.constructor, T8065986b, @603,{(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.type.in.conditional: (compiler.misc.inconvertible.types: java.lang.Object, boolean)))),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,boolean), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,boolean,boolean), (compiler.misc.arg.length.mismatch)),(compiler.misc.inapplicable.method: kindname.constructor, T8065986b, T8065986b(boolean,java.lang.Object,java.lang.Object), (compiler.misc.arg.length.mismatch))}
    16.9 +5 errors
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/test/tools/javac/lambda/8066974/T8066974.java	Fri Feb 05 23:31:09 2016 -0800
    17.3 @@ -0,0 +1,44 @@
    17.4 +/*
    17.5 + * @test /nodynamiccopyright/
    17.6 + * @bug 8066974
    17.7 + * @summary Compiler doesn't infer method's generic type information in lambda body
    17.8 + * @compile/fail/ref=T8066974.out -XDrawDiagnostics T8066974.java
    17.9 + */
   17.10 +class T8066974 {
   17.11 +    static class Throwing<E extends Throwable> { }
   17.12 +    static class RuntimeThrowing extends Throwing<RuntimeException> { }
   17.13 +    static class CheckedThrowing extends Throwing<Exception> { }
   17.14 +
   17.15 +    interface Parameter {
   17.16 +        <E extends Throwable> Object m(Throwing<E> tw) throws E;
   17.17 +    }
   17.18 +
   17.19 +    interface Mapper<R> {
   17.20 +        R m(Parameter p);
   17.21 +    }
   17.22 +
   17.23 +    <Z> Z map(Mapper<Z> mz) { return null; }
   17.24 +
   17.25 +    <Z extends Throwable> Mapper<Throwing<Z>> mapper(Throwing<Z> tz) throws Z { return null; }
   17.26 +
   17.27 +    static class ThrowingMapper<X extends Throwable> implements Mapper<Throwing<X>> {
   17.28 +        ThrowingMapper(Throwing<X> arg) throws X { }
   17.29 +
   17.30 +        @Override
   17.31 +        public Throwing<X> m(Parameter p) {
   17.32 +        return null;
   17.33 +        }
   17.34 +    }
   17.35 +
   17.36 +    void testRuntime(RuntimeThrowing rt) {
   17.37 +        map(p->p.m(rt));
   17.38 +        map(mapper(rt));
   17.39 +        map(new ThrowingMapper<>(rt));
   17.40 +    }
   17.41 +
   17.42 +    void testChecked(CheckedThrowing ct) {
   17.43 +        map(p->p.m(ct));
   17.44 +        map(mapper(ct));
   17.45 +        map(new ThrowingMapper<>(ct));
   17.46 +    }
   17.47 +}
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/test/tools/javac/lambda/8066974/T8066974.out	Fri Feb 05 23:31:09 2016 -0800
    18.3 @@ -0,0 +1,4 @@
    18.4 +T8066974.java:40:19: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
    18.5 +T8066974.java:41:19: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
    18.6 +T8066974.java:42:13: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
    18.7 +3 errors
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/test/tools/javac/lambda/MethodHandleInvokeTest.java	Fri Feb 05 23:31:09 2016 -0800
    19.3 @@ -0,0 +1,49 @@
    19.4 +/*
    19.5 + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
    19.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    19.7 + *
    19.8 + * This code is free software; you can redistribute it and/or modify it
    19.9 + * under the terms of the GNU General Public License version 2 only, as
   19.10 + * published by the Free Software Foundation.
   19.11 + *
   19.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   19.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   19.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   19.15 + * version 2 for more details (a copy is included in the LICENSE file that
   19.16 + * accompanied this code).
   19.17 + *
   19.18 + * You should have received a copy of the GNU General Public License version
   19.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   19.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   19.21 + *
   19.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   19.23 + * or visit www.oracle.com if you need additional information or have any
   19.24 + * questions.
   19.25 + */
   19.26 +
   19.27 +/*
   19.28 + * @test
   19.29 + * @bug 8130506 8147530
   19.30 + * @summary javac AssertionError when invoking MethodHandle.invoke with lambda parameter
   19.31 + * @run main MethodHandleInvokeTest
   19.32 + */
   19.33 +
   19.34 +import java.lang.invoke.MethodHandle;
   19.35 +
   19.36 +public class MethodHandleInvokeTest {
   19.37 +
   19.38 +    private static interface Obj2Obj {
   19.39 +        Object run(Object obj) throws Throwable;
   19.40 +    }
   19.41 +
   19.42 +    private static void m(Obj2Obj param) {
   19.43 +    }
   19.44 +
   19.45 +    public static void main(String[] args) {
   19.46 +        m((obj) -> {
   19.47 +            MethodHandle mhandle = null;
   19.48 +            mhandle.invoke(obj);
   19.49 +            return null;
   19.50 +        });
   19.51 +    }
   19.52 +}
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/test/tools/javac/lambda/methodReferenceExecution/MethodReferencePackagePrivateQualifier.java	Fri Feb 05 23:31:09 2016 -0800
    20.3 @@ -0,0 +1,42 @@
    20.4 +/*
    20.5 + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
    20.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    20.7 + *
    20.8 + * This code is free software; you can redistribute it and/or modify it
    20.9 + * under the terms of the GNU General Public License version 2 only, as
   20.10 + * published by the Free Software Foundation.
   20.11 + *
   20.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   20.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   20.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   20.15 + * version 2 for more details (a copy is included in the LICENSE file that
   20.16 + * accompanied this code).
   20.17 + *
   20.18 + * You should have received a copy of the GNU General Public License version
   20.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   20.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20.21 + *
   20.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   20.23 + * or visit www.oracle.com if you need additional information or have any
   20.24 + * questions.
   20.25 + */
   20.26 +
   20.27 +/**
   20.28 + * @test
   20.29 + * @bug 8068254
   20.30 + * @summary Method reference uses wrong qualifying type
   20.31 + * @author srikanth
   20.32 + * @run main MethodReferencePackagePrivateQualifier
   20.33 + */
   20.34 +import pkg.B;
   20.35 +public class MethodReferencePackagePrivateQualifier {
   20.36 +    public static void main(String... args) {
   20.37 +        pkg.B.m();
   20.38 +        Runnable r = pkg.B::m;
   20.39 +        r.run();
   20.40 +        r = B::m;
   20.41 +        r.run();
   20.42 +        if (!pkg.B.result.equals("A.m()A.m()A.m()"))
   20.43 +            throw new AssertionError("Incorrect result");
   20.44 +    }
   20.45 +}
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/test/tools/javac/lambda/methodReferenceExecution/pkg/B.java	Fri Feb 05 23:31:09 2016 -0800
    21.3 @@ -0,0 +1,33 @@
    21.4 +/*
    21.5 + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
    21.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    21.7 + *
    21.8 + * This code is free software; you can redistribute it and/or modify it
    21.9 + * under the terms of the GNU General Public License version 2 only, as
   21.10 + * published by the Free Software Foundation.
   21.11 + *
   21.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   21.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   21.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   21.15 + * version 2 for more details (a copy is included in the LICENSE file that
   21.16 + * accompanied this code).
   21.17 + *
   21.18 + * You should have received a copy of the GNU General Public License version
   21.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   21.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   21.21 + *
   21.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   21.23 + * or visit www.oracle.com if you need additional information or have any
   21.24 + * questions.
   21.25 + */
   21.26 +
   21.27 +package pkg;
   21.28 +class A {
   21.29 +    public static void m() {
   21.30 +        B.result += "A.m()";
   21.31 +    }
   21.32 +}
   21.33 +
   21.34 +public class B extends A {
   21.35 +    public static String result = "";
   21.36 +}
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/test/tools/javac/linenumbers/FinallyLineNumberTest.java	Fri Feb 05 23:31:09 2016 -0800
    22.3 @@ -0,0 +1,108 @@
    22.4 +/*
    22.5 + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
    22.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    22.7 + *
    22.8 + * This code is free software; you can redistribute it and/or modify it
    22.9 + * under the terms of the GNU General Public License version 2 only, as
   22.10 + * published by the Free Software Foundation.
   22.11 + *
   22.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   22.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   22.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   22.15 + * version 2 for more details (a copy is included in the LICENSE file that
   22.16 + * accompanied this code).
   22.17 + *
   22.18 + * You should have received a copy of the GNU General Public License version
   22.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   22.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   22.21 + *
   22.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22.23 + * or visit www.oracle.com if you need additional information or have any
   22.24 + * questions.
   22.25 + */
   22.26 +
   22.27 +/*
   22.28 + * @test
   22.29 + * @bug 8134759
   22.30 + * @summary Add LineNumberTable attribute for return bytecodes split around finally code
   22.31 + * @modules jdk.jdeps/com.sun.tools.classfile
   22.32 + */
   22.33 +
   22.34 +import com.sun.tools.classfile.ClassFile;
   22.35 +import com.sun.tools.classfile.ConstantPoolException;
   22.36 +import com.sun.tools.classfile.Method;
   22.37 +import com.sun.tools.classfile.Attribute;
   22.38 +import com.sun.tools.classfile.Code_attribute;
   22.39 +import com.sun.tools.classfile.LineNumberTable_attribute;
   22.40 +import com.sun.tools.classfile.LineNumberTable_attribute.Entry;
   22.41 +
   22.42 +import java.io.File;
   22.43 +import java.io.IOException;
   22.44 +
   22.45 +public class FinallyLineNumberTest {
   22.46 +    public static void main(String[] args) throws Exception {
   22.47 +        // check that we have 5 consecutive entries for method()
   22.48 +        Entry[] lines = findEntries();
   22.49 +        if (lines == null) {
   22.50 +            throw new Exception("finally line number table could not be loaded");
   22.51 +        }
   22.52 +        if (lines.length != 4) {
   22.53 +            // Help debug
   22.54 +            System.err.println("LineTable error, got lines:");
   22.55 +            for (Entry e : lines) {
   22.56 +                System.err.println(e.line_number);
   22.57 +            }
   22.58 +            throw new Exception("finally line number table incorrect: length=" + lines.length + " expected length=4");
   22.59 +        }
   22.60 +
   22.61 +        // return null line, for the load null operation
   22.62 +        int current = lines[0].line_number;
   22.63 +        int first = current;
   22.64 +
   22.65 +        // finally line
   22.66 +        current = lines[1].line_number;
   22.67 +        if (current != first + 2) {
   22.68 +            throw new Exception("finally line number table incorrect: got=" + current + " expected=" + (first + 2));
   22.69 +        }
   22.70 +
   22.71 +        // return null line, for the return operation
   22.72 +        current = lines[2].line_number;
   22.73 +        if (current != first) {
   22.74 +            throw new Exception("finally line number table incorrect: got=" + current + " expected=" + first);
   22.75 +        }
   22.76 +
   22.77 +        // finally line, for when exception is thrown
   22.78 +        current = lines[3].line_number;
   22.79 +        if (current != first + 2) {
   22.80 +            throw new Exception("finally line number table incorrect: got=" + current + " expected=" + (first + 2));
   22.81 +        }
   22.82 +    }
   22.83 +
   22.84 +    static Entry[] findEntries() throws IOException, ConstantPoolException {
   22.85 +        ClassFile self = ClassFile.read(FinallyLineNumberTest.class.getResourceAsStream("FinallyLineNumberTest.class"));
   22.86 +        for (Method m : self.methods) {
   22.87 +            if ("method".equals(m.getName(self.constant_pool))) {
   22.88 +                Code_attribute code_attribute = (Code_attribute)m.attributes.get(Attribute.Code);
   22.89 +                for (Attribute at : code_attribute.attributes) {
   22.90 +                    if (Attribute.LineNumberTable.equals(at.getName(self.constant_pool))) {
   22.91 +                        return ((LineNumberTable_attribute)at).line_number_table;
   22.92 +                    }
   22.93 +                }
   22.94 +            }
   22.95 +        }
   22.96 +        return null;
   22.97 +    }
   22.98 +
   22.99 +    // This method should get LineNumberTable entries for:
  22.100 +    // *) The load of the null
  22.101 +    // *) The finally code for when an exception is *not* thrown
  22.102 +    // *) The actual return, which should have the same line as the load of the null
  22.103 +    // *) The finally code for when an exception *is* thrown, should have the same line as above finally code
  22.104 +    public static String method(int field) {
  22.105 +        try {
  22.106 +            return null;
  22.107 +        } finally {
  22.108 +            field+=1; // Dummy
  22.109 +        }
  22.110 +    }
  22.111 +}
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/test/tools/javac/parser/8134007/T8134007.java	Fri Feb 05 23:31:09 2016 -0800
    23.3 @@ -0,0 +1,488 @@
    23.4 +/*
    23.5 + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
    23.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    23.7 + *
    23.8 + * This code is free software; you can redistribute it and/or modify it
    23.9 + * under the terms of the GNU General Public License version 2 only, as
   23.10 + * published by the Free Software Foundation.
   23.11 + *
   23.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   23.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   23.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   23.15 + * version 2 for more details (a copy is included in the LICENSE file that
   23.16 + * accompanied this code).
   23.17 + *
   23.18 + * You should have received a copy of the GNU General Public License version
   23.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   23.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   23.21 + *
   23.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   23.23 + * or visit www.oracle.com if you need additional information or have any
   23.24 + * questions.
   23.25 + */
   23.26 +
   23.27 +/*
   23.28 + * @test
   23.29 + * @bug 8134007
   23.30 + * @summary Improve string folding
   23.31 + * @compile T8134007.java
   23.32 + */
   23.33 +class T8134007 {
   23.34 +    String v = "";
   23.35 +
   23.36 +    //interleaved non-literals
   23.37 +    String s1 = "Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.38 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.39 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.40 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.41 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.42 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.43 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.44 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.45 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.46 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.47 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.48 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.49 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.50 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.51 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.52 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.53 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.54 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.55 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.56 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.57 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.58 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.59 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.60 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.61 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.62 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.63 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.64 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.65 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.66 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.67 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.68 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.69 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.70 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.71 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.72 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.73 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.74 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.75 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.76 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.77 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.78 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.79 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.80 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.81 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.82 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.83 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.84 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.85 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.86 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.87 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.88 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.89 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.90 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.91 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.92 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.93 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.94 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.95 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.96 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.97 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.98 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
   23.99 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.100 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.101 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.102 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.103 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.104 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.105 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.106 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.107 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.108 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.109 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.110 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.111 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.112 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.113 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.114 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.115 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.116 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.117 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.118 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.119 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.120 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.121 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.122 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.123 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.124 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.125 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.126 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.127 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.128 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.129 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.130 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.131 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.132 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.133 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.134 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.135 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.136 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.137 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.138 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.139 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.140 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.141 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.142 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.143 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.144 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.145 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.146 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.147 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.148 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.149 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.150 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.151 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.152 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.153 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.154 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.155 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.156 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.157 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.158 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.159 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.160 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.161 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.162 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.163 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.164 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.165 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.166 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.167 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.168 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.169 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.170 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.171 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.172 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.173 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.174 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.175 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.176 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.177 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.178 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.179 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.180 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.181 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.182 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.183 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.184 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.185 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v
  23.186 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v;
  23.187 +
  23.188 +    //heading non-literal
  23.189 +    String s2 = v + "Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.190 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.191 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.192 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.193 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.194 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.195 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.196 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.197 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.198 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.199 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.200 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.201 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.202 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.203 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.204 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.205 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.206 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.207 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.208 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.209 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.210 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.211 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.212 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.213 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.214 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.215 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.216 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.217 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.218 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.219 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.220 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.221 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.222 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.223 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.224 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.225 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.226 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.227 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.228 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.229 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.230 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.231 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.232 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.233 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.234 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.235 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.236 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.237 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.238 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.239 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.240 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.241 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.242 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.243 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.244 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.245 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.246 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.247 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.248 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.249 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.250 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.251 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.252 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.253 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.254 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.255 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.256 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.257 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.258 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.259 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.260 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.261 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.262 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.263 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.264 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.265 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.266 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.267 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.268 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.269 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.270 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.271 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.272 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.273 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.274 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.275 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.276 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.277 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.278 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.279 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.280 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.281 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.282 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.283 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.284 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.285 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.286 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.287 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.288 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.289 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.290 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.291 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.292 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.293 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.294 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.295 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.296 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.297 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.298 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.299 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.300 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.301 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.302 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.303 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.304 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.305 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.306 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.307 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.308 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.309 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.310 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.311 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.312 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.313 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.314 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.315 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.316 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.317 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.318 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.319 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.320 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.321 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.322 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.323 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.324 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.325 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.326 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.327 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.328 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.329 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.330 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.331 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.332 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.333 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.334 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.335 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.336 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.337 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.338 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9";
  23.339 +
  23.340 +    //trailing non-literal
  23.341 +    String s3 = "Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.342 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.343 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.344 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.345 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.346 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.347 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.348 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.349 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.350 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.351 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.352 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.353 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.354 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.355 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.356 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.357 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.358 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.359 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.360 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.361 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.362 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.363 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.364 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.365 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.366 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.367 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.368 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.369 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.370 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.371 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.372 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.373 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.374 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.375 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.376 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.377 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.378 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.379 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.380 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.381 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.382 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.383 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.384 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.385 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.386 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.387 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.388 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.389 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.390 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.391 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.392 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.393 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.394 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.395 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.396 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.397 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.398 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.399 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.400 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.401 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.402 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.403 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.404 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.405 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.406 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.407 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.408 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.409 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.410 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.411 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.412 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.413 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.414 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.415 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.416 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.417 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.418 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.419 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.420 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.421 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.422 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.423 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.424 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.425 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.426 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.427 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.428 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.429 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.430 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.431 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.432 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.433 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.434 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.435 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.436 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.437 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.438 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.439 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.440 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.441 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.442 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.443 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.444 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.445 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.446 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.447 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.448 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.449 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.450 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.451 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.452 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.453 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.454 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.455 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.456 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.457 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.458 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.459 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.460 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.461 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.462 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.463 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.464 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.465 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.466 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.467 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.468 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.469 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.470 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.471 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.472 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.473 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.474 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.475 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.476 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.477 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.478 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.479 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.480 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.481 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.482 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.483 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.484 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.485 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.486 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.487 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.488 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.489 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9"
  23.490 +        +"Str0" + "Str1" + "Str2" + "Str3" + "Str4" + "Str5" + "Str6" + "Str7" + "Str8" + "Str9" + v;
  23.491 +}
    24.1 --- a/test/tools/javac/parser/StringFoldingTest.java	Tue Jan 26 11:35:08 2016 -0800
    24.2 +++ b/test/tools/javac/parser/StringFoldingTest.java	Fri Feb 05 23:31:09 2016 -0800
    24.3 @@ -23,7 +23,7 @@
    24.4  
    24.5  /*
    24.6   * @test
    24.7 - * @bug 7068902
    24.8 + * @bug 7068902 8139751
    24.9   * @summary verify that string folding can be enabled or disabled
   24.10   */
   24.11  
   24.12 @@ -85,11 +85,14 @@
   24.13  
   24.14          if (disableStringFolding) {
   24.15              if (text.contains("FOLDED")) {
   24.16 -                throw new AssertionError("Expected string folding");
   24.17 +                throw new AssertionError("Expected no string folding");
   24.18 +            }
   24.19 +            if (!text.contains("\"F\"")) {
   24.20 +                throw new AssertionError("Expected content not found");
   24.21              }
   24.22          } else {
   24.23              if (!text.contains("FOLDED")) {
   24.24 -                throw new AssertionError("Expected no string folding");
   24.25 +                throw new AssertionError("Expected string folding");
   24.26              }
   24.27          }
   24.28      }

mercurial