Browse Source

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

tags/2021-05-28
ed 6 years ago
parent
commit
d275f3f7b1
2 changed files with 16 additions and 8 deletions
  1. +13
    -6
      extras/Projucer/Source/CodeEditor/jucer_LiveBuildCodeEditor.h
  2. +3
    -2
      extras/Projucer/Source/LiveBuildEngine/jucer_ClassDatabase.h

+ 13
- 6
extras/Projucer/Source/CodeEditor/jucer_LiveBuildCodeEditor.h 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)


+ 3
- 2
extras/Projucer/Source/LiveBuildEngine/jucer_ClassDatabase.h 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);


Loading…
Cancel
Save