facebookarchive / stetho

Stetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more.
http://facebook.github.io/stetho/
MIT License
12.66k stars 1.13k forks source link

[Feature-request] Allow more than 1 Descriptor for the same type #552

Open ninovanhooff opened 6 years ago

ninovanhooff commented 6 years ago

If I want to add my own View Descriptor, I have to remove the default one via reflection:

 Stetho.InitializerBuilder initializerBuilder = Stetho.newInitializerBuilder(application);

DescriptorProvider descriptorProvider = descriptorRegistrar -> {
    if (descriptorRegistrar instanceof DescriptorMap){
        try{
            DescriptorMap descriptorMap = (DescriptorMap) descriptorRegistrar;

            //Remove previous View descriptor, because there can only be one per (View) type
            Field fMap = DescriptorMap.class.getDeclaredField("mMap");
            fMap.setAccessible(true);
            Map map = (Map) fMap.get(descriptorMap);
            map.remove(View.class);
        } catch (IllegalAccessException | NoSuchFieldException e){
            System.err.println(e);
        }

    }
    descriptorRegistrar.registerDescriptor(View.class, new CustomViewDescriptor());
};

AndroidDocumentProviderFactory factory = new AndroidDocumentProviderFactory(application, Collections.singletonList(descriptorProvider));

InspectorModulesProvider inspectorModulesProvider = () -> {
    Stetho.DefaultInspectorModulesBuilder inspectorModulesBuilder = new Stetho.DefaultInspectorModulesBuilder(application);
    inspectorModulesBuilder.documentProvider(factory);
    return inspectorModulesBuilder.finish();
};

initializerBuilder.enableWebKitInspector(inspectorModulesProvider);

Stetho.initialize(initializerBuilder.build());

It would be nice if there would be a AndroidDocumentProviderFactory that allows to skip adding of specified classes. Another approach would be to allow multiple Descriptors for the same type

jasta commented 6 years ago

Hmm, intriguing use case. I earnestly don't know why the assertion is in the code today that prevents this use case. @rickbrew ?