package typesystemIntegration.languageChecker; /*Generated by MPS */ import jetbrains.mps.checkers.RefScopeChecker; import jetbrains.mps.nodeEditor.EditorComponent; import jetbrains.mps.errors.QuickFixProvider; import org.jetbrains.mps.openapi.model.SReference; import org.jetbrains.mps.openapi.module.SRepository; import jetbrains.mps.errors.QuickFix_Runtime; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.resolve.ResolverComponent; import jetbrains.mps.resolve.ReferenceResolverUtils; import jetbrains.mps.openapi.editor.cells.SubstituteAction; import jetbrains.mps.openapi.editor.cells.SubstituteInfo; import jetbrains.mps.internal.collections.runtime.ListSequence; public class RefScopeCheckerInEditor extends RefScopeChecker { private EditorComponent myEditorComponent; /*package*/ void setEditorComponent(EditorComponent editorContext) { myEditorComponent = editorContext; } @Override protected QuickFixProvider createResolveReferenceQuickfix(SReference reference, SRepository repository, boolean executeImmediately) { return new RefScopeCheckerInEditor.ResolveReferenceEditorBasedQuickFix(reference, repository, executeImmediately, myEditorComponent); } private class ResolveReferenceEditorBasedQuickFix extends RefScopeChecker.ResolveReferenceQuickFix { private EditorComponent myEditorComponent; public ResolveReferenceEditorBasedQuickFix(SReference reference, SRepository repository, boolean executeImmediately, EditorComponent editorComponent) { super(reference, repository, executeImmediately); myEditorComponent = editorComponent; } @Override public QuickFix_Runtime getQuickFix() { return new QuickFix_Runtime() { @Override public void execute(SNode node) { if (ResolverComponent.getInstance().resolveScopesOnly(myReference, myRepository)) { return; } SNode sourceNode = myReference.getSourceNode(); if (sourceNode == null) { return; } final String resolveInfo = ReferenceResolverUtils.getResolveInfo(myReference, sourceNode); if (resolveInfo == null) { return; } EditorBasedReferenceResolverUtils.resolveInEditor(myEditorComponent, sourceNode, resolveInfo, myReference.getRole()); } @Override public String getDescription(SNode node) { return "Resolve \"" + myReference.getRole() + "\" reference"; } }; } private SubstituteAction getApplicableSubstituteAction(SubstituteInfo substituteInfo, String resolveInfo) { SubstituteAction result = null; for (SubstituteAction nextAction : ListSequence.fromList(substituteInfo.getMatchingActions(resolveInfo, true))) { if (nextAction.canSubstitute(resolveInfo)) { if (result != null) { return null; } result = nextAction; } } return result; } } }