Ranides Atterwim 4 سال پیش
والد
کامیت
5711cea2a6

+ 5 - 10
assira.core/src/main/java/net/ranides/assira/reflection/impl/AClass.java

@@ -234,21 +234,16 @@ public abstract class AClass<T> implements IClass<T>, Serializable {
     
     @Override
     public final String toString() {
-        return asString(new HashSet<>(), this);
-    }
-
-    private static String asString(Set<String> visited, IClass<?> that) {
-        List<IClass<?>> params = that.params();
+        List<IClass<?>> params = params();
         if(params.isEmpty()) {
-            return that.name();
+            return name();
         }
         return new StrBuilder()
-            .append(that.name())
+            .append(name())
             .open("<",">",", ")
-            // @fixme this is temporary workaround for issue #40
-            .append(params, p -> visited.add(p.name()) ? asString(visited, p) : "#")
+            .append(params)
             .close()
             .toString();
     }
-    
+
 }

+ 1 - 1
assira.core/src/main/java/net/ranides/assira/reflection/impl/RPClass.java

@@ -44,7 +44,7 @@ public class RPClass<T> extends RClass<T> implements Serializable {
     
     @Override
     public List<IClass<?>> params() {
-        IContext c = context();
+        IContext c = super.context();
         return ListUtils.map(Arrays.asList(ptype.getActualTypeArguments()), c::typeinfo);
     }
     

+ 29 - 4
assira.core/src/test/java/net/ranides/assira/reflection/impl/AClassTest.java

@@ -10,6 +10,7 @@ import org.junit.Test;
 
 import net.ranides.assira.reflection.*;
 import net.ranides.assira.reflection.mockup.ForBeanModel;
+import net.ranides.assira.text.ResolveFormatUtils;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -130,10 +131,34 @@ public class AClassTest {
     public void testRecursiveString() {
         IClass<?> type = IClass.typeinfo(ThisSomething.class);
 
-        System.out.println(type.toString());
-        System.out.println(type.method("run1").get().toString());
-        System.out.println(type.method("run2").get().toString());
-        System.out.println(type.method("run3").get().toString());
+        String ex0 = ResolveFormatUtils.nformat(
+            "{this}<{float}>",
+            "this  = net.ranides.assira.reflection.impl.AClassTest$ThisSomething",
+            "float = java.lang.Float"
+        );
+
+        String ex1 = ResolveFormatUtils.nformat(
+            "void {some}<{float}>.run1({some}<{float}> x)",
+            "some  = net.ranides.assira.reflection.impl.AClassTest$Something",
+            "float = java.lang.Float"
+        );
+
+        String ex2 = ResolveFormatUtils.nformat(
+            "void {some}<{float}>.run2({some}<{some}<{float}>> x)",
+            "some  = net.ranides.assira.reflection.impl.AClassTest$Something",
+            "float = java.lang.Float"
+        );
+
+        String ex3 = ResolveFormatUtils.nformat(
+            "void {some}<{float}>.run3({some}<{some}<{some}<{float}>>> x)",
+            "some  = net.ranides.assira.reflection.impl.AClassTest$Something",
+            "float = java.lang.Float"
+        );
+
+        assertEquals(ex0, type.toString());
+        assertEquals(ex1, type.method("run1").get().toString());
+        assertEquals(ex2, type.method("run2").get().toString());
+        assertEquals(ex3, type.method("run3").get().toString());
     }
 
     public class ThisSomething extends Something<Float> { };