1813,1814c1813,1818
< void ReferenceType():
< {}
---
> String ReferenceType():
> {
> 	Token primitive;
> 	StringBuffer sb = new StringBuffer(); 
> 	String clazz = "";
> }
1816c1820,1827
<    PrimitiveType() ( LOOKAHEAD(2) "[" "]" )+
---
>    (primitive=PrimitiveType() {
>    		sb.append(primitive.image);
>    }
>    ( LOOKAHEAD(2) "[" "]" 
>    	{
>    		sb.append("[]");
>    	}
>    )+
1818c1829,1840
<    ( ClassOrInterfaceType() ) ( LOOKAHEAD(2) "[" "]" )*
---
>    ( clazz = ClassOrInterfaceType()
>    	{ sb.append(clazz); }
>    ) 
>    ( LOOKAHEAD(2) "[" "]"
>    	{
>    		sb.append("[]");
> 	} 
>    )*
>    )
>    {
> 	   return sb.toString();
>    }
1823d1844
<     //todo - include generics
1825a1847
>     String generics = "";
1833c1855,1859
<   [ LOOKAHEAD(2) TypeArguments() ]
---
>   [ LOOKAHEAD(2) generics = TypeArguments() 
>   {
>   	sb.append(generics);
>   }
>   ] 
1840c1866,1871
<     [ LOOKAHEAD(2) TypeArguments() ] )*
---
>     [ LOOKAHEAD(2) generics = TypeArguments() ] 
>      {
> 	     sb.append(generics);
>      }
> 		       
>     )*
1847,1848c1878
< void TypeArguments():
< {}
---
> String TypeArguments():
1850c1880,1898
<    "<" TypeArgument() ( "," TypeArgument() )* ">"
---
> 	String ret = "";
> 	StringBuffer sb = new StringBuffer();
> }
> {
>    "<" ret = TypeArgument() {
> 		   		sb.append("<").append(ret);
>    			    }
>    ( "," ret = TypeArgument()
>    	{
>    		sb.append(ret);
>    	}
>    )* ">" 
>    {
>    	sb.append(">");
>    }
>    { 
> 	return sb.toString();
>    }
>    
1853,1854c1901
< void TypeArgument():
< {}
---
> String TypeArgument():
1856c1903,1909
<    (ReferenceType() [ WildcardBounds() ])
---
> 	String ret = "";
> }
> {
>    (ret = ReferenceType() [ WildcardBounds() ])
>    {
>    	return ret;
>    }
1859c1912,1914
< 
---
>    {
> 	   return ret;
>    }
1863d1917
< {}
1865c1919,1921
<    "extends" ReferenceType()
---
> }
> {
>    "extends" ReferenceType() 
