docs: public Optional<GraphQLError> add(SDLDefinition definition) {
          // extensions
          if (definition instanceof ObjectTypeExtensionDefinition) {
              ObjectTypeExtensionDefinition newEntry = (ObjectTypeExtensionDefinition) definition;
              return defineExt(objectTypeExtensions, newEntry, ObjectTypeExtensionDefinition::getName);
          } else if (definition instanceof InterfaceTypeExtensionDefinition) {
              InterfaceTypeExtensionDefinition newEntry = (InterfaceTypeExtensionDefinition) definition;
              return defineExt(interfaceTypeExtensions, newEntry, InterfaceTypeExtensionDefinition::getName);
          } else if (definition instanceof UnionTypeExtensionDefinition) {
              UnionTypeExtensionDefinition newEntry = (UnionTypeExtensionDefinition) definition;
              return defineExt(unionTypeExtensions, newEntry, UnionTypeExtensionDefinition::getName);
          } else if (definition instanceof EnumTypeExtensionDefinition) {
              EnumTypeExtensionDefinition newEntry = (EnumTypeExtensionDefinition) definition;
              return defineExt(enumTypeExtensions, newEntry, EnumTypeExtensionDefinition::getName);
          } else if (definition instanceof ScalarTypeExtensionDefinition) {
              ScalarTypeExtensionDefinition newEntry = (ScalarTypeExtensionDefinition) definition;
              return defineExt(scalarTypeExtensions, newEntry, ScalarTypeExtensionDefinition::getName);
          } else if (definition instanceof InputObjectTypeExtensionDefinition) {
              InputObjectTypeExtensionDefinition newEntry = (InputObjectTypeExtensionDefinition) definition;
              return defineExt(inputObjectTypeExtensions, newEntry, InputObjectTypeExtensionDefinition::getName);
              //
              // normal
          } else if (definition instanceof ScalarTypeDefinition) {
              ScalarTypeDefinition newEntry = (ScalarTypeDefinition) definition;
              return define(scalarTypes, scalarTypes, newEntry);
          } else if (definition instanceof TypeDefinition) {
              TypeDefinition newEntry = (TypeDefinition) definition;
              return define(types, types, newEntry);
          } else if (definition instanceof DirectiveDefinition) {
              DirectiveDefinition newEntry = (DirectiveDefinition) definition;
              return define(directiveDefinitions, directiveDefinitions, newEntry);
          } else if (definition instanceof SchemaDefinition) {
              SchemaDefinition newSchema = (SchemaDefinition) definition;
              if (schema != null) {
                  return Optional.of(new SchemaRedefinitionError(this.schema, newSchema));
              } else {
                  schema = newSchema;
              }
          } else {
              return Assert.assertShouldNeverHappen();
          }
          return Optional.empty();
      }