diff options
author | Ashley Rose <ashleyrose@google.com> | 2019-03-11 22:12:53 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-03-11 22:12:53 +0000 |
commit | 0a6dc7537157949ec6b09a18fdab5d32f1c1692c (patch) | |
tree | edf2648583cdcf0df6a802717a22e95adfcd0db7 | |
parent | e756f460d028794a265494e0619db02e6905676a (diff) | |
parent | fdb5af22aa43056de570526799ddf28101037d55 (diff) |
Merge "InspectionCompanions as nested classes"
12 files changed, 51 insertions, 20 deletions
diff --git a/api/current.txt b/api/current.txt index 9d32302a753f..0176c68b6295 100644 --- a/api/current.txt +++ b/api/current.txt @@ -53464,11 +53464,6 @@ 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); @@ -53549,6 +53544,11 @@ package android.view.inspector { ctor public PropertyReader.PropertyTypeMismatchException(int, @NonNull String, @NonNull String); } + public class StaticInspectionCompanionProvider implements android.view.inspector.InspectionCompanionProvider { + ctor public StaticInspectionCompanionProvider(); + method @Nullable public <T> android.view.inspector.InspectionCompanion<T> provide(@NonNull Class<T>); + } + public final class WindowInspector { method @NonNull public static java.util.List<android.view.View> getGlobalWindowViews(); } diff --git a/core/java/android/view/inspector/GeneratedInspectionCompanionProvider.java b/core/java/android/view/inspector/StaticInspectionCompanionProvider.java index d4b7e858bebd..42a892dedf4d 100644 --- a/core/java/android/view/inspector/GeneratedInspectionCompanionProvider.java +++ b/core/java/android/view/inspector/StaticInspectionCompanionProvider.java @@ -20,15 +20,15 @@ import android.annotation.NonNull; import android.annotation.Nullable; /** - * An inspection companion provider that loads pre-generated inspection companions + * An inspection companion provider that finds companions as inner classes or generated code. * * @see android.processor.view.inspector.PlatformInspectableProcessor */ -public class GeneratedInspectionCompanionProvider implements InspectionCompanionProvider { +public class StaticInspectionCompanionProvider implements InspectionCompanionProvider { /** - * The suffix used for the generated class + * The suffix used for the generated classes and inner classes */ - private static final String COMPANION_SUFFIX = "$$InspectionCompanion"; + private static final String COMPANION_SUFFIX = "$InspectionCompanion"; @Override @Nullable @@ -39,7 +39,12 @@ public class GeneratedInspectionCompanionProvider implements InspectionCompanion try { final Class<InspectionCompanion<T>> companionClass = (Class<InspectionCompanion<T>>) cls.getClassLoader().loadClass(companionName); - return companionClass.newInstance(); + + if (InspectionCompanion.class.isAssignableFrom(companionClass)) { + return companionClass.newInstance(); + } else { + return null; + } } catch (ClassNotFoundException e) { return null; } catch (IllegalAccessException e) { diff --git a/tools/processors/view_inspector/src/java/android/processor/view/inspector/InspectionCompanionGenerator.java b/tools/processors/view_inspector/src/java/android/processor/view/inspector/InspectionCompanionGenerator.java index 44d88bb4b73d..6f6c1aa485ac 100644 --- a/tools/processors/view_inspector/src/java/android/processor/view/inspector/InspectionCompanionGenerator.java +++ b/tools/processors/view_inspector/src/java/android/processor/view/inspector/InspectionCompanionGenerator.java @@ -97,7 +97,7 @@ public final class InspectionCompanionGenerator { /** * The suffix of the generated class name after the class's binary name. */ - private static final String GENERATED_CLASS_SUFFIX = "$$InspectionCompanion"; + private static final String GENERATED_CLASS_SUFFIX = "$InspectionCompanion"; /** * The null resource ID, copied to avoid a host dependency on platform code. diff --git a/tools/processors/view_inspector/src/java/android/processor/view/inspector/PlatformInspectableProcessor.java b/tools/processors/view_inspector/src/java/android/processor/view/inspector/PlatformInspectableProcessor.java index 01d94307f871..fd142c62e8e3 100644 --- a/tools/processors/view_inspector/src/java/android/processor/view/inspector/PlatformInspectableProcessor.java +++ b/tools/processors/view_inspector/src/java/android/processor/view/inspector/PlatformInspectableProcessor.java @@ -34,6 +34,7 @@ import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; +import javax.lang.model.util.ElementFilter; /** @@ -127,13 +128,38 @@ public final class PlatformInspectableProcessor extends AbstractProcessor { final InspectableClassModel model = modelMap.computeIfAbsent( classElement.get().getQualifiedName().toString(), - k -> new InspectableClassModel(ClassName.get(classElement.get()))); + k -> { + if (hasNestedInspectionCompanion(classElement.get())) { + fail( + String.format( + "Class %s already has an inspection companion.", + classElement.get().getQualifiedName().toString()), + element); + } + return new InspectableClassModel(ClassName.get(classElement.get())); + }); processor.process(element, model); } } /** + * Determine if a class has a nested class named {@code InspectionCompanion}. + * + * @param typeElement A type element representing the class to check + * @return f the class contains a class named {@code InspectionCompanion} + */ + private static boolean hasNestedInspectionCompanion(TypeElement typeElement) { + for (TypeElement nestedClass : ElementFilter.typesIn(typeElement.getEnclosedElements())) { + if (nestedClass.getSimpleName().toString().equals("InspectionCompanion")) { + return true; + } + } + + return false; + } + + /** * Get the nearest enclosing class if there is one. * * If {@param element} represents a class, it will be returned wrapped in an optional. diff --git a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/FieldProperty.java.txt b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/FieldProperty.java.txt index a44c43ec0b21..9a0fe5b76e27 100644 --- a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/FieldProperty.java.txt +++ b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/FieldProperty.java.txt @@ -12,7 +12,7 @@ import java.lang.Override; * 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> { +public final class TestNode$InspectionCompanion implements InspectionCompanion<TestNode> { /** * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped. */ diff --git a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/IntEnum.java.txt b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/IntEnum.java.txt index 764aa8bfbd63..b491de1d63ad 100644 --- a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/IntEnum.java.txt +++ b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/IntEnum.java.txt @@ -13,7 +13,7 @@ import java.lang.Override; * 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> { +public final class TestNode$InspectionCompanion implements InspectionCompanion<TestNode> { /** * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped. */ diff --git a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/IntFlag.java.txt b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/IntFlag.java.txt index 75f281314965..7d180580b45e 100644 --- a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/IntFlag.java.txt +++ b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/IntFlag.java.txt @@ -12,7 +12,7 @@ import java.lang.Override; * 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> { +public final class TestNode$InspectionCompanion implements InspectionCompanion<TestNode> { /** * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped. */ diff --git a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NestedClass.java.txt b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NestedClass.java.txt index 0cac462fba51..dc27abbe6fbd 100644 --- a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NestedClass.java.txt +++ b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NestedClass.java.txt @@ -11,7 +11,7 @@ import java.lang.Override; * Generated by {@link android.processor.view.inspector.InspectionCompanionGenerator} * on behalf of {@link android.processor.view.inspector.InspectionCompanionGeneratorTest}. */ -public final class Outer$Inner$$InspectionCompanion implements InspectionCompanion<Outer.Inner> { +public final class Outer$Inner$InspectionCompanion implements InspectionCompanion<Outer.Inner> { /** * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped. */ diff --git a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NoAttributeId.java.txt b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NoAttributeId.java.txt index ce0f867d5332..738bcd3dab36 100644 --- a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NoAttributeId.java.txt +++ b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NoAttributeId.java.txt @@ -11,7 +11,7 @@ import java.lang.Override; * 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> { +public final class TestNode$InspectionCompanion implements InspectionCompanion<TestNode> { /** * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped. */ diff --git a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NodeName.java.txt b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NodeName.java.txt index f7357fece2bf..82dd66e2597e 100644 --- a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NodeName.java.txt +++ b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/NodeName.java.txt @@ -12,7 +12,7 @@ import java.lang.String; * 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> { +public final class TestNode$InspectionCompanion implements InspectionCompanion<TestNode> { /** * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped. */ diff --git a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/SimpleProperties.java.txt b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/SimpleProperties.java.txt index 556d8ddc5d5e..08ea69679086 100644 --- a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/SimpleProperties.java.txt +++ b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/SimpleProperties.java.txt @@ -12,7 +12,7 @@ import java.lang.Override; * 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> { +public final class TestNode$InspectionCompanion implements InspectionCompanion<TestNode> { /** * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped. */ diff --git a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/SuppliedAttributeId.java.txt b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/SuppliedAttributeId.java.txt index d72cdd533205..3bfa78ac857f 100644 --- a/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/SuppliedAttributeId.java.txt +++ b/tools/processors/view_inspector/test/resources/android/processor/view/inspector/InspectionCompanionGeneratorTest/SuppliedAttributeId.java.txt @@ -11,7 +11,7 @@ import java.lang.Override; * 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> { +public final class TestNode$InspectionCompanion implements InspectionCompanion<TestNode> { /** * Set by {@link #mapProperties(PropertyMapper)} once properties have been mapped. */ |