private string GetMemberSource(string sourceCode, IOffsetSpan memberOffset, uint memberId, IDecompilationResults decompilationResult)
        {
            StringBuilder memberSourceBuilder = new StringBuilder();

            memberSourceBuilder.Append(GetMemberSourceFromMap(sourceCode, decompilationResult.MemberTokenToAttributesMap, memberId))
            .Append(GetMemberSourceFromMap(sourceCode, decompilationResult.MemberTokenToDocumentationMap, memberId))
            .Append(sourceCode.Substring(memberOffset.StartOffset, memberOffset.EndOffset - memberOffset.StartOffset + 1));

            return(memberSourceBuilder.ToString());
        }
        public Position GetMemberPosition()
        {
            if (memberMetadata == null)
            {
                return(Position.Empty);
            }
            int lineNumber = memberMetadata.MemberType == MemberType.Type ?
                             decompilationResult.CodeViewerResults.GetLineFromTypeToken(memberMetadata.TokenId) :
                             decompilationResult.CodeViewerResults.GetLineFromMemberToken(memberMetadata.Type.TokenId, memberMetadata.TokenId);

            if (decompilationResult.MemberDeclarationToCodePostionMap.ContainsKey(memberMetadata.TokenId))
            {
                IOffsetSpan offsetSpan = decompilationResult.MemberDeclarationToCodePostionMap[memberMetadata.TokenId];

                int offset = this.TransformOriginalLineToDiffLineOffset(lineNumber);

                return(new Position(offsetSpan.StartOffset + offset, offsetSpan.EndOffset - offsetSpan.StartOffset + 1, lineNumber + offset));
            }
            return(Position.Empty);
        }
Beispiel #3
0
        private string CleanExceptionSource(IDecompilationResults decompilationResult, string sourceCode)
        {
            var spansForRemoving = new List <IOffsetSpan>();

            foreach (uint memberId in decompilationResult.MembersWithExceptions)
            {
                IOffsetSpan memberOffset;

                if (decompilationResult.MemberTokenToDecompiledCodeMap.TryGetValue(memberId, out memberOffset))
                {
                    spansForRemoving.Add(memberOffset);
                }
            }
            spansForRemoving.Sort((i1, i2) => i2.StartOffset.CompareTo(i1.StartOffset));

            for (int i = 0; i < spansForRemoving.Count; i++)
            {
                IOffsetSpan memberOffset = spansForRemoving[i];

                sourceCode = sourceCode.Remove(memberOffset.StartOffset, memberOffset.EndOffset - memberOffset.StartOffset + 1);
            }
            return(sourceCode);
        }
Beispiel #4
0
        protected override DifferenceDecoration GetDifferenceDecoration()
        {
            if (this.CanUseParentDiffDecoration)
            {
                return(this.ParentNode.DifferenceDecoration);
            }

            if (this.apiDiffInfo != null)
            {
                return(this.apiDiffInfo.APIDiffItem.GetDifferenceDecoration(this.BreakingChangesOnly));
            }


            if (this.membersMap.OldType == null)
            {
                return(DifferenceDecoration.Added);
            }
            else if (this.membersMap.NewType == null)
            {
                return(DifferenceDecoration.Deleted);
            }
            else if (this.ParentNode.DifferenceDecoration == DifferenceDecoration.Modified)
            {
                IOffsetSpan offsetSpanL = null;
                IOffsetSpan offsetSpanR = null;

                bool containsValues = OldDecompileResult.MemberTokenToDecompiledCodeMap.TryGetValue(membersMap.OldType.TokenId, out offsetSpanL) &&
                                      NewDecompileResult.MemberTokenToDecompiledCodeMap.TryGetValue(membersMap.NewType.TokenId, out offsetSpanR);

                if (containsValues)
                {
                    return(this.GetMemberSource(this.OldDecompileResult, membersMap.OldType) == this.GetMemberSource(this.NewDecompileResult, membersMap.NewType) ?
                           DifferenceDecoration.NoDifferences : DifferenceDecoration.Modified);
                }
            }
            return(DifferenceDecoration.NoDifferences);
        }