This is an automated email from the ASF dual-hosted git repository.

lewismc pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new 0f81174  TIKA-3649 Perform findbugs static analysis on the project and 
address the issues (#478)
0f81174 is described below

commit 0f81174dd296ee6ab9f7afee5c67d93782203f80
Author: dk2k <[email protected]>
AuthorDate: Thu Jan 20 05:53:28 2022 +0300

    TIKA-3649 Perform findbugs static analysis on the project and address the 
issues (#478)
    
    * TIKA-3649 Perform findbugs static analysis on the project and address the 
issues
    
    Co-authored-by: dk2k <[email protected]>
---
 tika-core/pom.xml                                  | 29 ++++++++++++++++++++++
 .../java/org/apache/tika/config/ConfigBase.java    |  2 +-
 .../java/org/apache/tika/config/ServiceLoader.java |  4 +--
 .../java/org/apache/tika/config/TikaConfig.java    |  2 +-
 .../java/org/apache/tika/detect/NameDetector.java  |  6 ++---
 .../apache/tika/detect/TrainedModelDetector.java   | 19 +++++++-------
 .../apache/tika/language/detect/LanguageNames.java |  4 +--
 .../java/org/apache/tika/metadata/Property.java    |  6 ++---
 .../apache/tika/metadata/filter/NoOpFilter.java    |  2 +-
 .../mime/ProbabilisticMimeDetectionSelector.java   |  2 +-
 .../apache/tika/parser/RecursiveParserWrapper.java |  2 +-
 .../tika/parser/external/ExternalParser.java       | 14 ++++++-----
 .../external/ExternalParsersConfigReader.java      |  4 ++-
 .../java/org/apache/tika/pipes/HandlerConfig.java  |  2 +-
 .../java/org/apache/tika/pipes/PipesReporter.java  |  2 +-
 .../java/org/apache/tika/pipes/PipesResult.java    | 16 ++++++------
 .../org/apache/tika/utils/AnnotationUtils.java     |  5 ----
 17 files changed, 75 insertions(+), 46 deletions(-)

diff --git a/tika-core/pom.xml b/tika-core/pom.xml
index 74d17d3..c1f00f7 100644
--- a/tika-core/pom.xml
+++ b/tika-core/pom.xml
@@ -251,6 +251,35 @@
           </execution>
         </executions>
       </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.4</version>
+          <configuration>
+            <reportPlugins>
+              <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-project-info-reports-plugin</artifactId>
+                <version>2.8</version>
+                <reports>
+                  <report>index</report>
+                </reports>
+              </plugin>
+              <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>findbugs-maven-plugin</artifactId>
+                <version>3.0.5</version>
+                <configuration>
+                  <argLine>-Xmx256m</argLine>
+                  <argLine>-XX:MaxPermSize=256m</argLine>
+                  <timeout>240000</timeout>
+                  <effort>max</effort>
+                  <failOnError>true</failOnError>
+                </configuration>
+              </plugin>
+            </reportPlugins>
+          </configuration>
+        </plugin>
     </plugins>
   </build>
 
diff --git a/tika-core/src/main/java/org/apache/tika/config/ConfigBase.java 
b/tika-core/src/main/java/org/apache/tika/config/ConfigBase.java
index e4c7e27..04c6454 100644
--- a/tika-core/src/main/java/org/apache/tika/config/ConfigBase.java
+++ b/tika-core/src/main/java/org/apache/tika/config/ConfigBase.java
@@ -267,7 +267,7 @@ public abstract class ConfigBase {
                     tryToSet(object, localName, txt);
                 }
 
-                if (localName != null && txt != null) {
+                if (txt != null) {
                     settings.add(localName);
                 }
             }
diff --git a/tika-core/src/main/java/org/apache/tika/config/ServiceLoader.java 
b/tika-core/src/main/java/org/apache/tika/config/ServiceLoader.java
index 68674ec..b3fd155 100644
--- a/tika-core/src/main/java/org/apache/tika/config/ServiceLoader.java
+++ b/tika-core/src/main/java/org/apache/tika/config/ServiceLoader.java
@@ -363,8 +363,8 @@ public class ServiceLoader {
 
     private void collectServiceClassNames(URL resource, Collection<String> 
names)
             throws IOException {
-        try (InputStream stream = resource.openStream()) {
-            BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream, UTF_8));
+        try (InputStream stream = resource.openStream();
+                BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream, UTF_8))) {
             String line = reader.readLine();
             while (line != null) {
                 line = COMMENT.matcher(line).replaceFirst("");
diff --git a/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java 
b/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
index 35d7479..ad51ee0 100644
--- a/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
+++ b/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
@@ -82,7 +82,7 @@ import org.apache.tika.utils.XMLReaderUtils;
 public class TikaConfig {
 
     //use this to look for unneeded instantiations of TikaConfig
-    protected static AtomicInteger TIMES_INSTANTIATED = new AtomicInteger();
+    protected static final AtomicInteger TIMES_INSTANTIATED = new 
AtomicInteger();
     private final ServiceLoader serviceLoader;
     private final CompositeParser parser;
     private final CompositeDetector detector;
diff --git a/tika-core/src/main/java/org/apache/tika/detect/NameDetector.java 
b/tika-core/src/main/java/org/apache/tika/detect/NameDetector.java
index 4fa603a..1b583c1 100644
--- a/tika-core/src/main/java/org/apache/tika/detect/NameDetector.java
+++ b/tika-core/src/main/java/org/apache/tika/detect/NameDetector.java
@@ -137,9 +137,9 @@ public class NameDetector implements Detector {
             name = name.trim();
             if (name.length() > 0) {
                 // Match the name against the registered patterns
-                for (Pattern pattern : patterns.keySet()) {
-                    if (pattern.matcher(name).matches()) {
-                        return patterns.get(pattern);
+                for (Map.Entry<Pattern, MediaType> entry : 
patterns.entrySet()) {
+                    if (entry.getKey().matcher(name).matches()) {
+                        return entry.getValue();
                     }
                 }
             }
diff --git 
a/tika-core/src/main/java/org/apache/tika/detect/TrainedModelDetector.java 
b/tika-core/src/main/java/org/apache/tika/detect/TrainedModelDetector.java
index c252432..25b9f08 100644
--- a/tika-core/src/main/java/org/apache/tika/detect/TrainedModelDetector.java
+++ b/tika-core/src/main/java/org/apache/tika/detect/TrainedModelDetector.java
@@ -30,7 +30,6 @@ import java.nio.channels.ReadableByteChannel;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.tika.io.TemporaryResources;
@@ -55,19 +54,19 @@ public abstract class TrainedModelDetector implements 
Detector {
             input.mark(getMinLength());
             float[] histogram = readByteFrequencies(input);
             // writeHisto(histogram); //on testing purpose
+
+            // threshold will be considered as
+            // MediaType.OCTET_STREAM
+            float maxprob = 0.5f;
+            MediaType maxType = MediaType.OCTET_STREAM;
+
             /*
              * iterate the map to find out the one that gives the higher
              * prediction value.
              */
-            Iterator<MediaType> iter = MODEL_MAP.keySet().iterator();
-            float threshold = 0.5f;// probability threshold, any value below 
the
-            // threshold will be considered as
-            // MediaType.OCTET_STREAM
-            float maxprob = threshold;
-            MediaType maxType = MediaType.OCTET_STREAM;
-            while (iter.hasNext()) {
-                MediaType key = iter.next();
-                TrainedModel model = MODEL_MAP.get(key);
+            for (Map.Entry<MediaType, TrainedModel> entry : 
MODEL_MAP.entrySet()) {
+                MediaType key = entry.getKey();
+                TrainedModel model = entry.getValue();
                 float prob = model.predict(histogram);
                 if (maxprob < prob) {
                     maxprob = prob;
diff --git 
a/tika-core/src/main/java/org/apache/tika/language/detect/LanguageNames.java 
b/tika-core/src/main/java/org/apache/tika/language/detect/LanguageNames.java
index 7424a1b..ed52640 100644
--- a/tika-core/src/main/java/org/apache/tika/language/detect/LanguageNames.java
+++ b/tika-core/src/main/java/org/apache/tika/language/detect/LanguageNames.java
@@ -42,13 +42,13 @@ public class LanguageNames {
     }
 
     public static boolean isMacroLanguage(String languageTag) {
-        Locale locale = Locale.forLanguageTag(languageTag);
+        // Locale locale = Locale.forLanguageTag(languageTag); unused
         // TODO make it so.
         return false;
     }
 
     public static boolean hasMacroLanguage(String languageTag) {
-        Locale locale = Locale.forLanguageTag(languageTag);
+        // Locale locale = Locale.forLanguageTag(languageTag); // unused
         // TODO make it so
         return false;
     }
diff --git a/tika-core/src/main/java/org/apache/tika/metadata/Property.java 
b/tika-core/src/main/java/org/apache/tika/metadata/Property.java
index 3d75ad1..93614b7 100644
--- a/tika-core/src/main/java/org/apache/tika/metadata/Property.java
+++ b/tika-core/src/main/java/org/apache/tika/metadata/Property.java
@@ -123,9 +123,9 @@ public final class Property implements Comparable<Property> 
{
         SortedSet<Property> set = new TreeSet<>();
         String p = prefix + ":";
         synchronized (PROPERTIES) {
-            for (String name : PROPERTIES.keySet()) {
-                if (name.startsWith(p)) {
-                    set.add(PROPERTIES.get(name));
+            for (Map.Entry<String, Property> entry : PROPERTIES.entrySet()) {
+                if (entry.getKey().startsWith(p)) {
+                    set.add(entry.getValue());
                 }
             }
         }
diff --git 
a/tika-core/src/main/java/org/apache/tika/metadata/filter/NoOpFilter.java 
b/tika-core/src/main/java/org/apache/tika/metadata/filter/NoOpFilter.java
index f4e1090..d95472a 100644
--- a/tika-core/src/main/java/org/apache/tika/metadata/filter/NoOpFilter.java
+++ b/tika-core/src/main/java/org/apache/tika/metadata/filter/NoOpFilter.java
@@ -25,7 +25,7 @@ import org.apache.tika.metadata.Metadata;
  */
 public class NoOpFilter extends MetadataFilter {
 
-    public static NoOpFilter NOOP_FILTER = new NoOpFilter();
+    public static final NoOpFilter NOOP_FILTER = new NoOpFilter();
 
     @Override
     public void filter(Metadata metadata) throws TikaException {
diff --git 
a/tika-core/src/main/java/org/apache/tika/mime/ProbabilisticMimeDetectionSelector.java
 
b/tika-core/src/main/java/org/apache/tika/mime/ProbabilisticMimeDetectionSelector.java
index 1d8bfa3..5e33b85 100644
--- 
a/tika-core/src/main/java/org/apache/tika/mime/ProbabilisticMimeDetectionSelector.java
+++ 
b/tika-core/src/main/java/org/apache/tika/mime/ProbabilisticMimeDetectionSelector.java
@@ -220,7 +220,7 @@ public class ProbabilisticMimeDetectionSelector implements 
Detector {
         float maxProb = -1f;
         MediaType bestEstimate = rootMediaType;
 
-        if (possibleTypes != null && !possibleTypes.isEmpty()) {
+        if (!possibleTypes.isEmpty()) {
             int i;
             for (i = 0; i < n; i++) {
                 MediaType magictype = possibleTypes.get(i).getType();
diff --git 
a/tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java 
b/tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java
index e2a9251..2d1b6c5 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java
@@ -145,7 +145,7 @@ public class RecursiveParserWrapper extends ParserDecorator 
{
         int writeLimit = -1;
         //TODO -- rely on a new interface WriteLimiting...?
         //It'd be better not to tie this to a specific class
-        if (recursiveParserWrapperHandler instanceof 
BasicContentHandlerFactory) {
+        if (recursiveParserWrapperHandler instanceof 
BasicContentHandlerFactory) { // TODO this cond is always false
             writeLimit =
                     
((BasicContentHandlerFactory)recursiveParserWrapperHandler).getWriteLimit();
         }
diff --git 
a/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java 
b/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java
index 9a50c6f..b217d4f 100644
--- 
a/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java
+++ 
b/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java
@@ -346,7 +346,9 @@ public class ExternalParser extends AbstractParser {
 
         // Grab the output if we haven't already
         if (!outputFromStdOut) {
-            extractOutput(new FileInputStream(output), xhtml);
+            try (FileInputStream fileInputStream = new 
FileInputStream(output)) {
+                extractOutput(fileInputStream, xhtml);
+            }
         }
     }
 
@@ -408,13 +410,13 @@ public class ExternalParser extends AbstractParser {
                 String line;
                 while ((line = reader.readLine()) != null) {
                     boolean consumed = false;
-                    for (Pattern p : metadataPatterns.keySet()) {
-                        Matcher m = p.matcher(line);
+                    for (Map.Entry<Pattern, String> entry : 
metadataPatterns.entrySet()) {
+                        Matcher m = entry.getKey().matcher(line);
                         if (m.find()) {
                             consumed = true;
-                            if (metadataPatterns.get(p) != null &&
-                                    !metadataPatterns.get(p).equals("")) {
-                                metadata.add(metadataPatterns.get(p), 
m.group(1));
+                            if (entry.getValue() != null &&
+                                    !entry.getValue().equals("")) {
+                                metadata.add(entry.getValue(), m.group(1));
                             } else {
                                 metadata.add(m.group(1), m.group(2));
                             }
diff --git 
a/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
 
b/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
index 9fe06df..3c79fd3 100644
--- 
a/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
+++ 
b/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
@@ -87,7 +87,7 @@ public final class ExternalParsersConfigReader implements 
ExternalParsersConfigR
         } else {
             throw new MimeTypeException(
                     "Not a <" + EXTERNAL_PARSERS_TAG + "/> configuration 
document: " +
-                            element.getTagName());
+                            (element != null ? element.getTagName() : "n/a"));
         }
 
         return parsers;
@@ -121,6 +121,8 @@ public final class ExternalParsersConfigReader implements 
ExternalParsersConfigR
                     case METADATA_TAG:
                         
parser.setMetadataExtractionPatterns(readMetadataPatterns(child));
                         break;
+                    default:
+                        throw new IllegalArgumentException("reaction not 
defined for " + child.getTagName());
                 }
             }
         }
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/HandlerConfig.java 
b/tika-core/src/main/java/org/apache/tika/pipes/HandlerConfig.java
index 7fdbc3c..a73e229 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/HandlerConfig.java
+++ b/tika-core/src/main/java/org/apache/tika/pipes/HandlerConfig.java
@@ -29,7 +29,7 @@ public class HandlerConfig implements Serializable {
      */
     private static final long serialVersionUID = -3861669115439125268L;
 
-    public static HandlerConfig DEFAULT_HANDLER_CONFIG =
+    public static final HandlerConfig DEFAULT_HANDLER_CONFIG =
             new HandlerConfig(BasicContentHandlerFactory.HANDLER_TYPE.TEXT, 
PARSE_MODE.RMETA,
                     -1, -1);
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesReporter.java 
b/tika-core/src/main/java/org/apache/tika/pipes/PipesReporter.java
index 759b825..645f6d4 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesReporter.java
+++ b/tika-core/src/main/java/org/apache/tika/pipes/PipesReporter.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 
 public abstract class PipesReporter implements Closeable {
 
-    public static PipesReporter NO_OP_REPORTER = new PipesReporter() {
+    public static final PipesReporter NO_OP_REPORTER = new PipesReporter() {
 
         @Override
         public void report(FetchEmitTuple t, PipesResult result, long elapsed) 
{
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesResult.java 
b/tika-core/src/main/java/org/apache/tika/pipes/PipesResult.java
index 5c8c998..ace4f37 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesResult.java
+++ b/tika-core/src/main/java/org/apache/tika/pipes/PipesResult.java
@@ -35,14 +35,14 @@ public class PipesResult {
         INTERRUPTED_EXCEPTION, NO_FETCHER_FOUND;
     }
 
-    public static PipesResult CLIENT_UNAVAILABLE_WITHIN_MS =
+    public static final PipesResult CLIENT_UNAVAILABLE_WITHIN_MS =
             new PipesResult(STATUS.CLIENT_UNAVAILABLE_WITHIN_MS);
-    public static PipesResult TIMEOUT = new PipesResult(STATUS.TIMEOUT);
-    public static PipesResult OOM = new PipesResult(STATUS.OOM);
-    public static PipesResult UNSPECIFIED_CRASH = new 
PipesResult(STATUS.UNSPECIFIED_CRASH);
-    public static PipesResult EMIT_SUCCESS = new 
PipesResult(STATUS.EMIT_SUCCESS);
-    public static PipesResult INTERRUPTED_EXCEPTION = new 
PipesResult(STATUS.INTERRUPTED_EXCEPTION);
-    public static PipesResult EMPTY_OUTPUT =
+    public static final PipesResult TIMEOUT = new PipesResult(STATUS.TIMEOUT);
+    public static final PipesResult OOM = new PipesResult(STATUS.OOM);
+    public static final PipesResult UNSPECIFIED_CRASH = new 
PipesResult(STATUS.UNSPECIFIED_CRASH);
+    public static final PipesResult EMIT_SUCCESS = new 
PipesResult(STATUS.EMIT_SUCCESS);
+    public static final PipesResult INTERRUPTED_EXCEPTION = new 
PipesResult(STATUS.INTERRUPTED_EXCEPTION);
+    public static final PipesResult EMPTY_OUTPUT =
             new PipesResult(STATUS.EMPTY_OUTPUT);
     private final STATUS status;
     private final EmitData emitData;
@@ -64,6 +64,7 @@ public class PipesResult {
 
     /**
      * This assumes parse success with no parse exception
+     *
      * @param emitData
      */
     public PipesResult(EmitData emitData) {
@@ -73,6 +74,7 @@ public class PipesResult {
     /**
      * This assumes that the message is a stack trace (container
      * parse exception).
+     *
      * @param emitData
      * @param message
      */
diff --git a/tika-core/src/main/java/org/apache/tika/utils/AnnotationUtils.java 
b/tika-core/src/main/java/org/apache/tika/utils/AnnotationUtils.java
index 49248c8..cb47afb 100644
--- a/tika-core/src/main/java/org/apache/tika/utils/AnnotationUtils.java
+++ b/tika-core/src/main/java/org/apache/tika/utils/AnnotationUtils.java
@@ -24,11 +24,9 @@ import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Set;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -109,10 +107,7 @@ public class AnnotationUtils {
 
         List<ParamField> fields = PARAM_INFO.get(beanClass);
 
-        Set<String> validFieldNames = new HashSet<>();
-
         for (ParamField field : fields) {
-            validFieldNames.add(field.getName());
             Param<?> param = params.get(field.getName());
             if (param != null) {
                 if (field.getType().isAssignableFrom(param.getType())) {

Reply via email to