From 6e2b3cf9d92a0b725a6da065223ef7afd09f4b93 Mon Sep 17 00:00:00 2001 From: Martin Wiesner Date: Mon, 15 Jul 2024 10:58:51 +0200 Subject: [PATCH] OPENNLP-1596 Modernize immutable collection creation --- .../lemmatizer/MorfologikLemmatizer.java | 3 +- .../opennlp/tools/doccat/DocumentSample.java | 11 +--- .../formats/brat/AnnotationConfiguration.java | 4 +- .../tools/formats/brat/EventAnnotation.java | 4 +- .../tools/formats/muc/MucElementNames.java | 14 ++--- .../formats/muc/MucNameContentHandler.java | 21 +------ .../ontonotes/OntoNotesNameSampleStream.java | 3 +- .../opennlp/tools/lemmatizer/LemmaSample.java | 9 +-- .../tools/namefind/NameFinderEventStream.java | 6 +- .../opennlp/tools/namefind/NameSample.java | 2 +- .../tools/namefind/NameSampleTypeFilter.java | 2 +- .../opennlp/tools/tokenize/TokenSample.java | 2 +- .../opennlp/uima/normalizer/Normalizer.java | 59 ++++++++----------- .../util/AnnotationComboIteratorTest.java | 2 - 14 files changed, 43 insertions(+), 99 deletions(-) diff --git a/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/lemmatizer/MorfologikLemmatizer.java b/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/lemmatizer/MorfologikLemmatizer.java index 6a3b8db11..42d4ecb4e 100644 --- a/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/lemmatizer/MorfologikLemmatizer.java +++ b/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/lemmatizer/MorfologikLemmatizer.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Objects; @@ -71,7 +70,7 @@ private List lemmatize(String word, String postag) { lemmas.add(asString(wordData.getStem())); } } - return Collections.unmodifiableList(new ArrayList<>(lemmas)); + return List.copyOf(lemmas); } private String asString(CharSequence tag) { diff --git a/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentSample.java b/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentSample.java index b64adb43a..95d7b1202 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentSample.java +++ b/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentSample.java @@ -17,7 +17,6 @@ package opennlp.tools.doccat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -57,13 +56,8 @@ public DocumentSample(String category, String[] text, Map extraI Objects.requireNonNull(text, "text must not be null"); this.category = Objects.requireNonNull(category, "category must not be null"); - this.text = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(text))); - - if (extraInformation == null) { - this.extraInformation = Collections.emptyMap(); - } else { - this.extraInformation = extraInformation; - } + this.text = List.of(text); + this.extraInformation = Objects.requireNonNullElse(extraInformation, Collections.emptyMap()); } /** @@ -117,7 +111,6 @@ public boolean equals(Object obj) { } if (obj instanceof DocumentSample a) { - return getCategory().equals(a.getCategory()) && Arrays.equals(getText(), a.getText()); } diff --git a/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AnnotationConfiguration.java b/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AnnotationConfiguration.java index 35e7221e4..b1c7703f5 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AnnotationConfiguration.java +++ b/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AnnotationConfiguration.java @@ -25,7 +25,6 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -42,8 +41,7 @@ public class AnnotationConfiguration { private final Map typeToClassMap; public AnnotationConfiguration(Map typeToClassMap) { - - this.typeToClassMap = Collections.unmodifiableMap(new HashMap<>(typeToClassMap)); + this.typeToClassMap = Map.copyOf(typeToClassMap); } public String getTypeClass(String type) { diff --git a/opennlp-tools/src/main/java/opennlp/tools/formats/brat/EventAnnotation.java b/opennlp-tools/src/main/java/opennlp/tools/formats/brat/EventAnnotation.java index 96495698f..387b8b096 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/formats/brat/EventAnnotation.java +++ b/opennlp-tools/src/main/java/opennlp/tools/formats/brat/EventAnnotation.java @@ -17,8 +17,6 @@ package opennlp.tools.formats.brat; -import java.util.Collections; -import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -31,7 +29,7 @@ protected EventAnnotation(String id, String type, String eventTrigger, Map(arguments)); + this.arguments = Map.copyOf(arguments); } public String getEventTrigger() { diff --git a/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucElementNames.java b/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucElementNames.java index 6574fd041..23eb09f26 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucElementNames.java +++ b/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucElementNames.java @@ -17,8 +17,6 @@ package opennlp.tools.formats.muc; -import java.util.Collections; -import java.util.HashSet; import java.util.Set; class MucElementNames { @@ -32,13 +30,11 @@ class MucElementNames { static final Set CONTENT_ELEMENTS; static { - Set contentElementNames = new HashSet<>(); - contentElementNames.add(MucElementNames.HEADLINE_ELEMENT); - contentElementNames.add(MucElementNames.DATELINE_ELEMENT); - contentElementNames.add(MucElementNames.DD_ELEMENT); - contentElementNames.add(MucElementNames.SENTENCE_ELEMENT); - - CONTENT_ELEMENTS = Collections.unmodifiableSet(contentElementNames); + CONTENT_ELEMENTS = Set.of( + MucElementNames.HEADLINE_ELEMENT, + MucElementNames.DATELINE_ELEMENT, + MucElementNames.DD_ELEMENT, + MucElementNames.SENTENCE_ELEMENT); } private MucElementNames() { diff --git a/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucNameContentHandler.java b/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucNameContentHandler.java index 284a20b79..797342294 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucNameContentHandler.java +++ b/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucNameContentHandler.java @@ -19,8 +19,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; @@ -43,23 +41,8 @@ public class MucNameContentHandler extends SgmlParser.ContentHandler { private static final Set EXPECTED_TYPES; static { - Set types = new HashSet<>(); - - types.add("PERSON"); - types.add("ORGANIZATION"); - types.add("LOCATION"); - types.add("DATE"); - types.add("TIME"); - types.add("MONEY"); - types.add("PERCENT"); - - EXPECTED_TYPES = Collections.unmodifiableSet(types); - - Set nameElements = new HashSet<>(); - nameElements.add(ENTITY_ELEMENT_NAME); - nameElements.add(TIME_ELEMENT_NAME); - nameElements.add(NUM_ELEMENT_NAME); - NAME_ELEMENT_NAMES = Collections.unmodifiableSet(nameElements); + EXPECTED_TYPES = Set.of("PERSON", "ORGANIZATION", "LOCATION", "DATE", "TIME", "MONEY", "PERCENT"); + NAME_ELEMENT_NAMES = Set.of(ENTITY_ELEMENT_NAME, TIME_ELEMENT_NAME, NUM_ELEMENT_NAME); } private final Tokenizer tokenizer; diff --git a/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesNameSampleStream.java b/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesNameSampleStream.java index bff976619..8dc09af88 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesNameSampleStream.java +++ b/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesNameSampleStream.java @@ -37,8 +37,7 @@ /** * Name Sample Stream parser for the OntoNotes 4.0 corpus. */ -public class OntoNotesNameSampleStream extends - FilterObjectStream { +public class OntoNotesNameSampleStream extends FilterObjectStream { private final Map tokenConversionMap; diff --git a/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSample.java b/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSample.java index 6cb70aa19..3ab1d5a72 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSample.java +++ b/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSample.java @@ -17,9 +17,7 @@ package opennlp.tools.lemmatizer; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Objects; @@ -60,9 +58,9 @@ public LemmaSample(List tokens, List tags, List lemmas) validateArguments(tokens.size(), tags.size(), lemmas.size()); - this.tokens = Collections.unmodifiableList(new ArrayList<>(tokens)); - this.tags = Collections.unmodifiableList(new ArrayList<>(tags)); - this.lemmas = Collections.unmodifiableList(new ArrayList<>(lemmas)); + this.tokens = List.copyOf(tokens); + this.tags = List.copyOf(tags); + this.lemmas = List.copyOf(lemmas); } /** @@ -120,7 +118,6 @@ public boolean equals(Object obj) { } if (obj instanceof LemmaSample a) { - return Arrays.equals(getTokens(), a.getTokens()) && Arrays.equals(getTags(), a.getTags()) && Arrays.equals(getLemmas(), a.getLemmas()); diff --git a/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderEventStream.java b/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderEventStream.java index d6361b343..81ffd6d88 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderEventStream.java +++ b/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderEventStream.java @@ -58,11 +58,7 @@ public NameFinderEventStream(ObjectStream dataStream, String type, NameContextGenerator contextGenerator, SequenceCodec codec) { super(dataStream); - if (codec == null) { - this.codec = new BioCodec(); - } else { - this.codec = codec; - } + this.codec = Objects.requireNonNullElseGet(codec, BioCodec::new); this.contextGenerator = contextGenerator; this.contextGenerator.addFeatureGenerator( new WindowFeatureGenerator(additionalContextFeatureGenerator, 8, 8)); diff --git a/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSample.java b/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSample.java index dd503b7dc..db57fce73 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSample.java +++ b/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSample.java @@ -66,7 +66,7 @@ public NameSample(String id, String[] sentence, Span[] names, String[][] additio names = new Span[0]; } - this.sentence = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(sentence))); + this.sentence = List.of(sentence); List namesList = Arrays.asList(names); Collections.sort(namesList); this.names = Collections.unmodifiableList(namesList); diff --git a/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleTypeFilter.java b/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleTypeFilter.java index 4b3f6228b..bb818553c 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleTypeFilter.java +++ b/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleTypeFilter.java @@ -56,7 +56,7 @@ public NameSampleTypeFilter(String[] types, ObjectStream samples) { */ public NameSampleTypeFilter(Set types, ObjectStream samples) { super(samples); - this.types = Collections.unmodifiableSet(new HashSet<>(types)); + this.types = Set.copyOf(types); } @Override diff --git a/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenSample.java b/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenSample.java index a4aca08fd..591888b9b 100644 --- a/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenSample.java +++ b/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenSample.java @@ -53,7 +53,7 @@ public TokenSample(String text, Span[] tokenSpans) { Objects.requireNonNull(tokenSpans, "tokenSpans must not be null"); this.text = Objects.requireNonNull(text, "text must not be null"); - this.tokenSpans = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(tokenSpans))); + this.tokenSpans = List.of(tokenSpans); for (Span tokenSpan : tokenSpans) { if (tokenSpan.getStart() < 0 || tokenSpan.getStart() > text.length() || diff --git a/opennlp-uima/src/main/java/opennlp/uima/normalizer/Normalizer.java b/opennlp-uima/src/main/java/opennlp/uima/normalizer/Normalizer.java index c303a02e1..f90e6fce4 100644 --- a/opennlp-uima/src/main/java/opennlp/uima/normalizer/Normalizer.java +++ b/opennlp-uima/src/main/java/opennlp/uima/normalizer/Normalizer.java @@ -20,8 +20,6 @@ import java.io.IOException; import java.io.InputStream; import java.text.ParseException; -import java.util.Collections; -import java.util.HashSet; import java.util.Set; import org.apache.uima.UimaContext; @@ -65,17 +63,10 @@ public class Normalizer extends CasAnnotator_ImplBase { private static final Set SUPPORTED_TYPES; static { - Set supportedTypes = new HashSet<>(); - - supportedTypes.add(CAS.TYPE_NAME_STRING); - supportedTypes.add(CAS.TYPE_NAME_BYTE); - supportedTypes.add(CAS.TYPE_NAME_SHORT); - supportedTypes.add(CAS.TYPE_NAME_INTEGER); - supportedTypes.add(CAS.TYPE_NAME_LONG); - supportedTypes.add(CAS.TYPE_NAME_FLOAT); - supportedTypes.add(CAS.TYPE_NAME_DOUBLE); - - SUPPORTED_TYPES = Collections.unmodifiableSet(supportedTypes); + SUPPORTED_TYPES = Set.of(CAS.TYPE_NAME_STRING, + CAS.TYPE_NAME_BYTE, CAS.TYPE_NAME_SHORT, + CAS.TYPE_NAME_INTEGER, CAS.TYPE_NAME_LONG, + CAS.TYPE_NAME_FLOAT, CAS.TYPE_NAME_DOUBLE); } private UimaContext context; @@ -100,23 +91,24 @@ public class Normalizer extends CasAnnotator_ImplBase { private StringDictionary mLookupDictionary; /** - * Initializes a new instance. - *

- * Note: Use {@link #initialize(UimaContext) } to initialize this instance. Not - * use the constructor. + * Initializes a {@link Normalizer} instance. + * + * @apiNote Use {@link #initialize(UimaContext)} to initialize this instance. + * Do not use the constructor. */ - public Normalizer() { + private Normalizer() { // must not be implemented ! } /** - * Initializes the current instance with the given context. + * Initializes the current instance with the given {@link UimaContext context}. *

- * Note: Do all initialization in this method, do not use the constructor. * @param context context to initialize + * @throws ResourceInitializationException Thrown if errors occurred during initialization of resources. + * + * @implNote Do all initialization in this method, do not use the constructor. */ - public void initialize(UimaContext context) - throws ResourceInitializationException { + public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); @@ -201,8 +193,9 @@ public void process(CAS tcas) { text = normalizedText; } } + String name = mStructureFeature.getRange().getName(); - if (CAS.TYPE_NAME_STRING.equals(mStructureFeature.getRange().getName())) { + if (CAS.TYPE_NAME_STRING.equals(name)) { nameAnnotation.setStringValue(mStructureFeature, text); } else { @@ -216,24 +209,18 @@ public void process(CAS tcas) { continue; } - if (CAS.TYPE_NAME_BYTE.equals(mStructureFeature.getRange().getName())) { + if (CAS.TYPE_NAME_BYTE.equals(name)) { nameAnnotation.setByteValue(mStructureFeature, number.byteValue()); - } else if (CAS.TYPE_NAME_SHORT.equals(mStructureFeature.getRange() - .getName())) { + } else if (CAS.TYPE_NAME_SHORT.equals(name)) { nameAnnotation.setShortValue(mStructureFeature, number.shortValue()); - } else if (CAS.TYPE_NAME_INTEGER.equals(mStructureFeature.getRange() - .getName())) { + } else if (CAS.TYPE_NAME_INTEGER.equals(name)) { nameAnnotation.setIntValue(mStructureFeature, number.intValue()); - } else if (CAS.TYPE_NAME_LONG.equals(mStructureFeature.getRange() - .getName())) { + } else if (CAS.TYPE_NAME_LONG.equals(name)) { nameAnnotation.setLongValue(mStructureFeature, number.longValue()); - } else if (CAS.TYPE_NAME_FLOAT.equals(mStructureFeature.getRange() - .getName())) { + } else if (CAS.TYPE_NAME_FLOAT.equals(name)) { nameAnnotation.setFloatValue(mStructureFeature, number.floatValue()); - } else if (CAS.TYPE_NAME_DOUBLE.equals(mStructureFeature.getRange() - .getName())) { - nameAnnotation - .setDoubleValue(mStructureFeature, number.doubleValue()); + } else if (CAS.TYPE_NAME_DOUBLE.equals(name)) { + nameAnnotation.setDoubleValue(mStructureFeature, number.doubleValue()); } } } diff --git a/opennlp-uima/src/test/java/opennlp/uima/util/AnnotationComboIteratorTest.java b/opennlp-uima/src/test/java/opennlp/uima/util/AnnotationComboIteratorTest.java index b107673f5..e3204fe80 100644 --- a/opennlp-uima/src/test/java/opennlp/uima/util/AnnotationComboIteratorTest.java +++ b/opennlp-uima/src/test/java/opennlp/uima/util/AnnotationComboIteratorTest.java @@ -39,8 +39,6 @@ public class AnnotationComboIteratorTest { *

* The iterator was either crashing with a NoSuchElementException or it just left * out the first token in the next sentence. - * - * @throws IOException */ @Test public void OPENNLP_676() throws IOException {