Bug 512411: Content assist is not working for custom classes
added usage of a global classloader for resolving user classes.
Change-Id: Ia40c60f1fa2d514ee1f7d5fd3ca2722131bdff74
diff --git a/plugins/org.eclipse.ease.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.ease.ui/META-INF/MANIFEST.MF
index b36850b..2fcae7b 100644
--- a/plugins/org.eclipse.ease.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ease.ui/META-INF/MANIFEST.MF
@@ -26,7 +26,8 @@
org.objectweb.asm;bundle-version="[3.3.1,6.0.0)",
org.eclipse.ui;bundle-version="[3.105.0,4.0.0)",
org.eclipse.equinox.security;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.ease
+ org.eclipse.ease,
+ org.eclipse.ease.classloader
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.eclipse.ease.ui.Activator
Export-Package: org.eclipse.ease.ui,
diff --git a/plugins/org.eclipse.ease.ui/src/org/eclipse/ease/ui/completion/CompletionContext.java b/plugins/org.eclipse.ease.ui/src/org/eclipse/ease/ui/completion/CompletionContext.java
index 3182bb8..dceb40f 100644
--- a/plugins/org.eclipse.ease.ui/src/org/eclipse/ease/ui/completion/CompletionContext.java
+++ b/plugins/org.eclipse.ease.ui/src/org/eclipse/ease/ui/completion/CompletionContext.java
@@ -25,6 +25,7 @@
import org.eclipse.ease.ICompletionContext;
import org.eclipse.ease.IScriptEngine;
+import org.eclipse.ease.classloader.EaseClassLoader;
import org.eclipse.ease.modules.EnvironmentModule;
import org.eclipse.ease.modules.ModuleDefinition;
import org.eclipse.ease.modules.ModuleHelper;
@@ -69,6 +70,9 @@
private int fOffset;
private int fSelectionRange;
+ /** Global classloader to resolve unknown java classes (lazily loaded). */
+ private EaseClassLoader fGlobalClassLoader = null;
+
/**
* Context constructor. A context is bound to a given script engine or script type.
*
@@ -370,13 +374,13 @@
sources.add(getOriginalCode());
sources.addAll(getIncludedResources().values());
- final Pattern pattern = Pattern.compile("@type\\s([a-zA-Z\\.]+)\\s*$\\s*.*?" + Pattern.quote(name) + "\\s*=", Pattern.MULTILINE);
+ final Pattern pattern = Pattern.compile("@type\\s([a-zA-Z0-9_\\.]+)\\s*$\\s*.*?" + Pattern.quote(name) + "\\s*=", Pattern.MULTILINE);
for (final String source : sources) {
final Matcher matcher = pattern.matcher(source);
if (matcher.find()) {
try {
- return CompletionContext.class.getClassLoader().loadClass(matcher.group(1));
+ return getGlobalClassLoader().loadClass(matcher.group(1));
} catch (final ClassNotFoundException e) {
// did not work, invalid definition, giving up
return null;
@@ -388,6 +392,18 @@
}
/**
+ * Return a classloader that can access all files avaliable in the RCP application.
+ *
+ * @return global classloader
+ */
+ private EaseClassLoader getGlobalClassLoader() {
+ if (fGlobalClassLoader == null)
+ fGlobalClassLoader = new EaseClassLoader();
+
+ return fGlobalClassLoader;
+ }
+
+ /**
* Retrieve a method definition from loaded modules.
*
* @param code