package com.sap.ide.refactoring.core.execution.participation; import java.util.ArrayList; import java.util.Collection; import org.eclipse.core.runtime.IProgressMonitor; import com.sap.ide.refactoring.core.reference.CompressingReEvaluationLog; import com.sap.ide.refactoring.core.reference.ReEvaluationInfo; import com.sap.ide.refactoring.core.reference.ReEvaluationLogger; import com.sap.ide.refactoring.core.textual.RefactoringEditorFacade; import com.sap.mi.textual.parsing.textblocks.reference.GlobalDelayedReferenceResolver; /** * Participant observing which references are re-evaluated by the {@link GlobalDelayedReferenceResolver} * * @author Stephan Erb (d049157) * */ public class ReferenceReEvaluationObservingParticipant extends AbstractCommandExecutionParticipant { public static ParticipantDescriptor DESCRIPTOR = new ParticipantDescriptor(); private ReEvaluationLogger reevaluationListener; private CompressingReEvaluationLog log; public ReferenceReEvaluationObservingParticipant(RefactoringEditorFacade facade) { super(facade); } @Override public void setup(IProgressMonitor pm) { log = new CompressingReEvaluationLog(); reevaluationListener = new ReEvaluationLogger(log); GlobalDelayedReferenceResolver.getInstance().addReferenceResolvingListener(reevaluationListener); } @Override public Collection<ContributionInfo> contribute(IProgressMonitor pm) { Collection<ContributionInfo> contributions = new ArrayList<ContributionInfo>(); for (ReEvaluationInfo reEvalInfo : log.getLoggedReEvaluations()) { contributions.add(new ReferenceReEvalContributionInfo(reEvalInfo)); } return contributions; } @Override public void teardown(IProgressMonitor pm) { GlobalDelayedReferenceResolver.getInstance().removeReferenceResolvingListener(reevaluationListener); this.reevaluationListener = null; this.log = null; } @Override public ParticipantDescriptor getDescriptor() { return DESCRIPTOR; } }