Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
        }