langtools/test/tools/javac/lambda/TestInvokeDynamic.java
author akulyakh
Thu, 21 May 2015 11:41:04 -0700
changeset 30730 d3ce7619db2c
parent 21711 1118b43b5111
child 30846 2b3f379840f0
permissions -rw-r--r--
8076543: Add @modules as needed to the langtools tests Reviewed-by: jjg, shurailine
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
     1
/*
30730
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 21711
diff changeset
     2
 * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
     4
 *
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
     7
 * published by the Free Software Foundation.
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
     8
 *
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    13
 * accompanied this code).
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    14
 *
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    18
 *
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    21
 * questions.
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    22
 */
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    23
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    24
/*
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    25
 * @test
17799
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    26
 * @bug 7194586 8003280 8006694 8010404
14547
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents: 14053
diff changeset
    27
 * @summary Add lambda tests
86d8d242b0c4 8003280: Add lambda tests
mcimadamore
parents: 14053
diff changeset
    28
 *  Add back-end support for invokedynamic
15384
5a8d00abf076 8006694: temporarily workaround combo tests are causing time out in several platforms
vromero
parents: 15040
diff changeset
    29
 *  temporarily workaround combo tests are causing time out in several platforms
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
    30
 * @library ../lib
30730
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 21711
diff changeset
    31
 * @modules jdk.compiler/com.sun.tools.classfile
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 21711
diff changeset
    32
 *          jdk.compiler/com.sun.tools.javac.api
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 21711
diff changeset
    33
 *          jdk.compiler/com.sun.tools.javac.code
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 21711
diff changeset
    34
 *          jdk.compiler/com.sun.tools.javac.jvm
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 21711
diff changeset
    35
 *          jdk.compiler/com.sun.tools.javac.tree
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 21711
diff changeset
    36
 *          jdk.compiler/com.sun.tools.javac.util
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
    37
 * @build JavacTestingAbstractThreadedTest
15384
5a8d00abf076 8006694: temporarily workaround combo tests are causing time out in several platforms
vromero
parents: 15040
diff changeset
    38
 * @run main/othervm TestInvokeDynamic
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    39
 */
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    40
15384
5a8d00abf076 8006694: temporarily workaround combo tests are causing time out in several platforms
vromero
parents: 15040
diff changeset
    41
// use /othervm to avoid jtreg timeout issues (CODETOOLS-7900047)
5a8d00abf076 8006694: temporarily workaround combo tests are causing time out in several platforms
vromero
parents: 15040
diff changeset
    42
// see JDK-8006746
5a8d00abf076 8006694: temporarily workaround combo tests are causing time out in several platforms
vromero
parents: 15040
diff changeset
    43
17799
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    44
import java.io.File;
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    45
import java.net.URI;
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    46
import java.util.ArrayList;
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    47
import java.util.Arrays;
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    48
import java.util.Locale;
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    49
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    50
import javax.tools.Diagnostic;
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    51
import javax.tools.JavaFileObject;
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    52
import javax.tools.SimpleJavaFileObject;
0ce3b298b678 8005207: test has 2 @bug tags
vromero
parents: 16807
diff changeset
    53
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    54
import com.sun.source.tree.MethodInvocationTree;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    55
import com.sun.source.tree.MethodTree;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    56
import com.sun.source.util.TaskEvent;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    57
import com.sun.source.util.TaskListener;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    58
import com.sun.source.util.TreeScanner;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    59
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    60
import com.sun.tools.classfile.Attribute;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    61
import com.sun.tools.classfile.BootstrapMethods_attribute;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    62
import com.sun.tools.classfile.ClassFile;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    63
import com.sun.tools.classfile.Code_attribute;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    64
import com.sun.tools.classfile.ConstantPool.*;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    65
import com.sun.tools.classfile.Instruction;
16807
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
    66
import com.sun.tools.classfile.LineNumberTable_attribute;
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    67
import com.sun.tools.classfile.Method;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    68
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    69
import com.sun.tools.javac.api.JavacTaskImpl;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    70
import com.sun.tools.javac.code.Symbol;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    71
import com.sun.tools.javac.code.Symbol.MethodSymbol;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    72
import com.sun.tools.javac.code.Symtab;
14949
45f43822bbde 8000518: Javac generates duplicate name_and_type constant pool entry for class BinaryOpValueExp.java
vromero
parents: 14547
diff changeset
    73
import com.sun.tools.javac.code.Types;
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    74
import com.sun.tools.javac.jvm.Pool;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    75
import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    76
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    77
import com.sun.tools.javac.tree.JCTree.JCIdent;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    78
import com.sun.tools.javac.util.Context;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    79
import com.sun.tools.javac.util.Names;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    80
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    81
import static com.sun.tools.javac.jvm.ClassFile.*;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    82
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
    83
public class TestInvokeDynamic
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
    84
    extends JavacTestingAbstractThreadedTest
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
    85
    implements Runnable {
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    86
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    87
    enum StaticArgumentKind {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    88
        STRING("Hello!", "String", "Ljava/lang/String;") {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    89
            @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    90
            boolean check(CPInfo cpInfo) throws Exception {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    91
                return (cpInfo instanceof CONSTANT_String_info) &&
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
    92
                        ((CONSTANT_String_info)cpInfo).getString()
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
    93
                        .equals(value);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    94
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    95
        },
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    96
        CLASS(null, "Class<?>", "Ljava/lang/Class;") {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    97
            @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    98
            boolean check(CPInfo cpInfo) throws Exception {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
    99
                return (cpInfo instanceof CONSTANT_Class_info) &&
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   100
                        ((CONSTANT_Class_info)cpInfo).getName()
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   101
                        .equals("java/lang/String");
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   102
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   103
        },
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   104
        INTEGER(1, "int", "I") {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   105
            @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   106
            boolean check(CPInfo cpInfo) throws Exception {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   107
                return (cpInfo instanceof CONSTANT_Integer_info) &&
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   108
                        ((CONSTANT_Integer_info)cpInfo).value ==
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   109
                        ((Integer)value).intValue();
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   110
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   111
        },
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   112
        LONG(1L, "long", "J") {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   113
            @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   114
            boolean check(CPInfo cpInfo) throws Exception {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   115
                return (cpInfo instanceof CONSTANT_Long_info) &&
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   116
                        ((CONSTANT_Long_info)cpInfo).value ==
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   117
                        ((Long)value).longValue();
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   118
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   119
        },
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   120
        FLOAT(1.0f, "float", "F") {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   121
            @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   122
            boolean check(CPInfo cpInfo) throws Exception {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   123
                return (cpInfo instanceof CONSTANT_Float_info) &&
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   124
                        ((CONSTANT_Float_info)cpInfo).value ==
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   125
                        ((Float)value).floatValue();
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   126
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   127
        },
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   128
        DOUBLE(1.0, "double","D") {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   129
            @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   130
            boolean check(CPInfo cpInfo) throws Exception {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   131
                return (cpInfo instanceof CONSTANT_Double_info) &&
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   132
                        ((CONSTANT_Double_info)cpInfo).value ==
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   133
                        ((Double)value).doubleValue();
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   134
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   135
        },
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   136
        METHOD_HANDLE(null, "MethodHandle", "Ljava/lang/invoke/MethodHandle;") {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   137
            @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   138
            boolean check(CPInfo cpInfo) throws Exception {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   139
                if (!(cpInfo instanceof CONSTANT_MethodHandle_info))
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   140
                    return false;
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   141
                CONSTANT_MethodHandle_info handleInfo =
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   142
                        (CONSTANT_MethodHandle_info)cpInfo;
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   143
                return handleInfo.getCPRefInfo().getClassName().equals("Array") &&
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   144
                        handleInfo.reference_kind == RefKind.REF_invokeVirtual &&
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   145
                        handleInfo.getCPRefInfo()
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   146
                        .getNameAndTypeInfo().getName().equals("clone") &&
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   147
                        handleInfo.getCPRefInfo()
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   148
                        .getNameAndTypeInfo().getType().equals("()Ljava/lang/Object;");
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   149
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   150
        },
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   151
        METHOD_TYPE(null, "MethodType", "Ljava/lang/invoke/MethodType;") {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   152
            @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   153
            boolean check(CPInfo cpInfo) throws Exception {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   154
                return (cpInfo instanceof CONSTANT_MethodType_info) &&
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   155
                        ((CONSTANT_MethodType_info)cpInfo).getType()
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   156
                        .equals("()Ljava/lang/Object;");
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   157
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   158
        };
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   159
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   160
        Object value;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   161
        String sourceTypeStr;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   162
        String bytecodeTypeStr;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   163
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   164
        StaticArgumentKind(Object value, String sourceTypeStr,
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   165
                String bytecodeTypeStr) {
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   166
            this.value = value;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   167
            this.sourceTypeStr = sourceTypeStr;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   168
            this.bytecodeTypeStr = bytecodeTypeStr;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   169
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   170
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   171
        abstract boolean check(CPInfo cpInfo) throws Exception;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   172
14949
45f43822bbde 8000518: Javac generates duplicate name_and_type constant pool entry for class BinaryOpValueExp.java
vromero
parents: 14547
diff changeset
   173
        Object getValue(Symtab syms, Names names, Types types) {
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   174
            switch (this) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   175
                case STRING:
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   176
                case INTEGER:
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   177
                case LONG:
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   178
                case FLOAT:
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   179
                case DOUBLE:
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   180
                    return value;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   181
                case CLASS:
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   182
                    return syms.stringType.tsym;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   183
                case METHOD_HANDLE:
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   184
                    return new Pool.MethodHandle(REF_invokeVirtual,
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   185
                            syms.arrayCloneMethod, types);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   186
                case METHOD_TYPE:
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   187
                    return syms.arrayCloneMethod.type;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   188
                default:
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   189
                    throw new AssertionError();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   190
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   191
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   192
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   193
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   194
    enum StaticArgumentsArity {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   195
        ZERO(0),
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   196
        ONE(1),
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   197
        TWO(2),
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   198
        THREE(3);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   199
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   200
        int arity;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   201
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   202
        StaticArgumentsArity(int arity) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   203
            this.arity = arity;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   204
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   205
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   206
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   207
    public static void main(String... args) throws Exception {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   208
        for (StaticArgumentsArity arity : StaticArgumentsArity.values()) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   209
            if (arity.arity == 0) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   210
                pool.execute(new TestInvokeDynamic(arity));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   211
            } else {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   212
                for (StaticArgumentKind sak1 : StaticArgumentKind.values()) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   213
                    if (arity.arity == 1) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   214
                        pool.execute(new TestInvokeDynamic(arity, sak1));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   215
                    } else {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   216
                        for (StaticArgumentKind sak2 : StaticArgumentKind.values()) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   217
                            if (arity.arity == 2) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   218
                                pool.execute(new TestInvokeDynamic(arity, sak1, sak2));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   219
                            } else {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   220
                                for (StaticArgumentKind sak3 : StaticArgumentKind.values()) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   221
                                    pool.execute(
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   222
                                        new TestInvokeDynamic(arity, sak1, sak2, sak3));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   223
                                }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   224
                            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   225
                        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   226
                    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   227
                }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   228
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   229
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   230
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   231
        checkAfterExec();
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   232
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   233
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   234
    StaticArgumentsArity arity;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   235
    StaticArgumentKind[] saks;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   236
    DiagChecker dc;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   237
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   238
    TestInvokeDynamic(StaticArgumentsArity arity, StaticArgumentKind... saks) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   239
        this.arity = arity;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   240
        this.saks = saks;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   241
        dc = new DiagChecker();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   242
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   243
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   244
    public void run() {
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   245
        int id = checkCount.incrementAndGet();
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   246
        JavaSource source = new JavaSource(id);
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   247
        JavacTaskImpl ct = (JavacTaskImpl)comp.getTask(null, fm.get(), dc,
16807
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   248
                Arrays.asList("-g"), null, Arrays.asList(source));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   249
        Context context = ct.getContext();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   250
        Symtab syms = Symtab.instance(context);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   251
        Names names = Names.instance(context);
14949
45f43822bbde 8000518: Javac generates duplicate name_and_type constant pool entry for class BinaryOpValueExp.java
vromero
parents: 14547
diff changeset
   252
        Types types = Types.instance(context);
45f43822bbde 8000518: Javac generates duplicate name_and_type constant pool entry for class BinaryOpValueExp.java
vromero
parents: 14547
diff changeset
   253
        ct.addTaskListener(new Indifier(syms, names, types));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   254
        try {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   255
            ct.generate();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   256
        } catch (Throwable t) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   257
            t.printStackTrace();
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   258
            throw new AssertionError(
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   259
                    String.format("Error thrown when compiling following code\n%s",
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   260
                    source.source));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   261
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   262
        if (dc.diagFound) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   263
            throw new AssertionError(
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   264
                    String.format("Diags found when compiling following code\n%s\n\n%s",
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   265
                    source.source, dc.printDiags()));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   266
        }
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   267
        verifyBytecode(id);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   268
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   269
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   270
    void verifyBytecode(int id) {
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   271
        File compiledTest = new File(String.format("Test%d.class", id));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   272
        try {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   273
            ClassFile cf = ClassFile.read(compiledTest);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   274
            Method testMethod = null;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   275
            for (Method m : cf.methods) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   276
                if (m.getName(cf.constant_pool).equals("test")) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   277
                    testMethod = m;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   278
                    break;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   279
                }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   280
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   281
            if (testMethod == null) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   282
                throw new Error("Test method not found");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   283
            }
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   284
            Code_attribute ea =
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   285
                    (Code_attribute)testMethod.attributes.get(Attribute.Code);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   286
            if (testMethod == null) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   287
                throw new Error("Code attribute for test() method not found");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   288
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   289
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   290
            int bsmIdx = -1;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   291
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   292
            for (Instruction i : ea.getInstructions()) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   293
                if (i.getMnemonic().equals("invokedynamic")) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   294
                    CONSTANT_InvokeDynamic_info indyInfo =
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   295
                         (CONSTANT_InvokeDynamic_info)cf
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   296
                            .constant_pool.get(i.getShort(1));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   297
                    bsmIdx = indyInfo.bootstrap_method_attr_index;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   298
                    if (!indyInfo.getNameAndTypeInfo().getType().equals("()V")) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   299
                        throw new
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   300
                            AssertionError("type mismatch for CONSTANT_InvokeDynamic_info");
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   301
                    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   302
                }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   303
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   304
            if (bsmIdx == -1) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   305
                throw new Error("Missing invokedynamic in generated code");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   306
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   307
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   308
            BootstrapMethods_attribute bsm_attr =
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   309
                    (BootstrapMethods_attribute)cf
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   310
                    .getAttribute(Attribute.BootstrapMethods);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   311
            if (bsm_attr.bootstrap_method_specifiers.length != 1) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   312
                throw new Error("Bad number of method specifiers " +
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   313
                        "in BootstrapMethods attribute");
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   314
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   315
            BootstrapMethods_attribute.BootstrapMethodSpecifier bsm_spec =
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   316
                    bsm_attr.bootstrap_method_specifiers[0];
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   317
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   318
            if (bsm_spec.bootstrap_arguments.length != arity.arity) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   319
                throw new Error("Bad number of static invokedynamic args " +
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   320
                        "in BootstrapMethod attribute");
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   321
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   322
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   323
            int count = 0;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   324
            for (StaticArgumentKind sak : saks) {
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   325
                if (!sak.check(cf.constant_pool
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   326
                        .get(bsm_spec.bootstrap_arguments[count]))) {
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   327
                    throw new Error("Bad static argument value " + sak);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   328
                }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   329
                count++;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   330
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   331
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   332
            CONSTANT_MethodHandle_info bsm_handle =
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   333
                    (CONSTANT_MethodHandle_info)cf.constant_pool
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   334
                    .get(bsm_spec.bootstrap_method_ref);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   335
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   336
            if (bsm_handle.reference_kind != RefKind.REF_invokeStatic) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   337
                throw new Error("Bad kind on boostrap method handle");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   338
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   339
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   340
            CONSTANT_Methodref_info bsm_ref =
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   341
                    (CONSTANT_Methodref_info)cf.constant_pool
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   342
                    .get(bsm_handle.reference_index);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   343
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   344
            if (!bsm_ref.getClassInfo().getName().equals("Bootstrap")) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   345
                throw new Error("Bad owner of boostrap method");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   346
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   347
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   348
            if (!bsm_ref.getNameAndTypeInfo().getName().equals("bsm")) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   349
                throw new Error("Bad boostrap method name");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   350
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   351
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   352
            if (!bsm_ref.getNameAndTypeInfo()
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   353
                    .getType().equals(asBSMSignatureString())) {
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   354
                throw new Error("Bad boostrap method type" +
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   355
                        bsm_ref.getNameAndTypeInfo().getType() + " " +
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   356
                        asBSMSignatureString());
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   357
            }
16807
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   358
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   359
            LineNumberTable_attribute lnt =
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   360
                    (LineNumberTable_attribute)ea.attributes.get(Attribute.LineNumberTable);
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   361
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   362
            if (lnt == null) {
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   363
                throw new Error("No LineNumberTable attribute");
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   364
            }
21711
1118b43b5111 8027142: Invokedynamic instructions don't get line number table entries
jlahoda
parents: 17799
diff changeset
   365
            if (lnt.line_number_table_length != 3) {
16807
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   366
                throw new Error("Wrong number of entries in LineNumberTable");
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   367
            }
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   368
        } catch (Exception e) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   369
            e.printStackTrace();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   370
            throw new Error("error reading " + compiledTest +": " + e);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   371
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   372
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   373
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   374
    String asBSMSignatureString() {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   375
        StringBuilder buf = new StringBuilder();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   376
        buf.append("(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   377
        for (StaticArgumentKind sak : saks) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   378
            buf.append(sak.bytecodeTypeStr);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   379
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   380
        buf.append(")Ljava/lang/invoke/CallSite;");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   381
        return buf.toString();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   382
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   383
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   384
    class JavaSource extends SimpleJavaFileObject {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   385
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   386
        static final String source_template = "import java.lang.invoke.*;\n" +
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   387
                "class Bootstrap {\n" +
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   388
                "   public static CallSite bsm(MethodHandles.Lookup lookup, " +
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   389
                "String name, MethodType methodType #SARGS) {\n" +
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   390
                "       return null;\n" +
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   391
                "   }\n" +
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   392
                "}\n" +
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   393
                "class Test#ID {\n" +
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   394
                "   void m() { }\n" +
16807
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   395
                "   void test() {\n" +
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   396
                "      Object o = this; // marker statement \n" +
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   397
                "      m();\n" +
b442b47d3ae9 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
mcimadamore
parents: 15384
diff changeset
   398
                "   }\n" +
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   399
                "}";
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   400
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   401
        String source;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   402
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   403
        JavaSource(int id) {
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   404
            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   405
            source = source_template.replace("#SARGS", asSignatureString())
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   406
                    .replace("#ID", String.valueOf(id));
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   407
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   408
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   409
        @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   410
        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   411
            return source;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   412
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   413
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   414
        String asSignatureString() {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   415
            int count = 0;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   416
            StringBuilder buf = new StringBuilder();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   417
            for (StaticArgumentKind sak : saks) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   418
                buf.append(",");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   419
                buf.append(sak.sourceTypeStr);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   420
                buf.append(' ');
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   421
                buf.append(String.format("x%d", count++));
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   422
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   423
            return buf.toString();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   424
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   425
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   426
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   427
    class Indifier extends TreeScanner<Void, Void> implements TaskListener {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   428
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   429
        MethodSymbol bsm;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   430
        Symtab syms;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   431
        Names names;
14949
45f43822bbde 8000518: Javac generates duplicate name_and_type constant pool entry for class BinaryOpValueExp.java
vromero
parents: 14547
diff changeset
   432
        Types types;
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   433
14949
45f43822bbde 8000518: Javac generates duplicate name_and_type constant pool entry for class BinaryOpValueExp.java
vromero
parents: 14547
diff changeset
   434
        Indifier(Symtab syms, Names names, Types types) {
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   435
            this.syms = syms;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   436
            this.names = names;
14949
45f43822bbde 8000518: Javac generates duplicate name_and_type constant pool entry for class BinaryOpValueExp.java
vromero
parents: 14547
diff changeset
   437
            this.types = types;
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   438
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   439
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   440
        @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   441
        public void started(TaskEvent e) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   442
            //do nothing
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   443
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   444
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   445
        @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   446
        public void finished(TaskEvent e) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   447
            if (e.getKind() == TaskEvent.Kind.ANALYZE) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   448
                scan(e.getCompilationUnit(), null);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   449
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   450
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   451
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   452
        @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   453
        public Void visitMethodInvocation(MethodInvocationTree node, Void p) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   454
            super.visitMethodInvocation(node, p);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   455
            JCMethodInvocation apply = (JCMethodInvocation)node;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   456
            JCIdent ident = (JCIdent)apply.meth;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   457
            Symbol oldSym = ident.sym;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   458
            if (!oldSym.isConstructor()) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   459
                Object[] staticArgs = new Object[arity.arity];
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   460
                for (int i = 0; i < arity.arity ; i++) {
14949
45f43822bbde 8000518: Javac generates duplicate name_and_type constant pool entry for class BinaryOpValueExp.java
vromero
parents: 14547
diff changeset
   461
                    staticArgs[i] = saks[i].getValue(syms, names, types);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   462
                }
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   463
                ident.sym = new Symbol.DynamicMethodSymbol(oldSym.name,
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   464
                        oldSym.owner, REF_invokeStatic, bsm, oldSym.type, staticArgs);
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   465
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   466
            return null;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   467
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   468
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   469
        @Override
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   470
        public Void visitMethod(MethodTree node, Void p) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   471
            super.visitMethod(node, p);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   472
            if (node.getName().toString().equals("bsm")) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   473
                bsm = ((JCMethodDecl)node).sym;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   474
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   475
            return null;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   476
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   477
    }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   478
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   479
    static class DiagChecker
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   480
        implements javax.tools.DiagnosticListener<JavaFileObject> {
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   481
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   482
        boolean diagFound;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   483
        ArrayList<String> diags = new ArrayList<>();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   484
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   485
        public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   486
            diags.add(diagnostic.getMessage(Locale.getDefault()));
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   487
            diagFound = true;
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   488
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   489
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   490
        String printDiags() {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   491
            StringBuilder buf = new StringBuilder();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   492
            for (String s : diags) {
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   493
                buf.append(s);
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   494
                buf.append("\n");
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   495
            }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   496
            return buf.toString();
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   497
        }
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   498
    }
15040
99fd9483d3f0 8005167: execution time of combo tests in javac should be improved
vromero
parents: 14949
diff changeset
   499
14046
8ef5d5b19998 7194586: Add back-end support for invokedynamic
mcimadamore
parents:
diff changeset
   500
}