Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aed477d5 authored by Ember Rose's avatar Ember Rose Committed by Android (Google) Code Review
Browse files

Merge "Add InspectionCompanionProvider"

parents a17c3d32 a4850c44
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -53407,6 +53407,11 @@ package android.view.inputmethod {
package android.view.inspector {
  public class GeneratedInspectionCompanionProvider implements android.view.inspector.InspectionCompanionProvider {
    ctor public GeneratedInspectionCompanionProvider();
    method @Nullable public <T> android.view.inspector.InspectionCompanion<T> provide(@NonNull Class<T>);
  }
  public interface InspectionCompanion<T> {
    method @Nullable public default String getNodeName();
    method public void mapProperties(@NonNull android.view.inspector.PropertyMapper);
@@ -53417,6 +53422,10 @@ package android.view.inspector {
    ctor public InspectionCompanion.UninitializedPropertyMapException();
  }
  public interface InspectionCompanionProvider {
    method @Nullable public <T> android.view.inspector.InspectionCompanion<T> provide(@NonNull Class<T>);
  }
  public final class IntEnumMapping {
    method @Nullable public String get(int);
  }
+47 −0
Original line number Diff line number Diff line
/*
 * Copyright 2019 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 android.view.inspector;

import android.annotation.NonNull;
import android.annotation.Nullable;

/**
 * An inspection companion provider that loads pre-generated inspection companions
 *
 * @see android.processor.view.inspector.PlatformInspectableProcessor
 */
public class GeneratedInspectionCompanionProvider implements InspectionCompanionProvider {
    /**
     * The suffix used for the generated class
     */
    private static final String COMPANION_SUFFIX = "$$InspectionCompanion";

    @Override
    @Nullable
    @SuppressWarnings("unchecked")
    public <T> InspectionCompanion<T> provide(@NonNull Class<T> cls) {
        final String companionName = cls.getName() + COMPANION_SUFFIX;

        try {
            final Class<InspectionCompanion<T>> companionClass =
                    (Class<InspectionCompanion<T>>) cls.getClassLoader().loadClass(companionName);
            return companionClass.newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            return null;
        }
    }
}
+37 −0
Original line number Diff line number Diff line
/*
 * Copyright 2019 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 android.view.inspector;

import android.annotation.NonNull;
import android.annotation.Nullable;

/**
 * An interface for services that can provide inspection companions for a class.
 */
public interface InspectionCompanionProvider {
    /**
     * Provide an {@link InspectionCompanion} for the supplied class.
     *
     * Implementing classes must not cache companion instances, and should instantiate a new one
     * for each request.
     *
     * @param cls A {@link Class} representing the inspectable type
     * @param <T> The type to find the companion for
     * @return The inspection companion for the supplied type
     */
    @Nullable
    <T> InspectionCompanion<T> provide(@NonNull Class<T> cls);
}