diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp index f3f19badb9..65afa0a185 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp @@ -2653,6 +2653,23 @@ static VstIntPtr VSTCALLBACK audioMaster (AEffect* effect, VstInt32 opcode, VstI VSTPluginFormat::VSTPluginFormat() {} VSTPluginFormat::~VSTPluginFormat() {} +static VSTPluginInstance* createAndUpdateDesc (VSTPluginFormat& format, PluginDescription& desc) +{ + if (VSTPluginInstance* instance = dynamic_cast (format.createInstanceFromDescription (desc))) + { + #if JUCE_MAC + if (instance->module->resFileId != 0) + UseResFile (instance->module->resFileId); + #endif + + instance->fillInPluginDescription (desc); + + return instance; + } + + return nullptr; +} + void VSTPluginFormat::findAllTypesForFile (OwnedArray & results, const String& fileOrIdentifier) { @@ -2663,18 +2680,11 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray & resul desc.fileOrIdentifier = fileOrIdentifier; desc.uid = 0; - ScopedPointer instance (dynamic_cast (createInstanceFromDescription (desc))); + ScopedPointer instance (createAndUpdateDesc (*this, desc)); if (instance == nullptr) return; - #if JUCE_MAC - if (instance->module->resFileId != 0) - UseResFile (instance->module->resFileId); - #endif - - instance->fillInPluginDescription (desc); - VstPlugCategory category = (VstPlugCategory) instance->dispatch (effGetPlugCategory, 0, 0, 0, 0); if (category != kPlugCategShell) @@ -2696,11 +2706,17 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray & resul break; desc.uid = uid; - desc.name = shellEffectName; - desc.descriptiveName = shellEffectName; - if (! arrayContainsPlugin (results, desc)) - results.add (new PluginDescription (desc)); + ScopedPointer shellInstance (createAndUpdateDesc (*this, desc)); + + if (shellInstance != nullptr) + { + jassert (desc.uid == uid); + desc.name = shellEffectName; + + if (! arrayContainsPlugin (results, desc)) + results.add (new PluginDescription (desc)); + } } } }