aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aidl.cpp36
-rw-r--r--aidl_checkapi.cpp9
-rw-r--r--aidl_const_expressions.cpp37
-rw-r--r--aidl_language.cpp14
-rw-r--r--aidl_language.h2
-rw-r--r--aidl_language_l.ll2
-rw-r--r--aidl_language_y-module.h22
-rw-r--r--aidl_language_y.yy8
-rw-r--r--aidl_to_cpp.cpp24
-rw-r--r--aidl_to_cpp_common.cpp2
-rw-r--r--aidl_to_java.cpp32
-rw-r--r--aidl_to_ndk.cpp6
-rw-r--r--aidl_to_rust.cpp5
-rw-r--r--aidl_typenames.cpp4
-rw-r--r--ast_cpp.cpp2
-rw-r--r--code_writer.cpp5
-rw-r--r--generate_cpp.cpp38
-rw-r--r--generate_java.cpp11
-rw-r--r--generate_java_binder.cpp4
-rw-r--r--generate_ndk.cpp43
-rw-r--r--generate_rust.cpp4
-rw-r--r--io_delegate.cpp16
-rw-r--r--logging.h7
-rw-r--r--main.cpp6
-rw-r--r--options.cpp5
-rw-r--r--parser.cpp2
-rw-r--r--parser.h4
27 files changed, 163 insertions, 187 deletions
diff --git a/aidl.cpp b/aidl.cpp
index 830b3ae7..a5fbdcc8 100644
--- a/aidl.cpp
+++ b/aidl.cpp
@@ -167,7 +167,7 @@ bool write_dep_file(const Options& options, const AidlDefinedType& defined_type,
CodeWriterPtr writer = io_delegate.GetCodeWriter(dep_file_name);
if (!writer) {
- LOG(ERROR) << "Could not open dependency file: " << dep_file_name;
+ AIDL_ERROR(dep_file_name) << "Could not open dependency file.";
return false;
}
@@ -244,7 +244,7 @@ string generate_outputFileName(const Options& options, const AidlDefinedType& de
} else if (options.TargetLanguage() == Options::Language::RUST) {
result += ".rs";
} else {
- LOG(FATAL) << "Should not reach here" << endl;
+ AIDL_FATAL("Unknown target language");
return "";
}
@@ -357,7 +357,7 @@ bool parse_preprocessed_file(const IoDelegate& io_delegate, const string& filena
bool success = true;
unique_ptr<LineReader> line_reader = io_delegate.GetLineReader(filename);
if (!line_reader) {
- LOG(ERROR) << "cannot open preprocessed file: " << filename;
+ AIDL_ERROR(filename) << "cannot open preprocessed file";
success = false;
return success;
}
@@ -405,8 +405,8 @@ bool parse_preprocessed_file(const IoDelegate& io_delegate, const string& filena
}
}
if (!success) {
- LOG(ERROR) << filename << ':' << lineno
- << " malformed preprocessed file line: '" << line << "'";
+ AIDL_ERROR(filename) << " on line " << lineno << " malformed preprocessed file line: '" << line
+ << "'";
}
return success;
@@ -573,7 +573,7 @@ AidlError load_and_validate_aidl(const std::string& input_file_name, const Optio
const auto& types = main_parser->ParsedDocument().DefinedTypes();
const int num_defined_types = types.size();
for (const auto& defined_type : types) {
- CHECK(defined_type != nullptr);
+ AIDL_FATAL_IF(defined_type == nullptr, main_parser->FileName());
// Language specific validation
if (!defined_type->LanguageSpecificCheckValid(*typenames, options.TargetLanguage())) {
@@ -623,7 +623,7 @@ AidlError load_and_validate_aidl(const std::string& input_file_name, const Optio
AidlInterface* interface = defined_type->AsInterface();
AidlStructuredParcelable* parcelable = defined_type->AsStructuredParcelable();
AidlEnumDeclaration* enum_decl = defined_type->AsEnumDeclaration();
- CHECK(!!interface + !!parcelable + !!enum_decl == 1);
+ AIDL_FATAL_IF(!!interface + !!parcelable + !!enum_decl != 1, defined_type);
// Ensure that foo.bar.IFoo is defined in <some_path>/foo/bar/IFoo.aidl
if (num_defined_types == 1 && !check_filename(input_file_name, *defined_type)) {
@@ -685,8 +685,8 @@ AidlError load_and_validate_aidl(const std::string& input_file_name, const Optio
break;
}
default:
- LOG(FATAL) << "Unrecognized constant type: "
- << static_cast<int>(constant->GetValue().GetType());
+ AIDL_FATAL(constant) << "Unrecognized constant type: "
+ << static_cast<int>(constant->GetValue().GetType());
break;
}
}
@@ -769,7 +769,7 @@ int compile_aidl(const Options& options, const IoDelegate& io_delegate) {
}
for (const auto& defined_type : typenames.MainDocument().DefinedTypes()) {
- CHECK(defined_type != nullptr);
+ AIDL_FATAL_IF(defined_type == nullptr, input_file);
string output_file_name = options.OutputFile();
// if needed, generate the output file name from the base folder
@@ -804,8 +804,7 @@ int compile_aidl(const Options& options, const IoDelegate& io_delegate) {
success = rust::GenerateRust(output_file_name, defined_type.get(), typenames, io_delegate,
options);
} else {
- LOG(FATAL) << "Should not reach here" << endl;
- return 1;
+ AIDL_FATAL(input_file) << "Should not reach here.";
}
if (!success) {
return 1;
@@ -861,7 +860,7 @@ bool preprocess_aidl(const Options& options, const IoDelegate& io_delegate) {
static string GetApiDumpPathFor(const AidlDefinedType& defined_type, const Options& options) {
string package_as_path = Join(Split(defined_type.GetPackage(), "."), OS_PATH_SEPARATOR);
- CHECK(!options.OutputDir().empty() && options.OutputDir().back() == '/');
+ AIDL_FATAL_IF(options.OutputDir().empty() || options.OutputDir().back() != '/', defined_type);
return options.OutputDir() + package_as_path + OS_PATH_SEPARATOR + defined_type.GetName() +
".aidl";
}
@@ -912,12 +911,11 @@ int aidl_entry(const Options& options, const IoDelegate& io_delegate) {
}
// compiler invariants
-
- // once AIDL_ERROR/AIDL_FATAL are used everywhere instead of std::cerr/LOG, we
- // can make this assertion in both directions.
- if (ret == 0) {
- AIDL_FATAL_IF(AidlErrorLog::hadError(), "Compiler success, but error emitted");
- }
+ const bool shouldReportError = ret != 0;
+ const bool reportedError = AidlErrorLog::hadError();
+ AIDL_FATAL_IF(shouldReportError != reportedError, AIDL_LOCATION_HERE)
+ << "Compiler returned error " << ret << " but did" << (reportedError ? "" : " not")
+ << " emit error logs";
return ret;
}
diff --git a/aidl_checkapi.cpp b/aidl_checkapi.cpp
index a0107e41..0f2f4b02 100644
--- a/aidl_checkapi.cpp
+++ b/aidl_checkapi.cpp
@@ -127,7 +127,7 @@ static bool are_compatible_interfaces(const AidlInterface& older, const AidlInte
const auto& old_args = old_m->GetArguments();
const auto& new_args = new_m->GetArguments();
// this is guaranteed because arguments are part of AidlMethod::Signature()
- CHECK(old_args.size() == new_args.size());
+ AIDL_FATAL_IF(old_args.size() != new_args.size(), old_m);
for (size_t i = 0; i < old_args.size(); i++) {
const AidlArgument& old_a = *(old_args.at(i));
const AidlArgument& new_a = *(new_args.at(i));
@@ -317,9 +317,10 @@ static Result<AidlTypenames> load_from_dir(const Options& options, const IoDeleg
}
bool check_api(const Options& options, const IoDelegate& io_delegate) {
- CHECK(options.IsStructured());
- CHECK(options.InputFiles().size() == 2) << "--checkapi requires two inputs "
- << "but got " << options.InputFiles().size();
+ AIDL_FATAL_IF(!options.IsStructured(), AIDL_LOCATION_HERE);
+ AIDL_FATAL_IF(options.InputFiles().size() != 2, AIDL_LOCATION_HERE)
+ << "--checkapi requires two inputs "
+ << "but got " << options.InputFiles().size();
auto old_tns = load_from_dir(options, io_delegate, options.InputFiles().at(0));
if (!old_tns.ok()) {
return false;
diff --git a/aidl_const_expressions.cpp b/aidl_const_expressions.cpp
index 5c7cb3ae..5626e406 100644
--- a/aidl_const_expressions.cpp
+++ b/aidl_const_expressions.cpp
@@ -134,7 +134,7 @@ bool processGuard(const OverflowGuard<T>& guard, const AidlConstantValue& contex
}
// TODO: factor out all these macros
-#define SHOULD_NOT_REACH() CHECK(false) << LOG(FATAL) << ": should not reach here: "
+#define SHOULD_NOT_REACH() AIDL_FATAL(AIDL_LOCATION_HERE) << "Should not reach."
#define OPEQ(__y__) (string(op_) == string(__y__))
#define COMPUTE_UNARY(T, __op__) \
if (op == string(#__op__)) { \
@@ -290,8 +290,8 @@ bool AidlBinaryConstExpression::AreCompatibleTypes(Type t1, Type t2) {
AidlConstantValue::Type AidlBinaryConstExpression::UsualArithmeticConversion(Type left,
Type right) {
// These are handled as special cases
- CHECK(left != Type::STRING && right != Type::STRING);
- CHECK(left != Type::FLOATING && right != Type::FLOATING);
+ AIDL_FATAL_IF(left == Type::STRING || right == Type::STRING, AIDL_LOCATION_HERE);
+ AIDL_FATAL_IF(left == Type::FLOATING || right == Type::FLOATING, AIDL_LOCATION_HERE);
// Kinds in concern: bool, (u)int[8|32|64]
if (left == right) return left; // easy case
@@ -308,7 +308,7 @@ AidlConstantValue::Type AidlBinaryConstExpression::IntegralPromotion(Type in) {
template <typename T>
T AidlConstantValue::cast() const {
- CHECK(is_evaluated_ == true);
+ AIDL_FATAL_IF(!is_evaluated_, this);
#define CASE_CAST_T(__type__) return static_cast<T>(static_cast<__type__>(final_value_));
@@ -419,7 +419,7 @@ bool AidlConstantValue::ParseIntegral(const string& value, int64_t* parsed_value
}
AidlConstantValue* AidlConstantValue::Integral(const AidlLocation& location, const string& value) {
- CHECK(!value.empty());
+ AIDL_FATAL_IF(value.empty(), location);
Type parsed_type;
int64_t parsed_value = 0;
@@ -433,7 +433,7 @@ AidlConstantValue* AidlConstantValue::Integral(const AidlLocation& location, con
AidlConstantValue* AidlConstantValue::Array(
const AidlLocation& location, std::unique_ptr<vector<unique_ptr<AidlConstantValue>>> values) {
- CHECK(values != nullptr) << location;
+ AIDL_FATAL_IF(values == nullptr, location);
return new AidlConstantValue(location, Type::ARRAY, std::move(values));
}
@@ -583,7 +583,7 @@ string AidlConstantValue::ValueString(const AidlTypeSpecifier& type,
break;
}
- CHECK(err != 0);
+ AIDL_FATAL_IF(err == 0, this);
AIDL_ERROR(this) << "Invalid type specifier for " << ToString(final_type_) << ": " << type_string;
return "";
}
@@ -715,17 +715,18 @@ string AidlConstantValue::ToString(Type type) {
case Type::BINARY:
return "a binary expression";
case Type::ERROR:
- LOG(FATAL) << "aidl internal error: error type failed to halt program";
+ AIDL_FATAL(AIDL_LOCATION_HERE) << "aidl internal error: error type failed to halt program";
return "";
default:
- LOG(FATAL) << "aidl internal error: unknown constant type: " << static_cast<int>(type);
+ AIDL_FATAL(AIDL_LOCATION_HERE)
+ << "aidl internal error: unknown constant type: " << static_cast<int>(type);
return ""; // not reached
}
}
bool AidlUnaryConstExpression::CheckValid() const {
if (is_evaluated_) return is_valid_;
- CHECK(unary_ != nullptr);
+ AIDL_FATAL_IF(unary_ == nullptr, this);
is_valid_ = unary_->CheckValid();
if (!is_valid_) {
@@ -782,8 +783,8 @@ bool AidlUnaryConstExpression::evaluate(const AidlTypeSpecifier& type) const {
bool AidlBinaryConstExpression::CheckValid() const {
bool success = false;
if (is_evaluated_) return is_valid_;
- CHECK(left_val_ != nullptr);
- CHECK(right_val_ != nullptr);
+ AIDL_FATAL_IF(left_val_ == nullptr, this);
+ AIDL_FATAL_IF(right_val_ == nullptr, this);
success = left_val_->CheckValid();
if (!success) {
@@ -811,8 +812,8 @@ bool AidlBinaryConstExpression::evaluate(const AidlTypeSpecifier& type) const {
return is_valid_;
}
is_evaluated_ = true;
- CHECK(left_val_ != nullptr);
- CHECK(right_val_ != nullptr);
+ AIDL_FATAL_IF(left_val_ == nullptr, type);
+ AIDL_FATAL_IF(right_val_ == nullptr, type);
// Recursively evaluate the binary expression tree
if (!left_val_->is_evaluated_ || !right_val_->is_evaluated_) {
@@ -926,8 +927,8 @@ AidlConstantValue::AidlConstantValue(const AidlLocation& location, Type parsed_t
value_(checked_value),
final_type_(parsed_type),
final_value_(parsed_value) {
- CHECK(!value_.empty() || type_ == Type::ERROR) << location;
- CHECK(type_ == Type::INT8 || type_ == Type::INT32 || type_ == Type::INT64) << location;
+ AIDL_FATAL_IF(value_.empty() && type_ != Type::ERROR, location);
+ AIDL_FATAL_IF(type_ != Type::INT8 && type_ != Type::INT32 && type_ != Type::INT64, location);
}
AidlConstantValue::AidlConstantValue(const AidlLocation& location, Type type,
@@ -936,7 +937,7 @@ AidlConstantValue::AidlConstantValue(const AidlLocation& location, Type type,
type_(type),
value_(checked_value),
final_type_(type) {
- CHECK(!value_.empty() || type_ == Type::ERROR) << location;
+ AIDL_FATAL_IF(value_.empty() && type_ != Type::ERROR, location);
switch (type_) {
case Type::INT8:
case Type::INT32:
@@ -957,7 +958,7 @@ AidlConstantValue::AidlConstantValue(const AidlLocation& location, Type type,
is_valid_(false),
is_evaluated_(false),
final_type_(type) {
- CHECK(type_ == Type::ARRAY);
+ AIDL_FATAL_IF(type_ != Type::ARRAY, location);
}
AidlUnaryConstExpression::AidlUnaryConstExpression(const AidlLocation& location, const string& op,
diff --git a/aidl_language.cpp b/aidl_language.cpp
index 7c670567..f4596dba 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -32,7 +32,7 @@
#include <android-base/parseint.h>
#include <android-base/strings.h>
-#include "aidl_language_y-module.h"
+#include "aidl_language_y.h"
#include "logging.h"
#include "aidl.h"
@@ -69,8 +69,8 @@ bool IsJavaKeyword(const char* str) {
return std::find(kJavaKeywords.begin(), kJavaKeywords.end(), str) != kJavaKeywords.end();
}
-inline std::string CapitalizeFirstLetter(const std::string& str) {
- CHECK(str.size() > 0) << "Input cannot be empty.";
+inline std::string CapitalizeFirstLetter(const AidlNode& context, const std::string& str) {
+ AIDL_FATAL_IF(str.size() <= 0, context) << "Input cannot be empty.";
std::ostringstream out;
out << static_cast<char>(toupper(str[0])) << str.substr(1);
return out.str();
@@ -448,7 +448,7 @@ string AidlTypeSpecifier::Signature() const {
}
bool AidlTypeSpecifier::Resolve(const AidlTypenames& typenames) {
- CHECK(!IsResolved());
+ AIDL_FATAL_IF(IsResolved(), this);
AidlTypenames::ResolvedTypename result = typenames.ResolveTypename(unresolved_name_);
if (result.is_resolved) {
fully_qualified_name_ = result.canonical_name;
@@ -801,7 +801,7 @@ AidlParameterizable<T>::AidlParameterizable(const AidlParameterizable& other) {
// Copying is not supported if it has type parameters.
// It doesn't make a problem because only ArrayBase() makes a copy,
// and it can be called only if a type is not generic.
- CHECK(!other.IsGeneric());
+ AIDL_FATAL_IF(other.IsGeneric(), AIDL_LOCATION_HERE);
}
template <typename T>
@@ -887,7 +887,7 @@ bool AidlStructuredParcelable::CheckValid(const AidlTypenames& typenames) const
bool duplicated;
if (IsJavaOnlyImmutable()) {
success = success && typenames.CanBeJavaOnlyImmutable(v->GetType());
- duplicated = !fieldnames.emplace(CapitalizeFirstLetter(v->GetName())).second;
+ duplicated = !fieldnames.emplace(CapitalizeFirstLetter(*v, v->GetName())).second;
} else {
if (IsFixedSize()) {
success = success && typenames.CanBeFixedSize(v->GetType());
@@ -1133,7 +1133,7 @@ AidlInterface::AidlInterface(const AidlLocation& location, const std::string& na
AidlMethod* method = local->AsMethod();
AidlConstantDeclaration* constant = local->AsConstantDeclaration();
- CHECK(method == nullptr || constant == nullptr);
+ AIDL_FATAL_IF(method != nullptr && constant != nullptr, member);
if (method) {
method->ApplyInterfaceOneway(oneway);
diff --git a/aidl_language.h b/aidl_language.h
index 08bd8f31..ae9bf15c 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -86,7 +86,7 @@ class AidlLocation {
};
#define AIDL_LOCATION_HERE \
- AidlLocation { __FILE__, {__LINE__, 0}, {__LINE__, 0}, AidlLocation::Source::INTERNAL }
+ (AidlLocation{__FILE__, {__LINE__, 0}, {__LINE__, 0}, AidlLocation::Source::INTERNAL})
std::ostream& operator<<(std::ostream& os, const AidlLocation& l);
diff --git a/aidl_language_l.ll b/aidl_language_l.ll
index b0390a62..7646f3f9 100644
--- a/aidl_language_l.ll
+++ b/aidl_language_l.ll
@@ -20,7 +20,7 @@
#include "aidl_language.h"
#include "parser.h"
-#include "aidl_language_y-module.h"
+#include "aidl_language_y.h"
#define YY_USER_ACTION yylloc->columns(yyleng);
%}
diff --git a/aidl_language_y-module.h b/aidl_language_y-module.h
deleted file mode 100644
index 34b1620c..00000000
--- a/aidl_language_y-module.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// generated code prints std::string* which is disallowed
-// by android-base/logging.h
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wuser-defined-warnings"
-#include <aidl_language_y.h>
-#pragma clang diagnostic pop
diff --git a/aidl_language_y.yy b/aidl_language_y.yy
index f081a878..7a37e602 100644
--- a/aidl_language_y.yy
+++ b/aidl_language_y.yy
@@ -17,7 +17,7 @@
%{
#include "aidl_language.h"
#include "parser.h"
-#include "aidl_language_y-module.h"
+#include "aidl_language_y.h"
#include "logging.h"
#include <android-base/parseint.h>
#include <set>
@@ -29,9 +29,9 @@
int yylex(yy::parser::semantic_type *, yy::parser::location_type *, void *);
AidlLocation loc(const yy::parser::location_type& begin, const yy::parser::location_type& end) {
- CHECK(begin.begin.filename == begin.end.filename);
- CHECK(begin.end.filename == end.begin.filename);
- CHECK(end.begin.filename == end.end.filename);
+ AIDL_FATAL_IF(begin.begin.filename != begin.end.filename, AIDL_LOCATION_HERE);
+ AIDL_FATAL_IF(begin.end.filename != end.begin.filename, AIDL_LOCATION_HERE);
+ AIDL_FATAL_IF(end.begin.filename != end.end.filename, AIDL_LOCATION_HERE);
AidlLocation::Point begin_point {
.line = begin.begin.line,
.column = begin.begin.column,
diff --git a/aidl_to_cpp.cpp b/aidl_to_cpp.cpp
index b7d48b46..006df9fa 100644
--- a/aidl_to_cpp.cpp
+++ b/aidl_to_cpp.cpp
@@ -79,24 +79,24 @@ std::string RawParcelMethod(const AidlTypeSpecifier& type, const AidlTypenames&
if (isVector) {
string element_name;
if (typenames.IsList(type)) {
- CHECK(type.GetTypeParameters().size() == 1);
+ AIDL_FATAL_IF(type.GetTypeParameters().size() != 1, type);
element_name = type.GetTypeParameters().at(0)->GetName();
} else {
element_name = type.GetName();
}
if (kBuiltinVector.find(element_name) != kBuiltinVector.end()) {
- CHECK(AidlTypenames::IsBuiltinTypename(element_name));
+ AIDL_FATAL_IF(!AidlTypenames::IsBuiltinTypename(element_name), type);
if (utf8) {
- CHECK(element_name == "String");
+ AIDL_FATAL_IF(element_name != "String", type);
return readMethod ? "Utf8VectorFromUtf16Vector" : "Utf8VectorAsUtf16Vector";
}
return kBuiltinVector[element_name];
}
- CHECK(!typenames.IsList(type));
+ AIDL_FATAL_IF(typenames.IsList(type), type);
} else {
const string& type_name = type.GetName();
if (kBuiltin.find(type_name) != kBuiltin.end()) {
- CHECK(AidlTypenames::IsBuiltinTypename(type_name));
+ AIDL_FATAL_IF(!AidlTypenames::IsBuiltinTypename(type_name), type);
if (type_name == "IBinder" && nullable && readMethod) {
return "NullableStrongBinder";
}
@@ -104,13 +104,13 @@ std::string RawParcelMethod(const AidlTypeSpecifier& type, const AidlTypenames&
return "NullableParcelable";
}
if (utf8) {
- CHECK(type_name == "String");
+ AIDL_FATAL_IF(type_name != "String", type);
return readMethod ? "Utf8FromUtf16" : "Utf8AsUtf16";
}
return kBuiltin[type_name];
}
}
- CHECK(!AidlTypenames::IsBuiltinTypename(type.GetName()));
+ AIDL_FATAL_IF(AidlTypenames::IsBuiltinTypename(type.GetName()), type);
auto definedType = typenames.TryGetDefinedType(type.GetName());
if (definedType != nullptr && definedType->AsInterface() != nullptr) {
if (isVector) {
@@ -124,7 +124,7 @@ std::string RawParcelMethod(const AidlTypeSpecifier& type, const AidlTypenames&
// The type must be either primitive or interface or parcelable,
// so it cannot be nullptr.
- CHECK(definedType != nullptr) << type.GetName() << " is not found.";
+ AIDL_FATAL_IF(definedType == nullptr, type) << type.GetName() << " is not found.";
// Parcelable
if (isVector) {
@@ -167,15 +167,15 @@ std::string GetCppName(const AidlTypeSpecifier& raw_type, const AidlTypenames& t
{"String", "::android::String16"},
{"void", "void"},
};
- CHECK(!typenames.IsList(raw_type) || raw_type.GetTypeParameters().size() == 1);
+ AIDL_FATAL_IF(typenames.IsList(raw_type) && raw_type.GetTypeParameters().size() != 1, raw_type);
const auto& type = typenames.IsList(raw_type) ? (*raw_type.GetTypeParameters().at(0)) : raw_type;
const string& aidl_name = type.GetName();
if (m.find(aidl_name) != m.end()) {
- CHECK(AidlTypenames::IsBuiltinTypename(aidl_name));
+ AIDL_FATAL_IF(!AidlTypenames::IsBuiltinTypename(aidl_name), raw_type);
if (aidl_name == "byte" && type.IsArray()) {
return "uint8_t";
} else if (raw_type.IsUtf8InCpp()) {
- CHECK(aidl_name == "String");
+ AIDL_FATAL_IF(aidl_name != "String", type);
return WrapIfNullable("::std::string", raw_type, typenames);
}
return WrapIfNullable(m[aidl_name], raw_type, typenames);
@@ -280,7 +280,7 @@ std::string ParcelWriteCastOf(const AidlTypeSpecifier& type, const AidlTypenames
void AddHeaders(const AidlTypeSpecifier& type, const AidlTypenames& typenames,
std::set<std::string>* headers) {
- CHECK(!typenames.IsList(type) || type.GetTypeParameters().size() == 1);
+ AIDL_FATAL_IF(typenames.IsList(type) && type.GetTypeParameters().size() != 1, type);
bool isVector = type.IsArray() || typenames.IsList(type);
bool isNullable = type.IsNullable();
bool utf8 = type.IsUtf8InCpp();
diff --git a/aidl_to_cpp_common.cpp b/aidl_to_cpp_common.cpp
index 794b2bbe..c1953ace 100644
--- a/aidl_to_cpp_common.cpp
+++ b/aidl_to_cpp_common.cpp
@@ -166,7 +166,7 @@ const static std::unordered_map<std::string, TypeInfo> kTypeInfoMap = {
};
TypeInfo GetTypeInfo(const AidlTypeSpecifier& aidl) {
- CHECK(aidl.IsResolved()) << aidl.ToString();
+ AIDL_FATAL_IF(!aidl.IsResolved(), aidl) << aidl.ToString();
const string& aidl_name = aidl.GetName();
TypeInfo info;
diff --git a/aidl_to_java.cpp b/aidl_to_java.cpp
index d7eaffe9..39212818 100644
--- a/aidl_to_java.cpp
+++ b/aidl_to_java.cpp
@@ -49,7 +49,7 @@ std::string ConstantValueDecorator(const AidlTypeSpecifier& type, const std::str
const string& JavaNameOf(const AidlTypeSpecifier& aidl, const AidlTypenames& typenames,
bool instantiable = false, bool boxing = false) {
- CHECK(aidl.IsResolved()) << aidl.ToString();
+ AIDL_FATAL_IF(!aidl.IsResolved(), aidl) << aidl.ToString();
if (instantiable) {
// An instantiable type is used in only out type(not even inout type),
@@ -99,8 +99,8 @@ const string& JavaNameOf(const AidlTypeSpecifier& aidl, const AidlTypenames& typ
if (const AidlEnumDeclaration* enum_decl = typenames.GetEnumDeclaration(aidl);
enum_decl != nullptr) {
const string& backing_type_name = enum_decl->GetBackingType().GetName();
- CHECK(m.find(backing_type_name) != m.end());
- CHECK(AidlTypenames::IsBuiltinTypename(backing_type_name));
+ AIDL_FATAL_IF(m.find(backing_type_name) == m.end(), enum_decl);
+ AIDL_FATAL_IF(!AidlTypenames::IsBuiltinTypename(backing_type_name), enum_decl);
if (boxing) {
return boxing_types[backing_type_name];
} else {
@@ -111,11 +111,11 @@ const string& JavaNameOf(const AidlTypeSpecifier& aidl, const AidlTypenames& typ
const string& aidl_name = aidl.GetName();
if (boxing && AidlTypenames::IsPrimitiveTypename(aidl_name)) {
// Every primitive type must have the corresponding boxing type
- CHECK(boxing_types.find(aidl_name) != m.end());
+ AIDL_FATAL_IF(boxing_types.find(aidl_name) == m.end(), aidl);
return boxing_types[aidl_name];
}
if (m.find(aidl_name) != m.end()) {
- CHECK(AidlTypenames::IsBuiltinTypename(aidl_name));
+ AIDL_FATAL_IF(!AidlTypenames::IsBuiltinTypename(aidl_name), aidl);
return m[aidl_name];
} else {
// 'foo.bar.IFoo' in AIDL maps to 'foo.bar.IFoo' in Java
@@ -177,10 +177,10 @@ string DefaultJavaValueOf(const AidlTypeSpecifier& aidl, const AidlTypenames& ty
};
const string name = AidlBackingTypeName(aidl, typenames);
- CHECK(name != "void");
+ AIDL_FATAL_IF(name == "void", aidl);
if (!aidl.IsArray() && m.find(name) != m.end()) {
- CHECK(AidlTypenames::IsBuiltinTypename(name));
+ AIDL_FATAL_IF(!AidlTypenames::IsBuiltinTypename(name), aidl);
return m[name];
} else {
return "null";
@@ -273,7 +273,7 @@ bool WriteToParcelFor(const CodeGeneratorContext& c) {
}
} else {
const AidlDefinedType* t = c.typenames.TryGetDefinedType(contained_type);
- CHECK(t != nullptr) << "Unknown type: " << contained_type << endl;
+ AIDL_FATAL_IF(t == nullptr, c.type) << "Unknown type: " << contained_type << endl;
if (t->AsParcelable() != nullptr) {
c.writer << c.parcel << ".writeTypedList(" << c.var << ");\n";
}
@@ -380,7 +380,7 @@ bool WriteToParcelFor(const CodeGeneratorContext& c) {
found->second(c);
} else {
const AidlDefinedType* t = c.typenames.TryGetDefinedType(c.type.GetName());
- CHECK(t != nullptr) << "Unknown type: " << c.type.GetName() << endl;
+ AIDL_FATAL_IF(t == nullptr, c.type) << "Unknown type: " << c.type.GetName() << endl;
if (t->AsInterface() != nullptr) {
if (!c.type.IsArray()) {
// Why don't we use writeStrongInterface which does the exact same thing?
@@ -414,7 +414,7 @@ bool WriteToParcelFor(const CodeGeneratorContext& c) {
// Ensures that a variable is initialized to refer to the classloader
// of the current object and returns the name of the variable.
static string EnsureAndGetClassloader(CodeGeneratorContext& c) {
- CHECK(c.is_classloader_created != nullptr);
+ AIDL_FATAL_IF(c.is_classloader_created == nullptr, AIDL_LOCATION_HERE);
if (!*(c.is_classloader_created)) {
c.writer << "java.lang.ClassLoader cl = "
<< "(java.lang.ClassLoader)this.getClass().getClassLoader();\n";
@@ -501,7 +501,7 @@ bool CreateFromParcelFor(const CodeGeneratorContext& c) {
}
} else {
const AidlDefinedType* t = c.typenames.TryGetDefinedType(contained_type);
- CHECK(t != nullptr) << "Unknown type: " << contained_type << endl;
+ AIDL_FATAL_IF(t == nullptr, c.type) << "Unknown type: " << contained_type << endl;
if (t->AsParcelable() != nullptr) {
c.writer << c.var << " = " << c.parcel << ".createTypedArrayList("
<< JavaNameOf(*(c.type.GetTypeParameters().at(0)), c.typenames)
@@ -615,7 +615,7 @@ bool CreateFromParcelFor(const CodeGeneratorContext& c) {
found->second(c);
} else {
const AidlDefinedType* t = c.typenames.TryGetDefinedType(c.type.GetName());
- CHECK(t != nullptr) << "Unknown type: " << c.type.GetName() << endl;
+ AIDL_FATAL_IF(t == nullptr, c.type) << "Unknown type: " << c.type.GetName() << endl;
if (t->AsInterface() != nullptr) {
if (!c.type.IsArray()) {
c.writer << c.var << " = " << c.type.GetName() << ".Stub.asInterface(" << c.parcel
@@ -691,7 +691,7 @@ bool ReadFromParcelFor(const CodeGeneratorContext& c) {
}
} else {
const AidlDefinedType* t = c.typenames.TryGetDefinedType(contained_type);
- CHECK(t != nullptr) << "Unknown type: " << contained_type << endl;
+ AIDL_FATAL_IF(t == nullptr, c.type) << "Unknown type: " << contained_type << endl;
if (t->AsParcelable() != nullptr) {
c.writer << c.parcel << ".readTypedList(" << c.var << ", "
<< JavaNameOf(*(c.type.GetTypeParameters().at(0)), c.typenames)
@@ -762,7 +762,7 @@ bool ReadFromParcelFor(const CodeGeneratorContext& c) {
found->second(c);
} else {
const AidlDefinedType* t = c.typenames.TryGetDefinedType(c.type.GetName());
- CHECK(t != nullptr) << "Unknown type: " << c.type.GetName() << endl;
+ AIDL_FATAL_IF(t == nullptr, c.type) << "Unknown type: " << c.type.GetName() << endl;
if (t->AsParcelable() != nullptr) {
if (c.type.IsArray()) {
c.writer << c.parcel << ".readTypedArray(" << c.var << ", " << c.type.GetName()
@@ -820,7 +820,9 @@ void ToStringFor(const CodeGeneratorContext& c) {
c.writer << c.var << ".toString()";
return;
}
- CHECK(true) << "Unhandled typename: " << name << endl;
+
+ // TODO(b/168261721): turn into a real error
+ // CHECK(true) << "Unhandled typename: " << name << endl;
}
} // namespace java
diff --git a/aidl_to_ndk.cpp b/aidl_to_ndk.cpp
index abf54ac9..3664e775 100644
--- a/aidl_to_ndk.cpp
+++ b/aidl_to_ndk.cpp
@@ -181,7 +181,7 @@ TypeInfo EnumDeclarationTypeInfo(const AidlEnumDeclaration& enum_decl) {
{"long", "Int64"},
};
auto aparcel_name_it = kAParcelTypeNameMap.find(enum_decl.GetBackingType().GetName());
- CHECK(aparcel_name_it != kAParcelTypeNameMap.end());
+ AIDL_FATAL_IF(aparcel_name_it == kAParcelTypeNameMap.end(), enum_decl);
const std::string aparcel_name = aparcel_name_it->second;
const std::string backing_type_name =
@@ -325,7 +325,7 @@ static map<std::string, TypeInfo> kNdkTypeInfoMap = {
};
static TypeInfo::Aspect GetTypeAspect(const AidlTypenames& types, const AidlTypeSpecifier& aidl) {
- CHECK(aidl.IsResolved()) << aidl.ToString();
+ AIDL_FATAL_IF(!aidl.IsResolved(), aidl) << aidl.ToString();
auto& aidl_name = aidl.GetName();
TypeInfo info;
@@ -350,7 +350,7 @@ static TypeInfo::Aspect GetTypeAspect(const AidlTypenames& types, const AidlType
if (AidlTypenames::IsBuiltinTypename(aidl_name)) {
auto it = kNdkTypeInfoMap.find(aidl_name);
- CHECK(it != kNdkTypeInfoMap.end());
+ AIDL_FATAL_IF(it == kNdkTypeInfoMap.end(), aidl_name);
info = it->second;
} else {
const AidlDefinedType* type = types.TryGetDefinedType(aidl_name);
diff --git a/aidl_to_rust.cpp b/aidl_to_rust.cpp
index 90ce1202..61dceeeb 100644
--- a/aidl_to_rust.cpp
+++ b/aidl_to_rust.cpp
@@ -96,11 +96,12 @@ std::string GetRustName(const AidlTypeSpecifier& type, const AidlTypenames& type
};
// If the type is an array/List<T>, get the inner element type
- CHECK(!type.IsGeneric() || (type.GetName() == "List" && type.GetTypeParameters().size() == 1));
+ AIDL_FATAL_IF(
+ type.IsGeneric() && (type.GetName() != "List" || type.GetTypeParameters().size() != 1), type);
const auto& element_type = type.IsGeneric() ? (*type.GetTypeParameters().at(0)) : type;
const string& element_type_name = element_type.GetName();
if (m.find(element_type_name) != m.end()) {
- CHECK(AidlTypenames::IsBuiltinTypename(element_type_name));
+ AIDL_FATAL_IF(!AidlTypenames::IsBuiltinTypename(element_type_name), type);
if (element_type_name == "byte" && type.IsArray()) {
return "u8";
} else if (element_type_name == "String" && mode == StorageMode::UNSIZED_ARGUMENT) {
diff --git a/aidl_typenames.cpp b/aidl_typenames.cpp
index a22872d5..5b96929d 100644
--- a/aidl_typenames.cpp
+++ b/aidl_typenames.cpp
@@ -132,7 +132,7 @@ bool AidlTypenames::AddDocument(std::unique_ptr<AidlDocument> doc) {
}
const AidlDocument& AidlTypenames::MainDocument() const {
- CHECK(documents_.size() != 0) << "Main document doesn't exist";
+ AIDL_FATAL_IF(documents_.size() == 0, AIDL_LOCATION_HERE) << "Main document doesn't exist";
return *(documents_[0]);
}
@@ -273,7 +273,7 @@ bool AidlTypenames::CanBeOutParameter(const AidlTypeSpecifier& type) const {
type.GetName() == "ParcelFileDescriptor";
}
const AidlDefinedType* t = TryGetDefinedType(type.GetName());
- CHECK(t != nullptr) << "Unrecognized type: '" << type.GetName() << "'";
+ AIDL_FATAL_IF(t == nullptr, type) << "Unrecognized type: '" << type.GetName() << "'";
// An 'out' field is passed as an argument, so it doesn't make sense if it is immutable.
return t->AsParcelable() != nullptr && !t->IsJavaOnlyImmutable();
}
diff --git a/ast_cpp.cpp b/ast_cpp.cpp
index d5bd83e5..63f16b0d 100644
--- a/ast_cpp.cpp
+++ b/ast_cpp.cpp
@@ -323,7 +323,7 @@ SwitchStatement::SwitchStatement(const std::string& expression)
StatementBlock* SwitchStatement::AddCase(const string& value_expression) {
auto it = std::find(case_values_.begin(), case_values_.end(), value_expression);
if (it != case_values_.end()) {
- LOG(ERROR) << "internal error: duplicate switch case labels";
+ AIDL_ERROR(value_expression) << "Duplicate switch case labels";
return nullptr;
}
StatementBlock* ret = new StatementBlock();
diff --git a/code_writer.cpp b/code_writer.cpp
index 096c8955..447b91f5 100644
--- a/code_writer.cpp
+++ b/code_writer.cpp
@@ -15,13 +15,14 @@
*/
#include "code_writer.h"
+#include "logging.h"
+
#include <stdarg.h>
#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>
-#include <android-base/logging.h>
#include <android-base/stringprintf.h>
namespace android {
@@ -74,7 +75,7 @@ void CodeWriter::Indent() {
indent_level_++;
}
void CodeWriter::Dedent() {
- CHECK(indent_level_ > 0);
+ AIDL_FATAL_IF(indent_level_ <= 0, "Mismatched dedent");
indent_level_--;
}
diff --git a/generate_cpp.cpp b/generate_cpp.cpp
index 6c11d35c..e055df67 100644
--- a/generate_cpp.cpp
+++ b/generate_cpp.cpp
@@ -172,7 +172,7 @@ unique_ptr<Declaration> BuildMethodDecl(const AidlMethod& method, const AidlType
unique_ptr<Declaration> BuildMetaMethodDecl(const AidlMethod& method, const AidlTypenames&,
const Options& options, bool for_interface) {
- CHECK(!method.IsUserDefined());
+ AIDL_FATAL_IF(method.IsUserDefined(), method);
if (method.GetName() == kGetInterfaceVersion && options.Version()) {
std::ostringstream code;
if (for_interface) {
@@ -394,7 +394,7 @@ unique_ptr<Declaration> DefineClientMetaTransaction(const AidlTypenames& /* type
const AidlInterface& interface,
const AidlMethod& method,
const Options& options) {
- CHECK(!method.IsUserDefined());
+ AIDL_FATAL_IF(method.IsUserDefined(), method);
if (method.GetName() == kGetInterfaceVersion && options.Version() > 0) {
const string iface = ClassName(interface, ClassNames::INTERFACE);
const string proxy = ClassName(interface, ClassNames::CLIENT);
@@ -617,7 +617,7 @@ bool HandleServerTransaction(const AidlTypenames& typenames, const AidlInterface
bool HandleServerMetaTransaction(const AidlTypenames&, const AidlInterface& interface,
const AidlMethod& method, const Options& options,
StatementBlock* b) {
- CHECK(!method.IsUserDefined());
+ AIDL_FATAL_IF(method.IsUserDefined(), method);
if (method.GetName() == kGetInterfaceVersion && options.Version() > 0) {
std::ostringstream code;
@@ -953,7 +953,7 @@ unique_ptr<Document> BuildInterfaceHeader(const AidlTypenames& typenames,
break;
}
default: {
- LOG(FATAL) << "Unrecognized constant type: " << static_cast<int>(value.GetType());
+ AIDL_FATAL(value) << "Unrecognized constant type: " << static_cast<int>(value.GetType());
}
}
}
@@ -1247,10 +1247,10 @@ bool WriteHeader(const Options& options, const AidlTypenames& typenames,
header = BuildServerHeader(typenames, interface, options);
break;
default:
- LOG(FATAL) << "aidl internal error";
+ AIDL_FATAL(interface) << "aidl internal error";
}
if (!header) {
- LOG(ERROR) << "aidl internal error: Failed to generate header.";
+ AIDL_ERROR(interface) << "aidl internal error: Failed to generate header.";
return false;
}
@@ -1317,17 +1317,17 @@ bool GenerateCppParcel(const string& output_file, const Options& options,
// Need to write all of the source in the header file, not cpp file.
source->Write(header_writer.get());
}
- CHECK(header_writer->Close());
+ AIDL_FATAL_IF(!header_writer->Close(), header_path);
// TODO(b/111362593): no unecessary files just to have consistent output with interfaces
const string bp_header = options.OutputHeaderDir() + HeaderFile(parcelable, ClassNames::CLIENT);
unique_ptr<CodeWriter> bp_writer(io_delegate.GetCodeWriter(bp_header));
bp_writer->Write("#error TODO(b/111362593) parcelables do not have bp classes");
- CHECK(bp_writer->Close());
+ AIDL_FATAL_IF(!bp_writer->Close(), bp_header);
const string bn_header = options.OutputHeaderDir() + HeaderFile(parcelable, ClassNames::SERVER);
unique_ptr<CodeWriter> bn_writer(io_delegate.GetCodeWriter(bn_header));
bn_writer->Write("#error TODO(b/111362593) parcelables do not have bn classes");
- CHECK(bn_writer->Close());
+ AIDL_FATAL_IF(!bn_writer->Close(), bn_header);
unique_ptr<CodeWriter> source_writer = io_delegate.GetCodeWriter(output_file);
if (parcelable.IsGeneric()) {
@@ -1337,7 +1337,7 @@ bool GenerateCppParcel(const string& output_file, const Options& options,
} else {
source->Write(source_writer.get());
}
- CHECK(source_writer->Close());
+ AIDL_FATAL_IF(!source_writer->Close(), output_file);
return true;
}
@@ -1347,21 +1347,21 @@ bool GenerateCppParcelDeclaration(const std::string& filename, const Options& op
CodeWriterPtr source_writer = io_delegate.GetCodeWriter(filename);
*source_writer
<< "// This file is intentionally left blank as placeholder for parcel declaration.\n";
- CHECK(source_writer->Close());
+ AIDL_FATAL_IF(!source_writer->Close(), filename);
// TODO(b/111362593): no unecessary files just to have consistent output with interfaces
const string header_path = options.OutputHeaderDir() + HeaderFile(parcelable, ClassNames::RAW);
unique_ptr<CodeWriter> header_writer(io_delegate.GetCodeWriter(header_path));
header_writer->Write("#error TODO(b/111362593) parcelables do not have headers");
- CHECK(header_writer->Close());
+ AIDL_FATAL_IF(!header_writer->Close(), header_path);
const string bp_header = options.OutputHeaderDir() + HeaderFile(parcelable, ClassNames::CLIENT);
unique_ptr<CodeWriter> bp_writer(io_delegate.GetCodeWriter(bp_header));
bp_writer->Write("#error TODO(b/111362593) parcelables do not have bp classes");
- CHECK(bp_writer->Close());
+ AIDL_FATAL_IF(!bp_writer->Close(), bp_header);
const string bn_header = options.OutputHeaderDir() + HeaderFile(parcelable, ClassNames::SERVER);
unique_ptr<CodeWriter> bn_writer(io_delegate.GetCodeWriter(bn_header));
bn_writer->Write("#error TODO(b/111362593) parcelables do not have bn classes");
- CHECK(bn_writer->Close());
+ AIDL_FATAL_IF(!bn_writer->Close(), bn_header);
return true;
}
@@ -1376,21 +1376,21 @@ bool GenerateCppEnumDeclaration(const std::string& filename, const Options& opti
const string header_path = options.OutputHeaderDir() + HeaderFile(enum_decl, ClassNames::RAW);
unique_ptr<CodeWriter> header_writer(io_delegate.GetCodeWriter(header_path));
header->Write(header_writer.get());
- CHECK(header_writer->Close());
+ AIDL_FATAL_IF(!header_writer->Close(), header_path);
// TODO(b/111362593): no unnecessary files just to have consistent output with interfaces
CodeWriterPtr source_writer = io_delegate.GetCodeWriter(filename);
*source_writer
<< "// This file is intentionally left blank as placeholder for enum declaration.\n";
- CHECK(source_writer->Close());
+ AIDL_FATAL_IF(!source_writer->Close(), filename);
const string bp_header = options.OutputHeaderDir() + HeaderFile(enum_decl, ClassNames::CLIENT);
unique_ptr<CodeWriter> bp_writer(io_delegate.GetCodeWriter(bp_header));
bp_writer->Write("#error TODO(b/111362593) enums do not have bp classes");
- CHECK(bp_writer->Close());
+ AIDL_FATAL_IF(!bp_writer->Close(), bp_header);
const string bn_header = options.OutputHeaderDir() + HeaderFile(enum_decl, ClassNames::SERVER);
unique_ptr<CodeWriter> bn_writer(io_delegate.GetCodeWriter(bn_header));
bn_writer->Write("#error TODO(b/111362593) enums do not have bn classes");
- CHECK(bn_writer->Close());
+ AIDL_FATAL_IF(!bn_writer->Close(), bn_header);
return true;
}
@@ -1417,7 +1417,7 @@ bool GenerateCpp(const string& output_file, const Options& options, const AidlTy
return GenerateCppInterface(output_file, options, typenames, *interface, io_delegate);
}
- CHECK(false) << "Unrecognized type sent for cpp generation.";
+ AIDL_FATAL(defined_type) << "Unrecognized type sent for cpp generation.";
return false;
}
diff --git a/generate_java.cpp b/generate_java.cpp
index 9c918d16..5b998df7 100644
--- a/generate_java.cpp
+++ b/generate_java.cpp
@@ -36,8 +36,8 @@ using ::android::aidl::java::Variable;
using std::string;
namespace {
-inline string get_setter_name(const string& variablename) {
- CHECK(variablename.size() > 0) << "A field name cannot be empty.";
+inline string get_setter_name(const AidlNode& context, const string& variablename) {
+ AIDL_FATAL_IF(variablename.size() <= 0, context) << "A field name cannot be empty.";
std::ostringstream out;
out << "set" << static_cast<char>(toupper(variablename[0])) << variablename.substr(1);
return out.str();
@@ -100,7 +100,7 @@ bool generate_java(const std::string& filename, const AidlDefinedType* defined_t
return generate_java_interface(filename, interface, typenames, io_delegate, options);
}
- CHECK(false) << "Unrecognized type sent for java generation.";
+ AIDL_FATAL(defined_type) << "Unrecognized type sent for Java generation.";
return false;
}
@@ -162,7 +162,7 @@ std::unique_ptr<android::aidl::java::Class> generate_parcel_class(
out << " = " << variable->ValueString(ConstantValueDecorator);
}
out << ";\n";
- out << "public Builder " << get_setter_name(variable->GetName()) << "("
+ out << "public Builder " << get_setter_name(*variable, variable->GetName()) << "("
<< JavaSignatureOf(variable->GetType(), typenames) << " " << variable->GetName()
<< ") {\n"
<< " "
@@ -339,7 +339,8 @@ std::unique_ptr<android::aidl::java::Class> generate_parcel_class(
CreateFromParcelFor(context);
if (parcel->IsJavaOnlyImmutable()) {
context.writer.Write("%s.%s(%s);\n", builder_variable.c_str(),
- get_setter_name(field->GetName()).c_str(), field_variable_name.c_str());
+ get_setter_name(*field, field->GetName()).c_str(),
+ field_variable_name.c_str());
}
writer->Close();
read_or_create_method->statements->Add(std::make_shared<LiteralStatement>(code));
diff --git a/generate_java_binder.cpp b/generate_java_binder.cpp
index b9c7674f..3d58ccd5 100644
--- a/generate_java_binder.cpp
+++ b/generate_java_binder.cpp
@@ -945,7 +945,7 @@ static void generate_interface_descriptors(const Options& options, const AidlInt
static void compute_outline_methods(const AidlInterface* iface,
const std::shared_ptr<StubClass> stub, size_t outline_threshold,
size_t non_outline_count) {
- CHECK_LE(non_outline_count, outline_threshold);
+ AIDL_FATAL_IF(non_outline_count > outline_threshold, iface);
// We'll outline (create sub methods) if there are more than min_methods
// cases.
stub->transact_outline = iface->GetMethods().size() > outline_threshold;
@@ -1114,7 +1114,7 @@ std::unique_ptr<Class> generate_binder_interface_class(const AidlInterface* ifac
break;
}
default: {
- LOG(FATAL) << "Unrecognized constant type: " << static_cast<int>(value.GetType());
+ AIDL_FATAL(value) << "Unrecognized constant type: " << static_cast<int>(value.GetType());
}
}
}
diff --git a/generate_ndk.cpp b/generate_ndk.cpp
index 779de7e2..7617351b 100644
--- a/generate_ndk.cpp
+++ b/generate_ndk.cpp
@@ -45,23 +45,23 @@ void GenerateNdkInterface(const string& output_file, const Options& options,
const string i_header = options.OutputHeaderDir() + NdkHeaderFile(defined_type, ClassNames::RAW);
unique_ptr<CodeWriter> i_writer(io_delegate.GetCodeWriter(i_header));
GenerateInterfaceHeader(*i_writer, types, defined_type, options);
- CHECK(i_writer->Close());
+ AIDL_FATAL_IF(!i_writer->Close(), i_header);
const string bp_header =
options.OutputHeaderDir() + NdkHeaderFile(defined_type, ClassNames::CLIENT);
unique_ptr<CodeWriter> bp_writer(io_delegate.GetCodeWriter(bp_header));
GenerateClientHeader(*bp_writer, types, defined_type, options);
- CHECK(bp_writer->Close());
+ AIDL_FATAL_IF(!bp_writer->Close(), bp_header);
const string bn_header =
options.OutputHeaderDir() + NdkHeaderFile(defined_type, ClassNames::SERVER);
unique_ptr<CodeWriter> bn_writer(io_delegate.GetCodeWriter(bn_header));
GenerateServerHeader(*bn_writer, types, defined_type, options);
- CHECK(bn_writer->Close());
+ AIDL_FATAL_IF(!bn_writer->Close(), bn_header);
unique_ptr<CodeWriter> source_writer = io_delegate.GetCodeWriter(output_file);
GenerateSource(*source_writer, types, defined_type, options);
- CHECK(source_writer->Close());
+ AIDL_FATAL_IF(!source_writer->Close(), output_file);
}
void GenerateNdkParcel(const string& output_file, const Options& options,
@@ -79,27 +79,27 @@ void GenerateNdkParcel(const string& output_file, const Options& options,
} else {
GenerateParcelSource(*source_writer, types, defined_type, options);
}
- CHECK(source_writer->Close());
- CHECK(header_writer->Close());
+ (source_writer->Close());
+ AIDL_FATAL_IF(!header_writer->Close(), header_path);
const string bp_header =
options.OutputHeaderDir() + NdkHeaderFile(defined_type, ClassNames::CLIENT);
unique_ptr<CodeWriter> bp_writer(io_delegate.GetCodeWriter(bp_header));
*bp_writer << "#error TODO(b/111362593) defined_types do not have bp classes\n";
- CHECK(bp_writer->Close());
+ AIDL_FATAL_IF(!bp_writer->Close(), bp_header);
const string bn_header =
options.OutputHeaderDir() + NdkHeaderFile(defined_type, ClassNames::SERVER);
unique_ptr<CodeWriter> bn_writer(io_delegate.GetCodeWriter(bn_header));
*bn_writer << "#error TODO(b/111362593) defined_types do not have bn classes\n";
- CHECK(bn_writer->Close());
+ AIDL_FATAL_IF(!bn_writer->Close(), bn_header);
}
void GenerateNdkParcelDeclaration(const std::string& filename, const IoDelegate& io_delegate) {
CodeWriterPtr code_writer = io_delegate.GetCodeWriter(filename);
*code_writer
<< "// This file is intentionally left blank as placeholder for parcel declaration.\n";
- CHECK(code_writer->Close());
+ AIDL_FATAL_IF(!code_writer->Close(), filename);
}
void GenerateNdkEnumDeclaration(const string& output_file, const Options& options,
@@ -109,24 +109,24 @@ void GenerateNdkEnumDeclaration(const string& output_file, const Options& option
options.OutputHeaderDir() + NdkHeaderFile(defined_type, ClassNames::RAW);
unique_ptr<CodeWriter> header_writer(io_delegate.GetCodeWriter(header_path));
GenerateEnumHeader(*header_writer, types, defined_type, options);
- CHECK(header_writer->Close());
+ AIDL_FATAL_IF(!header_writer->Close(), header_path);
const string bp_header =
options.OutputHeaderDir() + NdkHeaderFile(defined_type, ClassNames::CLIENT);
unique_ptr<CodeWriter> bp_writer(io_delegate.GetCodeWriter(bp_header));
*bp_writer << "#error TODO(b/111362593) enums do not have bp classes\n";
- CHECK(bp_writer->Close());
+ AIDL_FATAL_IF(!bp_writer->Close(), bp_header);
const string bn_header =
options.OutputHeaderDir() + NdkHeaderFile(defined_type, ClassNames::SERVER);
unique_ptr<CodeWriter> bn_writer(io_delegate.GetCodeWriter(bn_header));
*bn_writer << "#error TODO(b/111362593) enums do not have bn classes\n";
- CHECK(bn_writer->Close());
+ AIDL_FATAL_IF(!bn_writer->Close(), bn_header);
unique_ptr<CodeWriter> source_writer = io_delegate.GetCodeWriter(output_file);
*source_writer
<< "// This file is intentionally left blank as placeholder for enum declaration.\n";
- CHECK(source_writer->Close());
+ AIDL_FATAL_IF(!source_writer->Close(), output_file);
}
void GenerateNdk(const string& output_file, const Options& options, const AidlTypenames& types,
@@ -154,7 +154,7 @@ void GenerateNdk(const string& output_file, const Options& options, const AidlTy
return;
}
- CHECK(false) << "Unrecognized type sent for NDK cpp generation.";
+ AIDL_FATAL(defined_type) << "Unrecognized type sent for NDK cpp generation.";
}
namespace internals {
@@ -272,8 +272,9 @@ static void GenerateSourceIncludes(CodeWriter& out, const AidlTypenames& types,
static void GenerateConstantDeclarations(CodeWriter& out, const AidlInterface& interface) {
for (const auto& constant : interface.GetConstantDeclarations()) {
const AidlConstantValue& value = constant->GetValue();
- CHECK(value.GetType() != AidlConstantValue::Type::UNARY &&
- value.GetType() != AidlConstantValue::Type::BINARY);
+ AIDL_FATAL_IF(value.GetType() == AidlConstantValue::Type::UNARY ||
+ value.GetType() == AidlConstantValue::Type::BINARY,
+ value);
if (value.GetType() == AidlConstantValue::Type::STRING) {
out << "static const char* " << constant->GetName() << ";\n";
}
@@ -283,8 +284,9 @@ static void GenerateConstantDeclarations(CodeWriter& out, const AidlInterface& i
bool hasIntegralConstant = false;
for (const auto& constant : interface.GetConstantDeclarations()) {
const AidlConstantValue& value = constant->GetValue();
- CHECK(value.GetType() != AidlConstantValue::Type::UNARY &&
- value.GetType() != AidlConstantValue::Type::BINARY);
+ AIDL_FATAL_IF(value.GetType() == AidlConstantValue::Type::UNARY ||
+ value.GetType() == AidlConstantValue::Type::BINARY,
+ value);
if (value.GetType() == AidlConstantValue::Type::BOOLEAN ||
value.GetType() == AidlConstantValue::Type::INT8 ||
value.GetType() == AidlConstantValue::Type::INT32) {
@@ -314,8 +316,9 @@ static void GenerateConstantDefinitions(CodeWriter& out, const AidlInterface& in
for (const auto& constant : interface.GetConstantDeclarations()) {
const AidlConstantValue& value = constant->GetValue();
- CHECK(value.GetType() != AidlConstantValue::Type::UNARY &&
- value.GetType() != AidlConstantValue::Type::BINARY);
+ AIDL_FATAL_IF(value.GetType() == AidlConstantValue::Type::UNARY ||
+ value.GetType() == AidlConstantValue::Type::BINARY,
+ value);
if (value.GetType() == AidlConstantValue::Type::STRING) {
out << "const char* " << clazz << "::" << constant->GetName() << " = "
<< constant->ValueString(ConstantValueDecorator) << ";\n";
diff --git a/generate_rust.cpp b/generate_rust.cpp
index 002abc41..df65bc25 100644
--- a/generate_rust.cpp
+++ b/generate_rust.cpp
@@ -422,7 +422,7 @@ bool GenerateRustInterface(const string& filename, const AidlInterface* iface,
break;
}
default: {
- LOG(FATAL) << "Unrecognized constant type: " << static_cast<int>(value.GetType());
+ AIDL_FATAL(value) << "Unrecognized constant type: " << static_cast<int>(value.GetType());
}
}
*code_writer << "pub const " << constant->GetName() << ": " << const_type << " = "
@@ -644,7 +644,7 @@ bool GenerateRust(const string& filename, const AidlDefinedType* defined_type,
return GenerateRustInterface(filename, interface, typenames, io_delegate, options);
}
- CHECK(false) << "Unrecognized type sent for Rust generation.";
+ AIDL_FATAL(filename) << "Unrecognized type sent for Rust generation.";
return false;
}
diff --git a/io_delegate.cpp b/io_delegate.cpp
index 4b2e00a0..c0ee97ac 100644
--- a/io_delegate.cpp
+++ b/io_delegate.cpp
@@ -22,6 +22,8 @@
#ifdef _WIN32
#include <direct.h>
+#include <windows.h>
+#undef ERROR
#else
#include <dirent.h>
#include <sys/stat.h>
@@ -49,7 +51,7 @@ bool IoDelegate::GetAbsolutePath(const string& path, string* absolute_path) {
char buf[4096];
DWORD path_len = GetFullPathName(path.c_str(), sizeof(buf), buf, nullptr);
if (path_len <= 0 || path_len >= sizeof(buf)) {
- LOG(ERROR) << "Failed to GetFullPathName(" << path << ")";
+ AIDL_ERROR(path) << "Failed to GetFullPathName";
return false;
}
*absolute_path = buf;
@@ -59,8 +61,7 @@ bool IoDelegate::GetAbsolutePath(const string& path, string* absolute_path) {
#else
if (path.empty()) {
- LOG(ERROR) << "Giving up on finding an absolute path to represent the "
- "empty string.";
+ AIDL_ERROR(path) << "Giving up on finding an absolute path to represent the empty string.";
return false;
}
if (path[0] == OS_PATH_SEPARATOR) {
@@ -70,8 +71,8 @@ bool IoDelegate::GetAbsolutePath(const string& path, string* absolute_path) {
char buf[4096];
if (getcwd(buf, sizeof(buf)) == nullptr) {
- LOG(ERROR) << "Path of current working directory does not fit in "
- << sizeof(buf) << " bytes";
+ AIDL_ERROR(path) << "Path of current working directory does not fit in " << sizeof(buf)
+ << " bytes";
return false;
}
@@ -138,8 +139,7 @@ static bool CreateNestedDirs(const string& caller_base_dir, const vector<string>
#endif
// On darwin when you try to mkdir("/", ...) we get EISDIR.
if (!success && (errno != EEXIST && errno != EISDIR)) {
- LOG(ERROR) << "Error while creating " << base_dir << ": "
- << strerror(errno);
+ AIDL_ERROR(caller_base_dir) << "Error while creating " << base_dir << ": " << strerror(errno);
return false;
}
}
@@ -201,7 +201,7 @@ vector<string> IoDelegate::ListFiles(const string&) const {
#else
static void add_list_files(const string& dirname, vector<string>* result) {
- CHECK(result != nullptr);
+ AIDL_FATAL_IF(result == nullptr, dirname);
std::unique_ptr<DIR, decltype(&closedir)> dir(opendir(dirname.c_str()), closedir);
if (dir != nullptr) {
while (struct dirent* ent = readdir(dir.get())) {
diff --git a/logging.h b/logging.h
index e166cef0..f6d6da1e 100644
--- a/logging.h
+++ b/logging.h
@@ -20,13 +20,6 @@
#include <iostream>
-// We must include windows.h before android-base/logging.h on Windows.
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-#include <android-base/logging.h>
-
// Generic point for printing any error in the AIDL compiler.
class AidlErrorLog {
public:
diff --git a/main.cpp b/main.cpp
index 35178cf5..69ba0609 100644
--- a/main.cpp
+++ b/main.cpp
@@ -30,13 +30,9 @@ constexpr Options::Language kDefaultLang = Options::Language::JAVA;
#endif
int main(int argc, char* argv[]) {
- android::base::InitLogging(argv);
- LOG(DEBUG) << "aidl starting";
-
Options options(argc, argv, kDefaultLang);
if (!options.Ok()) {
- std::cerr << options.GetErrorMessage();
- std::cerr << options.GetUsage();
+ AIDL_ERROR(options.GetErrorMessage()) << options.GetUsage();
return 1;
}
diff --git a/options.cpp b/options.cpp
index 5fb44a46..10181467 100644
--- a/options.cpp
+++ b/options.cpp
@@ -507,8 +507,9 @@ Options::Options(int argc, const char* const argv[], Options::Language default_l
}
}
- CHECK(output_dir_.empty() || output_dir_.back() == OS_PATH_SEPARATOR);
- CHECK(output_header_dir_.empty() || output_header_dir_.back() == OS_PATH_SEPARATOR);
+ AIDL_FATAL_IF(!output_dir_.empty() && output_dir_.back() != OS_PATH_SEPARATOR, output_dir_);
+ AIDL_FATAL_IF(!output_header_dir_.empty() && output_header_dir_.back() != OS_PATH_SEPARATOR,
+ output_header_dir_);
}
} // namespace aidl
diff --git a/parser.cpp b/parser.cpp
index 923eebda..f2b9c55f 100644
--- a/parser.cpp
+++ b/parser.cpp
@@ -15,7 +15,7 @@
*/
#include "parser.h"
-#include "aidl_language_y-module.h"
+#include "aidl_language_y.h"
#include "logging.h"
void yylex_init(void**);
diff --git a/parser.h b/parser.h
index 23da2696..0d39342a 100644
--- a/parser.h
+++ b/parser.h
@@ -19,8 +19,8 @@
#include "aidl_language.h"
#include "aidl_typenames.h"
#include "io_delegate.h"
+#include "logging.h"
#include "options.h"
-#include <android-base/logging.h>
#include <memory>
#include <string>
@@ -88,7 +88,7 @@ class Parser {
}
const AidlDocument& ParsedDocument() const {
- CHECK(!HasError());
+ AIDL_FATAL_IF(HasError(), FileName());
return *document_;
}