<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to 6: OpenJava1.1_20020522 : Problems with anonymous classes</title><link>https://sourceforge.net/p/openjava/bugs/6/</link><description>Recent changes to 6: OpenJava1.1_20020522 : Problems with anonymous classes</description><atom:link href="https://sourceforge.net/p/openjava/bugs/6/feed.rss" rel="self"/><language>en</language><lastBuildDate>Sat, 08 Mar 2003 20:13:21 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/openjava/bugs/6/feed.rss" rel="self" type="application/rss+xml"/><item><title>OpenJava1.1_20020522 : Problems with anonymous classes</title><link>https://sourceforge.net/p/openjava/bugs/6/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;I have designed a metaclass that generates anonymous&lt;br /&gt;
classes for undo/redo support of instance variables by&lt;br /&gt;
generating setter methods.&lt;/p&gt;
&lt;p&gt;OpenJava fails when translating callee side assignments&lt;br /&gt;
into setter methods and generates errors at&lt;br /&gt;
openjava/ptree/util/MemberAccessCorrector.java:74 :&lt;/p&gt;
&lt;p&gt;unknown field or variable : __oj_newValue&lt;br /&gt;
unknown field or variable : __oj_oldValue&lt;/p&gt;
&lt;p&gt;Using -calleroff does not change anything.&lt;/p&gt;
&lt;p&gt;The generated setter method for &amp;amp;quot;int&lt;br /&gt;
sonema.mutate.test.Point.x&amp;amp;quot; that fails to be reparsed:&lt;/p&gt;
&lt;p&gt;public int set_x( int oj_param0 )&lt;br /&gt;
{&lt;br /&gt;
if (x == oj_param0) {&lt;br /&gt;
return x;&lt;br /&gt;
} else {&lt;br /&gt;
sonema.mutate.Event __oj_event = new&lt;br /&gt;
sonema.mutate.Event(){&lt;br /&gt;
int __oj_oldValue = x;&lt;/p&gt;
&lt;p&gt;int __oj_newValue = oj_param0;&lt;/p&gt;
&lt;p&gt;public void redo()&lt;br /&gt;
{&lt;br /&gt;
x = __oj_newValue;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;public void undo()&lt;br /&gt;
{&lt;br /&gt;
x = __oj_oldValue;&lt;br /&gt;
}&lt;br /&gt;
};&lt;br /&gt;
x = oj_param0;&lt;/p&gt;
&lt;p&gt;sonema.mutate.EventConsumer.dispatchMutation( __oj_event );&lt;br /&gt;
return x;&lt;br /&gt;
}&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;OpenJava seems to have a problem with scoping anonymous&lt;br /&gt;
class' instance variables inside its method bodies.&lt;/p&gt;
&lt;h1 id="heres-the-output-of-ojcsh"&gt;Here's the output of ojc.sh:&lt;/h1&gt;
&lt;p&gt;+ ojc.sh -d=../../gumo/JVM/od&lt;br /&gt;
sonema/mutate/test/ColoredPoint.oj&lt;br /&gt;
sonema/mutate/test/Color.oj sonema/mutate/test/Point.oj&lt;br /&gt;
java openjava.ojc.Main -d=../../gumo/JVM/od&lt;br /&gt;
sonema/mutate/test/ColoredPoint.oj&lt;br /&gt;
sonema/mutate/test/Color.oj sonema/mutate/test/Point.oj&lt;br /&gt;
OpenJava Compiler Version 1.0a build 20011127&lt;br /&gt;
Generating parse tree.&lt;br /&gt;
..done.&lt;/p&gt;
&lt;p&gt;Initializing parse tree.&lt;br /&gt;
..done.&lt;/p&gt;
&lt;p&gt;Translating callee side&lt;br /&gt;
Tracing field mutation : public int&lt;br /&gt;
sonema.mutate.test.Point.x&lt;br /&gt;
expr = if ( x == oj_param0 ) {  return x; } else { &lt;br /&gt;
sonema.mutate.Event __oj_event =    new&lt;br /&gt;
sonema.mutate.Event() {      int __oj_oldValue = x; &lt;br /&gt;
int __oj_newValue = oj_param0;      public void&lt;br /&gt;
redo() {        x = (__oj_newValue);      }      public&lt;br /&gt;
void undo() {        x = (__oj_oldValue);      }   }  ;&lt;br /&gt;
x = oj_param0; &lt;br /&gt;
sonema.mutate.EventConsumer.dispatchMutation(__oj_event);&lt;br /&gt;
return x; }&lt;br /&gt;
unknown field or variable : __oj_newValue&lt;br /&gt;
ClosedEnvironment&lt;br /&gt;
class object table : {}&lt;br /&gt;
binding table : {}&lt;br /&gt;
parent env : ClosedEnvironment&lt;br /&gt;
class object table : {}&lt;br /&gt;
binding table : {__oj_event=class sonema.mutate.Event}&lt;br /&gt;
parent env : ClosedEnvironment&lt;br /&gt;
class object table : {}&lt;br /&gt;
binding table : {}&lt;br /&gt;
parent env : ClosedEnvironment&lt;br /&gt;
class object table : {}&lt;br /&gt;
binding table : {oj_param0=int}&lt;br /&gt;
parent env : ClassEnvironment&lt;br /&gt;
class : Point&lt;br /&gt;
member classes : []&lt;br /&gt;
parent env : FileEnvironment&lt;br /&gt;
package : sonema.mutate.test&lt;br /&gt;
main class : Point&lt;br /&gt;
local classes :     imported classes :&lt;br /&gt;
sonema.mutate.TraceableClass     imported packages :&lt;br /&gt;
java.lang     local class table : {}&lt;br /&gt;
parent env : GlobalEnvironment&lt;br /&gt;
class object table :&lt;br /&gt;
{sonema.mutate.test.ColoredPoint=class&lt;br /&gt;
sonema.mutate.test.ColoredPoint, char=char,&lt;br /&gt;
sonema.mutate.test.Color=class&lt;br /&gt;
sonema.mutate.test.Color, long=long, float=float,&lt;br /&gt;
short=short, sonema.mutate.Traceable=class&lt;br /&gt;
sonema.mutate.Traceable, void=void, int=int,&lt;br /&gt;
sonema.mutate.test.Point=class&lt;br /&gt;
sonema.mutate.test.Point, java.lang.Object=class&lt;br /&gt;
java.lang.Object, &amp;amp;lt;type&amp;amp;gt;null=&amp;amp;lt;type&amp;amp;gt;null, double=double,&lt;br /&gt;
java.lang.String=class java.lang.String,&lt;br /&gt;
boolean=boolean, sonema.mutate.Event=class&lt;br /&gt;
sonema.mutate.Event, byte=byte}&lt;/p&gt;
&lt;p&gt;unknown field or variable : __oj_oldValue&lt;br /&gt;
ClosedEnvironment&lt;br /&gt;
class object table : {}&lt;br /&gt;
binding table : {}&lt;br /&gt;
parent env : ClosedEnvironment&lt;br /&gt;
class object table : {}&lt;br /&gt;
binding table : {__oj_event=class sonema.mutate.Event}&lt;br /&gt;
parent env : ClosedEnvironment&lt;br /&gt;
class object table : {}&lt;br /&gt;
binding table : {}&lt;br /&gt;
parent env : ClosedEnvironment&lt;br /&gt;
class object table : {}&lt;br /&gt;
binding table : {oj_param0=int}&lt;br /&gt;
parent env : ClassEnvironment&lt;br /&gt;
class : Point&lt;br /&gt;
member classes : []&lt;br /&gt;
parent env : FileEnvironment&lt;br /&gt;
package : sonema.mutate.test&lt;br /&gt;
main class : Point&lt;br /&gt;
local classes :     imported classes :&lt;br /&gt;
sonema.mutate.TraceableClass     imported packages :&lt;br /&gt;
java.lang     local class table : {}&lt;br /&gt;
parent env : GlobalEnvironment&lt;br /&gt;
class object table :&lt;br /&gt;
{sonema.mutate.test.ColoredPoint=class&lt;br /&gt;
sonema.mutate.test.ColoredPoint, char=char,&lt;br /&gt;
sonema.mutate.test.Color=class&lt;br /&gt;
sonema.mutate.test.Color, long=long, float=float,&lt;br /&gt;
short=short, sonema.mutate.Traceable=class&lt;br /&gt;
sonema.mutate.Traceable, void=void, int=int,&lt;br /&gt;
sonema.mutate.test.Point=class&lt;br /&gt;
sonema.mutate.test.Point, java.lang.Object=class&lt;br /&gt;
java.lang.Object, &amp;amp;lt;type&amp;amp;gt;null=&amp;amp;lt;type&amp;amp;gt;null, double=double,&lt;br /&gt;
java.lang.String=class java.lang.String,&lt;br /&gt;
boolean=boolean, sonema.mutate.Event=class&lt;br /&gt;
sonema.mutate.Event, byte=byte}&lt;/p&gt;
&lt;p&gt;=====================================================================================&lt;/p&gt;
&lt;p&gt;Any ideas or pointers on what might need fixing? &lt;br /&gt;
BTW: What is the best way to generate unique&lt;br /&gt;
identifiers for generated code in OpenJava?  I've just&lt;br /&gt;
be prefixing them with &amp;amp;quot;__oj_&amp;amp;quot;.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Kurt Stephens</dc:creator><pubDate>Sat, 08 Mar 2003 20:13:21 -0000</pubDate><guid>https://sourceforge.netd26e30f9c54a3119b6fc746afaaa33b4a4ccec87</guid></item></channel></rss>