Remove CSharp/VBOperation cloners.

上级 e1ea308b
......@@ -474,11 +474,6 @@ internal virtual IOperation GetOperationWorker(CSharpSyntaxNode node, Cancellati
return null;
}
internal override IOperation CloneOperationCore(IOperation operation)
{
return CSharpOperationCloner.Instance.Visit(operation);
}
#region GetSymbolInfo
/// <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)
// always return cloned one
if (boundNode.Kind == BoundKind.ImplicitReceiver)
{
return _semanticModel.CloneOperation(CreateInternal(boundNode));
return OperationCloner.CloneOperation(CreateInternal(boundNode));
}
return _cache.GetOrAdd(boundNode, n => CreateInternal(n));
......
......@@ -86,13 +86,6 @@ public IOperation GetOperation(SyntaxNode node, CancellationToken cancellationTo
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>
/// Returns true if this is a SemanticModel that ignores accessibility rules when answering semantic questions.
/// </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 System;
using System.Collections.Immutable;
using Roslyn.Utilities;
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);
}
......
......@@ -143,10 +143,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return Nothing
End Function
Friend Overrides Function CloneOperationCore(operation As IOperation) As IOperation
Return VisualBasicOperationCloner.Instance.Visit(operation)
End Function
''' <summary>
''' 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
' since same bound node appears in multiple places in the tree
' we can't use bound node to operation map.
' for now, we will just create new operation and return cloned
Return _semanticModel.CloneOperation(CreateInternal(boundNode))
Return OperationCloner.CloneOperation(CreateInternal(boundNode))
End If
' A BoundUserDefined conversion is always the operand of a BoundConversion, and is handled
......
......@@ -618,7 +618,7 @@ internal static void VerifyClone(SemanticModel model)
continue;
}
var clonedOperation = model.CloneOperation(operation);
var clonedOperation = OperationCloner.CloneOperation(operation);
// check whether cloned IOperation is same as original one
var original = OperationTreeVerifier.GetOperationTree(model.Compilation, operation);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册