def test_arrayTypeExp(self): g = JavaGrammar() self._parseStringTest( g.typeExpression(), 'float []', Schema.ArrayTypeExp(itemTypeExp=Schema.FloatTypeRef())) self._parseStringTest( g.typeExpression(), 'float [][]', Schema.ArrayTypeExp(itemTypeExp=Schema.ArrayTypeExp( itemTypeExp=Schema.FloatTypeRef()))) self._parseStringTest( g.typeExpression(), 'ArrayList []', Schema.ArrayTypeExp(itemTypeExp=Schema.ClassOrInterfaceTypeRef( name='ArrayList'))) self._parseStringTest( g.typeExpression(), 'ArrayList<Integer> []', Schema.ArrayTypeExp(itemTypeExp=Schema.GenericTypeExp( target='ArrayList', args=[Schema.ClassOrInterfaceTypeRef(name='Integer')]))) self._parseStringTest( g.typeExpression(), 'java.util.List []', Schema.ArrayTypeExp(itemTypeExp=Schema.MemberTypeExp( target=Schema.MemberTypeExp( target=Schema.ClassOrInterfaceTypeRef(name='java'), member=Schema.ClassOrInterfaceTypeRef(name='util')), member=Schema.ClassOrInterfaceTypeRef(name='List'))))
def test_typeClassExp(self): g = JavaGrammar() self._parseStringTest( g.primary(), 'float.class', Schema.TypeClassExp(typeExp=Schema.FloatTypeRef())) self._parseStringTest( g.primary(), 'ArrayList<Integer>.class', Schema.TypeClassExp(typeExp=Schema.GenericTypeExp( target='ArrayList', args=[Schema.ClassOrInterfaceTypeRef(name='Integer')]))) self._parseStringTest(g.primary(), 'void.class', Schema.VoidClassExp())
def test_genericTypeExp(self): g = JavaGrammar() self._parseStringTest( g.typeExpression(), 'ArrayList<Integer>', Schema.GenericTypeExp( target='ArrayList', args=[Schema.ClassOrInterfaceTypeRef(name='Integer')])) self._parseStringTest( g.typeExpression(), 'ArrayList<Integer,Double>', Schema.GenericTypeExp( target='ArrayList', args=[ Schema.ClassOrInterfaceTypeRef(name='Integer'), Schema.ClassOrInterfaceTypeRef(name='Double') ])) self._parseStringTest( g.typeExpression(), 'X.ArrayList<Integer>', Schema.MemberTypeExp( target=Schema.ClassOrInterfaceTypeRef(name='X'), member=Schema.GenericTypeExp( target='ArrayList', args=[Schema.ClassOrInterfaceTypeRef(name='Integer')]))) self._parseStringTest( g.typeExpression(), 'ArrayList<Integer>.X', Schema.MemberTypeExp( target=Schema.GenericTypeExp( target='ArrayList', args=[Schema.ClassOrInterfaceTypeRef(name='Integer')]), member=Schema.ClassOrInterfaceTypeRef(name='X'))) self._parseStringTest( g.typeExpression(), 'Vector<ArrayList<Integer>>', Schema.GenericTypeExp( target='Vector', args=[ Schema.GenericTypeExp( target='ArrayList', args=[Schema.ClassOrInterfaceTypeRef(name='Integer')]) ])) self._parseStringTest( g.typeExpression(), 'ArrayList<Integer[]>', Schema.GenericTypeExp( target='ArrayList', args=[ Schema.ArrayTypeExp( itemTypeExp=Schema.ClassOrInterfaceTypeRef( name='Integer')) ])) self._parseStringTest( g.typeExpression(), 'ArrayList<int[]>', Schema.GenericTypeExp( target='ArrayList', args=[Schema.ArrayTypeExp(itemTypeExp=Schema.IntTypeRef())])) self._parseStringTest( g.typeExpression(), 'ArrayList<? extends Q>', Schema.GenericTypeExp( target='ArrayList', args=[ Schema.WildCardTypeArgument( extendsOrSuper='extends', typeExp=Schema.ClassOrInterfaceTypeRef(name='Q')) ])) self._parseStringTest( g.typeExpression(), 'ArrayList<? super Q>', Schema.GenericTypeExp( target='ArrayList', args=[ Schema.WildCardTypeArgument( extendsOrSuper='super', typeExp=Schema.ClassOrInterfaceTypeRef(name='Q')) ])) self._parseStringTest( g.typeExpression(), 'ArrayList<?>', Schema.GenericTypeExp( target='ArrayList', args=[ Schema.WildCardTypeArgument( extendsOrSuper='super', typeExp=Schema.ClassOrInterfaceTypeRef(name='Q')) ])) self._parseStringFailTest(g.typeExpression(), 'ArrayList<int>')
def genericTypeCall(self): return ( self.simpleName() + Literal( '<' ) + SeparatedList( self.genericTypeArgument(), 0, -1, SeparatedList.TrailingSeparatorPolicy.NEVER ) + Literal( '>' ) ).action( \ lambda input, begin, end, x, bindings: Schema.GenericTypeExp( target=x[0], args=x[2] ) )