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 62551 Details for
Bug 151787
[compiler] compiler allows assignment to final field in constructor other than through 'this'
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed patch for 3.2.2
151787-32x.txt (text/plain), 7.01 KB, created by
Philipe Mulet
on 2007-03-30 15:51:55 EDT
(
hide
)
Description:
Proposed patch for 3.2.2
Filename:
MIME Type:
Creator:
Philipe Mulet
Created:
2007-03-30 15:51:55 EDT
Size:
7.01 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core.tests.compiler >Index: src/org/eclipse/jdt/core/tests/compiler/regression/AssignmentTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssignmentTest.java,v >retrieving revision 1.31.4.1 >diff -u -r1.31.4.1 AssignmentTest.java >--- src/org/eclipse/jdt/core/tests/compiler/regression/AssignmentTest.java 15 Mar 2007 17:50:54 -0000 1.31.4.1 >+++ src/org/eclipse/jdt/core/tests/compiler/regression/AssignmentTest.java 30 Mar 2007 19:47:19 -0000 >@@ -148,6 +148,117 @@ > }, > "12"); > } >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=151787 >+public void test004() { >+ this.runNegativeTest( >+ new String[] { >+ "X.java", >+ "public class X {\n" + >+ " // correctly passes compilation\n" + >+ " static class Test1 {\n" + >+ " private final Object o;\n" + >+ " \n" + >+ " Test1() {\n" + >+ " o = new Object();\n" + >+ " }\n" + >+ " }\n" + >+ " \n" + >+ " // correctly passes compilation\n" + >+ " static class Test2 {\n" + >+ " private final Object o;\n" + >+ " \n" + >+ " Test2() {\n" + >+ " this.o = new Object();\n" + >+ " }\n" + >+ " }\n" + >+ " \n" + >+ " // correctly fails compilation\n" + >+ " static class Test3 {\n" + >+ " private final Object o;\n" + >+ " \n" + >+ " Test3() {\n" + >+ " System.out.println(o); // illegal; o is not definitely assigned\n" + >+ " o = new Object();\n" + >+ " }\n" + >+ " }\n" + >+ " \n" + >+ " // correctly passes compilation\n" + >+ " static class Test4 {\n" + >+ " private final Object o;\n" + >+ " \n" + >+ " Test4() {\n" + >+ " System.out.println(this.o); // legal\n" + >+ " o = new Object();\n" + >+ " }\n" + >+ " }\n" + >+ " \n" + >+ " // incorrectly passes compilation\n" + >+ " static class Test5 {\n" + >+ " private final Object o;\n" + >+ " \n" + >+ " Test5() {\n" + >+ " Test5 other = this;\n" + >+ " other.o = new Object(); // illegal! other.o is not assignable\n" + >+ " } // error: this.o is not definitely assigned\n" + >+ " }\n" + >+ " \n" + >+ " // flags wrong statement as error\n" + >+ " static class Test6 {\n" + >+ " private final Object o;\n" + >+ " static Test6 initing;\n" + >+ " \n" + >+ " Test6() {\n" + >+ " initing = this;\n" + >+ " System.out.println(\"greetings\");\n" + >+ " Test6 other = initing;\n" + >+ " other.o = new Object(); // illegal! other.o is not assignable\n" + >+ " o = new Object(); // legal\n" + >+ " }\n" + >+ " }\n" + >+ "}\n", // ================= >+ }, >+ "----------\n" + >+ "1. WARNING in X.java (at line 4)\n" + >+ " private final Object o;\n" + >+ " ^\n" + >+ "The field X.Test1.o is never read locally\n" + >+ "----------\n" + >+ "2. WARNING in X.java (at line 13)\n" + >+ " private final Object o;\n" + >+ " ^\n" + >+ "The field X.Test2.o is never read locally\n" + >+ "----------\n" + >+ "3. ERROR in X.java (at line 25)\n" + >+ " System.out.println(o); // illegal; o is not definitely assigned\n" + >+ " ^\n" + >+ "The blank final field o may not have been initialized\n" + >+ "----------\n" + >+ "4. WARNING in X.java (at line 42)\n" + >+ " private final Object o;\n" + >+ " ^\n" + >+ "The field X.Test5.o is never read locally\n" + >+ "----------\n" + >+ "5. ERROR in X.java (at line 44)\n" + >+ " Test5() {\n" + >+ " ^^^^^^^\n" + >+ "The blank final field o may not have been initialized\n" + >+ "----------\n" + >+ "6. ERROR in X.java (at line 46)\n" + >+ " other.o = new Object(); // illegal! other.o is not assignable\n" + >+ " ^\n" + >+ "The final field X.Test5.o cannot be assigned\n" + >+ "----------\n" + >+ "7. WARNING in X.java (at line 52)\n" + >+ " private final Object o;\n" + >+ " ^\n" + >+ "The field X.Test6.o is never read locally\n" + >+ "----------\n" + >+ "8. ERROR in X.java (at line 59)\n" + >+ " other.o = new Object(); // illegal! other.o is not assignable\n" + >+ " ^\n" + >+ "The final field X.Test6.o cannot be assigned\n" + >+ "----------\n"); >+} > // final multiple assignment > public void test020() { > this.runNegativeTest( >#P org.eclipse.jdt.core >Index: compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java,v >retrieving revision 1.106.4.5 >diff -u -r1.106.4.5 QualifiedNameReference.java >--- compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java 15 Mar 2007 17:50:57 -0000 1.106.4.5 >+++ compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java 30 Mar 2007 19:47:24 -0000 >@@ -126,9 +126,9 @@ > > if (isCompound) { > if (otherBindingsCount == 0 >- && lastFieldBinding.isBlankFinal() >- && currentScope.allowBlankFinalFieldAssignment(lastFieldBinding) >- && (!flowInfo.isDefinitelyAssigned(lastFieldBinding))) { >+ && lastFieldBinding.isBlankFinal() >+ && currentScope.allowBlankFinalFieldAssignment(lastFieldBinding) >+ && (!flowInfo.isDefinitelyAssigned(lastFieldBinding))) { > currentScope.problemReporter().uninitializedBlankFinalField( > lastFieldBinding, > this); >@@ -164,10 +164,11 @@ > // the last field access is a write access > if (lastFieldBinding.isFinal()) { > // in a context where it can be assigned? >- if (lastFieldBinding.isBlankFinal() >+ if (otherBindingsCount == 0 >+ && this.indexOfFirstFieldBinding == 1 >+ && lastFieldBinding.isBlankFinal() > && !isCompound >- && currentScope.allowBlankFinalFieldAssignment(lastFieldBinding) >- && indexOfFirstFieldBinding == 1) { >+ && currentScope.allowBlankFinalFieldAssignment(lastFieldBinding)) { > if (flowInfo.isPotentiallyAssigned(lastFieldBinding)) { > currentScope.problemReporter().duplicateInitializationOfBlankFinalField(lastFieldBinding, this); > } else { >@@ -176,7 +177,7 @@ > flowInfo.markAsDefinitelyAssigned(lastFieldBinding); > } else { > currentScope.problemReporter().cannotAssignToFinalField(lastFieldBinding, this); >- if (currentScope.allowBlankFinalFieldAssignment(lastFieldBinding)) { // pretend it got assigned >+ if (otherBindingsCount == 0 && currentScope.allowBlankFinalFieldAssignment(lastFieldBinding)) { // pretend it got assigned > flowInfo.markAsDefinitelyAssigned(lastFieldBinding); > } > }
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 151787
:
46788
|
62485
|
62503
| 62551