public async Task FindAsync( TextDocumentState state, HashSet <Checksum> searchingChecksumsLeft, Dictionary <Checksum, object> result, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); // verify input Contract.ThrowIfFalse(state.TryGetStateChecksums(out var stateChecksum)); Contract.ThrowIfFalse(this == stateChecksum); if (searchingChecksumsLeft.Remove(Checksum)) { result[Checksum] = this; } if (searchingChecksumsLeft.Remove(Info)) { result[Info] = state.Attributes; } if (searchingChecksumsLeft.Remove(Text)) { result[Text] = await SerializableSourceText.FromTextDocumentStateAsync(state, cancellationToken).ConfigureAwait(false); } }
public void SerializeSourceText( SerializableSourceText text, ObjectWriter writer, SolutionReplicationContext context, CancellationToken cancellationToken ) { cancellationToken.ThrowIfCancellationRequested(); if (text.Storage is not null) { context.AddResource(text.Storage); writer.WriteInt32((int)text.Storage.ChecksumAlgorithm); writer.WriteEncoding(text.Storage.Encoding); writer.WriteInt32((int)SerializationKinds.MemoryMapFile); writer.WriteString(text.Storage.Name); writer.WriteInt64(text.Storage.Offset); writer.WriteInt64(text.Storage.Size); } else { RoslynDebug.AssertNotNull(text.Text); writer.WriteInt32((int)text.Text.ChecksumAlgorithm); writer.WriteEncoding(text.Text.Encoding); writer.WriteInt32((int)SerializationKinds.Bits); text.Text.WriteTo(writer, cancellationToken); } }
public async Task FindAsync( SolutionState state, HashSet <Checksum> searchingChecksumsLeft, Dictionary <Checksum, object> result, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); // verify input Contract.ThrowIfFalse(state.TryGetStateChecksums(out var stateChecksum)); Contract.ThrowIfFalse(this == stateChecksum); if (searchingChecksumsLeft.Remove(Checksum)) { result[Checksum] = this; } if (searchingChecksumsLeft.Remove(Attributes)) { result[Attributes] = state.SolutionAttributes; } if (searchingChecksumsLeft.Remove(Options)) { result[Options] = state.Options; } if (searchingChecksumsLeft.Remove(FrozenSourceGeneratedDocumentIdentity)) { Contract.ThrowIfNull(state.FrozenSourceGeneratedDocumentState, "We should not have had a FrozenSourceGeneratedDocumentIdentity checksum if we didn't have a text in the first place."); result[FrozenSourceGeneratedDocumentIdentity] = state.FrozenSourceGeneratedDocumentState.Identity; } if (searchingChecksumsLeft.Remove(FrozenSourceGeneratedDocumentText)) { Contract.ThrowIfNull(state.FrozenSourceGeneratedDocumentState, "We should not have had a FrozenSourceGeneratedDocumentState checksum if we didn't have a text in the first place."); result[FrozenSourceGeneratedDocumentText] = await SerializableSourceText.FromTextDocumentStateAsync(state.FrozenSourceGeneratedDocumentState, cancellationToken).ConfigureAwait(false); } if (searchingChecksumsLeft.Remove(Projects.Checksum)) { result[Projects.Checksum] = Projects; } if (searchingChecksumsLeft.Remove(AnalyzerReferences.Checksum)) { result[AnalyzerReferences.Checksum] = AnalyzerReferences; } foreach (var(_, projectState) in state.ProjectStates) { // solution state checksum can't be created without project state checksums created first // check unsupported projects if (!projectState.TryGetStateChecksums(out var projectStateChecksums)) { Contract.ThrowIfTrue(RemoteSupportedLanguages.IsSupported(projectState.Language)); continue; } await projectStateChecksums.FindAsync(projectState, searchingChecksumsLeft, result, cancellationToken).ConfigureAwait(false); if (searchingChecksumsLeft.Count == 0) { break; } } ChecksumCollection.Find(state.AnalyzerReferences, AnalyzerReferences, searchingChecksumsLeft, result, cancellationToken); }
public async Task FindAsync( SolutionState state, HashSet <Checksum> searchingChecksumsLeft, Dictionary <Checksum, object> result, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (searchingChecksumsLeft.Count == 0) { return; } // verify input if (searchingChecksumsLeft.Remove(Checksum)) { result[Checksum] = this; } if (searchingChecksumsLeft.Remove(Attributes)) { result[Attributes] = state.SolutionAttributes; } if (searchingChecksumsLeft.Remove(FrozenSourceGeneratedDocumentIdentity)) { Contract.ThrowIfNull(state.FrozenSourceGeneratedDocumentState, "We should not have had a FrozenSourceGeneratedDocumentIdentity checksum if we didn't have a text in the first place."); result[FrozenSourceGeneratedDocumentIdentity] = state.FrozenSourceGeneratedDocumentState.Identity; } if (searchingChecksumsLeft.Remove(FrozenSourceGeneratedDocumentText)) { Contract.ThrowIfNull(state.FrozenSourceGeneratedDocumentState, "We should not have had a FrozenSourceGeneratedDocumentState checksum if we didn't have a text in the first place."); result[FrozenSourceGeneratedDocumentText] = await SerializableSourceText.FromTextDocumentStateAsync(state.FrozenSourceGeneratedDocumentState, cancellationToken).ConfigureAwait(false); } if (searchingChecksumsLeft.Remove(Projects.Checksum)) { result[Projects.Checksum] = Projects; } if (searchingChecksumsLeft.Remove(AnalyzerReferences.Checksum)) { result[AnalyzerReferences.Checksum] = AnalyzerReferences; } foreach (var(_, projectState) in state.ProjectStates) { if (searchingChecksumsLeft.Count == 0) { break; } // It's possible not all all our projects have checksums. Specifically, we may have only been // asked to compute the checksum tree for a subset of projects that were all that a feature needed. if (projectState.TryGetStateChecksums(out var projectStateChecksums)) { await projectStateChecksums.FindAsync(projectState, searchingChecksumsLeft, result, cancellationToken).ConfigureAwait(false); } } ChecksumCollection.Find(state.AnalyzerReferences, AnalyzerReferences, searchingChecksumsLeft, result, cancellationToken); }