Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcbrun2015-05-26 09:07:22 +0000
committerPierre-Charles David2015-05-26 15:32:56 +0000
commita7a3d50497c2224e94b58d6bdd0c4a39e785b3ee (patch)
tree763fc96d70d6dd9f855428765f3a260fe094b07a
parentbbbcc69b0abc318c5a971d56d702ea0638563085 (diff)
downloadorg.eclipse.sirius-a7a3d50497c2224e94b58d6bdd0c4a39e785b3ee.tar.gz
org.eclipse.sirius-a7a3d50497c2224e94b58d6bdd0c4a39e785b3ee.tar.xz
org.eclipse.sirius-a7a3d50497c2224e94b58d6bdd0c4a39e785b3ee.zip
[467860] Introduce a method to trigger the loading of services
Bug: 467860 Change-Id: I3fba920e09a133f5cfef60705c309cfea5dcb1c1 Signed-off-by: Cedric Brun <cedric.brun@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.common.acceleo.aql/src/org/eclipse/sirius/common/acceleo/aql/business/internal/AQLSiriusInterpreter.java12
-rw-r--r--plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/interpreter/JavaExtensionsManager.java29
-rw-r--r--plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/internal/interpreter/ServiceInterpreter.java8
3 files changed, 41 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.common.acceleo.aql/src/org/eclipse/sirius/common/acceleo/aql/business/internal/AQLSiriusInterpreter.java b/plugins/org.eclipse.sirius.common.acceleo.aql/src/org/eclipse/sirius/common/acceleo/aql/business/internal/AQLSiriusInterpreter.java
index 84f8a87b69..2c99efe3a9 100644
--- a/plugins/org.eclipse.sirius.common.acceleo.aql/src/org/eclipse/sirius/common/acceleo/aql/business/internal/AQLSiriusInterpreter.java
+++ b/plugins/org.eclipse.sirius.common.acceleo.aql/src/org/eclipse/sirius/common/acceleo/aql/business/internal/AQLSiriusInterpreter.java
@@ -177,6 +177,7 @@ public class AQLSiriusInterpreter extends AcceleoAbstractInterpreter {
@Override
public Object evaluate(EObject target, String fullExpression) throws EvaluationException {
+ this.javaExtensions.reloadIfNeeded();
String expression = new ExpressionTrimmer(fullExpression).getExpression();
Map<String, Object> variables = getVariables();
variables.put("self", target);
@@ -221,7 +222,8 @@ public class AQLSiriusInterpreter extends AcceleoAbstractInterpreter {
@Override
public ValidationResult analyzeExpression(IInterpreterContext context, String fullExpression) {
-
+ this.javaExtensions.reloadIfNeeded();
+
String trimmedExpression = new ExpressionTrimmer(fullExpression).getExpression();
ValidationResult result = new ValidationResult();
@@ -285,6 +287,14 @@ public class AQLSiriusInterpreter extends AcceleoAbstractInterpreter {
* @return The query environment currently used by this interpreter.
*/
public IQueryEnvironment getQueryEnvironment() {
+ /*
+ * The JavaExtensionManager might impact the query environment when
+ * loading classes. We trigger the reload before returning the
+ * IQueryEnvironment so that it is properly configured with EPackages
+ * and imports.
+ */
+ this.javaExtensions.reloadIfNeeded();
+
return this.queryEnvironment;
}
}
diff --git a/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/interpreter/JavaExtensionsManager.java b/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/interpreter/JavaExtensionsManager.java
index 5dfdc0cb5a..0361eef5b8 100644
--- a/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/interpreter/JavaExtensionsManager.java
+++ b/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/interpreter/JavaExtensionsManager.java
@@ -82,6 +82,10 @@ public final class JavaExtensionsManager {
private List<EPackageLoadingCallback> ePackageCallbacks = Lists.newArrayList();
+ private boolean shouldLoadServices = true;
+
+ private boolean shouldLoadEPackages = true;
+
private ClasspathChangeCallback onWorkspaceChange = new ClasspathChangeCallback() {
public void classpathChanged(Set<String> updatedProjects) {
@@ -215,8 +219,23 @@ public final class JavaExtensionsManager {
* being done concurrently.
*/
private synchronized void reload() {
- reloadEPackages();
- reloadJavaExtensions();
+ this.shouldLoadEPackages = true;
+ this.shouldLoadServices = true;
+ }
+
+ /***
+ * This will trigger the loading of EPackages or java Classes with the
+ * current configuration (search scope and imports).
+ */
+ public synchronized void reloadIfNeeded() {
+ if (this.shouldLoadEPackages) {
+ reloadEPackages();
+ this.shouldLoadEPackages = false;
+ }
+ if (this.shouldLoadServices) {
+ loadJavaExtensions(this.imports);
+ this.shouldLoadServices = false;
+ }
}
private void reloadEPackages() {
@@ -426,7 +445,7 @@ public final class JavaExtensionsManager {
public void addImport(String classQualifiedName) {
if (classQualifiedName != null && classQualifiedName.contains(".")) {
this.imports.add(classQualifiedName);
- loadJavaExtensions(Sets.newHashSet(classQualifiedName));
+ this.shouldLoadServices = true;
}
}
@@ -465,10 +484,6 @@ public final class JavaExtensionsManager {
this.couldNotBeLoaded.clear();
}
- private void reloadJavaExtensions() {
- loadJavaExtensions(this.imports);
- }
-
private void loadJavaExtensions(Set<String> addedImports) {
Map<String, Class> toUnload = Maps.newLinkedHashMap();
Map<String, Class> toLoad = Maps.newLinkedHashMap();
diff --git a/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/internal/interpreter/ServiceInterpreter.java b/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/internal/interpreter/ServiceInterpreter.java
index 4a599359a1..f4be2bb7da 100644
--- a/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/internal/interpreter/ServiceInterpreter.java
+++ b/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/internal/interpreter/ServiceInterpreter.java
@@ -121,6 +121,7 @@ public class ServiceInterpreter extends VariableInterpreter implements org.eclip
@Override
public Object evaluate(EObject target, String expression) throws EvaluationException {
+ javaExtensions.reloadIfNeeded();
Object evaluation = null;
if (target != null && expression != null && expression.startsWith(PREFIX)) {
String serviceCall = expression.substring(PREFIX.length()).trim();
@@ -253,6 +254,13 @@ public class ServiceInterpreter extends VariableInterpreter implements org.eclip
}
public Map<String, IService> getServices() {
+ /*
+ * The callback registered to the java extension manager might update
+ * this.services depending on what is loaded. We make sure any pending
+ * reload is done before returning this list.
+ */
+ javaExtensions.reloadIfNeeded();
+
return new HashMap<String, IService>(services);
}

Back to the top