private void CreateEndOfFilePresentImpl(IIntermediateClassType resultClass, IInterfaceIndexerMember initialIndexer, IInterfaceType readOnlyCollection, IClassPropertyMember countProp)
        {
            EndOFilePresentImpl             = resultClass.Properties.Add(new TypedName("EndOFilePresent", RuntimeCoreType.Boolean, assembly.IdentityManager), true, false);
            EndOFilePresentImpl.SummaryText = string.Format(@"Returns whether the @s:{0}Symbols.{1}; is present within the @s:{2};", this.compiler.Source.Options.AssemblyName, this.compiler.LexicalSymbolModel.GetEofIdentityField().Name, resultClass.Name);
            var mainBlock    = EndOFilePresentImpl.GetMethod;
            var countPropRef = countProp.GetReference(new SpecialReferenceExpression(SpecialReferenceKind.This));
            var countCheck   = mainBlock.If(countPropRef.GreaterThan(0));

            countCheck.Return(this.commonSymbolBuilder.Identity.GetReference(initialIndexer.GetIndexerSignatureReference <IInterfaceIndexerMember, IInterfaceType>(new SpecialReferenceExpression(SpecialReferenceKind.This), new IExpression[] { countPropRef.Subtract(1) })).EqualTo(compiler.LexicalSymbolModel.GetEofIdentityField().GetReference()));
            mainBlock.Return(IntermediateGateway.FalseValue);
        }
        private void CreateIndexerImpl(IIntermediateClassType resultClass, IInterfaceIndexerMember initialIndexer)
        {
            var indexerFirstParam = initialIndexer.Parameters[0].Value;
            var indexerImpl       = resultClass.Indexers.Add(new TypedName(initialIndexer.Name, initialIndexer.PropertyType), new TypedNameSeries(new TypedName(indexerFirstParam.Name, indexerFirstParam.ParameterType)), true, false);

            indexerImpl.SummaryText = string.Format("Returns the @t:{0}; at the @p:{1}; provided.", indexerImpl.PropertyType.Name, indexerFirstParam.Name);
            var indexerImplFirstParam = indexerImpl.Parameters[indexerFirstParam.UniqueIdentifier];

            indexerImplFirstParam.SummaryText = string.Format("The @s:Int32; value denoting the index of the @s:{0}; to retrieve.", indexerImpl.PropertyType.Name);
            indexerImpl.AccessLevel           = AccessLevelModifiers.Public;
            var indexerImplMainBlock = indexerImpl.GetMethod;

            indexerImplMainBlock.Return(this.InternalStreamImpl.GetReference().GetIndexer(indexerImpl.Parameters[indexerFirstParam.UniqueIdentifier].GetReference()));
            this.IndexerImpl = indexerImpl;
        }