Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51c28927 authored by Adam Lesinski's avatar Adam Lesinski Committed by Android (Google) Code Review
Browse files

Merge "AAPT2: Add support for overlays when merging resources"

parents d8f89e5f fb48d292
Loading
Loading
Loading
Loading
+24 −9
Original line number Diff line number Diff line
@@ -190,22 +190,32 @@ static constexpr const char16_t* kValidNameMangledChars = u"._-$";

bool ResourceTable::addResource(const ResourceNameRef& name, const ConfigDescription& config,
                                std::unique_ptr<Value> value, IDiagnostics* diag) {
    return addResourceImpl(name, {}, config, std::move(value), kValidNameChars, diag);
    return addResourceImpl(name, {}, config, std::move(value), kValidNameChars,
                           resolveValueCollision, diag);
}

bool ResourceTable::addResource(const ResourceNameRef& name, const ResourceId resId,
                                const ConfigDescription& config, std::unique_ptr<Value> value,
                                IDiagnostics* diag) {
    return addResourceImpl(name, resId, config, std::move(value), kValidNameChars, diag);
    return addResourceImpl(name, resId, config, std::move(value), kValidNameChars,
                           resolveValueCollision, diag);
}

bool ResourceTable::addFileReference(const ResourceNameRef& name, const ConfigDescription& config,
                                     const Source& source, const StringPiece16& path,
                                     IDiagnostics* diag) {
    return addFileReference(name, config, source, path, resolveValueCollision, diag);
}

bool ResourceTable::addFileReference(const ResourceNameRef& name, const ConfigDescription& config,
                                     const Source& source, const StringPiece16& path,
                                     std::function<int(Value*,Value*)> conflictResolver,
                                     IDiagnostics* diag) {
    std::unique_ptr<FileReference> fileRef = util::make_unique<FileReference>(
            stringPool.makeRef(path));
    fileRef->setSource(source);
    return addResourceImpl(name, ResourceId{}, config, std::move(fileRef), kValidNameChars, diag);
    return addResourceImpl(name, ResourceId{}, config, std::move(fileRef), kValidNameChars,
                           conflictResolver, diag);
}

bool ResourceTable::addResourceAllowMangled(const ResourceNameRef& name,
@@ -213,7 +223,7 @@ bool ResourceTable::addResourceAllowMangled(const ResourceNameRef& name,
                                            std::unique_ptr<Value> value,
                                            IDiagnostics* diag) {
    return addResourceImpl(name, ResourceId{}, config, std::move(value), kValidNameMangledChars,
                           diag);
                           resolveValueCollision, diag);
}

bool ResourceTable::addResourceAllowMangled(const ResourceNameRef& name,
@@ -221,12 +231,17 @@ bool ResourceTable::addResourceAllowMangled(const ResourceNameRef& name,
                                            const ConfigDescription& config,
                                            std::unique_ptr<Value> value,
                                            IDiagnostics* diag) {
    return addResourceImpl(name, id, config, std::move(value), kValidNameMangledChars, diag);
    return addResourceImpl(name, id, config, std::move(value), kValidNameMangledChars,
                           resolveValueCollision, diag);
}

bool ResourceTable::addResourceImpl(const ResourceNameRef& name, const ResourceId resId,
                                    const ConfigDescription& config, std::unique_ptr<Value> value,
                                    const char16_t* validChars, IDiagnostics* diag) {
bool ResourceTable::addResourceImpl(const ResourceNameRef& name,
                                    const ResourceId resId,
                                    const ConfigDescription& config,
                                    std::unique_ptr<Value> value,
                                    const char16_t* validChars,
                                    std::function<int(Value*,Value*)> conflictResolver,
                                    IDiagnostics* diag) {
    assert(value && "value can't be nullptr");
    assert(diag && "diagnostics can't be nullptr");

@@ -289,7 +304,7 @@ bool ResourceTable::addResourceImpl(const ResourceNameRef& name, const ResourceI
        // This resource did not exist before, add it.
        entry->values.insert(iter, ResourceConfigValue{ config, std::move(value) });
    } else {
        int collisionResult = resolveValueCollision(iter->value.get(), value.get());
        int collisionResult = conflictResolver(iter->value.get(), value.get());
        if (collisionResult > 0) {
            // Take the incoming value.
            iter->value = std::move(value);
+14 −4
Original line number Diff line number Diff line
@@ -163,7 +163,12 @@ public:
                     IDiagnostics* diag);

    bool addFileReference(const ResourceNameRef& name, const ConfigDescription& config,
                          const Source& source, const StringPiece16& path, IDiagnostics* diag);
                          const Source& source, const StringPiece16& path,
                          IDiagnostics* diag);

    bool addFileReference(const ResourceNameRef& name, const ConfigDescription& config,
                          const Source& source, const StringPiece16& path,
                          std::function<int(Value*,Value*)> conflictResolver, IDiagnostics* diag);

    /**
     * Same as addResource, but doesn't verify the validity of the name. This is used
@@ -221,9 +226,14 @@ public:
private:
    ResourceTablePackage* findOrCreatePackage(const StringPiece16& name);

    bool addResourceImpl(const ResourceNameRef& name, ResourceId resId,
                         const ConfigDescription& config, std::unique_ptr<Value> value,
                         const char16_t* validChars, IDiagnostics* diag);
    bool addResourceImpl(const ResourceNameRef& name,
                         ResourceId resId,
                         const ConfigDescription& config,
                         std::unique_ptr<Value> value,
                         const char16_t* validChars,
                         std::function<int(Value*,Value*)> conflictResolver,
                         IDiagnostics* diag);

    bool setSymbolStateImpl(const ResourceNameRef& name, ResourceId resId,
                            const Symbol& symbol, const char16_t* validChars, IDiagnostics* diag);
};
Loading