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 176516 Details for
Bug 320911
Not all redundant superinterface problems reported
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Patch under consideration
patch.txt (text/plain), 14.84 KB, created by
Srikanth Sankaran
on 2010-08-12 21:46:30 EDT
(
hide
)
Description:
Patch under consideration
Filename:
MIME Type:
Creator:
Srikanth Sankaran
Created:
2010-08-12 21:46:30 EDT
Size:
14.84 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java,v >retrieving revision 1.112 >diff -u -r1.112 MethodVerifier.java >--- compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java 20 May 2010 14:12:01 -0000 1.112 >+++ compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java 13 Aug 2010 01:40:45 -0000 >@@ -253,15 +253,23 @@ > if (superInterfaces == Binding.NO_SUPERINTERFACES) return; > > SimpleSet interfacesToCheck = new SimpleSet(superInterfaces.length); >- next : for (int i = 0, l = superInterfaces.length; i < l; i++) { >+ SimpleSet redundantInterfaces = null; // bark but once. >+ for (int i = 0, l = superInterfaces.length; i < l; i++) { > ReferenceBinding toCheck = superInterfaces[i]; > for (int j = 0; j < l; j++) { >- if (i != j && toCheck.implementsInterface(superInterfaces[j], true)) { >+ ReferenceBinding implementedInterface = superInterfaces[j]; >+ if (i != j && toCheck.implementsInterface(implementedInterface, true)) { >+ if (redundantInterfaces == null) { >+ redundantInterfaces = new SimpleSet(3); >+ } else if (redundantInterfaces.includes(implementedInterface)) { >+ continue; >+ } >+ redundantInterfaces.add(implementedInterface); > TypeReference[] refs = this.type.scope.referenceContext.superInterfaces; > for (int r = 0, rl = refs.length; r < rl; r++) { > if (refs[r].resolvedType == toCheck) { >- problemReporter().redundantSuperInterface(this.type, refs[j], superInterfaces[j], toCheck); >- continue next; >+ problemReporter().redundantSuperInterface(this.type, refs[j], implementedInterface, toCheck); >+ break; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=320911 > } > } > } >@@ -278,6 +286,12 @@ > ReferenceBinding inheritedInterface = itsInterfaces[i]; > if (!inheritedInterfaces.includes(inheritedInterface) && inheritedInterface.isValidBinding()) { > if (interfacesToCheck.includes(inheritedInterface)) { >+ if (redundantInterfaces == null) { >+ redundantInterfaces = new SimpleSet(3); >+ } else if (redundantInterfaces.includes(inheritedInterface)) { >+ continue; >+ } >+ redundantInterfaces.add(inheritedInterface); > TypeReference[] refs = this.type.scope.referenceContext.superInterfaces; > for (int r = 0, rl = refs.length; r < rl; r++) { > if (refs[r].resolvedType == inheritedInterface) { >@@ -308,6 +322,12 @@ > ReferenceBinding inheritedInterface = itsInterfaces[a]; > if (!inheritedInterfaces.includes(inheritedInterface) && inheritedInterface.isValidBinding()) { > if (interfacesToCheck.includes(inheritedInterface)) { >+ if (redundantInterfaces == null) { >+ redundantInterfaces = new SimpleSet(3); >+ } else if (redundantInterfaces.includes(inheritedInterface)) { >+ continue; >+ } >+ redundantInterfaces.add(inheritedInterface); > TypeReference[] refs = this.type.scope.referenceContext.superInterfaces; > for (int r = 0, rl = refs.length; r < rl; r++) { > if (refs[r].resolvedType == inheritedInterface) { >#P org.eclipse.jdt.core.tests.compiler >Index: src/org/eclipse/jdt/core/tests/compiler/regression/SuperTypeTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SuperTypeTest.java,v >retrieving revision 1.11 >diff -u -r1.11 SuperTypeTest.java >--- src/org/eclipse/jdt/core/tests/compiler/regression/SuperTypeTest.java 11 May 2010 18:53:50 -0000 1.11 >+++ src/org/eclipse/jdt/core/tests/compiler/regression/SuperTypeTest.java 13 Aug 2010 01:40:52 -0000 >@@ -417,7 +417,7 @@ > "2. ERROR in X.java (at line 2)\n" + > " interface X<E> extends List<E>, Collection<E>, Iterable<E> {}\n" + > " ^^^^^^^^\n" + >- "Redundant superinterface Iterable<E> for the type X<E>, already defined by Collection<E>\n" + >+ "Redundant superinterface Iterable<E> for the type X<E>, already defined by List<E>\n" + > "----------\n" + > "3. ERROR in X.java (at line 3)\n" + > " interface Y<E> extends Collection<E>, List<E> {}\n" + >@@ -431,8 +431,8 @@ > "----------\n" + > "5. ERROR in X.java (at line 4)\n" + > " interface XXX<E> extends Iterable<E>, List<E>, Collection<E> {}\n" + >- " ^^^^^^^^\n" + >- "Redundant superinterface Iterable<E> for the type XXX<E>, already defined by Collection<E>\n" + >+ " ^^^^^^^^^^\n" + >+ "Redundant superinterface Collection<E> for the type XXX<E>, already defined by List<E>\n" + > "----------\n" + > "6. ERROR in X.java (at line 5)\n" + > " abstract class Z implements List<Object>, Collection<Object> {}\n" + >@@ -473,4 +473,173 @@ > "----------\n", > JavacTestOptions.SKIP); > } >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=320911 (as is) >+public void test015() { >+ Map customOptions = getCompilerOptions(); >+ customOptions.put(CompilerOptions.OPTION_ReportRedundantSuperinterface, CompilerOptions.ERROR); >+ runNegativeTest( >+ // test directory preparation >+ true /* flush output directory */, >+ new String[] { /* test files */ >+ "X.java", >+ "interface IVerticalRulerColumn {}\n" + >+ "interface IVerticalRulerInfo {}\n" + >+ "interface IVerticalRulerInfoExtension {}\n" + >+ "interface IChangeRulerColumn extends IVerticalRulerColumn, IVerticalRulerInfoExtension {}\n" + >+ "interface IRevisionRulerColumn extends IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ "public final class X implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension, IChangeRulerColumn, IRevisionRulerColumn {}\n" >+ }, >+ // compiler options >+ null /* no class libraries */, >+ customOptions /* custom options */, >+ // compiler results >+ "----------\n" + >+ "1. ERROR in X.java (at line 6)\n" + >+ " public final class X implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension, IChangeRulerColumn, IRevisionRulerColumn {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerColumn for the type X, already defined by IChangeRulerColumn\n" + >+ "----------\n" + >+ "2. ERROR in X.java (at line 6)\n" + >+ " public final class X implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension, IChangeRulerColumn, IRevisionRulerColumn {}\n" + >+ " ^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerInfo for the type X, already defined by IRevisionRulerColumn\n" + >+ "----------\n" + >+ "3. ERROR in X.java (at line 6)\n" + >+ " public final class X implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension, IChangeRulerColumn, IRevisionRulerColumn {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerInfoExtension for the type X, already defined by IChangeRulerColumn\n" + >+ "----------\n", >+ JavacTestOptions.SKIP); >+} >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=320911 (variation) >+public void test016() { >+ Map customOptions = getCompilerOptions(); >+ customOptions.put(CompilerOptions.OPTION_ReportRedundantSuperinterface, CompilerOptions.ERROR); >+ runNegativeTest( >+ // test directory preparation >+ true /* flush output directory */, >+ new String[] { /* test files */ >+ "X.java", >+ "interface IVerticalRulerColumn {}\n" + >+ "interface IVerticalRulerInfo {}\n" + >+ "interface IVerticalRulerInfoExtension {}\n" + >+ "interface IChangeRulerColumn extends IVerticalRulerColumn, IVerticalRulerInfoExtension {}\n" + >+ "interface IRevisionRulerColumn extends IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ "class Z implements IChangeRulerColumn {}\n" + >+ "class Y extends Z implements IRevisionRulerColumn {}\n" + >+ "public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" >+ }, >+ // compiler options >+ null /* no class libraries */, >+ customOptions /* custom options */, >+ // compiler results >+ "----------\n" + >+ "1. ERROR in X.java (at line 8)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerColumn for the type X, already defined by IRevisionRulerColumn\n" + >+ "----------\n" + >+ "2. ERROR in X.java (at line 8)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerInfo for the type X, already defined by IRevisionRulerColumn\n" + >+ "----------\n" + >+ "3. ERROR in X.java (at line 8)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerInfoExtension for the type X, already defined by IRevisionRulerColumn\n" + >+ "----------\n", >+ JavacTestOptions.SKIP); >+} >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=320911 (variation) >+public void test017() { >+ Map customOptions = getCompilerOptions(); >+ customOptions.put(CompilerOptions.OPTION_ReportRedundantSuperinterface, CompilerOptions.ERROR); >+ runNegativeTest( >+ // test directory preparation >+ true /* flush output directory */, >+ new String[] { /* test files */ >+ "X.java", >+ "interface IVerticalRulerColumn {}\n" + >+ "interface IVerticalRulerInfo {}\n" + >+ "interface IVerticalRulerInfoExtension {}\n" + >+ "interface IChangeRulerColumn extends IVerticalRulerColumn, IVerticalRulerInfoExtension {}\n" + >+ "interface IRevisionRulerColumn extends IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ "class Z implements IRevisionRulerColumn{}\n" + >+ "class C extends Z {}\n" + >+ "class B extends C implements IChangeRulerColumn {}\n" + >+ "class H extends B {}\n" + >+ "class Y extends H {}\n" + >+ "public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" >+ }, >+ // compiler options >+ null /* no class libraries */, >+ customOptions /* custom options */, >+ // compiler results >+ "----------\n" + >+ "1. ERROR in X.java (at line 11)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerColumn for the type X, already defined by IRevisionRulerColumn\n" + >+ "----------\n" + >+ "2. ERROR in X.java (at line 11)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerInfo for the type X, already defined by IRevisionRulerColumn\n" + >+ "----------\n" + >+ "3. ERROR in X.java (at line 11)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerInfoExtension for the type X, already defined by IRevisionRulerColumn\n" + >+ "----------\n", >+ JavacTestOptions.SKIP); >+} >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=320911 (variation) >+public void test018() { >+ Map customOptions = getCompilerOptions(); >+ customOptions.put(CompilerOptions.OPTION_ReportRedundantSuperinterface, CompilerOptions.ERROR); >+ runNegativeTest( >+ // test directory preparation >+ true /* flush output directory */, >+ new String[] { /* test files */ >+ "X.java", >+ "interface IVerticalRulerColumn {}\n" + >+ "interface IVerticalRulerInfo {}\n" + >+ "interface IVerticalRulerInfoExtension {}\n" + >+ "interface IChangeRulerColumn extends IVerticalRulerColumn, IVerticalRulerInfoExtension {}\n" + >+ "interface IRevisionRulerColumn extends IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ "class Z implements IVerticalRulerInfoExtension {}\n" + >+ "class C extends Z {}\n" + >+ "class B extends C implements IChangeRulerColumn {}\n" + >+ "class H extends B implements IVerticalRulerInfo {}\n" + >+ "class Y extends H implements IVerticalRulerColumn {}\n" + >+ "public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" >+ }, >+ // compiler options >+ null /* no class libraries */, >+ customOptions /* custom options */, >+ // compiler results >+ "----------\n" + >+ "1. ERROR in X.java (at line 10)\n" + >+ " class Y extends H implements IVerticalRulerColumn {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerColumn for the type Y, already defined by IChangeRulerColumn\n" + >+ "----------\n" + >+ "2. ERROR in X.java (at line 11)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerColumn for the type X, already defined by Y\n" + >+ "----------\n" + >+ "3. ERROR in X.java (at line 11)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerInfo for the type X, already defined by H\n" + >+ "----------\n" + >+ "4. ERROR in X.java (at line 11)\n" + >+ " public final class X extends Y implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension {}\n" + >+ " ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + >+ "Redundant superinterface IVerticalRulerInfoExtension for the type X, already defined by Z\n" + >+ "----------\n", >+ JavacTestOptions.SKIP); >+} > }
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 320911
: 176516