Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 361254 - [Xtend] StackoverflowError during building
Summary: [Xtend] StackoverflowError during building
Status: CLOSED FIXED
Alias: None
Product: Xtend
Classification: Tools
Component: Core (show other bugs)
Version: 2.2.0   Edit
Hardware: PC Mac OS X - Carbon (unsup.)
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-10-18 08:50 EDT by Sven Efftinge CLA
Modified: 2017-10-31 11:19 EDT (History)
4 users (show)

See Also:
sven.efftinge: kepler+


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sven Efftinge CLA 2011-10-18 08:50:37 EDT
Not reproducible but I got this one on save, and it was logged by the builder:

java.lang.StackOverflowError
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$CopyingTypeReferenceVisitor.doVisitParameterizedTypeReference(TypeArgumentContext.java:90)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$2.doVisitParameterizedTypeReference(TypeArgumentContext.java:328)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$CopyingTypeReferenceVisitor.doVisitParameterizedTypeReference(TypeArgumentContext.java:1)
	at org.eclipse.xtext.common.types.impl.JvmParameterizedTypeReferenceImplCustom.accept(JvmParameterizedTypeReferenceImplCustom.java:59)
	at org.eclipse.xtext.common.types.util.AbstractTypeReferenceVisitorWithParameter.visit(AbstractTypeReferenceVisitorWithParameter.java:32)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$CopyingTypeReferenceVisitor.doVisitParameterizedTypeReference(TypeArgumentContext.java:106)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$2.doVisitParameterizedTypeReference(TypeArgumentContext.java:328)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$CopyingTypeReferenceVisitor.doVisitParameterizedTypeReference(TypeArgumentContext.java:1)
	at org.eclipse.xtext.common.types.impl.JvmParameterizedTypeReferenceImplCustom.accept(JvmParameterizedTypeReferenceImplCustom.java:59)
	at org.eclipse.xtext.common.types.util.AbstractTypeReferenceVisitorWithParameter.visit(AbstractTypeReferenceVisitorWithParameter.java:32)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$CopyingTypeReferenceVisitor.doVisitParameterizedTypeReference(TypeArgumentContext.java:99)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$2.doVisitParameterizedTypeReference(TypeArgumentContext.java:328)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$CopyingTypeReferenceVisitor.doVisitParameterizedTypeReference(TypeArgumentContext.java:1)
	at org.eclipse.xtext.common.types.impl.JvmParameterizedTypeReferenceImplCustom.accept(JvmParameterizedTypeReferenceImplCustom.java:59)
	at org.eclipse.xtext.common.types.util.AbstractTypeReferenceVisitorWithParameter.visit(AbstractTypeReferenceVisitorWithParameter.java:32)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$CopyingTypeReferenceVisitor.doVisitParameterizedTypeReference(TypeArgumentContext.java:106)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$2.doVisitParameterizedTypeReference(TypeArgumentContext.java:328)
	at org.eclipse.xtext.common.types.util.TypeArgumentContext$CopyingTypeReferenceVisitor.doVisitParameterizedTypeReference(TypeArgumentContext.java:1)
	at org.eclipse.xtext.common.types.impl.JvmParameterizedTypeReferenceImplCustom.accept(JvmParameterizedTypeReferenceImplCustom.java:59)
Comment 1 Sebastian Zarnekow CLA 2012-05-22 11:33:03 EDT
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.
Comment 2 Dénes Harmath CLA 2012-10-10 06:55:21 EDT
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...
Comment 3 Sven Efftinge CLA 2012-10-10 07:08:53 EDT
reopening as suggested in comment #2
Comment 4 Dénes Harmath CLA 2013-07-01 10:35:23 EDT
Seems fixed in 2.4.2, please close.
Comment 5 Jan Koehnlein CLA 2013-07-01 10:50:37 EDT
see comment #4
Comment 6 Bernhard Frauendienst CLA 2013-07-05 05:14:09 EDT
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)
>    ]
Comment 7 Eclipse Webmaster CLA 2017-10-31 11:07:49 EDT
Requested via bug 522520.

-M.
Comment 8 Eclipse Webmaster CLA 2017-10-31 11:19:18 EDT
Requested via bug 522520.

-M.