fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.io.IOException;
  4. import java.lang.invoke.MethodHandles;
  5. import java.util.function.Supplier;
  6. import javax.tools.ToolProvider;
  7.  
  8. class ImplicitNullChecks {
  9. public static void main(String[] args) throws IOException, InterruptedException {
  10. disassembleMyself();
  11. }
  12. private static void disassembleMyself() {
  13. try {
  14. MethodHandles.lookup().unreflect(
  15. ToolProvider.getSystemToolClassLoader()
  16. .loadClass("com.sun.tools.javap.Main")
  17. .getMethod("main", String[].class))
  18. .asVarargsCollector(String[].class)
  19. .invoke("-c", ImplicitNullChecks.class.getName());
  20. }
  21. catch(Throwable ex) { ex.printStackTrace(); }
  22. }
  23. class Inner {}
  24. void createInner(ImplicitNullChecks obj) {
  25. obj.new Inner();
  26. }
  27.  
  28. void lambda(Object o) {
  29. Supplier<String> s=o::toString;
  30. }
  31. }
Success #stdin #stdout 1.29s 3359744KB
stdin
Standard input is empty
stdout
Compiled from "Main.java"
class ImplicitNullChecks {
  ImplicitNullChecks();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]) throws java.io.IOException, java.lang.InterruptedException;
    Code:
       0: invokestatic  #2                  // Method disassembleMyself:()V
       3: return

  void createInner(ImplicitNullChecks);
    Code:
       0: new           #19                 // class ImplicitNullChecks$Inner
       3: dup
       4: aload_1
       5: dup
       6: invokevirtual #20                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       9: pop
      10: invokespecial #21                 // Method ImplicitNullChecks$Inner."<init>":(LImplicitNullChecks;)V
      13: pop
      14: return

  void lambda(java.lang.Object);
    Code:
       0: aload_1
       1: dup
       2: invokevirtual #20                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       5: pop
       6: invokedynamic #22,  0             // InvokeDynamic #0:get:(Ljava/lang/Object;)Ljava/util/function/Supplier;
      11: astore_2
      12: return
}