String16 curType;
int32_t curFormat = ResTable_map::TYPE_ANY;
bool curIsBag = false;
+ bool curIsBagReplaceOnOverwrite = false;
bool curIsStyled = false;
bool curIsPseudolocalizable = false;
bool localHasErrors = false;
curTag = &array16;
curType = array16;
curIsBag = true;
+ curIsBagReplaceOnOverwrite = true;
ssize_t formatIdx = block.indexOfAttribute(NULL, "format");
if (formatIdx >= 0) {
String16 formatStr = String16(block.getAttributeStringValue(
curType = array16;
curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_STRING;
curIsBag = true;
+ curIsBagReplaceOnOverwrite = true;
curIsPseudolocalizable = true;
} else if (strcmp16(block.getElementName(&len), integer_array16.string()) == 0) {
curTag = &integer_array16;
curType = array16;
curFormat = ResTable_map::TYPE_REFERENCE|ResTable_map::TYPE_INTEGER;
curIsBag = true;
+ curIsBagReplaceOnOverwrite = true;
} else {
SourcePos(in->getPrintableSource(), block.getLineNumber()).error(
"Found tag %s where item is expected\n",
}
if (!localHasErrors) {
- err = outTable->startBag(SourcePos(in->getPrintableSource(), block.getLineNumber()),
- myPackage, curType, ident, parentIdent, &curParams,
- overwrite);
+ err = outTable->startBag(SourcePos(in->getPrintableSource(),
+ block.getLineNumber()), myPackage, curType, ident,
+ parentIdent, &curParams,
+ overwrite, curIsBagReplaceOnOverwrite);
if (err != NO_ERROR) {
hasErrors = localHasErrors = true;
}
const String16& name,
const String16& bagParent,
const ResTable_config* params,
+ bool overlay,
bool replace, bool isId)
{
status_t result = NO_ERROR;
sourcePos.file.striing(), sourcePos.line, String8(type).string());
}
#endif
-
+ if (overlay && !hasBagOrEntry(package, type, name)) {
+ sourcePos.error("Can't add new bags in an overlay. See '%s'\n",
+ String8(name).string());
+ return UNKNOWN_ERROR;
+ }
+
sp<Entry> e = getEntry(package, type, name, sourcePos, params);
if (e == NULL) {
return UNKNOWN_ERROR;
return result;
}
- if (replace) {
+ if (overlay && replace) {
return e->emptyBag(sourcePos);
}
return result;