internal CompilationDifference( ImmutableArray <byte> metadata, ImmutableArray <byte> il, ImmutableArray <byte> pdb, CompilationTestData testData, EmitDifferenceResult result) { MetadataDelta = metadata; ILDelta = il; PdbDelta = pdb; TestData = testData; EmitResult = result; }
public Deltas( byte[] il, byte[] metadata, int[] updatedMethods, MemoryStream pdb, List <KeyValuePair <DocumentId, ImmutableArray <LineChange> > > lineEdits, EmitDifferenceResult emitResult) { this.IL = new ILDelta(il); this.Metadata = new MetadataDelta(metadata); this.Pdb = new PdbDelta(pdb, updatedMethods); this.EmitResult = emitResult; this.LineEdits = lineEdits; }
public CompilationDifference( ImmutableArray <byte> metadata, ImmutableArray <byte> il, ImmutableArray <byte> pdb, CompilationTestData testData, EmitDifferenceResult result, ImmutableArray <MethodDefinitionHandle> methodHandles) { MetadataDelta = metadata; ILDelta = il; PdbDelta = pdb; TestData = testData; EmitResult = result; UpdatedMethods = methodHandles; }
public CompilationDifference( ImmutableArray <byte> metadata, ImmutableArray <byte> il, Stream pdbStream, CompilationTestData testData, EmitDifferenceResult result, ImmutableArray <MethodDefinitionHandle> methodHandles) { this.MetadataDelta = metadata; this.ILDelta = il; this.PdbDelta = pdbStream; this.TestData = testData; this.EmitResult = result; this.UpdatedMethods = methodHandles; }
public CompilationDifference( ImmutableArray <byte> metadata, ImmutableArray <byte> il, Stream pdbStream, EmitBaseline nextGeneration, CompilationTestData testData, EmitDifferenceResult result, ImmutableArray <uint> methodTokens) { this.MetadataDelta = metadata; this.ILDelta = il; this.PdbDelta = pdbStream; this.NextGeneration = nextGeneration; this.TestData = testData; this.EmitResult = result; this.UpdatedMethods = methodTokens; }
public async Task <Deltas> EmitProjectDeltaAsync(Project project, EmitBaseline baseline, CancellationToken cancellationToken) { try { Debug.Assert(!_stoppedAtException); var changes = await GetProjectChangesAsync(project, cancellationToken).ConfigureAwait(false); var currentCompilation = await project.GetCompilationAsync(cancellationToken).ConfigureAwait(false); var allAddedSymbols = await GetAllAddedSymbols(cancellationToken).ConfigureAwait(false); var pdbStream = new MemoryStream(); var updatedMethods = new List <MethodDefinitionHandle>(); using (var metadataStream = SerializableBytes.CreateWritableStream()) using (var ilStream = SerializableBytes.CreateWritableStream()) { EmitDifferenceResult result = currentCompilation.EmitDifference( baseline, changes.SemanticEdits, s => allAddedSymbols?.Contains(s) ?? false, metadataStream, ilStream, pdbStream, updatedMethods, cancellationToken); int[] updateMethodTokens = updatedMethods.Select(h => MetadataTokens.GetToken(h)).ToArray(); return(new Deltas(ilStream.ToArray(), metadataStream.ToArray(), updateMethodTokens, pdbStream, changes.LineChanges, result)); } } catch (Exception e) when(FatalError.ReportWithoutCrash(e)) { // recover (cancel EnC) return(null); } }
public static StringHandle[] GetUpdatedTypeDefNames(this MetadataReader reader, EmitDifferenceResult emitResult) { return(emitResult.UpdatedTypes.Select(handle => reader.GetTypeDefinition(handle).Name).ToArray()); }
public async Task <Deltas> EmitProjectDeltaAsync(Project project, EmitBaseline baseline, CancellationToken cancellationToken) { try { Debug.Assert(!_stoppedAtException); var projectChanges = await GetProjectChangesAsync(project, cancellationToken).ConfigureAwait(false); var currentCompilation = await project.GetCompilationAsync(cancellationToken).ConfigureAwait(false); var allAddedSymbols = await GetAllAddedSymbolsAsync(project, cancellationToken).ConfigureAwait(false); var baseActiveStatements = await BaseActiveStatements.GetValueAsync(cancellationToken).ConfigureAwait(false); var baseActiveExceptionRegions = await BaseActiveExceptionRegions.GetValueAsync(cancellationToken).ConfigureAwait(false); var pdbStream = new MemoryStream(); var updatedMethods = new List <MethodDefinitionHandle>(); using (var metadataStream = SerializableBytes.CreateWritableStream()) using (var ilStream = SerializableBytes.CreateWritableStream()) { EmitDifferenceResult result = currentCompilation.EmitDifference( baseline, projectChanges.SemanticEdits, s => allAddedSymbols?.Contains(s) ?? false, metadataStream, ilStream, pdbStream, updatedMethods, cancellationToken); int[] updatedMethodTokens = updatedMethods.Select(h => MetadataTokens.GetToken(h)).ToArray(); // Determine all active statements whose span changed and exception region span deltas. GetActiveStatementAndExceptionRegionSpans( baseline.OriginalMetadata.GetModuleVersionId(), baseActiveStatements, baseActiveExceptionRegions, updatedMethodTokens, _nonRemappableRegions, projectChanges.NewActiveStatements, out var activeStatementsInUpdatedMethods, out var nonRemappableRegions); return(new Deltas( ilStream.ToArray(), metadataStream.ToArray(), pdbStream, updatedMethodTokens, projectChanges.LineChanges, nonRemappableRegions, activeStatementsInUpdatedMethods, result)); } } catch (Exception e) when(FatalError.ReportWithoutCrashAndPropagate(e)) { throw ExceptionUtilities.Unreachable; } }