[550168] Keep distinct project when deresolving URIs
diff --git a/examples/org.eclipse.ocl.examples.debug.vm/src/org/eclipse/ocl/examples/debug/vm/srclookup/VMSourcePathComputer.java b/examples/org.eclipse.ocl.examples.debug.vm/src/org/eclipse/ocl/examples/debug/vm/srclookup/VMSourcePathComputer.java
index db0d88e..682323b 100644
--- a/examples/org.eclipse.ocl.examples.debug.vm/src/org/eclipse/ocl/examples/debug/vm/srclookup/VMSourcePathComputer.java
+++ b/examples/org.eclipse.ocl.examples.debug.vm/src/org/eclipse/ocl/examples/debug/vm/srclookup/VMSourcePathComputer.java
@@ -29,17 +29,18 @@
 import org.eclipse.debug.core.sourcelookup.containers.WorkspaceSourceContainer;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 
 public abstract class VMSourcePathComputer implements ISourcePathComputer
 {
 //	private static final String JAVA_SRC_COMPUTER_ID = "org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer"; //$NON-NLS-1$
-	
+
     public static IFile getIFile(String fileUnderWorkspace) {
 		IPath location = new Path(fileUnderWorkspace);
 		IFile ifile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(location);
 		return ifile;
 	}
-    
+
     public static IFile getWorkspaceFile(String name) {
         try {
             IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(name));
@@ -49,7 +50,7 @@
             return null;
         }
     }
-    
+
     public static IFile getWorkspaceFile(URI uri) {
 		String uriPath;
 		if (uri.isFile()) {
@@ -62,7 +63,7 @@
 			uriPath = uri.toString();
 		}
 		IFile ifile = getWorkspaceFile(uriPath);
-		
+
 		if (ifile == null || !ifile.exists()) {
 			if (uri.isFile()) {
 				IFile wsfile = getIFile(uriPath);
@@ -73,15 +74,17 @@
 		}
 		return ifile;
     }
-	
+
 //	private final ISourcePathComputer fJavaSourcePathComputer;
-	
+
 	public VMSourcePathComputer() {
 //		fJavaSourcePathComputer = DebugPlugin.getDefault().getLaunchManager().getSourcePathComputer(JAVA_SRC_COMPUTER_ID);
 	}
-	
+
+	@Override
 	public abstract @NonNull String getId();
-	
+
+	@Override
 	public @NonNull ISourceContainer @NonNull [] computeSourceContainers(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
 		assert configuration != null;
 		URI moduleURI = getModuleFile(configuration);
@@ -95,7 +98,7 @@
 				public Object[] findSourceElements(String name) throws CoreException {
 					URI nameURI = URI.createFileURI(name);
 					URI directoryURI = URI.createFileURI(getDirectory().toString() + "/");
-					URI relativeURI = nameURI.deresolve(directoryURI);
+					URI relativeURI = URIUtil.deresolve(nameURI, directoryURI);
 					return super.findSourceElements(relativeURI.toString());
 				}
 
@@ -105,7 +108,7 @@
 					// TODO Auto-generated method stub
 					return super.findSourceElements(name, containers);
 				}
-				
+
 			};
 		}
 		else {
@@ -118,7 +121,7 @@
 			}
 		}
 	    List<ISourceContainer> result = new ArrayList<ISourceContainer>();
-		result.add(sourceContainer);		
+		result.add(sourceContainer);
 //		result.addAll(Arrays.asList(fJavaSourcePathComputer.computeSourceContainers(configuration, monitor)));
 		@SuppressWarnings("null")@NonNull ISourceContainer @NonNull [] array = result.toArray(new ISourceContainer[result.size()]);
 		return array;
diff --git a/examples/org.eclipse.ocl.examples.emf.validation.validity/src/org/eclipse/ocl/examples/emf/validation/validity/manager/ValidityManager.java b/examples/org.eclipse.ocl.examples.emf.validation.validity/src/org/eclipse/ocl/examples/emf/validation/validity/manager/ValidityManager.java
index 1b1fa95..d271023 100644
--- a/examples/org.eclipse.ocl.examples.emf.validation.validity/src/org/eclipse/ocl/examples/emf/validation/validity/manager/ValidityManager.java
+++ b/examples/org.eclipse.ocl.examples.emf.validation.validity/src/org/eclipse/ocl/examples/emf/validation/validity/manager/ValidityManager.java
@@ -55,6 +55,7 @@
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
 import org.eclipse.ocl.pivot.utilities.LabelUtil;
 import org.eclipse.ocl.pivot.utilities.TracingOption;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 
 public class ValidityManager
 {
@@ -195,7 +196,7 @@
 					else {
 						Resource firstResource = resourceSet.getResources().get(0);
 						URI firstURI = firstResource.getURI();
-						URI resolvedURI = uri.deresolve(firstURI);
+						URI resolvedURI = URIUtil.deresolve(uri, firstURI);
 						if (resolvedURI.segmentCount() <= 0) {
 							s.append(" in " + uri.lastSegment());
 						}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreDeclarationVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreDeclarationVisitor.java
index ed7e2e0..600f871 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreDeclarationVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreDeclarationVisitor.java
@@ -80,6 +80,7 @@
 import org.eclipse.ocl.pivot.utilities.PivotConstants;
 import org.eclipse.ocl.pivot.utilities.PivotUtil;
 import org.eclipse.ocl.pivot.utilities.StringUtil;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.eclipse.ocl.pivot.values.Bag;
 import org.eclipse.ocl.pivot.values.OrderedSet;
 
@@ -611,7 +612,7 @@
 						if (uri == null) {
 							uri = EcoreUtil.getURI(eTarget);
 						}
-						URI uri2 = uri.deresolve(ecoreURI, true, true, true);
+						URI uri2 = URIUtil.deresolve(uri, ecoreURI, true, true, true);
 						value = uri2.toString();
 					}
 					else if (importedNamespace instanceof org.eclipse.ocl.pivot.Package) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/prettyprint/PrettyPrinter.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/prettyprint/PrettyPrinter.java
index 7f470cf..c6d694e 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/prettyprint/PrettyPrinter.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/prettyprint/PrettyPrinter.java
@@ -55,6 +55,7 @@
 import org.eclipse.ocl.pivot.utilities.PivotConstants;
 import org.eclipse.ocl.pivot.utilities.PivotUtil;
 import org.eclipse.ocl.pivot.utilities.StringUtil;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.eclipse.ocl.pivot.values.Unlimited;
 
 /**
@@ -578,7 +579,7 @@
 							if (uri != null) {
 								URI baseURI = options.getBaseURI();
 								if (baseURI != null) {
-									uri = uri.deresolve(baseURI);
+									uri = URIUtil.deresolve(uri, baseURI);
 								}
 								append("_'" + uri.toString() + "'");
 							}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ProjectMap.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ProjectMap.java
index 17facbe..83ecc95 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ProjectMap.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ProjectMap.java
@@ -40,6 +40,7 @@
 import org.eclipse.ocl.pivot.resource.ProjectManager;
 import org.eclipse.ocl.pivot.util.PivotPlugin;
 import org.eclipse.ocl.pivot.utilities.TracingOption;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 
 /**
  * ProjectMap extends {@link ProjectManager} to support polymorphic access in either plugin or standalone environments
@@ -272,7 +273,7 @@
 				IProjectDescriptor projectDescriptor = getProjectDescriptorInternal(genModelURI);
 				Map<@NonNull URI, @Nullable String> nsURI2className = genModel2nsURI2className.get(genModelURI);
 				assert nsURI2className != null;
-				@NonNull URI deresolvedGenModelURI = genModelURI.deresolve(projectDescriptor.getLocationURI(), true, true, true);
+				@NonNull URI deresolvedGenModelURI = URIUtil.deresolve(genModelURI, projectDescriptor.getLocationURI(), true, true, true);
 				@NonNull String genModelString = String.valueOf(deresolvedGenModelURI);
 				IResourceDescriptor resourceDescriptor = projectDescriptor.createResourceDescriptor(genModelString, nsURI2className);
 				GenModelReader genModelReader = new GenModelReader(resourceDescriptor);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java
index 17939b0..c0c0883 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/StandaloneProjectMap.java
@@ -65,6 +65,7 @@
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
 import org.eclipse.ocl.pivot.utilities.NameUtil;
 import org.eclipse.ocl.pivot.utilities.TracingOption;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.w3c.dom.Document;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -1638,7 +1639,7 @@
 			URI projectLocationURI = projectDescriptor.getLocationURI();
 			URI absoluteGenModelURI = genModelURI.resolve(projectLocationURI);
 			URI absolutePackageURI = genModelRelativeEcorePackageURI.resolve(absoluteGenModelURI);
-			@NonNull URI projectRelativeEcorePackageURI = absolutePackageURI.deresolve(projectLocationURI, true, true, true);
+			@NonNull URI projectRelativeEcorePackageURI = URIUtil.deresolve(absolutePackageURI, projectLocationURI, true, true, true);
 			return projectRelativeEcorePackageURI;
 		}
 
@@ -1673,7 +1674,7 @@
 				URI projectLocationURI = projectDescriptor.getLocationURI();
 				URI absoluteGenModelURI = genModelURI.resolve(projectLocationURI);
 				URI absolutePackageURI = genModelRelativeEcoreModelURI.resolve(absoluteGenModelURI);
-				URI relativePackageURI = absolutePackageURI.deresolve(projectLocationURI, true, true, true);
+				URI relativePackageURI = URIUtil.deresolve(absolutePackageURI, projectLocationURI, true, true, true);
 				@NonNull URI relativeEcoreModelURI = relativePackageURI.trimFragment();
 				URI resourceURI = projectDescriptor.getPlatformResourceURI();
 				URI pluginURI = projectDescriptor.getPlatformPluginURI();
@@ -2171,7 +2172,7 @@
 		@Override
 		public @NonNull IResourceDescriptor createResourceDescriptor(@NonNull String genModel, @NonNull Map<@NonNull URI, @NonNull String> nsURI2className) {
 			URI absoluteGenModelURI = URI.createURI(genModel).resolve(locationURI);
-			@NonNull URI projectGenModelURI = absoluteGenModelURI.deresolve(locationURI, true, true, true);
+			@NonNull URI projectGenModelURI = URIUtil.deresolve(absoluteGenModelURI, locationURI, true, true, true);
 			if (nsURI2className.size() <= 1) {
 				return new SinglePackageResourceDescriptor(this, projectGenModelURI, nsURI2className);
 			}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/URIUtil.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/URIUtil.java
index fc8ce92..08595b1 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/URIUtil.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/URIUtil.java
@@ -27,6 +27,31 @@
 	public static final URI PLATFORM_RESOURCE = URI.createPlatformResourceURI("/", false);
 
 	/**
+	 * Return fullURI deresolved wrt baseURI. Tnis just invokes fullURI.deresolve(baseURI) except
+	 * that platform:/x/y/... URIs are preserved as is unless both x and y aare shared. This avoids
+	 * references that migrate between projects in ways that tooling may not have initialized.
+	 */
+	public static @NonNull URI deresolve(@NonNull URI fullURI, URI baseURI) {
+	    return deresolve(fullURI, baseURI, true, false, true);
+	}
+	public static @NonNull URI deresolve(@NonNull URI fullURI, @Nullable URI baseURI, boolean preserveRootParents, boolean anyRelPath, boolean shorterRelPath) {
+		if (baseURI == null) {
+			return fullURI;
+		}
+		if (fullURI.isPlatform() && baseURI.isPlatform()) {
+			String[] segments1 = fullURI.segments();
+			String[] segments2 = baseURI.segments();
+			if ((segments1.length < 2) || (segments2.length < 2)) {
+				return fullURI;
+			}
+			if (!segments1[0].equals(segments2[0]) || !segments1[1].equals(segments2[1])) {
+				return fullURI;
+			}
+		}
+		return fullURI.deresolve(baseURI, preserveRootParents, anyRelPath, shorterRelPath);
+	}
+
+	/**
 	 * Convert uri to a form whereby it can be resolved relocatably within Eclipse.
 	 */
 	public static @NonNull URI getAbsoluteOrPlatformURI(@NonNull URI uri) {
diff --git a/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/commands/SaveASHandler.java b/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/commands/SaveASHandler.java
index 10df4b4..d92bc58 100644
--- a/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/commands/SaveASHandler.java
+++ b/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/commands/SaveASHandler.java
@@ -22,6 +22,7 @@
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.ocl.pivot.resource.ASResource;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.eclipse.ocl.xtext.base.ui.messages.BaseUIMessages;
 import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
 import org.eclipse.osgi.util.NLS;
@@ -78,7 +79,7 @@
 		IFile srcFile = ((IFileEditorInput)editorInput).getFile();
 		IProject srcProject = srcFile.getProject();
         URI projectURI = URI.createPlatformResourceURI(srcProject.getFullPath().toString() + "/", true);
-        URI outURI = asURI.deresolve(projectURI);
+        URI outURI = URIUtil.deresolve(asURI, projectURI);
         IPath outPath = new Path(outURI.toString());
 		IFile outFile = srcProject.getFile(outPath);
 		Shell shell = editor.getEditorSite().getShell();
diff --git a/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/commands/SaveCSHandler.java b/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/commands/SaveCSHandler.java
index 8dcef17..9dcf240 100644
--- a/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/commands/SaveCSHandler.java
+++ b/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/commands/SaveCSHandler.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.eclipse.ocl.xtext.base.ui.messages.BaseUIMessages;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Shell;
@@ -77,7 +78,7 @@
 		IFile srcFile = ((IFileEditorInput)editorInput).getFile();
 		IProject srcProject = srcFile.getProject();
         URI projectURI = URI.createPlatformResourceURI(srcProject.getFullPath().toString() + "/", true);
-        URI outURI = csURI.deresolve(projectURI);
+        URI outURI = URIUtil.deresolve(csURI, projectURI);
         IPath outPath = new Path(outURI.toString());
 		IFile outFile = srcProject.getFile(outPath);
 		Shell shell = editor.getEditorSite().getShell();
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
index d3195c7..d3deadb 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
@@ -55,6 +55,7 @@
 import org.eclipse.ocl.pivot.utilities.NameUtil;
 import org.eclipse.ocl.pivot.utilities.PivotConstants;
 import org.eclipse.ocl.pivot.utilities.PivotUtil;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.eclipse.ocl.pivot.values.Unlimited;
 import org.eclipse.ocl.xtext.base.as2cs.AS2CS.Factory;
 import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
@@ -165,7 +166,7 @@
 			}
 			if (importURI == null) {
 				URI fullURI = EcoreUtil.getURI(eObject != null ? eObject : importedNamespace);
-				URI deresolvedURI = fullURI.deresolve(csURI, true, true, false);
+				URI deresolvedURI = URIUtil.deresolve(fullURI, csURI, true, true, false);
 				importURI = deresolvedURI.toString();
 			}
 			for (@NonNull String alias : aliases) {
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/serializer/BaseCrossReferenceSerializer.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/serializer/BaseCrossReferenceSerializer.java
index 40e57d5..4eb0c52 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/serializer/BaseCrossReferenceSerializer.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/serializer/BaseCrossReferenceSerializer.java
@@ -22,6 +22,7 @@
 import org.eclipse.ocl.pivot.Import;
 import org.eclipse.ocl.pivot.NamedElement;
 import org.eclipse.ocl.pivot.utilities.Nameable;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.eclipse.ocl.xtext.base.as2cs.AliasAnalysis;
 import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
 import org.eclipse.ocl.xtext.basecs.ImportCS;
@@ -56,7 +57,7 @@
 		protected final IScope scope;
 		protected final @Nullable Acceptor errors;
 		private @Nullable List<ISerializationDiagnostic> recordedErrors = null;
-		
+
 		public AcceptorHelper(EObject semanticObject, CrossReference crossref, EObject target, IScope scope, @Nullable Acceptor errors) {
 			this.semanticObject = semanticObject;
 			this.crossref = crossref;
@@ -64,14 +65,14 @@
 			this.scope = scope;
 			this.errors = errors;
 		}
-		
+
 		public @Nullable String convert(String unconverted, String ruleName) {
 			try {
 				return valueConverter.toString(unconverted, ruleName);
 			} catch (ValueConverterException e) {
 				record(unconverted, e);
 				return null;
-			}			
+			}
 		}
 
 		protected @Nullable String convert(List<String> segments, String ruleName) {
@@ -115,8 +116,8 @@
 			}
 		}
 	}
-	
-	
+
+
 	@Inject
 	private LinkingHelper linkingHelper;
 
@@ -149,7 +150,7 @@
 			for (IEObjectDescription desc : elements) {
 				URI uri = URI.createURI(desc.getName().toString());
 				URI baseURI = semanticObject.eResource().getURI();
-				URI deresolvedURI = uri.deresolve(baseURI, true, true, false);
+				URI deresolvedURI = URIUtil.deresolve(uri, baseURI);
 				String unconverted = deresolvedURI.toString();
 				String converted = helper.convert(unconverted, ruleName);
 				if (converted != null) {
@@ -182,7 +183,7 @@
 							String alias = adapter.getAlias(namedElement, null);
 							if (alias != null) {
 								name = alias;
-							}	
+							}
 						}
 					}
 					String converted = helper.convert(name, ruleName);
@@ -200,7 +201,7 @@
 						uri = EcoreUtil.getURI(element);
 					}
 					URI baseURI = semanticObject.eResource().getURI();
-					URI deresolvedURI = uri.deresolve(baseURI, true, true, false);
+					URI deresolvedURI = URIUtil.deresolve(uri, baseURI);
 					String unconverted = deresolvedURI.toString();
 					String converted = helper.convert(unconverted, ruleName);
 					if (converted != null) {
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl.ui/src/org/eclipse/ocl/xtext/completeocl/ui/wizards/CompleteOCLFileNewWizard.java b/plugins/org.eclipse.ocl.xtext.completeocl.ui/src/org/eclipse/ocl/xtext/completeocl/ui/wizards/CompleteOCLFileNewWizard.java
index 6ffc073..8c37dc7 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl.ui/src/org/eclipse/ocl/xtext/completeocl/ui/wizards/CompleteOCLFileNewWizard.java
+++ b/plugins/org.eclipse.ocl.xtext.completeocl.ui/src/org/eclipse/ocl/xtext/completeocl/ui/wizards/CompleteOCLFileNewWizard.java
@@ -30,6 +30,7 @@
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.eclipse.ocl.pivot.utilities.ValueUtil;
 import org.eclipse.ocl.xtext.base.ui.wizards.AbstractFileDialog;
 import org.eclipse.ocl.xtext.base.ui.wizards.AbstractFileNewWizard;
@@ -60,22 +61,23 @@
 		String firstTypeName = null;
 		String firstPropertyName = null;
 		StringBuilder s = new StringBuilder();
-		Set<URI> uris = new HashSet<URI>(dialog.getURIs());
+		@SuppressWarnings("null")
+		Set<@NonNull URI> uris = new HashSet<>(dialog.getURIs());
 		if (uris.size() > 0) {
-			List<URI> sortedURIs = new ArrayList<URI>(uris);
-			Collections.sort(sortedURIs, new Comparator<URI>()
+			List<@NonNull URI> sortedURIs = new ArrayList<>(uris);
+			Collections.sort(sortedURIs, new Comparator<@NonNull URI>()
 			{
 				@Override
-				public int compare(URI o1, URI o2) {
+				public int compare(@NonNull URI o1, @NonNull URI o2) {
 					return o1.toString().compareTo(o2.toString());
 				}
 			});
 			ResourceSet resourceSet = new ResourceSetImpl();
-			for (URI uri : sortedURIs) {
+			for (@NonNull URI uri : sortedURIs) {
 				try {
 					Resource resource = resourceSet.getResource(uri, true);
 					URI newURI = URI.createPlatformResourceURI(newFile.getFullPath().toString(), true);
-					URI deresolvedURI = uri.deresolve(newURI);
+					URI deresolvedURI = URIUtil.deresolve(uri, newURI);
 					s.append("import '" + ValueUtil.oclToString(deresolvedURI) + "'\n");
 					if (firstPropertyName == null) {
 						for (EObject eObject : resource.getContents()) {
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src/org/eclipse/ocl/xtext/oclinecore/ui/wizards/OCLinEcoreFileNewWizard.java b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src/org/eclipse/ocl/xtext/oclinecore/ui/wizards/OCLinEcoreFileNewWizard.java
index 5c41d24..071b5a5 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src/org/eclipse/ocl/xtext/oclinecore/ui/wizards/OCLinEcoreFileNewWizard.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/src/org/eclipse/ocl/xtext/oclinecore/ui/wizards/OCLinEcoreFileNewWizard.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.pivot.utilities.URIUtil;
 import org.eclipse.ocl.pivot.utilities.ValueUtil;
 import org.eclipse.ocl.xtext.base.ui.wizards.AbstractFileDialog;
 import org.eclipse.ocl.xtext.base.ui.wizards.AbstractFileNewWizardPage;
@@ -29,11 +30,12 @@
 {
 	@Override
 	protected void appendImports(StringBuilder s, AbstractFileDialog dialog, IFile newFile) {
-		List<URI> uris = dialog.getURIs();
+		@SuppressWarnings("null")
+		List<@NonNull URI> uris = dialog.getURIs();
 		if (uris.size() > 0) {
 			URI newURI = URI.createPlatformResourceURI(newFile.getFullPath().toString(), true);
-			for (URI uri : uris) {
-				@NonNull URI deresolvedURI = uri.deresolve(newURI);
+			for (@NonNull URI uri : uris) {
+				URI deresolvedURI = URIUtil.deresolve(uri, newURI);
 				s.append("import '" + ValueUtil.oclToString(deresolvedURI) + "';\n");
 			}
 			s.append("\n");