[526568] Optimizing computation of base URIs.
diff --git a/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/UMLResourcesUtil.java b/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/UMLResourcesUtil.java
index 8f45f26..79b998d 100644
--- a/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/UMLResourcesUtil.java
+++ b/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/UMLResourcesUtil.java
@@ -469,11 +469,11 @@
 			resultURL = UMLUtil.class.getResource("UMLUtil.class"); //$NON-NLS-1$
 
 			String baseURL = resultURL.toExternalForm();
-			
-			if (baseURL.contains("/bin/")) { //$NON-NLS-1$
-				baseURL = baseURL.substring(0, baseURL.lastIndexOf("/bin/")); //$NON-NLS-1$
-			} else {
-				baseURL = "/"; //$NON-NLS-1$
+
+			int index = baseURL.lastIndexOf("/bin/"); //$NON-NLS-1$
+
+			if (index != -1) {
+				baseURL = baseURL.substring(0, index);
 			}
 
 			result = URI.createURI(baseURL, true);
@@ -502,10 +502,10 @@
 
 			String baseURL = resultURL.toExternalForm();
 
-			if (baseURL.contains("/bin/")) { //$NON-NLS-1$
-				baseURL = baseURL.substring(0, baseURL.lastIndexOf("/bin/")); //$NON-NLS-1$
-			} else {
-				baseURL = "/"; //$NON-NLS-1$
+			int index = baseURL.lastIndexOf("/bin/"); //$NON-NLS-1$
+
+			if (index != -1) {
+				baseURL = baseURL.substring(0, index);
 			}
 
 			result = URI.createURI(baseURL, true);
diff --git a/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/tests/util/StandaloneSupport.java b/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/tests/util/StandaloneSupport.java
index cc7f685..77c4208 100644
--- a/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/tests/util/StandaloneSupport.java
+++ b/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/tests/util/StandaloneSupport.java
@@ -203,13 +203,14 @@
 	}
 
 	private static URI getBaseUMLURI() {
-		URL resultURL = UMLPlugin.class.getClassLoader().getResource(
-			"model/UML2_2_UML.ecore2xml"); //$NON-NLS-1$
+		URL resultURL = UMLPlugin.class.getClassLoader()
+			.getResource("model/UML2_2_UML.ecore2xml"); //$NON-NLS-1$
 
 		URI result;
 
 		if (resultURL != null) {
-			// remove the model/UML2_2_UML.ecore2xml segments of the resource we found
+			// remove the model/UML2_2_UML.ecore2xml segments of the resource we
+			// found
 			result = URI.createURI(resultURL.toExternalForm(), true)
 				.trimSegments(2);
 		} else {
@@ -218,11 +219,11 @@
 			resultURL = UMLPlugin.class.getResource("UMLPlugin.class"); //$NON-NLS-1$
 
 			String baseURL = resultURL.toExternalForm();
-			
-			if (baseURL.contains("/bin/")) { //$NON-NLS-1$
-				baseURL = baseURL.substring(0, baseURL.lastIndexOf("/bin/")); //$NON-NLS-1$
-			} else {
-				baseURL = "/"; //$NON-NLS-1$
+
+			int index = baseURL.lastIndexOf("/bin/"); //$NON-NLS-1$
+
+			if (index != -1) {
+				baseURL = baseURL.substring(0, index);
 			}
 
 			result = URI.createURI(baseURL, true);
@@ -248,12 +249,14 @@
 
 			String baseURL = resultURL.toExternalForm();
 
-			if (baseURL.contains("/bin/")) { //$NON-NLS-1$
-				baseURL = baseURL.substring(0, baseURL.lastIndexOf("/bin/")); //$NON-NLS-1$
-			} else if (baseURL.contains("/target/classes/")) { //$NON-NLS-1$
-				baseURL = baseURL.substring(0, baseURL.indexOf("/target/classes/")); //$NON-NLS-1$
-			} else {
-				baseURL = "/"; //$NON-NLS-1$
+			int index = baseURL.lastIndexOf("/bin/"); //$NON-NLS-1$
+
+			if (index == -1) {
+				index = baseURL.lastIndexOf("/target/classes/"); //$NON-NLS-1$
+			}
+
+			if (index != -1) {
+				baseURL = baseURL.substring(0, index);
 			}
 
 			result = URI.createURI(baseURL, true);