harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vasily Zakharov (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-3453) [classlib][swing] JEditorPane.registerEditorKitForContentType(String, String, null) doesn't throw NPE
Date Thu, 22 Mar 2007 15:46:32 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-3453?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12483196

Vasily Zakharov commented on HARMONY-3453:

It IS possible to put null value to a HashMap.

Moreover, as far as I understand it SHOULD be possible to store null value to reflect the
bootstrap class loader.

And the bug in RI is not only the NPE itself, but also a fact that RI throws NPE besides performing
the registration.
So I'm sure we SHOULD NOT try to reproduce this bad behavior in Harmony.

I think it could make sense to store the resolved instances of EditorKits in a separate table
(and clone them the next time they're used - as the specification suggests).

However, I'm not sure if the registration information can be conveniently stored in a Map,
as the registration data contain three fields - content type, class name and classloader.
It looks like the current implementation using three ArrayLists is rather effective, however
we can of course use a Map with a special class for values, storing class name and class loader

> [classlib][swing] JEditorPane.registerEditorKitForContentType(String, String, null) doesn't
throw NPE
> -----------------------------------------------------------------------------------------------------
>                 Key: HARMONY-3453
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3453
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib, Non-bug differences from RI
>            Reporter: Vasily Zakharov
>            Priority: Minor
> Consider the following test:
> import javax.swing.JEditorPane;
> public class Test {
>     public static void main(String args[]) throws Exception {
>         System.out.println(JEditorPane.createEditorKitForContentType("testContentType1"));
>         try {
>             JEditorPane.registerEditorKitForContentType("testContentType1", "MyEditorKit",
>         } catch (Exception e) {
>             e.printStackTrace();
>         }
>         System.out.println(JEditorPane.createEditorKitForContentType("testContentType1"));
>         JEditorPane.registerEditorKitForContentType("testContentType2", "MyEditorKit");
>         System.out.println(JEditorPane.createEditorKitForContentType("testContentType2"));
>     }
> }
> public class MyEditorKit extends javax.swing.text.DefaultEditorKit {
> }
> Output on RI:
> null
> java.lang.NullPointerException
>         at java.util.Hashtable.put(Unknown Source)
>         at javax.swing.JEditorPane.registerEditorKitForContentType(Unknown Source)
>         at TestNPE.main(TestNPE.java:8)
> MyEditorKit@1a46e30
> MyEditorKit@3e25a5
> Output on Harmony:
> null
> null
> null
> The specification says nothing about passing null classloader.
> The NPE occurs on RI, and doesn't occur on Harmony, it seems that RI uses Hashtable (that
doesn't permit null keys/vaues) to store registered classloaders, and Harmony uses ArrayList.
> Also, as one may see, RI, besides throwing NPE, also registers the specified content
type anyway (compare createEditorKitForContentType results before and after registration attempt).
In my opinion, this behaviour is clearly a bug in RI. So my suggestion is to consider this
issue a non-bug difference.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message