This is an automated email from the ASF dual-hosted git repository.
rec pushed a commit to branch
refactoring/430-Resolving-type-system-imports-through-SPIs-slows-things-down-too-much
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git
The following commit(s) were added to
refs/heads/refactoring/430-Resolving-type-system-imports-through-SPIs-slows-things-down-too-much
by this push:
new bbf537fdb Issue #430: Resolving type system imports through SPIs slows
things down too much
bbf537fdb is described below
commit bbf537fdb8da15c2877d03fa1bac66b3923c606f
Author: Richard Eckart de Castilho <[email protected]>
AuthorDate: Wed Dec 18 08:56:02 2024 +0100
Issue #430: Resolving type system imports through SPIs slows things down
too much
- Make transitive import resoving optional
- Added more debug logging
---
.../org/apache/uima/tools/bnd/UimaBndPlugin.java | 86 ++++++++++++++++------
1 file changed, 62 insertions(+), 24 deletions(-)
diff --git
a/uima-bnd-plugin/src/main/java/org/apache/uima/tools/bnd/UimaBndPlugin.java
b/uima-bnd-plugin/src/main/java/org/apache/uima/tools/bnd/UimaBndPlugin.java
index 91c6daa1b..4c8adbc31 100644
--- a/uima-bnd-plugin/src/main/java/org/apache/uima/tools/bnd/UimaBndPlugin.java
+++ b/uima-bnd-plugin/src/main/java/org/apache/uima/tools/bnd/UimaBndPlugin.java
@@ -24,6 +24,7 @@ import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.regex.Pattern;
import org.apache.uima.UIMAFramework;
@@ -44,12 +45,14 @@ import aQute.bnd.header.Attrs;
import aQute.bnd.osgi.Analyzer;
import aQute.bnd.osgi.Resource;
import aQute.bnd.service.AnalyzerPlugin;
+import aQute.bnd.service.Plugin;
+import aQute.lib.converter.Converter;
+import aQute.service.reporter.Reporter;
-@BndPlugin(name = "UIMA")
+@BndPlugin(name = "UIMA", parameters = UimaBndPlugin.Configuration.class)
public class UimaBndPlugin
- implements AnalyzerPlugin
+ implements AnalyzerPlugin, Plugin
{
-
private static final Logger LOG =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final Pattern XML_FILE = Pattern.compile(".*\\.xml");
@@ -58,6 +61,21 @@ public class UimaBndPlugin
private final static XMLParser PARSER = UIMAFramework.getXMLParser();
+ private Reporter reporter;
+ private UimaBndPlugin.Configuration configuration;
+
+ @Override
+ public void setProperties(Map<String, String> aMap) throws Exception
+ {
+ configuration = Converter.cnv(UimaBndPlugin.Configuration.class, aMap);
+ }
+
+ @Override
+ public void setReporter(Reporter aReporter)
+ {
+ reporter = aReporter;
+ }
+
@Override
public boolean analyzeJar(Analyzer analyzer) throws Exception
{
@@ -69,10 +87,10 @@ public class UimaBndPlugin
for (var entry : resources.entrySet()) {
var path = entry.getKey();
var resource = entry.getValue();
-
+
try {
if (XML_FILE.matcher(path).matches()) {
- importsProcessed += analyzeXmlFile(analyzer, path,
resource);
+ importsProcessed += analyzeXmlFile(analyzer, path,
resource, 0);
}
}
catch (Exception e) {
@@ -80,26 +98,26 @@ public class UimaBndPlugin
}
}
}
-
+
LOG.info("UIMA bnd plugin processed {} imports", importsProcessed);
return false;
}
- private int analyzeXmlFile(Analyzer analyzer, String path, Resource
resource) throws Exception
+ private int analyzeXmlFile(Analyzer analyzer, String path, Resource
resource, int level) throws Exception
{
var desc = readUimaDescriptor(resource);
if (desc == null) {
return 0;
}
- LOG.debug("Found {}: {}", desc.getClass().getSimpleName(), path);
+ LOG.debug("{}Found {}: {}", repeat(" ", level),
desc.getClass().getSimpleName(), path);
var imports = getImportsFromDescriptor(desc);
var importsProcessed = 0;
for (var imp : imports) {
if (imp.getName() != null) {
- handleImportByName(analyzer, path, imp);
+ handleImportByName(analyzer, path, imp, level);
importsProcessed++;
continue;
}
@@ -108,22 +126,21 @@ public class UimaBndPlugin
handleImportByLocation(imp);
continue;
}
-
+
LOG.warn(
"Found UIMA import without name and location - ignoring,
please fix your type system description");
}
-
+
return importsProcessed;
}
private void handleImportByLocation(Import imp)
{
- LOG.warn(
- "Ignoring UIMA import by location (please only use
import-by-name): {}",
+ LOG.warn("Ignoring UIMA import by location (please only use
import-by-name): {}",
imp.getLocation());
}
- private void handleImportByName(Analyzer analyzer, String path, Import
imp) throws Exception
+ private void handleImportByName(Analyzer analyzer, String path, Import
imp, int level) throws Exception
{
var tsdPackage = imp.getName();
int lastSeparatorPosition = tsdPackage.lastIndexOf('.');
@@ -132,27 +149,30 @@ public class UimaBndPlugin
tsdPackage = tsdPackage.substring(0, lastSeparatorPosition);
}
- LOG.debug("Found UIMA import by name: {}", tsdPackage);
-
var pack = analyzer.getPackageRef(tsdPackage);
if (!QN.matcher(pack.getFQN()).matches()) {
- analyzer.warning("Import does not seem to refer to a package (%s):
%s",
- path, pack);
+ analyzer.warning("Import does not seem to refer to a package (%s):
%s", path, pack);
}
- if (!analyzer.getReferred().containsKey(pack)) {
+ var alreadyKnownImport = analyzer.getReferred().containsKey(pack);
+ if (!alreadyKnownImport) {
var attrs = new Attrs();
analyzer.getReferred().put(pack, attrs);
}
+
+ LOG.debug("{}Found UIMA import by name: {} {}", repeat(" ", level),
tsdPackage, alreadyKnownImport ? "" : "(new)");
- var importedResourcePath = imp.getName().replace('.', '/')+".xml";
+ var importedResourcePath = imp.getName().replace('.', '/') + ".xml";
var importedResource = analyzer.findResource(importedResourcePath);
if (importedResource == null) {
- analyzer.warning("Imported resource not found on classpath: {}",
importedResourcePath);
- return;
+ analyzer.warning("Imported resource not found on classpath: {}",
importedResourcePath);
+ return;
+ }
+
+ if (configuration.transitive(false)) {
+ LOG.debug("");
+ analyzeXmlFile(analyzer, importedResourcePath, importedResource,
level + 1);
}
-
- analyzeXmlFile(analyzer, importedResourcePath, importedResource);
}
private List<Import> getImportsFromDescriptor(XMLizable desc)
@@ -203,4 +223,22 @@ public class UimaBndPlugin
return Arrays.asList(aList);
}
+
+ private static String repeat(String aString, int aCount) {
+ if (aCount == 0) {
+ return "";
+ }
+
+ var buf = new StringBuilder();
+ for (var i = 0; i < aCount; i++) {
+ buf.append(aString);
+ }
+
+ return buf.toString();
+ }
+
+ public static interface Configuration
+ {
+ boolean transitive(boolean aDefault);
+ }
}
\ No newline at end of file