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_JAVA_CLASS_GENERATOR_H 186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#define AAPT_JAVA_CLASS_GENERATOR_H 196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "ResourceTable.h" 216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "ResourceValues.h" 227656554f91b40bc93bf94c89afcad4a9a8ced884Adam Lesinski#include "process/IResourceTableConsumer.h" 231ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "util/StringPiece.h" 241ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <ostream> 266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <string> 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 30b274e35abfbbd09e0fce983a215c11522c56cce2Adam Lesinskiclass AnnotationProcessor; 316cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinskiclass ClassDefinition; 32b274e35abfbbd09e0fce983a215c11522c56cce2Adam Lesinski 331ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskistruct JavaClassGeneratorOptions { 341ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski /* 351ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Specifies whether to use the 'final' modifier 361ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * on resource entries. Default is true. 371ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski */ 381ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski bool useFinal = true; 399e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 409e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski enum class SymbolTypes { 419e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski kAll, 429e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski kPublicPrivate, 439e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski kPublic, 449e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski }; 459e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 469e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski SymbolTypes types = SymbolTypes::kAll; 473524a23edb88f0e67352d55ac6a2919f1edf7b30Adam Lesinski 483524a23edb88f0e67352d55ac6a2919f1edf7b30Adam Lesinski /** 493524a23edb88f0e67352d55ac6a2919f1edf7b30Adam Lesinski * A list of JavaDoc annotations to add to the comments of all generated classes. 503524a23edb88f0e67352d55ac6a2919f1edf7b30Adam Lesinski */ 513524a23edb88f0e67352d55ac6a2919f1edf7b30Adam Lesinski std::vector<std::string> javadocAnnotations; 521ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski}; 531ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/* 556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Generates the R.java file for a resource table. 566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 571ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskiclass JavaClassGenerator { 586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskipublic: 597656554f91b40bc93bf94c89afcad4a9a8ced884Adam Lesinski JavaClassGenerator(IAaptContext* context, ResourceTable* table, 607656554f91b40bc93bf94c89afcad4a9a8ced884Adam Lesinski const JavaClassGeneratorOptions& options); 616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /* 63769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski * Writes the R.java file to `out`. Only symbols belonging to `package` are written. 64769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski * All symbols technically belong to a single package, but linked libraries will 65769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski * have their names mangled, denoting that they came from a different package. 66769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski * We need to generate these symbols in a separate file. 67769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski * Returns true on success. 686f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 699e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski bool generate(const StringPiece16& packageNameToGenerate, std::ostream* out); 709e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 719e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski bool generate(const StringPiece16& packageNameToGenerate, 729e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski const StringPiece16& outputPackageName, 739e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::ostream* out); 746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski const std::string& getError() const; 766f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 776f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiprivate: 786cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski bool addMembersToTypeClass(const StringPiece16& packageNameToGenerate, 796cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski const ResourceTablePackage* package, 806cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski const ResourceTableType* type, 816cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski ClassDefinition* outTypeClassDef); 826cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski 836cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski void addMembersToStyleableClass(const StringPiece16& packageNameToGenerate, 846cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski const std::u16string& entryName, 856cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski const Styleable* styleable, 866cbfb1de493e42d937158ed57495c9656864ccbaAdam Lesinski ClassDefinition* outStyleableClassDef); 876f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 889e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski bool skipSymbol(SymbolState state); 899e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 907656554f91b40bc93bf94c89afcad4a9a8ced884Adam Lesinski IAaptContext* mContext; 911ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ResourceTable* mTable; 921ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski JavaClassGeneratorOptions mOptions; 936f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::string mError; 946f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 956f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 966f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiinline const std::string& JavaClassGenerator::getError() const { 976f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski return mError; 986f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 996f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1006f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt 1016f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1026f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#endif // AAPT_JAVA_CLASS_GENERATOR_H 103