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);
}
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);
}
}
}
}
}
}
}
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());
}
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;
}
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);
}
}
}
Aggregations