public TypeReference simple_type_reference()
 {
     TypeReference reference = null;
     try
     {
         Token token = this.qname();
         if ((this.LA(1) == 0x41) && (this.LA(2) == 0x5b))
         {
             TypeReferenceCollection references;
             this.match(0x41);
             this.match(0x5b);
             if (base.inputState.guessing == 0)
             {
                 GenericTypeReference reference2;
                 reference = reference2 = new GenericTypeReference(ToLexicalInfo(token), token.getText());
                 references = reference2.get_GenericArguments();
             }
             this.type_reference_list(references);
             this.match(0x5f);
             return reference;
         }
         if (!tokenSet_35_.member(this.LA(1)) || !tokenSet_25_.member(this.LA(2)))
         {
             throw new NoViableAltException(this.LT(1), this.getFilename());
         }
         if (base.inputState.guessing == 0)
         {
             SimpleTypeReference reference3;
             SimpleTypeReference reference1 = reference3 = new SimpleTypeReference(ToLexicalInfo(token));
             reference3.set_Name(token.getText());
             reference = reference3;
         }
         return reference;
     }
     catch (RecognitionException exception)
     {
         if (base.inputState.guessing != 0)
         {
             throw;
         }
         this.reportError(exception);
         this.recover(exception, tokenSet_35_);
         return reference;
     }
     return reference;
 }