/** * generated by Xtext */ package de.unidue.ecg.dialogScript.ui.quickfix; import com.google.common.base.Objects; import com.google.inject.Inject; import de.unidue.ecg.common.linking.CustomLinkingDiagnosticMessageProvider; import de.unidue.ecg.dialogScript.dialogScript.CharacterDefinition; import de.unidue.ecg.dialogScript.dialogScript.CharactersDefinition; import de.unidue.ecg.dialogScript.dialogScript.ConditionDefinition; import de.unidue.ecg.dialogScript.dialogScript.ConditionList; import de.unidue.ecg.dialogScript.dialogScript.ConditionsDefinition; import de.unidue.ecg.dialogScript.dialogScript.DialogLine; import de.unidue.ecg.dialogScript.dialogScript.DialogScriptFactory; import de.unidue.ecg.dialogScript.dialogScript.DialogScriptPackage; import de.unidue.ecg.dialogScript.dialogScript.Script; import de.unidue.ecg.dialogScript.dialogScript.Switch; import de.unidue.ecg.dialogScript.dialogScript.SwitchDefinition; import de.unidue.ecg.dialogScript.dialogScript.SwitchList; import de.unidue.ecg.dialogScript.dialogScript.SwitchOff; import de.unidue.ecg.dialogScript.dialogScript.SwitchOn; import de.unidue.ecg.dialogScript.dialogScript.SwitchValue; import de.unidue.ecg.dialogScript.dialogScript.SwitchesDefinition; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.diagnostics.Diagnostic; import org.eclipse.xtext.ui.editor.model.edit.IModificationContext; import org.eclipse.xtext.ui.editor.model.edit.ISemanticModification; import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider; import org.eclipse.xtext.ui.editor.quickfix.Fix; import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor; import org.eclipse.xtext.validation.Issue; /** * Custom quickfixes. * * see http://www.eclipse.org/Xtext/documentation.html#quickfixes */ @SuppressWarnings("all") public class DialogScriptQuickfixProvider extends DefaultQuickfixProvider { @Inject private CustomLinkingDiagnosticMessageProvider customLinkingDiagnosticMessageProvider; /** * WHY IS THAT EVEN NEEDED? * @Fix(DialogScriptValidator.WRONG_CONDTIONAL_USAGE) * def makeConditionSingle(Issue issue, IssueResolutionAcceptor acceptor) { * acceptor.accept(issue, 'Add \'single\' modifier', 'Add \'single\' modifier', null) [ element, context | * val index = Integer.parseInt(issue.data.get(0)) * val hub = element as Hub * val conditional = hub.choiceDialogs.get(index) as Conditional * conditional.modifiers.add(Modifier.SINGLE) * ] * } * * * @Fix(DialogScriptValidator.WRONG_CONDTIONAL_USAGE) * def addExitHubStatement(Issue issue, IssueResolutionAcceptor acceptor) { * acceptor.accept(issue, 'Add \'exit hub\' statement', 'Add \'exit hub\' statement', null) [ element, context | * val index = Integer.parseInt(issue.data.get(0)) * val hub = element as Hub * val conditional = hub.choiceDialogs.get(index) as Conditional * if (conditional.body == null) * conditional.body = DialogScriptFactory.eINSTANCE.createConditionalBody * val exit = DialogScriptFactory.eINSTANCE.createExit * exit.setExitHub(true) * conditional.body.setJump(exit) * ] * } */ @Fix(Diagnostic.LINKING_DIAGNOSTIC) public void conditionUnknown(final Issue issue, final IssueResolutionAcceptor acceptor) { EClass _conditionDefinition = DialogScriptPackage.eINSTANCE.getConditionDefinition(); String linkText = this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _conditionDefinition); boolean _notEquals = (!Objects.equal(linkText, null)); if (_notEquals) { final ISemanticModification _function = new ISemanticModification() { public void apply(final EObject element, final IModificationContext context) throws Exception { if ((element instanceof ConditionList)) { final Script root = EcoreUtil2.<Script>getContainerOfType(element, Script.class); final ConditionDefinition condition = DialogScriptFactory.eINSTANCE.createConditionDefinition(); EClass _conditionDefinition = DialogScriptPackage.eINSTANCE.getConditionDefinition(); String _linkText = DialogScriptQuickfixProvider.this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _conditionDefinition); condition.setName(_linkText); final SwitchList switchList = DialogScriptFactory.eINSTANCE.createSwitchList(); SwitchesDefinition _switchesDefinition = root.getSwitchesDefinition(); boolean _equals = Objects.equal(_switchesDefinition, null); if (_equals) { final SwitchDefinition switch_ = DialogScriptFactory.eINSTANCE.createSwitchDefinition(); switch_.setName("switch1"); switch_.setValue(SwitchValue.OFF); SwitchesDefinition _createSwitchesDefinition = DialogScriptFactory.eINSTANCE.createSwitchesDefinition(); root.setSwitchesDefinition(_createSwitchesDefinition); SwitchesDefinition _switchesDefinition_1 = root.getSwitchesDefinition(); EList<SwitchDefinition> _switches = _switchesDefinition_1.getSwitches(); _switches.add(switch_); final Switch switchRef = DialogScriptFactory.eINSTANCE.createSwitch(); switchRef.setSwitch(switch_); switchRef.setValue(SwitchValue.OFF); EList<Switch> _switches_1 = switchList.getSwitches(); _switches_1.add(switchRef); } else { SwitchesDefinition _switchesDefinition_2 = root.getSwitchesDefinition(); EList<SwitchDefinition> _switches_2 = _switchesDefinition_2.getSwitches(); final SwitchDefinition switch__1 = _switches_2.get(0); final Switch switchRef_1 = DialogScriptFactory.eINSTANCE.createSwitch(); switchRef_1.setSwitch(switch__1); switchRef_1.setValue(SwitchValue.OFF); EList<Switch> _switches_3 = switchList.getSwitches(); _switches_3.add(switchRef_1); } condition.setSwitchList(switchList); ConditionsDefinition _conditionsDefinition = root.getConditionsDefinition(); boolean _equals_1 = Objects.equal(_conditionsDefinition, null); if (_equals_1) { ConditionsDefinition _createConditionsDefinition = DialogScriptFactory.eINSTANCE.createConditionsDefinition(); root.setConditionsDefinition(_createConditionsDefinition); } ConditionsDefinition _conditionsDefinition_1 = root.getConditionsDefinition(); EList<ConditionDefinition> _conditions = _conditionsDefinition_1.getConditions(); _conditions.add(condition); } } }; acceptor.accept(issue, (("Create condition \'" + linkText) + "\'"), (("Create condition \'" + linkText) + "\'"), null, _function); } } @Fix(Diagnostic.LINKING_DIAGNOSTIC) public void characterUnknown(final Issue issue, final IssueResolutionAcceptor acceptor) { EClass _characterDefinition = DialogScriptPackage.eINSTANCE.getCharacterDefinition(); final String linkText = this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _characterDefinition); boolean _notEquals = (!Objects.equal(linkText, null)); if (_notEquals) { final ISemanticModification _function = new ISemanticModification() { public void apply(final EObject element, final IModificationContext context) throws Exception { if ((element instanceof DialogLine)) { final Script root = EcoreUtil2.<Script>getContainerOfType(element, Script.class); final CharacterDefinition charaDef = DialogScriptFactory.eINSTANCE.createCharacterDefinition(); charaDef.setName(linkText); CharactersDefinition _charactersDefinition = root.getCharactersDefinition(); boolean _equals = Objects.equal(_charactersDefinition, null); if (_equals) { CharactersDefinition _createCharactersDefinition = DialogScriptFactory.eINSTANCE.createCharactersDefinition(); root.setCharactersDefinition(_createCharactersDefinition); } CharactersDefinition _charactersDefinition_1 = root.getCharactersDefinition(); EList<CharacterDefinition> _characters = _charactersDefinition_1.getCharacters(); _characters.add(charaDef); } } }; acceptor.accept(issue, (("Create character \'" + linkText) + "\'"), (("Create character \'" + linkText) + "\'"), null, _function); } } @Fix(Diagnostic.LINKING_DIAGNOSTIC) public void switchUnknown(final Issue issue, final IssueResolutionAcceptor acceptor) { EClass _switchDefinition = DialogScriptPackage.eINSTANCE.getSwitchDefinition(); String linkText = this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _switchDefinition); boolean _notEquals = (!Objects.equal(linkText, null)); if (_notEquals) { final ISemanticModification _function = new ISemanticModification() { public void apply(final EObject element, final IModificationContext context) throws Exception { boolean _or = false; if (((element instanceof SwitchOff) || (element instanceof SwitchOn))) { _or = true; } else { _or = (((element instanceof SwitchOff) || (element instanceof SwitchOn)) || (element instanceof Switch)); } if (_or) { final Script root = EcoreUtil2.<Script>getContainerOfType(element, Script.class); final SwitchDefinition switch_ = DialogScriptFactory.eINSTANCE.createSwitchDefinition(); EClass _switchDefinition = DialogScriptPackage.eINSTANCE.getSwitchDefinition(); String _linkText = DialogScriptQuickfixProvider.this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _switchDefinition); switch_.setName(_linkText); switch_.setValue(SwitchValue.OFF); SwitchesDefinition _switchesDefinition = root.getSwitchesDefinition(); boolean _equals = Objects.equal(_switchesDefinition, null); if (_equals) { SwitchesDefinition _createSwitchesDefinition = DialogScriptFactory.eINSTANCE.createSwitchesDefinition(); root.setSwitchesDefinition(_createSwitchesDefinition); } SwitchesDefinition _switchesDefinition_1 = root.getSwitchesDefinition(); EList<SwitchDefinition> _switches = _switchesDefinition_1.getSwitches(); _switches.add(switch_); } } }; acceptor.accept(issue, (("Create switch \'" + linkText) + "\'"), (("Create switch \'" + linkText) + "\'"), null, _function); } } }