anchor.diff:          t = unannType
           (i = Identifier '.')?
           'this'
  -        {$v = new VariableDeclaration($i.getText() + "." + "this", $t, $mods);}
  +        {
  +            $v = new VariableDeclaration(
  +                $i.text.equals("") ? "this" : $i.getText() + "." + "this",
  +                $t,
  +                $mods)
  +        }
   	;
   
   throws_ returns [List<Type> l]
  
positive.code:         {$s = $ls;}
  	;
  
  classBody [ClassDeclaration d]
  	:	'{' (classBodyDeclaration[d])* '}'
  	;
  
  classBodyDeclaration [ClassDeclaration d]
  	:	classMemberDeclaration[d]
  	|	i = instanceInitializer {$d.addInstanceInitializer($i);}
  	|	s = staticInitializer {$d.addStaticInitializer($s);}
  	|	ct = constructorDeclaration {$d.addMethod($ct);}
  	;
  
  classMemberDeclaration [ClassDeclaration d]
  	:	f = fieldDeclaration {$d.addField($f);}
  	|	m = methodDeclaration {$d.addMethod($d);}
  	|	c = classDeclaration {$d.addInnerClass($c);}
  
negative.code: 	;
  
  enumDeclaration returns [EnumDeclaration d]
      locals [List<Modifier> mods = new ArrayList<>();]
  	:	(m = classModifier {$mods.add($m);})*
          'enum' id = Identifier il = superinterfaces?
          {$d = new EnumDeclaration($id.getText(), $il, $mods);}
          enumBody[d]
  	;
  
  enumBody [EnumDeclaration d]
  	:	'{' (enumConstantList[d])? ','? (enumBodyDeclarations[d])? '}'
  	;
  
  enumConstantList [EnumDeclaration d]
  	:	enumConstant[d] (',' enumConstant[d])*
  	;
  
  enumConstant [EnumDeclaration d]
      locals [List<Modifier> mods = new ArrayList<>();]
  	:	(enumConstantModifier {$mods.add($m);})*
          id = Identifier ('(' a = argumentList? ')')?
          {$d.addConstant(new EnumConstant($id.getText(), $mods, $a));}
          (classBody[d])?
  	;
  
  enumConstantModifier returns [Modifier m]
  	:	a = annotation {$m = $a;}
  	;
  
  enumBodyDeclarations [EnumDeclaration d]
  	:	';' (classBodyDeclaration[d])*
  	;
  
  /*
  