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 IllegalAccessErrorTest
  28  * @modules java.base/jdk.internal.org.objectweb.asm
  29  * @library /runtime/SelectionResolution/classes
  30  * @build selectionresolution.*
  31  * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies IllegalAccessErrorTest
  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 IllegalAccessErrorTest extends SelectionResolutionTest {
  45 
  46     private static final SelectionResolutionTestCase.Builder initBuilder =
  47         new SelectionResolutionTestCase.Builder();
  48 
  49     static {
  50         initBuilder.setResult(Result.IAE);
  51     }
  52 
  53     private static final Collection<TestGroup> testgroups =
  54         Arrays.asList(
  55                 /* invokestatic tests */
  56                 /* Group 125 : callsite = methodref, methodref !=
  57                  * expected, expected is class
  58                  */
  59                 new TestGroup.Simple(initBuilder,
  60                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
  61                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
  62                                              EnumSet.of(MethodData.Access.PRIVATE),
  63                                              EnumSet.of(MethodData.Context.STATIC),
  64                                              EnumSet.of(ClassData.Package.SAME)),
  65                         Template.MethodrefNotEqualsExpectedClass,
  66                         Template.CallsiteEqualsMethodref,
  67                         Template.TrivialObjectref),
  68                 /* Group 126: callsite :> methodref, methodref = expected,
  69                  * expected is class, expected and callsite in the same package
  70                  */
  71                 new TestGroup.Simple(initBuilder,
  72                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
  73                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
  74                                              EnumSet.of(MethodData.Access.PRIVATE),
  75                                              EnumSet.of(MethodData.Context.STATIC),
  76                                              EnumSet.of(ClassData.Package.SAME)),
  77                         Template.MethodrefEqualsExpected,
  78                         Template.CallsiteSubclassMethodref,
  79                         Template.TrivialObjectref),
  80                 /* Group 127: callsite :> methodref, methodref != expected,
  81                  * expected is class, expected and callsite in the same package
  82                  */
  83                 new TestGroup.Simple(initBuilder,
  84                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
  85                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
  86                                              EnumSet.of(MethodData.Access.PRIVATE),
  87                                              EnumSet.of(MethodData.Context.STATIC),
  88                                              EnumSet.of(ClassData.Package.SAME)),
  89                         Template.MethodrefNotEqualsExpectedClass,
  90                         Template.CallsiteSubclassMethodref,
  91                         Template.TrivialObjectref),
  92                 /* Group 128: callsite unrelated to methodref, methodref = expected,
  93                  * expected is class, expected and callsite in the same package
  94                  */
  95                 new TestGroup.Simple(initBuilder,
  96                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
  97                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
  98                                              EnumSet.of(MethodData.Access.PRIVATE),
  99                                              EnumSet.of(MethodData.Context.STATIC),
 100                                              EnumSet.of(ClassData.Package.SAME)),
 101                         Template.MethodrefEqualsExpected,
 102                         Template.CallsiteUnrelatedToMethodref,
 103                         Template.TrivialObjectref),
 104                 /* Group 129: callsite unrelated to methodref, methodref != expected,
 105                  * expected is class, expected and callsite in the same package
 106                  */
 107                 new TestGroup.Simple(initBuilder,
 108                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
 109                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 110                                              EnumSet.of(MethodData.Access.PRIVATE),
 111                                              EnumSet.of(MethodData.Context.STATIC),
 112                                              EnumSet.of(ClassData.Package.SAME)),
 113                         Template.MethodrefNotEqualsExpectedClass,
 114                         Template.CallsiteUnrelatedToMethodref,
 115                         Template.TrivialObjectref),
 116                 /* Group 130: callsite = methodref, methodref != expected,
 117                  * expected is class, expected and callsite not in the same package
 118                  */
 119                 new TestGroup.Simple(initBuilder,
 120                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
 121                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 122                                              EnumSet.of(MethodData.Access.PRIVATE,
 123                                                         MethodData.Access.PACKAGE),
 124                                              EnumSet.of(MethodData.Context.STATIC),
 125                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 126                         Template.MethodrefNotEqualsExpectedClass,
 127                         Template.CallsiteEqualsMethodref,
 128                         Template.TrivialObjectref),
 129                 /* Group 131: callsite :> methodref, methodref = expected,
 130                  * expected is class, expected and callsite not in the same package
 131                  */
 132                 new TestGroup.Simple(initBuilder,
 133                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
 134                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 135                                              EnumSet.of(MethodData.Access.PRIVATE,
 136                                                         MethodData.Access.PACKAGE),
 137                                              EnumSet.of(MethodData.Context.STATIC),
 138                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 139                         Template.MethodrefEqualsExpected,
 140                         Template.CallsiteSubclassMethodref,
 141                         Template.TrivialObjectref),
 142                 /* Group 132: callsite :> methodref, methodref != expected,
 143                  * expected is class, expected and callsite not in the same package
 144                  */
 145                 new TestGroup.Simple(initBuilder,
 146                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
 147                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 148                                              EnumSet.of(MethodData.Access.PRIVATE,
 149                                                         MethodData.Access.PACKAGE),
 150                                              EnumSet.of(MethodData.Context.STATIC),
 151                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 152                         Template.MethodrefNotEqualsExpectedClass,
 153                         Template.CallsiteSubclassMethodref,
 154                         Template.TrivialObjectref),
 155                 /* Group 133: callsite unrelated to methodref, methodref = expected,
 156                  * expected is class, expected and callsite not in the same package
 157                  */
 158                 new TestGroup.Simple(initBuilder,
 159                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
 160                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 161                                              EnumSet.of(MethodData.Access.PRIVATE,
 162                                                         MethodData.Access.PROTECTED,
 163                                                         MethodData.Access.PACKAGE),
 164                                              EnumSet.of(MethodData.Context.STATIC),
 165                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 166                         Template.MethodrefEqualsExpected,
 167                         Template.CallsiteUnrelatedToMethodref,
 168                         Template.TrivialObjectref),
 169                 /* Group 134: callsite unrelated to methodref, methodref != expected,
 170                  * expected is class, expected and callsite not in the same package
 171                  */
 172                 new TestGroup.Simple(initBuilder,
 173                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESTATIC),
 174                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 175                                              EnumSet.of(MethodData.Access.PRIVATE,
 176                                                         MethodData.Access.PROTECTED,
 177                                                         MethodData.Access.PACKAGE),
 178                                              EnumSet.of(MethodData.Context.STATIC),
 179                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 180                         Template.MethodrefNotEqualsExpectedClass,
 181                         Template.CallsiteUnrelatedToMethodref,
 182                         Template.TrivialObjectref),
 183 
 184                 /* invokevirtual tests */
 185                 /* Group 135: callsite = methodref, methodref != expected,
 186                  * expected is class, expected and callsite in the same package
 187                  */
 188                 new TestGroup.Simple(initBuilder,
 189                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 190                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 191                                              EnumSet.of(MethodData.Access.PRIVATE),
 192                                              EnumSet.of(MethodData.Context.INSTANCE),
 193                                              EnumSet.of(ClassData.Package.SAME)),
 194                         Template.OverrideAbstractExpectedClass,
 195                         Template.MethodrefNotEqualsExpectedClass,
 196                         Template.IgnoredAbstract,
 197                         Template.CallsiteEqualsMethodref,
 198                         Template.MethodrefSelectionResolvedIsClass),
 199                 /* Group 136: callsite :> methodref, methodref = expected,
 200                  * expected is class, expected and callsite in the same package
 201                  */
 202                 new TestGroup.Simple(initBuilder,
 203                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 204                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 205                                              EnumSet.of(MethodData.Access.PRIVATE),
 206                                              EnumSet.of(MethodData.Context.INSTANCE),
 207                                              EnumSet.of(ClassData.Package.SAME)),
 208                         Template.OverrideAbstractExpectedClass,
 209                         Template.MethodrefEqualsExpected,
 210                         Template.IgnoredAbstract,
 211                         Template.CallsiteSubclassMethodref,
 212                         Template.MethodrefSelectionResolvedIsClass),
 213                 /* Group 137: callsite :> methodref, methodref != expected,
 214                  * expected is class, expected and callsite in the same package
 215                  */
 216                 new TestGroup.Simple(initBuilder,
 217                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 218                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 219                                              EnumSet.of(MethodData.Access.PRIVATE),
 220                                              EnumSet.of(MethodData.Context.INSTANCE),
 221                                              EnumSet.of(ClassData.Package.SAME)),
 222                         Template.OverrideAbstractExpectedClass,
 223                         Template.MethodrefNotEqualsExpectedClass,
 224                         Template.IgnoredAbstract,
 225                         Template.CallsiteSubclassMethodref,
 226                         Template.MethodrefSelectionResolvedIsClass),
 227                 /* Group 138: callsite unrelated to methodref, methodref = expected,
 228                  * expected is class, expected and callsite in the same package
 229                  */
 230                 new TestGroup.Simple(initBuilder,
 231                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 232                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 233                                              EnumSet.of(MethodData.Access.PRIVATE),
 234                                              EnumSet.of(MethodData.Context.INSTANCE),
 235                                              EnumSet.of(ClassData.Package.SAME)),
 236                         Template.OverrideAbstractExpectedClass,
 237                         Template.MethodrefEqualsExpected,
 238                         Template.IgnoredAbstract,
 239                         Template.CallsiteUnrelatedToMethodref,
 240                         Template.MethodrefSelectionResolvedIsClass),
 241                 /* Group 139: callsite unrelated to methodref, methodref != expected,
 242                  * expected is class, expected and callsite in the same package
 243                  */
 244                 new TestGroup.Simple(initBuilder,
 245                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 246                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 247                                              EnumSet.of(MethodData.Access.PRIVATE),
 248                                              EnumSet.of(MethodData.Context.INSTANCE),
 249                                              EnumSet.of(ClassData.Package.SAME)),
 250                         Template.OverrideAbstractExpectedClass,
 251                         Template.MethodrefNotEqualsExpectedClass,
 252                         Template.IgnoredAbstract,
 253                         Template.CallsiteUnrelatedToMethodref,
 254                         Template.MethodrefSelectionResolvedIsClass),
 255                 /* Group 140: callsite = methodref, methodref != expected,
 256                  * expected is class, expected and callsite not in the same package
 257                  */
 258                 new TestGroup.Simple(initBuilder,
 259                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 260                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 261                                              EnumSet.of(MethodData.Access.PACKAGE,
 262                                                         MethodData.Access.PRIVATE),
 263                                              EnumSet.of(MethodData.Context.INSTANCE),
 264                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 265                         Template.OverrideAbstractExpectedClass,
 266                         Template.MethodrefNotEqualsExpectedClass,
 267                         Template.IgnoredAbstract,
 268                         Template.CallsiteEqualsMethodref,
 269                         Template.MethodrefSelectionResolvedIsClass),
 270                 /* Group 141: callsite :> methodref, methodref = expected,
 271                  * expected is class, expected and callsite not in the same package
 272                  */
 273                 new TestGroup.Simple(initBuilder,
 274                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 275                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 276                                              EnumSet.of(MethodData.Access.PACKAGE,
 277                                                         MethodData.Access.PRIVATE),
 278                                              EnumSet.of(MethodData.Context.INSTANCE,
 279                                                         MethodData.Context.ABSTRACT),
 280                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 281                         Template.OverrideAbstractExpectedClass,
 282                         Template.MethodrefEqualsExpected,
 283                         Template.IgnoredAbstract,
 284                         Template.CallsiteSubclassMethodref,
 285                         Template.MethodrefSelectionResolvedIsClass),
 286                 /* Group 142: callsite :> methodref, methodref = expected,
 287                  * expected is class, expected and callsite not in the same package
 288                  */
 289                 new TestGroup.Simple(initBuilder,
 290                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 291                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 292                                              EnumSet.of(MethodData.Access.PACKAGE,
 293                                                         MethodData.Access.PRIVATE),
 294                                              EnumSet.of(MethodData.Context.INSTANCE,
 295                                                         MethodData.Context.ABSTRACT),
 296                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 297                         Template.OverrideAbstractExpectedClass,
 298                         Template.MethodrefNotEqualsExpectedClass,
 299                         Template.IgnoredAbstract,
 300                         Template.CallsiteSubclassMethodref,
 301                         Template.MethodrefSelectionResolvedIsClass),
 302                 /* Group 143: callsite unrelated to methodref, methodref = expected,
 303                  * expected is class, expected and callsite not in the same package
 304                  */
 305                 new TestGroup.Simple(initBuilder,
 306                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 307                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 308                                              EnumSet.of(MethodData.Access.PACKAGE,
 309                                                         // protected causes verifier error.
 310                                                         MethodData.Access.PRIVATE),
 311                                              EnumSet.of(MethodData.Context.INSTANCE,
 312                                                         MethodData.Context.ABSTRACT),
 313                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 314                         Template.OverrideAbstractExpectedClass,
 315                         Template.MethodrefEqualsExpected,
 316                         Template.IgnoredAbstract,
 317                         Template.CallsiteUnrelatedToMethodref,
 318                         Template.MethodrefSelectionResolvedIsClass),
 319                 /* Group 144: callsite unrelated to methodref, methodref != expected,
 320                  * expected is class, expected and callsite not in the same package
 321                  */
 322                 new TestGroup.Simple(initBuilder,
 323                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEVIRTUAL),
 324                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 325                                              EnumSet.of(MethodData.Access.PACKAGE,
 326                                                         // protected causes verifier error.
 327                                                         MethodData.Access.PRIVATE),
 328                                              EnumSet.of(MethodData.Context.INSTANCE,
 329                                                         MethodData.Context.ABSTRACT),
 330                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 331                         Template.OverrideAbstractExpectedClass,
 332                         Template.MethodrefNotEqualsExpectedClass,
 333                         Template.IgnoredAbstract,
 334                         Template.CallsiteUnrelatedToMethodref,
 335                         Template.MethodrefSelectionResolvedIsClass),
 336 
 337                 /* invokeinterface tests */
 338                 /* Group 145: callsite = methodref = expected */
 339                 new TestGroup.Simple(initBuilder,
 340                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 341                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 342                                              EnumSet.of(MethodData.Access.PUBLIC),
 343                                              EnumSet.of(MethodData.Context.INSTANCE),
 344                                              EnumSet.of(ClassData.Package.SAME)),
 345                         Template.OverrideAbstractExpectedIface,
 346                         Template.MethodrefEqualsExpected,
 347                         Template.IgnoredAbstract,
 348                         Template.CallsiteEqualsMethodref,
 349                         Template.IfaceMethodrefSelectionOverrideNonPublic),
 350                 /* Group 146: callsite = methodref, methodref != expected */
 351                 new TestGroup.Simple(initBuilder,
 352                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 353                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 354                                              EnumSet.of(MethodData.Access.PUBLIC),
 355                                              EnumSet.of(MethodData.Context.INSTANCE),
 356                                              EnumSet.of(ClassData.Package.SAME,
 357                                                         ClassData.Package.DIFFERENT)),
 358                         Template.OverrideAbstractExpectedIface,
 359                         Template.IfaceMethodrefNotEqualsExpected,
 360                         Template.IgnoredAbstract,
 361                         Template.CallsiteEqualsMethodref,
 362                         Template.IfaceMethodrefSelectionOverrideNonPublic),
 363                 /* Group 147: callsite :> methodref, methodref = expected */
 364                 new TestGroup.Simple(initBuilder,
 365                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 366                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 367                                              EnumSet.of(MethodData.Access.PUBLIC),
 368                                              EnumSet.of(MethodData.Context.INSTANCE),
 369                                              EnumSet.of(ClassData.Package.SAME,
 370                                                         ClassData.Package.DIFFERENT)),
 371                         Template.OverrideAbstractExpectedIface,
 372                         Template.MethodrefEqualsExpected,
 373                         Template.IgnoredAbstract,
 374                         Template.CallsiteSubclassMethodref,
 375                         Template.IfaceMethodrefSelectionOverrideNonPublic),
 376                 /* Group 148: callsite :> methodref, methodref != expected */
 377                 new TestGroup.Simple(initBuilder,
 378                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 379                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 380                                              EnumSet.of(MethodData.Access.PUBLIC),
 381                                              EnumSet.of(MethodData.Context.INSTANCE),
 382                                              EnumSet.of(ClassData.Package.SAME,
 383                                                         ClassData.Package.DIFFERENT)),
 384                         Template.OverrideAbstractExpectedIface,
 385                         Template.IfaceMethodrefNotEqualsExpected,
 386                         Template.IgnoredAbstract,
 387                         Template.CallsiteSubclassMethodref,
 388                         Template.IfaceMethodrefSelectionOverrideNonPublic),
 389                 /* Group 149: callsite unrelated to methodref, methodref = expected */
 390                 new TestGroup.Simple(initBuilder,
 391                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 392                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 393                                              EnumSet.of(MethodData.Access.PUBLIC),
 394                                              EnumSet.of(MethodData.Context.INSTANCE),
 395                                              EnumSet.of(ClassData.Package.SAME,
 396                                                         ClassData.Package.DIFFERENT)),
 397                         Template.OverrideAbstractExpectedIface,
 398                         Template.MethodrefEqualsExpected,
 399                         Template.IgnoredAbstract,
 400                         Template.CallsiteUnrelatedToMethodref,
 401                         Template.IfaceMethodrefSelectionOverrideNonPublic),
 402                 /* Group 150: callsite unrelated to methodref, methodref != expected */
 403                 new TestGroup.Simple(initBuilder,
 404                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE),
 405                         Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE),
 406                                              EnumSet.of(MethodData.Access.PUBLIC),
 407                                              EnumSet.of(MethodData.Context.INSTANCE),
 408                                              EnumSet.of(ClassData.Package.SAME,
 409                                                         ClassData.Package.DIFFERENT)),
 410                         Template.OverrideAbstractExpectedIface,
 411                         Template.IfaceMethodrefNotEqualsExpected,
 412                         Template.IgnoredAbstract,
 413                         Template.CallsiteUnrelatedToMethodref,
 414                         Template.IfaceMethodrefSelectionOverrideNonPublic),
 415 
 416                 /* invokespecial tests */
 417                 /* Group 151: callsite = methodref, methodref != expected,
 418                  * expected is class, expected and callsite in the same package
 419                  */
 420                 new TestGroup.Simple(initBuilder,
 421                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 422                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 423                                              EnumSet.of(MethodData.Access.PRIVATE),
 424                                              EnumSet.of(MethodData.Context.INSTANCE,
 425                                                         MethodData.Context.ABSTRACT),
 426                                              EnumSet.of(ClassData.Package.SAME)),
 427                         Template.OverrideAbstractExpectedClass,
 428                         Template.MethodrefNotEqualsExpectedClass,
 429                         Template.IgnoredAbstract,
 430                         Template.CallsiteEqualsMethodref,
 431                         Template.ObjectrefAssignableToCallsite),
 432                 /* Group 152: callsite :> methodref, methodref = expected,
 433                  * expected is class, expected and callsite in the same package
 434                  */
 435                 new TestGroup.Simple(initBuilder,
 436                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 437                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 438                                              EnumSet.of(MethodData.Access.PRIVATE),
 439                                              EnumSet.of(MethodData.Context.INSTANCE,
 440                                                         MethodData.Context.ABSTRACT),
 441                                              EnumSet.of(ClassData.Package.SAME)),
 442                         Template.OverrideAbstractExpectedClass,
 443                         Template.MethodrefEqualsExpected,
 444                         Template.IgnoredAbstract,
 445                         Template.CallsiteSubclassMethodref,
 446                         Template.ObjectrefAssignableToCallsite),
 447                 /* Group 153: callsite :> methodref, methodref != expected,
 448                  * expected is class, expected and callsite in the same package
 449                  */
 450                 new TestGroup.Simple(initBuilder,
 451                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 452                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 453                                              EnumSet.of(MethodData.Access.PRIVATE),
 454                                              EnumSet.of(MethodData.Context.INSTANCE,
 455                                                         MethodData.Context.ABSTRACT),
 456                                              EnumSet.of(ClassData.Package.SAME)),
 457                         Template.OverrideAbstractExpectedClass,
 458                         Template.MethodrefNotEqualsExpectedClass,
 459                         Template.IgnoredAbstract,
 460                         Template.CallsiteSubclassMethodref,
 461                         Template.ObjectrefAssignableToCallsite),
 462                 /* Group 154: callsite = methodref, methodref != expected,
 463                  * expected is class, expected and callsite not in the same package
 464                  */
 465                 new TestGroup.Simple(initBuilder,
 466                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 467                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 468                                              EnumSet.of(MethodData.Access.PACKAGE,
 469                                                         MethodData.Access.PRIVATE),
 470                                              EnumSet.of(MethodData.Context.INSTANCE),
 471                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 472                         Template.OverrideAbstractExpectedClass,
 473                         Template.MethodrefNotEqualsExpectedClass,
 474                         Template.IgnoredAbstract,
 475                         Template.CallsiteEqualsMethodref,
 476                         Template.ObjectrefExactSubclassOfCallsite),
 477                 /* Group 155: callsite :> methodref, methodref = expected,
 478                  * expected is class, expected and callsite not in the same package
 479                  */
 480                 new TestGroup.Simple(initBuilder,
 481                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 482                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 483                                              EnumSet.of(MethodData.Access.PACKAGE,
 484                                                         MethodData.Access.PRIVATE),
 485                                              EnumSet.of(MethodData.Context.INSTANCE),
 486                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 487                         Template.OverrideAbstractExpectedClass,
 488                         Template.MethodrefEqualsExpected,
 489                         Template.IgnoredAbstract,
 490                         Template.CallsiteSubclassMethodref,
 491                         Template.ObjectrefExactSubclassOfCallsite),
 492                 /* Group 156: callsite :> methodref, methodref != expected,
 493                  * expected is class, expected and callsite not in the same package
 494                  */
 495                 new TestGroup.Simple(initBuilder,
 496                         Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKESPECIAL),
 497                         Template.ResultCombo(EnumSet.of(Template.Kind.CLASS),
 498                                              EnumSet.of(MethodData.Access.PACKAGE,
 499                                                         MethodData.Access.PRIVATE),
 500                                              EnumSet.of(MethodData.Context.INSTANCE,
 501                                                         MethodData.Context.ABSTRACT),
 502                                              EnumSet.of(ClassData.Package.DIFFERENT)),
 503                         Template.OverrideAbstractExpectedClass,
 504                         Template.MethodrefNotEqualsExpectedClass,
 505                         Template.IgnoredAbstract,
 506                         Template.CallsiteSubclassMethodref,
 507                         Template.ObjectrefExactSubclassOfCallsite)
 508             );
 509 
 510     private IllegalAccessErrorTest() {
 511         super(testgroups);
 512     }
 513 
 514     public static void main(final String... args) {
 515         new IllegalAccessErrorTest().run();
 516     }
 517 }