diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TClass.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TClass.java index 662f9bcd3..4c6251fba 100644 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TClass.java +++ b/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TClass.java @@ -17,6 +17,7 @@ package org.teavm.classlib.java.lang; import java.util.HashMap; import java.util.Map; + import org.teavm.classlib.impl.DeclaringClassMetadataGenerator; import org.teavm.classlib.java.lang.annotation.TAnnotation; import org.teavm.classlib.java.lang.reflect.TAnnotatedElement; @@ -32,6 +33,7 @@ import org.teavm.platform.metadata.ClassScopedMetadataProvider; */ public class TClass extends TObject implements TAnnotatedElement { TString name; + TString simpleName; private TClass componentType; private boolean componentTypeDirty = true; private PlatformClass platformClass; @@ -73,6 +75,30 @@ public class TClass extends TObject implements TAnnotatedElement { return name; } + public TString getSimpleName() { + if (simpleName == null) { + if (isArray()) { + simpleName = getComponentType().getSimpleName().concat(TString.wrap("[]")); + return simpleName; + } + String name = platformClass.getMetadata().getName(); + int lastDollar = name.lastIndexOf('$'); + if (lastDollar != -1) { + name = name.substring(lastDollar + 1); + if (name.charAt(0) >= '0' && name.charAt(0) <= '9') { + name = ""; + } + } else { + int lastDot = name.lastIndexOf('.'); + if (lastDot != -1) { + name = name.substring(lastDot + 1); + } + } + simpleName = TString.wrap(name); + } + return simpleName; + } + public boolean isPrimitive() { return platformClass.getMetadata().isPrimitive(); } diff --git a/teavm-tests/src/test/java/org/teavm/classlib/java/lang/ClassTest.java b/teavm-tests/src/test/java/org/teavm/classlib/java/lang/ClassTest.java index 8442bd37f..219dde718 100644 --- a/teavm-tests/src/test/java/org/teavm/classlib/java/lang/ClassTest.java +++ b/teavm-tests/src/test/java/org/teavm/classlib/java/lang/ClassTest.java @@ -38,6 +38,16 @@ public class ClassTest { assertEquals("[I", int[].class.getName()); } + @Test + public void classSimpleNameEvaluated() { + assertEquals("Object", Object.class.getSimpleName()); + assertEquals("Object[]", Object[].class.getSimpleName()); + assertEquals("int", int.class.getSimpleName()); + assertEquals("int[]", int[].class.getSimpleName()); + assertEquals("InnerClass", InnerClass.class.getSimpleName()); + assertEquals("", new Object(){}.getClass().getSimpleName()); + } + @Test public void objectClassNameEvaluated() { assertEquals("java.lang.Object", new Object().getClass().getName()); @@ -205,4 +215,7 @@ public class ClassTest { Class n(); } + + static class InnerClass { + } }