test/hotspot/jtreg/runtime/SelectionResolution/classes/selectionresolution/SelectionResolutionTestCase.java
author iignatyev
Thu, 02 Aug 2018 14:40:55 -0700 (2018-08-02)
changeset 51287 7b1ddbafa134
parent 47216 71c04702a3d5
permissions -rw-r--r--
8208655: use JTreg skipped status in hotspot tests Reviewed-by: kvn, hseigel, iklam
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     1
/*
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     2
 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     4
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     7
 * published by the Free Software Foundation.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     8
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    13
 * accompanied this code).
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    14
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    18
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    21
 * questions.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    22
 */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    23
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    24
package selectionresolution;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    25
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    26
import java.io.File;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    27
import java.io.FileWriter;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    28
import java.util.HashMap;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    29
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    30
/**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    31
 * One individual test case.  This class also defines a builder, which
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    32
 * can be used to build up cases.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    33
 */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    34
public class SelectionResolutionTestCase {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    35
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    36
    public enum InvokeInstruction {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    37
        INVOKESTATIC,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    38
        INVOKESPECIAL,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    39
        INVOKEINTERFACE,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    40
        INVOKEVIRTUAL;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    41
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    42
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    43
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    44
     * The class data (includes interface data).
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    45
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    46
    public final HashMap<Integer, ClassData> classdata;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    47
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    48
     * The hierarchy shape.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    49
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    50
    public final HierarchyShape hier;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    51
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    52
     * The invoke instruction to use.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    53
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    54
    public final InvokeInstruction invoke;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    55
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    56
     * Which class is the methodref (or interface methodref).
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    57
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    58
    public final int methodref;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    59
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    60
     * Which class is the objectref.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    61
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    62
    public final int objectref;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    63
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    64
     * Which class is the callsite (this must be a class, not an interface.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    65
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    66
    public final int callsite;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    67
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    68
     * The expected result.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    69
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    70
    public final Result result;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    71
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    72
    private SelectionResolutionTestCase(final HashMap<Integer, ClassData> classdata,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    73
                                        final HierarchyShape hier,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    74
                                        final InvokeInstruction invoke,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    75
                                        final int methodref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    76
                                        final int objectref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    77
                                        final int callsite,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    78
                                        final int expected) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    79
        this.classdata = classdata;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    80
        this.hier = hier;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    81
        this.invoke = invoke;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    82
        this.methodref = methodref;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    83
        this.objectref = objectref;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    84
        this.callsite = callsite;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    85
        this.result = Result.is(expected);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    86
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    87
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    88
    private SelectionResolutionTestCase(final HashMap<Integer, ClassData> classdata,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    89
                                        final HierarchyShape hier,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    90
                                        final InvokeInstruction invoke,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    91
                                        final int methodref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    92
                                        final int objectref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    93
                                        final int callsite,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    94
                                        final Result result) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    95
        this.classdata = classdata;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    96
        this.hier = hier;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    97
        this.invoke = invoke;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    98
        this.methodref = methodref;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    99
        this.objectref = objectref;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   100
        this.callsite = callsite;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   101
        this.result = result;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   102
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   103
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   104
    private static int currError = 0;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   105
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   106
    private String dumpClasses(final ClassConstruct[] classes)
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   107
        throws Exception {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   108
        final String errorDirName = "error_" + currError++;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   109
        final File errorDir = new File(errorDirName);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   110
        errorDir.mkdirs();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   111
        for (int i = 0; i < classes.length; i++) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   112
            classes[i].writeClass(errorDir);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   113
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   114
        try (final FileWriter fos =
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   115
             new FileWriter(new File(errorDir, "description.txt"))) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   116
            fos.write(this.toString());
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   117
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   118
        return errorDirName;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   119
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   120
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   121
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   122
     * Run this case, return an error message, or null.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   123
     *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   124
     * @return An error message, or null if the case succeeded.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   125
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   126
    public String run() {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   127
        /* Uncomment this line to print EVERY case */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   128
        //System.err.println("Running\n" + this);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   129
        final ClassBuilder builder =
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   130
            new ClassBuilder(this, ClassBuilder.ExecutionMode.DIRECT);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   131
        try {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   132
            final ByteCodeClassLoader bcl = new ByteCodeClassLoader();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   133
            final ClassConstruct[] classes = builder.build();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   134
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   135
            try {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   136
                bcl.addClasses(classes);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   137
                bcl.loadAll();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   138
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   139
                // Grab the callsite class.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   140
                final Class testclass =
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   141
                    bcl.findClass(builder.getCallsiteClass().getDottedName());
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   142
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   143
                // Get the 'test' method out of it and call it.  The
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   144
                // return value tess which class that got selected.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   145
                final java.lang.reflect.Method method =
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   146
                    testclass.getDeclaredMethod("test");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   147
                final int actual = (Integer) method.invoke(null);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   148
                // Check the result.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   149
                if (!result.complyWith(actual)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   150
                    final String dump = dumpClasses(classes);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   151
                    return "Failed:\n" + this + "\nExpected " + result + " got " + actual + "\nClasses written to " + dump;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   152
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   153
            } catch (Throwable t) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   154
                // This catch block is handling exceptions that we
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   155
                // might expect to see.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   156
                final Throwable actual = t.getCause();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   157
                if (actual == null) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   158
                    final String dump = dumpClasses(classes);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   159
                    System.err.println("Unexpected exception in test\n" + this + "\nClasses written to " + dump);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   160
                    throw t;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   161
                } else if (result == null) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   162
                    final String dump = dumpClasses(classes);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   163
                    return "Failed:\n" + this + "\nUnexpected exception " + actual + "\nClasses written to " + dump;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   164
                } else if (!result.complyWith(actual)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   165
                    final String dump = dumpClasses(classes);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   166
                    return "Failed:\n" + this + "\nExpected " + this.result + " got " + actual + "\nClasses written to " + dump;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   167
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   168
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   169
        } catch(Throwable e) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   170
            throw new RuntimeException(e);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   171
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   172
        return null;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   173
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   174
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   175
    private static void addPackage(final StringBuilder sb,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   176
                                  final ClassData cd) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   177
        switch (cd.packageId) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   178
        case SAME: sb.append("Same."); break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   179
        case DIFFERENT: sb.append("Different."); break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   180
        case OTHER: sb.append("Other."); break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   181
        case PLACEHOLDER: sb.append("_."); break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   182
        default: throw new RuntimeException("Impossible case");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   183
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   184
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   185
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   186
    public String toString() {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   187
        final StringBuilder sb = new StringBuilder();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   188
        //sb.append("hierarchy:\n" + hier + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   189
        sb.append("invoke:    " + invoke + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   190
        if (methodref != -1) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   191
            if (hier.isClass(methodref)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   192
                sb.append("methodref: C" + methodref + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   193
            } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   194
                sb.append("methodref: I" + methodref + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   195
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   196
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   197
        if (objectref != -1) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   198
            if (hier.isClass(objectref)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   199
                sb.append("objectref: C" + objectref + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   200
            } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   201
                sb.append("objectref: I" + objectref + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   202
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   203
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   204
        if (callsite != -1) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   205
            if (hier.isClass(callsite)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   206
                sb.append("callsite: C" + callsite + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   207
            } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   208
                sb.append("callsite: I" + callsite + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   209
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   210
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   211
        sb.append("result: " + result + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   212
        sb.append("classes:\n\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   213
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   214
        for(int i = 0; classdata.containsKey(i); i++) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   215
            final ClassData cd = classdata.get(i);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   216
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   217
            if (hier.isClass(i)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   218
                sb.append("class ");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   219
                addPackage(sb, cd);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   220
                sb.append("C" + i);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   221
            } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   222
                sb.append("interface ");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   223
                addPackage(sb, cd);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   224
                sb.append("I" + i);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   225
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   226
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   227
            boolean first = true;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   228
            for(final int j : hier.classes()) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   229
                if (hier.inherits(i, j)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   230
                    if (first) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   231
                        sb.append(" extends C" + j);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   232
                    } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   233
                        sb.append(", C" + j);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   234
                    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   235
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   236
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   237
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   238
            first = true;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   239
            for(final int j : hier.interfaces()) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   240
                if (hier.inherits(i, j)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   241
                    if (first) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   242
                        sb.append(" implements I" + j);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   243
                    } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   244
                        sb.append(", I" + j);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   245
                    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   246
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   247
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   248
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   249
            sb.append(cd);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   250
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   251
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   252
        return sb.toString();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   253
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   254
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   255
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   256
     * A builder, facilitating building up test cases.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   257
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   258
    public static class Builder {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   259
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   260
         * A map from class (or interface) id's to ClassDatas
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   261
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   262
        public final HashMap<Integer, ClassData> classdata;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   263
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   264
         * The hierarchy shape.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   265
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   266
        public final HierarchyShape hier;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   267
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   268
         * Which invoke instruction to use.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   269
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   270
        public InvokeInstruction invoke;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   271
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   272
         * The id of the methodref (or interface methodref).
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   273
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   274
        public int methodref = -1;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   275
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   276
         * The id of the object ref.  Note that for the generator
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   277
         * framework to work, this must be set to something.  If an
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   278
         * objectref isn't used, just set it to the methodref.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   279
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   280
        public int objectref = -1;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   281
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   282
         * The id of the callsite.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   283
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   284
        public int callsite = -1;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   285
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   286
         * The id of the expected result.  This is used to store the
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   287
         * expected resolution result.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   288
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   289
        public int expected;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   290
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   291
         * The expected result.  This needs to be set before the final
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   292
         * test case is built.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   293
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   294
        public Result result;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   295
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   296
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   297
         * Create an empty Builder object.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   298
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   299
        public Builder() {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   300
            classdata = new HashMap<>();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   301
            hier = new HierarchyShape();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   302
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   303
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   304
        private Builder(final HashMap<Integer, ClassData> classdata,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   305
                        final HierarchyShape hier,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   306
                        final InvokeInstruction invoke,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   307
                        final int methodref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   308
                        final int objectref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   309
                        final int callsite,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   310
                        final int expected,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   311
                        final Result result) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   312
            this.classdata = classdata;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   313
            this.hier = hier;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   314
            this.invoke = invoke;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   315
            this.methodref = methodref;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   316
            this.objectref = objectref;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   317
            this.callsite = callsite;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   318
            this.expected = expected;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   319
            this.result = result;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   320
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   321
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   322
        private Builder(final Builder other) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   323
            this((HashMap<Integer, ClassData>) other.classdata.clone(),
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   324
                 other.hier.copy(), other.invoke, other.methodref, other.objectref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   325
                 other.callsite, other.expected, other.result);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   326
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   327
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   328
        public SelectionResolutionTestCase build() {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   329
            if (result != null) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   330
                return new SelectionResolutionTestCase(classdata, hier, invoke,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   331
                                                       methodref, objectref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   332
                                                       callsite, result);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   333
            } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   334
                return new SelectionResolutionTestCase(classdata, hier, invoke,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   335
                                                       methodref, objectref,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   336
                                                       callsite, expected);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   337
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   338
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   339
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   340
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   341
         * Set the expected result.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   342
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   343
        public void setResult(final Result result) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   344
            this.result = result;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   345
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   346
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   347
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   348
         * Add a class, and return its id.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   349
         *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   350
         * @return The new class' id.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   351
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   352
        public int addClass(final ClassData data) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   353
            final int id = hier.addClass();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   354
            classdata.put(id, data);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   355
            return id;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   356
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   357
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   358
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   359
         * Add an interface, and return its id.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   360
         *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   361
         * @return The new class' id.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   362
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   363
        public int addInterface(final ClassData data) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   364
            final int id = hier.addInterface();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   365
            classdata.put(id, data);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   366
            return id;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   367
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   368
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   369
        /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   370
         * Make a copy of this builder.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   371
         */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   372
        public Builder copy() {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   373
            return new Builder(this);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   374
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   375
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   376
        public String toString() {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   377
            final StringBuilder sb = new StringBuilder();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   378
            //sb.append("hierarchy:\n" + hier + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   379
            sb.append("invoke:    " + invoke + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   380
            if (methodref != -1) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   381
                if (hier.isClass(methodref)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   382
                    sb.append("methodref: C" + methodref + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   383
                } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   384
                    sb.append("methodref: I" + methodref + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   385
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   386
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   387
            if (objectref != -1) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   388
                if (hier.isClass(objectref)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   389
                    sb.append("objectref: C" + objectref + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   390
                } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   391
                    sb.append("objectref: I" + objectref + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   392
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   393
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   394
            if (callsite != -1) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   395
                if (hier.isClass(callsite)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   396
                    sb.append("callsite: C" + callsite + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   397
                } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   398
                    sb.append("callsite: I" + callsite + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   399
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   400
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   401
            if (expected != -1) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   402
                if (hier.isClass(expected)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   403
                    sb.append("expected: C" + expected + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   404
                } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   405
                    sb.append("expected: I" + expected + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   406
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   407
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   408
            sb.append("result: " + result + "\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   409
            sb.append("classes:\n\n");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   410
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   411
            for(int i = 0; classdata.containsKey(i); i++) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   412
                final ClassData cd = classdata.get(i);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   413
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   414
                if (hier.isClass(i)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   415
                    sb.append("class ");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   416
                    addPackage(sb, cd);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   417
                    sb.append("C" + i);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   418
                } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   419
                    sb.append("interface ");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   420
                    addPackage(sb, cd);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   421
                    sb.append("I" + i);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   422
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   423
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   424
                boolean first = true;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   425
                for(final int j : hier.classes()) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   426
                    if (hier.inherits(i, j)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   427
                        if (first) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   428
                            sb.append(" extends C" + j);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   429
                        } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   430
                            sb.append(", C" + j);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   431
                        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   432
                    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   433
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   434
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   435
                first = true;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   436
                for(final int j : hier.interfaces()) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   437
                    if (hier.inherits(i, j)) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   438
                        if (first) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   439
                            sb.append(" implements I" + j);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   440
                        } else {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   441
                            sb.append(", I" + j);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   442
                        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   443
                    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   444
                }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   445
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   446
                sb.append(cd);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   447
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   448
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   449
            return sb.toString();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   450
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   451
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   452
}