profile
viewpoint
Jake Wharton JakeWharton Square Pittsburgh, PA, USA https://jakewharton.com

JakeWharton/butterknife 25523

Bind Android views and callbacks to fields and methods.

JakeWharton/ActionBarSherlock 7188

[DEPRECATED] Action bar implementation which uses the native action bar on Android 4.0+ and a custom implementation on pre-4.0 through a single API and theme.

cashapp/sqldelight 3656

SQLDelight - Generates typesafe Kotlin APIs from SQL

androidx/androidx 2256

Development environment for Jetpack Android extension libraries. Synchronized with Jetpack's primary development branch on AOSP.

JakeWharton/Android-DirectionalViewPager 1041

[DEPRECATED] Implementation of the compatibility library ViewPager class that supports paging both vertically and horizontally.

cashapp/duktape-android 789

The Duktape embeddable Javascript engine packaged for Android.

JakeWharton/adb-event-mirror 788

Mirror the touch/key/button events of one device onto one or more other devices in real-time

JakeWharton/dagger-reflect 622

A reflection-based implementation of the Dagger dependency injection library for fast IDE builds.

JakeWharton/dependency-tree-diff 517

An intelligent diff tool for the output of Gradle's dependencies task

JakeWharton/AutoValueAnnotations 227

A standalone packaging of the annotations from Google's AutoValue library.

startedJakeWharton/dockerfile-shebang

started time in 5 minutes

startedJakeWharton/dockerfile-shebang

started time in 8 minutes

push eventJetBrains/kotlin

Abduqodiri Qurbonzoda

commit sha 0e8cc4855212943fba55b07dcd6fb0ed21bcf0e5

Simplify range pattern by moving the last char in a range to the following range

view details

Abduqodiri Qurbonzoda

commit sha 9b8b5789b632cce43829819a759e1a752c572bb0

Revert "Make Letter range ends always positive values"

view details

Abduqodiri Qurbonzoda

commit sha 5ec10a2f9a736796cb5e8f21c03f800f1a0af5ef

Document range pattern methods

view details

Abduqodiri Qurbonzoda

commit sha 37508e7d8ecbd6f6b8927f05c1df4a0c51278d3d

Fix CategorizedRangePattern.removeLast() documentation

view details

Abduqodiri Qurbonzoda

commit sha 7d7822a4be64d2f33b7778f6a4a7dbd3bb248d5b

Move Categories.rangeLength & rangeCategory VarLenBase64 strings to init

view details

push time in 14 minutes

startedJakeWharton/dockerfile-shebang

started time in 14 minutes

issue closedsquare/kotlinpoet

How to judge whether the parameter of annotation is nullable?

val isNullable = parameterElement.asType().asTypeName().isNullable

When I do, it always returns null

closed time in 26 minutes

plumcookingwine

delete branch google/error-prone

delete branch : test_344901421

delete time in 29 minutes

PR merged google/error-prone

Introduce GitHub Actions based CI workflow cla: yes

Introduce GitHub Actions based CI workflow

+86 -0

0 comment

1 changed file

copybara-service[bot]

pr closed time in 29 minutes

push eventgoogle/error-prone

Liam Miller-Cushon

commit sha 745c3c7537ff0f13a3090c12ad5375ca9eb434f9

Introduce GitHub Actions based CI workflow PiperOrigin-RevId: 344921997

view details

push time in 29 minutes

push eventgoogle/error-prone

Liam Miller-Cushon

commit sha 745c3c7537ff0f13a3090c12ad5375ca9eb434f9

Introduce GitHub Actions based CI workflow PiperOrigin-RevId: 344921997

view details

push time in 29 minutes

PR opened Knio/dominate

Python 3.9
+2 -0

0 comment

2 changed files

pr created time in 29 minutes

push eventKnio/dominate

Tom Flanagan

commit sha 743867349a4e166ac7a862ff86ac2dc42804df7a

Update setup.py

view details

push time in 30 minutes

create barnchKnio/dominate

branch : knio/py39

created branch time in 31 minutes

issue openedsquare/kotlinpoet

How to judge whether the parameter of annotation is nullable?

val isNullable = parameterElement.asType().asTypeName().isNullable

When I do, it always returns null

created time in 33 minutes

startedJakeWharton/dockerfile-shebang

started time in an hour

push eventandroidx/androidx

George Mount

commit sha effa7fdf165609f14f1c54aa74a10af5d509c003

Remove SuspendingGestureTestUtil dependency on LayoutNode Fixes: 174505665 SuspendingGestureTestUtil can remove its dependency on LayoutNode and Owner with a small tweak to the implementation. Test: ran TapGestureDetectorTest and DragGestureDetectorTest Change-Id: I15fe3d45811ee6063467ffb0137e92bdbf14f1be

view details

Treehugger Robot

commit sha 880c8fdf0cf3de0416cf3183d4c05bebaf2b1694

Merge "Remove SuspendingGestureTestUtil dependency on LayoutNode" into androidx-master-dev

view details

push time in an hour

PR opened google/error-prone

Delete travis and appveyor configs

Delete travis and appveyor configs

and add Github Actions as a Copybara presubmit.

+0 -68

0 comment

1 changed file

pr created time in an hour

create barnchgoogle/error-prone

branch : test_344887123

created branch time in an hour

PR opened google/google-java-format

Delete travis and appveyor configs

Delete travis and appveyor configs

and add Github Actions as a Copybara presubmit.

+0 -39

0 comment

1 changed file

pr created time in an hour

create barnchgoogle/google-java-format

branch : test_344887123

created branch time in an hour

create barnchgoogle/error-prone

branch : test_344901421

created branch time in an hour

PR opened google/error-prone

Introduce GitHub Actions based CI workflow

Introduce GitHub Actions based CI workflow

+86 -0

0 comment

1 changed file

pr created time in an hour

startedJakeWharton/dockerfile-shebang

started time in an hour

push eventandroidx/androidx

Leland Richardson

commit sha fc8d6037f6031e88b7006a87f10da524a5900044

Audit use of @ComposeCompilerApi to just APIs targeted by compiler Fixes: 173463553 Fixes: 172939722 Change-Id: Ic0fbf67eafdb26ea7a639762084b44de52dba4dd

view details

Leland Richardson

commit sha 7f5d30386b96f6886a164659a12adf783b0c4eb1

Merge "Audit use of @ComposeCompilerApi to just APIs targeted by compiler" into androidx-master-dev

view details

push time in an hour

push eventgoogle/dagger

travis-ci

commit sha 0f5acae4f4743a1019e2bc8b8425d3e274fcb81b

Latest javadoc on successful travis build 1939 auto-pushed to gh-pages

view details

push time in an hour

push eventandroidx/androidx

Leland Richardson

commit sha a9b24794c8bf9baf63b19665d1c20518fad2ce6e

Remove unused classes left over from Framed implementation Fixes: 173518254 Fixes: 173463798 Change-Id: Ie9b15e382c8bb27d5c2443f55749ea3d48a98036

view details

Leland Richardson

commit sha 53fe055fffbbd1195b996cb843e5b68984ff6359

Move Updater APIs to internal published APIs where possible Fixes: 173518444 Change-Id: If28c225c274670182b4559b6997cda1766798bfd

view details

Leland Richardson

commit sha 98eb2035d9f3029aa9436a992bdeadecc2db932e

Merge "Move Updater APIs to internal published APIs where possible" into androidx-master-dev

view details

Leland Richardson

commit sha 88118f0b2a17a017de94798ca9b967388b897b12

Merge "Remove unused classes left over from Framed implementation" into androidx-master-dev

view details

push time in an hour

push eventandroidx/androidx

Ian Lake

commit sha 3923be10c41881617c6a87f9b7edb4258d340376

Update SavedState to 1.1.0-rc01 Test: ./gradlew -p savedstate checkApi Change-Id: Ie50440fad256847b2592ab538aa60a13fe75461f

view details

Ian Lake

commit sha 5459f96df30430843095a1176447a2f5e78ee783

Update Lifecycle to 2.3.0-rc01 Test: ./gradlew -p lifecycle checkApi Change-Id: I7bc852f89cfa7f916bf2fcb6283c9e4c9b76a655

view details

Ian Lake

commit sha fd2be59bf60b7e753092d50e6cddb7efc9c99f29

Merge changes I7bc852f8,Ie50440fa into androidx-master-dev * changes: Update Lifecycle to 2.3.0-rc01 Update SavedState to 1.1.0-rc01

view details

push time in an hour

Pull request review commentgradle/gradle-profiler

Add a profiler that takes a heap dump at the end of the build

+package org.gradle.trace.heapdump;++import com.sun.management.HotSpotDiagnosticMXBean;+import org.gradle.api.internal.GradleInternal;+import org.gradle.api.provider.Property;+import org.gradle.api.provider.Provider;+import org.gradle.api.services.BuildService;+import org.gradle.api.services.BuildServiceParameters;+import org.gradle.build.event.BuildEventsListenerRegistry;+import org.gradle.internal.UncheckedException;+import org.gradle.tooling.events.FinishEvent;+import org.gradle.tooling.events.OperationCompletionListener;++import javax.management.MBeanServer;+import java.io.Closeable;+import java.io.File;+import java.io.IOException;+import java.lang.management.ManagementFactory;++public class HeapDump {++    public HeapDump(GradleInternal gradle, File baseFile) {+        Provider<HeapDumpService> listenerProvider = gradle.getSharedServices().registerIfAbsent("heap-dump-at-end", HeapDumpService.class, spec -> {+            spec.getParameters().getBaseFile().set(baseFile.getAbsolutePath());+        });+        gradle.getServices().get(BuildEventsListenerRegistry.class).onTaskCompletion(listenerProvider);+    }++    interface Params extends BuildServiceParameters {+        Property<String> getBaseFile();+    }++    public static abstract class HeapDumpService implements OperationCompletionListener, Closeable, BuildService<Params> {+        static int counter = 0;++        @Override+        public void onFinish(FinishEvent event) {+            // Ignore+        }++        @Override+        public void close() {+            try {+                File dumpFile = new File(getParameters().getBaseFile().get() + "-heap-" + (++counter) + ".hprof");

If we use jcmd (which is what I did initially), then the heap dump happens after all of the build state has been released, which isn't useful for looking at what state is retained during the build. Using a build service allows heap dumps to happen at various points in the build lifecycle. For now, it happens during "build finished" which is good enough for my purposes, but could happen at any number of places.

We can skip heap dumps for warmups via some system property if we want to.

adammurdoch

comment created time in an hour

issue openedKotlin/kotlinx.coroutines

[guava] JobListenableFuture.isCancelled() throws if future is completed exceptionally

The bug was introduced in #2222

    @Test
    fun testFailedFuture_isCancelledDoesNotThrow() = runTest {
        val future = future(context = NonCancellable) {
            throw TestException()
        }
        yield()
        assertTrue(future.isDone)
        assertFalse(future.isCancelled)  // throws ExecutionException here.
        val thrown = assertFailsWith<ExecutionException> { future.get() }
        assertTrue(thrown.cause is TestException)
    }

Uninteraptables.getUninterruptibly(future) throws ExecutionException if the future is completed exceptionally.

created time in an hour

more