Code cleanup.
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 6ec8b87..ae823a7 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,6 +14,7 @@ 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.*; @@ -21,7 +22,7 @@ import com.google.eclipse.protobuf.ui.util.Resources; /** - * Tests for <code>{@link SingleDirectoryFileResolver#resolveUri(String, URI, PathsPreferences)}</code>. + * Tests for <code>{@link SingleDirectoryFileResolver#resolveUri(String, URI, IProject, PathsPreferences)}</code>. * * @author alruiz@google.com (Alex Ruiz) */ @@ -45,19 +46,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, preferences); + String resolved = resolver.resolveUri("folder1/address.proto", resourceUri, null, 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, preferences); + String resolved = resolver.resolveUri("src/proto/folder1/address.proto", resourceUri, null, 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, preferences); + String resolved = resolver.resolveUri("src/proto/read-only/address.proto", resourceUri, null, 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/PreferenceAndPropertyPage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java index 6c354ed..a7c5518 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
@@ -199,5 +199,14 @@ setErrorMessage(errorMessage); setValid(false); } + + /** + * Returns the project whose properties are being changed. + * @return the project whose properties are being changed, or {@code null} if this page is updating workspace-level + * preferences. + */ + protected final IProject project() { + return project; + } }
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 e06a8be..94dcc4b 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
@@ -13,14 +13,15 @@ import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID; import static org.eclipse.xtext.util.Strings.isEmpty; -import com.google.eclipse.protobuf.ui.preferences.InputDialog; - +import org.eclipse.core.resources.IProject; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; +import com.google.eclipse.protobuf.ui.preferences.InputDialog; + /** * Dialog where users can select a path (in the workspace or file system) to be included in resolution of imports. * @@ -38,8 +39,9 @@ /** * Creates a new </code>{@link AddDirectoryDialog}</code>. * @param parent a shell which will be the parent of the new instance. + * @param project the project whose properties the user is modifying. */ - public AddDirectoryDialog(Shell parent) { + public AddDirectoryDialog(Shell parent, IProject project) { super(parent, includeDirectoryTitle); } @@ -136,7 +138,7 @@ private static Color getColor(int systemColorID) { return Display.getCurrent().getSystemColor(systemColorID); } - + /** * Returns the path selected by the user. * @return the path selected by the user.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java index e268f64..6f4694c 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
@@ -15,6 +15,7 @@ import java.util.*; import java.util.List; +import org.eclipse.core.resources.IProject; import org.eclipse.jface.viewers.*; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; @@ -32,6 +33,8 @@ */ public class DirectoryPathsEditor extends Composite { + private final IProject project; + private final Table tblDirectoryPaths; private final TableViewer tblVwrDirectoryPaths; private final Button btnAdd; @@ -43,8 +46,9 @@ private DataChangedListener dataChangedListener; - public DirectoryPathsEditor(Composite parent, PluginImageHelper imageHelper) { + public DirectoryPathsEditor(Composite parent, IProject project, PluginImageHelper imageHelper) { super(parent, SWT.NONE); + this.project = project; // generated by WindowBuilder setLayout(new GridLayout(2, false)); @@ -93,7 +97,7 @@ }); btnAdd.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - AddDirectoryDialog dialog = new AddDirectoryDialog(getShell()); + AddDirectoryDialog dialog = new AddDirectoryDialog(getShell(), project); if (dialog.open() == OK) { importPaths.add(dialog.selectedPath()); updateTable();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java index c9aa6e2..c8d3172 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectorySelectionDialogs.java
@@ -15,15 +15,14 @@ import static org.eclipse.jface.window.Window.OK; import static org.eclipse.ui.views.navigator.ResourceComparator.NAME; +import java.net.URI; + import org.eclipse.core.resources.*; import org.eclipse.core.runtime.*; import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.DirectoryDialog; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; -import org.eclipse.ui.dialogs.ISelectionStatusValidator; -import org.eclipse.ui.model.WorkbenchContentProvider; -import org.eclipse.ui.model.WorkbenchLabelProvider; +import org.eclipse.swt.widgets.*; +import org.eclipse.ui.dialogs.*; +import org.eclipse.ui.model.*; import org.eclipse.ui.views.navigator.ResourceComparator; /** @@ -39,14 +38,14 @@ static String showWorkspaceDirectoryDialog(Shell shell, String initialPath, IProject project) { String currentPathText = initialPath.replaceAll("\"", ""); - IPath path = new Path(currentPathText); + URI uri = URI.create(currentPathText); ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell, new WorkbenchLabelProvider(), new WorkbenchContentProvider()); dialog.setInput(project == null ? workspaceRoot() : project); dialog.setComparator(new ResourceComparator(NAME)); IResource container = null; - if (path.isAbsolute()) { - IContainer containers[] = workspaceRoot().findContainersForLocation(path); + if (uri.isAbsolute()) { + IContainer containers[] = workspaceRoot().findContainersForLocationURI(uri); if (containers != null && containers.length > 0) container = containers[0]; } dialog.setInitialSelection(container);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java index 6f395a7..70fe2cf 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
@@ -15,21 +15,18 @@ import static java.util.Collections.unmodifiableList; import static org.eclipse.xtext.util.Strings.*; -import java.util.ArrayList; +import java.util.*; import java.util.List; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.events.*; +import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; import org.eclipse.xtext.ui.PluginImageHelper; import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess; -import com.google.eclipse.protobuf.ui.preferences.DataChangedListener; -import com.google.eclipse.protobuf.ui.preferences.PreferenceAndPropertyPage; +import com.google.eclipse.protobuf.ui.preferences.*; import com.google.inject.Inject; /** @@ -72,7 +69,7 @@ btnMultipleFolders.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1)); btnMultipleFolders.setText(filesInMultipleDirectories); - directoryPathsEditor = new DirectoryPathsEditor(grpResolutionOfImported, imageHelper); + directoryPathsEditor = new DirectoryPathsEditor(grpResolutionOfImported, project(), imageHelper); directoryPathsEditor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); new Label(contents, SWT.NONE);
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 7f46b50..261d16b 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,6 +8,7 @@ */ 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; @@ -21,5 +22,5 @@ String PREFIX = "platform:/resource"; char SEPARATOR = IPath.SEPARATOR; - String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences); + String resolveUri(String importUri, URI declaringResourceUri, IProject project, 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 2e00a09..9000aa8 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
@@ -15,8 +15,7 @@ import org.eclipse.emf.ecore.resource.Resource; import com.google.eclipse.protobuf.scoping.IFileUriResolver; -import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences; -import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferencesProvider; +import com.google.eclipse.protobuf.ui.preferences.paths.*; import com.google.eclipse.protobuf.ui.util.Resources; import com.google.inject.Inject; @@ -27,7 +26,7 @@ */ public class FileUriResolver implements IFileUriResolver { - @Inject private PathsPreferencesProvider preferenceReader; + @Inject private PathsPreferencesProvider preferenceProvider; @Inject private FileResolverStrategies resolvers; @Inject private Resources resources; @@ -60,8 +59,9 @@ private String resolveUri(String importUri, URI resourceUri) { IProject project = resources.project(resourceUri); if (project == null) project = resources.activeProject(); - PathsPreferences preferences = preferenceReader.getPreferences(project); - return resolver(preferences).resolveUri(importUri, resourceUri, preferences); + if (project == null) throw new IllegalStateException("Unable to find current project"); + PathsPreferences preferences = preferenceProvider.getPreferences(project); + return resolver(preferences).resolveUri(importUri, resourceUri, project, 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 0e5c309..b4f7db7 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
@@ -11,6 +11,7 @@ import java.util.List; 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.emf.common.util.URI; @@ -33,7 +34,7 @@ } /** {@inheritDoc} */ - public String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences) { + public String resolveUri(String importUri, URI declaringResourceUri, IProject project, PathsPreferences preferences) { List<DirectoryPath> directoryPaths = preferences.directoryPaths(); for (DirectoryPath directoryPath : directoryPaths) { String resolved = resolveUri(importUri, directoryPath);
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 04ccf86..c863a21 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,6 +13,7 @@ import java.util.*; +import org.eclipse.core.resources.IProject; import org.eclipse.emf.common.util.URI; import org.eclipse.xtext.util.Pair; @@ -30,7 +31,7 @@ this.resources = resources; } - public String resolveUri(String importUri, URI declaringResourceUri, PathsPreferences preferences) { + public String resolveUri(String importUri, URI declaringResourceUri, IProject project, PathsPreferences preferences) { List<String> resourceUriSegments = removeFirstAndLast(declaringResourceUri.segmentsList()); Pair<String, List<String>> importUriPair = pair(importUri, createURI(importUri).segmentsList()); return resolveUri(importUriPair, resourceUriSegments);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java index 777cbab..bfa04d0 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
@@ -8,11 +8,9 @@ */ package com.google.eclipse.protobuf.ui.util; -import org.eclipse.core.filesystem.EFS; -import org.eclipse.core.filesystem.IFileStore; +import org.eclipse.core.filesystem.*; import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.*; import org.eclipse.emf.common.util.URI; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.*; @@ -31,7 +29,7 @@ public class Resources { public static final String URI_SCHEME_FOR_FILES = "file"; - + /** * Returns the project that contains the resource at the given URI. * @param resourceUri the given URI. @@ -49,8 +47,8 @@ IViewPart part = reference.getView(false); if (!(part instanceof ResourceNavigator)) continue; ResourceNavigator navigator = (ResourceNavigator) part; - StructuredSelection sel = (StructuredSelection) navigator.getTreeViewer().getSelection(); - IResource resource = (IResource) sel.getFirstElement(); + StructuredSelection selection = (StructuredSelection) navigator.getTreeViewer().getSelection(); + IResource resource = (IResource) selection.getFirstElement(); return resource.getProject(); } return null; @@ -90,7 +88,7 @@ IEditorInput editorInput = new FileStoreEditorInput(fileStore); return openFile(editorInput/*"org.eclipse.ui.DefaultTextEditor"*/); } - + private IEditorPart openFile(IEditorInput editorInput) throws PartInitException { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); return page.openEditor(editorInput, "com.google.eclipse.protobuf.Protobuf"); @@ -99,7 +97,7 @@ /** * Returns a handle to a workspace file identified by the given URI. * @param uri the given URI. - * @return a handle to a workspace file identified by the given URI or {@code null} if the URI does not belong to a + * @return a handle to a workspace file identified by the given URI or {@code null} if the URI does not belong to a * workspace file. */ public IFile file(URI uri) {