public override Location VisitBranch([NotNull] IBranchOperation operation, [CanBeNull] object argument) { switch (operation.BranchKind) { case BranchKind.Continue: { return(VisitContinueStatement(operation)); } case BranchKind.Break: { return(VisitBreakStatement(operation)); } case BranchKind.GoTo: { return(VisitGoToStatement(operation)); } default: { return(base.VisitBranch(operation, argument)); } } }
public override void VisitBranch(IBranchOperation operation) { var target = operation.Target; var branchKind = operation.BranchKind; base.VisitBranch(operation); }
/// <summary> /// Initializes a new instance of the <see cref="CheckoutOperation"/> class. /// </summary> /// <param name="dataProvider">The data provider.</param> /// <param name="treeOperation">The tree opeartion.</param> /// <param name="commitOperation">The commit operation.</param> /// <param name="branchOperation">The branch operation.</param> public CheckoutOperation( IDataProvider dataProvider, ITreeOperation treeOperation, ICommitOperation commitOperation, IBranchOperation branchOperation) : this(dataProvider, treeOperation, commitOperation, branchOperation, NullLogger <CheckoutOperation> .Instance) { }
/// <summary> /// Initializes a new instance of the <see cref="CheckoutOperation"/> class. /// </summary> /// <param name="dataProvider">The data provider.</param> /// <param name="treeOperation">The tree operation.</param> /// <param name="commitOperation">The commit operation.</param> /// <param name="branchOperation">The branch operation.</param> /// <param name="logger">The logger factory.</param> public CheckoutOperation( IDataProvider dataProvider, ITreeOperation treeOperation, ICommitOperation commitOperation, IBranchOperation branchOperation, ILogger <CheckoutOperation> logger) { this.dataProvider = dataProvider; this.treeOperation = treeOperation; this.commitOperation = commitOperation; this.branchOperation = branchOperation; this.logger = logger; }
static Program() { FileSystem = new FileSystem(); FileOperator = new PhysicalFileOperator(FileSystem); DataProvider = new LocalDataProvider(FileOperator); Diff = new DiffOperation(DataProvider, new DiffProxy()); TreeOperation = new TreeOperation(DataProvider); CommitOperation = new CommitOperation(DataProvider, TreeOperation); TagOperation = new TagOperation(DataProvider); ResetOperation = new ResetOperation(DataProvider); MergeOperation = new MergeOperation(DataProvider, CommitOperation, TreeOperation, Diff); InitOperation = new DefaultInitOperation(DataProvider); BranchOperation = new BranchOperation(DataProvider); CheckoutOperation = new CheckoutOperation(DataProvider, TreeOperation, CommitOperation, BranchOperation); AddOperation = new AddOperation(DataProvider); OidConverter = DataProvider.GetOid; }
/// <summary> /// Gets either a loop or a switch operation that corresponds to the given branch operation. /// </summary> /// <param name="operation">The branch operation for which a corresponding operation is looked up</param> /// <returns>The corresponding operation or <c>null</c> in case not found (e.g. no loop or switch syntax, or the branch is not a break or continue)</returns> /// <exception cref="ArgumentNullException"><paramref name="operation"/> is null</exception> /// <exception cref="InvalidOperationException">The operation is a part of Control Flow Graph</exception> public static IOperation?GetCorrespondingOperation(this IBranchOperation operation) { if (operation == null) { throw new ArgumentNullException(nameof(operation)); } if (operation.SemanticModel == null) { throw new InvalidOperationException( CodeAnalysisResources.OperationMustNotBeControlFlowGraphPart ); } if ( operation.BranchKind != BranchKind.Break && operation.BranchKind != BranchKind.Continue ) { return(null); } if (operation.Target == null) { return(null); } for (IOperation current = operation; current.Parent != null; current = current.Parent) { switch (current) { case ILoopOperation correspondingLoop when operation.Target.Equals(correspondingLoop.ExitLabel) || operation.Target.Equals(correspondingLoop.ContinueLabel): return(correspondingLoop); case ISwitchOperation correspondingSwitch when operation.Target.Equals(correspondingSwitch.ExitLabel): return(correspondingSwitch); } } return(null); }
public override void VisitBranch(IBranchOperation operation) { Assert.Equal(OperationKind.Branch, operation.Kind); var target = operation.Target; switch (operation.BranchKind) { case BranchKind.Break: case BranchKind.Continue: case BranchKind.GoTo: break; default: Assert.False(true); break; } Assert.Empty(operation.Children); }
public override IOperation VisitBranch(IBranchOperation operation, object argument) { return(new BranchStatement(operation.Target, operation.BranchKind, ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit)); }
public void Init() { dataProvider = new Mock <IDataProvider>(); branchOperation = new BranchOperation(dataProvider.Object); }
public virtual void VisitBranch(IBranchOperation operation) { DefaultVisit(operation); }
public override void VisitBranch([NotNull] IBranchOperation operation) { base.VisitBranch(operation); }
public override void VisitBranch([NotNull] IBranchOperation operation) { IncrementStatementCount(operation); }
private static Location VisitGoToStatement([NotNull] IBranchOperation operation) { var syntax = (GotoStatementSyntax)operation.Syntax; return(syntax.GotoKeyword.GetLocation()); }
private static Location VisitBreakStatement([NotNull] IBranchOperation operation) { var syntax = (BreakStatementSyntax)operation.Syntax; return(syntax.BreakKeyword.GetLocation()); }
private static Location VisitContinueStatement([NotNull] IBranchOperation operation) { var syntax = (ContinueStatementSyntax)operation.Syntax; return(syntax.ContinueKeyword.GetLocation()); }
public override bool VisitBranch([NotNull] IBranchOperation operation1, [CanBeNull] IOperation argument) { return(argument is IBranchOperation operation2 && AreBaseOperationsEqual(operation1, operation2) && AreSymbolsEqual(operation1.Target, operation2.Target) && operation1.BranchKind == operation2.BranchKind); }