Bug 572601 - [Robotics, Designer] Loading a resource from a worker thread causes an exception and in turn eventually blocks UI
- Use new methods in base designer (ElementUtils)
- Remove non-necessary dependencies in CDT editor
Change-Id: I909f34d4297579f6e36e790019d4c75c0c6a4640
Signed-off-by: Ansgar Radermacher <ansgar.radermacher@cea.fr>
diff --git a/plugins/codegen/org.eclipse.papyrus.robotics.codegen.common/src/org/eclipse/papyrus/robotics/codegen/common/utils/Helpers.java b/plugins/codegen/org.eclipse.papyrus.robotics.codegen.common/src/org/eclipse/papyrus/robotics/codegen/common/utils/Helpers.java
index b8ffd44..e2c1493 100644
--- a/plugins/codegen/org.eclipse.papyrus.robotics.codegen.common/src/org/eclipse/papyrus/robotics/codegen/common/utils/Helpers.java
+++ b/plugins/codegen/org.eclipse.papyrus.robotics.codegen.common/src/org/eclipse/papyrus/robotics/codegen/common/utils/Helpers.java
@@ -20,7 +20,6 @@
import org.eclipse.papyrus.designer.languages.cpp.profile.C_Cpp.External;
import org.eclipse.papyrus.designer.languages.cpp.profile.C_Cpp.Ptr;
import org.eclipse.papyrus.designer.transformation.core.transformations.TransformationContext;
-import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.NamedElement;
@@ -55,11 +54,7 @@
* @return the element, if found, null otherwise
*/
public static Type getTypeFromRS(Element element, URI resourceURI, String qualifiedName, boolean needCopy) {
- NamedElement ne = ElementUtils.getQualifiedElementFromRS(element, qualifiedName);
- if (ne == null) {
- PackageUtil.loadPackage(resourceURI, element.eResource().getResourceSet());
- ne = ElementUtils.getQualifiedElementFromRS(element, qualifiedName);
- }
+ NamedElement ne = ElementUtils.getQualifiedElementFromRS(element, resourceURI, qualifiedName);
if (needCopy) {
// return a copy using the current copier (avoid referencing copy and original URI)
ne = TransformationContext.current.copier.getCopy(ne);
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
index 3b3de82..8d340e7 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
@@ -207,8 +207,10 @@
if (uri.segmentCount() > 0 && uri.segment(0).length() > 0) {
// URI of model
Resource r = tempRS.getResource(uri, true);
- Package subRoot = (Package) r.getContents().get(0);
- return getChildren(subRoot);
+ if (r != null && r.getContents().size() > 0) {
+ Package subRoot = (Package) r.getContents().get(0);
+ return getChildren(subRoot);
+ }
} else {
// URI of plugin or pathmap
return ScanUtils.modelsFromPath(uri, extension).toArray();
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.library/src/org/eclipse/papyrus/robotics/library/advice/AdviceUtil.java b/plugins/customization/org.eclipse.papyrus.robotics.library/src/org/eclipse/papyrus/robotics/library/advice/AdviceUtil.java
index f10c22a..1badeb5 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.library/src/org/eclipse/papyrus/robotics/library/advice/AdviceUtil.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.library/src/org/eclipse/papyrus/robotics/library/advice/AdviceUtil.java
@@ -19,7 +19,6 @@
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.papyrus.designer.languages.common.base.ElementUtils;
import org.eclipse.papyrus.robotics.library.util.RoboticsLibResource;
-import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
import org.eclipse.swt.widgets.Display;
import org.eclipse.uml2.uml.Classifier;
import org.eclipse.uml2.uml.Element;
@@ -38,19 +37,14 @@
public static Classifier getPattern(Element anElement, String patternQN) {
Classifier pattern = getPatternWoMessage(anElement, patternQN);
if (pattern == null) {
- PackageUtil.loadPackage(RoboticsLibResource.ROBOTICS_LIB_URI, anElement.eResource().getResourceSet());
- pattern = getPatternWoMessage(anElement, patternQN);
- if (pattern == null) {
- Display.getDefault().syncExec(new Runnable() {
-
- @Override
- public void run() {
- MessageDialog.openWarning(Display.getCurrent().getActiveShell(),
- "Can not find communication pattern",
- String.format("Cannot find communication pattern %s.", patternQN));
- }
- });
- }
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ MessageDialog.openWarning(Display.getCurrent().getActiveShell(),
+ "Can not find communication pattern",
+ String.format("Cannot find communication pattern %s.", patternQN));
+ }
+ });
}
return pattern;
}
@@ -65,7 +59,7 @@
* @return the communication, if found, null otherwise
*/
public static Classifier getPatternWoMessage(Element anElement, String patternQN) {
- NamedElement pattern = ElementUtils.getQualifiedElementFromRS(anElement, patternQN);
+ NamedElement pattern = ElementUtils.getQualifiedElementFromRS(anElement, RoboticsLibResource.ROBOTICS_LIB_URI, patternQN);
if (pattern instanceof Classifier) {
return (Classifier) pattern;
}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.cdteditor/META-INF/MANIFEST.MF b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.cdteditor/META-INF/MANIFEST.MF
index 854900a..98b79ab 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.cdteditor/META-INF/MANIFEST.MF
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.cdteditor/META-INF/MANIFEST.MF
@@ -9,7 +9,6 @@
org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,3.0.0)",
org.eclipse.papyrus.designer.languages.cpp.profile;bundle-version="1.1.0",
org.eclipse.papyrus.uml.tools;bundle-version="[4.3.0,6.0.0)",
- org.eclipse.papyrus.designer.languages.common.texteditor.model;bundle-version="1.1.0",
org.eclipse.papyrus.uml.tools.utils;bundle-version="[3.4.0,5.0.0)",
org.eclipse.papyrus.uml.diagram.common;bundle-version="[3.4.0,5.0.0)",
org.eclipse.papyrus.designer.languages.common.extensionpoints;bundle-version="1.1.0",
@@ -28,7 +27,6 @@
org.eclipse.papyrus.robotics.ros2.reverse;bundle-version="0.7.0",
org.eclipse.papyrus.robotics.core;bundle-version="0.7.0",
org.eclipse.papyrus.robotics.codegen.common;bundle-version="0.8.0",
- org.eclipse.emf.transaction;bundle-version="1.9.0",
org.eclipse.emf.workspace;bundle-version="1.5.0",
org.eclipse.papyrus.infra.core;bundle-version="[3.1.0,5.0.0)",
org.eclipse.papyrus.infra.emf.gmf;bundle-version="[1.3.0,3.0.0)",
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/TransformationUtils.java b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/TransformationUtils.java
index 26f210f..0e8c2bc 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/TransformationUtils.java
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/TransformationUtils.java
@@ -16,12 +16,9 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.emf.transaction.util.TransactionUtil;
import org.eclipse.papyrus.designer.languages.common.base.ElementUtils;
import org.eclipse.papyrus.designer.transformation.core.transformations.ExecuteTransformationChain;
import org.eclipse.papyrus.designer.transformation.profile.Transformation.M2MTrafoChain;
-import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.NamedElement;
import org.eclipse.uml2.uml.Package;
@@ -55,13 +52,7 @@
* @return the ROS2 transformation chain
*/
public static M2MTrafoChain getChain(Element element) {
- TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(element);
-
- NamedElement rosChainCl = ElementUtils.getQualifiedElementFromRS(element, ROS2_TRANSFORMATION_CHAIN);
- if (rosChainCl == null) {
- PackageUtil.loadPackage(RosHelpers.ROS_LIBRARY_URI, domain.getResourceSet());
- rosChainCl = ElementUtils.getQualifiedElementFromRS(element, ROS2_TRANSFORMATION_CHAIN);
- }
+ NamedElement rosChainCl = ElementUtils.getQualifiedElementFromRS(element, RosHelpers.ROS_LIBRARY_URI, ROS2_TRANSFORMATION_CHAIN);
if (rosChainCl != null) {
return UMLUtil.getStereotypeApplication(rosChainCl, M2MTrafoChain.class);
}