1fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe/* 2fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * Copyright (C) 2015 The Android Open Source Project 3fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * 4fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * Licensed under the Apache License, Version 2.0 (the "License"); 5fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * you may not use this file except in compliance with the License. 6fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * You may obtain a copy of the License at 7fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * 8fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * http://www.apache.org/licenses/LICENSE-2.0 9fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * 10fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * Unless required by applicable law or agreed to in writing, software 11fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * distributed under the License is distributed on an "AS IS" BASIS, 12fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * See the License for the specific language governing permissions and 14fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * limitations under the License. 15fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe */ 16fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe 17fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampeimport java.io.File; 18fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampeimport java.lang.reflect.Constructor; 19fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampeimport java.lang.reflect.Method; 20fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe 21fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe/** 22fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * Structural hazard test. 23fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe */ 24fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampepublic class Main { 25fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe public static void main(String[] args) { 26031768a340634e2dbdec1aebb2bb3fe509b2f1f6Mathieu Chartier System.loadLibrary(args[0]); 27fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe new Main().run(); 28fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe } 29fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe 30fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe private void run() { 31fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe try { 32fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe Class<?> bClass = getClass().getClassLoader().loadClass("A"); 33fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe System.out.println("Should really reach here."); 34fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe } catch (Exception e) { 35fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe e.printStackTrace(System.out); 36fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe } 37fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe 3880b37b7e679a530738c9bcbd39873b6dacf177e5Mathieu Chartier boolean haveOatFile = hasOatFile(); 39fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe boolean gotError = false; 40fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe try { 41fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe Class<?> bClass = getClass().getClassLoader().loadClass("B"); 42fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe } catch (IncompatibleClassChangeError icce) { 43fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe gotError = true; 44fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe } catch (Exception e) { 45fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe e.printStackTrace(System.out); 46fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe } 47fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe if (haveOatFile ^ gotError) { 4880b37b7e679a530738c9bcbd39873b6dacf177e5Mathieu Chartier System.out.println("Did not get expected error. " + haveOatFile + " " + gotError); 49fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe } 50fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe System.out.println("Done."); 51fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe } 52fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe 5380b37b7e679a530738c9bcbd39873b6dacf177e5Mathieu Chartier private native static boolean hasOatFile(); 54fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe} 55