public override void Visit(DOM.Alias alias) { _namespaceResolver.ProcessAlias((Alias)alias); ProcessInterpolation((IPairWithInterpolation)alias); base.Visit(alias); Visit(alias.PairValue); }
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; }
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(); }
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; }
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(); }