// Path: afservice/src/main/java/com/example/android/autofill/service/ClientParser.java
// public final class ClientParser {
//     private final List<AssistStructure> mStructures;
// 
//     public ClientParser(@NonNull List<AssistStructure> structures) {
//         Preconditions.checkNotNull(structures);
//         mStructures = structures;
//     }
// 
//     public ClientParser(@NonNull AssistStructure structure) {
//         this(ImmutableList.of(structure));
//     }
// 
//     /**
//      * Traverses through the {@link AssistStructure} and does something at each {@link ViewNode}.
//      *
//      * @param processor contains action to be performed on each {@link ViewNode}.
//      */
//     public void parse(NodeProcessor processor) {
//         for (AssistStructure structure : mStructures) {
//             int nodes = structure.getWindowNodeCount();
//             for (int i = 0; i < nodes; i++) {
//                 AssistStructure.ViewNode viewNode = structure.getWindowNodeAt(i).getRootViewNode();
//                 traverseRoot(viewNode, processor);
//             }
//         }
//     }
// 
//     private void traverseRoot(AssistStructure.ViewNode viewNode, NodeProcessor processor) {
//         processor.processNode(viewNode);
//         int childrenSize = viewNode.getChildCount();
//         if (childrenSize > 0) {
//             for (int i = 0; i < childrenSize; i++) {
//                 traverseRoot(viewNode.getChildAt(i), processor);
//             }
//         }
//     }
// 
//     public interface NodeProcessor {
//         void processNode(ViewNode node);
//     }
// }
// 
// Path: afservice/src/main/java/com/example/android/autofill/service/model/FieldType.java
// @Entity(primaryKeys = {"typeName"})
// public class FieldType {
//     @NonNull
//     @ColumnInfo(name = "typeName")
//     private final String mTypeName;
// 
//     @NonNull
//     @ColumnInfo(name = "autofillTypes")
//     private final IntList mAutofillTypes;
// 
//     @NonNull
//     @ColumnInfo(name = "saveInfo")
//     private final Integer mSaveInfo;
// 
//     @NonNull
//     @ColumnInfo(name = "partition")
//     private final Integer mPartition;
// 
//     @NonNull
//     @Embedded
//     private final FakeData mFakeData;
// 
//     public FieldType(@NonNull String typeName, @NonNull IntList autofillTypes,
//             @NonNull Integer saveInfo, @NonNull Integer partition, @NonNull FakeData fakeData) {
//         mTypeName = typeName;
//         mAutofillTypes = autofillTypes;
//         mSaveInfo = saveInfo;
//         mPartition = partition;
//         mFakeData = fakeData;
//     }
// 
//     @NonNull
//     public String getTypeName() {
//         return mTypeName;
//     }
// 
//     @NonNull
//     public IntList getAutofillTypes() {
//         return mAutofillTypes;
//     }
// 
//     @NonNull
//     public Integer getSaveInfo() {
//         return mSaveInfo;
//     }
// 
//     @NonNull
//     public Integer getPartition() {
//         return mPartition;
//     }
// 
//     @NonNull
//     public FakeData getFakeData() {
//         return mFakeData;
//     }
// }
// 
// Path: afservice/src/main/java/com/example/android/autofill/service/model/FieldTypeWithHeuristics.java
// public class FieldTypeWithHeuristics {
//     @Embedded
//     public FieldType fieldType;
// 
//     @Relation(parentColumn = "typeName", entityColumn = "fieldTypeName", entity = AutofillHint.class)
//     public List<AutofillHint> autofillHints;
// 
//     @Relation(parentColumn = "typeName", entityColumn = "fieldTypeName", entity = ResourceIdHeuristic.class)
//     public List<ResourceIdHeuristic> resourceIdHeuristics;
// 
//     public FieldType getFieldType() {
//         return fieldType;
//     }
// 
//     public List<AutofillHint> getAutofillHints() {
//         return autofillHints;
//     }
// 
//     public List<ResourceIdHeuristic> getResourceIdHeuristics() {
//         return resourceIdHeuristics;
//     }
// }
// 
// Path: afservice/src/main/java/com/example/android/autofill/service/util/Util.java
// public static void logd(String message, Object... params) {
//     if (logDebugEnabled()) {
//         Log.d(TAG, String.format(message, params));
//     }
// }


import android.app.assist.AssistStructure;
import android.util.MutableInt;
import android.view.autofill.AutofillId;
import com.example.android.autofill.service.ClientParser;
import com.example.android.autofill.service.model.FieldType;
import com.example.android.autofill.service.model.FieldTypeWithHeuristics;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import static com.example.android.autofill.service.util.Util.logd;
/*
 * Copyright (C) 2017 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.example.android.autofill.service.data;






public class ClientViewMetadataBuilder {
    private ClientParser mClientParser;
    private HashMap<String, FieldTypeWithHeuristics> mFieldTypesByAutofillHint;

// Path: afservice/src/main/java/com/example/android/autofill/service/ClientParser.java
// public final class ClientParser {
//     private final List<AssistStructure> mStructures;
// 
//     public ClientParser(@NonNull List<AssistStructure> structures) {
//         Preconditions.checkNotNull(structures);
//         mStructures = structures;
//     }
// 
//     public ClientParser(@NonNull AssistStructure structure) {
//         this(ImmutableList.of(structure));
//     }
// 
//     /**
//      * Traverses through the {@link AssistStructure} and does something at each {@link ViewNode}.
//      *
//      * @param processor contains action to be performed on each {@link ViewNode}.
//      */
//     public void parse(NodeProcessor processor) {
//         for (AssistStructure structure : mStructures) {
//             int nodes = structure.getWindowNodeCount();
//             for (int i = 0; i < nodes; i++) {
//                 AssistStructure.ViewNode viewNode = structure.getWindowNodeAt(i).getRootViewNode();
//                 traverseRoot(viewNode, processor);
//             }
//         }
//     }
// 
//     private void traverseRoot(AssistStructure.ViewNode viewNode, NodeProcessor processor) {
//         processor.processNode(viewNode);
//         int childrenSize = viewNode.getChildCount();
//         if (childrenSize > 0) {
//             for (int i = 0; i < childrenSize; i++) {
//                 traverseRoot(viewNode.getChildAt(i), processor);
//             }
//         }
//     }
// 
//     public interface NodeProcessor {
//         void processNode(ViewNode node);
//     }
// }
// 
// Path: afservice/src/main/java/com/example/android/autofill/service/model/FieldType.java
// @Entity(primaryKeys = {"typeName"})
// public class FieldType {
//     @NonNull
//     @ColumnInfo(name = "typeName")
//     private final String mTypeName;
// 
//     @NonNull
//     @ColumnInfo(name = "autofillTypes")
//     private final IntList mAutofillTypes;
// 
//     @NonNull
//     @ColumnInfo(name = "saveInfo")
//     private final Integer mSaveInfo;
// 
//     @NonNull
//     @ColumnInfo(name = "partition")
//     private final Integer mPartition;
// 
//     @NonNull
//     @Embedded
//     private final FakeData mFakeData;
// 
//     public FieldType(@NonNull String typeName, @NonNull IntList autofillTypes,
//             @NonNull Integer saveInfo, @NonNull Integer partition, @NonNull FakeData fakeData) {
//         mTypeName = typeName;
//         mAutofillTypes = autofillTypes;
//         mSaveInfo = saveInfo;
//         mPartition = partition;
//         mFakeData = fakeData;
//     }
// 
//     @NonNull
//     public String getTypeName() {
//         return mTypeName;
//     }
// 
//     @NonNull
//     public IntList getAutofillTypes() {
//         return mAutofillTypes;
//     }
// 
//     @NonNull
//     public Integer getSaveInfo() {
//         return mSaveInfo;
//     }
// 
//     @NonNull
//     public Integer getPartition() {
//         return mPartition;
//     }
// 
//     @NonNull
//     public FakeData getFakeData() {
//         return mFakeData;
//     }
// }
// 
// Path: afservice/src/main/java/com/example/android/autofill/service/model/FieldTypeWithHeuristics.java
// public class FieldTypeWithHeuristics {
//     @Embedded
//     public FieldType fieldType;
// 
//     @Relation(parentColumn = "typeName", entityColumn = "fieldTypeName", entity = AutofillHint.class)
//     public List<AutofillHint> autofillHints;
// 
//     @Relation(parentColumn = "typeName", entityColumn = "fieldTypeName", entity = ResourceIdHeuristic.class)
//     public List<ResourceIdHeuristic> resourceIdHeuristics;
// 
//     public FieldType getFieldType() {
//         return fieldType;
//     }
// 
//     public List<AutofillHint> getAutofillHints() {
//         return autofillHints;
//     }
// 
//     public List<ResourceIdHeuristic> getResourceIdHeuristics() {
//         return resourceIdHeuristics;
//     }
// }
// 
// Path: afservice/src/main/java/com/example/android/autofill/service/util/Util.java
// public static void logd(String message, Object... params) {
//     if (logDebugEnabled()) {
//         Log.d(TAG, String.format(message, params));
//     }
// }


// Path: afservice/src/main/java/com/example/android/autofill/service/data/ClientViewMetadataBuilder.java
import android.app.assist.AssistStructure;
import android.util.MutableInt;
import android.view.autofill.AutofillId;
import com.example.android.autofill.service.ClientParser;
import com.example.android.autofill.service.model.FieldType;
import com.example.android.autofill.service.model.FieldTypeWithHeuristics;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import static com.example.android.autofill.service.util.Util.logd;

/*
 * Copyright (C) 2017 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.example.android.autofill.service.data;






public class ClientViewMetadataBuilder {
    private ClientParser mClientParser;
    private HashMap<String, FieldTypeWithHeuristics> mFieldTypesByAutofillHint;

    public ClientViewMetadataBuilder(ClientParser parser,