1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Projucer: Fixed a crash in the live-build engine ComponentClassList

This commit is contained in:
ed 2019-06-03 10:14:54 +01:00
parent 7317e37270
commit d275f3f7b1
2 changed files with 16 additions and 8 deletions

View file

@ -231,24 +231,31 @@ private:
void timerCallback() override
{
Array<ClassDatabase::Class*> newClasses;
Array<WeakReference<ClassDatabase::Class>> newClasses;
if (childProcess != nullptr)
const_cast <ClassDatabase::ClassList&> (childProcess->getComponentList()).globalNamespace.findClassesDeclaredInFile (newClasses, file);
for (int i = newClasses.size(); --i >= 0;)
if (! newClasses.getUnchecked(i)->getInstantiationFlags().canBeInstantiated())
{
auto& c = newClasses.getReference (i);
if (c == nullptr || ! c->getInstantiationFlags().canBeInstantiated())
newClasses.remove (i);
}
if (newClasses != classes)
{
classes = newClasses;
deleteOverlays();
for (auto& c : classes)
for (auto c : classes)
{
CodeDocument::Position pos (owner.getDocument(), c->getClassDeclarationRange().range.getStart());
overlays.add (new LaunchClassOverlayComponent (owner, pos, pos, c->getName()));
if (c != nullptr)
{
CodeDocument::Position pos (owner.getDocument(), c->getClassDeclarationRange().range.getStart());
overlays.add (new LaunchClassOverlayComponent (owner, pos, pos, c->getName()));
}
}
}
}
@ -264,7 +271,7 @@ private:
GenericCodeEditorComponent& owner;
CompileEngineChildProcess::Ptr childProcess;
File file;
Array<ClassDatabase::Class*> classes;
Array<WeakReference<ClassDatabase::Class>> classes;
Array<Component::SafePointer<Component>> overlays;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ComponentClassList)

View file

@ -452,6 +452,7 @@ struct ClassDatabase
InstantiationFlags instantiationFlags;
JUCE_LEAK_DETECTOR (Class)
JUCE_DECLARE_WEAK_REFERENCEABLE (Class)
};
//==============================================================================
@ -522,11 +523,11 @@ struct ClassDatabase
return nullptr;
}
void findClassesDeclaredInFile (Array<Class*>& results, const File& file)
void findClassesDeclaredInFile (Array<WeakReference<Class>>& results, const File& file)
{
for (int i = 0; i < components.size(); ++i)
{
auto c = components.getReference (i);
auto& c = components.getReference (i);
if (c.isDeclaredInFile (file))
results.add (&c);