Xtend2 fails initializing String[] [message #967443] |
Thu, 01 November 2012 15:22  |
Eclipse User |
|
|
|
Hello,
When initalizing a String[] in Xtend 2 (using Xtext 2.3.1), Eclipse does not compile.
Using the org.eclipse.xtext.example.domainmodel.tests, I added some simple lines of code to ComplierTest.xtend in order to isolate the problem.
The syntax which causes the problem:
import org.eclipse.emf.common.util.BasicEList
[...]
val test = new BasicEList<String>
test.addAll({'bla'})
However, running with addAll():
val test = new BasicEList<String>
var arr = 'a,b,c'.split(',')
test.addAll(arr)
val arr2 = {'bla2'}
test.addAll(arr2)
The behavior is quite frustating, because it took a very long time until I found the problem. No error message is shown in the Eclipse GUI. The Java class is missing in the xtend-gen folder, and building the workspace does not show "100%" when having such an array initializer.
The Eclipse log file shows:
!ENTRY org.apache.log4j 4 0 2012-11-01 20:07:23.328
!MESSAGE org.eclipse.xtext.builder.impl.XtextBuilder - JvmSynonymTypeReference: JvmGenericArrayTypeReference: java.lang.String[] | JvmDelegateTypeReference: JvmParameterizedTypeReference: java.lang.String
!STACK 0
java.lang.IllegalArgumentException: JvmSynonymTypeReference: JvmGenericArrayTypeReference: java.lang.String[] | JvmDelegateTypeReference: JvmParameterizedTypeReference: java.lang.String
at org.eclipse.xtext.xbase.compiler.TypeReferenceSerializer.serialize(TypeReferenceSerializer.java:171)
at org.eclipse.xtext.xbase.compiler.TypeReferenceSerializer.serialize(TypeReferenceSerializer.java:154)
at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.compileAsJavaExpression(AbstractXbaseCompiler.java:140)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.appendArgument(FeatureCallCompiler.java:800)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.appendArguments(FeatureCallCompiler.java:768)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.appendFeatureCall(FeatureCallCompiler.java:710)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.featureCalltoJavaExpression(FeatureCallCompiler.java:267)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler._toJavaStatement(FeatureCallCompiler.java:135)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.doInternalToJavaStatement(FeatureCallCompiler.java:113)
at org.eclipse.xtext.xbase.compiler.XbaseCompiler.doInternalToJavaStatement(XbaseCompiler.java:127)
at org.eclipse.xtend.core.compiler.XtendCompiler.doInternalToJavaStatement(XtendCompiler.java:308)
at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.internalToJavaStatement(AbstractXbaseCompiler.java:289)
at org.eclipse.xtext.xbase.compiler.XbaseCompiler._toJavaStatement(XbaseCompiler.java:152)
[...]
I assume this is a bug.
Either the syntax should be forbidden and cause error messages in the Eclipse GUI, or the compilation should be able to handle this syntax (which was ported from Xtend1 to Xtend2 without changes):
bo.attributes != null ? setAttributes({bo.attributes}) : null
//converted to
if (bo.attributes != null) setAttributes({bo.attributes})
An hidden error message without telling me the problem isn't a good thing...
[Updated on: Thu, 01 November 2012 15:24] by Moderator
|
|
|
|
Re: Xtend2 fails initializing String[] [message #967624 is a reply to message #967443] |
Thu, 01 November 2012 18:35   |
Eclipse User |
|
|
|
Michael,
Christian is right, {} is not the notation for arrays. However, the
exception is a bug. Could you please file a ticket. Thanks.
Best regards,
Sebastian
Am 01.11.12 20:22, schrieb Michael Veit:
> Hello,
>
> When initalizing a String[] in Xtend 2 (using Xtext 2.3.1), Eclipse does
> not compile.
> Using the org.eclipse.xtext.example.domainmodel.tests, I added some
> simple lines of code to ComplierTest.xtend in order to isolate the problem.
> The syntax which causes the problem:
> test.addAll({'bla'})
> However, running with addAll():
> var arr = 'a,b,c'.split(',')
> test.addAll(arr)
> val arr2 = {'bla2'}
> test.addAll(arr2)
>
> The behavior is quite frustating, because it took a very long time until
> I found the problem. No error message is shown in the Eclipse GUI. The
> Java class is missing in the xtend-gen folder, and building the
> workspace does not show "100%" when having such an array initializer.
> The Eclipse log file shows:
> !ENTRY org.apache.log4j 4 0 2012-11-01 20:07:23.328
> !MESSAGE org.eclipse.xtext.builder.impl.XtextBuilder -
> JvmSynonymTypeReference: JvmGenericArrayTypeReference:
> java.lang.String[] | JvmDelegateTypeReference:
> JvmParameterizedTypeReference: java.lang.String
>
> !STACK 0
> java.lang.IllegalArgumentException: JvmSynonymTypeReference:
> JvmGenericArrayTypeReference: java.lang.String[] |
> JvmDelegateTypeReference: JvmParameterizedTypeReference: java.lang.String
> at
> org.eclipse.xtext.xbase.compiler.TypeReferenceSerializer.serialize(TypeReferenceSerializer.java:171)
>
> at
> org.eclipse.xtext.xbase.compiler.TypeReferenceSerializer.serialize(TypeReferenceSerializer.java:154)
>
> at
> org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.compileAsJavaExpression(AbstractXbaseCompiler.java:140)
>
> at
> org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.appendArgument(FeatureCallCompiler.java:800)
>
> at
> org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.appendArguments(FeatureCallCompiler.java:768)
>
> at
> org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.appendFeatureCall(FeatureCallCompiler.java:710)
>
> at
> org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.featureCalltoJavaExpression(FeatureCallCompiler.java:267)
>
> at
> org.eclipse.xtext.xbase.compiler.FeatureCallCompiler._toJavaStatement(FeatureCallCompiler.java:135)
>
> at
> org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.doInternalToJavaStatement(FeatureCallCompiler.java:113)
>
> at
> org.eclipse.xtext.xbase.compiler.XbaseCompiler.doInternalToJavaStatement(XbaseCompiler.java:127)
>
> at
> org.eclipse.xtend.core.compiler.XtendCompiler.doInternalToJavaStatement(XtendCompiler.java:308)
>
> at
> org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.internalToJavaStatement(AbstractXbaseCompiler.java:289)
>
> at
> org.eclipse.xtext.xbase.compiler.XbaseCompiler._toJavaStatement(XbaseCompiler.java:152)
>
> [...]
>
> I assume this is a bug.
> Either the syntax should be forbidden and cause error messages in the
> Eclipse GUI, or the compilation should be able to handle this syntax
> (which was ported from Xtend1 to Xtend2 without changes):
> bo.attributes != null ? setAttributes({bo.attributes}) : null
> //converted to
> if (bo.attributes != null) setAttributes({bo.attributes})
>
> An hidden error message without telling me the problem isn't a good
> thing... :?
|
|
|
|
Re: Xtend2 fails initializing String[] [message #968203 is a reply to message #968051] |
Fri, 02 November 2012 05:28  |
Eclipse User |
|
|
|
Hi
(1) i guess the answer is: we need real blocks
the replacement is newArrayList("A","B","C")
(2) it does work through some extension magic (org.eclipse.xtext.xbase.lib.CollectionExtensions.addAll(Collection<? super T>, T...))
and not java.util.List.addAll
|
|
|
Powered by
FUDForum. Page generated in 0.04964 seconds