Ejemplo n.º 1
0
 void SaveBraceInfo(Span span, int leftLength, int rightLength, CodeBracesRangeFlags flags)
 {
     if (span.Length < leftLength + rightLength)
     {
         return;
     }
     bracesInfo.Add(new CodeBracesRange(new TextSpan(span.Start, leftLength), new TextSpan(span.End - rightLength, rightLength), flags));
 }
Ejemplo n.º 2
0
        static StructureVisualizerDataBlockKind GetBlockKind(CodeBracesRangeFlags flags)
        {
            switch (flags.ToBlockKind())
            {
            case CodeBracesRangeFlags.BlockKind_Namespace:          return(StructureVisualizerDataBlockKind.Namespace);

            case CodeBracesRangeFlags.BlockKind_Type:                       return(StructureVisualizerDataBlockKind.Type);

            case CodeBracesRangeFlags.BlockKind_ValueType:          return(StructureVisualizerDataBlockKind.ValueType);

            case CodeBracesRangeFlags.BlockKind_Interface:          return(StructureVisualizerDataBlockKind.Interface);

            case CodeBracesRangeFlags.BlockKind_Method:                     return(StructureVisualizerDataBlockKind.Method);

            case CodeBracesRangeFlags.BlockKind_Accessor:           return(StructureVisualizerDataBlockKind.Accessor);

            case CodeBracesRangeFlags.BlockKind_AnonymousMethod: return(StructureVisualizerDataBlockKind.AnonymousMethod);

            case CodeBracesRangeFlags.BlockKind_Constructor:        return(StructureVisualizerDataBlockKind.Constructor);

            case CodeBracesRangeFlags.BlockKind_Destructor:         return(StructureVisualizerDataBlockKind.Destructor);

            case CodeBracesRangeFlags.BlockKind_Operator:           return(StructureVisualizerDataBlockKind.Operator);

            case CodeBracesRangeFlags.BlockKind_Conditional:        return(StructureVisualizerDataBlockKind.Conditional);

            case CodeBracesRangeFlags.BlockKind_Loop:                       return(StructureVisualizerDataBlockKind.Loop);

            case CodeBracesRangeFlags.BlockKind_Property:           return(StructureVisualizerDataBlockKind.Property);

            case CodeBracesRangeFlags.BlockKind_Event:                      return(StructureVisualizerDataBlockKind.Event);

            case CodeBracesRangeFlags.BlockKind_Try:                        return(StructureVisualizerDataBlockKind.Try);

            case CodeBracesRangeFlags.BlockKind_Catch:                      return(StructureVisualizerDataBlockKind.Catch);

            case CodeBracesRangeFlags.BlockKind_Filter:                     return(StructureVisualizerDataBlockKind.Filter);

            case CodeBracesRangeFlags.BlockKind_Finally:            return(StructureVisualizerDataBlockKind.Finally);

            case CodeBracesRangeFlags.BlockKind_Fault:                      return(StructureVisualizerDataBlockKind.Fault);

            case CodeBracesRangeFlags.BlockKind_Lock:                       return(StructureVisualizerDataBlockKind.Lock);

            case CodeBracesRangeFlags.BlockKind_Using:                      return(StructureVisualizerDataBlockKind.Using);

            case CodeBracesRangeFlags.BlockKind_Fixed:                      return(StructureVisualizerDataBlockKind.Fixed);

            case CodeBracesRangeFlags.BlockKind_Case:                       return(StructureVisualizerDataBlockKind.Case);

            case CodeBracesRangeFlags.BlockKind_Other:                      return(StructureVisualizerDataBlockKind.Other);

            default:
                Debug.Fail($"Unknown block kind: {flags.ToBlockKind()}");
                return(StructureVisualizerDataBlockKind.None);
            }
        }
Ejemplo n.º 3
0
        void EndKeywordBlock(IDecompilerOutput output, BraceInfo info, CodeBracesRangeFlags flags, bool addLineSeparator = false)
        {
            output.DecreaseIndent();
            var end = output.NextPosition;

            output.Write("}", BoxedTextColor.Punctuation);
            output.AddBracePair(new TextSpan(info.Start, 1), new TextSpan(end, 1), flags);
            if (addLineSeparator)
            {
                output.AddLineSeparator(end);
            }
            output.WriteLine();
        }
Ejemplo n.º 4
0
 public XmlParser(string text, bool isXaml)
 {
     this.text              = text ?? throw new ArgumentNullException(nameof(text));
     xamlAttributeParser    = isXaml ? new XamlAttributeParser(this) : null;
     blockFlags             = isXaml ? CodeBracesRangeFlags.XamlBlockBraces : CodeBracesRangeFlags.XmlBlockBraces;
     references             = new List <ReferenceInfo>();
     bracesInfo             = new List <CodeBracesRange>();
     xmlNamespaceReferences = new List <XmlNamespaceReference>();
     subStringDict          = new Dictionary <SubString, string>(EqualityComparer <SubString> .Default);
     lineSeparators         = new List <int>();
     xmlNamespaces          = new XmlNamespaces();
     xmlNamespaces.Initialize(null);
 }
        static StructureVisualizerDataBlockKind GetBlockKind(CodeBracesRangeFlags flags)
        {
            switch (flags.ToBlockKind())
            {
            case CodeBracesRangeFlags.BlockKind_None:               return(StructureVisualizerDataBlockKind.None);

            case CodeBracesRangeFlags.BlockKind_Namespace:  return(StructureVisualizerDataBlockKind.Namespace);

            case CodeBracesRangeFlags.BlockKind_Type:               return(StructureVisualizerDataBlockKind.Type);

            case CodeBracesRangeFlags.BlockKind_Method:             return(StructureVisualizerDataBlockKind.Method);

            case CodeBracesRangeFlags.BlockKind_Conditional: return(StructureVisualizerDataBlockKind.Conditional);

            case CodeBracesRangeFlags.BlockKind_Loop:               return(StructureVisualizerDataBlockKind.Loop);

            case CodeBracesRangeFlags.BlockKind_Property:   return(StructureVisualizerDataBlockKind.Property);

            case CodeBracesRangeFlags.BlockKind_Event:              return(StructureVisualizerDataBlockKind.Event);

            case CodeBracesRangeFlags.BlockKind_Try:                return(StructureVisualizerDataBlockKind.Try);

            case CodeBracesRangeFlags.BlockKind_Catch:              return(StructureVisualizerDataBlockKind.Catch);

            case CodeBracesRangeFlags.BlockKind_Filter:             return(StructureVisualizerDataBlockKind.Filter);

            case CodeBracesRangeFlags.BlockKind_Finally:    return(StructureVisualizerDataBlockKind.Finally);

            case CodeBracesRangeFlags.BlockKind_Fault:              return(StructureVisualizerDataBlockKind.Fault);

            case CodeBracesRangeFlags.BlockKind_Other:              return(StructureVisualizerDataBlockKind.Other);

            default:
                Debug.Fail($"Unknown block kind: {flags.ToBlockKind()}");
                return(StructureVisualizerDataBlockKind.None);
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Adds a <see cref="CodeBracesRange"/>
 /// </summary>
 /// <param name="output">Output</param>
 /// <param name="start">Start span</param>
 /// <param name="end">End span</param>
 /// <param name="flags">Flags</param>
 public static void AddBracePair(this IDecompilerOutput output, TextSpan start, TextSpan end, CodeBracesRangeFlags flags) =>
 output.AddCustomData(PredefinedCustomDataIds.CodeBracesRange, new CodeBracesRange(start, end, flags));
Ejemplo n.º 7
0
		protected virtual void WriteCommaSeparatedListInBrackets(IEnumerable<Expression> list, CodeBracesRangeFlags flags)
		{
			var braceHelper = BraceHelper.LeftBracket(this, flags);
			if (list.Any()) {
				Space(policy.SpacesWithinBrackets);
				WriteCommaSeparatedList(list);
				Space(policy.SpacesWithinBrackets);
			}
			braceHelper.RightBracket();
		}
Ejemplo n.º 8
0
 /// <summary>
 /// Returns true if it's a block
 /// </summary>
 /// <param name="flags">Flags</param>
 /// <returns></returns>
 public static bool IsBlock(this CodeBracesRangeFlags flags) => (flags & BlockKindMask) != CodeBracesRangeFlags.BlockKind_None;
Ejemplo n.º 9
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="left">Span of left brace</param>
 /// <param name="right">Span of right brace</param>
 /// <param name="flags">Flags</param>
 public CodeBracesRange(TextSpan left, TextSpan right, CodeBracesRangeFlags flags)
 {
     Left  = left;
     Right = right;
     Flags = flags;
 }
Ejemplo n.º 10
0
		protected virtual void WriteCommaSeparatedListInParenthesis(IEnumerable<AstNode> list, bool spaceWithin, CodeBracesRangeFlags flags)
		{
			var braceHelper = BraceHelper.LeftParen(this, flags);
			if (list.Any()) {
				Space(spaceWithin);
				WriteCommaSeparatedList(list);
				Space(spaceWithin);
			}
			braceHelper.RightParen();
		}
Ejemplo n.º 11
0
		public void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags) =>
			output.AddBracePair(TextSpan.FromBounds(leftStart, leftEnd), TextSpan.FromBounds(rightStart, rightEnd), flags);
Ejemplo n.º 12
0
		protected virtual void PrintInitializerElements(AstNodeCollection<Expression> elements, CodeBracesRangeFlags flags)
		{
			BraceStyle style;
			if (policy.ArrayInitializerWrapping == Wrapping.WrapAlways) {
				style = BraceStyle.NextLine;
			} else {
				style = BraceStyle.EndOfLine;
			}
			var braceHelper = OpenBrace(style, flags);
			bool isFirst = true;
			AstNode last = null;
			int count = 0;
			foreach (AstNode node in elements) {
				if (count-- <= 0) {
					cancellationToken.ThrowIfCancellationRequested();
					count = CANCEL_CHECK_LOOP_COUNT;
				}
				if (isFirst) {
					isFirst = false;
				} else {
					Comma(node, noSpaceAfterComma: true);
					NewLine();
				}
				last = node;
				node.AcceptVisitor(this);
			}
			if (last != null)
				OptionalComma(last.NextSibling);
			NewLine();
			CloseBrace(style, braceHelper, false);
		}
Ejemplo n.º 13
0
		public virtual void WriteTypeParameters(IEnumerable<TypeParameterDeclaration> typeParameters, CodeBracesRangeFlags flags)
		{
			if (typeParameters.Any()) {
				var braceHelper = BraceHelper.LeftChevron(this, flags);
				WriteCommaSeparatedList(typeParameters);
				braceHelper.RightChevron();
			}
		}
Ejemplo n.º 14
0
		protected virtual void WriteTypeArguments(IEnumerable<AstType> typeArguments, CodeBracesRangeFlags flags)
		{
			if (typeArguments.Any()) {
				var braceHelper = BraceHelper.LeftChevron(this, flags);
				WriteCommaSeparatedList(typeArguments);
				braceHelper.RightChevron();
			}
		}
Ejemplo n.º 15
0
			BraceHelper(CSharpOutputVisitor owner, CodeBracesRangeFlags flags) {
				this.owner = owner;
				this.leftStart = owner.writer.GetLocation() ?? 0;
				this.leftEnd = 0;
				this.flags = flags;
			}
Ejemplo n.º 16
0
		BraceHelper OpenBrace(BraceStyle style, CodeBracesRangeFlags flags, out int? start, out int? end)
		{
			BraceHelper braceHelper;
			switch (style) {
				case BraceStyle.DoNotChange:
				case BraceStyle.EndOfLine:
				case BraceStyle.BannerStyle:
					if (!isAtStartOfLine)
						writer.Space();
					start = writer.GetLocation();
					braceHelper = BraceHelper.LeftBrace(this, flags);
					end = writer.GetLocation();
					break;
				case BraceStyle.EndOfLineWithoutSpace:
					start = writer.GetLocation();
					braceHelper = BraceHelper.LeftBrace(this, flags);
					end = writer.GetLocation();
					break;
				case BraceStyle.NextLine:
					if (!isAtStartOfLine)
						NewLine();
					start = writer.GetLocation();
					braceHelper = BraceHelper.LeftBrace(this, flags);
					end = writer.GetLocation();
					break;
				case BraceStyle.NextLineShifted:
					NewLine();
					writer.Indent();
					start = writer.GetLocation();
					braceHelper = BraceHelper.LeftBrace(this, flags);
					end = writer.GetLocation();
					NewLine();
					return braceHelper;
				case BraceStyle.NextLineShifted2:
					NewLine();
					writer.Indent();
					start = writer.GetLocation();
					braceHelper = BraceHelper.LeftBrace(this, flags);
					end = writer.GetLocation();
					break;
				default:
					throw new ArgumentOutOfRangeException ();
			}
			writer.Indent();
			NewLine();
			return braceHelper;
		}
Ejemplo n.º 17
0
		BraceHelper OpenBrace(BraceStyle style, CodeBracesRangeFlags flags)
		{
			int? start, end;
			return OpenBrace(style, flags, out start, out end);
		}
Ejemplo n.º 18
0
 public void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags) =>
 output.AddBracePair(TextSpan.FromBounds(leftStart, leftEnd), TextSpan.FromBounds(rightStart, rightEnd), flags);
Ejemplo n.º 19
0
 public void AddBlock(int start, int end, CodeBracesRangeFlags flags) =>
 output.AddBracePair(new TextSpan(start, 0), new TextSpan(end, 0), flags);
Ejemplo n.º 20
0
			public static BraceHelper LeftBrace(CSharpOutputVisitor owner, CodeBracesRangeFlags flags) {
				var bh = new BraceHelper(owner, flags);
				owner.WriteToken(Roles.LBrace, BoxedTextColor.Punctuation);
				bh.leftEnd = owner.writer.GetLocation() ?? 0;
				return bh;
			}
Ejemplo n.º 21
0
		public void AddBlock(int start, int end, CodeBracesRangeFlags flags) =>
			output.AddBracePair(new TextSpan(start, 0), new TextSpan(end, 0), flags);
Ejemplo n.º 22
0
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="left">Span of left brace</param>
		/// <param name="right">Span of right brace</param>
		/// <param name="flags">Flags</param>
		public CodeBracesRange(TextSpan left, TextSpan right, CodeBracesRangeFlags flags) {
			Left = left;
			Right = right;
			Flags = flags;
		}
Ejemplo n.º 23
0
 void SaveBraceInfo(Span left, Span right, CodeBracesRangeFlags flags) =>
 bracesInfo.Add(new CodeBracesRange(new TextSpan(left.Start, left.Length), new TextSpan(right.Start, right.Length), flags));
Ejemplo n.º 24
0
		/// <summary>
		/// Adds a <see cref="CodeBracesRange"/>
		/// </summary>
		/// <param name="output">Output</param>
		/// <param name="start">Start span</param>
		/// <param name="end">End span</param>
		/// <param name="flags">Flags</param>
		public static void AddBracePair(this IDecompilerOutput output, TextSpan start, TextSpan end, CodeBracesRangeFlags flags) =>
			output.AddCustomData(PredefinedCustomDataIds.CodeBracesRange, new CodeBracesRange(start, end, flags));
Ejemplo n.º 25
0
 /// <summary>
 /// Extracts the block kind
 /// </summary>
 /// <param name="flags">Flags</param>
 /// <returns></returns>
 public static CodeBracesRangeFlags ToBlockKind(this CodeBracesRangeFlags flags) => flags & BlockKindMask;
Ejemplo n.º 26
0
 public virtual void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags)
 {
 }
Ejemplo n.º 27
0
		public virtual void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags)
		{
		}
Ejemplo n.º 28
0
		protected virtual void WriteCommaSeparatedListInBrackets(IEnumerable<ParameterDeclaration> list, bool spaceWithin, CodeBracesRangeFlags flags)
		{
			var braceHelper = BraceHelper.LeftBracket(this, flags);
			if (list.Any()) {
				Space(spaceWithin);
				WriteCommaSeparatedList(list);
				Space(spaceWithin);
			}
			braceHelper.RightBracket();
		}
Ejemplo n.º 29
0
 public override void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags)
 {
     decoratedWriter.AddBracePair(leftStart, leftEnd, rightStart, rightEnd, flags);
 }
Ejemplo n.º 30
0
		public override void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags)
		{
			decoratedWriter.AddBracePair(leftStart, leftEnd, rightStart, rightEnd, flags);
		}