On 04/01/2019 08:47, Fu Jie wrote:
Hi,

I think Alan's approach is more readable and more elegant.
And it can also fix the issue mentioned by Sergey.
If I read this patch correctly then the isEditorExist is just checking that there has been some reference processing but it doesn't guarantee that the editor class has been unloaded.

Here's an alternative to consider:

        Class<?> targetClass = Object.class;
        Class<?> editorClass = new MemoryClassLoader().compile("Editor",
                "public class Editor extends java.beans.PropertyEditorSupport {}");
        PropertyEditorManager.registerEditor(targetClass, editorClass);

        if (PropertyEditorManager.findEditor(targetClass) == null) {
            throw new Error("the editor is lost");
        }

        // allow, and wait for, Editor class to be unloaded
        var ref = new WeakReference<Class<?>>(editorClass);
        editorClass = null;
        while (ref.get() != null) {
            Thread.sleep(100);
            System.gc();
        }

        if (PropertyEditorManager.findEditor(targetClass) != null) {
            throw new Error("unexpected editor is found");
        }

As regards looping until a weak ref has been cleared then we do this in many tests. I've no doubt that many tests and features would fail with -DisableExplicitGC but this shouldn't be a concern here.

-Alan

Reply via email to