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 157791 Details for
Bug 235253
[organize imports] Organize imports removes needed import statement.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed fix 2
235253_patch.txt (text/plain), 8.83 KB, created by
Markus Keller
on 2010-02-01 10:46:18 EST
(
hide
)
Description:
Proposed fix 2
Filename:
MIME Type:
Creator:
Markus Keller
Created:
2010-02-01 10:46:18 EST
Size:
8.83 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java,v >retrieving revision 1.18 >diff -u -r1.18 ImportRewrite.java >--- dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java 21 Jan 2010 16:46:38 -0000 1.18 >+++ dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java 1 Feb 2010 15:42:03 -0000 >@@ -137,6 +137,7 @@ > private String[] createdStaticImports; > > private boolean filterImplicitImports; >+ private boolean mainTypeTypesAreImplicitImports; > > /** > * Creates a {@link ImportRewrite} from a {@link ICompilationUnit}. If <code>restoreExistingImports</code> >@@ -221,6 +222,7 @@ > this.restoreExistingImports= false; > } > this.filterImplicitImports= true; >+ this.mainTypeTypesAreImplicitImports= true; > > this.defaultContext= new ImportRewriteContext() { > public int findInContext(String qualifier, String name, int kind) { >@@ -303,15 +305,45 @@ > } > > /** >- * Specifies that implicit imports (types in default package, package <code>java.lang</code> or >- * in the same package as the rewrite compilation unit should not be created except if necessary >- * to resolve an on-demand import conflict. The filter is enabled by default. >- * @param filterImplicitImports if set, implicit imports will be filtered. >+ * Specifies that implicit imports (for types in <code>java.lang</code>, types in the same package as the rewrite >+ * compilation unit, and types in the compilation unit's main type) should not be created, except if necessary to >+ * resolve an on-demand import conflict. >+ * <p> >+ * The filter is enabled by default. >+ * </p> >+ * <p> >+ * Note: {@link #setMainTypeTypesAreImplicitImports(boolean)} can be used to stop filtering types in the compilation >+ * unit's main type. >+ * </p> >+ * >+ * @param filterImplicitImports >+ * if <code>true</code>, implicit imports will be filtered >+ * >+ * @see #setMainTypeTypesAreImplicitImports(boolean) > */ > public void setFilterImplicitImports(boolean filterImplicitImports) { > this.filterImplicitImports= filterImplicitImports; > } > >+ /** >+ * Sets whether types in the compilation unit's main type are considered as implicit imports when >+ * {@link #setFilterImplicitImports(boolean)} is enabled. >+ * <p> >+ * By default, the option is enabled, i.e. types in the compilation unit's main type are considered as implicit >+ * imports. Note that this interpretation is only correct for type references inside direct children of the main >+ * type >+ * </p> >+ * >+ * @param mainTypeTypesAreImplicitImports >+ * the mainTypeTypesAreImplicitImports to set >+ * >+ * @see #setFilterImplicitImports(boolean) >+ * @since 3.6 >+ */ >+ public void setMainTypeTypesAreImplicitImports(boolean mainTypeTypesAreImplicitImports) { >+ this.mainTypeTypesAreImplicitImports= mainTypeTypesAreImplicitImports; >+ } >+ > private static int compareImport(char prefix, String qualifier, String name, String curr) { > if (curr.charAt(0) != prefix || !curr.endsWith(name)) { > return ImportRewriteContext.RES_NAME_UNKNOWN; >@@ -995,6 +1027,7 @@ > > ImportRewriteAnalyzer computer= new ImportRewriteAnalyzer(this.compilationUnit, usedAstRoot, this.importOrder, this.importOnDemandThreshold, this.staticImportOnDemandThreshold, this.restoreExistingImports); > computer.setFilterImplicitImports(this.filterImplicitImports); >+ computer.setMainTypeTypesAreImplicitImports(this.mainTypeTypesAreImplicitImports); > > if (this.addedImports != null) { > for (int i= 0; i < this.addedImports.size(); i++) { >Index: dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java,v >retrieving revision 1.21 >diff -u -r1.21 ImportRewriteAnalyzer.java >--- dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java 7 Jan 2010 20:18:49 -0000 1.21 >+++ dom/org/eclipse/jdt/internal/core/dom/rewrite/ImportRewriteAnalyzer.java 1 Feb 2010 15:42:03 -0000 >@@ -53,6 +53,7 @@ > private final int staticImportOnDemandThreshold; > > private boolean filterImplicitImports; >+ private boolean mainTypeTypesAreImplicitImports; > private boolean findAmbiguousImports; > > private int flags= 0; >@@ -68,6 +69,7 @@ > this.staticImportOnDemandThreshold= staticThreshold; > > this.filterImplicitImports= true; >+ this.mainTypeTypesAreImplicitImports= true; > this.findAmbiguousImports= true; //!restoreExistingImports; > > this.packageEntries= new ArrayList(20); >@@ -238,18 +240,42 @@ > } > > /** >- * Sets that implicit imports (types in default package, CU- package and >- * 'java.lang') should not be created. Note that this is a heuristic filter and can >- * lead to missing imports, e.g. in cases where a type is forced to be specified >- * due to a name conflict. >- * By default, the filter is enabled. >- * @param filterImplicitImports The filterImplicitImports to set >+ * Specifies that implicit imports (for types in <code>java.lang</code>, types in the same package as the rewrite >+ * compilation unit and types in the compilation unit's main type) should not be created, except if necessary to >+ * resolve an on-demand import conflict. >+ * <p> >+ * The filter is enabled by default. >+ * </p> >+ * <p> >+ * Note: {@link #setMainTypeTypesAreImplicitImports(boolean)} can be used to stop filtering types in the compilation >+ * unit's main type. >+ * </p> >+ * >+ * @param filterImplicitImports >+ * if <code>true</code>, implicit imports will be filtered >+ * >+ * @see #setMainTypeTypesAreImplicitImports(boolean) > */ > public void setFilterImplicitImports(boolean filterImplicitImports) { > this.filterImplicitImports= filterImplicitImports; > } > > /** >+ * Sets whether types in the compilation unit's main type are considered as implicit imports when >+ * {@link #setFilterImplicitImports(boolean)} is enabled. By default, the option is enabled, i.e. types in the >+ * compilation unit's main type are considered as implicit imports. >+ * >+ * @param mainTypeTypesAreImplicitImports >+ * the mainTypeTypesAreImplicitImports to set >+ * >+ * @see #setFilterImplicitImports(boolean) >+ * @since 3.6 >+ */ >+ public void setMainTypeTypesAreImplicitImports(boolean mainTypeTypesAreImplicitImports) { >+ this.mainTypeTypesAreImplicitImports= mainTypeTypesAreImplicitImports; >+ } >+ >+ /** > * When set searches for imports that can not be folded into on-demand > * imports but must be specified explicitly > * @param findAmbiguousImports The new value >@@ -385,14 +411,20 @@ > return bestMatch; > } > >- private static boolean isImplicitImport(String qualifier, ICompilationUnit cu) { >+ private boolean isImplicitImport(String qualifier) { > if (JAVA_LANG.equals(qualifier)) { > return true; > } >+ ICompilationUnit cu= this.compilationUnit; > String packageName= cu.getParent().getElementName(); > if (qualifier.equals(packageName)) { > return true; > } >+ >+ if (!this.mainTypeTypesAreImplicitImports) { >+ return false; >+ } >+ > String mainTypeName= JavaCore.removeJavaLikeExtension(cu.getElementName()); > if (packageName.length() == 0) { > return qualifier.equals(mainTypeName); >@@ -524,7 +556,7 @@ > PackageEntry pack= (PackageEntry) this.packageEntries.get(i); > int nImports= pack.getNumberOfImports(); > >- if (this.filterImplicitImports && !pack.isStatic() && isImplicitImport(pack.getName(), this.compilationUnit)) { >+ if (this.filterImplicitImports && !pack.isStatic() && isImplicitImport(pack.getName())) { > pack.removeAllNew(onDemandConflicts); > nImports= pack.getNumberOfImports(); > } >#P org.eclipse.jdt.ui >Index: core extension/org/eclipse/jdt/internal/corext/codemanipulation/OrganizeImportsOperation.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/OrganizeImportsOperation.java,v >retrieving revision 1.94 >diff -u -r1.94 OrganizeImportsOperation.java >--- core extension/org/eclipse/jdt/internal/corext/codemanipulation/OrganizeImportsOperation.java 8 Jul 2009 12:36:11 -0000 1.94 >+++ core extension/org/eclipse/jdt/internal/corext/codemanipulation/OrganizeImportsOperation.java 1 Feb 2010 15:42:07 -0000 >@@ -425,6 +425,7 @@ > } > > ImportRewrite importsRewrite= StubUtility.createImportRewrite(astRoot, false); >+ importsRewrite.setMainTypeTypesAreImplicitImports(false); > > Set/*<String>*/ oldSingleImports= new HashSet(); > Set/*<String>*/ oldDemandImports= new HashSet();
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 235253
:
151581
|
152493
|
157791
|
158758
|
158804