class Italian extends Language implements AutoCloseable {

  private LanguageModel languageModel;
  
  @Override
  public String getName() {
    return "Italian";
  }

  @Override
  public String getShortCode() {
    return "it";
  }
  
  @Override
  public String[] getCountries() {
    return new String[]{"IT", "CH"};
  }

  @NotNull
  @Override
  public Tagger createDefaultTagger() {
    return new ItalianTagger();
  }

  @Override
  public SentenceTokenizer createDefaultSentenceTokenizer() {
    return new SRXSentenceTokenizer(this);
  }

  @Override
  public Contributor[] getMaintainers() {
    Contributor contributor = new Contributor("Paolo Bianchini");
    return new Contributor[] { contributor };
  }

  @Override
  public List<Rule> getRelevantRules(ResourceBundle messages, UserConfig userConfig, Language motherTongue, List<Language> altLanguages) throws IOException {<FILL_FUNCTION_BODY>}

  /** @since 3.1 */
  @Override
  public synchronized LanguageModel getLanguageModel(File indexDir) throws IOException {
    languageModel = initLanguageModel(indexDir, languageModel);
    return languageModel;
  }

  /** @since 3.1 */
  @Override
  public List<Rule> getRelevantLanguageModelRules(ResourceBundle messages, LanguageModel languageModel, UserConfig userConfig) throws IOException {
    return Arrays.asList(
            new ItalianConfusionProbabilityRule(messages, languageModel, this)
    );
  }

  /**
   * Closes the language model, if any. 
   * @since 3.1
   */
  @Override
  public void close() throws Exception {
    if (languageModel != null) {
      languageModel.close();
    }
  }

  @Override
  public Disambiguator createDefaultDisambiguator() {
    return new ItalianRuleDisambiguator();
  }
  
  @Nullable
  @Override
  public Synthesizer createDefaultSynthesizer() {
    return ItalianSynthesizer.INSTANCE;
  }

  @Override
  public LanguageMaintainedState getMaintainedState() {
    return LanguageMaintainedState.ActivelyMaintained;
  }

  @Nullable
  @Override
  protected SpellingCheckRule createDefaultSpellingRule(ResourceBundle messages) throws IOException {
    return new MorfologikItalianSpellerRule(messages, this, null, null);
  }
}

    return Arrays.asList(
            new WhitespaceBeforePunctuationRule(messages),
            new CommaWhitespaceRule(messages),
            new DoublePunctuationRule(messages),
            new GenericUnpairedBracketsRule(messages,
                    Arrays.asList("[", "(", "{", "»", "«" /*"‘"*/),
                    Arrays.asList("]", ")", "}", "«", "»" /*"’"*/)),
            new MorfologikItalianSpellerRule(messages, this, userConfig, altLanguages),
            new UppercaseSentenceStartRule(messages, this),
            new ItalianWordRepeatRule(messages, this),
            new MultipleWhitespaceRule(messages, this)
    );
  
<methods>public java.lang.String adaptSuggestion(java.lang.String) ,public List<org.languagetool.rules.RuleMatch> adaptSuggestions(List<org.languagetool.rules.RuleMatch>, Set<java.lang.String>) ,public org.languagetool.rules.RuleMatch adjustMatch(org.languagetool.rules.RuleMatch, List<java.lang.String>) ,public org.languagetool.chunking.Chunker createDefaultChunker() ,public org.languagetool.tagging.disambiguation.Disambiguator createDefaultDisambiguator() ,public org.languagetool.JLanguageTool createDefaultJLanguageTool() ,public org.languagetool.chunking.Chunker createDefaultPostDisambiguationChunker() ,public org.languagetool.tokenizers.SentenceTokenizer createDefaultSentenceTokenizer() ,public org.languagetool.synthesis.Synthesizer createDefaultSynthesizer() ,public org.languagetool.tagging.Tagger createDefaultTagger() ,public org.languagetool.tokenizers.Tokenizer createDefaultWordTokenizer() ,public boolean equals(java.lang.Object) ,public boolean equalsConsiderVariantsIfSpecified(org.languagetool.Language) ,public synchronized org.languagetool.chunking.Chunker getChunker() ,public java.lang.String getClosingDoubleQuote() ,public java.lang.String getClosingSingleQuote() ,public java.lang.String getCommonWordsPath() ,public java.lang.String getConsistencyRulePrefix() ,public abstract java.lang.String[] getCountries() ,public List<java.lang.String> getDefaultDisabledRulesForVariant() ,public List<java.lang.String> getDefaultEnabledRulesForVariant() ,public org.languagetool.Language getDefaultLanguageVariant() ,public org.languagetool.rules.spelling.SpellingCheckRule getDefaultSpellingRule() ,public org.languagetool.rules.spelling.SpellingCheckRule getDefaultSpellingRule(java.util.ResourceBundle) ,public org.languagetool.rules.patterns.Unifier getDisambiguationUnifier() ,public org.languagetool.rules.patterns.UnifierConfiguration getDisambiguationUnifierConfiguration() ,public synchronized org.languagetool.tagging.disambiguation.Disambiguator getDisambiguator() ,public java.util.regex.Pattern getIgnoredCharactersRegex() ,public org.languagetool.languagemodel.LanguageModel getLanguageModel(java.io.File) throws java.io.IOException,public java.util.Locale getLocale() ,public java.util.Locale getLocaleWithCountryAndVariant() ,public org.languagetool.LanguageMaintainedState getMaintainedState() ,public abstract org.languagetool.language.Contributor[] getMaintainers() ,public org.languagetool.rules.spelling.multitoken.MultitokenSpeller getMultitokenSpeller() ,public abstract java.lang.String getName() ,public java.lang.String getOpeningDoubleQuote() ,public java.lang.String getOpeningSingleQuote() ,public synchronized org.languagetool.chunking.Chunker getPostDisambiguationChunker() ,public Map<java.lang.String,java.lang.Integer> getPriorityMap() ,public List<org.languagetool.rules.Rule> getRelevantLanguageModelCapableRules(java.util.ResourceBundle, org.languagetool.languagemodel.LanguageModel, org.languagetool.GlobalConfig, org.languagetool.UserConfig, org.languagetool.Language, List<org.languagetool.Language>) throws java.io.IOException,public List<org.languagetool.rules.Rule> getRelevantLanguageModelRules(java.util.ResourceBundle, org.languagetool.languagemodel.LanguageModel, org.languagetool.UserConfig) throws java.io.IOException,public List<org.languagetool.rules.Rule> getRelevantRemoteRules(java.util.ResourceBundle, List<org.languagetool.rules.RemoteRuleConfig>, org.languagetool.GlobalConfig, org.languagetool.UserConfig, org.languagetool.Language, List<org.languagetool.Language>, boolean) throws java.io.IOException,public abstract List<org.languagetool.rules.Rule> getRelevantRules(java.util.ResourceBundle, org.languagetool.UserConfig, org.languagetool.Language, List<org.languagetool.Language>) throws java.io.IOException,public List<org.languagetool.rules.Rule> getRelevantRulesGlobalConfig(java.util.ResourceBundle, org.languagetool.GlobalConfig, org.languagetool.UserConfig, org.languagetool.Language, List<org.languagetool.Language>) throws java.io.IOException,public Function<org.languagetool.rules.Rule,org.languagetool.rules.Rule> getRemoteEnhancedRules(java.util.ResourceBundle, List<org.languagetool.rules.RemoteRuleConfig>, org.languagetool.UserConfig, org.languagetool.Language, List<org.languagetool.Language>, boolean) throws java.io.IOException,public List<java.lang.String> getRuleFileNames() ,public int getRulePriority(org.languagetool.rules.Rule) ,public synchronized org.languagetool.tokenizers.SentenceTokenizer getSentenceTokenizer() ,public abstract java.lang.String getShortCode() ,public final java.lang.String getShortCodeWithCountryAndVariant() ,public synchronized org.languagetool.synthesis.Synthesizer getSynthesizer() ,public synchronized org.languagetool.tagging.Tagger getTagger() ,public final java.lang.String getTranslatedName(java.util.ResourceBundle) ,public org.languagetool.rules.patterns.Unifier getUnifier() ,public org.languagetool.rules.patterns.UnifierConfiguration getUnifierConfiguration() ,public java.lang.String getVariant() ,public synchronized org.languagetool.tokenizers.Tokenizer getWordTokenizer() ,public boolean hasMinMatchesRules() ,public boolean hasNGramFalseFriendRule(org.languagetool.Language) ,public final boolean hasVariant() ,public int hashCode() ,public boolean isAdvancedTypographyEnabled() ,public boolean isExternal() ,public boolean isHiddenFromGui() ,public boolean isSpellcheckOnlyLanguage() ,public boolean isVariant() ,public List<org.languagetool.rules.RuleMatch> mergeSuggestions(List<org.languagetool.rules.RuleMatch>, org.languagetool.markup.AnnotatedText, Set<java.lang.String>) ,public List<java.lang.String> prepareLineForSpeller(java.lang.String) ,public void setChunker(org.languagetool.chunking.Chunker) ,public void setDisambiguator(org.languagetool.tagging.disambiguation.Disambiguator) ,public void setPostDisambiguationChunker(org.languagetool.chunking.Chunker) ,public void setSentenceTokenizer(org.languagetool.tokenizers.SentenceTokenizer) ,public void setSynthesizer(org.languagetool.synthesis.Synthesizer) ,public void setTagger(org.languagetool.tagging.Tagger) ,public void setWordTokenizer(org.languagetool.tokenizers.Tokenizer) ,public java.lang.String toAdvancedTypography(java.lang.String) ,public final java.lang.String toString() <variables>private static final java.util.regex.Pattern APOSTROPHE,private static final org.languagetool.tagging.disambiguation.Disambiguator DEMO_DISAMBIGUATOR,private static final org.languagetool.tagging.Tagger DEMO_TAGGER,private static final java.util.regex.Pattern DOUBLE_QUOTE_PATTERN,private static final java.util.regex.Pattern ELLIPSIS,private static final java.util.regex.Pattern INSIDE_SUGGESTION,private static final java.util.regex.Pattern NBSPACE1,private static final java.util.regex.Pattern NBSPACE2,private static final java.util.regex.Pattern QUOTED_CHAR_PATTERN,private static final org.languagetool.tokenizers.SentenceTokenizer SENTENCE_TOKENIZER,private static final java.util.regex.Pattern SINGLE_QUOTE_PATTERN,private static final java.util.regex.Pattern SUGGESTION_CLOSE_TAG,private static final java.util.regex.Pattern SUGGESTION_OPEN_TAG,private static final java.util.regex.Pattern TYPOGRAPHY_PATTERN_1,private static final java.util.regex.Pattern TYPOGRAPHY_PATTERN_2,private static final java.util.regex.Pattern TYPOGRAPHY_PATTERN_3,private static final java.util.regex.Pattern TYPOGRAPHY_PATTERN_4,private static final java.util.regex.Pattern TYPOGRAPHY_PATTERN_5,private static final org.languagetool.tokenizers.WordTokenizer WORD_TOKENIZER,private org.languagetool.chunking.Chunker chunker,private final org.languagetool.rules.patterns.UnifierConfiguration disambiguationUnifierConfig,private org.languagetool.tagging.disambiguation.Disambiguator disambiguator,private final java.util.regex.Pattern ignoredCharactersRegex,private static final Map<Class<org.languagetool.Language>,org.languagetool.JLanguageTool> languagetoolInstances,private static final Logger logger,private final java.util.concurrent.atomic.AtomicBoolean noLmWarningPrinted,private List<org.languagetool.rules.patterns.AbstractPatternRule> patternRules,private org.languagetool.chunking.Chunker postDisambiguationChunker,private org.languagetool.tokenizers.SentenceTokenizer sentenceTokenizer,private java.lang.String shortCodeWithCountryAndVariant,private static final Map<Class<? extends org.languagetool.Language>,org.languagetool.rules.spelling.SpellingCheckRule> spellingRules,private org.languagetool.synthesis.Synthesizer synthesizer,private org.languagetool.tagging.Tagger tagger,private final org.languagetool.rules.patterns.UnifierConfiguration unifierConfig,private org.languagetool.tokenizers.Tokenizer wordTokenizer