Code cleanup.
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/ProjectVariable_useProjectName_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectName_Test.java
similarity index 92%
rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/ProjectVariable_useProjectName_Test.java
rename to com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectName_Test.java
index 417f81a..d03094f 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/ProjectVariable_useProjectName_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectName_Test.java
@@ -6,12 +6,14 @@
*
* http://www.eclipse.org/legal/epl-v10.html
*/
-package com.google.eclipse.protobuf.ui.util;
+package com.google.eclipse.protobuf.ui.preferences.paths;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
+import com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable;
+
import org.eclipse.core.resources.IProject;
import org.junit.*;
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/ProjectVariable_useProjectVariable_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectVariable_Test.java
similarity index 92%
rename from com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/ProjectVariable_useProjectVariable_Test.java
rename to com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectVariable_Test.java
index 4cab0c5..36fed91 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/ProjectVariable_useProjectVariable_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable_useProjectVariable_Test.java
@@ -6,12 +6,14 @@
*
* http://www.eclipse.org/legal/epl-v10.html
*/
-package com.google.eclipse.protobuf.ui.util;
+package com.google.eclipse.protobuf.ui.preferences.paths;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
+import com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable;
+
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.*;
import org.junit.*;
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java
index ae823a7..6ec8b87 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver_resolveUri_Test.java
@@ -14,7 +14,6 @@
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
-import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.util.URI;
import org.junit.*;
@@ -22,7 +21,7 @@
import com.google.eclipse.protobuf.ui.util.Resources;
/**
- * Tests for <code>{@link SingleDirectoryFileResolver#resolveUri(String, URI, IProject, PathsPreferences)}</code>.
+ * Tests for <code>{@link SingleDirectoryFileResolver#resolveUri(String, URI, PathsPreferences)}</code>.
*
* @author alruiz@google.com (Alex Ruiz)
*/
@@ -46,19 +45,19 @@
@Test public void should_resolve_import_URI_if_missing_scheme() {
when(resources.fileExists(any(URI.class))).thenReturn(true);
- String resolved = resolver.resolveUri("folder1/address.proto", resourceUri, null, preferences);
+ String resolved = resolver.resolveUri("folder1/address.proto", resourceUri, preferences);
assertThat(resolved, equalTo("platform:/resource/src/proto/folder1/address.proto"));
}
@Test public void should_resolve_import_URI_even_if_overlapping_folders_with_resource_URI() {
when(resources.fileExists(any(URI.class))).thenReturn(true);
- String resolved = resolver.resolveUri("src/proto/folder1/address.proto", resourceUri, null, preferences);
+ String resolved = resolver.resolveUri("src/proto/folder1/address.proto", resourceUri, preferences);
assertThat(resolved, equalTo("platform:/resource/src/proto/folder1/address.proto"));
}
@Test public void should_resolve_import_URI_even_if_overlapping_one_folder_only_with_resource_URI() {
when(resources.fileExists(any(URI.class))).thenReturn(true);
- String resolved = resolver.resolveUri("src/proto/read-only/address.proto", resourceUri, null, preferences);
+ String resolved = resolver.resolveUri("src/proto/read-only/address.proto", resourceUri, preferences);
assertThat(resolved, equalTo("platform:/resource/src/proto/read-only/address.proto"));
}
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
index 5679b03..da8704c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
@@ -10,7 +10,7 @@
import static com.google.eclipse.protobuf.ui.preferences.paths.DirectorySelectionDialogs.*;
import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.*;
-import static com.google.eclipse.protobuf.ui.util.ProjectVariable.useProjectVariable;
+import static com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable.useProjectVariable;
import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID;
import static org.eclipse.xtext.util.Strings.isEmpty;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
index 611426d..5e25ed4 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPath.java
@@ -8,7 +8,9 @@
*/
package com.google.eclipse.protobuf.ui.preferences.paths;
-import static com.google.eclipse.protobuf.ui.util.ProjectVariable.containsProjectVariable;
+import static com.google.eclipse.protobuf.ui.preferences.paths.ProjectVariable.useProjectName;
+
+import org.eclipse.core.resources.IProject;
import java.util.regex.*;
@@ -23,9 +25,16 @@
private final boolean isWorkspacePath;
static DirectoryPath parse(String path) {
+ return parse(path, null);
+ }
+
+ static DirectoryPath parse(String path, IProject project) {
Matcher matcher = WORKSPACE_PATH_PATTERN.matcher(path);
- if (matcher.matches()) return new DirectoryPath(matcher.group(1), true);
- if (containsProjectVariable(path)) return new DirectoryPath(path, true);
+ if (matcher.matches()) {
+ String actualPath = matcher.group(1);
+ if (project != null) actualPath = useProjectName(actualPath, project);
+ return new DirectoryPath(actualPath, true);
+ }
return new DirectoryPath(path, false);
}
@@ -36,7 +45,7 @@
/** {@inheritDoc} */
@Override public String toString() {
- if (!isWorkspacePath || containsProjectVariable(value)) return value;
+ if (!isWorkspacePath) return value;
return "${workspace_loc:" + value + "}";
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
index f276046..8d25a04 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferences.java
@@ -13,11 +13,11 @@
import static com.google.eclipse.protobuf.ui.util.Strings.CSV_PATTERN;
import static java.util.Collections.*;
-import java.util.ArrayList;
-import java.util.List;
-
+import org.eclipse.core.resources.IProject;
import org.eclipse.jface.preference.IPreferenceStore;
+import java.util.*;
+
/**
* Paths preferences, retrieved from an <code>{@link IPreferenceStore}</code>. To create a new instance invoke
* <code>{@link PathsPreferencesProvider#getPreferences(org.eclipse.core.resources.IProject)}</code>
@@ -29,16 +29,16 @@
private final PathResolutionType pathResolutionType;
private final List<DirectoryPath> importRoots;
- PathsPreferences(IPreferenceStore store) {
+ PathsPreferences(IPreferenceStore store, IProject project) {
pathResolutionType = PathResolutionType.readFrom(store);
- importRoots = importRoots(pathResolutionType, store);
+ importRoots = importRoots(pathResolutionType, store, project);
}
- private static List<DirectoryPath> importRoots(PathResolutionType types, IPreferenceStore store) {
+ private static List<DirectoryPath> importRoots(PathResolutionType types, IPreferenceStore store, IProject project) {
if (types.equals(SINGLE_DIRECTORY)) return emptyList();
List<DirectoryPath> roots = new ArrayList<DirectoryPath>();
for (String root : store.getString(IMPORT_ROOTS).split(CSV_PATTERN)) {
- roots.add(DirectoryPath.parse(root));
+ roots.add(DirectoryPath.parse(root, project));
}
return unmodifiableList(roots);
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencesProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencesProvider.java
index 436d1a4..96e0675 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencesProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencesProvider.java
@@ -25,6 +25,6 @@
public PathsPreferences getPreferences(IProject project) {
IPreferenceStore store = storeAccess.getWritablePreferenceStore(project);
- return new PathsPreferences(store);
+ return new PathsPreferences(store, project);
}
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java
new file mode 100644
index 0000000..269b4d1
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/ProjectVariable.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.preferences.paths;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.*;
+
+/**
+ * ${project} variable.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+class ProjectVariable {
+
+ private static final String VARIABLE_VALUE = "${project}";
+
+ static IPath useProjectVariable(IPath path, IProject project) {
+ return switchProjectNames(path, project.getName(), VARIABLE_VALUE);
+ }
+
+ static String useProjectName(String path, IProject project) {
+ IPath newPath = switchProjectNames(new Path(path), VARIABLE_VALUE, project.getName());
+ return newPath.toString();
+ }
+
+ private static IPath switchProjectNames(IPath path, String originalName, String newName) {
+ if (!originalName.equals(path.segment(0))) return path;
+ IPath newPath = new Path(newName);
+ newPath = newPath.append(path.removeFirstSegments(1));
+ if (path.isAbsolute()) newPath = newPath.makeAbsolute();
+ return newPath;
+ }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
index 261d16b..e7101a9 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
@@ -8,7 +8,6 @@
*/
package com.google.eclipse.protobuf.ui.scoping;
-import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.common.util.URI;
@@ -19,8 +18,8 @@
*/
interface FileResolverStrategy {
- String PREFIX = "platform:/resource";
+ String PLATFORM_RESOURCE_PREFIX = "platform:/resource";
char SEPARATOR = IPath.SEPARATOR;
- String resolveUri(String importUri, URI declaringResourceUri, IProject project, PathsPreferences preferences);
+ String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences);
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
index 9000aa8..05acd5c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
@@ -61,7 +61,7 @@
if (project == null) project = resources.activeProject();
if (project == null) throw new IllegalStateException("Unable to find current project");
PathsPreferences preferences = preferenceProvider.getPreferences(project);
- return resolver(preferences).resolveUri(importUri, resourceUri, project, preferences);
+ return resolver(preferences).resolveUri(importUri, resourceUri, preferences);
}
private FileResolverStrategy resolver(PathsPreferences preferences) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolver.java
index b39adbc..597c712 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolver.java
@@ -8,19 +8,15 @@
*/
package com.google.eclipse.protobuf.ui.scoping;
-import static com.google.eclipse.protobuf.ui.util.ProjectVariable.useProjectName;
-
-import java.util.List;
+import com.google.eclipse.protobuf.ui.preferences.paths.*;
+import com.google.eclipse.protobuf.ui.util.Resources;
import org.eclipse.core.filesystem.*;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
+import org.eclipse.core.filesystem.URIUtil;
+import org.eclipse.core.runtime.*;
import org.eclipse.emf.common.util.URI;
-import com.google.eclipse.protobuf.ui.preferences.paths.DirectoryPath;
-import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
-import com.google.eclipse.protobuf.ui.util.*;
+import java.util.List;
/**
* @author alruiz@google.com (Alex Ruiz)
@@ -36,10 +32,10 @@
}
/** {@inheritDoc} */
- public String resolveUri(String importUri, URI declaringResourceUri, IProject project, PathsPreferences preferences) {
+ public String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences) {
List<DirectoryPath> importRoots = preferences.importRoots();
for (DirectoryPath root : importRoots) {
- String resolved = resolveUri(importUri, root, project);
+ String resolved = resolveUri(importUri, root);
if (resolved != null) return resolved;
}
for (DirectoryPath root : importRoots) {
@@ -50,14 +46,14 @@
return null;
}
- private String resolveUri(String importUri, DirectoryPath importRoot, IProject project) {
+ private String resolveUri(String importUri, DirectoryPath importRoot) {
String root = importRoot.value();
- if (importRoot.isWorkspacePath()) return resolveUriInWorkspace(importUri, root, project);
+ if (importRoot.isWorkspacePath()) return resolveUriInWorkspace(importUri, root);
return resolveUriInFileSystem(importUri, root);
}
- private String resolveUriInWorkspace(String importUri, String importRoot, IProject project) {
- String path = PREFIX + useProjectName(importRoot, project) + SEPARATOR + importUri;
+ private String resolveUriInWorkspace(String importUri, String importRoot) {
+ String path = PLATFORM_RESOURCE_PREFIX + importRoot + SEPARATOR + importUri;
boolean exists = resources.fileExists(URI.createURI(path));
return (exists) ? path : null;
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
index c863a21..1841e83 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
@@ -13,7 +13,6 @@
import java.util.*;
-import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.util.URI;
import org.eclipse.xtext.util.Pair;
@@ -31,7 +30,7 @@
this.resources = resources;
}
- public String resolveUri(String importUri, URI declaringResourceUri, IProject project, PathsPreferences preferences) {
+ public String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences) {
List<String> resourceUriSegments = removeFirstAndLast(declaringResourceUri.segmentsList());
Pair<String, List<String>> importUriPair = pair(importUri, createURI(importUri).segmentsList());
return resolveUri(importUriPair, resourceUriSegments);
@@ -53,7 +52,7 @@
if (segment.equals(firstSegment)) break;
pathBuilder.append(segment).append(SEPARATOR);
}
- String resolved = PREFIX + SEPARATOR + pathBuilder.toString() + importUri.getFirst();
+ String resolved = PLATFORM_RESOURCE_PREFIX + SEPARATOR + pathBuilder.toString() + importUri.getFirst();
return (resources.fileExists(createURI(resolved))) ? resolved : null;
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/ProjectVariable.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/ProjectVariable.java
deleted file mode 100644
index 787c78b..0000000
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/ProjectVariable.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.ui.util;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.*;
-
-/**
- * ${project} variable.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class ProjectVariable {
-
- private static final String VARIABLE_VALUE = "${project}";
-
- public static IPath useProjectVariable(IPath path, IProject project) {
- return switchNames(path, project.getName(), VARIABLE_VALUE);
- }
-
- public static String useProjectName(String path, IProject project) {
- IPath newPath = switchNames(new Path(path), VARIABLE_VALUE, project.getName());
- return newPath.toString();
- }
-
- private static IPath switchNames(IPath path, String originalName, String newName) {
- if (!originalName.equals(path.segment(0))) return path;
- IPath newPath = new Path(newName);
- newPath = newPath.append(path.removeFirstSegments(1));
- if (path.isAbsolute()) newPath = newPath.makeAbsolute();
- return newPath;
- }
-
- public static boolean containsProjectVariable(String path) {
- return path != null && path.contains(VARIABLE_VALUE);
- }
-}