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:
parent
7317e37270
commit
d275f3f7b1
2 changed files with 16 additions and 8 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue