16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/* 26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License. 66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at 76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software 116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and 146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License. 156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#ifndef AAPT_LOGGER_H 186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#define AAPT_LOGGER_H 196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "Source.h" 216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <memory> 236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <ostream> 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <string> 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <utils/String8.h> 266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct Log { 306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski Log(std::ostream& out, std::ostream& err); 316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski Log(const Log& rhs) = delete; 326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::ostream& out; 346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::ostream& err; 356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiclass Logger { 386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskipublic: 396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static void setLog(const std::shared_ptr<Log>& log); 406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& error(); 426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& error(const Source& source); 436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& error(const SourceLine& sourceLine); 446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& warn(); 466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& warn(const Source& source); 476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& warn(const SourceLine& sourceLine); 486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& note(); 506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& note(const Source& source); 516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::ostream& note(const SourceLine& sourceLine); 526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiprivate: 546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski static std::shared_ptr<Log> sLog; 556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiclass SourceLogger { 586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskipublic: 596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski SourceLogger(const Source& source); 606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::ostream& error(); 626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::ostream& error(size_t line); 636f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 646f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::ostream& warn(); 656f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::ostream& warn(size_t line); 666f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 676f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::ostream& note(); 686f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::ostream& note(size_t line); 696f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 706f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiprivate: 716f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski Source mSource; 726f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 736f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiinline ::std::ostream& operator<<(::std::ostream& out, const std::u16string& str) { 756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski android::String8 utf8(str.data(), str.size()); 766f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski return out.write(utf8.string(), utf8.size()); 776f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 786f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 796f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt 806f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 816f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#endif // AAPT_LOGGER_H 82