private void AnalyzeClassVectors(SyntaxNodeAnalysisContext context) { ClassDeclarationSyntax @class = context.Node as ClassDeclarationSyntax; MethodFragmentsInClass source = new MethodFragmentsInClass(@class); var pre = new NodeToVector(SyntaxMasks.AllNodes); ISyntaxComparator <SyntaxPair <NodeWithVector>, NodeWithVector, SingleTreeInformation> comparator = (ISyntaxComparator <SyntaxPair <NodeWithVector>, NodeWithVector, SingleTreeInformation>) new VectorComparator <SyntaxPair <NodeWithVector>, NodeWithVector, SingleTreeInformation>(); SingleTreeInformation information = new SingleTreeInformation(context.SemanticModel); SimilarityFinder <SyntaxPair <NodeWithVector>, NodeWithVector, SingleTreeInformation> analyzer = new SimilarityFinder <SyntaxPair <NodeWithVector>, NodeWithVector, SingleTreeInformation>(source, pre, Enumerable.Repeat(comparator, 1).ToList(), information); IEnumerable <SyntaxPair <NodeWithVector> > similarities = analyzer.FindAll(); }
private void AnalyzeClassSubTreesWithDataflow(SyntaxNodeAnalysisContext context) { ClassDeclarationSyntax @class = context.Node as ClassDeclarationSyntax; MethodFragmentsInClass source = new MethodFragmentsInClass(@class); NodeToNode pre = new NodeToNode(); ISyntaxComparator <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation> comparator = (ISyntaxComparator <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation>) new StructuralComparator <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation>(); ISyntaxComparator <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation> dfComparator = (ISyntaxComparator <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation>) new DataflowComparator <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation>(); SingleTreeInformation information = new SingleTreeInformation(context.SemanticModel); SimilarityFinder <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation> analyzer = new SimilarityFinder <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation>(source, pre, new List <ISyntaxComparator <SyntaxPair <NodeAsRepresentation>, NodeAsRepresentation, SingleTreeInformation> >() { comparator, dfComparator }, information); IEnumerable <SyntaxPair <NodeAsRepresentation> > similarities = analyzer.FindAll(); similarities = similarities.OrderByDescending(s => s.Left.Node.DescendantNodes().Count()); SyntaxPair <NodeAsRepresentation> similarity = similarities.First(); Report(context, similarity.Left.Node, similarity.Right.Node); }