public override void Visit(DOM.Alias alias)
 {
     _namespaceResolver.ProcessAlias((Alias)alias);
     ProcessInterpolation((IPairWithInterpolation)alias);
     base.Visit(alias);
     Visit(alias.PairValue);
 }
Esempio n. 2
0
 private void CheckAliasIsDefined(DOM.Alias alias)
 {
     if (((Alias)alias).AliasDefinition == null)
     {
         Context.AddError(CompilerErrorFactory.AliasIsNotDefined((Alias)alias, _currentModule.FileName));
     }
 }
        public override void OnAlias(DOM.Alias alias)
        {
            CheckBlockIntegrityForValueAlias(alias);
            CheckPairValue(alias);
            CheckAliasIsDefined(alias);
            var aliasDef = ((Alias)alias).AliasDefinition;

            //Do not resolve alias without AliasDef or having circular reference
            if (aliasDef == null || aliasDef.HasCircularReference)
            {
                return;
            }

            AliasContext.Push(new AliasContext {
                AliasDefinition = aliasDef, Alias = (Alias)alias, AliasNsInfo = GetContextNsInfo()
            });
            CheckForUnexpectedArguments((Alias)alias, aliasDef, _currentModule.FileName);
            CheckInterpolation((Alias)alias);
            if (CheckStartOfChoiceContainer((Alias)alias, aliasDef.Entities, aliasDef))
            {
                Visit(aliasDef.Entities.Where(e => !(e is DOM.Attribute)));
                EndChoiceContainer();
            }
            else
            {
                Visit(aliasDef.Entities.Where(e => !(e is DOM.Attribute)));
            }

            AliasContext.Pop();
            _namespaceResolver.ProcessAlias((Alias)alias);
        }
        private NsInfo ResolveAliasInAliasDefinition(DOM.Alias alias)
        {
            //Finding AliasDef
            var aliasDef = GetAliasDefinition(alias.Name);

            if (aliasDef == null)
            {
                //Report Error
                //_context.AddError(CompilerErrorFactory.AliasIsNotDefined((Alias)alias, aliasDefNsInfo.ModuleMember.Module.FileName));
                return(null);
            }
            return(ResolveAliasesInAliasDefinition(aliasDef));
        }
        /// <inheritdoc />
        public override void Visit(DOM.Alias alias)
        {
            var aliasDef = ((Alias)alias).AliasDefinition;

            //Do not resolve alias without AliasDef or having circular reference
            if (aliasDef == null || aliasDef.HasCircularReference)
            {
                return;
            }
            AliasContext.Push(new AliasContextInfo((Alias)alias, CurrentModuleMember));
            CurrentModuleMember = aliasDef;
            Visit(aliasDef.Entities.Where(e => !(e is Attribute)));
            CurrentModuleMember = AliasContext.Pop().ModuleMember;
        }
Esempio n. 6
0
        public override void OnAlias(DOM.Alias alias)
        {
            var aliasDef = ((Alias)alias).AliasDefinition;

            //Do not resolve alias without AliasDef or having circular reference
            if (aliasDef == null || aliasDef.HasCircularReference)
            {
                return;
            }

            AliasContext.Push(new AliasContext {
                AliasDefinition = aliasDef, Alias = (Alias)alias, AliasNsInfo = GetContextNsInfo()
            });
            Visit(aliasDef.Entities.Where(e => !(e is DOM.Attribute)));
            AliasContext.Pop();
        }
Esempio n. 7
0
        private void CheckBlockIntegrityForValueAlias(DOM.Alias alias)
        {
            if (((Alias)alias).AliasDefinition == null)
            {
                return;
            }
            if (!((Alias)alias).AliasDefinition.IsValueNode)
            {
                return;
            }
            if (alias.Parent.Assignment == AssignmentEnum.CE)
            {
                return;
            }
            if (_currentModule.TargetFormat == Module.TargetFormats.Xml && alias.Parent is Document)
            {
                Context.AddError(CompilerErrorFactory.InvalidUsageOfValueAlias((Alias)alias, _currentModule.FileName));
            }

            if (_currentModule.TargetFormat == Module.TargetFormats.Xml)
            {
                return;
            }

            if (!_blockStateUnknown)
            {
                var blockState = _blockState.Peek();
                if (blockState != JsonGenerator.BlockStateEnum.Object)
                {
                    return;
                }

                ReportErrorForEachNodeInAliasContext(
                    n => CompilerErrorFactory.PropertyIsExpected(((IMappedPair)n).NameInterval, _currentModule.FileName));
                Context.AddError(CompilerErrorFactory.PropertyIsExpected(((IMappedPair)alias).NameInterval, _currentModule.FileName));
                return;
            }

            //This element is the first element of the block. It decides if the block is array or object
            _blockState.Push(JsonGenerator.BlockStateEnum.Array);
            _blockStateUnknown = false;
        }
Esempio n. 8
0
        public override void Visit(DOM.Alias alias)
        {
            CheckAliasIsDefined(alias);
            var aliasDef = ((Alias)alias).AliasDefinition;

            //Do not resolve alias without AliasDef or having circular reference
            if (aliasDef == null || aliasDef.HasCircularReference)
            {
                return;
            }

            CheckBlockIntegrityForValueAlias(alias);
            CheckPairValue(alias);

            AliasContext.Push(new AliasContextInfo((Alias)alias, CurrentModuleMember));
            CheckForUnexpectedArguments((Alias)alias, aliasDef, _currentModule.FileName);
            CheckInterpolation((Alias)alias);
            if (CheckStartOfChoiceContainer((Alias)alias, aliasDef.Entities, aliasDef))
            {
                Visit(aliasDef.Entities.Where(e => !(e is DOM.Attribute)));
                EndChoiceContainer();
            }
            else
            {
                if (_blockState.Count > 0 && _blockState.Peek() == JsonGenerator.BlockStateEnum.Array && aliasDef.BlockType == BlockType.JsonObject)
                {
                    _blockState.Push(JsonGenerator.BlockStateEnum.Object);
                    Visit(aliasDef.Entities.Where(e => !(e is DOM.Attribute)));
                    _blockState.Pop();
                }
                else
                {
                    Visit(aliasDef.Entities.Where(e => !(e is DOM.Attribute)));
                }
            }
            AliasContext.Pop();
        }