Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 389590

Summary: OutOfMemoryError in xbase.lib.util.ToStringHelper
Product: [Modeling] TMF Reporter: Moritz Eysholdt <moritz.eysholdt>
Component: XtextAssignee: Project Inbox <tmf.xtext-inbox>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: st.oehme, sven.efftinge
Version: 2.4.0Keywords: helpwanted
Target Milestone: ---   
Hardware: PC   
OS: Mac OS X   
Whiteboard: v2.7

Description Moritz Eysholdt CLA 2012-09-14 05:47:01 EDT
The exception was thrown at me when calling ToStringHelper.toString for an instance of org.eclipse.xtext.nodemodel.impl.HiddenLeafNode.

The error occurs, when an object holds an iterable which has the iterable as one of its items.

This Java code reproduces the problem.

private static class Bar {
  private Iterable<Object> it = new Iterable<Object>() {
    public Iterator<Object> iterator() {
      return new Iterator<Object>() {

        boolean next = true;

        public boolean hasNext() {
          if (next) {
            next = false;
            return true;
          }
          return false;
        }

        public Object next() {
          return Bar.this.it;
        }

        public void remove() {
        }
      };
    };
  };

}

public static void main(String[] args) {
  try {
    System.out.println(new ToStringHelper().toString(new Bar()));
  } catch (Throwable e) {
    e.printStackTrace();
  }
}

java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2882)
	at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
	at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
	at java.lang.StringBuilder.append(StringBuilder.java:119)
	at org.eclipse.xtext.xbase.lib.util.ToStringHelper$IndentationAwareStringBuilder.newLine(ToStringHelper.java:62)
	at org.eclipse.xtext.xbase.lib.util.ToStringHelper.internalToString(ToStringHelper.java:162)
	at org.eclipse.xtext.xbase.lib.util.ToStringHelper.internalToString(ToStringHelper.java:163)
	at org.eclipse.xtext.xbase.lib.util.ToStringHelper.internalToString(ToStringHelper.java:163)
	at org.eclipse.xtext.xbase.lib.util.ToStringHelper.internalToString(ToStringHelper.java:163)
	at org.eclipse.xtext.xbase.lib.util.ToStringHelper.internalToString(ToStringHelper.java:163)
	at org.eclipse.xtext.xbase.lib.util.ToStringHelper.internalToString(ToStringHelper.java:163)
Comment 1 Stefan Oehme CLA 2014-08-21 13:43:18 EDT
The ToStringHelper class has had a recursion guard for quite some time.