ocpsoft / prettytime

Social Style Date and Time Formatting for Java
http://ocpsoft.org/prettytime/
Apache License 2.0
1.29k stars 253 forks source link

JaTimeFormat class can't get the unit name for a anonymous TimeUnit class. #155

Closed chang-chao closed 3 years ago

chang-chao commented 6 years ago

Code snippet to reproduce the failure.

    private static final PrettyTime prettyTime = new PrettyTime();
    static {
        prettyTime.removeUnit(JustNow.class);
        ResourcesTimeUnit justNow = new ResourcesTimeUnit(Locale.JAPAN) {
            {
                setMaxQuantity(10000);
            }
            @Override
            protected String getResourceKeyPrefix() {
                return "JustNow";
            }
        };
        prettyTime.registerUnit(justNow, new ResourcesTimeFormat(justNow));
    }

It will fail with the following exception:

Exception in thread "main" java.util.MissingResourceException: Can't find resource for bundle org.ocpsoft.prettytime.i18n.Resources, key Pattern
    at java.util.ResourceBundle.getObject(ResourceBundle.java:450)
    at java.util.ResourceBundle.getObject(ResourceBundle.java:444)
    at java.util.ResourceBundle.getString(ResourceBundle.java:407)
    at org.ocpsoft.prettytime.i18n.Resources_ja$JaTimeFormat.(Resources_ja.java:148)
    at org.ocpsoft.prettytime.i18n.Resources_ja.getFormatFor(Resources_ja.java:117)
    at org.ocpsoft.prettytime.impl.ResourcesTimeFormat.setLocale(ResourcesTimeFormat.java:34)
    at org.ocpsoft.prettytime.impl.ResourcesTimeFormat.setLocale(ResourcesTimeFormat.java:16)
    at org.ocpsoft.prettytime.PrettyTime.registerUnit(PrettyTime.java:472)

this is because the getUnitName(TimeUnit) method of JaTimeFormat class cannot properly get the unit name in case of anonymous TimeUnit class(An empty string is returned).

        private String getUnitName(TimeUnit unit) {
            return unit.getClass().getSimpleName();
        }

This issule is related to https://github.com/lagom/online-auction-java/issues/161

lincolnthree commented 3 years ago

Thanks for the issue! This should be resolved in version 5 since we've overhauled the TimeUnit registration API.