1 /*
   2  * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18 *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @summary Test of method selection and resolution cases that
  27  * generate AbstractMethodErrorTest
  28  * @modules java.base/jdk.internal.org.objectweb.asm
  29  * @library /runtime/SelectionResolution/classes
  30  * @build selectionresolution.*
  31  * @run main/othervm/timeout=300 -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies AbstractMethodErrorTest
  32  */
  33 
  34 import java.util.Arrays;
  35 import java.util.Collection;
  36 import java.util.EnumSet;
  37 import selectionresolution.ClassData;
  38 import selectionresolution.MethodData;
  39 import selectionresolution.Result;
  40 import selectionresolution.SelectionResolutionTest;
  41 import selectionresolution.SelectionResolutionTestCase;
  42 import selectionresolution.Template;
  43 
  44 public class AbstractMethodErrorTest extends SelectionResolutionTest {
  45 
  46     private static final SelectionResolutionTestCase.Builder initBuilder =
  47         new SelectionResolutionTestCase.Builder();
  48 
  49     static {
  50         initBuilder.setResult(Result.AME);
  51     }
  52 
  53     private static final Collection<TestGroup> testgroups =
  54         Arrays.asList(
  55                 /* invokevirtual tests */
  56                 /* Group 63: callsite = methodref = expected */
  57                 new TestGroup.Simple(initBuilder,
  58                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
  59                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
  60                                              EnumSet.of(MethodData.Access.PUBLIC,
  61                                                         MethodData.Access.PACKAGE,
  62                                                         MethodData.Access.PROTECTED,
  63                                                         MethodData.Access.PRIVATE),
  64                                              EnumSet.of(MethodData.Context.ABSTRACT),
  65                                              EnumSet.of(ClassData.Package.SAME)),
  66                         Template.MethodrefEqualsExpected,
  67                         Template.ReabstractExpectedClass,
  68                         Template.CallsiteEqualsMethodref,
  69                         Template.MethodrefSelectionResolvedIsClass),
  70                 /* Group 64: callsite = methodref, methodref != expected,
  71                  * expected is class, expected and callsite in the same package
  72                  */
  73                 new TestGroup.Simple(initBuilder,
  74                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
  75                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
  76                                              EnumSet.of(MethodData.Access.PUBLIC,
  77                                                         MethodData.Access.PROTECTED),
  78                                              EnumSet.of(MethodData.Context.ABSTRACT),
  79                                              EnumSet.of(ClassData.Package.SAME)),
  80                         Template.MethodrefNotEqualsExpectedClass,
  81                         Template.ReabstractExpectedClass,
  82                         Template.CallsiteEqualsMethodref,
  83                         Template.MethodrefSelectionResolvedIsClass),
  84                 /* Group 65: callsite = methodref = resolved, possibly
  85                  * skip different package in selection.
  86                  */
  87                 new TestGroup.Simple(initBuilder,
  88                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
  89                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
  90                                              EnumSet.of(MethodData.Access.PACKAGE),
  91                                              EnumSet.of(MethodData.Context.ABSTRACT),
  92                                              EnumSet.of(ClassData.Package.SAME)),
  93                         Template.MethodrefNotEqualsExpectedClass,
  94                         Template.ReabstractExpectedClass,
  95                         Template.CallsiteEqualsMethodref,
  96                         Template.MethodrefSelectionPackageSkipNoOverride),
  97                 /* Group 66: callsite = methodref, methodref != expected,
  98                  * expected is interface, expected and callsite in the same package
  99                  */
 100                 new TestGroup.Simple(initBuilder,
 101                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 102                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 103                                              EnumSet.of(MethodData.Access.PUBLIC),
 104                                              EnumSet.of(MethodData.Context.ABSTRACT),
 105                                              EnumSet.of(ClassData.Package.SAME)),
 106                         Template.MethodrefNotEqualsExpectedIface,
 107                         Template.ReabstractExpectedIface,
 108                         Template.CallsiteEqualsMethodref,
 109                         Template.MethodrefSelectionResolvedIsIface),
 110                 /* Group 67: callsite :> methodref, methodref = expected,
 111                  * expected is class, expected and callsite in the same package
 112                  */
 113                 new TestGroup.Simple(initBuilder,
 114                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 115                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 116                                              EnumSet.of(MethodData.Access.PUBLIC,
 117                                                         MethodData.Access.PROTECTED),
 118                                              EnumSet.of(MethodData.Context.ABSTRACT),
 119                                              EnumSet.of(ClassData.Package.SAME)),
 120                         Template.MethodrefEqualsExpected,
 121                         Template.ReabstractExpectedClass,
 122                         Template.CallsiteSubclassMethodref,
 123                         Template.MethodrefSelectionResolvedIsClass),
 124                 /* Group 68: callsite :> methodref, methodref = expected,
 125                  * possibly skip different package in selection.
 126                  */
 127                 new TestGroup.Simple(initBuilder,
 128                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 129                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 130                                              EnumSet.of(MethodData.Access.PACKAGE),
 131                                              EnumSet.of(MethodData.Context.ABSTRACT),
 132                                              EnumSet.of(ClassData.Package.SAME)),
 133                         Template.MethodrefEqualsExpected,
 134                         Template.ReabstractExpectedClass,
 135                         Template.CallsiteSubclassMethodref,
 136                         Template.MethodrefSelectionPackageSkipNoOverride),
 137                 /* Group 69: callsite :> methodref, methodref != expected,
 138                  * expected is class, expected and callsite in the same package
 139                  */
 140                 new TestGroup.Simple(initBuilder,
 141                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 142                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 143                                              EnumSet.of(MethodData.Access.PUBLIC,
 144                                                         MethodData.Access.PACKAGE,
 145                                                         MethodData.Access.PROTECTED),
 146                                              EnumSet.of(MethodData.Context.ABSTRACT),
 147                                              EnumSet.of(ClassData.Package.SAME)),
 148                         Template.MethodrefNotEqualsExpectedClass,
 149                         Template.ReabstractExpectedClass,
 150                         Template.CallsiteSubclassMethodref,
 151                         Template.MethodrefSelectionResolvedIsClass),
 152                 /* Group 70: callsite :> methodref, methodref != expected,
 153                  * possibly skip different package in selection
 154                  */
 155                 new TestGroup.Simple(initBuilder,
 156                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 157                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 158                                              EnumSet.of(MethodData.Access.PACKAGE),
 159                                              EnumSet.of(MethodData.Context.ABSTRACT),
 160                                              EnumSet.of(ClassData.Package.SAME)),
 161                         Template.MethodrefNotEqualsExpectedClass,
 162                         Template.ReabstractExpectedClass,
 163                         Template.CallsiteSubclassMethodref,
 164                         Template.MethodrefSelectionPackageSkipNoOverride),
 165                 /* Group 71: callsite :> methodref, methodref != expected,
 166                  * expected is interface, expected and callsite in the same package
 167                  */
 168                 new TestGroup.Simple(initBuilder,
 169                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 170                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 171                                              EnumSet.of(MethodData.Access.PUBLIC),
 172                                              EnumSet.of(MethodData.Context.ABSTRACT),
 173                                              EnumSet.of(ClassData.Package.SAME)),
 174                         Template.MethodrefNotEqualsExpectedIface,
 175                         Template.ReabstractExpectedIface,
 176                         Template.CallsiteSubclassMethodref,
 177                         Template.MethodrefSelectionResolvedIsIface),
 178                 /* Group 72: callsite unrelated to methodref, methodref = expected,
 179                  * expected is class, expected and callsite in the same package
 180                  */
 181                 new TestGroup.Simple(initBuilder,
 182                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 183                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 184                                              EnumSet.of(MethodData.Access.PUBLIC),
 185                                              EnumSet.of(MethodData.Context.ABSTRACT),
 186                                              EnumSet.of(ClassData.Package.SAME)),
 187                         Template.MethodrefEqualsExpected,
 188                         Template.ReabstractExpectedClass,
 189                         Template.CallsiteUnrelatedToMethodref,
 190                         Template.MethodrefSelectionResolvedIsClass),
 191                 /* Group 73: callsite unrelated to methodref, methodref = expected,
 192                  * expected is class, expected and callsite in the same package
 193                  */
 194                 new TestGroup.Simple(initBuilder,
 195                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 196                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 197                                              EnumSet.of(MethodData.Access.PACKAGE),
 198                                              EnumSet.of(MethodData.Context.ABSTRACT),
 199                                              EnumSet.of(ClassData.Package.SAME)),
 200                         Template.MethodrefEqualsExpected,
 201                         Template.ReabstractExpectedClass,
 202                         Template.CallsiteUnrelatedToMethodref,
 203                         Template.MethodrefSelectionPackageSkipNoOverride),
 204                 /* Group 74: callsite unrelated to methodref, methodref != expected,
 205                  * expected is class, expected and callsite in the same package
 206                  */
 207                 new TestGroup.Simple(initBuilder,
 208                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 209                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 210                                              EnumSet.of(MethodData.Access.PUBLIC),
 211                                              EnumSet.of(MethodData.Context.ABSTRACT),
 212                                              EnumSet.of(ClassData.Package.SAME)),
 213                         Template.MethodrefNotEqualsExpectedClass,
 214                         Template.ReabstractExpectedClass,
 215                         Template.CallsiteUnrelatedToMethodref,
 216                         Template.MethodrefSelectionResolvedIsClass),
 217                 /* Group 75: callsite unrelated to methodref, methodref != expected,
 218                  * expected is class, expected and callsite in the same package
 219                  */
 220                 new TestGroup.Simple(initBuilder,
 221                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 222                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 223                                              EnumSet.of(MethodData.Access.PACKAGE),
 224                                              EnumSet.of(MethodData.Context.ABSTRACT),
 225                                              EnumSet.of(ClassData.Package.SAME)),
 226                         Template.MethodrefNotEqualsExpectedClass,
 227                         Template.ReabstractExpectedClass,
 228                         Template.CallsiteUnrelatedToMethodref,
 229                         Template.MethodrefSelectionPackageSkipNoOverride),
 230                 /* Group 76: callsite unrelated to methodref, methodref != expected,
 231                  * expected is interface, expected and callsite in the same package
 232                  */
 233                 new TestGroup.Simple(initBuilder,
 234                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 235                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 236                                              EnumSet.of(MethodData.Access.PUBLIC),
 237                                              EnumSet.of(MethodData.Context.ABSTRACT),
 238                                              EnumSet.of(ClassData.Package.SAME)),
 239                         Template.MethodrefNotEqualsExpectedIface,
 240                         Template.ReabstractExpectedIface,
 241                         Template.CallsiteUnrelatedToMethodref,
 242                         Template.MethodrefSelectionResolvedIsIface),
 243                 /* Group 77: callsite = methodref, methodref != expected,
 244                  * expected is class, expected and callsite not in the same package
 245                  */
 246                 new TestGroup.Simple(initBuilder,
 247                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 248                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 249                                              EnumSet.of(MethodData.Access.PUBLIC),
 250                                              EnumSet.of(MethodData.Context.ABSTRACT),
 251                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 252                         Template.MethodrefNotEqualsExpectedClass,
 253                         Template.ReabstractExpectedClass,
 254                         Template.CallsiteEqualsMethodref,
 255                         Template.MethodrefSelectionResolvedIsClass),
 256                 /* Group 78: callsite = methodref, methodref != expected,
 257                  * expected is interface, expected and callsite not in the same package
 258                  */
 259                 new TestGroup.Simple(initBuilder,
 260                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 261                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 262                                              EnumSet.of(MethodData.Access.PUBLIC),
 263                                              EnumSet.of(MethodData.Context.ABSTRACT),
 264                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 265                         Template.MethodrefNotEqualsExpectedIface,
 266                         Template.ReabstractExpectedIface,
 267                         Template.CallsiteEqualsMethodref,
 268                         Template.MethodrefSelectionResolvedIsIface),
 269                 /* Group 79: callsite :> methodref, methodref = expected,
 270                  * expected is class, expected and callsite not in the same package
 271                  */
 272                 new TestGroup.Simple(initBuilder,
 273                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 274                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 275                                              EnumSet.of(MethodData.Access.PUBLIC),
 276                                              EnumSet.of(MethodData.Context.ABSTRACT),
 277                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 278                         Template.MethodrefEqualsExpected,
 279                         Template.ReabstractExpectedClass,
 280                         Template.CallsiteSubclassMethodref,
 281                         Template.MethodrefSelectionResolvedIsClass),
 282 
 283                 /* Group 80: callsite :> methodref, methodref != expected,
 284                  * expected is class, expected and callsite not in the same package
 285                  */
 286                 new TestGroup.Simple(initBuilder,
 287                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 288                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 289                                              EnumSet.of(MethodData.Access.PUBLIC),
 290                                              EnumSet.of(MethodData.Context.ABSTRACT),
 291                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 292                         Template.MethodrefNotEqualsExpectedClass,
 293                         Template.ReabstractExpectedClass,
 294                         Template.CallsiteSubclassMethodref,
 295                         Template.MethodrefSelectionResolvedIsClass),
 296                 /* Group 81: callsite :> methodref, methodref != expected,
 297                  * expected is interface, expected and callsite not in the same package
 298                  */
 299                 new TestGroup.Simple(initBuilder,
 300                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 301                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 302                                              EnumSet.of(MethodData.Access.PUBLIC),
 303                                              EnumSet.of(MethodData.Context.ABSTRACT),
 304                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 305                         Template.MethodrefNotEqualsExpectedIface,
 306                         Template.ReabstractExpectedIface,
 307                         Template.CallsiteSubclassMethodref,
 308                         Template.MethodrefSelectionResolvedIsIface),
 309                 /* Group 82: callsite unrelated to methodref, methodref = expected,
 310                  * expected is class, expected and callsite not in the same package
 311                  */
 312                 new TestGroup.Simple(initBuilder,
 313                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 314                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 315                                              EnumSet.of(MethodData.Access.PUBLIC),
 316                                              EnumSet.of(MethodData.Context.ABSTRACT),
 317                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 318                         Template.MethodrefEqualsExpected,
 319                         Template.ReabstractExpectedClass,
 320                         Template.CallsiteUnrelatedToMethodref,
 321                         Template.MethodrefSelectionResolvedIsClass),
 322                 /* Group 83: callsite unrelated to methodref, methodref != expected,
 323                  * expected is class, expected and callsite not in the same package
 324                  */
 325                 new TestGroup.Simple(initBuilder,
 326                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 327                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 328                                              EnumSet.of(MethodData.Access.PUBLIC),
 329                                              EnumSet.of(MethodData.Context.ABSTRACT),
 330                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 331                         Template.MethodrefNotEqualsExpectedClass,
 332                         Template.ReabstractExpectedClass,
 333                         Template.CallsiteUnrelatedToMethodref,
 334                         Template.MethodrefSelectionResolvedIsClass),
 335                 /* Group 84: callsite unrelated to methodref, methodref != expected,
 336                  * expected is interface, expected and callsite not in the same package
 337                  */
 338                 new TestGroup.Simple(initBuilder,
 339                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 340                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 341                                              EnumSet.of(MethodData.Access.PUBLIC),
 342                                              EnumSet.of(MethodData.Context.ABSTRACT),
 343                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 344                         Template.MethodrefNotEqualsExpectedIface,
 345                         Template.ReabstractExpectedIface,
 346                         Template.CallsiteUnrelatedToMethodref,
 347                         Template.MethodrefSelectionResolvedIsIface),
 348 
 349                 /* Reabstraction during selection */
 350                 /* Group 85: callsite = methodref = expected */
 351                 new TestGroup.Simple(initBuilder,
 352                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 353                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 354                                              EnumSet.of(MethodData.Access.PROTECTED,
 355                                                         MethodData.Access.PACKAGE,
 356                                                         MethodData.Access.PUBLIC),
 357                                              EnumSet.of(MethodData.Context.INSTANCE),
 358                                              EnumSet.of(ClassData.Package.SAME)),
 359                         Template.MethodrefEqualsExpected,
 360                         Template.CallsiteEqualsMethodref,
 361                         Template.ReabstractMethodrefResolvedClass),
 362                 /* Group 86: callsite = methodref, methodref != expected,
 363                  * expected is class, expected and callsite in the same package
 364                  */
 365                 new TestGroup.Simple(initBuilder,
 366                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 367                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 368                                              EnumSet.of(MethodData.Access.PUBLIC,
 369                                                         MethodData.Access.PACKAGE,
 370                                                         MethodData.Access.PROTECTED),
 371                                              EnumSet.of(MethodData.Context.INSTANCE),
 372                                              EnumSet.of(ClassData.Package.SAME)),
 373                         Template.MethodrefNotEqualsExpectedClass,
 374                         Template.CallsiteEqualsMethodref,
 375                         Template.ReabstractMethodrefResolvedClass),
 376                 /* Group 87: callsite = methodref, methodref != expected,
 377                  * expected is interface, expected and callsite in the same package
 378                  */
 379                 new TestGroup.Simple(initBuilder,
 380                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 381                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 382                                              EnumSet.of(MethodData.Access.PUBLIC),
 383                                              EnumSet.of(MethodData.Context.INSTANCE),
 384                                              EnumSet.of(ClassData.Package.SAME)),
 385                         Template.MethodrefNotEqualsExpectedIface,
 386                         Template.CallsiteEqualsMethodref,
 387                         Template.ReabstractMethodrefResolvedIface),
 388                 /* Group 88: callsite :> methodref, methodref = expected,
 389                  * expected is class, expected and callsite in the same package
 390                  */
 391                 new TestGroup.Simple(initBuilder,
 392                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 393                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 394                                              EnumSet.of(MethodData.Access.PUBLIC,
 395                                                         MethodData.Access.PACKAGE,
 396                                                         MethodData.Access.PROTECTED),
 397                                              EnumSet.of(MethodData.Context.INSTANCE),
 398                                              EnumSet.of(ClassData.Package.SAME)),
 399                         Template.MethodrefEqualsExpected,
 400                         Template.CallsiteSubclassMethodref,
 401                         Template.ReabstractMethodrefResolvedClass),
 402                 /* Group 89: callsite :> methodref, methodref != expected,
 403                  * expected is class, expected and callsite in the same package
 404                  */
 405                 new TestGroup.Simple(initBuilder,
 406                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 407                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 408                                              EnumSet.of(MethodData.Access.PUBLIC,
 409                                                         MethodData.Access.PACKAGE,
 410                                                         MethodData.Access.PROTECTED),
 411                                              EnumSet.of(MethodData.Context.INSTANCE),
 412                                              EnumSet.of(ClassData.Package.SAME)),
 413                         Template.MethodrefNotEqualsExpectedClass,
 414                         Template.CallsiteSubclassMethodref,
 415                         Template.ReabstractMethodrefResolvedClass),
 416                 /* Group 90: callsite :> methodref, methodref != expected,
 417                  * expected is interface, expected and callsite in the same package
 418                  */
 419                 new TestGroup.Simple(initBuilder,
 420                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 421                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 422                                              EnumSet.of(MethodData.Access.PUBLIC),
 423                                              EnumSet.of(MethodData.Context.INSTANCE),
 424                                              EnumSet.of(ClassData.Package.SAME)),
 425                         Template.MethodrefNotEqualsExpectedIface,
 426                         Template.CallsiteSubclassMethodref,
 427                         Template.ReabstractMethodrefResolvedIface),
 428                 /* Group 91: callsite unrelated to methodref, methodref = expected,
 429                  * expected is class, expected and callsite in the same package
 430                  */
 431                 new TestGroup.Simple(initBuilder,
 432                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 433                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 434                                              EnumSet.of(MethodData.Access.PUBLIC,
 435                                                         MethodData.Access.PACKAGE),
 436                                              EnumSet.of(MethodData.Context.INSTANCE),
 437                                              EnumSet.of(ClassData.Package.SAME)),
 438                         Template.MethodrefEqualsExpected,
 439                         Template.CallsiteUnrelatedToMethodref,
 440                         Template.ReabstractMethodrefResolvedClass),
 441                 /* Group 92: callsite unrelated to methodref, methodref != expected,
 442                  * expected is class, expected and callsite in the same package
 443                  */
 444                 new TestGroup.Simple(initBuilder,
 445                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 446                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 447                                              EnumSet.of(MethodData.Access.PUBLIC,
 448                                                         MethodData.Access.PACKAGE),
 449                                              EnumSet.of(MethodData.Context.INSTANCE),
 450                                              EnumSet.of(ClassData.Package.SAME)),
 451                         Template.MethodrefNotEqualsExpectedClass,
 452                         Template.CallsiteUnrelatedToMethodref,
 453                         Template.ReabstractMethodrefResolvedClass),
 454                 /* Group 93: callsite unrelated to methodref, methodref != expected,
 455                  * expected is interface, expected and callsite in the same package
 456                  */
 457                 new TestGroup.Simple(initBuilder,
 458                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 459                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 460                                              EnumSet.of(MethodData.Access.PUBLIC),
 461                                              EnumSet.of(MethodData.Context.INSTANCE),
 462                                              EnumSet.of(ClassData.Package.SAME)),
 463                         Template.MethodrefNotEqualsExpectedIface,
 464                         Template.CallsiteUnrelatedToMethodref,
 465                         Template.ReabstractMethodrefResolvedIface),
 466                 /* Group 94: callsite = methodref, methodref != expected,
 467                  * expected is class, expected and callsite not in the same package
 468                  */
 469                 new TestGroup.Simple(initBuilder,
 470                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 471                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 472                                              EnumSet.of(MethodData.Access.PUBLIC),
 473                                              EnumSet.of(MethodData.Context.INSTANCE),
 474                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 475                         Template.MethodrefNotEqualsExpectedClass,
 476                         Template.CallsiteEqualsMethodref,
 477                         Template.ReabstractMethodrefResolvedClass),
 478                 /* Group 95: callsite = methodref, methodref != expected,
 479                  * expected is interface, expected and callsite not in the same package
 480                  */
 481                 new TestGroup.Simple(initBuilder,
 482                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 483                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 484                                              EnumSet.of(MethodData.Access.PUBLIC),
 485                                              EnumSet.of(MethodData.Context.INSTANCE),
 486                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 487                         Template.MethodrefNotEqualsExpectedIface,
 488                         Template.CallsiteEqualsMethodref,
 489                         Template.ReabstractMethodrefResolvedIface),
 490                 /* Group 96: callsite :> methodref, methodref = expected,
 491                  * expected is class, expected and callsite not in the same package
 492                  */
 493                 new TestGroup.Simple(initBuilder,
 494                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 495                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 496                                              EnumSet.of(MethodData.Access.PUBLIC),
 497                                              EnumSet.of(MethodData.Context.INSTANCE),
 498                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 499                         Template.MethodrefEqualsExpected,
 500                         Template.CallsiteSubclassMethodref,
 501                         Template.ReabstractMethodrefResolvedClass),
 502 
 503                 /* Group 97: callsite :> methodref, methodref != expected,
 504                  * expected is class, expected and callsite not in the same package
 505                  */
 506                 new TestGroup.Simple(initBuilder,
 507                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 508                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 509                                              EnumSet.of(MethodData.Access.PUBLIC),
 510                                              EnumSet.of(MethodData.Context.INSTANCE),
 511                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 512                         Template.MethodrefNotEqualsExpectedClass,
 513                         Template.CallsiteSubclassMethodref,
 514                         Template.ReabstractMethodrefResolvedClass),
 515                 /* Group 98: callsite :> methodref, methodref != expected,
 516                  * expected is interface, expected and callsite not in the same package
 517                  */
 518                 new TestGroup.Simple(initBuilder,
 519                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 520                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 521                                              EnumSet.of(MethodData.Access.PUBLIC),
 522                                              EnumSet.of(MethodData.Context.INSTANCE),
 523                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 524                         Template.MethodrefNotEqualsExpectedIface,
 525                         Template.CallsiteSubclassMethodref,
 526                         Template.ReabstractMethodrefResolvedIface),
 527                 /* Group 99: callsite unrelated to methodref, methodref = expected,
 528                  * expected is class, expected and callsite not in the same package
 529                  */
 530                 new TestGroup.Simple(initBuilder,
 531                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 532                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 533                                              EnumSet.of(MethodData.Access.PUBLIC),
 534                                              EnumSet.of(MethodData.Context.INSTANCE),
 535                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 536                         Template.MethodrefEqualsExpected,
 537                         Template.CallsiteUnrelatedToMethodref,
 538                         Template.ReabstractMethodrefResolvedClass),
 539                 /* Group 100: callsite unrelated to methodref, methodref != expected,
 540                  * expected is class, expected and callsite not in the same package
 541                  */
 542                 new TestGroup.Simple(initBuilder,
 543                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 544                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 545                                              EnumSet.of(MethodData.Access.PUBLIC),
 546                                              EnumSet.of(MethodData.Context.INSTANCE),
 547                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 548                         Template.MethodrefNotEqualsExpectedClass,
 549                         Template.CallsiteUnrelatedToMethodref,
 550                         Template.ReabstractMethodrefResolvedClass),
 551                 /* Group 101: callsite unrelated to methodref, methodref != expected,
 552                  * expected is interface, expected and callsite not in the same package
 553                  */
 554                 new TestGroup.Simple(initBuilder,
 555                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 556                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 557                                              EnumSet.of(MethodData.Access.PUBLIC),
 558                                              EnumSet.of(MethodData.Context.INSTANCE),
 559                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 560                         Template.MethodrefNotEqualsExpectedIface,
 561                         Template.CallsiteUnrelatedToMethodref,
 562                         Template.ReabstractMethodrefResolvedIface),
 563 
 564                 /* invokeinterface */
 565                 /* Group 102: callsite = methodref = expected */
 566                 new TestGroup.Simple(initBuilder,
 567                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 568                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 569                                              EnumSet.of(MethodData.Access.PUBLIC),
 570                                              EnumSet.of(MethodData.Context.ABSTRACT),
 571                                              EnumSet.of(ClassData.Package.SAME)),
 572                         Template.MethodrefEqualsExpected,
 573                         Template.ReabstractExpectedIface,
 574                         Template.CallsiteEqualsMethodref,
 575                         Template.IfaceMethodrefSelection),
 576                 /* Group 103: callsite = methodref, methodref != expected,
 577                  */
 578                 new TestGroup.Simple(initBuilder,
 579                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 580                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 581                                              EnumSet.of(MethodData.Access.PUBLIC),
 582                                              EnumSet.of(MethodData.Context.ABSTRACT),
 583                                              EnumSet.of(ClassData.Package.SAME,
 584                                                         ClassData.Package.DIFFERENT)),
 585                         Template.IfaceMethodrefNotEqualsExpected,
 586                         Template.ReabstractExpectedIface,
 587                         Template.CallsiteEqualsMethodref,
 588                         Template.IfaceMethodrefSelection),
 589                 /* Group 104: callsite :> methodref, methodref = expected,
 590                  */
 591                 new TestGroup.Simple(initBuilder,
 592                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 593                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 594                                              EnumSet.of(MethodData.Access.PUBLIC),
 595                                              EnumSet.of(MethodData.Context.ABSTRACT),
 596                                              EnumSet.of(ClassData.Package.SAME,
 597                                                         ClassData.Package.DIFFERENT)),
 598                         Template.MethodrefEqualsExpected,
 599                         Template.ReabstractExpectedIface,
 600                         Template.CallsiteSubclassMethodref,
 601                         Template.IfaceMethodrefSelection),
 602                 /* Group 105: callsite :> methodref, methodref != expected,
 603                  */
 604                 new TestGroup.Simple(initBuilder,
 605                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 606                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 607                                              EnumSet.of(MethodData.Access.PUBLIC),
 608                                              EnumSet.of(MethodData.Context.ABSTRACT),
 609                                              EnumSet.of(ClassData.Package.SAME,
 610                                                         ClassData.Package.DIFFERENT)),
 611                         Template.IfaceMethodrefNotEqualsExpected,
 612                         Template.ReabstractExpectedIface,
 613                         Template.CallsiteSubclassMethodref,
 614                         Template.IfaceMethodrefSelection),
 615                 /* Group 106: callsite unrelated to methodref, methodref = expected,
 616                  */
 617                 new TestGroup.Simple(initBuilder,
 618                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 619                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 620                                              EnumSet.of(MethodData.Access.PUBLIC),
 621                                              EnumSet.of(MethodData.Context.ABSTRACT),
 622                                              EnumSet.of(ClassData.Package.SAME,
 623                                                         ClassData.Package.DIFFERENT)),
 624                         Template.MethodrefEqualsExpected,
 625                         Template.ReabstractExpectedIface,
 626                         Template.CallsiteUnrelatedToMethodref,
 627                         Template.IfaceMethodrefSelection),
 628                 /* Group 107: callsite unrelated to methodref, methodref != expected,
 629                  */
 630                 new TestGroup.Simple(initBuilder,
 631                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 632                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 633                                              EnumSet.of(MethodData.Access.PUBLIC),
 634                                              EnumSet.of(MethodData.Context.ABSTRACT),
 635                                              EnumSet.of(ClassData.Package.SAME,
 636                                                         ClassData.Package.DIFFERENT)),
 637                         Template.IfaceMethodrefNotEqualsExpected,
 638                         Template.ReabstractExpectedIface,
 639                         Template.CallsiteUnrelatedToMethodref,
 640                         Template.IfaceMethodrefSelection),
 641 
 642                 /* Reabstraction during selection */
 643                 /* Group 108: callsite = methodref = expected */
 644                 new TestGroup.Simple(initBuilder,
 645                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 646                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 647                                              EnumSet.of(MethodData.Access.PUBLIC),
 648                                              EnumSet.of(MethodData.Context.INSTANCE),
 649                                              EnumSet.of(ClassData.Package.SAME)),
 650                         Template.MethodrefEqualsExpected,
 651                         Template.CallsiteEqualsMethodref,
 652                         Template.ReabstractIfaceMethodrefResolved),
 653                 /* Group 109: callsite = methodref, methodref != expected,
 654                  */
 655                 new TestGroup.Simple(initBuilder,
 656                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 657                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 658                                              EnumSet.of(MethodData.Access.PUBLIC),
 659                                              EnumSet.of(MethodData.Context.INSTANCE),
 660                                              EnumSet.of(ClassData.Package.SAME,
 661                                                         ClassData.Package.DIFFERENT)),
 662                         Template.IfaceMethodrefNotEqualsExpected,
 663                         Template.CallsiteEqualsMethodref,
 664                         Template.ReabstractIfaceMethodrefResolved),
 665                 /* Group 110: callsite :> methodref, methodref = expected,
 666                  */
 667                 new TestGroup.Simple(initBuilder,
 668                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 669                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 670                                              EnumSet.of(MethodData.Access.PUBLIC),
 671                                              EnumSet.of(MethodData.Context.INSTANCE),
 672                                              EnumSet.of(ClassData.Package.SAME,
 673                                                         ClassData.Package.DIFFERENT)),
 674                         Template.MethodrefEqualsExpected,
 675                         Template.CallsiteSubclassMethodref,
 676                         Template.ReabstractIfaceMethodrefResolved),
 677                 /* Group 111: callsite :> methodref, methodref != expected,
 678                  */
 679                 new TestGroup.Simple(initBuilder,
 680                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 681                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 682                                              EnumSet.of(MethodData.Access.PUBLIC),
 683                                              EnumSet.of(MethodData.Context.INSTANCE),
 684                                              EnumSet.of(ClassData.Package.SAME,
 685                                                         ClassData.Package.DIFFERENT)),
 686                         Template.IfaceMethodrefNotEqualsExpected,
 687                         Template.CallsiteSubclassMethodref,
 688                         Template.ReabstractIfaceMethodrefResolved),
 689                 /* Group 112: callsite unrelated to methodref, methodref = expected,
 690                  */
 691                 new TestGroup.Simple(initBuilder,
 692                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 693                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 694                                              EnumSet.of(MethodData.Access.PUBLIC),
 695                                              EnumSet.of(MethodData.Context.INSTANCE),
 696                                              EnumSet.of(ClassData.Package.SAME,
 697                                                         ClassData.Package.DIFFERENT)),
 698                         Template.MethodrefEqualsExpected,
 699                         Template.CallsiteUnrelatedToMethodref,
 700                         Template.ReabstractIfaceMethodrefResolved),
 701                 /* Group 113: callsite unrelated to methodref, methodref != expected,
 702                  */
 703                 new TestGroup.Simple(initBuilder,
 704                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 705                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 706                                              EnumSet.of(MethodData.Access.PUBLIC),
 707                                              EnumSet.of(MethodData.Context.INSTANCE),
 708                                              EnumSet.of(ClassData.Package.SAME,
 709                                                         ClassData.Package.DIFFERENT)),
 710                         Template.IfaceMethodrefNotEqualsExpected,
 711                         Template.CallsiteUnrelatedToMethodref,
 712                         Template.ReabstractIfaceMethodrefResolved),
 713 
 714                 /* invokespecial tests */
 715                 /* Group 114: callsite = methodref = expected */
 716                 new TestGroup.Simple(initBuilder,
 717                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 718                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 719                                              EnumSet.of(MethodData.Access.PUBLIC,
 720                                                         MethodData.Access.PACKAGE,
 721                                                         MethodData.Access.PROTECTED,
 722                                                         MethodData.Access.PRIVATE),
 723                                              EnumSet.of(MethodData.Context.ABSTRACT),
 724                                              EnumSet.of(ClassData.Package.SAME)),
 725                         Template.MethodrefEqualsExpected,
 726                         Template.ReabstractExpectedClass,
 727                         Template.CallsiteEqualsMethodref,
 728                         Template.ObjectrefExactSubclassOfCallsite),
 729                 /* Group 115: callsite = methodref, methodref != expected,
 730                  * expected is class, expected and callsite in the same package
 731                  */
 732                 new TestGroup.Simple(initBuilder,
 733                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 734                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 735                                              EnumSet.of(MethodData.Access.PUBLIC,
 736                                                         MethodData.Access.PACKAGE,
 737                                                         MethodData.Access.PROTECTED),
 738                                              EnumSet.of(MethodData.Context.ABSTRACT),
 739                                              EnumSet.of(ClassData.Package.SAME)),
 740                         Template.MethodrefNotEqualsExpectedClass,
 741                         Template.ReabstractExpectedClass,
 742                         Template.CallsiteEqualsMethodref,
 743                         Template.ObjectrefExactSubclassOfCallsite),
 744                 /* Group 116: callsite = methodref, methodref != expected,
 745                  * expected is interface, expected and callsite in the same package
 746                  */
 747                 new TestGroup.Simple(initBuilder,
 748                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 749                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 750                                              EnumSet.of(MethodData.Access.PUBLIC),
 751                                              EnumSet.of(MethodData.Context.ABSTRACT),
 752                                              EnumSet.of(ClassData.Package.SAME)),
 753                         Template.MethodrefNotEqualsExpectedIface,
 754                         Template.ReabstractExpectedIface,
 755                         Template.CallsiteEqualsMethodref,
 756                         Template.ObjectrefExactSubclassOfCallsite),
 757                 /* Group 117: callsite :> methodref, methodref = expected,
 758                  * expected is class, expected and callsite in the same package
 759                  */
 760                 new TestGroup.Simple(initBuilder,
 761                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 762                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 763                                              EnumSet.of(MethodData.Access.PUBLIC,
 764                                                         MethodData.Access.PACKAGE,
 765                                                         MethodData.Access.PROTECTED),
 766                                              EnumSet.of(MethodData.Context.ABSTRACT),
 767                                              EnumSet.of(ClassData.Package.SAME)),
 768                         Template.MethodrefEqualsExpected,
 769                         Template.ReabstractExpectedClass,
 770                         Template.CallsiteSubclassMethodref,
 771                         Template.ObjectrefExactSubclassOfCallsite),
 772                 /* Group 118: callsite :> methodref, methodref != expected,
 773                  * expected is class, expected and callsite in the same package
 774                  */
 775                 new TestGroup.Simple(initBuilder,
 776                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 777                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 778                                              EnumSet.of(MethodData.Access.PUBLIC,
 779                                                         MethodData.Access.PACKAGE,
 780                                                         MethodData.Access.PROTECTED),
 781                                              EnumSet.of(MethodData.Context.ABSTRACT),
 782                                              EnumSet.of(ClassData.Package.SAME)),
 783                         Template.MethodrefNotEqualsExpectedClass,
 784                         Template.ReabstractExpectedClass,
 785                         Template.CallsiteSubclassMethodref,
 786                         Template.ObjectrefExactSubclassOfCallsite),
 787                 /* Group 119: callsite :> methodref, methodref != expected,
 788                  * expected is interface, expected and callsite in the same package
 789                  */
 790                 new TestGroup.Simple(initBuilder,
 791                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 792                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 793                                              EnumSet.of(MethodData.Access.PUBLIC),
 794                                              EnumSet.of(MethodData.Context.ABSTRACT),
 795                                              EnumSet.of(ClassData.Package.SAME)),
 796                         Template.MethodrefNotEqualsExpectedIface,
 797                         Template.ReabstractExpectedIface,
 798                         Template.CallsiteSubclassMethodref,
 799                         Template.ObjectrefExactSubclassOfCallsite),
 800                 /* Group 120: callsite = methodref, methodref != expected,
 801                  * expected is class, expected and callsite not in the same package
 802                  */
 803                 new TestGroup.Simple(initBuilder,
 804                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 805                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 806                                              EnumSet.of(MethodData.Access.PUBLIC),
 807                                              EnumSet.of(MethodData.Context.ABSTRACT),
 808                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 809                         Template.MethodrefNotEqualsExpectedClass,
 810                         Template.ReabstractExpectedClass,
 811                         Template.CallsiteEqualsMethodref,
 812                         Template.ObjectrefExactSubclassOfCallsite),
 813                 /* Group 121: callsite = methodref, methodref != expected,
 814                  * expected is interface, expected and callsite not in the same package
 815                  */
 816                 new TestGroup.Simple(initBuilder,
 817                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 818                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 819                                              EnumSet.of(MethodData.Access.PUBLIC),
 820                                              EnumSet.of(MethodData.Context.ABSTRACT),
 821                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 822                         Template.MethodrefNotEqualsExpectedIface,
 823                         Template.ReabstractExpectedIface,
 824                         Template.CallsiteEqualsMethodref,
 825                         Template.ObjectrefExactSubclassOfCallsite),
 826                 /* Group 122: callsite :> methodref, methodref = expected,
 827                  * expected is class, expected and callsite not in the same package
 828                  */
 829                 new TestGroup.Simple(initBuilder,
 830                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 831                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 832                                              EnumSet.of(MethodData.Access.PUBLIC),
 833                                              EnumSet.of(MethodData.Context.ABSTRACT),
 834                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 835                         Template.MethodrefEqualsExpected,
 836                         Template.ReabstractExpectedClass,
 837                         Template.CallsiteSubclassMethodref,
 838                         Template.ObjectrefExactSubclassOfCallsite),
 839 
 840                 /* Group 123: callsite :> methodref, methodref != expected,
 841                  * expected is class, expected and callsite not in the same package
 842                  */
 843                 new TestGroup.Simple(initBuilder,
 844                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 845                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 846                                              EnumSet.of(MethodData.Access.PUBLIC),
 847                                              EnumSet.of(MethodData.Context.ABSTRACT),
 848                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 849                         Template.MethodrefNotEqualsExpectedClass,
 850                         Template.ReabstractExpectedClass,
 851                         Template.CallsiteSubclassMethodref,
 852                         Template.ObjectrefExactSubclassOfCallsite),
 853                 /* Group 124: callsite :> methodref, methodref != expected,
 854                  * expected is interface, expected and callsite not in the same package
 855                  */
 856                 new TestGroup.Simple(initBuilder,
 857                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 858                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 859                                              EnumSet.of(MethodData.Access.PUBLIC),
 860                                              EnumSet.of(MethodData.Context.ABSTRACT),
 861                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 862                         Template.MethodrefNotEqualsExpectedIface,
 863                         Template.ReabstractExpectedIface,
 864                         Template.CallsiteSubclassMethodref,
 865                         Template.ObjectrefExactSubclassOfCallsite)
 866             );
 867 
 868     private AbstractMethodErrorTest() {
 869         super(testgroups);
 870     }
 871 
 872     public static void main(final String... args) {
 873         new AbstractMethodErrorTest().run();
 874     }
 875 }