title: Issue with ASM getMergedType and getCommonSuperClass
body: <p>I use ASM to update the class stack map, but when asm <code>getMergedType</code>, the following exception occurs:</p>
  
  <blockquote>
    <p>java.lang.RuntimeException:<br>
    java.io.IOException: Resource not found for IntefaceImplA. </p>
  </blockquote>
  
  <p>If without asm modify the class method, it does work fine.<br>
  I have defined two interfaces A and B: <code>IntefaceImplA</code> and 
  <code>IntefaceImplB</code>.</p>
  
  <p>My environment source code:  </p>
  
  <p><strong>IntefaceA.java</strong></p>
  
  <pre><code>public interface IntefaceA {
      void inteface();
  }
  </code></pre>
  
  <p><strong>IntefaceImplA.java</strong></p>
  
  <pre><code>public class IntefaceImplA implements IntefaceA {
  @Override
  public void inteface() {
  
  }
  }
  </code></pre>
  
  <p><strong>IntefaceImplB.java</strong></p>
  
  <pre><code>public class IntefaceImplB implements IntefaceA {
  @Override
  public void inteface() {
  
  }
  }
  </code></pre>
  
  <p><strong>Test.java</strong></p>
  
  <pre><code>public class Test {
  public IntefaceA getImpl(boolean b) {
      IntefaceA a = b ? new IntefaceImplA() : new IntefaceImplB();
      return a;
  }
  </code></pre>
  
  <p>}</p>
  
  <p><strong>Main.java</strong></p>
  
  <pre><code>public class Main {
  public static void main(String args[]) {
  ....
  if (a instance of Test) {
  ..
  ...
  }
  }
  }
  </code></pre>
  
  <p>After I compiled a runner jar, and delete the IntefaceImplA.class and IntefaceA.class manually from the jar. why i wanna to delete those classes files, since the spring always like to do this stuff.</p>
  
  <p>the runner jar can be run normal without ASM, but use Asm will occur exception. since the asm wanna to getMergedType for IntefaceImplA and IntefaceImplB, but IntefaceImplA was deleted by me. 
  After investigate the ASM ClassWriter source code i found below code:</p>
  
  <pre><code>protected String getCommonSuperClass(String type1, String type2) 
  {
      ClassLoader classLoader = this.getClass().getClassLoader();
      Class c;
      Class d;
      try {
          c = Class.forName(type1.replace('/', '.'), false, classLoader);
          d = Class.forName(type2.replace('/', '.'), false, classLoader);
      } catch (Exception var7) {
          throw new RuntimeException(var7.toString());
      }
  
      if(c.isAssignableFrom(d)) {
          return type1;
      } else if(d.isAssignableFrom(c)) {
          return type2;
      } else if(!c.isInterface() &amp;&amp; !d.isInterface()) {
          do {
              c = c.getSuperclass();
          } while(!c.isAssignableFrom(d));
  
          return c.getName().replace('.', '/');
      } else {
          return "java/lang/Object";
      }
  }
  </code></pre>
  
  <p>Actually, I deleted the related class file, the classloader cannot find the class. but without asm the Program does work normal.<br>
  Should I enhance the override to the getCommonSuperClass method, if occur exception then return java/lang/Object for it? that's funny</p>