1 /* 2 * Copyright (c) 2014, 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 IncompatibleClassChangeError 28 * @run main InvokeInterfaceICCE 29 */ 30 31 import java.util.function.Consumer; 32 import java.util.Collection; 33 import java.util.Collections; 34 import java.util.Arrays; 35 import java.util.EnumSet; 36 37 public class InvokeInterfaceICCE extends SelectionResolutionTest { 38 39 private static final SelectionResolutionTestCase.Builder initBuilder = 40 new SelectionResolutionTestCase.Builder(); 41 42 static { 43 initBuilder.setResult(Result.ICCE); 44 } 45 46 private static final Collection<TestGroup> testgroups = 47 Arrays.asList( 48 /* invokeinterface tests */ 49 50 /* resolved method is static*/ 51 /* Group 168: methodref = expected */ 52 new TestGroup.Simple(initBuilder, 53 Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE), 54 Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE), 55 EnumSet.of(MethodData.Access.PUBLIC), 56 EnumSet.of(MethodData.Context.STATIC), 57 EnumSet.of(ClassData.Package.SAME, 58 ClassData.Package.DIFFERENT)), 59 Template.OverrideAbstractExpectedIface, 60 Template.MethodrefEqualsExpected, 61 Template.IgnoredAbstract, 62 Template.AllCallsiteCases, 63 Template.IfaceMethodrefSelection), 64 /* Group 169: methodref != expected */ 65 new TestGroup.Simple(initBuilder, 66 Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE), 67 Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE), 68 EnumSet.of(MethodData.Access.PUBLIC), 69 EnumSet.of(MethodData.Context.STATIC), 70 EnumSet.of(ClassData.Package.SAME, 71 ClassData.Package.DIFFERENT)), 72 Template.OverrideAbstractExpectedIface, 73 Template.IfaceMethodrefNotEqualsExpected, 74 Template.IgnoredAbstract, 75 Template.AllCallsiteCases, 76 Template.IfaceMethodrefSelection), 77 78 /* methodref is a class */ 79 /* Group 170: methodref = expected */ 80 new TestGroup.Simple(initBuilder, 81 Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE), 82 Template.ResultCombo(EnumSet.of(Template.Kind.CLASS), 83 EnumSet.of(MethodData.Access.PUBLIC, 84 MethodData.Access.PACKAGE, 85 MethodData.Access.PROTECTED, 86 MethodData.Access.PRIVATE), 87 EnumSet.of(MethodData.Context.STATIC), 88 EnumSet.of(ClassData.Package.SAME, 89 ClassData.Package.DIFFERENT)), 90 Template.OverrideAbstractExpectedClass, 91 Template.MethodrefEqualsExpected, 92 Template.IgnoredAbstract, 93 Template.AllCallsiteCases, 94 Template.MethodrefSelectionResolvedIsClass), 95 /* Group 171: methodref != expected, expected is class */ 96 new TestGroup.Simple(initBuilder, 97 Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE), 98 Template.ResultCombo(EnumSet.of(Template.Kind.CLASS), 99 EnumSet.of(MethodData.Access.PUBLIC, 100 MethodData.Access.PACKAGE, 101 MethodData.Access.PROTECTED, 102 MethodData.Access.PRIVATE), 103 EnumSet.of(MethodData.Context.STATIC), 104 EnumSet.of(ClassData.Package.SAME, 105 ClassData.Package.DIFFERENT)), 106 Template.OverrideAbstractExpectedClass, 107 Template.MethodrefNotEqualsExpectedClass, 108 Template.IgnoredAbstract, 109 Template.AllCallsiteCases, 110 Template.MethodrefSelectionResolvedIsClass), 111 /* Group 172: methodref != expected expected is interface */ 112 new TestGroup.Simple(initBuilder, 113 Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE), 114 Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE), 115 EnumSet.of(MethodData.Access.PUBLIC, 116 MethodData.Access.PRIVATE), 117 EnumSet.of(MethodData.Context.STATIC), 118 EnumSet.of(ClassData.Package.SAME, 119 ClassData.Package.DIFFERENT)), 120 Template.OverrideAbstractExpectedIface, 121 Template.MethodrefNotEqualsExpectedIface, 122 Template.IgnoredAbstract, 123 Template.AllCallsiteCases, 124 Template.MethodrefSelectionResolvedIsIface), 125 /* Group 173: ambiguous resolution */ 126 new TestGroup.Simple(initBuilder, 127 Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE), 128 Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE), 129 EnumSet.of(MethodData.Access.PUBLIC), 130 EnumSet.of(MethodData.Context.INSTANCE), 131 EnumSet.of(ClassData.Package.SAME, 132 ClassData.Package.DIFFERENT)), 133 Template.OverrideAbstractExpectedIface, 134 Template.IfaceMethodrefAmbiguous, 135 Template.IgnoredAbstract, 136 Template.AllCallsiteCases, 137 Template.IfaceMethodrefSelectionNoOverride), 138 /* Group 174: ambiguous selection */ 139 new TestGroup.Simple(initBuilder, 140 Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE), 141 Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE), 142 EnumSet.of(MethodData.Access.PUBLIC), 143 EnumSet.of(MethodData.Context.INSTANCE), 144 EnumSet.of(ClassData.Package.SAME, 145 ClassData.Package.DIFFERENT)), 146 Template.OverrideAbstractExpectedIface, 147 Template.IfaceMethodrefNotEqualsExpected, 148 Template.IgnoredAbstract, 149 Template.AllCallsiteCases, 150 Template.IfaceMethodrefAmbiguousResolvedIsIface), 151 152 /* Group 175: private method in interface */ 153 new TestGroup.Simple(initBuilder, 154 Template.SetInvoke(SelectionResolutionTestCase.InvokeInstruction.INVOKEINTERFACE), 155 Template.ResultCombo(EnumSet.of(Template.Kind.INTERFACE), 156 EnumSet.of(MethodData.Access.PRIVATE), 157 EnumSet.of(MethodData.Context.INSTANCE), 158 EnumSet.of(ClassData.Package.SAME)), 159 Template.OverrideAbstractExpectedIface, 160 Template.MethodrefEqualsExpected, 161 Template.IgnoredAbstract, 162 Template.CallsiteEqualsMethodref, 163 Template.IfaceMethodrefSelection) 164 ); 165 166 private InvokeInterfaceICCE() { 167 super(testgroups); 168 } 169 170 public static void main(final String... args) { 171 new InvokeInterfaceICCE().run(); 172 } 173 }