Xtext imports [message #1413972] |
Fri, 29 August 2014 18:35  |
Eclipse User |
|
|
|
Does anybody know how to generate some imports or package name in java from dsl but I don't want write imports in my dsl.
For example
from example.mydsl:
Hello Marko!
Hello Michael!
to example.java:
import java.lang.String;
import my.package.*;
import ...
@SuppressWarnings("all")
public class MyGreetings {
public String helloMarko() {
return "Hello Marko";
}
public String helloMichael() {
return "Hello Michael";
}
}
Thanks in advance,
Marko
|
|
|
|
Re: Xtext imports [message #1417749 is a reply to message #1414156] |
Fri, 05 September 2014 20:32   |
Eclipse User |
|
|
|
Thank you very much Christian,
I use xbase and I tried example from attach but it doesn't work because xtext 2.6 have no LocalVariableScopeContext.
Instead next codes:
@Override
protected IScope createLocalVarScope(IScope parentScope,
LocalVariableScopeContext scopeContext) {
if (scopeContext != null && scopeContext.getContext() != null) {
EObject context = scopeContext.getContext();
if (context instanceof Model) {
Model model = (Model) context;
return Scopes.scopeFor(model.getVarDeclarations());
}
}
return super.createLocalVarScope(parentScope, scopeContext);
}
I wrote:
@Override
protected List<ImportNormalizer> getImplicitImports(boolean ignoreCase) {
List<ImportNormalizer> temp=new ArrayList();
temp.add(new ImportNormalizer(QualifiedName.create("builtin","types","namespace"), true, ignoreCase));
return temp;
}
and
public class HelloXvarsRuntimeModule extends
org.xtext.example.helloxvars.AbstractHelloXvarsRuntimeModule {
@Override
public Class<? extends IScopeProvider> bindIScopeProvider() {
return HelloXvarsScopeProvider.class;
}
}
but it doesn't work. Can I call getImplicitImports(...) maybe in inferr class or something other?
Sorry if my questions are stupid, I'm still a begginer.
Thank you in advance very much,
Marko
Attachment: example.txt
(Size: 0.03KB, Downloaded 312 times)
|
|
|
|
|
Re: Xtext imports [message #1418798 is a reply to message #1418335] |
Sun, 07 September 2014 13:12   |
Eclipse User |
|
|
|
you should test it with something that works with imports from java lang e.g. the domain model example.
i dont know what todo either, but i thought it would work to do
protected List<ImportNormalizer> getImplicitImports(boolean ignoreCase) {
return Lists.<ImportNormalizer>newArrayList(
doCreateImportNormalizer(JAVA_LANG, true, false),
doCreateImportNormalizer(QualifiedName.create("your","package"), true, false),
doCreateImportNormalizer(XBASE_LIB, true, false));
}
but maybe it dont understand your problem in the first place
and it is in deed about generating and not about default imports ?!?
|
|
|
Re: Xtext imports [message #1420429 is a reply to message #1418798] |
Tue, 09 September 2014 21:15   |
Eclipse User |
|
|
|
Hi Christian,
Thank you very much for your answer! I tried it on next way:
in class MyDsl2ScopeProvider.xtend I have:
class MyDsl2ScopeProvider extends org.eclipse.xtext.xbase.scoping.XImportSectionNamespaceScopeProvider
{
override protected List<ImportNormalizer> getImplicitImports(boolean ignoreCase) {
System.out.println("Program is here...###########################")
return Lists.<ImportNormalizer>newArrayList(
doCreateImportNormalizer(JAVA_LANG, true, false),
doCreateImportNormalizer(QualifiedName.create("your","package"), true, false),
doCreateImportNormalizer(XBASE_LIB, true, false));
}
}
In class AbstractMyDsl2RuntimeModule.java instead
public void configureIScopeProviderDelegate(com.google.inject.Binder binder) {
binder.bind(org.eclipse.xtext.scoping.IScopeProvider.class).annotatedWith(Names.named(org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider.NAMED_DELEGATE)). to(org.eclipse.xtext.xbase.scoping.XImportSectionNamespaceScopeProvider.class);
}
I write:
public void configureIScopeProviderDelegate(com.google.inject.Binder binder) {
binder.bind(org.eclipse.xtext.scoping.IScopeProvider.class).annotatedWith(Names.named(org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider.NAMED_DELEGATE)). to(org.xtext.example.mydsl2.scoping.MyDsl2ScopeProvider.class);
}
Program enters in class MyDsl2ScopeProvider in method getImplicitImports (in my console I can see "Program is here...###########################") but in my generated java class have no implicit imports.
Also, I tried and next code in class MyDsl2RuntimeModule.java but unsuccessfully:
public class MyDsl2RuntimeModule extends org.xtext.example.mydsl2.AbstractMyDsl2RuntimeModule {
// @Override
@SuppressWarnings("restriction")
public Class<? extends org.eclipse.xtext.xbase.scoping.XImportSectionNamespaceScopeProvider> getImplicitImports(boolean ignoreCase) {
return MyDsl2ScopeProvider.class;
}
}
Do I need to change my xtext grammar or something else?
Also, importSection doesn't work.
grammar org.xtext.example.mydsl2.MyDsl2 with org.eclipse.xtext.xbase.Xbase
generate myDsl2 "http://www.xtext.org/example/mydsl2/MyDsl2"
Domainmodel:
importSection=XImportSection?
elements+=AbstractElement*;
AbstractElement:
PackageDeclaration | Entity;
PackageDeclaration:
'package' name=QualifiedName '{'
elements+=AbstractElement*
'}';
Entity:
'entity' name=ValidID
('extends' superType=JvmTypeReference)? '{'
features+=Feature*
'}';
Feature:
Property | Operation;
Property:
name=ValidID ':' type=JvmTypeReference;
Operation:
'op' name=ValidID
'('(params+=FullJvmFormalParameter
(',' params+=FullJvmFormalParameter)*)?')'
':' type=JvmTypeReference
body=XBlockExpression;
Sorry for long text,
Thank you in advance,
Marko
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.05488 seconds