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 113888 Details for
Bug 249107
[compiler] IllegalAccessError in presence of synthetic field access
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed patch
249107.txt (text/plain), 12.96 KB, created by
Philipe Mulet
on 2008-09-30 12:41:42 EDT
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Philipe Mulet
Created:
2008-09-30 12:41:42 EDT
Size:
12.96 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java,v >retrieving revision 1.169 >diff -u -r1.169 CodeStream.java >--- compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java 30 Sep 2008 15:31:26 -0000 1.169 >+++ compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java 30 Sep 2008 16:41:10 -0000 >@@ -2445,14 +2445,14 @@ > areturn(); > } > >-public void generateSyntheticBodyForFieldReadAccess(SyntheticMethodBinding accessBinding) { >- initializeMaxLocals(accessBinding); >- FieldBinding fieldBinding = accessBinding.targetReadField; >+public void generateSyntheticBodyForFieldReadAccess(SyntheticMethodBinding accessMethod) { >+ initializeMaxLocals(accessMethod); >+ FieldBinding fieldBinding = accessMethod.targetReadField; > if (fieldBinding.isStatic()) { >- fieldAccess(Opcodes.OPC_getstatic, fieldBinding, null /* default declaringClass */); >+ fieldAccess(Opcodes.OPC_getstatic, fieldBinding, accessMethod.declaringClass); // target method declaring class may not be accessible (247953); > } else { > aload_0(); >- fieldAccess(Opcodes.OPC_getfield, fieldBinding, null /* default declaringClass */); >+ fieldAccess(Opcodes.OPC_getfield, fieldBinding, accessMethod.declaringClass); // target method declaring class may not be accessible (247953); > } > switch (fieldBinding.type.id) { > // case T_void : >@@ -2479,16 +2479,16 @@ > } > } > >-public void generateSyntheticBodyForFieldWriteAccess(SyntheticMethodBinding accessBinding) { >- initializeMaxLocals(accessBinding); >- FieldBinding fieldBinding = accessBinding.targetWriteField; >+public void generateSyntheticBodyForFieldWriteAccess(SyntheticMethodBinding accessMethod) { >+ initializeMaxLocals(accessMethod); >+ FieldBinding fieldBinding = accessMethod.targetWriteField; > if (fieldBinding.isStatic()) { > load(fieldBinding.type, 0); >- fieldAccess(Opcodes.OPC_putstatic, fieldBinding, null /* default declaringClass */); >+ fieldAccess(Opcodes.OPC_putstatic, fieldBinding, accessMethod.declaringClass); // target method declaring class may not be accessible (247953); > } else { > aload_0(); > load(fieldBinding.type, 1); >- fieldAccess(Opcodes.OPC_putfield, fieldBinding, null /* default declaringClass */); >+ fieldAccess(Opcodes.OPC_putfield, fieldBinding, accessMethod.declaringClass); // target method declaring class may not be accessible (247953); > } > return_(); > } >@@ -2529,7 +2529,7 @@ > } > } > if (targetMethod.isStatic()) >- invoke(Opcodes.OPC_invokestatic, targetMethod, null /* default declaringClass */); >+ invoke(Opcodes.OPC_invokestatic, targetMethod, accessMethod.declaringClass); // target method declaring class may not be accessible (128563) > else { > if (targetMethod.isConstructor() > || targetMethod.isPrivate() >#P org.eclipse.jdt.core.tests.compiler >Index: src/org/eclipse/jdt/core/tests/compiler/regression/InnerEmulationTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/InnerEmulationTest.java,v >retrieving revision 1.44 >diff -u -r1.44 InnerEmulationTest.java >--- src/org/eclipse/jdt/core/tests/compiler/regression/InnerEmulationTest.java 30 Sep 2008 15:31:35 -0000 1.44 >+++ src/org/eclipse/jdt/core/tests/compiler/regression/InnerEmulationTest.java 30 Sep 2008 16:41:13 -0000 >@@ -6520,7 +6520,7 @@ > checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); > } > //https://bugs.eclipse.org/bugs/show_bug.cgi?id=249107 >-public void _testONLY_157() throws Exception { >+public void test157() throws Exception { > this.runConformTest(new String[] { > "package1/A.java",//======================= > "package package1;\n" + >@@ -6550,15 +6550,15 @@ > }, > ""); > String expectedOutput = >- " // Method descriptor #33 (Lpackage2/C;)V\n" + >+ " // Method descriptor #33 (Lpackage2/C;)I\n" + > " // Stack: 1, Locals: 1\n" + >- " static synthetic void access$0(package2.C arg0);\n" + >+ " static synthetic int access$0(package2.C arg0);\n" + > " 0 aload_0 [arg0]\n" + > " 1 getfield package2.C.outerField : int"; > checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); > } > //https://bugs.eclipse.org/bugs/show_bug.cgi?id=249107 - variation >-public void _testONLY_158() throws Exception { >+public void test158() throws Exception { > this.runConformTest(new String[] { > "package1/A.java",//======================= > "package package1;\n" + >@@ -6598,7 +6598,7 @@ > checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); > } > //https://bugs.eclipse.org/bugs/show_bug.cgi?id=249107 - variation >-public void _testONLY_159() throws Exception { >+public void test159() throws Exception { > this.runConformTest(new String[] { > "package1/A.java",//======================= > "package package1;\n" + >@@ -6628,15 +6628,15 @@ > }, > ""); > String expectedOutput = >- " // Method descriptor #33 (Lpackage2/C;)V\n" + >+ " // Method descriptor #33 (Lpackage2/C;)I\n" + > " // Stack: 1, Locals: 1\n" + >- " static synthetic void access$0(package2.C arg0);\n" + >+ " static synthetic int access$0(package2.C arg0);\n" + > " 0 aload_0 [arg0]\n" + > " 1 getfield package2.C.outerField : int"; > checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); > } > //https://bugs.eclipse.org/bugs/show_bug.cgi?id=249107 - variation >-public void _testONLY_160() throws Exception { >+public void test160() throws Exception { > this.runConformTest(new String[] { > "package1/A.java",//======================= > "package package1;\n" + >@@ -6674,6 +6674,195 @@ > " 2 putfield package2.C.outerField : int"; > checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); > } >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=249107 - variation >+public void test161() throws Exception { >+ this.runConformTest(new String[] { >+ "package1/A.java",//======================= >+ "package package1;\n" + >+ "abstract class A {\n" + >+ " static protected int outerField; {\n" + >+ " }\n" + >+ "}\n", >+ "package1/B.java",//======================= >+ "package package1;\n" + >+ "public class B extends A {\n" + >+ "}\n", >+ "package2/C.java",//======================= >+ "package package2;\n" + >+ "import package1.B;\n" + >+ "public class C extends B {\n" + >+ " private final MyInner myInner = new MyInner();\n" + >+ " private class MyInner {\n" + >+ " public void innerMethod() {\n" + >+ " int j = C.this.outerField;\n" + >+ " }\n" + >+ " }\n" + >+ " public static void main(String[] args) {\n" + >+ " final C c = new C();\n" + >+ " c.myInner.innerMethod();\n" + >+ " }\n" + >+ "}\n", >+ }, >+ ""); >+ String expectedOutput = >+ " // Method descriptor #33 ()I\n" + >+ " // Stack: 1, Locals: 0\n" + >+ " static synthetic int access$0();\n" + >+ " 0 getstatic package2.C.outerField : int"; >+ checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=249107 - variation >+public void test162() throws Exception { >+ this.runConformTest(new String[] { >+ "package1/A.java",//======================= >+ "package package1;\n" + >+ "abstract class A {\n" + >+ " static protected int outerField; {\n" + >+ " }\n" + >+ "}\n", >+ "package1/B.java",//======================= >+ "package package1;\n" + >+ "public class B extends A {\n" + >+ "}\n", >+ "package2/C.java",//======================= >+ "package package2;\n" + >+ "import package1.B;\n" + >+ "public class C extends B {\n" + >+ " private final MyInner myInner = new MyInner();\n" + >+ " private class MyInner {\n" + >+ " public void innerMethod() {\n" + >+ " C.this.outerField = 12;\n" + >+ " }\n" + >+ " }\n" + >+ " public static void main(String[] args) {\n" + >+ " final C c = new C();\n" + >+ " c.myInner.innerMethod();\n" + >+ " }\n" + >+ "}\n", >+ }, >+ ""); >+ String expectedOutput = >+ " // Method descriptor #33 (I)V\n" + >+ " // Stack: 1, Locals: 1\n" + >+ " static synthetic void access$0(int arg0);\n" + >+ " 0 iload_0 [arg0]\n" + >+ " 1 putstatic package2.C.outerField : int"; >+ >+ checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=249107 - variation >+public void test163() throws Exception { >+ this.runConformTest(new String[] { >+ "package1/A.java",//======================= >+ "package package1;\n" + >+ "abstract class A {\n" + >+ " static protected int outerField; {\n" + >+ " }\n" + >+ "}\n", >+ "package1/B.java",//======================= >+ "package package1;\n" + >+ "public class B extends A {\n" + >+ "}\n", >+ "package2/C.java",//======================= >+ "package package2;\n" + >+ "import package1.B;\n" + >+ "public class C extends B {\n" + >+ " private final MyInner myInner = new MyInner();\n" + >+ " private class MyInner {\n" + >+ " public void innerMethod() {\n" + >+ " int j = outerField;\n" + >+ " }\n" + >+ " }\n" + >+ " public static void main(String[] args) {\n" + >+ " final C c = new C();\n" + >+ " c.myInner.innerMethod();\n" + >+ " }\n" + >+ "}\n", >+ }, >+ ""); >+ String expectedOutput = >+ " // Method descriptor #33 ()I\n" + >+ " // Stack: 1, Locals: 0\n" + >+ " static synthetic int access$0();\n" + >+ " 0 getstatic package2.C.outerField : int"; >+ checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=249107 - variation >+public void test164() throws Exception { >+ this.runConformTest(new String[] { >+ "package1/A.java",//======================= >+ "package package1;\n" + >+ "abstract class A {\n" + >+ " static protected int outerField; {\n" + >+ " }\n" + >+ "}\n", >+ "package1/B.java",//======================= >+ "package package1;\n" + >+ "public class B extends A {\n" + >+ "}\n", >+ "package2/C.java",//======================= >+ "package package2;\n" + >+ "import package1.B;\n" + >+ "public class C extends B {\n" + >+ " private final MyInner myInner = new MyInner();\n" + >+ " private class MyInner {\n" + >+ " public void innerMethod() {\n" + >+ " outerField = 12;\n" + >+ " }\n" + >+ " }\n" + >+ " public static void main(String[] args) {\n" + >+ " final C c = new C();\n" + >+ " c.myInner.innerMethod();\n" + >+ " }\n" + >+ "}\n", >+ }, >+ ""); >+ String expectedOutput = >+ " // Method descriptor #33 (I)V\n" + >+ " // Stack: 1, Locals: 1\n" + >+ " static synthetic void access$0(int arg0);\n" + >+ " 0 iload_0 [arg0]\n" + >+ " 1 putstatic package2.C.outerField : int"; >+ checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=128563 - variation >+public void test165() throws Exception { >+ this.runConformTest(new String[] { >+ "package1/A.java",//======================= >+ "package package1;\n" + >+ "abstract class A {\n" + >+ " static protected final void outerMethod() {\n" + >+ " }\n" + >+ "}\n", >+ "package1/B.java",//======================= >+ "package package1;\n" + >+ "public class B extends A {\n" + >+ "}\n", >+ "package2/C.java",//======================= >+ "package package2;\n" + >+ "import package1.B;\n" + >+ "public class C extends B {\n" + >+ " private final MyInner myInner = new MyInner();\n" + >+ " private class MyInner {\n" + >+ " public void innerMethod() {\n" + >+ " C.this.outerMethod();\n" + >+ " }\n" + >+ " }\n" + >+ " public static void main(String[] args) {\n" + >+ " final C c = new C();\n" + >+ " c.myInner.innerMethod();\n" + >+ " }\n" + >+ "}\n", >+ }, >+ ""); >+ String expectedOutput = >+ " // Method descriptor #8 ()V\n" + >+ " // Stack: 0, Locals: 0\n" + >+ " static synthetic void access$0();\n" + >+ " 0 invokestatic package2.C.outerMethod() : void"; >+ checkDisassembledClassFile(OUTPUT_DIR + File.separator + "package2" + File.separator + "C.class", "C", expectedOutput); >+} >+ > public static Class testClass() { > return InnerEmulationTest.class; > }
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 249107
: 113888 |
114016
|
114053