// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package classloader;

import dalvik.system.PathClassLoader;
import java.lang.reflect.Method;

// Command line application which take three arguments:
//
//  Parent dex file
//  Child dex file
//  Main class name
//
// The application will create a classloader hierachy with the parent dex file above the
// system class loader, and the child dex file above the parent dex file. The it will load the
// Main class from the child dex file class loader and run its main method.
public class Runner {
  public static void main(String[] args) throws Exception {
    String parentFile = args[0];
    String childFile = args[1];
    String childClassName = args[2];
    ClassLoader parentClassLoader =
        new PathClassLoader(parentFile, ClassLoader.getSystemClassLoader());
    ClassLoader childClassLoader = new PathClassLoader(childFile, parentClassLoader);

    Class<?> childClass = childClassLoader.loadClass(childClassName);
    runMain(childClass, new String[0]);
  }

  private static void runMain(Class<?> clazz, String[] args) throws Exception {
    Method m = clazz.getMethod("main", String[].class);
    m.invoke(null, new Object[] {args});
  }
}
