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())) {