diff options
Diffstat (limited to 'tools/product_config/src/com/android/build/config/GenericConfig.java')
-rw-r--r-- | tools/product_config/src/com/android/build/config/GenericConfig.java | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/tools/product_config/src/com/android/build/config/GenericConfig.java b/tools/product_config/src/com/android/build/config/GenericConfig.java new file mode 100644 index 0000000000..2ee273564a --- /dev/null +++ b/tools/product_config/src/com/android/build/config/GenericConfig.java @@ -0,0 +1,131 @@ +/* + * 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. + */ + +package com.android.build.config; + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +/** + * Language-agnostic representation of a configuration statement. + */ +public class GenericConfig extends ConfigBase { + /** + * The config files that were imported in this config pass. + */ + protected final TreeMap<String, ConfigFile> mConfigFiles = new TreeMap(); + + /** + * A configuration file. + */ + public static class ConfigFile { + /** + * The name of the file, relative to the tree root. + */ + private final String mFilename; + + /** + * Sections of variable definitions and import statements. Product config + * files will always have at least one block. + */ + private final ArrayList<Statement> mStatements = new ArrayList(); + + public ConfigFile(String filename) { + mFilename = filename; + } + + public String getFilename() { + return mFilename; + } + + public void addStatement(Statement statement) { + mStatements.add(statement); + } + + public ArrayList<Statement> getStatements() { + return mStatements; + } + } + + /** + * Base class for statements that appear in config files. + */ + public static class Statement { + } + + /** + * A variable assignment. + */ + public static class Assign extends Statement { + private final String mVarName; + private final List<Str> mValue; + + /** + * Assignment of a single value + */ + public Assign(String varName, Str value) { + mVarName = varName; + mValue = new ArrayList(); + mValue.add(value); + } + + /** + * Assignment referencing a previous value. + * VAR := $(1) $(VAR) $(2) $(VAR) $(3) + */ + public Assign(String varName, List<Str> value) { + mVarName = varName; + mValue = value; + } + + public String getName() { + return mVarName; + } + + public List<Str> getValue() { + return mValue; + } + } + + /** + * An $(inherit-product FILENAME) statement + */ + public static class Inherit extends Statement { + private final Str mFilename; + + public Inherit(Str filename) { + mFilename = filename; + } + + public Str getFilename() { + return mFilename; + } + } + + /** + * Adds the given config file. Returns any one previously added, or null. + */ + public ConfigFile addConfigFile(ConfigFile file) { + return mConfigFiles.put(file.getFilename(), file); + } + + public TreeMap<String, ConfigFile> getFiles() { + return mConfigFiles; + } +} |