192a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle/* 292a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * Copyright (C) 2014 The Android Open Source Project 392a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * 492a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * Licensed under the Apache License, Version 2.0 (the "License"); 592a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * you may not use this file except in compliance with the License. 692a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * You may obtain a copy of the License at 792a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * 892a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * http://www.apache.org/licenses/LICENSE-2.0 992a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * 1092a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * Unless required by applicable law or agreed to in writing, software 1192a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * distributed under the License is distributed on an "AS IS" BASIS, 1292a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1392a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * See the License for the specific language governing permissions and 1492a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle * limitations under the License. 1592a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle */ 1692a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle 1792a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravleimport java.lang.reflect.InvocationTargetException; 1892a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravleimport java.lang.reflect.Method; 1992a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle 2092a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravlepublic class Main { 2192a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle 2292a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle public static void main(String[] args) throws Throwable { 2392a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle // Attempt to instantiate an interface. 2492a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle $opt$NewInstance("newInstanceInterface", InstantiationError.class.getCanonicalName()); 2592a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle // Attempt to instantiate an abstract class. 2692a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle $opt$NewInstance("newInstanceClass", InstantiationError.class.getCanonicalName()); 2792a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle // Attempt to instantiate an interface. 2892a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle $opt$NewInstance("newInstancePrivateClass", IllegalAccessError.class.getCanonicalName()); 2992a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle // Attempt to instantiate an abstract class. 3092a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle $opt$NewInstance("newInstanceUnknownClass", NoClassDefFoundError.class.getCanonicalName()); 3192a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle } 3292a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle 3392a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle private static void $opt$NewInstance(String method, String errorName) throws Throwable { 3492a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle try { 3592a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle Class<?> c = Class.forName("NewInstance"); 3692a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle Method m = c.getMethod(method); 3792a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle m.invoke(c.newInstance()); 3892a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle throw new RuntimeException("Failed to throw " + errorName); 3992a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle } catch (InvocationTargetException e) { 4092a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle if (!e.getCause().getClass().getCanonicalName().equals(errorName)) { 4192a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle throw new RuntimeException("Failed to throw " + errorName 4292a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle + ". Threw: " + e.getCause()); 4392a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle } 4492a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle } 4592a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle } 4692a6ed2014278c78b60d7ef00751f15e6727aae0Calin Juravle} 47