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 188147 Details for
Bug 335845
[compiler] compiler wrongly suggests to add a static qualifier to a method
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
proposed fix v1.1 + regression tests
patch335845.txt (text/plain), 12.74 KB, created by
Ayushman Jain
on 2011-02-02 09:50:39 EST
(
hide
)
Description:
proposed fix v1.1 + regression tests
Filename:
MIME Type:
Creator:
Ayushman Jain
Created:
2011-02-02 09:50:39 EST
Size:
12.74 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java,v >retrieving revision 1.84 >diff -u -r1.84 AllocationExpression.java >--- compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java 12 Aug 2010 16:58:28 -0000 1.84 >+++ compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java 2 Feb 2011 14:48:20 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2010 IBM Corporation and others. >+ * Copyright (c) 2000, 2011 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 >@@ -60,6 +60,11 @@ > flowInfo.unconditionalCopy(), > currentScope); > } >+ if (this.binding.declaringClass.isMemberType() && !this.binding.declaringClass.isStatic()) { >+ // allocating a non-static member type without an enclosing instance of parent type >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845 >+ currentScope.resetEnclosingMethodStaticFlag(); >+ } > manageEnclosingInstanceAccessIfNecessary(currentScope, flowInfo); > manageSyntheticAccessIfNecessary(currentScope, flowInfo); > >#P org.eclipse.jdt.core.tests.compiler >Index: src/org/eclipse/jdt/core/tests/compiler/regression/ProblemTypeAndMethodTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProblemTypeAndMethodTest.java,v >retrieving revision 1.40 >diff -u -r1.40 ProblemTypeAndMethodTest.java >--- src/org/eclipse/jdt/core/tests/compiler/regression/ProblemTypeAndMethodTest.java 14 Jan 2011 15:34:15 -0000 1.40 >+++ src/org/eclipse/jdt/core/tests/compiler/regression/ProblemTypeAndMethodTest.java 2 Feb 2011 14:48:23 -0000 >@@ -30,7 +30,7 @@ > // Static initializer to specify tests subset using TESTS_* static variables > // All specified tests which does not belong to the class are skipped... > static { >-// TESTS_NAMES = new String[] { "test123" }; >+// TESTS_NAMES = new String[] { "testBug335845g" }; > // TESTS_NUMBERS = new int[] { 113 }; > // TESTS_RANGE = new int[] { 108, -1 }; > } >@@ -6633,4 +6633,239 @@ > compilerOptions /* custom options */ > ); > } >+ >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845 >+// If method allocates an inner non-static type without an enclosing object, method can't be static >+public void testBug335845a() { >+ Map compilerOptions = getCompilerOptions(); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBeStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedObjectAllocation, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportSyntheticAccessEmulation, CompilerOptions.IGNORE); >+ this.runNegativeTest( >+ new String[] { >+ "X.java", >+ "public class X {\n" + >+ " private class Bar {\n" + >+ " int a = 1;\n" + >+ " }\n" + >+ " private void foo() {\n" + // don't warn >+ " new Bar();\n" + >+ " }\n" + >+ "}" >+ }, >+ "", >+ null /* no extra class libraries */, >+ true /* flush output directory */, >+ compilerOptions /* custom options */ >+ ); >+} >+ >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845 >+// If method allocates an inner non-static type without an enclosing object, method can't be static >+public void testBug335845b() { >+ Map compilerOptions = getCompilerOptions(); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBeStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedObjectAllocation, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportSyntheticAccessEmulation, CompilerOptions.IGNORE); >+ this.runNegativeTest( >+ new String[] { >+ "X.java", >+ "public class X {\n" + >+ " private class Bar {\n" + >+ " int a = 1;\n" + >+ " }\n" + >+ " private void foo() {\n" + // don't warn >+ " int x = new Bar().a;\n" + >+ " }\n" + >+ "}" >+ }, >+ "", >+ null /* no extra class libraries */, >+ true /* flush output directory */, >+ compilerOptions /* custom options */ >+ ); >+} >+ >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845 >+// If method allocates an inner static type without an enclosing object, method can be static >+public void testBug335845c() { >+ Map compilerOptions = getCompilerOptions(); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBeStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedObjectAllocation, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportSyntheticAccessEmulation, CompilerOptions.IGNORE); >+ this.runNegativeTest( >+ new String[] { >+ "X.java", >+ "public class X {\n" + >+ " private static class Bar {\n" + >+ " int a = 1;\n" + >+ " }\n" + >+ " private void foo() {\n" + // warn since Bar is static >+ " new Bar();\n" + >+ " int x = new Bar().a;" + >+ " }\n" + >+ "}" >+ }, >+ "----------\n" + >+ "1. ERROR in X.java (at line 5)\n" + >+ " private void foo() {\n" + >+ " ^^^^^\n" + >+ "The method foo() from the type X can be declared as static\n" + >+ "----------\n", >+ null /* no extra class libraries */, >+ true /* flush output directory */, >+ compilerOptions /* custom options */ >+ ); >+} >+ >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845 >+// If method allocates an inner non-static type without an enclosing object, method can't be static >+public void testBug335845d() { >+ Map compilerOptions = getCompilerOptions(); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBeStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedObjectAllocation, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportSyntheticAccessEmulation, CompilerOptions.IGNORE); >+ this.runNegativeTest( >+ new String[] { >+ "X.java", >+ "public class X {\n" + >+ " private class Bar {\n" + >+ " class Bar2{}\n" + >+ " }\n" + >+ " private void foo() {\n" + // don't warn >+ " new Bar().new Bar2();\n" + >+ " }\n" + >+ "}" >+ }, >+ "", >+ null /* no extra class libraries */, >+ true /* flush output directory */, >+ compilerOptions /* custom options */ >+ ); >+} >+ >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845 >+// If method allocates an inner static type without an enclosing object, method can be static >+public void testBug335845e() { >+ Map compilerOptions = getCompilerOptions(); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBeStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedObjectAllocation, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportSyntheticAccessEmulation, CompilerOptions.IGNORE); >+ this.runNegativeTest( >+ new String[] { >+ "X.java", >+ "public class X {\n" + >+ " private class Bar {\n" + >+ " int a = 1;\n" + >+ " }\n" + >+ " private void foo() {\n" + // warn since Bar is allocated via Test object >+ " new X().new Bar();\n" + >+ " }\n" + >+ "}" >+ }, >+ "----------\n" + >+ "1. ERROR in X.java (at line 5)\n" + >+ " private void foo() {\n" + >+ " ^^^^^\n" + >+ "The method foo() from the type X can be declared as static\n" + >+ "----------\n", >+ null /* no extra class libraries */, >+ true /* flush output directory */, >+ compilerOptions /* custom options */ >+ ); >+} >+ >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845 >+// If method allocates an inner static type without an enclosing object, method can be static >+public void testBug335845f() { >+ Map compilerOptions = getCompilerOptions(); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBeStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedObjectAllocation, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportSyntheticAccessEmulation, CompilerOptions.IGNORE); >+ this.runNegativeTest( >+ new String[] { >+ "X.java", >+ "public class X {\n" + >+ " private class Bar {\n" + >+ " int a = 1;\n" + >+ " }\n" + >+ " private void foo() {\n" + // warn since Bar is allocated via Test object >+ " X x = new X();" + >+ " x.new Bar().a = 2;\n" + >+ " }\n" + >+ "}" >+ }, >+ "----------\n" + >+ "1. ERROR in X.java (at line 5)\n" + >+ " private void foo() {\n" + >+ " ^^^^^\n" + >+ "The method foo() from the type X can be declared as static\n" + >+ "----------\n", >+ null /* no extra class libraries */, >+ true /* flush output directory */, >+ compilerOptions /* custom options */ >+ ); >+} >+ >+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845 >+// If method allocates an inner static type without an enclosing object, method can be static >+public void testBug335845g() { >+ Map compilerOptions = getCompilerOptions(); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBeStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, CompilerOptions.ERROR); >+ compilerOptions.put(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedObjectAllocation, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); >+ compilerOptions.put(CompilerOptions.OPTION_ReportSyntheticAccessEmulation, CompilerOptions.IGNORE); >+ this.runConformTest( >+ new String[] { >+ "p/X.java", >+ "package p;\n" + >+ "public class X {\n" + >+ " class Bar {\n" + >+ " }\n" + >+ "}" >+ } >+ ); >+ this.runNegativeTest( >+ new String[] { >+ "p/Y.java", >+ "package p;\n" + >+ "public class Y extends X {\n" + >+ " private void foo() {\n" + // warn since Bar is allocated via Test object >+ " new Bar();\n" + >+ " }\n" + >+ "}" >+ }, >+ "", >+ null /* no extra class libraries */, >+ false /* flush output directory */, >+ compilerOptions /* custom options */ >+ ); >+} > }
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 335845
:
188036
| 188147