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