1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#include "Logger.h"
17#include "Source.h"
18
19#include <memory>
20#include <iostream>
21
22namespace aapt {
23
24Log::Log(std::ostream& _out, std::ostream& _err) : out(_out), err(_err) {
25}
26
27std::shared_ptr<Log> Logger::sLog(std::make_shared<Log>(std::cerr, std::cerr));
28
29void Logger::setLog(const std::shared_ptr<Log>& log) {
30    sLog = log;
31}
32
33std::ostream& Logger::error() {
34    return sLog->err << "error: ";
35}
36
37std::ostream& Logger::error(const Source& source) {
38    return sLog->err << source << ": error: ";
39}
40
41std::ostream& Logger::error(const SourceLine& source) {
42    return sLog->err << source << ": error: ";
43}
44
45std::ostream& Logger::warn() {
46    return sLog->err << "warning: ";
47}
48
49std::ostream& Logger::warn(const Source& source) {
50    return sLog->err << source << ": warning: ";
51}
52
53std::ostream& Logger::warn(const SourceLine& source) {
54    return sLog->err << source << ": warning: ";
55}
56
57std::ostream& Logger::note() {
58    return sLog->out << "note: ";
59}
60
61std::ostream& Logger::note(const Source& source) {
62    return sLog->err << source << ": note: ";
63}
64
65std::ostream& Logger::note(const SourceLine& source) {
66    return sLog->err << source << ": note: ";
67}
68
69SourceLogger::SourceLogger(const Source& source)
70: mSource(source) {
71}
72
73std::ostream& SourceLogger::error() {
74    return Logger::error(mSource);
75}
76
77std::ostream& SourceLogger::error(size_t line) {
78    return Logger::error(SourceLine{ mSource.path, line });
79}
80
81std::ostream& SourceLogger::warn() {
82    return Logger::warn(mSource);
83}
84
85std::ostream& SourceLogger::warn(size_t line) {
86    return Logger::warn(SourceLine{ mSource.path, line });
87}
88
89std::ostream& SourceLogger::note() {
90    return Logger::note(mSource);
91}
92
93std::ostream& SourceLogger::note(size_t line) {
94    return Logger::note(SourceLine{ mSource.path, line });
95}
96
97} // namespace aapt
98