code: @Override
      protected String getCommonSuperClass(final String type1, final String type2) {
          Validate.notNull(type1);
          Validate.notNull(type2);
          
          infoRepo.getInformation(type1);
          LinkedHashSet<String> type1Hierarchy = flattenHierarchy(type1);
          LinkedHashSet<String> type2Hierarchy = flattenHierarchy(type2);
          
          for (String testType1 : type1Hierarchy) {
              for (String testType2 : type2Hierarchy) {
                  if (testType1.equals(testType2)) {
                      return testType1;
                  }
              }
          }
          
          return "java/lang/Object"; // is this correct behaviour? shouldn't both type1 and type2 ultimately contain Object?
      }
docs: Derives common super class from the super name mapping passed in to the constructor.
  @param type1 the internal name of a class.
  @param type2 the internal name of another class.
  @return the internal name of the common super class of the two given classes
  @throws NullPointerException if any argument is {@code null}