summaryrefslogtreecommitdiff
path: root/scripting
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2022-05-31 09:27:20 +0200
committerStephan Bergmann <sbergman@redhat.com>2022-05-31 14:51:57 +0200
commit2a263cbdaf16c723a93af020ebc11b3e07210242 (patch)
tree39fe04548f26018c21a4aca936c504cb53b1ecec /scripting
parent5f335154459e044b6035f099a3e08c98fe258d2b (diff)
tdf#145527 Revert "Related tdf#116767: Call URLClassLoader.close"
This reverts commit 418533f0af7cd303d559c8fb136c49e7e9fb0d79. Turned out that closing the given URLClassLoader once the script's main class has been loaded prevents the script from loading further classes located next to that main class. So abandon the Coverity suggestion that such class loaders should be closed promptly to avoid resource leaks. Change-Id: I1bcf83117836cfe317eac9850d413f2c3767bd8e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135158 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'scripting')
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java4
-rw-r--r--scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java91
2 files changed, 43 insertions, 52 deletions
diff --git a/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java b/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java
index 0974b8874110..b5e6e3085bd2 100644
--- a/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java
+++ b/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java
@@ -33,7 +33,7 @@ public class ClassLoaderFactory {
private ClassLoaderFactory() {}
- public static URLClassLoader getURLClassLoader(ScriptMetaData scriptData) {
+ public static ClassLoader getURLClassLoader(ScriptMetaData scriptData) {
ClassLoader parent = scriptData.getClass().getClassLoader();
URL[] classPath = scriptData.getClassPath();
LogUtils.DEBUG("Classpath has length " + classPath.length);
@@ -45,7 +45,7 @@ public class ClassLoaderFactory {
return getURLClassLoader(parent, classPath);
}
- public static URLClassLoader getURLClassLoader(final ClassLoader parent,
+ public static ClassLoader getURLClassLoader(final ClassLoader parent,
final URL[] classpath) {
return AccessController.doPrivileged(
new PrivilegedAction<URLClassLoader>() {
diff --git a/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java b/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java
index 63dc3169f759..eeea0d49ebe5 100644
--- a/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java
+++ b/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java
@@ -45,8 +45,6 @@ import com.sun.star.uno.Any;
import com.sun.star.uno.Type;
import com.sun.star.uno.XComponentContext;
-import java.io.IOException;
-import java.net.URLClassLoader;
import java.util.ArrayList;
public class ScriptProviderForJava {
@@ -184,63 +182,56 @@ class ScriptImpl implements XScript {
ScriptDescriptor scriptDesc =
new ScriptDescriptor(metaData.getLanguageName());
+ LogUtils.DEBUG("Classloader starting...");
+
+ ClassLoader scriptLoader =
+ ClassLoaderFactory.getURLClassLoader(metaData);
+
+ LogUtils.DEBUG("Classloader finished...");
+
+ ArrayList<Object> invocationArgList = new ArrayList<Object>();
Object[] invocationArgs = null;
- ScriptProxy script = null;
- LogUtils.DEBUG("Classloader starting...");
+ LogUtils.DEBUG("Parameter Mapping...");
- try (URLClassLoader scriptLoader = ClassLoaderFactory.getURLClassLoader(metaData)) {
- LogUtils.DEBUG("Classloader finished...");
+ // Setup Context Object
+ XScriptContext xSc =
+ ScriptContext.createContext(m_xModel, m_xInvocContext,
+ m_xContext, m_xMultiComponentFactory);
- ArrayList<Object> invocationArgList = new ArrayList<Object>();
+ scriptDesc.addArgumentType(XScriptContext.class);
+ invocationArgList.add(xSc);
- LogUtils.DEBUG("Parameter Mapping...");
+ for (int i = 0; i < params.length; i++) {
+ scriptDesc.addArgumentType(params[ i ].getClass());
+ invocationArgList.add(params[ i ]);
+ }
- // Setup Context Object
- XScriptContext xSc =
- ScriptContext.createContext(m_xModel, m_xInvocContext,
- m_xContext, m_xMultiComponentFactory);
+ if (!invocationArgList.isEmpty()) {
+ invocationArgs = invocationArgList.toArray();
+ }
- scriptDesc.addArgumentType(XScriptContext.class);
- invocationArgList.add(xSc);
+ LogUtils.DEBUG("ScriptProxy starting... ");
+ ScriptProxy script = null;
- for (int i = 0; i < params.length; i++) {
- scriptDesc.addArgumentType(params[ i ].getClass());
- invocationArgList.add(params[ i ]);
- }
+ try {
- if (!invocationArgList.isEmpty()) {
- invocationArgs = invocationArgList.toArray();
- }
+ String className = metaData.getLanguageName().substring(0,
+ metaData.getLanguageName().lastIndexOf('.'));
- LogUtils.DEBUG("ScriptProxy starting... ");
+ LogUtils.DEBUG("About to load Class " + className + " starting... ");
- try {
+ long start = new java.util.Date().getTime();
+ Class<?> c = scriptLoader.loadClass(className);
+ long end = new java.util.Date().getTime();
- String className = metaData.getLanguageName().substring(0,
- metaData.getLanguageName().lastIndexOf('.'));
-
- LogUtils.DEBUG("About to load Class " + className + " starting... ");
-
- long start = new java.util.Date().getTime();
- Class<?> c = scriptLoader.loadClass(className);
- long end = new java.util.Date().getTime();
-
- LogUtils.DEBUG("loadClass took: " + (end - start) + "milliseconds");
-
- try {
- LogUtils.DEBUG("class loaded ... ");
- script = m_resolutionPolicy.getProxy(scriptDesc, c);
- LogUtils.DEBUG("script resolved ... ");
- } catch (NoSuchMethodException e) {
- // Framework error
- ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException(
- e.toString(), null, metaData.getLanguageName(),
- metaData.getLanguage(), ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
- e2.initCause(e);
- throw e2;
- }
- } catch (ClassNotFoundException e) {
+ LogUtils.DEBUG("loadClass took: " + (end - start) + "milliseconds");
+
+ try {
+ LogUtils.DEBUG("class loaded ... ");
+ script = m_resolutionPolicy.getProxy(scriptDesc, c);
+ LogUtils.DEBUG("script resolved ... ");
+ } catch (NoSuchMethodException e) {
// Framework error
ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException(
e.toString(), null, metaData.getLanguageName(),
@@ -248,11 +239,11 @@ class ScriptImpl implements XScript {
e2.initCause(e);
throw e2;
}
- } catch (IOException e) {
+ } catch (ClassNotFoundException e) {
// Framework error
ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException(
- e.toString(), null, metaData.getLanguageName(), metaData.getLanguage(),
- ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
+ e.toString(), null, metaData.getLanguageName(),
+ metaData.getLanguage(), ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
e2.initCause(e);
throw e2;
}