提交 e5a43558 编写于 作者: M Manish Vasani

Add convenience APIs to get CFG

Fixes #27627
上级 e9d03b34
......@@ -1059,7 +1059,7 @@ internal class CodeAnalysisResources {
/// </summary>
internal static string OperationHasNullSemanticModel {
get {
return ResourceManager.GetString("OperationHasNoSemanticModel", resourceCulture);
return ResourceManager.GetString("OperationHasNullSemanticModel", resourceCulture);
}
}
......@@ -1549,6 +1549,15 @@ internal class CodeAnalysisResources {
}
}
/// <summary>
/// Looks up a localized string similar to Unsupported root operation kind &apos;{0}&apos;..
/// </summary>
internal static string UnsupportedRootOperationKind {
get {
return ResourceManager.GetString("UnsupportedRootOperationKind", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Value too large to be represented as a 30 bit unsigned integer..
/// </summary>
......
......@@ -621,7 +621,10 @@
<data name="NotARootOperation" xml:space="preserve">
<value>Given operation has a non-null parent.</value>
</data>
<data name="OperationHasNoSemanticModel" xml:space="preserve">
<data name="OperationHasNullSemanticModel" xml:space="preserve">
<value>Given operation has a null semantic model.</value>
</data>
<data name="UnsupportedRootOperationKind" xml:space="preserve">
<value>Unsupported root operation kind '{0}'.</value>
</data>
</root>
\ No newline at end of file
......@@ -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
/// <param name="body">Root operation block, which must have a null parent.</param>
public static ControlFlowGraph GetControlFlowGraph(Operations.IBlockOperation body)
{
return GetControlFlowGraphCore(body, nameof(body));
VerifyArgumentForGetControlFlowGraph(body, nameof(body));
return GetControlFlowGraphCore(body);
}
/// <summary>
......@@ -103,7 +106,9 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IBlockOperation bo
/// <param name="initializer">Root field initializer operation, which must have a null parent.</param>
public static ControlFlowGraph GetControlFlowGraph(Operations.IFieldInitializerOperation initializer)
{
return GetControlFlowGraphCore(initializer, nameof(initializer));
VerifyArgumentForGetControlFlowGraph(initializer, nameof(initializer));
return GetControlFlowGraphCore(initializer);
}
/// <summary>
......@@ -112,7 +117,9 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IFieldInitializerO
/// <param name="initializer">Root property initializer operation, which must have a null parent.</param>
public static ControlFlowGraph GetControlFlowGraph(Operations.IPropertyInitializerOperation initializer)
{
return GetControlFlowGraphCore(initializer, nameof(initializer));
VerifyArgumentForGetControlFlowGraph(initializer, nameof(initializer));
return GetControlFlowGraphCore(initializer);
}
/// <summary>
......@@ -121,7 +128,9 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IPropertyInitializ
/// <param name="initializer">Root parameter initializer operation, which must have a null parent.</param>
public static ControlFlowGraph GetControlFlowGraph(Operations.IParameterInitializerOperation initializer)
{
return GetControlFlowGraphCore(initializer, nameof(initializer));
VerifyArgumentForGetControlFlowGraph(initializer, nameof(initializer));
return GetControlFlowGraphCore(initializer);
}
/// <summary>
......@@ -130,7 +139,9 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IParameterInitiali
/// <param name="constructorBody">Root constructor body operation, which must have a null parent.</param>
public static ControlFlowGraph GetControlFlowGraph(Operations.IConstructorBodyOperation constructorBody)
{
return GetControlFlowGraphCore(constructorBody, nameof(constructorBody));
VerifyArgumentForGetControlFlowGraph(constructorBody, nameof(constructorBody));
return GetControlFlowGraphCore(constructorBody);
}
/// <summary>
......@@ -139,17 +150,45 @@ public static ControlFlowGraph GetControlFlowGraph(Operations.IConstructorBodyOp
/// <param name="methodBody">Root method body operation, which must have a null parent.</param>
public static ControlFlowGraph GetControlFlowGraph(Operations.IMethodBodyOperation methodBody)
{
return GetControlFlowGraphCore(methodBody, nameof(methodBody));
VerifyArgumentForGetControlFlowGraph(methodBody, nameof(methodBody));
return GetControlFlowGraphCore(methodBody);
}
/// <summary>
/// Gets a <see cref="ControlFlowGraph"/> for the given executable code block <paramref name="rootOperation"/>.
/// </summary>
/// <param name="rootOperation">Root operation for an executable code block, which must have a null parent.</param>
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)
/// <summary>
/// Gets a <see cref="ControlFlowGraph"/> for the executable code block containing the given <paramref name="operation"/>.
/// </summary>
/// <param name="operation">Operation within an executable code block.</param>
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);
......
......@@ -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<OperationAnalysisContext> action, par
/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param>
/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param>
public abstract void RegisterOperationAction(Action<OperationAnalysisContext> action, ImmutableArray<OperationKind> operationKinds);
/// <summary>
/// Gets an array of <see cref="ControlFlowGraph"/> for <see cref="OperationBlocks"/>.
/// </summary>
public ImmutableArray<ControlFlowGraph> GetControlFlowGraphs()
{
return DiagnosticAnalysisContextHelpers.GetControlFlowGraphs(OperationBlocks);
}
}
/// <summary>
......@@ -987,6 +997,14 @@ public void ReportDiagnostic(Diagnostic diagnostic)
_reportDiagnostic(diagnostic);
}
}
/// <summary>
/// Gets an array of <see cref="ControlFlowGraph"/> for <see cref="OperationBlocks"/>.
/// </summary>
public ImmutableArray<ControlFlowGraph> GetControlFlowGraphs()
{
return DiagnosticAnalysisContextHelpers.GetControlFlowGraphs(OperationBlocks);
}
}
/// <summary>
......@@ -1189,5 +1207,13 @@ public void ReportDiagnostic(Diagnostic diagnostic)
_reportDiagnostic(diagnostic);
}
}
/// <summary>
/// Gets a <see cref="ControlFlowGraph"/> for the operation block containing the <see cref="Operation"/>.
/// </summary>
public ControlFlowGraph GetEnclosingControlFlowGraph()
{
return SemanticModel.GetEnclosingControlFlowGraph(Operation);
}
}
}
......@@ -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<TLanguageKindEnum>(ImmutableArray<TLanguag
throw new ArgumentNullException(nameof(valueProvider));
}
}
internal static ImmutableArray<ControlFlowGraph> GetControlFlowGraphs(ImmutableArray<IOperation> operationBlocks)
{
if (operationBlocks.IsEmpty)
{
return ImmutableArray<ControlFlowGraph>.Empty;
}
var builder = ArrayBuilder<ControlFlowGraph>.GetInstance(operationBlocks.Length);
foreach (IOperation operationBlock in operationBlocks)
{
builder.Add(SemanticModel.GetEnclosingControlFlowGraph(operationBlock));
}
return builder.ToImmutableAndFree();
}
}
}
......@@ -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
{
......
......@@ -298,5 +298,33 @@ internal static string GetArgumentName(this HasDynamicArgumentsExpression dynami
return argumentRefKinds[index];
}
/// <summary>
/// Gets the root operation for the <see cref="IOperation"/> tree containing the given <paramref name="operation"/>.
/// </summary>
/// <param name="operation">Operation whose root is requested.</param>
public static IOperation GetRootOperation(this IOperation operation)
{
if (operation == null)
{
throw new ArgumentNullException(nameof(operation));
}
while (operation.Parent != null)
{
operation = operation.Parent;
}
return operation;
}
/// <summary>
/// Gets a <see cref="FlowAnalysis.ControlFlowGraph"/> for the executable code block containing the given <paramref name="operation"/>.
/// </summary>
/// <param name="operation">Operation within an executable code block.</param>
public static FlowAnalysis.ControlFlowGraph GetEnclosingControlFlowGraph(this IOperation operation)
{
return SemanticModel.GetEnclosingControlFlowGraph(operation);
}
}
}
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.FlowAnalysis.ControlFlowGraph>
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.GetControlFlowGraphs() -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph>
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
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() musí vracet instanci {1}.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">Hodnota je moc velká, než aby se dala vyjádřit jako 30bitové nepodepsané celé číslo.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() muss eine Instanz von {1} zurückgeben.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">Der Wert ist zu groß, um als ganze 30-Bit-Zahl ohne Vorzeichen dargestellt zu werden.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() debe devolver una instancia de {1}.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">Valor demasiado largo para representarse como entero sin signo de 30 bits.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() doit retourner une instance de {1}.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">La valeur est trop grande pour être représentée en tant qu'entier 30 bits non signé.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() deve restituire un'istanza di {1}.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">Il valore è troppo grande per essere rappresentato come intero senza segno a 30 bit.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() は {1} のインスタンスを返す必要があります。</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">値が大きすぎるため、30 ビットの符号なし整数として表すことができません。</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata()는 {1}의 인스턴스를 반환해야 합니다.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">값이 너무 커서 30비트 정수로 표시할 수 없습니다.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">Metoda {0}.GetMetadata() musi zwrócić wystąpienie {1}.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">Wartość jest zbyt duża, dlatego nie może być reprezentowana jako 30-bitowa liczba całkowita bez znaku.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() deve retornar uma instância de {1}.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">Valor muito grande para ser representado como um inteiro sem sinal de 30 bits.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() должен возвращать экземпляр {1}.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">Слишком большое значение для представления в виде 30-разрядного целого числа без знака.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() bir {1} örneği döndürmelidir.</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">Değer, 30 bit işaretsiz tamsayı olarak temsil edilemeyecek kadar büyük.</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() 必须返回 {1} 的实例。</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">值太大,无法表示为 30 位无符号整数。</target>
......
......@@ -7,7 +7,7 @@
<target state="new">Given operation has a non-null parent.</target>
<note />
</trans-unit>
<trans-unit id="OperationHasNoSemanticModel">
<trans-unit id="OperationHasNullSemanticModel">
<source>Given operation has a null semantic model.</source>
<target state="new">Given operation has a null semantic model.</target>
<note />
......@@ -162,6 +162,11 @@
<target state="translated">{0}.GetMetadata() 必須傳回 {1} 的執行個體。</target>
<note />
</trans-unit>
<trans-unit id="UnsupportedRootOperationKind">
<source>Unsupported root operation kind '{0}'.</source>
<target state="new">Unsupported root operation kind '{0}'.</target>
<note />
</trans-unit>
<trans-unit id="Value_too_large_to_be_represented_as_a_30_bit_unsigned_integer">
<source>Value too large to be represented as a 30 bit unsigned integer.</source>
<target state="translated">值太大,無法呈現為 30 位元不帶正負號的整數。</target>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册