@Nullable
 @Override
 public TypeChecker getTypeChecker() {
   IdeaCeylonProject ceylonProject = getCeylonProject();
   if (ceylonProject == null) {
     return null;
   }
   return ceylonProject.getTypechecker();
 }
  @Override
  public void addFacetToModule(
      final Module module, @Nullable String jdkProvider, boolean forAndroid, boolean showSettings) {
    if (ceylonModel == null) {
      ceylonModel = module.getProject().getComponent(IdeaCeylonProjects.class);
      ceylonModel.addProject(module);
    }

    IdeaCeylonProject ceylonProject = (IdeaCeylonProject) ceylonModel.getProject(module);

    if (forAndroid) {
      ceylonProject.$setupForAndroid(jdkProvider);
    }

    ceylonProject.getConfiguration().save();

    CeylonFacet facet = CeylonFacet.forModule(module);
    if (facet == null) {
      facet =
          ApplicationManager.getApplication()
              .runWriteAction(
                  new Computable<CeylonFacet>() {
                    @Override
                    public CeylonFacet compute() {
                      return FacetManager.getInstance(module)
                          .addFacet(
                              CeylonFacet.getFacetType(),
                              CeylonFacet.getFacetType().getPresentableName(),
                              null);
                    }
                  });
      facet.getConfiguration().setModule(module);
    }

    if (showSettings) {
      ModulesConfigurator.showFacetSettingsDialog(facet, CeylonFacetConfiguration.COMPILATION_TAB);
    }
  }