diff options
| author | Ashley Rose <ashleyrose@google.com> | 2019-01-29 18:40:22 -0500 |
|---|---|---|
| committer | Ashley Rose <ashleyrose@google.com> | 2019-02-04 14:18:27 -0500 |
| commit | a4850c440592f96599ea33eb75722ecde933be12 (patch) | |
| tree | ee1bcab20d01bfdc00a466bbf5d4617c70e546e2 /core/java | |
| parent | affa55b49baebce7ae1b8bb893e015379df83a49 (diff) | |
Add InspectionCompanionProvider
Bug: 117616612
Test: atest GeneratedInspectionCompanionProviderTest
Change-Id: I7998f4f8d9fdbb042e01b5b0c2fc66933b2035d1
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/inspector/GeneratedInspectionCompanionProvider.java | 47 | ||||
| -rw-r--r-- | core/java/android/view/inspector/InspectionCompanionProvider.java | 37 |
2 files changed, 84 insertions, 0 deletions
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); +} |
