/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.lang.reflect.Type;
/**
* Throw a few things at the verifier, all of which are expected to pass.
*/
public class Main {
static public void main(String[] args) {
tryBlah(1);
System.out.println("Zorch.");
System.out.println("10 == " + instanceOfTest(10));
}
/*
* Make sure the verifier is handling type merge of arrays of
* references correctly.
*/
static Object[] arrayCheck1(int wanted) {
String[] arrayOne;
Integer[] arrayTwo;
arrayOne = new String[1];
arrayTwo = new Integer[1];
switch (wanted) {
case 0: return arrayOne;
case 1: return arrayTwo;
default: return null;
}
}
static Object arrayCheck1b(int wanted) {
String[] arrayOne;
Integer[] arrayTwo;
int[] arrayThree;
arrayOne = new String[1];
arrayTwo = new Integer[1];
arrayThree = new int[1];
switch (wanted) {
case 0: return arrayOne;
case 1: return arrayTwo;
case 2: return arrayThree;
default: return null;
}
}
static Object[] arrayCheck2(int wanted) {
String[][] arrayOne;
String[][] arrayTwo;
Integer[][] arrayThree;
arrayOne = new String[1][];
arrayTwo = new String[1][];
arrayThree = new Integer[1][];
switch (wanted) {
case 0: return arrayOne;
case 1: return arrayTwo;
case 2: return arrayThree;
default: return null;
}
}
static Object[] arrayCheck3(int wanted) {
String[][] arrayTwo;
String[][][][] arrayFour;
arrayTwo = new String[1][];
arrayFour = new String[1][][][];
switch (wanted) {
case 0: return arrayTwo;
case 1: return arrayFour;
default: return null;
}
}
/*
* Check return type merge.
*/
private Type[] typeTest() {
if(this == null) {
return (Class<?>[])null;
}
return (Type[])null;
}
/*
* Exercise the blahs.
*/
static void tryBlah(int num) {
BlahFeature feature = null; // interface ref
switch (num) {
case 1:
feature = new BlahOne();
break;
default:
feature = new BlahTwo();
break;
}
feature.doStuff();
}
static int instanceOfTest(Integer x) {
Object y = x;
if (y instanceof String) {
// Bug: 15808277
// Non-sensical instance-of to check merging after the branch doesn't result in a verifier
// error.
((String)y).charAt(0);
}
return x.intValue();
}
}