fix for (very likely code with warnings)

java.lang.StackOverflowError
	at
org.eclipse.dltk.internal.javascript.ti.ElementValue.findMember(ElementValue.java:110)
	at
org.eclipse.dltk.internal.javascript.ti.ElementValue.findMemberA(ElementValue.java:100)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue$GetChildHandler.process(ImmutableValue.java:221)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue$GetChildHandler.process(ImmutableValue.java:1)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue.execute(ImmutableValue.java:89)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue.getChild(ImmutableValue.java:328)
	at
org.eclipse.dltk.internal.javascript.ti.ChildReference.getValue(ChildReference.java:41)
	at
org.eclipse.dltk.internal.javascript.ti.ChildReference.getValue(ChildReference.java:39)
	at
org.eclipse.dltk.internal.javascript.ti.AbstractReference.exists(AbstractReference.java:114)
	at
org.eclipse.dltk.javascript.typeinfo.RLocalType.getChild(RLocalType.java:86)
	at
org.eclipse.dltk.javascript.typeinfo.RLocalType.getDirectChild(RLocalType.java:52)
	at
org.eclipse.dltk.internal.javascript.ti.ElementValue.findMember(ElementValue.java:198)
	at
org.eclipse.dltk.internal.javascript.ti.ElementValue.findMemberA(ElementValue.java:100)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue$GetChildHandler.process(ImmutableValue.java:221)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue$GetChildHandler.process(ImmutableValue.java:1)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue.execute(ImmutableValue.java:89)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue.execute(ImmutableValue.java:92)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue.getChild(ImmutableValue.java:328)
	at
org.eclipse.dltk.internal.javascript.ti.ChildReference.getValue(ChildReference.java:41)
	at
org.eclipse.dltk.internal.javascript.ti.ChildReference.getValue(ChildReference.java:39)
	at
org.eclipse.dltk.internal.javascript.ti.AbstractReference.exists(AbstractReference.java:114)
	at
org.eclipse.dltk.javascript.typeinfo.RLocalType.getChild(RLocalType.java:86)
	at
org.eclipse.dltk.javascript.typeinfo.RLocalType.getDirectChild(RLocalType.java:52)
	at
org.eclipse.dltk.internal.javascript.ti.ElementValue.findMember(ElementValue.java:198)
	at
org.eclipse.dltk.internal.javascript.ti.ElementValue.findMemberA(ElementValue.java:100)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue$GetChildHandler.process(ImmutableValue.java:221)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue$GetChildHandler.process(ImmutableValue.java:1)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue.execute(ImmutableValue.java:89)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue.execute(ImmutableValue.java:92)
	at
org.eclipse.dltk.internal.javascript.ti.ImmutableValue.getChild(ImmutableValue.java:328)
	at
org.eclipse.dltk.internal.javascript.ti.ChildReference.getValue(ChildReference.java:41)
	at
org.eclipse.dltk.internal.javascript.ti.ChildReference.getValue(ChildReference.java:39)
	at
org.eclipse.dltk.internal.javascript.ti.AbstractReference.exists(AbstractReference.java:114)
	at
org.eclipse.dltk.javascript.typeinfo.RLocalType.getChild(RLocalType.java:86)
	at
org.eclipse.dltk.javascript.typeinfo.RLocalType.getDirectChild(RLocalType.java:52)
	at
org.eclipse.dltk.internal.javascript.ti.ElementValue.findMember(ElementValue.java:198)
	at
org.eclipse.dltk.internal.javascript.ti.ElementValue.findMemberA(ElementValue.java:100)
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/RLocalType.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/RLocalType.java
index c8dc5f1..1257501 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/RLocalType.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/RLocalType.java
@@ -48,8 +48,17 @@
 		return PhantomValueReference.REFERENCE;

 	}

 

+	private HashSet<String> recusionCheck = new HashSet<String>();

+	

 	public IValueReference getDirectChild(String name) {

-		return getChild(this, name, new HashSet<IRType>());

+		if (recusionCheck.contains(name))

+			return null;

+		recusionCheck.add(name);

+		try {

+			return getChild(this, name, new HashSet<IRType>());

+		} finally {

+			recusionCheck.remove(name);

+		}

 	}

 

 	/**

@@ -57,7 +66,7 @@
 	 * @param declaredTypes

 	 * @param set

 	 */

-	private IValueReference getChildFromDeclaredTypes(String name,

+	private static IValueReference getChildFromDeclaredTypes(String name,

 			JSTypeSet declaredTypes, HashSet<IRType> set) {

 		for (IRType irType : declaredTypes) {

 			if (irType instanceof RLocalType) {

@@ -69,7 +78,7 @@
 		return null;

 	}

 

-	private IValueReference getChild(RLocalType irType, String name,

+	private static IValueReference getChild(RLocalType irType, String name,

 			HashSet<IRType> set) {

 		if (set.add(irType)) {

 			IValueReference declaredValue = irType.getValue();