コード例 #1
0
 internal SearchRefactoringWorkitem(ICodeHistoryRecord latestRecord, 
     DocumentId documentId)
 {
     this.latestRecord = latestRecord;
     this.documentId = documentId;
     logger = NLoggerUtil.GetNLogger(typeof(SearchRefactoringWorkitem));
 }
コード例 #2
0
 private CompilationUnitRecord(string uniqueName, string sourePath, long time,
     IDataSource dataSource, ICodeHistoryRecord previousRecord)
 {
     this.uniqueName = uniqueName;
     this.sourePath = sourePath;
     this.time = time;
     this.dataSource = dataSource;
     this.previousRecord = previousRecord;
 }
コード例 #3
0
        public void DetectRefactorings(ICodeHistoryRecord head)
        {
            int depth = 0;

             // For every head in the head chain, look back to detect refactorings.
             // We do not search records that are older than SEARCH_DEPTH away from the head.
             for (var current = head; current.HasPreviousRecord() && depth < SEARCH_DEPTH;
                 current = current.GetPreviousRecord(), depth ++)
             {
                 logger.Info("Detect refactorings with depth of head: " + depth);
                 LookBackToDetectRefactorings(current);
             }
        }
コード例 #4
0
        /* Detect intermediate refactorings the determined before record. */
        private void DetectIntermediateRefactorings(ICodeHistoryRecord baseBefore, ICodeHistoryRecord head, 
            IExternalRefactoringDetector detector)
        {
            // Get the source code for base before.
            var before = baseBefore.GetSource();

            // From the head, iteratively get previous record (until reach base before record)
            // and detect if refactorings exist.
            for (var currentRecord = head; !currentRecord.Equals(baseBefore);
                currentRecord = currentRecord.GetPreviousRecord())
            {
                var after = currentRecord.GetSource();
                DetectRefactoringByDetector(before, after, detector);
            }
        }
コード例 #5
0
 public override void StartRefactoringSearch(ICodeHistoryRecord record)
 {
     Enqueue(new SearchExtractMethodWorkitem(record));
 }
コード例 #6
0
 /* Called when manual refactoring is detected. */
 protected abstract void OnRefactoringDetected(ICodeHistoryRecord before, ICodeHistoryRecord after, 
     IEnumerable<IManualRefactoring> refactorings);
コード例 #7
0
 /* Start the searching of performed refactorings. */
 public abstract void StartRefactoringSearch(ICodeHistoryRecord record);
コード例 #8
0
 public override void StartRefactoringSearch(ICodeHistoryRecord record)
 {
     Enqueue(new SearchChangeMethodSignatureWorkItem(record));
 }
コード例 #9
0
            protected override void OnRefactoringDetected(ICodeHistoryRecord before, ICodeHistoryRecord after,
                                                          IEnumerable<IManualRefactoring> refactorings)
            {
                logger.Info("Change Method Signature Detected.");
                logger.Info("Before:\n" + before.GetSource());
                logger.Info("After:\n" + after.GetSource());

                // Enqueue the condition checking process for this detected refactoring.
                GhostFactorComponents.conditionCheckingComponent.CheckRefactoringCondition(before, after, refactorings.First());
            }
コード例 #10
0
            protected override void OnRefactoringDetected(ICodeHistoryRecord before, ICodeHistoryRecord after,
                IEnumerable<IManualRefactoring> refactorings)
            {
                logger.Info("\n Extract Method dectected.");
                logger.Info("\n Before: \n" + before.GetSource());
                logger.Info("\n After: \n" + after.GetSource());

                // Get the first refactoring detected.
                IManualRefactoring refactoring = refactorings.First();

                // Enqueue workitem for conditions checking component.
                GhostFactorComponents.conditionCheckingComponent.CheckRefactoringCondition(before, after, refactoring);
            }
コード例 #11
0
        /* Use all the refactoring detectors to detect refactoring, return whether a refactoring is detected. */
        private bool HandlePreviousRecordWithDetectors(ICodeHistoryRecord before, ICodeHistoryRecord head)
        {
            // If a refactoring is found, initially false.
            bool hasRefactorings = false;

            // For each detectors.
            foreach (var detector in externalRefactoringDetectors)
            {
                // If found by the detector hasRefactoring is set to be true.
                if(HandlePreviousRecord(before, head, detector))
                {
                    hasRefactorings = true;
                }
            }
            return hasRefactorings;
        }
コード例 #12
0
 protected override void OnRefactoringDetected(ICodeHistoryRecord before, ICodeHistoryRecord after,
     IEnumerable<IManualRefactoring> refactorings)
 {
     logger.Info("Rename dectected.");
     logger.Info("\nBefore: \n" + before.GetSource());
     logger.Info("\nAfter: \n" + after.GetSource());
 }
コード例 #13
0
 private void OnNoRefactoringDetected(ICodeHistoryRecord after)
 {
     logger.Info("No refactoring detected.");
 }
コード例 #14
0
 public SearchRenameWorkItem(ICodeHistoryRecord latestRecord)
     : base(latestRecord)
 {
 }
コード例 #15
0
 protected override void OnNoRefactoringDetected(ICodeHistoryRecord record)
 {
     //logger.Info("No Rename Detected.");
 }
コード例 #16
0
 public override void StartRefactoringSearch(ICodeHistoryRecord record)
 {
     Enqueue(new SearchRenameWorkItem(record));
 }
コード例 #17
0
 public bool Equals(ICodeHistoryRecord other)
 {
     return GetTime() == other.GetTime();
 }
コード例 #18
0
 public SearchChangeMethodSignatureWorkItem(ICodeHistoryRecord latestRecord)
     : base(latestRecord)
 {
 }
コード例 #19
0
 public SearchExtractMethodWorkitem(ICodeHistoryRecord latestRecord)
     : base(latestRecord)
 {
 }
コード例 #20
0
 public void StartRefactoringSearch(ICodeHistoryRecord record, DocumentId documentId)
 {
     queue.Add(new SearchRefactoringWorkitem(record, documentId));
 }
コード例 #21
0
 protected override void OnNoRefactoringDetected(ICodeHistoryRecord record)
 {
     //logger.Info("No extract method detected.");
 }
コード例 #22
0
 public void CheckRefactoringCondition(ICodeHistoryRecord before, ICodeHistoryRecord after, IManualRefactoring refactoring)
 {
     Enqueue(new ConditionCheckWorkItem(before, after, refactoring));
 }
コード例 #23
0
        /* Handle a previous record with the head of the record chain. */
        private bool HandlePreviousRecord(ICodeHistoryRecord previous, ICodeHistoryRecord head, 
            IExternalRefactoringDetector detector)
        {
            var after = head.GetSource();
            var before = previous.GetSource();

            // Detect if a refactoring happens before head and the previous record.
            if (DetectRefactoringByDetector(before, after, detector))
            {
                // If there is a refactoring detected, search intermediate refactorings.
                DetectIntermediateRefactorings(previous, head.GetPreviousRecord(), detector);
                return true;
            }
            return false;
        }
コード例 #24
0
 protected SearchRefactoringWorkitem(ICodeHistoryRecord latestRecord)
 {
     this.latestRecord = latestRecord;
     this.logger = GetLogger();
 }
コード例 #25
0
        private void LookBackToDetectRefactorings(ICodeHistoryRecord head)
        {
            var currentRecord = head;

            // Look back until no parent or reach the search depth.
            for (int i = 0; i < LOOK_BACK_LIMIT && currentRecord.HasPreviousRecord();
                i++, currentRecord = currentRecord.GetPreviousRecord())
            {
                try
                {
                    logger.Info("Looking back " + i + " revisions.");

                    // Handle current record.
                    if(HandlePreviousRecordWithDetectors(currentRecord.GetPreviousRecord(), head))
                    {
                        break;
                    }
                }
                catch (Exception e)
                {
                    logger.Fatal(e);
                }
            }
        }
コード例 #26
0
 /* Called when no manual refactoring is detected. */
 protected abstract void OnNoRefactoringDetected(ICodeHistoryRecord after);
コード例 #27
0
 public ConditionCheckWorkItem(ICodeHistoryRecord before, ICodeHistoryRecord after, IManualRefactoring refactoring)
 {
     this.before = before.Convert2Document();
     this.after = after.Convert2Document();
     this.DocumentKey = before.GetKey();
     this.refactoring = refactoring;
     logger = NLoggerUtil.GetNLogger(typeof(ConditionCheckWorkItem));
 }
コード例 #28
0
 protected override void OnNoRefactoringDetected(ICodeHistoryRecord record)
 {
     //logger.Info("No change method signature detected.");
 }