package jetbrains.mps.ide.modelchecker.platform.actions;
/*Generated by MPS */
import jetbrains.mps.checkers.IRootChecker;
import org.jetbrains.mps.openapi.module.SRepository;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.errors.IErrorReporter;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.errors.QuickFixProvider;
import jetbrains.mps.errors.QuickFix_Runtime;
import org.jetbrains.mps.openapi.model.SNodeReference;
import java.util.List;
import jetbrains.mps.ide.findusages.model.SearchResult;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations;
import org.jetbrains.mps.openapi.util.Processor;
public class RootCheckerSpecificCheckerAdapter extends SpecificChecker {
private final IRootChecker myChecker;
private final String myCategory;
private final SRepository myRepository;
public RootCheckerSpecificCheckerAdapter(IRootChecker checker, String category, @NotNull SRepository repository) {
myChecker = checker;
myCategory = category;
myRepository = repository;
}
public IModelCheckerFix getFix(IErrorReporter errorReporter) {
final SNode reporterNode = errorReporter.getSNode();
if (reporterNode != null) {
QuickFixProvider provider = check_3jptrj_a0a0b0g(errorReporter);
if (provider != null) {
final QuickFix_Runtime quickFix = provider.getQuickFix();
if (quickFix != null && provider.isExecutedImmediately()) {
final SNodeReference reporterNodeRef = reporterNode.getReference();
return new IModelCheckerFix() {
public boolean doFix() {
SNode resolved = reporterNodeRef.resolve(myRepository);
if (resolved != null) {
quickFix.execute(reporterNode);
return true;
} else {
return false;
}
}
};
}
}
}
return null;
}
public List<SearchResult<ModelCheckerIssue>> checkModel(SModel model, final ProgressMonitor monitor) {
final List<SearchResult<ModelCheckerIssue>> results = ListSequence.fromList(new ArrayList<SearchResult<ModelCheckerIssue>>());
monitor.start(myCategory, 1);
for (final SNode rootNode : SModelOperations.roots(model, null)) {
myChecker.processErrors(rootNode, myRepository, new Processor<IErrorReporter>() {
public boolean process(IErrorReporter errorReporter) {
SpecificChecker.addIssue(results, errorReporter.getSNode(), errorReporter.reportError(), SpecificChecker.getResultCategory(errorReporter.getMessageStatus()), myCategory, getFix(errorReporter));
return !(monitor.isCanceled());
}
});
}
monitor.done();
return results;
}
private static QuickFixProvider check_3jptrj_a0a0b0g(IErrorReporter checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.getIntentionProvider();
}
return null;
}
}