class SingletonFactory implements XSingleComponentFactory, XServiceInfo {

//  private transient org.languagetool.openoffice.Main instance;
  private static org.languagetool.openoffice.Main instance = null;
//  private static org.languagetool.openoffice.LanguageToolSpellChecker spellInstance = null;
  private boolean isSpellChecker = false;
  
  SingletonFactory(boolean isSpChecker) {
    isSpellChecker = isSpChecker;
  }

  @Override
  public final Object createInstanceWithArgumentsAndContext(Object[] arguments, 
      XComponentContext xContext) {
    return createInstanceWithContext(xContext);
  }

  @Override
  public final Object createInstanceWithContext(XComponentContext xContext) {<FILL_FUNCTION_BODY>}  

  @Override
  public final String getImplementationName() {
    return isSpellChecker ? LtSpellChecker.class.getName() : Main.class.getName();
  }

  @Override
  public final boolean supportsService(String serviceName) {
    for (String s : getSupportedServiceNames()) {
      if (s.equals(serviceName)) {
        return true;
      }
    }
    return false;
  }

  @Override
  public final String[] getSupportedServiceNames() {
    return isSpellChecker ? LtSpellChecker.getServiceNames() : Main.getServiceNames();
  }
}

    if (isSpellChecker) {
      return new org.languagetool.openoffice.LtSpellChecker(xContext);
//      if (spellInstance == null) {     
//        spellInstance = new org.languagetool.openoffice.LanguageToolSpellChecker(xContext);
//      }
//      return spellInstance;
    } else {
      if (instance == null) {     
        instance = new org.languagetool.openoffice.Main(xContext);      
      } else {  
        instance.changeContext(xContext);      
      }
      return instance;
    }
  
<no_super_class>