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); }
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); }
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); }