package com.android.node;

import android.R;
import android.view.inspector.InspectionCompanion;
import android.view.inspector.PropertyMapper;
import android.view.inspector.PropertyReader;
import java.lang.Override;

/**
 * Inspection companion for {@link TestNode}.
 *
 * Generated by {@link android.processor.view.inspector.InspectionCompanionGenerator}
 * on behalf of {@link android.processor.view.inspector.InspectionCompanionGeneratorTest}.
 */
public final class TestNode$InspectionCompanion implements InspectionCompanion<TestNode> {
    /**
     * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped.
     */
    private boolean mPropertiesMapped = false;

    /**
     * Property ID of {@code fieldProperty}.
     */
    private int mFieldPropertyId;

    @Override
    public void mapProperties(PropertyMapper propertyMapper) {
        mFieldPropertyId = propertyMapper.mapInt("fieldProperty", R.attr.fieldProperty);
        mPropertiesMapped = true;
    }

    @Override
    public void readProperties(TestNode node, PropertyReader propertyReader) {
        if (!mPropertiesMapped) {
            throw new InspectionCompanion.UninitializedPropertyMapException();
        }
        propertyReader.readInt(mFieldPropertyId, node.fieldProperty);
    }
}
