code: private static void addNewItem(final Set<String> supers, final OpcodeStack.Item addItm) throws ClassNotFoundException {
  
          String itemSignature = addItm.getSignature();
          if (itemSignature.length() == 0) {
              return;
          }
  
          if (itemSignature.startsWith(Values.SIG_ARRAY_PREFIX)) {
              supers.add(itemSignature);
              return;
          }
  
          JavaClass cls = addItm.getJavaClass();
          if ((cls == null) || Values.DOTTED_JAVA_LANG_OBJECT.equals(cls.getClassName())) {
              return;
          }
  
          supers.add(cls.getClassName());
  
          JavaClass[] infs = cls.getAllInterfaces();
          for (JavaClass inf : infs) {
              String infName = inf.getClassName();
              if (!"java.io.Serializable".equals(infName) && !"java.lang.Cloneable".equals(infName)) {
                  supers.add(infName);
              }
          }
  
          JavaClass[] sups = cls.getSuperClasses();
          for (JavaClass sup : sups) {
              String name = sup.getClassName();
              if (!Values.DOTTED_JAVA_LANG_OBJECT.equals(name)) {
                  supers.add(name);
              }
          }
      }
docs: adds this item's type and all of it's superclass/interfaces to the set of possible types that could define this added item
  
  @param supers
  the current set of superclass items
  @param addItm
  the item we are adding
  @throws ClassNotFoundException
  if a superclass/interface is not found