Remove CSharp/VBOperation cloners.

上级 e1ea308b
...@@ -474,11 +474,6 @@ internal virtual IOperation GetOperationWorker(CSharpSyntaxNode node, Cancellati ...@@ -474,11 +474,6 @@ internal virtual IOperation GetOperationWorker(CSharpSyntaxNode node, Cancellati
return null; return null;
} }
internal override IOperation CloneOperationCore(IOperation operation)
{
return CSharpOperationCloner.Instance.Visit(operation);
}
#region GetSymbolInfo #region GetSymbolInfo
/// <summary> /// <summary>
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.CodeAnalysis.Operations;
namespace Microsoft.CodeAnalysis.CSharp
{
internal class CSharpOperationCloner : OperationCloner
{
public static OperationCloner Instance { get; } = new CSharpOperationCloner();
}
}
...@@ -36,7 +36,7 @@ public IOperation Create(BoundNode boundNode) ...@@ -36,7 +36,7 @@ public IOperation Create(BoundNode boundNode)
// always return cloned one // always return cloned one
if (boundNode.Kind == BoundKind.ImplicitReceiver) if (boundNode.Kind == BoundKind.ImplicitReceiver)
{ {
return _semanticModel.CloneOperation(CreateInternal(boundNode)); return OperationCloner.CloneOperation(CreateInternal(boundNode));
} }
return _cache.GetOrAdd(boundNode, n => CreateInternal(n)); return _cache.GetOrAdd(boundNode, n => CreateInternal(n));
......
...@@ -86,13 +86,6 @@ public IOperation GetOperation(SyntaxNode node, CancellationToken cancellationTo ...@@ -86,13 +86,6 @@ public IOperation GetOperation(SyntaxNode node, CancellationToken cancellationTo
protected abstract IOperation GetOperationCore(SyntaxNode node, CancellationToken cancellationToken); protected abstract IOperation GetOperationCore(SyntaxNode node, CancellationToken cancellationToken);
/// <summary>
/// Deep Clone given IOperation
/// </summary>
internal T CloneOperation<T>(T operation) where T : IOperation => (T)CloneOperationCore(operation);
internal abstract IOperation CloneOperationCore(IOperation operation);
/// <summary> /// <summary>
/// Returns true if this is a SemanticModel that ignores accessibility rules when answering semantic questions. /// Returns true if this is a SemanticModel that ignores accessibility rules when answering semantic questions.
/// </summary> /// </summary>
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Immutable; using System.Collections.Immutable;
using Roslyn.Utilities; using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Operations namespace Microsoft.CodeAnalysis.Operations
{ {
internal abstract class OperationCloner : OperationVisitor<object, IOperation> internal sealed class OperationCloner : OperationVisitor<object, IOperation>
{ {
protected T Visit<T>(T node) where T : IOperation private static readonly Lazy<OperationCloner> _lazyInstance = new Lazy<OperationCloner>(() => new OperationCloner());
/// <summary>
/// Deep clone given IOperation
/// </summary>
public static T CloneOperation<T>(T operation) where T : IOperation
{
return _lazyInstance.Value.Visit(operation);
}
private T Visit<T>(T node) where T : IOperation
{ {
return (T)Visit(node, argument: null); return (T)Visit(node, argument: null);
} }
......
...@@ -143,10 +143,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic ...@@ -143,10 +143,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return Nothing Return Nothing
End Function End Function
Friend Overrides Function CloneOperationCore(operation As IOperation) As IOperation
Return VisualBasicOperationCloner.Instance.Visit(operation)
End Function
''' <summary> ''' <summary>
''' Returns what symbol(s), if any, the given expression syntax bound to in the program. ''' Returns what symbol(s), if any, the given expression syntax bound to in the program.
''' '''
......
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis.Operations
Namespace Microsoft.CodeAnalysis.VisualBasic
Friend Class VisualBasicOperationCloner
Inherits OperationCloner
Public Shared ReadOnly Property Instance As OperationCloner = New VisualBasicOperationCloner()
End Class
End Namespace
...@@ -32,7 +32,7 @@ Namespace Microsoft.CodeAnalysis.Operations ...@@ -32,7 +32,7 @@ Namespace Microsoft.CodeAnalysis.Operations
' since same bound node appears in multiple places in the tree ' since same bound node appears in multiple places in the tree
' we can't use bound node to operation map. ' we can't use bound node to operation map.
' for now, we will just create new operation and return cloned ' for now, we will just create new operation and return cloned
Return _semanticModel.CloneOperation(CreateInternal(boundNode)) Return OperationCloner.CloneOperation(CreateInternal(boundNode))
End If End If
' A BoundUserDefined conversion is always the operand of a BoundConversion, and is handled ' A BoundUserDefined conversion is always the operand of a BoundConversion, and is handled
......
...@@ -618,7 +618,7 @@ internal static void VerifyClone(SemanticModel model) ...@@ -618,7 +618,7 @@ internal static void VerifyClone(SemanticModel model)
continue; continue;
} }
var clonedOperation = model.CloneOperation(operation); var clonedOperation = OperationCloner.CloneOperation(operation);
// check whether cloned IOperation is same as original one // check whether cloned IOperation is same as original one
var original = OperationTreeVerifier.GetOperationTree(model.Compilation, operation); var original = OperationTreeVerifier.GetOperationTree(model.Compilation, operation);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册