mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 09:30:24 +00:00
fc6d051dfd
The LexicalPath instance methods dirname(), basename(), title() and extension() will be changed to return StringView const& in a further commit. Due to this, users creating temporary LexicalPath objects just to call one of those getters will recieve a StringView const& pointing to a possible freed buffer. To avoid this, static methods for those APIs have been added, which will return a String by value to avoid those problems. All cases where temporary LexicalPath objects have been used as described above haven been changed to use the static APIs.
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "ProjectFile.h"
|
|
#include <AK/LexicalPath.h>
|
|
#include <AK/Noncopyable.h>
|
|
#include <AK/OwnPtr.h>
|
|
#include <LibGUI/FileSystemModel.h>
|
|
|
|
namespace HackStudio {
|
|
|
|
class Project {
|
|
AK_MAKE_NONCOPYABLE(Project);
|
|
AK_MAKE_NONMOVABLE(Project);
|
|
|
|
public:
|
|
static OwnPtr<Project> open_with_root_path(const String& root_path);
|
|
|
|
GUI::FileSystemModel& model() { return *m_model; }
|
|
const GUI::FileSystemModel& model() const { return *m_model; }
|
|
String name() const { return LexicalPath::basename(m_root_path); }
|
|
String root_path() const { return m_root_path; }
|
|
|
|
NonnullRefPtr<ProjectFile> get_file(const String& path) const;
|
|
|
|
void for_each_text_file(Function<void(const ProjectFile&)>) const;
|
|
|
|
private:
|
|
explicit Project(const String& root_path);
|
|
|
|
String to_absolute_path(const String&) const;
|
|
|
|
RefPtr<GUI::FileSystemModel> m_model;
|
|
mutable NonnullRefPtrVector<ProjectFile> m_files;
|
|
|
|
String m_root_path;
|
|
};
|
|
|
|
}
|