diff options
| -rw-r--r-- | api/current.txt | 9 | ||||
| -rw-r--r-- | core/java/android/view/inspector/GeneratedInspectionCompanionProvider.java | 47 | ||||
| -rw-r--r-- | core/java/android/view/inspector/InspectionCompanionProvider.java | 37 |
3 files changed, 93 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt index f8aa04be5425..ab18d721fcfc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -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); } diff --git a/core/java/android/view/inspector/GeneratedInspectionCompanionProvider.java b/core/java/android/view/inspector/GeneratedInspectionCompanionProvider.java new file mode 100644 index 000000000000..8faae1f1da98 --- /dev/null +++ b/core/java/android/view/inspector/GeneratedInspectionCompanionProvider.java @@ -0,0 +1,47 @@ +/* + * 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; + } + } +} diff --git a/core/java/android/view/inspector/InspectionCompanionProvider.java b/core/java/android/view/inspector/InspectionCompanionProvider.java new file mode 100644 index 000000000000..c08f49c611ee --- /dev/null +++ b/core/java/android/view/inspector/InspectionCompanionProvider.java @@ -0,0 +1,37 @@ +/* + * 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); +} |