Home » Modeling » TMF (Xtext) » Could not invoke method: org.eclipse.xtext.xbase.lib.BooleanExtensions.operator_and(boolean,boolean)([Solved] Xtext grammar with xbase extension, XExpressions can not be evaluated)
| Could not invoke method: org.eclipse.xtext.xbase.lib.BooleanExtensions.operator_and(boolean,boolean) [message #890495] |
Fri, 22 June 2012 08:26  |
masija . Messages: 59 Registered: July 2010 |
Member |
|
|
Hi @all,
I am developing a small expression language.
An example could look like this:
Constraint myConstraint{
referenceToAnotherModel modelElement1 && modelElement2
}
For this I map the Object referenceToAnotherModel with the JvmModelInferer to Java, and add a boolean field for each model element.
If I try to interpret the constraints, everything works fine for one model element.
As soon as I use expressions with &&, || or ! I get some java.lang.IllegalStateExceptions. For example "Could not invoke method: org.eclipse.xtext.xbase.lib.BooleanExtensions.operator_and(boolean,boolean) on instance: null" Even if Ijust use !true as an expression.
The project has a reference to the xtext.xbase.lib (2.3) and the xbase examples work just fine...
My first thought was, that my implementation of XbaseInterpreter was wron, but even wehen I remove it, and just use the standard interpreter, these errors occur.
If you have any help for me, I would be very grateful 
Best regards,
masija
[Updated on: Mon, 25 June 2012 05:12] Report message to a moderator
|
|
|
| Re: Could not invoke method: org.eclipse.xtext.xbase.lib.BooleanExtensions.operator_and(boolean,bool [message #890690 is a reply to message #890495] |
Fri, 22 June 2012 17:02   |
Jan Kohnlein Messages: 570 Registered: July 2009 |
Senior Member |
|
|
Have you overwritten any rules from the Xbase grammar?
Am 22.06.12 14:26, schrieb masija .:
> Hi @all,
>
> I am developing a small expression language.
> An example could look like this:
>
> Constraint myConstraint{
> referenceToAnotherModel modelElement1 && modelElement2
> }
>
> For this I map the Object referenceToAnotherModel with the
> JvmModelInferer to Java, and add a boolean field for each model element.
> If I try to interpret the constraints, everything works fine for one
> model element.
> As soon as I use expressions with &&, || or ! I get some
> java.lang.IllegalStateExceptions. For example "Could not invoke method:
> org.eclipse.xtext.xbase.lib.BooleanExtensions.operator_and(boolean,boolean)
> on instance: null" Even if Ijust use !true as an expression.
>
> The project has a reference to the xtext.xbase.lib (2.3) and the xbase
> examples work just fine...
>
> My first thought was, that my implementation of XbaseInterpreter was
> wron, but even wehen I remove it, and just use the standard interpreter,
> these errors occur.
>
> If you have any help for me, I would be very grateful ;)
>
> Best regards,
> masija
--
Need professional support for Eclipse Modeling?
Go visit: http://xtext.itemis.com
|
|
|
| Re: Could not invoke method: org.eclipse.xtext.xbase.lib.BooleanExtensions.operator_and(boolean,bool [message #890871 is a reply to message #890690] |
Sat, 23 June 2012 05:31   |
masija . Messages: 59 Registered: July 2010 |
Member |
|
|
Hi Jan, first of all, thanks for your reply, but no I haven't overwritten rules from the xbase grammar...
My grammar looks like this:
grammar my.grammar.Grammar with org.eclipse.xtext.xbase.Xbase
generate grammar "http://myGrammar/Grammar"
"uri.of.the.referenced.Model.ecore" as otherModel
Model:
imports+=Import+
constraint+=Constraint+
;
Constraint:
'constraint' name=ID '{'
ref=[otherModel::Entity|FQN]
query=XExpression
'}'
;
Import:
'import' importedNamespace=FqnWithWildCard;
FqnWithWildCard:
FQN ('.*')?;
FQN:
ID ('.' ID)*;
So far, i created a JvmModelInferer which maps the imported entities model elements to boolean fields.
def dispatch void infer(Constraint element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) {
if(element.ref != null )
if(element.ref.eIsProxy) {
EcoreUtil::resolve(element.ref,element.eResource.resourceSet)
element.eResource.resourceSet.getResource(EcoreUtil::getURI(element.ref).trimFragment,true)
EcoreUtil::resolve(element.ref,element.eResource.resourceSet)
}
acceptor.accept(element.ref.toClass(element.ref.id)).initializeLater([
var f = element.ref.root.toField(element.ref.root.id,element.ref.root.newTypeRef(Boolean::TYPE))
f.setVisibility(JvmVisibility::PUBLIC)
members += f
for (group: element.ref.root.children){
for( feature: group.features ) {
var cf = feature.toField(feature.id,feature.newTypeRef(Boolean::TYPE))
cf.setVisibility(JvmVisibility::PUBLIC)
members += cf
if (!feature.children.empty){
members+= addChildFeaturesAsMembers(feature, members)
}
}
members+=element.toMethod("checkConstraint",element.newTypeRef(Boolean::TYPE)) [
body = element.query
]
])
}
}
def EList<JvmMember> addChildFeaturesAsMembers(Feature feature, EList<JvmMember> members){
val groups = feature.children
var counter = 0
while (counter < groups.size){
for (childFeature: groups.get(counter).features){
var cf = childFeature.toField(childFeature.id,childFeature.newTypeRef(Boolean::TYPE))
cf.setVisibility(JvmVisibility::PUBLIC)
members += cf
if (!childFeature.children.empty){
members+= addChildFeaturesAsMembers(childFeature, members)
}
}
counter = counter+1
}
return members
}
After that I created a an IdentifiableSimpleNameProvider
public class MyGrammarIdentifiableSimpleNameProvider extends
IdentifiableSimpleNameProvider {
@Override
public String getSimpleName(JvmIdentifiableElement element) {
if (element instanceof JvmGenericType)
return "this";
return super.getSimpleName(element);
}
}
and an interpreter which overrides the method featureCallField and returns basically true or false, dependent on some other models content... here is a simplified version
public class MyGrammarInterpreter extends XbaseInterpreter {
@Inject
private IJvmModelAssociations jvmModelAssociator;
@Override
protected Object featureCallField(JvmField jvmField, Object receiver) {
if(receiver instanceof Entity) {
return true
}
return super.featureCallField(jvmField, receiver);
}
}
The interpreter and the name provider were both bound in the runtime module... Perhaps this information provides some valuable insight to understand my problem
[Updated on: Sat, 23 June 2012 09:25] Report message to a moderator
|
|
| |
Goto Forum:
Current Time: Tue May 21 22:35:48 EDT 2013
Powered by FUDForum. Page generated in 0.02133 seconds
|