本文整理汇总了C#中DiagnosticBag.AddRange方法的典型用法代码示例。如果您正苦于以下问题:C# DiagnosticBag.AddRange方法的具体用法?C# DiagnosticBag.AddRange怎么用?C# DiagnosticBag.AddRange使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DiagnosticBag
的用法示例。
在下文中一共展示了DiagnosticBag.AddRange方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BindFieldInitializers
internal static void BindFieldInitializers(
SourceMemberContainerTypeSymbol typeSymbol,
MethodSymbol scriptCtor,
ImmutableArray<FieldInitializers> fieldInitializers,
bool generateDebugInfo,
DiagnosticBag diagnostics,
ref ProcessedFieldInitializers processedInitializers) //by ref so that we can store the results of lowering
{
DiagnosticBag diagsForInstanceInitializers = DiagnosticBag.GetInstance();
try
{
ConsList<Imports> firstDebugImports;
processedInitializers.BoundInitializers = BindFieldInitializers(typeSymbol, scriptCtor, fieldInitializers,
diagsForInstanceInitializers, generateDebugInfo, out firstDebugImports);
processedInitializers.HasErrors = diagsForInstanceInitializers.HasAnyErrors();
processedInitializers.FirstDebugImports = firstDebugImports;
}
finally
{
diagnostics.AddRange(diagsForInstanceInitializers);
diagsForInstanceInitializers.Free();
}
}
示例2: ParseExpression
/// <summary>
/// Parse expression. Returns null if there are any errors.
/// </summary>
internal static ExpressionSyntax ParseExpression(
this string expr,
DiagnosticBag diagnostics,
bool allowFormatSpecifiers,
out ReadOnlyCollection<string> formatSpecifiers)
{
// Remove trailing semi-colon if any. This is to support copy/paste
// of (simple cases of) RHS of assignment in Watch window, not to
// allow arbitrary syntax after the semi-colon, not even comments.
if (RemoveSemicolonIfAny(ref expr))
{
// Format specifiers are not expected before a semi-colon.
allowFormatSpecifiers = false;
}
var syntax = ParseDebuggerExpression(expr, consumeFullText: !allowFormatSpecifiers);
diagnostics.AddRange(syntax.GetDiagnostics());
formatSpecifiers = null;
if (allowFormatSpecifiers)
{
var builder = ArrayBuilder<string>.GetInstance();
if (ParseFormatSpecifiers(builder, expr, syntax.FullWidth, diagnostics) &&
(builder.Count > 0))
{
formatSpecifiers = new ReadOnlyCollection<string>(builder.ToArray());
}
builder.Free();
}
return diagnostics.HasAnyErrors() ? null : syntax;
}
示例3: ParseAssignment
internal static ExpressionSyntax ParseAssignment(
this string target,
string expr,
DiagnosticBag diagnostics)
{
var text = SourceText.From(expr);
var expression = SyntaxHelpers.ParseDebuggerExpressionInternal(text, consumeFullText: true);
// We're creating a SyntaxTree for just the RHS so that the Diagnostic spans for parse errors
// will be correct (with respect to the original input text). If we ever expose a SemanticModel
// for debugger expressions, we should use this SyntaxTree.
var syntaxTree = expression.CreateSyntaxTree(text);
diagnostics.AddRange(syntaxTree.GetDiagnostics());
if (diagnostics.HasAnyErrors())
{
return null;
}
// Any Diagnostic spans produced in binding will be offset by the length of the "target" expression text.
// If we want to support live squiggles in debugger windows, SemanticModel, etc, we'll want to address this.
var targetSyntax = SyntaxHelpers.ParseDebuggerExpressionInternal(SourceText.From(target), consumeFullText: true);
Debug.Assert(!targetSyntax.GetDiagnostics().Any(), "The target of an assignment should never contain Diagnostics if we're being allowed to assign to it in the debugger.");
var assignment = InternalSyntax.SyntaxFactory.AssignmentExpression(
SyntaxKind.SimpleAssignmentExpression,
targetSyntax,
InternalSyntax.SyntaxFactory.Token(SyntaxKind.EqualsToken),
expression);
return assignment.MakeDebuggerExpression(SourceText.From(assignment.ToString()));
}
示例4: GrabDiagnostics
internal void GrabDiagnostics(DiagnosticBag addTo)
{
// force lazy init
ComputeParameters();
ComputeReturnType();
var diags = ImmutableInterlocked.InterlockedExchange(ref _diagnostics, default(ImmutableArray<Diagnostic>));
if (!diags.IsDefault)
{
addTo.AddRange(diags);
}
}
示例5: Build
/// <summary>
/// Builds a delegate that will execute just this scripts code.
/// </summary>
public Func<object[], object> Build(
Script script,
DiagnosticBag diagnostics,
CancellationToken cancellationToken)
{
var compilation = script.GetCompilation();
using (var peStream = new MemoryStream())
{
var emitResult = compilation.Emit(
peStream: peStream,
pdbStream: null,
xmlDocumentationStream: null,
win32Resources: null,
manifestResources: null,
options: EmitOptions.Default,
cancellationToken: cancellationToken);
diagnostics.AddRange(emitResult.Diagnostics);
if (!emitResult.Success)
{
return null;
}
// let the loader know where to find assemblies:
foreach (var referencedAssembly in compilation.GetBoundReferenceManager().GetReferencedAssemblies())
{
var path = (referencedAssembly.Key as PortableExecutableReference)?.FilePath;
if (path != null)
{
// TODO: Should the #r resolver return contract metadata and runtime assembly path -
// Contract assembly used in the compiler, RT assembly path here.
_assemblyLoader.RegisterDependency(referencedAssembly.Value.Identity, path);
}
}
peStream.Position = 0;
var assembly = _assemblyLoader.Load(peStream, pdbStream: null);
// TODO: GetEntryPoint currently doesn't work for scripts/submissions.
// See https://github.com/dotnet/roslyn/issues/3719.
// var entryPoint = compilation.GetEntryPoint(cancellationToken);
var entryPointMethod = GetEntryPointRuntimeMethod(emitResult.EntryPointOpt, assembly, cancellationToken);
return entryPointMethod.CreateDelegate<Func<object[], object>>();
}
}
示例6: BindFieldInitializers
internal static void BindFieldInitializers(
CSharpCompilation compilation,
SynthesizedInteractiveInitializerMethod scriptInitializerOpt,
ImmutableArray<ImmutableArray<FieldOrPropertyInitializer>> fieldInitializers,
DiagnosticBag diagnostics,
ref ProcessedFieldInitializers processedInitializers)
{
var diagsForInstanceInitializers = DiagnosticBag.GetInstance();
ImportChain firstImportChain;
processedInitializers.BoundInitializers = BindFieldInitializers(compilation, scriptInitializerOpt, fieldInitializers, diagsForInstanceInitializers, out firstImportChain);
processedInitializers.HasErrors = diagsForInstanceInitializers.HasAnyErrors();
processedInitializers.FirstImportChain = firstImportChain;
diagnostics.AddRange(diagsForInstanceInitializers);
diagsForInstanceInitializers.Free();
}
示例7: BindTargetExpression
protected BoundExpression BindTargetExpression(DiagnosticBag diagnostics)
{
if (lazyExpressionAndDiagnostics == null)
{
// Filter out method group in conversion.
DiagnosticBag expressionDiagnostics = DiagnosticBag.GetInstance();
BoundExpression boundExpression = this.BindValue(TargetExpressionSyntax, expressionDiagnostics, Binder.BindValueKind.RValueOrMethodGroup);
Interlocked.CompareExchange(ref lazyExpressionAndDiagnostics, new ExpressionAndDiagnostics(boundExpression, expressionDiagnostics.ToReadOnlyAndFree()), null);
}
Debug.Assert(lazyExpressionAndDiagnostics != null);
if (diagnostics != null)
{
diagnostics.AddRange(lazyExpressionAndDiagnostics.Diagnostics);
}
return lazyExpressionAndDiagnostics.Expression;
}
示例8: BindSwitchExpressionAndSections
internal override BoundStatement BindSwitchExpressionAndSections(SwitchStatementSyntax node, Binder originalBinder, DiagnosticBag diagnostics)
{
// If it is a valid C# 6 switch statement, we use the old binder to bind it.
if (!UseV7SwitchBinder) return base.BindSwitchExpressionAndSections(node, originalBinder, diagnostics);
Debug.Assert(SwitchSyntax.Equals(node));
// Bind switch expression and set the switch governing type.
var boundSwitchExpression = SwitchGoverningExpression;
diagnostics.AddRange(SwitchGoverningDiagnostics);
BoundPatternSwitchLabel defaultLabel;
ImmutableArray<BoundPatternSwitchSection> switchSections = BindPatternSwitchSections(boundSwitchExpression, node.Sections, originalBinder, out defaultLabel, diagnostics);
var locals = GetDeclaredLocalsForScope(node);
var functions = GetDeclaredLocalFunctionsForScope(node);
return new BoundPatternSwitchStatement(
node, boundSwitchExpression,
locals, functions, switchSections, defaultLabel, this.BreakLabel, this);
}
示例9: BindFieldInitializers
internal static void BindFieldInitializers(
CSharpCompilation compilation,
SynthesizedInteractiveInitializerMethod scriptInitializerOpt,
ImmutableArray<ImmutableArray<FieldOrPropertyInitializer>> fieldInitializers,
DiagnosticBag diagnostics,
bool setReturnType, // Remove once static fields are errors in submissions.
ref ProcessedFieldInitializers processedInitializers)
{
if (setReturnType && ((object)scriptInitializerOpt != null))
{
SetScriptInitializerReturnType(compilation, scriptInitializerOpt, fieldInitializers, diagnostics);
}
var diagsForInstanceInitializers = DiagnosticBag.GetInstance();
ImportChain firstImportChain;
processedInitializers.BoundInitializers = BindFieldInitializers(compilation, scriptInitializerOpt, fieldInitializers, diagsForInstanceInitializers, out firstImportChain);
processedInitializers.HasErrors = diagsForInstanceInitializers.HasAnyErrors();
processedInitializers.FirstImportChain = firstImportChain;
diagnostics.AddRange(diagsForInstanceInitializers);
diagsForInstanceInitializers.Free();
}
示例10: BindFieldInitializers
internal static void BindFieldInitializers(
SourceMemberContainerTypeSymbol typeSymbol,
MethodSymbol scriptCtor,
ImmutableArray<ImmutableArray<FieldOrPropertyInitializer>> fieldInitializers,
DiagnosticBag diagnostics,
ref ProcessedFieldInitializers processedInitializers) //by ref so that we can store the results of lowering
{
DiagnosticBag diagsForInstanceInitializers = DiagnosticBag.GetInstance();
try
{
ImportChain firstImportChain;
processedInitializers.BoundInitializers = BindFieldInitializers(typeSymbol, scriptCtor, fieldInitializers,
diagsForInstanceInitializers, out firstImportChain);
processedInitializers.HasErrors = diagsForInstanceInitializers.HasAnyErrors();
processedInitializers.FirstImportChain = firstImportChain;
}
finally
{
diagnostics.AddRange(diagsForInstanceInitializers);
diagsForInstanceInitializers.Free();
}
}
示例11: ParseStatement
/// <summary>
/// Parse statement. Returns null if there are any errors.
/// </summary>
internal static StatementSyntax ParseStatement(
this string expr,
DiagnosticBag diagnostics)
{
var syntax = ParseDebuggerStatement(expr);
diagnostics.AddRange(syntax.GetDiagnostics());
return diagnostics.HasAnyErrors() ? null : syntax;
}
示例12: MakeDeconstructInvocationExpression
/// <summary>
/// Find the Deconstruct method for the expression on the right, that will fit the number of assignable variables on the left.
/// Returns an invocation expression if the Deconstruct method is found.
/// If so, it outputs placeholders that were coerced to the output types of the resolved Deconstruct method.
/// The overload resolution is similar to writing `receiver.Deconstruct(out var x1, out var x2, ...)`.
/// </summary>
private BoundExpression MakeDeconstructInvocationExpression(
int numCheckedVariables, BoundExpression receiver, CSharpSyntaxNode syntax,
DiagnosticBag diagnostics, out ImmutableArray<BoundDeconstructValuePlaceholder> outPlaceholders)
{
var receiverSyntax = receiver.Syntax;
if (receiver.Type.IsDynamic())
{
Error(diagnostics, ErrorCode.ERR_CannotDeconstructDynamic, receiverSyntax);
outPlaceholders = default(ImmutableArray<BoundDeconstructValuePlaceholder>);
return BadExpression(receiverSyntax, receiver);
}
var analyzedArguments = AnalyzedArguments.GetInstance();
var outVars = ArrayBuilder<OutDeconstructVarPendingInference>.GetInstance(numCheckedVariables);
DiagnosticBag bag = null;
try
{
for (int i = 0; i < numCheckedVariables; i++)
{
var variable = new OutDeconstructVarPendingInference(syntax);
analyzedArguments.Arguments.Add(variable);
analyzedArguments.RefKinds.Add(RefKind.Out);
outVars.Add(variable);
}
const string methodName = "Deconstruct";
var memberAccess = BindInstanceMemberAccess(
receiverSyntax, receiverSyntax, receiver, methodName, rightArity: 0,
typeArgumentsSyntax: default(SeparatedSyntaxList<TypeSyntax>), typeArguments: default(ImmutableArray<TypeSymbol>),
invoked: true, diagnostics: diagnostics);
memberAccess = CheckValue(memberAccess, BindValueKind.RValueOrMethodGroup, diagnostics);
memberAccess.WasCompilerGenerated = true;
if (memberAccess.Kind != BoundKind.MethodGroup)
{
return MissingDeconstruct(receiver, syntax, numCheckedVariables, diagnostics, out outPlaceholders, receiver);
}
// After the overload resolution completes, the last step is to coerce the arguments with inferred types.
// That step returns placeholder (of correct type) instead of the outVar nodes that were passed in as arguments.
// So the generated invocation expression will contain placeholders instead of those outVar nodes.
// Those placeholders are also recorded in the outVar for easy access below, by the `SetInferredType` call on the outVar nodes.
bag = DiagnosticBag.GetInstance();
BoundExpression result = BindMethodGroupInvocation(
receiverSyntax, receiverSyntax, methodName, (BoundMethodGroup)memberAccess, analyzedArguments, bag, queryClause: null,
allowUnexpandedForm: true);
result.WasCompilerGenerated = true;
diagnostics.AddRange(bag);
if (bag.HasAnyErrors())
{
return MissingDeconstruct(receiver, syntax, numCheckedVariables, diagnostics, out outPlaceholders, result);
}
// Verify all the parameters (except "this" for extension methods) are out parameters
if (result.Kind != BoundKind.Call)
{
return MissingDeconstruct(receiver, syntax, numCheckedVariables, diagnostics, out outPlaceholders, result);
}
var deconstructMethod = ((BoundCall)result).Method;
var parameters = deconstructMethod.Parameters;
for (int i = (deconstructMethod.IsExtensionMethod ? 1 : 0); i < parameters.Length; i++)
{
if (parameters[i].RefKind != RefKind.Out)
{
return MissingDeconstruct(receiver, syntax, numCheckedVariables, diagnostics, out outPlaceholders, result);
}
}
if (outVars.Any(v => (object)v.Placeholder == null))
{
return MissingDeconstruct(receiver, syntax, numCheckedVariables, diagnostics, out outPlaceholders, result);
}
outPlaceholders = outVars.SelectAsArray(v => v.Placeholder);
return result;
}
finally
{
analyzedArguments.Free();
outVars.Free();
if (bag != null)
{
bag.Free();
}
}
//.........这里部分代码省略.........
示例13: Build
/// <summary>
/// Builds a delegate that will execute just this scripts code.
/// </summary>
public Func<object[], object> Build(
Script script,
DiagnosticBag diagnostics,
CancellationToken cancellationToken)
{
var compilation = script.GetCompilation();
var options = script.Options;
DiagnosticBag emitDiagnostics = DiagnosticBag.GetInstance();
byte[] compiledAssemblyImage;
MethodInfo entryPoint;
bool success = compilation.Emit(
GetOrCreateDynamicModule(options.IsCollectible),
assemblyLoader: GetAssemblyLoader(options.IsCollectible),
assemblySymbolMapper: symbol => MapAssemblySymbol(symbol, options.IsCollectible),
recoverOnError: true,
diagnostics: emitDiagnostics,
cancellationToken: cancellationToken,
entryPoint: out entryPoint,
compiledAssemblyImage: out compiledAssemblyImage
);
if (diagnostics != null)
{
diagnostics.AddRange(emitDiagnostics);
}
bool hadEmitErrors = emitDiagnostics.HasAnyErrors();
emitDiagnostics.Free();
// emit can fail due to compilation errors or because there is nothing to emit:
if (!success)
{
return null;
}
Debug.Assert(entryPoint != null);
if (compiledAssemblyImage != null)
{
// Ref.Emit wasn't able to emit the assembly
_uncollectibleCodeManager.AddFallBackAssembly(entryPoint.DeclaringType.Assembly);
}
#if DEBUG
if (SaveCompiledAssemblies)
{
_uncollectibleCodeManager.Save(UncollectibleModuleFileName);
_collectibleCodeManager.Save(CollectibleModuleFileName);
}
#endif
return (Func<object[], object>)Delegate.CreateDelegate(typeof(Func<object[], object>), entryPoint);
}
示例14: ComputeInterfaceImplementations
//.........这里部分代码省略.........
maybeWinRTEvent = interfaceEvent; // Definitely WinRT.
maybeRegularEvent = implementingEvent; // Maybe regular.
}
else
{
maybeWinRTEvent = implementingEvent; // Maybe WinRT.
maybeRegularEvent = interfaceEvent; // Definitely regular.
}
if (interfaceEvent.IsWindowsRuntimeEvent != implementingEvent.IsWindowsRuntimeEvent)
{
// At this point (and not before), we know that maybeWinRTEvent is definitely a WinRT event and maybeRegularEvent is definitely a regular event.
var args = new object[] { implementingEvent, interfaceEvent, maybeWinRTEvent, maybeRegularEvent };
var info = new CSDiagnosticInfo(ErrorCode.ERR_MixingWinRTEventWithRegular, args, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<Location>(this.Locations[0]));
diagnostics.Add(info, implementingEvent.Locations[0]);
}
}
// Dev10: If a whole property is missing, report the property. If the property is present, but an accessor
// is missing, report just the accessor.
var associatedPropertyOrEvent = interfaceMemberKind == SymbolKind.Method ? ((MethodSymbol)interfaceMember).AssociatedSymbol : null;
if ((object)associatedPropertyOrEvent == null ||
ReportAccessorOfInterfacePropertyOrEvent(associatedPropertyOrEvent) ||
(wasImplementingMemberFound && !implementingMember.IsAccessor()))
{
//we're here because
//(a) the interface member is not an accessor, or
//(b) the interface member is an accessor of an interesting (see ReportAccessorOfInterfacePropertyOrEvent) property or event, or
//(c) the implementing member exists and is not an accessor.
if (implementingMemberAndDiagnostics.Diagnostics.Any())
{
diagnostics.AddRange(implementingMemberAndDiagnostics.Diagnostics);
}
else if (!wasImplementingMemberFound)
{
// NOTE: An alternative approach would be to keep track of this while searching for the implementing member.
// In some cases, we might even be able to stop looking and just accept that a base type has things covered
// (though we'd have to be careful about losing diagnostics and we might produce fewer bridge methods).
// However, this approach has the advantage that there is no cost unless we encounter a base type that
// claims to implement an interface, but we can't figure out how (i.e. free in nearly all cases).
hasImportedBaseTypeDeclaringInterface = hasImportedBaseTypeDeclaringInterface ?? HasImportedBaseTypeDeclaringInterface(@interface);
// If a base type from metadata declares that it implements the interface, we'll just trust it.
// (See fFoundImport in SymbolPreparer::CheckInterfaceMethodImplementation.)
if (!hasImportedBaseTypeDeclaringInterface.GetValueOrDefault())
{
// CONSIDER: Dev10 does not emit this diagnostic for interface properties if the
// derived type attempts to implement an accessor directly as a method.
// Suppress for bogus properties and events and for indexed properties.
if (!interfaceMember.MustCallMethodsDirectly() && !interfaceMember.IsIndexedProperty())
{
DiagnosticInfo useSiteDiagnostic = interfaceMember.GetUseSiteDiagnostic();
if (useSiteDiagnostic != null && useSiteDiagnostic.DefaultSeverity == DiagnosticSeverity.Error)
{
diagnostics.Add(useSiteDiagnostic, GetImplementsLocation(@interface));
}
else
{
diagnostics.Add(ErrorCode.ERR_UnimplementedInterfaceMember, GetImplementsLocation(@interface) ?? this.Locations[0], this, interfaceMember);
}
}
}
示例15: GetEntryPoint
internal static MethodSymbol GetEntryPoint(CSharpCompilation compilation, PEModuleBuilder moduleBeingBuilt, bool hasDeclarationErrors, DiagnosticBag diagnostics, CancellationToken cancellationToken)
{
CSharpCompilationOptions options = compilation.Options;
if (!options.OutputKind.IsApplication())
{
Debug.Assert(compilation.GetEntryPointAndDiagnostics(cancellationToken) == null);
return compilation.IsSubmission
? DefineScriptEntryPoint(compilation, moduleBeingBuilt, compilation.GetSubmissionReturnType(), hasDeclarationErrors, diagnostics)
: null;
}
Debug.Assert(!compilation.IsSubmission);
Debug.Assert(options.OutputKind.IsApplication());
CSharpCompilation.EntryPoint entryPoint = compilation.GetEntryPointAndDiagnostics(cancellationToken);
Debug.Assert(entryPoint != null);
Debug.Assert(!entryPoint.Diagnostics.IsDefault);
diagnostics.AddRange(entryPoint.Diagnostics);
if ((object)compilation.ScriptClass != null)
{
Debug.Assert((object)entryPoint.MethodSymbol == null);
return DefineScriptEntryPoint(compilation, moduleBeingBuilt, compilation.GetSpecialType(SpecialType.System_Void), hasDeclarationErrors, diagnostics);
}
Debug.Assert((object)entryPoint.MethodSymbol != null || entryPoint.Diagnostics.HasAnyErrors() || !compilation.Options.Errors.IsDefaultOrEmpty);
return entryPoint.MethodSymbol;
}