protected GrailsClass addArtefact(
      String artefactType, Class<?> artefactClass, boolean overrideable) {
    ArtefactHandler handler = artefactHandlersByName.get(artefactType);
    if (handler.isArtefact(artefactClass)) {
      GrailsClass artefactGrailsClass = handler.newArtefactClass(artefactClass);
      artefactGrailsClass.setGrailsApplication(this);

      // Store the GrailsClass in cache
      DefaultArtefactInfo info = getArtefactInfo(artefactType, true);
      if (overrideable) {
        info.addOverridableGrailsClass(artefactGrailsClass);
      } else {
        info.addGrailsClass(artefactGrailsClass);
      }
      info.updateComplete();

      addToLoaded(artefactClass);

      if (isInitialised()) {
        initializeArtefacts(artefactType);
      }

      return artefactGrailsClass;
    }

    throw new GrailsConfigurationException(
        "Cannot add "
            + artefactType
            + " class ["
            + artefactClass
            + "]. It is not a "
            + artefactType
            + "!");
  }