EditorApplication.projectWindowItemOnGUI and sub assets

I want to provide a custom icon for a classes which extends from ScriptableObject. The class has sub assets of Texture2Ds which you can see here.

74042-subasset-icons-1.jpg

The icon needs to be generated dynamically, so I’m using EditorApplication.projectWindowItemOnGUI which works nicely. However this then causes a problem with the sub assets:

74043-subasset-icons-2.jpg

The method is applied not only to the main asset, but also all sub assets. Normally I’d use IsMainAsset / IsSubAsset, but because the method only exposes a Guid, all I can do is GUIDToAssetPath, and the method invokes for all of the sub assets leaving me no means of telling them apart:

    [DidReloadScripts]
    static AssetDatabaseIcons()
    {
        EditorApplication.projectWindowItemOnGUI = AssetDatabaseIcons.ProjectWindowItemOnGUI;
    }

    // This method is invoked once for the main asset and n times for the sub assets
    // The same guid is passed over on all of the calls
    private static void ProjectWindowItemOnGUI(string guid, Rect rect)
    {
        string assetPath = AssetDatabase.GUIDToAssetPath(guid);
        ScriptableObject scriptableObject = AssetDatabase.LoadAssetAtPath<ScriptableObject>(assetPath);

        //AssetDatabaseIcons.DrawScriptableObjectIcon(rect, scriptableObject);
    }

Is there any way of solving this problem? I can’t see any way but I’m hoping there might be a method I can use via reflection. I note that this method does not prevent the default icon from being drawn, so can I hook into that somehow?