Merge remote-tracking branch 'origin/master' into BETA_JAVA9
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ProgressImages.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ProgressImages.java
index 4267af7..c41daa9 100644
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ProgressImages.java
+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ProgressImages.java
@@ -30,9 +30,9 @@
return;
for (int i= 0; i < PROGRESS_STEPS; i++) {
- String okname= BASE+OK+Integer.toString(i+1)+".gif"; //$NON-NLS-1$
+ String okname= BASE+OK+Integer.toString(i+1)+".png"; //$NON-NLS-1$
fOKImages[i]= createImage(okname);
- String failurename= BASE+FAILURE+Integer.toString(i+1)+".gif"; //$NON-NLS-1$
+ String failurename= BASE+FAILURE+Integer.toString(i+1)+".png"; //$NON-NLS-1$
fFailureImages[i]= createImage(failurename);
}
}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
index d85993a..1e3d02d 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
@@ -1097,6 +1097,65 @@
assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 });
}
+ // bug 506799
+ public void testAssignToLocal17() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("\n");
+ buf.append("interface WorkItem { }\n");
+ buf.append("enum RebaseWorkItem implements WorkItem {\n");
+ buf.append(" PREPARE, APPLY_COMMIT\n");
+ buf.append("}\n");
+ buf.append("\n");
+ buf.append("public class Snippet {\n");
+ buf.append(" void foo(Class<? extends WorkItem> workItemType) throws Exception {\n");
+ buf.append(" workItemType.getEnumConstants();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("Snippet.java", buf.toString(), false, null);
+
+ String str= "workItemType.getEnumConstants();";
+ AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str) + str.length(), 0);
+ List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+ assertNumberOfProposals(proposals, 4);
+ assertCorrectLabels(proposals);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("\n");
+ buf.append("interface WorkItem { }\n");
+ buf.append("enum RebaseWorkItem implements WorkItem {\n");
+ buf.append(" PREPARE, APPLY_COMMIT\n");
+ buf.append("}\n");
+ buf.append("\n");
+ buf.append("public class Snippet {\n");
+ buf.append(" void foo(Class<? extends WorkItem> workItemType) throws Exception {\n");
+ buf.append(" WorkItem[] enumConstants = workItemType.getEnumConstants();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("\n");
+ buf.append("interface WorkItem { }\n");
+ buf.append("enum RebaseWorkItem implements WorkItem {\n");
+ buf.append(" PREPARE, APPLY_COMMIT\n");
+ buf.append("}\n");
+ buf.append("\n");
+ buf.append("public class Snippet {\n");
+ buf.append(" private WorkItem[] enumConstants;\n");
+ buf.append("\n");
+ buf.append(" void foo(Class<? extends WorkItem> workItemType) throws Exception {\n");
+ buf.append(" enumConstants = workItemType.getEnumConstants();\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 });
+ }
+
public void testAssignParamToField() throws Exception {
IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
StringBuffer buf= new StringBuffer();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
index 6e67d47..55de958 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
@@ -3671,10 +3671,9 @@
buf.append(" } else {\n");
buf.append(" this.getWriter().println();\n");
buf.append(" this.getWriter().println(\"FAILURES!!!\"); //$NON-NLS-1$\n");
- buf.append(" this.getWriter()\n");
- buf.append(" .println(\"Tests run: \" + result.runCount() + //$NON-NLS-1$\n");
- buf.append(" \", Failures: \" + result.failureCount() + //$NON-NLS-1$\n");
- buf.append(" \", Errors: \" + result.errorCount()); //$NON-NLS-1$\n");
+ buf.append(" this.getWriter().println(\"Tests run: \" + result.runCount() + //$NON-NLS-1$\n");
+ buf.append(" \", Failures: \" + result.failureCount() + //$NON-NLS-1$\n");
+ buf.append(" \", Errors: \" + result.errorCount()); //$NON-NLS-1$\n");
buf.append(" }\n");
buf.append(" this.getWriter().println();\n");
buf.append(" }\n");
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java
index a42e8a0..5a449c1 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2016 IBM Corporation and others.
* 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
@@ -1163,7 +1163,11 @@
if (binding.isPrimitive())
return binding;
binding= normalizeTypeBinding(binding);
- if (binding == null || !binding.isWildcardType())
+ if (binding == null)
+ return binding;
+ if (binding.isArray())
+ return normalizeForDeclarationUse(binding.getComponentType(), ast).createArrayType(1);
+ if (!binding.isWildcardType())
return binding;
ITypeBinding bound= binding.getBound();
if (bound == null || !binding.isUpperbound()) {
diff --git a/org.eclipse.jdt.ui/plugin.properties b/org.eclipse.jdt.ui/plugin.properties
index b011063..f3f670f 100644
--- a/org.eclipse.jdt.ui/plugin.properties
+++ b/org.eclipse.jdt.ui/plugin.properties
@@ -594,6 +594,9 @@
HideOutputFolder.description= Hides Java output folders of the Java projects. A Java output folder is where the compiled Java classes are.
HideJavaOutputFolder.label= Java output folders
+HideJavaLangObjectMembersFilter.label=Inherited members from java.lang.Object
+HideJavaLangObjectMembersFilter.description=Hides all inherited members from java.lang.Object
+
sourceHover= Source
sourceHoverDescription= Shows the source of the selected element, or the source near the matching opening curly brace.
javadocHover= Javadoc
diff --git a/org.eclipse.jdt.ui/plugin.xml b/org.eclipse.jdt.ui/plugin.xml
index 5db8127..3cbc936 100644
--- a/org.eclipse.jdt.ui/plugin.xml
+++ b/org.eclipse.jdt.ui/plugin.xml
@@ -1074,7 +1074,7 @@
<colorDefinition
label="%JavadocBackgroundColor.label"
categoryId="org.eclipse.jdt.ui.presentation"
- value="COLOR_INFO_BACKGROUND"
+ defaultsTo="org.eclipse.ui.workbench.HOVER_BACKGROUND"
id="org.eclipse.jdt.ui.Javadoc.backgroundColor">
<description>
%JavadocBackgroundColor.description
@@ -1083,7 +1083,7 @@
<colorDefinition
label="%JavadocForegroundColor.label"
categoryId="org.eclipse.jdt.ui.presentation"
- value="COLOR_INFO_FOREGROUND"
+ defaultsTo="org.eclipse.ui.workbench.HOVER_FOREGROUND"
id="org.eclipse.jdt.ui.Javadoc.foregroundColor">
<description>
%JavadocForegroundColor.description
@@ -5305,6 +5305,14 @@
class="org.eclipse.jdt.internal.ui.filters.SyntheticMembersFilter"
id="org.eclipse.jdt.internal.ui.text.QuickOutline.SyntheticMembersFilter">
</filter>
+ <filter
+ targetId="org.eclipse.jdt.internal.ui.text.QuickOutline"
+ name="%HideJavaLangObjectMembersFilter.label"
+ enabled="false"
+ description="%HideJavaLangObjectMembersFilter.description"
+ class="org.eclipse.jdt.internal.ui.filters.JavaLangObjectMembersFilter"
+ id="org.eclipse.jdt.internal.ui.text.QuickOutline.JavaLangObjectMembersFilter">
+ </filter>
<!-- Quick Hierarchy -->
<filter
targetId="org.eclipse.jdt.internal.ui.typehierarchy.QuickHierarchy"
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaLangObjectMembersFilter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaLangObjectMembersFilter.java
new file mode 100644
index 0000000..2d7fd5b
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaLangObjectMembersFilter.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Björn Michael and others.
+ * 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
+ *
+ * Contributors:
+ * Björn Michael <b.michael@gmx.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.filters;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeRoot;
+
+/**
+ * Filters out members of {@link java.lang.Object}.
+ *
+ * @author Björn Michael
+ * @since 3.13
+ */
+public class JavaLangObjectMembersFilter extends ViewerFilter {
+
+ private static final String JAVA_LANG_OBJECT_CLASS_NAME= Object.class.getName();
+
+ @Override
+ public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
+ if (parentElement instanceof IType) {
+ if (JAVA_LANG_OBJECT_CLASS_NAME.equals(((IType) parentElement).getFullyQualifiedName())) {
+ return true; // java.lang.Object itself is shown; don't filter it out
+ }
+ }
+
+ if (parentElement instanceof ITypeRoot) {
+ IType primaryType= ((ITypeRoot) parentElement).findPrimaryType();
+ if (primaryType != null && JAVA_LANG_OBJECT_CLASS_NAME.equals(primaryType.getFullyQualifiedName())) {
+ return true; // top-level type is java.lang.Object itself; don't filter it out
+ }
+ }
+
+ if (element instanceof IMember) {
+ IType declaringType= ((IMember) element).getDeclaringType();
+ if (declaringType != null) {
+ String fullyQualifiedName= declaringType.getFullyQualifiedName();
+ if (JAVA_LANG_OBJECT_CLASS_NAME.equals(fullyQualifiedName)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBasePreferencePage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBasePreferencePage.java
index 986b4a0..f609274 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBasePreferencePage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBasePreferencePage.java
@@ -24,6 +24,8 @@
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
@@ -33,6 +35,9 @@
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.ui.PreferenceConstants;
@@ -61,12 +66,16 @@
private ArrayList<Button> fCheckBoxes;
private ArrayList<Button> fRadioButtons;
private ArrayList<Text> fTextControls;
+ private static final String PREFERENCE_STORE_KEY = "preferenceStore";
+
+ private IPreferenceStore fJavaCorePreferences;
public JavaBasePreferencePage() {
super();
setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
setDescription(PreferencesMessages.JavaBasePreferencePage_description);
+ fJavaCorePreferences = new ScopedPreferenceStore(InstanceScope.INSTANCE, JavaCore.PLUGIN_ID);
fRadioButtons= new ArrayList<>();
fCheckBoxes= new ArrayList<>();
fTextControls= new ArrayList<>();
@@ -102,15 +111,19 @@
return button;
}
- private Button addCheckBox(Composite parent, String label, String key) {
+ private Button addCheckBox(Composite parent, String label, IPreferenceStore preferenceStore, String key) {
+ if (preferenceStore == null) {
+ preferenceStore = getPreferenceStore();
+ }
GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
Button button= new Button(parent, SWT.CHECK);
button.setText(label);
button.setData(key);
+ button.setData(PREFERENCE_STORE_KEY, preferenceStore);
button.setLayoutData(gd);
- button.setSelection(getPreferenceStore().getBoolean(key));
+ button.setSelection(preferenceStore.getBoolean(key));
fCheckBoxes.add(button);
return button;
@@ -161,9 +174,11 @@
refactoringGroup.setText(PreferencesMessages.JavaBasePreferencePage_refactoring_title);
addCheckBox(refactoringGroup,
PreferencesMessages.JavaBasePreferencePage_refactoring_auto_save,
+ null,
RefactoringSavePreferences.PREF_SAVE_ALL_EDITORS);
addCheckBox(refactoringGroup,
PreferencesMessages.JavaBasePreferencePage_refactoring_lightweight,
+ null,
PreferenceConstants.REFACTOR_LIGHTWEIGHT);
Group group= new Group(result, SWT.NONE);
@@ -171,8 +186,8 @@
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
group.setText(PreferencesMessages.JavaBasePreferencePage_search);
- addCheckBox(group, PreferencesMessages.JavaBasePreferencePage_search_small_menu, PreferenceConstants.SEARCH_USE_REDUCED_MENU);
-
+ addCheckBox(group, PreferencesMessages.JavaBasePreferencePage_search_small_menu, null, PreferenceConstants.SEARCH_USE_REDUCED_MENU);
+ addCheckBox(group, PreferencesMessages.JavaBasePreferencePage_DisableNewJavaIndex, fJavaCorePreferences, "disableNewJavaIndex"); //$NON-NLS-1$
layout= new GridLayout();
layout.numColumns= 2;
@@ -218,12 +233,13 @@
*/
@Override
protected void performDefaults() {
- IPreferenceStore store= getPreferenceStore();
for (int i= 0; i < fCheckBoxes.size(); i++) {
Button button= fCheckBoxes.get(i);
String key= (String) button.getData();
- button.setSelection(store.getDefaultBoolean(key));
+ IPreferenceStore buttonPreferenceStore = (IPreferenceStore) button.getData(PREFERENCE_STORE_KEY);
+ button.setSelection(buttonPreferenceStore.getDefaultBoolean(key));
}
+ IPreferenceStore store= getPreferenceStore();
for (int i= 0; i < fRadioButtons.size(); i++) {
Button button= fRadioButtons.get(i);
String[] info= (String[]) button.getData();
@@ -242,12 +258,13 @@
*/
@Override
public boolean performOk() {
- IPreferenceStore store= getPreferenceStore();
for (int i= 0; i < fCheckBoxes.size(); i++) {
Button button= fCheckBoxes.get(i);
String key= (String) button.getData();
- store.setValue(key, button.getSelection());
+ IPreferenceStore buttonPreferenceStore = (IPreferenceStore) button.getData(PREFERENCE_STORE_KEY);
+ buttonPreferenceStore.setValue(key, button.getSelection());
}
+ IPreferenceStore store= getPreferenceStore();
for (int i= 0; i < fRadioButtons.size(); i++) {
Button button= fRadioButtons.get(i);
if (button.getSelection()) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
index e73557a..43b016d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
@@ -793,6 +793,7 @@
public static String ComplianceConfigurationBlock_jrecompliance_info_project;
public static String ProblemSeveritiesConfigurationBlock_section_generics;
public static String JavaBasePreferencePage_dialogs;
+ public static String JavaBasePreferencePage_DisableNewJavaIndex;
public static String JavaBasePreferencePage_do_not_hide_description;
public static String JavaBasePreferencePage_do_not_hide_button;
public static String JavaBasePreferencePage_do_not_hide_dialog_title;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
index 1c19432..35c53d7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
@@ -199,6 +199,7 @@
JavaBasePreferencePage_openTypeHierarchy=When opening a Type Hierarchy
JavaBasePreferencePage_inView=Show the &Type Hierarchy View in the current perspective
JavaBasePreferencePage_dialogs=Java dialogs
+JavaBasePreferencePage_DisableNewJavaIndex=Disable &new Java index
JavaBasePreferencePage_inPerspective=Open a new Type Hierarchy &Perspective
JavaEditorPreferencePage_quickassist_lightbulb=L&ight bulb for quick assists
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AssignToVariableAssistProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AssignToVariableAssistProposal.java
index 7f2897a..1dd2bdd 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AssignToVariableAssistProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AssignToVariableAssistProposal.java
@@ -104,11 +104,8 @@
fVariableKind= variableKind;
fNodesToAssign= new ArrayList<>();
fNodesToAssign.add(node);
- if (typeBinding.isWildcardType()) {
- typeBinding= ASTResolving.normalizeWildcardType(typeBinding, true, node.getAST());
- }
- fTypeBinding= typeBinding;
+ fTypeBinding= Bindings.normalizeForDeclarationUse(typeBinding, node.getAST());
if (variableKind == LOCAL) {
setDisplayName(CorrectionMessages.AssignToVariableAssistProposal_assigntolocal_description);
setImage(JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_LOCAL));
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
index b698854..8b4ed63 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2016 IBM Corporation and others.
* 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
@@ -3915,7 +3915,7 @@
store.setDefault(PreferenceConstants.EDITOR_CLOSE_BRACES, true);
store.setDefault(PreferenceConstants.EDITOR_CLOSE_JAVADOCS, true);
store.setDefault(PreferenceConstants.EDITOR_WRAP_STRINGS, true);
- store.setDefault(PreferenceConstants.EDITOR_ESCAPE_STRINGS, false);
+ store.setDefault(PreferenceConstants.EDITOR_ESCAPE_STRINGS, true);
store.setDefault(PreferenceConstants.EDITOR_ADD_JAVADOC_TAGS, true);
store.setDefault(PreferenceConstants.EDITOR_FORMAT_JAVADOCS, false);
store.setDefault(PreferenceConstants.EDITOR_SMART_INDENT_AFTER_NEWLINE, true);
diff --git a/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/resource/DeleteResourcesProcessor.java b/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/resource/DeleteResourcesProcessor.java
index a7d2b10..733019f 100644
--- a/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/resource/DeleteResourcesProcessor.java
+++ b/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/resource/DeleteResourcesProcessor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 IBM Corporation and others.
+ * Copyright (c) 2007, 2016 IBM Corporation and others.
* 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
@@ -19,6 +19,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -122,7 +123,7 @@
for (int i= 0; i < fResources.length; i++) {
IResource resource= fResources[i];
- if (!resource.isSynchronized(IResource.DEPTH_INFINITE)) {
+ if (!isSynchronizedExcludingLinkedResources(resource)) {
String pathLabel= BasicElementLabels.getPathLabel(resource.getFullPath(), false);
String locationLabel= null;
@@ -173,6 +174,33 @@
}
}
+ /**
+ * Checks whether this resource and its descendents are considered to be in sync with the local
+ * file system. The linked resources and their descendents are excluded from the check.
+ *
+ * @param resource the resource to check
+ * @return <code>true</code> if this resource and its descendents except linked resources are
+ * synchronized, and <code>false</code> in all other cases
+ * @throws CoreException if visiting the resource descendents fails for any reason
+ * @see IResource#isSynchronized(int)
+ */
+ public boolean isSynchronizedExcludingLinkedResources(IResource resource) throws CoreException {
+ boolean[] result= { true };
+ resource.accept(new IResourceVisitor() {
+ @Override
+ public boolean visit(IResource visitedResource) throws CoreException {
+ if (!result[0] || visitedResource.isLinked())
+ return false;
+ if (!visitedResource.isSynchronized(IResource.DEPTH_ZERO)) {
+ result[0]= false;
+ return false;
+ }
+ return true;
+ }
+ }, IResource.DEPTH_INFINITE, IContainer.DO_NOT_CHECK_EXISTENCE);
+ return result[0];
+ }
+
private void checkDirtyResources(final RefactoringStatus result) throws CoreException {
for (int i= 0; i < fResources.length; i++) {
IResource resource= fResources[i];