Search in sources :

Example 21 with EClassifier

use of org.eclipse.emf.ecore.EClassifier in project xtext-eclipse by eclipse.

the class XtextProposalProvider method completeAction_Feature.

@Override
public void completeAction_Feature(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
    Action action = EcoreUtil2.getContainerOfType(model, Action.class);
    if (action != null && action.getType() != null) {
        EClassifier classifier = action.getType().getClassifier();
        if (classifier instanceof EClass) {
            List<EReference> containments = ((EClass) classifier).getEAllContainments();
            Function<IEObjectDescription, ICompletionProposal> factory = getProposalFactory(grammarAccess.getValidIDRule().getName(), context);
            completeStructuralFeatures(context, factory, acceptor, containments);
        }
    }
    super.completeAction_Feature(model, assignment, context, acceptor);
}
Also used : Action(org.eclipse.xtext.Action) EClass(org.eclipse.emf.ecore.EClass) ICompletionProposal(org.eclipse.jface.text.contentassist.ICompletionProposal) EClassifier(org.eclipse.emf.ecore.EClassifier) EReference(org.eclipse.emf.ecore.EReference) IEObjectDescription(org.eclipse.xtext.resource.IEObjectDescription)

Example 22 with EClassifier

use of org.eclipse.emf.ecore.EClassifier in project xtext-eclipse by eclipse.

the class XtextProposalProvider method completeParserRule.

private void completeParserRule(EObject model, final ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
    final Grammar grammar = GrammarUtil.getGrammar(model);
    for (AbstractMetamodelDeclaration metamodelDeclaration : grammar.getMetamodelDeclarations()) {
        if (metamodelDeclaration instanceof ReferencedMetamodel) {
            ReferencedMetamodel referencedMetamodel = (ReferencedMetamodel) metamodelDeclaration;
            EPackage ePackage = referencedMetamodel.getEPackage();
            if (ePackage != null) {
                for (EClassifier eClassifier : ePackage.getEClassifiers()) {
                    if (isProposeParserRule(eClassifier, grammar)) {
                        String proposal = eClassifier.getName();
                        String metamodelAlias = referencedMetamodel.getAlias();
                        if (metamodelAlias != null) {
                            proposal = proposal + " returns " + metamodelAlias + "::" + eClassifier.getName();
                        }
                        proposal = proposal + ": \n;\n";
                        ConfigurableCompletionProposal completionProposal = (ConfigurableCompletionProposal) createCompletionProposal(proposal, eClassifier.getName() + " - parser rule", getImage(XtextFactory.eINSTANCE.createParserRule()), context);
                        if (completionProposal != null) {
                            completionProposal.setCursorPosition(proposal.length() - 3);
                            acceptor.accept(completionProposal);
                        }
                    }
                }
            }
        }
    }
}
Also used : ConfigurableCompletionProposal(org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal) EClassifier(org.eclipse.emf.ecore.EClassifier) Grammar(org.eclipse.xtext.Grammar) StyledString(org.eclipse.jface.viewers.StyledString) AbstractMetamodelDeclaration(org.eclipse.xtext.AbstractMetamodelDeclaration) ReferencedMetamodel(org.eclipse.xtext.ReferencedMetamodel) EPackage(org.eclipse.emf.ecore.EPackage)

Example 23 with EClassifier

use of org.eclipse.emf.ecore.EClassifier in project xtext-eclipse by eclipse.

the class XtextGrammarRefactoringIntegrationTest method testRefactorXtextGrammarWithGeneratedClassifierAndModelWithRefToClassifier.

@Test
public void testRefactorXtextGrammarWithGeneratedClassifierAndModelWithRefToClassifier() throws Exception {
    ResourceSet rs = resourceSetProvider.get();
    EcoreFactory eInstance = EcoreFactory.eINSTANCE;
    Resource ecoreModelResource = createEcoreModel(rs, ecoreURI, initialModelRoot);
    EClass greetingClass = getGreetingClass(ecoreModelResource);
    EReference greetingRefLocal = getReferenceoGreeting(ecoreModelResource, greetingClass);
    String greetingClassFragment = EcoreUtil.getURI(greetingClass).fragment();
    String greetingRefFragment = EcoreUtil.getURI(greetingRefLocal).fragment();
    EPackage refPackage = eInstance.createEPackage();
    refPackage.setName("myDsl2");
    refPackage.setNsPrefix("myDsl2");
    refPackage.setNsURI("http://testrefactoring2");
    EClass modelRefClass = eInstance.createEClass();
    refPackage.getEClassifiers().add(modelRefClass);
    modelRefClass.setName("ModelRef");
    EReference reference = eInstance.createEReference();
    reference.setName("ref");
    reference.setLowerBound(0);
    reference.setUpperBound(-1);
    reference.setEType(greetingClass);
    modelRefClass.getEStructuralFeatures().add(reference);
    Resource refToGreetingResource = createEcoreModel(rs, URI.createPlatformResourceURI(TEST_PROJECT + "/src/org/xtext/example/mydsl/" + "MyDsl2.ecore", true), refPackage);
    refToGreetingResource.unload();
    ecoreModelResource.unload();
    waitForBuild();
    waitForDisplay();
    XtextEditor editor = openEditor(grammarFile);
    doRefactoring(editor);
    waitForBuild();
    checkConsistenceOfGrammar(editor);
    ecoreModelResource.load(null);
    String renamedGreetingClassFragment = greetingClassFragment.replaceFirst(CLASSIFIERNAME, REFACTOREDCLASSIFIERNAME);
    EObject renamedGreetingClass = ecoreModelResource.getEObject(renamedGreetingClassFragment);
    assertNotNull(renamedGreetingClass);
    assertEquals(REFACTOREDCLASSIFIERNAME, SimpleAttributeResolver.NAME_RESOLVER.apply(renamedGreetingClass));
    EReference greetingReference = (EReference) ecoreModelResource.getEObject(greetingRefFragment);
    EClassifier eType = greetingReference.getEType();
    assertFalse(eType.eIsProxy());
    assertEquals(REFACTOREDCLASSIFIERNAME, eType.getName());
    refToGreetingResource.load(null);
    EReference externalReferenceToGreeting = getReferenceoGreeting(refToGreetingResource, eType);
    assertFalse(externalReferenceToGreeting.getEType().eIsProxy());
    assertEquals(REFACTOREDCLASSIFIERNAME, externalReferenceToGreeting.getEType().getName());
}
Also used : EClass(org.eclipse.emf.ecore.EClass) XtextEditor(org.eclipse.xtext.ui.editor.XtextEditor) EObject(org.eclipse.emf.ecore.EObject) EcoreFactory(org.eclipse.emf.ecore.EcoreFactory) XtextResource(org.eclipse.xtext.resource.XtextResource) Resource(org.eclipse.emf.ecore.resource.Resource) EClassifier(org.eclipse.emf.ecore.EClassifier) ResourceSet(org.eclipse.emf.ecore.resource.ResourceSet) EReference(org.eclipse.emf.ecore.EReference) EPackage(org.eclipse.emf.ecore.EPackage) AbstractLinkedEditingIntegrationTest(org.eclipse.xtext.ui.testing.AbstractLinkedEditingIntegrationTest) Test(org.junit.Test)

Example 24 with EClassifier

use of org.eclipse.emf.ecore.EClassifier in project xtext-eclipse by eclipse.

the class GrammarTest method checkConcreteImplRule.

private AbstractRule checkConcreteImplRule(Grammar grammar, String ruleName) {
    AbstractRule concreteRule = GrammarUtil.findRuleForName(grammar, ruleName);
    assertNotNull(concreteRule);
    EClassifier returnType = ((ParserRule) concreteRule).getType().getClassifier();
    String returnTypeName = getClassifierName(returnType);
    assertEquals(ruleName, returnTypeName + "_Impl");
    List<Assignment> assignments = GrammarUtil.containedAssignments(concreteRule);
    assertEquals(1, assignments.size());
    assertEquals("name", assignments.get(0).getFeature());
    assertEquals("=", assignments.get(0).getOperator());
    List<Action> containedActions = GrammarUtil.containedActions(concreteRule);
    assertEquals(1, containedActions.size());
    assertEquals(returnTypeName, getClassifierName(containedActions.get(0).getType().getClassifier()));
    List<Keyword> containedKeywords = GrammarUtil.containedKeywords(concreteRule);
    assertEquals(1, containedKeywords.size());
    assertEquals(returnTypeName, containedKeywords.get(0).getValue());
    return concreteRule;
}
Also used : Assignment(org.eclipse.xtext.Assignment) Action(org.eclipse.xtext.Action) Keyword(org.eclipse.xtext.Keyword) EClassifier(org.eclipse.emf.ecore.EClassifier) AbstractRule(org.eclipse.xtext.AbstractRule)

Example 25 with EClassifier

use of org.eclipse.emf.ecore.EClassifier in project xtext-eclipse by eclipse.

the class XtextProposalProvider method createClassifierProposals.

private void createClassifierProposals(AbstractMetamodelDeclaration declaration, EObject model, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
    String alias = declaration.getAlias();
    QualifiedName prefix = (!Strings.isEmpty(alias)) ? QualifiedName.create(getValueConverter().toString(alias, grammarAccess.getValidIDRule().getName())) : null;
    boolean createDatatypeProposals = !(model instanceof AbstractElement) && modelOrContainerIs(model, AbstractRule.class);
    boolean createEnumProposals = !(model instanceof AbstractElement) && modelOrContainerIs(model, EnumRule.class);
    boolean createClassProposals = modelOrContainerIs(model, ParserRule.class, CrossReference.class, Action.class);
    Function<IEObjectDescription, ICompletionProposal> factory = new DefaultProposalCreator(context, null, classifierQualifiedNameConverter);
    for (EClassifier classifier : declaration.getEPackage().getEClassifiers()) {
        if (classifier instanceof EDataType && createDatatypeProposals || classifier instanceof EEnum && createEnumProposals || classifier instanceof EClass && createClassProposals) {
            String classifierName = getValueConverter().toString(classifier.getName(), grammarAccess.getValidIDRule().getName());
            QualifiedName proposalQualifiedName = (prefix != null) ? prefix.append(classifierName) : QualifiedName.create(classifierName);
            IEObjectDescription description = EObjectDescription.create(proposalQualifiedName, classifier);
            ConfigurableCompletionProposal proposal = (ConfigurableCompletionProposal) factory.apply(description);
            if (proposal != null) {
                if (prefix != null)
                    proposal.setDisplayString(classifier.getName() + " - " + alias);
                proposal.setPriority(proposal.getPriority() * 2);
            }
            acceptor.accept(proposal);
        }
    }
}
Also used : AbstractElement(org.eclipse.xtext.AbstractElement) EDataType(org.eclipse.emf.ecore.EDataType) QualifiedName(org.eclipse.xtext.naming.QualifiedName) EClassifier(org.eclipse.emf.ecore.EClassifier) StyledString(org.eclipse.jface.viewers.StyledString) EEnum(org.eclipse.emf.ecore.EEnum) IEObjectDescription(org.eclipse.xtext.resource.IEObjectDescription) EnumRule(org.eclipse.xtext.EnumRule) EClass(org.eclipse.emf.ecore.EClass) ConfigurableCompletionProposal(org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal) ICompletionProposal(org.eclipse.jface.text.contentassist.ICompletionProposal) AbstractRule(org.eclipse.xtext.AbstractRule)

Aggregations

EClassifier (org.eclipse.emf.ecore.EClassifier)192 EClass (org.eclipse.emf.ecore.EClass)132 Test (org.junit.Test)81 EPackage (org.eclipse.emf.ecore.EPackage)75 StringConcatenation (org.eclipse.xtend2.lib.StringConcatenation)61 EObject (org.eclipse.emf.ecore.EObject)23 EReference (org.eclipse.emf.ecore.EReference)21 AbstractRule (org.eclipse.xtext.AbstractRule)19 EStructuralFeature (org.eclipse.emf.ecore.EStructuralFeature)18 Grammar (org.eclipse.xtext.Grammar)16 EDataType (org.eclipse.emf.ecore.EDataType)13 XtextResource (org.eclipse.xtext.resource.XtextResource)12 AbstractElement (org.eclipse.xtext.AbstractElement)11 EEnum (org.eclipse.emf.ecore.EEnum)8 ParserRule (org.eclipse.xtext.ParserRule)8 EAttribute (org.eclipse.emf.ecore.EAttribute)7 ResourceSet (org.eclipse.emf.ecore.resource.ResourceSet)7 AbstractMetamodelDeclaration (org.eclipse.xtext.AbstractMetamodelDeclaration)7 Assignment (org.eclipse.xtext.Assignment)7 ArrayList (java.util.ArrayList)6