Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kotlin workflow-ui-* re-org. #915

Merged
merged 3 commits into from Jan 31, 2020

Conversation

rjrjr
Copy link
Contributor

@rjrjr rjrjr commented Jan 25, 2020

It's now:

workflow-ui:core-common
workflow-ui:core-android
workflow-ui:backstack-common
workflow-ui:backstack-android
workflow-ui:modal-common
workflow-ui:modal-android

Closes #833, #903.

@rjrjr
Copy link
Contributor Author

rjrjr commented Jan 25, 2020

@Armaxis @zach-klippenstein

I wasn’t quite able to stick the landing. The bulk of the re-org is done, everything compiles, almost everything runs. But. A few samples (Dungeon, Tic Tac Toe, ToDo) crash at launch with a horrible stack trace that starts java.lang.AssertionError: Built-in class kotlin.Any is not found.

I assume this is something messed up in my environment, but I can't figure out what and I'm out of time.

Also, the loss of the default bindings (totally the right call!) really brings home how unpleasant the runtime nature of ViewRegistry errors are. I don't know what to do about that, but it sure was a drag to have to add BackStackContainer and AlertContainer all over the place.

@rjrjr
Copy link
Contributor Author

rjrjr commented Jan 25, 2020

Sample stack trace:

2020-01-24 18:54:01.650 11253-11304/com.squareup.sample.todo E/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-1
    Process: com.squareup.sample.todo, PID: 11253
    java.lang.AssertionError: Built-in class kotlin.Any is not found
        at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns$3.invoke(KotlinBuiltIns.java:113)
        at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns$3.invoke(KotlinBuiltIns.java:108)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:446)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:521)
        at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getBuiltInClassByName(KotlinBuiltIns.java:362)
        at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getAny(KotlinBuiltIns.java:367)
        at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getAnyType(KotlinBuiltIns.java:642)
        at kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$MockClassDescriptor.<init>(NotFoundClasses.kt:60)
        at kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$classes$1.invoke(NotFoundClasses.kt:44)
        at kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$classes$1.invoke(NotFoundClasses.kt:22)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:446)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:521)
        at kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses.getClass(NotFoundClasses.kt:92)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer$typeConstructor$1.invoke(TypeDeserializer.kt:109)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.typeConstructor(TypeDeserializer.kt:113)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.simpleType(TypeDeserializer.kt:75)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.type(TypeDeserializer.kt:63)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassTypeConstructor.computeSupertypes(DeserializedClassDescriptor.kt:180)
        at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor$supertypes$1.invoke(AbstractTypeConstructor.kt:80)
        at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor$supertypes$1.invoke(AbstractTypeConstructor.kt:26)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:352)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:408)
        at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor.getSupertypes(AbstractTypeConstructor.kt:27)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getNonDeclaredFunctionNames(DeserializedClassDescriptor.kt:290)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$functionNamesLazy$2.invoke(DeserializedMemberScope.kt:73)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$functionNamesLazy$2.invoke(DeserializedMemberScope.kt:40)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:352)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:408)
        at kotlin.reflect.jvm.internal.impl.storage.StorageKt.getValue(storage.kt:42)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope.getFunctionNamesLazy(Unknown Source:7)
2020-01-24 18:54:01.653 11253-11304/com.squareup.sample.todo E/AndroidRuntime:     at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope.getFunctionNames(DeserializedMemberScope.kt:84)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope.getContributedFunctions(DeserializedMemberScope.kt:138)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getContributedFunctions(DeserializedClassDescriptor.kt:231)
        at kotlin.reflect.jvm.internal.KClassImpl.getFunctions(KClassImpl.kt:208)
        at kotlin.reflect.jvm.internal.KDeclarationContainerImpl.findFunctionDescriptor(KDeclarationContainerImpl.kt:151)
        at kotlin.reflect.jvm.internal.KFunctionImpl$descriptor$2.invoke(KFunctionImpl.kt:56)
        at kotlin.reflect.jvm.internal.KFunctionImpl$descriptor$2.invoke(KFunctionImpl.kt:36)
        at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:92)
        at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:31)
        at kotlin.reflect.jvm.internal.KFunctionImpl.getDescriptor(Unknown Source:7)
        at kotlin.reflect.jvm.internal.KFunctionImpl.toString(KFunctionImpl.kt:184)
        at kotlin.jvm.internal.FunctionReference.toString(FunctionReference.java:98)
        at java.lang.String.valueOf(String.java:2924)
        at java.lang.StringBuilder.append(StringBuilder.java:132)
        at com.squareup.sample.todo.TodoListsScreen.toString(Unknown Source:22)
        at java.lang.String.valueOf(String.java:2924)
        at java.lang.StringBuilder.append(StringBuilder.java:132)
        at com.squareup.workflow.diagnostic.SimpleLoggingDiagnosticListener.onAfterWorkflowRendered(SimpleLoggingDiagnosticListener.kt:62)
        at com.squareup.workflow.diagnostic.ChainedDiagnosticListener.onAfterWorkflowRendered(ChainedDiagnosticListener.kt:76)
        at com.squareup.workflow.internal.WorkflowNode.renderWithStateType(WorkflowNode.kt:238)
        at com.squareup.workflow.internal.WorkflowNode.render(WorkflowNode.kt:116)
        at com.squareup.workflow.internal.WorkflowChildNode.render(WorkflowChildNode.kt:71)
        at com.squareup.workflow.internal.SubtreeManager.render(SubtreeManager.kt:146)
        at com.squareup.workflow.internal.RealRenderContext.renderChild(RealRenderContext.kt:95)
        at com.squareup.workflow.RenderContext$DefaultImpls.renderChild$default(RenderContext.kt:103)
        at com.squareup.sample.todo.TodoListsAppWorkflow.render(TodoListsAppWorkflow.kt:85)
        at com.squareup.sample.todo.TodoListsAppWorkflow.render(TodoListsAppWorkflow.kt:48)
        at com.squareup.workflow.internal.WorkflowNode.renderWithStateType(WorkflowNode.kt:236)
        at com.squareup.workflow.internal.WorkflowNode.render(WorkflowNode.kt:116)
        at com.squareup.workflow.internal.RealWorkflowLoop.doRender(WorkflowLoop.kt:145)
        at com.squareup.workflow.internal.RealWorkflowLoop$runWorkflowLoop$2.invokeSuspend(WorkflowLoop.kt:92)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
        at kotlinx.coroutines.EventLoop.processUnconfinedEvent(EventLoop.common.kt:68)
        at kotlinx.coroutines.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:320)
        at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:26)
        at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:109)
        at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:54)
        at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
        at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1)
        at com.squareup.workflow.LaunchWorkflowKt.launchWorkflowImpl(LaunchWorkflow.kt:137)
        at com.squareup.workflow.LaunchWorkflowKt.launchWorkflowIn(LaunchWorkflow.kt:103)
        at com.squareup.workflow.ui.WorkflowRunnerViewModel$Factory.create(WorkflowRunnerViewModel.kt:55)
2020-01-24 18:54:01.654 11253-11304/com.squareup.sample.todo E/AndroidRuntime:     at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
        at com.squareup.workflow.ui.WorkflowRunner$Companion.startWorkflow(WorkflowRunner.kt:111)
        at com.squareup.workflow.ui.WorkflowRunnerKt.setContentWorkflow(WorkflowRunner.kt:158)
        at com.squareup.workflow.ui.WorkflowRunnerKt.setContentWorkflow(WorkflowRunner.kt:224)
        at com.squareup.sample.mainactivity.MainActivity.onCreate(MainActivity.kt:36)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

@zach-klippenstein zach-klippenstein changed the title [DNM] Kotlin workflow-ui-* re-org. Kotlin workflow-ui-* re-org. Jan 31, 2020
@zach-klippenstein zach-klippenstein added this to Needs review in Workflow (Kotlin) via automation Jan 31, 2020
@zach-klippenstein zach-klippenstein added this to the kotlin v0.23.0 milestone Jan 31, 2020
@zach-klippenstein
Copy link
Collaborator

zach-klippenstein commented Jan 31, 2020

The weird compilation error was due to the overly-general packagingOptions exclusion. I reverted that, added only the ones it complained about, and moved it into the single root build.gradle file so it's not duplicated everywhere.

This seems to work, but a bunch of UI tests are flaking extremely hard, so even if this PR goes green it might not be great to merge it yet. However the tests don't flake when run in isolation, so I'm wondering if this is the same flakiness Ray noticed last week.

Copy link
Member

@Armaxis Armaxis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! This is going to help us a lot!

@zach-klippenstein
Copy link
Collaborator

Addressed comments, will merge on green.

@zach-klippenstein zach-klippenstein merged commit 4172907 into master Jan 31, 2020
Workflow (Kotlin) automation moved this from Needs review to Done Jan 31, 2020
@zach-klippenstein zach-klippenstein deleted the ray/break-up-android-ui-905-833 branch January 31, 2020 18:58
@rjrjr
Copy link
Contributor Author

rjrjr commented Feb 1, 2020 via email

@rjrjr
Copy link
Contributor Author

rjrjr commented Feb 1, 2020 via email

@zach-klippenstein
Copy link
Collaborator

So far they're fine on CI. But stop working, Ray.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kotlin Affects the Kotlin library.
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

[kotlin] Decide what default ViewBindings to provide, and where to actually bind them
3 participants