From e5a4355829a34bc1443f6df8c39b7e5a16092560 Mon Sep 17 00:00:00 2001 From: Manish Vasani Date: Fri, 8 Jun 2018 12:20:20 -0700 Subject: [PATCH] Add convenience APIs to get CFG Fixes #27627 --- .../CodeAnalysisResources.Designer.cs | 11 ++- .../Core/Portable/CodeAnalysisResources.resx | 5 +- .../Portable/Compilation/SemanticModel.cs | 70 ++++++++++++++++--- .../DiagnosticAnalysisContext.cs | 26 +++++++ .../DiagnosticAnalysisContextHelpers.cs | 18 +++++ .../Operations/ControlFlowGraphBuilder.cs | 25 +++++-- .../Operations/OperationExtensions.cs | 28 ++++++++ .../Core/Portable/PublicAPI.Unshipped.txt | 7 ++ .../Portable/xlf/CodeAnalysisResources.cs.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.de.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.es.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.fr.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.it.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.ja.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.ko.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.pl.xlf | 7 +- .../xlf/CodeAnalysisResources.pt-BR.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.ru.xlf | 7 +- .../Portable/xlf/CodeAnalysisResources.tr.xlf | 7 +- .../xlf/CodeAnalysisResources.zh-Hans.xlf | 7 +- .../xlf/CodeAnalysisResources.zh-Hant.xlf | 7 +- 21 files changed, 251 insertions(+), 30 deletions(-) diff --git a/src/Compilers/Core/Portable/CodeAnalysisResources.Designer.cs b/src/Compilers/Core/Portable/CodeAnalysisResources.Designer.cs index a0d99d87fba..338f16bc29d 100644 --- a/src/Compilers/Core/Portable/CodeAnalysisResources.Designer.cs +++ b/src/Compilers/Core/Portable/CodeAnalysisResources.Designer.cs @@ -1059,7 +1059,7 @@ internal class CodeAnalysisResources { /// internal static string OperationHasNullSemanticModel { get { - return ResourceManager.GetString("OperationHasNoSemanticModel", resourceCulture); + return ResourceManager.GetString("OperationHasNullSemanticModel", resourceCulture); } } @@ -1549,6 +1549,15 @@ internal class CodeAnalysisResources { } } + /// + /// Looks up a localized string similar to Unsupported root operation kind '{0}'.. + /// + internal static string UnsupportedRootOperationKind { + get { + return ResourceManager.GetString("UnsupportedRootOperationKind", resourceCulture); + } + } + /// /// Looks up a localized string similar to Value too large to be represented as a 30 bit unsigned integer.. /// diff --git a/src/Compilers/Core/Portable/CodeAnalysisResources.resx b/src/Compilers/Core/Portable/CodeAnalysisResources.resx index 2337f7d4602..b943b7bac49 100644 --- a/src/Compilers/Core/Portable/CodeAnalysisResources.resx +++ b/src/Compilers/Core/Portable/CodeAnalysisResources.resx @@ -621,7 +621,10 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. + + Unsupported root operation kind '{0}'. + \ No newline at end of file diff --git a/src/Compilers/Core/Portable/Compilation/SemanticModel.cs b/src/Compilers/Core/Portable/Compilation/SemanticModel.cs index ec6b3eb06fa..213c3c631bc 100644 --- a/src/Compilers/Core/Portable/Compilation/SemanticModel.cs +++ b/src/Compilers/Core/Portable/Compilation/SemanticModel.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Threading; using Microsoft.CodeAnalysis.FlowAnalysis; +using Microsoft.CodeAnalysis.Operations; using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Text; @@ -94,7 +95,9 @@ public IOperation GetOperation(SyntaxNode node, CancellationToken cancellationTo /// Root operation block, which must have a null parent. public static ControlFlowGraph GetControlFlowGraph(Operations.IBlockOperation body) { - return GetControlFlowGraphCore(body, nameof(body)); + VerifyArgumentForGetControlFlowGraph(body, nameof(body)); + + return GetControlFlowGraphCore(body); } /// @@ -103,7 +106,9 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IBlockOperation bo /// Root field initializer operation, which must have a null parent. public static ControlFlowGraph GetControlFlowGraph(Operations.IFieldInitializerOperation initializer) { - return GetControlFlowGraphCore(initializer, nameof(initializer)); + VerifyArgumentForGetControlFlowGraph(initializer, nameof(initializer)); + + return GetControlFlowGraphCore(initializer); } /// @@ -112,7 +117,9 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IFieldInitializerO /// Root property initializer operation, which must have a null parent. public static ControlFlowGraph GetControlFlowGraph(Operations.IPropertyInitializerOperation initializer) { - return GetControlFlowGraphCore(initializer, nameof(initializer)); + VerifyArgumentForGetControlFlowGraph(initializer, nameof(initializer)); + + return GetControlFlowGraphCore(initializer); } /// @@ -121,7 +128,9 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IPropertyInitializ /// Root parameter initializer operation, which must have a null parent. public static ControlFlowGraph GetControlFlowGraph(Operations.IParameterInitializerOperation initializer) { - return GetControlFlowGraphCore(initializer, nameof(initializer)); + VerifyArgumentForGetControlFlowGraph(initializer, nameof(initializer)); + + return GetControlFlowGraphCore(initializer); } /// @@ -130,7 +139,9 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IParameterInitiali /// Root constructor body operation, which must have a null parent. public static ControlFlowGraph GetControlFlowGraph(Operations.IConstructorBodyOperation constructorBody) { - return GetControlFlowGraphCore(constructorBody, nameof(constructorBody)); + VerifyArgumentForGetControlFlowGraph(constructorBody, nameof(constructorBody)); + + return GetControlFlowGraphCore(constructorBody); } /// @@ -139,17 +150,45 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IConstructorBodyOp /// Root method body operation, which must have a null parent. public static ControlFlowGraph GetControlFlowGraph(Operations.IMethodBodyOperation methodBody) { - return GetControlFlowGraphCore(methodBody, nameof(methodBody)); + VerifyArgumentForGetControlFlowGraph(methodBody, nameof(methodBody)); + + return GetControlFlowGraphCore(methodBody); + } + + /// + /// Gets a for the given executable code block . + /// + /// Root operation for an executable code block, which must have a null parent. + public static ControlFlowGraph GetControlFlowGraph(IOperation rootOperation) + { + VerifyArgumentForGetControlFlowGraph(rootOperation, nameof(rootOperation)); + VerifyRootOperationKindForGetControlFlowGraph(rootOperation, nameof(rootOperation)); + + return GetControlFlowGraphCore(rootOperation); } - private static ControlFlowGraph GetControlFlowGraphCore(IOperation operation, string argumentNameForException) + /// + /// Gets a for the executable code block containing the given . + /// + /// Operation within an executable code block. + public static ControlFlowGraph GetEnclosingControlFlowGraph(IOperation operation) + { + VerifyArgumentForGetControlFlowGraph(operation, nameof(operation), verifyRoot: false); + + var rootOperation = operation.GetRootOperation(); + VerifyRootOperationKindForGetControlFlowGraph(rootOperation, nameof(operation)); + + return GetControlFlowGraphCore(rootOperation); + } + + private static void VerifyArgumentForGetControlFlowGraph(IOperation operation, string argumentNameForException, bool verifyRoot = true) { if (operation == null) { throw new ArgumentNullException(argumentNameForException); } - if (operation.Parent != null) + if (verifyRoot && operation.Parent != null) { throw new ArgumentException(CodeAnalysisResources.NotARootOperation, argumentNameForException); } @@ -158,7 +197,22 @@ private static ControlFlowGraph GetControlFlowGraphCore(IOperation operation, st { throw new ArgumentException(CodeAnalysisResources.OperationHasNullSemanticModel, argumentNameForException); } + } + private static void VerifyRootOperationKindForGetControlFlowGraph(IOperation rootOperation, string argumentNameForException) + { + Debug.Assert(rootOperation.Parent == null); + + if (!ControlFlowGraphBuilder.IsValidRootOperationKind(rootOperation)) + { + throw new ArgumentException( + string.Format(CodeAnalysisResources.UnsupportedRootOperationKind, rootOperation.Kind), + nameof(argumentNameForException)); + } + } + + private static ControlFlowGraph GetControlFlowGraphCore(IOperation operation) + { if (!operation.Syntax.SyntaxTree.Options.Features.ContainsKey("flow-analysis")) { throw new InvalidOperationException(CodeAnalysisResources.FlowAnalysisFeatureDisabled); diff --git a/src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContext.cs b/src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContext.cs index 49abcb78789..543722e1958 100644 --- a/src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContext.cs +++ b/src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContext.cs @@ -3,7 +3,9 @@ using System; using System.Collections.Immutable; using System.Threading; +using Microsoft.CodeAnalysis.FlowAnalysis; using Microsoft.CodeAnalysis.Operations; +using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.Diagnostics @@ -920,6 +922,14 @@ public void RegisterOperationAction(Action action, par /// Action to be executed at completion of semantic analysis of an . /// Action will be executed only if an 's Kind matches one of the operation kind values. public abstract void RegisterOperationAction(Action action, ImmutableArray operationKinds); + + /// + /// Gets an array of for . + /// + public ImmutableArray GetControlFlowGraphs() + { + return DiagnosticAnalysisContextHelpers.GetControlFlowGraphs(OperationBlocks); + } } /// @@ -987,6 +997,14 @@ public void ReportDiagnostic(Diagnostic diagnostic) _reportDiagnostic(diagnostic); } } + + /// + /// Gets an array of for . + /// + public ImmutableArray GetControlFlowGraphs() + { + return DiagnosticAnalysisContextHelpers.GetControlFlowGraphs(OperationBlocks); + } } /// @@ -1189,5 +1207,13 @@ public void ReportDiagnostic(Diagnostic diagnostic) _reportDiagnostic(diagnostic); } } + + /// + /// Gets a for the operation block containing the . + /// + public ControlFlowGraph GetEnclosingControlFlowGraph() + { + return SemanticModel.GetEnclosingControlFlowGraph(Operation); + } } } diff --git a/src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContextHelpers.cs b/src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContextHelpers.cs index 194277a4b34..adeaacd9b7a 100644 --- a/src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContextHelpers.cs +++ b/src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContextHelpers.cs @@ -4,6 +4,8 @@ using System.Collections.Immutable; using System.Reflection; using System.Runtime.CompilerServices; +using Microsoft.CodeAnalysis.FlowAnalysis; +using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Text; using Roslyn.Utilities; @@ -148,5 +150,21 @@ private static void VerifySyntaxKinds(ImmutableArray GetControlFlowGraphs(ImmutableArray operationBlocks) + { + if (operationBlocks.IsEmpty) + { + return ImmutableArray.Empty; + } + + var builder = ArrayBuilder.GetInstance(operationBlocks.Length); + foreach (IOperation operationBlock in operationBlocks) + { + builder.Add(SemanticModel.GetEnclosingControlFlowGraph(operationBlock)); + } + + return builder.ToImmutableAndFree(); + } } } diff --git a/src/Compilers/Core/Portable/Operations/ControlFlowGraphBuilder.cs b/src/Compilers/Core/Portable/Operations/ControlFlowGraphBuilder.cs index ec2077b9647..a42d510e614 100644 --- a/src/Compilers/Core/Portable/Operations/ControlFlowGraphBuilder.cs +++ b/src/Compilers/Core/Portable/Operations/ControlFlowGraphBuilder.cs @@ -54,6 +54,23 @@ private bool IsImplicit(IOperation operation) return _forceImplicit || operation.IsImplicit; } + public static bool IsValidRootOperationKind(IOperation operation) + { + switch (operation.Kind) + { + case OperationKind.Block: + case OperationKind.MethodBodyOperation: + case OperationKind.ConstructorBodyOperation: + case OperationKind.FieldInitializer: + case OperationKind.PropertyInitializer: + case OperationKind.ParameterInitializer: + return true; + + default: + return false; + } + } + public static ControlFlowGraph Create(IOperation body, ControlFlowRegion enclosing = null, CaptureIdDispenser captureIdDispenser = null, in Context context = default) { Debug.Assert(body != null); @@ -63,13 +80,7 @@ public static ControlFlowGraph Create(IOperation body, ControlFlowRegion enclosi if (enclosing == null) { Debug.Assert(body.Parent == null); - Debug.Assert(body.Kind == OperationKind.Block || - body.Kind == OperationKind.MethodBodyOperation || - body.Kind == OperationKind.ConstructorBodyOperation || - body.Kind == OperationKind.FieldInitializer || - body.Kind == OperationKind.PropertyInitializer || - body.Kind == OperationKind.ParameterInitializer, - $"Unexpected root operation kind: {body.Kind}"); + Debug.Assert(IsValidRootOperationKind(body), $"Unexpected root operation kind: {body.Kind}"); } else { diff --git a/src/Compilers/Core/Portable/Operations/OperationExtensions.cs b/src/Compilers/Core/Portable/Operations/OperationExtensions.cs index ea26add880f..bfa94dbf8ca 100644 --- a/src/Compilers/Core/Portable/Operations/OperationExtensions.cs +++ b/src/Compilers/Core/Portable/Operations/OperationExtensions.cs @@ -298,5 +298,33 @@ internal static string GetArgumentName(this HasDynamicArgumentsExpression dynami return argumentRefKinds[index]; } + + /// + /// Gets the root operation for the tree containing the given . + /// + /// Operation whose root is requested. + public static IOperation GetRootOperation(this IOperation operation) + { + if (operation == null) + { + throw new ArgumentNullException(nameof(operation)); + } + + while (operation.Parent != null) + { + operation = operation.Parent; + } + + return operation; + } + + /// + /// Gets a for the executable code block containing the given . + /// + /// Operation within an executable code block. + public static FlowAnalysis.ControlFlowGraph GetEnclosingControlFlowGraph(this IOperation operation) + { + return SemanticModel.GetEnclosingControlFlowGraph(operation); + } } } diff --git a/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt b/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt index f9dec4b85e2..560ca4cee39 100644 --- a/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt +++ b/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt @@ -1,4 +1,7 @@ Microsoft.CodeAnalysis.Compilation.HasImplicitConversion(Microsoft.CodeAnalysis.ITypeSymbol fromType, Microsoft.CodeAnalysis.ITypeSymbol toType) -> bool +Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext.GetEnclosingControlFlowGraph() -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph +Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.GetControlFlowGraphs() -> System.Collections.Immutable.ImmutableArray +Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.GetControlFlowGraphs() -> System.Collections.Immutable.ImmutableArray Microsoft.CodeAnalysis.Diagnostics.Telemetry.AnalyzerTelemetryInfo.Concurrent.get -> bool Microsoft.CodeAnalysis.Diagnostics.Telemetry.AnalyzerTelemetryInfo.Concurrent.set -> void Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph.GetAnonymousFunctionControlFlowGraph(Microsoft.CodeAnalysis.FlowAnalysis.IFlowAnonymousFunctionOperation anonymousFunction) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph @@ -107,12 +110,16 @@ Microsoft.CodeAnalysis.Operations.InstanceReferenceKind.ContainingTypeInstance = Microsoft.CodeAnalysis.Operations.InstanceReferenceKind.ImplicitReceiver = 1 -> Microsoft.CodeAnalysis.Operations.InstanceReferenceKind override Microsoft.CodeAnalysis.FlowAnalysis.CaptureId.Equals(object obj) -> bool override Microsoft.CodeAnalysis.FlowAnalysis.CaptureId.GetHashCode() -> int +static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetEnclosingControlFlowGraph(this Microsoft.CodeAnalysis.IOperation operation) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph +static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetRootOperation(this Microsoft.CodeAnalysis.IOperation operation) -> Microsoft.CodeAnalysis.IOperation +static Microsoft.CodeAnalysis.SemanticModel.GetControlFlowGraph(Microsoft.CodeAnalysis.IOperation rootOperation) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph static Microsoft.CodeAnalysis.SemanticModel.GetControlFlowGraph(Microsoft.CodeAnalysis.Operations.IBlockOperation body) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph static Microsoft.CodeAnalysis.SemanticModel.GetControlFlowGraph(Microsoft.CodeAnalysis.Operations.IConstructorBodyOperation constructorBody) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph static Microsoft.CodeAnalysis.SemanticModel.GetControlFlowGraph(Microsoft.CodeAnalysis.Operations.IFieldInitializerOperation initializer) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph static Microsoft.CodeAnalysis.SemanticModel.GetControlFlowGraph(Microsoft.CodeAnalysis.Operations.IMethodBodyOperation methodBody) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph static Microsoft.CodeAnalysis.SemanticModel.GetControlFlowGraph(Microsoft.CodeAnalysis.Operations.IParameterInitializerOperation initializer) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph static Microsoft.CodeAnalysis.SemanticModel.GetControlFlowGraph(Microsoft.CodeAnalysis.Operations.IPropertyInitializerOperation initializer) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph +static Microsoft.CodeAnalysis.SemanticModel.GetEnclosingControlFlowGraph(Microsoft.CodeAnalysis.IOperation operation) -> Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph virtual Microsoft.CodeAnalysis.Operations.OperationVisitor.VisitCaughtException(Microsoft.CodeAnalysis.FlowAnalysis.ICaughtExceptionOperation operation) -> void virtual Microsoft.CodeAnalysis.Operations.OperationVisitor.VisitFlowCapture(Microsoft.CodeAnalysis.FlowAnalysis.IFlowCaptureOperation operation) -> void virtual Microsoft.CodeAnalysis.Operations.OperationVisitor.VisitFlowCaptureReference(Microsoft.CodeAnalysis.FlowAnalysis.IFlowCaptureReferenceOperation operation) -> void diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.cs.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.cs.xlf index 02b813be1a5..db9aa0fe3fb 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.cs.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.cs.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() musí vracet instanci {1}. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. Hodnota je moc velká, než aby se dala vyjádřit jako 30bitové nepodepsané celé číslo. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.de.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.de.xlf index b6d7ba596fc..1e754a6846e 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.de.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.de.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() muss eine Instanz von {1} zurückgeben. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. Der Wert ist zu groß, um als ganze 30-Bit-Zahl ohne Vorzeichen dargestellt zu werden. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.es.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.es.xlf index 8f1fa9e6395..2d762aa2973 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.es.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.es.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() debe devolver una instancia de {1}. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. Valor demasiado largo para representarse como entero sin signo de 30 bits. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.fr.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.fr.xlf index bc693cf6698..90e53b90b6e 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.fr.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.fr.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() doit retourner une instance de {1}. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. La valeur est trop grande pour être représentée en tant qu'entier 30 bits non signé. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.it.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.it.xlf index 08e9af73f39..537fd756b42 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.it.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.it.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() deve restituire un'istanza di {1}. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. Il valore è troppo grande per essere rappresentato come intero senza segno a 30 bit. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ja.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ja.xlf index 7cf63b15101..c9dea240b1a 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ja.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ja.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() は {1} のインスタンスを返す必要があります。 + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. 値が大きすぎるため、30 ビットの符号なし整数として表すことができません。 diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ko.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ko.xlf index f7fc52ff7a8..a7bc2cdd005 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ko.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ko.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata()는 {1}의 인스턴스를 반환해야 합니다. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. 값이 너무 커서 30비트 정수로 표시할 수 없습니다. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.pl.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.pl.xlf index 625749319c4..a75220c6f25 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.pl.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.pl.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ Metoda {0}.GetMetadata() musi zwrócić wystąpienie {1}. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. Wartość jest zbyt duża, dlatego nie może być reprezentowana jako 30-bitowa liczba całkowita bez znaku. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.pt-BR.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.pt-BR.xlf index 10cd9f5dc28..f215e2dc866 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.pt-BR.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.pt-BR.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() deve retornar uma instância de {1}. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. Valor muito grande para ser representado como um inteiro sem sinal de 30 bits. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ru.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ru.xlf index 2df3c5dfbf0..158f588a9f0 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ru.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.ru.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() должен возвращать экземпляр {1}. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. Слишком большое значение для представления в виде 30-разрядного целого числа без знака. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.tr.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.tr.xlf index 80f086ed69e..17730eed0b9 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.tr.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.tr.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() bir {1} örneği döndürmelidir. + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. Değer, 30 bit işaretsiz tamsayı olarak temsil edilemeyecek kadar büyük. diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.zh-Hans.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.zh-Hans.xlf index 69035b96131..b53e0427a99 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.zh-Hans.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.zh-Hans.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() 必须返回 {1} 的实例。 + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. 值太大,无法表示为 30 位无符号整数。 diff --git a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.zh-Hant.xlf b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.zh-Hant.xlf index 57d2524f78a..f8fdb88f35c 100644 --- a/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.zh-Hant.xlf +++ b/src/Compilers/Core/Portable/xlf/CodeAnalysisResources.zh-Hant.xlf @@ -7,7 +7,7 @@ Given operation has a non-null parent. - + Given operation has a null semantic model. Given operation has a null semantic model. @@ -162,6 +162,11 @@ {0}.GetMetadata() 必須傳回 {1} 的執行個體。 + + Unsupported root operation kind '{0}'. + Unsupported root operation kind '{0}'. + + Value too large to be represented as a 30 bit unsigned integer. 值太大,無法呈現為 30 位元不帶正負號的整數。 -- GitLab