5.1 and trunk permits you to write e.g.

   Foo( $array: array )
   Bar( this == $array[0] )

but this crashes druing compilation with
 java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1949)
    at org.drools.rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:928)

It's OK by this syntax:
   accessor_element ; ID square_chunk* ;

Processing in DescriptorFactory handles []:

createAccessorPath(List<BaseDescr> aeList) {
   ...
if (name.indexOf('.') > -1 || name.indexOf('[') > -1) {
            evaluator = new QualifiedIdentifierRestrictionDescr();

Then in PatternBuilder, we end up in this variant of the overloaded method buildRestriction:

  private Restriction buildRestriction(final RuleBuildContext context,
                                         final InternalReadAccessor extractor,
                                         final FieldConstraintDescr fieldConstraintDescr,
                                         final QualifiedIdentifierRestrictionDescr qiRestrictionDescr)

and this is where it happens, lastDot being == -1.

{        final int lastDot = qiRestrictionDescr.getText().lastIndexOf( '.' );
        final String className = qiRestrictionDescr.getText().substring( 0,
                                                                         lastDot );

If the syntax isn't too permissive, then this method would have to handle x[y] in
addition to x.y, etc.

-W