Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 202014 Details for
Bug 346010
[model] strange initialization dependency in OptionTests
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Improved and combined patch
Bug_346010_combined.patch (text/plain), 8.58 KB, created by
Stephan Herrmann
on 2011-08-23 12:15:44 EDT
(
hide
)
Description:
Improved and combined patch
Filename:
MIME Type:
Creator:
Stephan Herrmann
Created:
2011-08-23 12:15:44 EDT
Size:
8.58 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: model/org/eclipse/jdt/internal/core/JavaModelManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java,v >retrieving revision 1.468 >diff -u -r1.468 JavaModelManager.java >--- model/org/eclipse/jdt/internal/core/JavaModelManager.java 28 Jul 2011 17:07:05 -0000 1.468 >+++ model/org/eclipse/jdt/internal/core/JavaModelManager.java 23 Aug 2011 16:07:30 -0000 >@@ -10,6 +10,7 @@ > * Theodora Yeung (tyeung@bea.com) - ensure that JarPackageFragmentRoot make it into cache > * before its contents > * (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=102422) >+ * Stephan Herrmann - Contribution for Bug 346010 - [model] strange initialization dependency in OptionTests > *******************************************************************************/ > package org.eclipse.jdt.internal.core; > >@@ -4788,10 +4789,11 @@ > * @param optionValue The value of the option. If <code>null</code>, then > * the option will be removed from the preferences instead. > * @param eclipsePreferences The eclipse preferences to be updated >+ * @param otherOptions more options being stored, used to avoid conflict between deprecated option and its compatible > * @return <code>true</code> if the preferences have been changed, > * <code>false</code> otherwise. > */ >- public boolean storePreference(String optionName, String optionValue, IEclipsePreferences eclipsePreferences) { >+ public boolean storePreference(String optionName, String optionValue, IEclipsePreferences eclipsePreferences, Map otherOptions) { > int optionLevel = this.getOptionLevel(optionName); > if (optionLevel == UNKNOWN_OPTION) return false; // unrecognized option > >@@ -4809,6 +4811,8 @@ > eclipsePreferences.remove(optionName); // get rid off old preference > String[] compatibleOptions = (String[]) this.deprecatedOptions.get(optionName); > for (int co=0, length=compatibleOptions.length; co < length; co++) { >+ if (otherOptions != null && otherOptions.containsKey(compatibleOptions[co])) >+ continue; // don't overwrite explicit value of otherOptions at compatibleOptions[co] > if (optionValue == null) { > eclipsePreferences.remove(compatibleOptions[co]); > } else { >@@ -4862,7 +4866,7 @@ > if (defaultValue != null && defaultValue.equals(value)) { > value = null; > } >- storePreference(key, value, instancePreferences); >+ storePreference(key, value, instancePreferences, newOptions); > } > try { > // persist options >Index: model/org/eclipse/jdt/internal/core/JavaProject.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java,v >retrieving revision 1.447 >diff -u -r1.447 JavaProject.java >--- model/org/eclipse/jdt/internal/core/JavaProject.java 10 May 2011 19:29:43 -0000 1.447 >+++ model/org/eclipse/jdt/internal/core/JavaProject.java 23 Aug 2011 16:07:34 -0000 >@@ -7,7 +7,9 @@ > * > * Contributors: > * IBM Corporation - initial API and implementation >- * Stephan Herrmann <stephan@cs.tu-berlin.de> - inconsistent initialization of classpath container backed by external class folder, see https://bugs.eclipse.org/320618 >+ * Stephan Herrmann <stephan@cs.tu-berlin.de> - Contributions for >+ * Bug 320618 - inconsistent initialization of classpath container backed by external class folder >+ * Bug 346010 - [model] strange initialization dependency in OptionTests > *******************************************************************************/ > package org.eclipse.jdt.internal.core; > >@@ -2928,7 +2930,7 @@ > public void setOption(String optionName, String optionValue) { > // Store option value > IEclipsePreferences projectPreferences = getEclipsePreferences(); >- boolean modified = JavaModelManager.getJavaModelManager().storePreference(optionName, optionValue, projectPreferences); >+ boolean modified = JavaModelManager.getJavaModelManager().storePreference(optionName, optionValue, projectPreferences, null); > > // Write changes > if (modified) { >@@ -2957,7 +2959,7 @@ > Map.Entry entry = (Map.Entry) entries.next(); > String key = (String) entry.getKey(); > String value = (String) entry.getValue(); >- javaModelManager.storePreference(key, value, projectPreferences); >+ javaModelManager.storePreference(key, value, projectPreferences, newOptions); > } > > // reset to default all options not in new map >#P org.eclipse.jdt.core.tests.model >Index: src/org/eclipse/jdt/core/tests/model/OptionTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/OptionTests.java,v >retrieving revision 1.32 >diff -u -r1.32 OptionTests.java >--- src/org/eclipse/jdt/core/tests/model/OptionTests.java 10 May 2011 19:30:30 -0000 1.32 >+++ src/org/eclipse/jdt/core/tests/model/OptionTests.java 23 Aug 2011 16:07:37 -0000 >@@ -7,11 +7,17 @@ > * > * Contributors: > * IBM Corporation - initial API and implementation >+ * Stephan Herrmann - Contribution for Bug 346010 - [model] strange initialization dependency in OptionTests > *******************************************************************************/ > package org.eclipse.jdt.core.tests.model; > >+import java.util.ArrayList; >+import java.util.HashSet; > import java.util.Hashtable; >+import java.util.Iterator; >+import java.util.List; > import java.util.Map; >+import java.util.Set; > > import junit.framework.Test; > >@@ -43,6 +49,7 @@ > super(name); > } > static { >+// TESTS_NAMES = new String[] { "testBug346010" }; > // TESTS_NUMBERS = new int[] { 125360 }; > // TESTS_RANGE = new int[] { 4, -1 }; > } >@@ -758,6 +765,61 @@ > } > } > /** >+ * @bug 346010 - [model] strange initialization dependency in OptionTests >+ * @test Verify that unfortunate order of map entries doesn't spoil intended semantics. >+ * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=346010" >+ * @deprecated As using deprecated constants >+ */ >+public void testBug346010() throws CoreException { >+ class ForcedOrderMap extends Hashtable { >+ private static final long serialVersionUID = 8012963985718522218L; >+ Map original; >+ Map.Entry additionalEntry; >+ /* Force (additionalKey,additionalValue) to be served after all entries of original. */ >+ public ForcedOrderMap(Map original, String additionalKey, String additionalValue) { >+ this.original = original; >+ // convert additionalKey->additionalValue to a Map.Entry without inserting into original: >+ Hashtable tmp = new Hashtable(); >+ tmp.put(additionalKey, additionalValue); >+ this.additionalEntry = (Map.Entry) tmp.entrySet().iterator().next(); >+ } >+ public Set entrySet() { >+ return new HashSet() { >+ private static final long serialVersionUID = 1L; >+ public Iterator iterator() { >+ List orderedEntries; >+ orderedEntries = new ArrayList(ForcedOrderMap.this.original.entrySet()); >+ orderedEntries.add(ForcedOrderMap.this.additionalEntry); >+ return orderedEntries.iterator(); >+ } >+ }; >+ } >+ public synchronized boolean containsKey(Object key) { >+ return this.original.containsKey(key) || key.equals(this.additionalEntry.getKey()); >+ } >+ } >+ try { >+ // Set the obsolete option using the IJavaProject API >+ JavaProject project = (JavaProject) createJavaProject("P"); >+ final String obsoleteOption = DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER; >+ Map testOptions = project.getOptions(true); >+ Map orderedOptions = new ForcedOrderMap(testOptions, obsoleteOption, JavaCore.DO_NOT_INSERT); >+ project.setOptions(orderedOptions); >+ // Verify that obsolete preference is not stored >+ assertNull( >+ "Unexpected value for formatter deprecated option 'org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member'", >+ project.getEclipsePreferences().get(obsoleteOption, null)); >+ // Verify that project obsolete option is well retrieved >+ assertEquals( >+ "Unexpected value for formatter deprecated option 'org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member'", >+ JavaCore.INSERT, >+ project.getOption(obsoleteOption, true)); >+ } finally { >+ deleteProject("P"); >+ } >+} >+ >+/** > * @bug 324987: [formatter] API compatibility problem with Annotation Newline options > * @test Verify that a deprecated option is well preserved when read through > * the IEclipsePreferences (i.e. simulate reading project preferences of a project
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 346010
:
195797
|
201475
|
201476
| 202014