| Summary: | [Xtend] StackoverflowError during building | ||
|---|---|---|---|
| Product: | [Tools] Xtend | Reporter: | Sven Efftinge <sven.efftinge> |
| Component: | Core | Assignee: | Project Inbox <xtend-inbox> |
| Status: | CLOSED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | eclipse, jan, sebastian.zarnekow, thsoft |
| Version: | 2.2.0 | Flags: | sven.efftinge:
kepler+
|
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Mac OS X - Carbon (unsup.) | ||
| Whiteboard: | |||
|
Description
Sven Efftinge
I think we should close this one as I don't have a clue on what code snippet may have caused this one. Please reopen if you can reproduce it. Encountered this using Xtend 2.3.1.v201208210947 on Eclipse 3.8.1.M20120914-1540! I propose reopening this issue. The cause is a "self-referencing" type argument.
abstract class AbstractFoo<A, B> {
}
class Foo<A> extends AbstractFoo<A, Foo<A>> {
def Foo<A> foo() {
new Foo<A>
}
}
The exact exception is:
java.lang.StackOverflowError
at java.util.HashMap.put(HashMap.java:402)
at com.google.common.collect.ForwardingMap.put(ForwardingMap.java:106)
at org.eclipse.xtext.common.types.util.TypeArgumentContextProvider$PrimitiveAwareMap.put(TypeArgumentContextProvider.java:86)
at org.eclipse.xtext.common.types.util.TypeArgumentContextProvider$5.put(TypeArgumentContextProvider.java:645)
at org.eclipse.xtext.common.types.util.TypeArgumentContextProvider$PrimitiveAwareMap.put(TypeArgumentContextProvider.java:1)
at org.eclipse.xtext.common.types.util.TypeArgumentContextProvider$1.doVisitParameterizedTypeReference(TypeArgumentContextProvider.java:245)
at org.eclipse.xtext.common.types.util.TypeArgumentContextProvider$1.doVisitParameterizedTypeReference(TypeArgumentContextProvider.java:1)
at org.eclipse.xtext.common.types.impl.JvmParameterizedTypeReferenceImplCustom.accept(JvmParameterizedTypeReferenceImplCustom.java:53)
at org.eclipse.xtext.common.types.util.AbstractTypeReferenceVisitor.visit(AbstractTypeReferenceVisitor.java:32)
at org.eclipse.xtext.common.types.util.TypeArgumentContextProvider$1.doVisitParameterizedTypeReference(TypeArgumentContextProvider.java:275)
at
...infinite recursion starts here...
reopening as suggested in comment #2 Seems fixed in 2.4.2, please close. see comment #4 I believe this is not fully fixed yet. I just encountered the following stacktrace in 2.4.2.v201306120542: > java.lang.StackOverflowError > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.getBoundTypeArgument(TypeParameterSubstitutor.java:118) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:100) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:1) > at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:393) > at org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference.accept(LightweightTypeReference.java:524) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.visitTypeArgument(TypeParameterSubstitutor.java:91) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.visitTypeArgument(TypeParameterSubstitutor.java:84) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:110) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:104) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:1) > at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:393) > at org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference.accept(LightweightTypeReference.java:524) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.getBoundTypeArgument(TypeParameterSubstitutor.java:122) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:100) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:1) > at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:393) > at org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference.accept(LightweightTypeReference.java:524) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.visitTypeArgument(TypeParameterSubstitutor.java:91) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.visitTypeArgument(TypeParameterSubstitutor.java:84) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:110) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:104) > at org.eclipse.xtext.xbase.typesystem.util.TypeParameterSubstitutor.doVisitParameterizedTypeReference(TypeParameterSubstitutor.java:1) > at org.eclipse.xtext.xbase.typesystem.references.ParameterizedTypeReference.accept(ParameterizedTypeReference.java:393) > at org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference.accept(LightweightTypeReference.java:524) > // continues to loop back and forth... This is caused by the following setup: Two java interfaces with self-referential parameters: > public interface HierarchyElement<T extends HierarchyElement<T>> { > int getDepth(); > } > > public interface Foo<T extends HierarchyElement<T>> { > foo(T hierarchyElement); > } One Xtend class with anonymous lambda implementations: > final class Foos { > public static val Foo<?> BAR = [ > println(it.depth) > ] Requested via bug 522520. -M. Requested via bug 522520. -M. |