1 /* 2 * Copyright (c) 2014, 2015, 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 package scenarios; 25 26 import jdk.test.lib.Asserts; 27 import hierarchies.TypeHierarchy; 28 29 import java.util.Objects; 30 31 /** 32 * Checkcast scenario 33 * @param <T> profiling parameter 34 */ 35 public class CheckCast<T extends TypeHierarchy.I> extends Scenario<T, Integer> { 36 public CheckCast(ProfilingType profilingType, TypeHierarchy<? extends T, ? extends T> hierarchy) { 37 super("CheckCast", profilingType, hierarchy); 38 } 39 40 /** 41 * Returns type profiling. 42 * @param obj is a profiled parameter for the test 43 * @return parameter casted to the type R 44 */ 45 @Override 46 public Integer run(T obj) { 47 switch (profilingType) { 48 case RETURN: 49 T t = collectReturnType(obj); 50 if (t != null) { 51 return t.m(); 52 } 53 return null; 54 case ARGUMENTS: 55 field = obj; 56 if (field != null) { 57 return field.m(); 58 } 59 return null; 60 case PARAMETERS: 61 if (obj != null) { 62 return obj.m(); 63 } 64 return null; 65 } 66 throw new RuntimeException("Should not reach here"); 67 } 68 69 @Override 70 public void check(Integer result, T orig) { 71 if (result != null || orig != null) { 72 Objects.requireNonNull(result); 73 Objects.requireNonNull(orig); 74 Asserts.assertEquals(result, orig.m(), "Results mismatch"); 75 } 76 } 77 }