Merge changes from topic "am-a1205538-cc32-4ec0-9e68-c68e2ae82db6"

* changes:
  [automerger] Support list styles for PagedListView. am: d0e9e80e8d
  Support list styles for PagedListView.
diff --git a/buildSrc/build_dependencies.gradle b/buildSrc/build_dependencies.gradle
index d68b769..66121bd 100644
--- a/buildSrc/build_dependencies.gradle
+++ b/buildSrc/build_dependencies.gradle
@@ -29,6 +29,7 @@
 build_libs.jarjar_gradle = 'org.anarres.jarjar:jarjar-gradle:1.0.0'
 build_libs.error_prone = 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.13'
 build_libs.jacoco = 'org.jacoco:org.jacoco.core:0.7.8'
+build_libs.jacoco_ant = 'org.jacoco:org.jacoco.ant:0.7.8'
 build_libs.jetifier = 'androidx.tools.jetifier:gradle-plugin:0.1'
 build_libs.kotlin = [gradle_plugin: "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.0"]
 // jdiff dependencies
diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index 64c5f3f..7ae5736 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -17,7 +17,6 @@
 
 import android.support.DiffAndDocs
 import android.support.gmaven.GMavenVersionChecker
-import com.android.build.gradle.internal.coverage.JacocoPlugin
 import com.android.build.gradle.internal.coverage.JacocoReportTask
 import com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask
 import org.gradle.api.logging.configuration.ShowStacktrace
@@ -136,6 +135,29 @@
             }
         }
     }
+    buildOnServerTask.dependsOn createJacocoAntUberJarTask()
+}
+
+def createJacocoAntUberJarTask() {
+    def myJacoco = project.configurations.create('myJacoco')
+    project.dependencies.add('myJacoco', build_libs.jacoco_ant)
+
+    return project.tasks.create(
+            name: "JacocoAntUberJar",
+            type: Jar) {
+        inputs.files myJacoco
+        from {
+            myJacoco
+                    .resolvedConfiguration
+                    .resolvedArtifacts.collect{ zipTree(it.getFile()) }} {
+            // exclude all the signatures the jar might have
+            exclude "META-INF/*.SF"
+            exclude "META-INF/*.DSA"
+            exclude "META-INF/*.RSA"
+        }
+        destinationDir file(project.distDir)
+        archiveName "jacocoant.jar"
+    }
 }
 
 def configureSubProjects() {
@@ -191,25 +213,8 @@
                             archiveName "${project.name}-${v.baseName}-allclasses.jar"
                         }
 
-                        def collectJacocoAntPackages = project.tasks.create(
-                                name: "collectJacocoAntPackages",
-                                type: Jar) {
-                            inputs.files project.configurations[JacocoPlugin.ANT_CONFIGURATION_NAME]
-                            from {
-                                project.configurations[JacocoPlugin.ANT_CONFIGURATION_NAME]
-                                        .resolvedConfiguration
-                                        .resolvedArtifacts.collect{ zipTree(it.getFile()) }} {
-                                    // exclude all the signatures the jar might have
-                                    exclude "META-INF/*.SF"
-                                    exclude "META-INF/*.DSA"
-                                    exclude "META-INF/*.RSA"
-                                }
-                            destinationDir file(project.distDir)
-                            archiveName "jacocoant.jar"
-                        }
-
                         jarifyTask.dependsOn v.getJavaCompiler()
-                        v.assemble.dependsOn jarifyTask , collectJacocoAntPackages
+                        v.assemble.dependsOn jarifyTask
                     }
                 }
 
diff --git a/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt b/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
index 1d31354..a1d03b6 100644
--- a/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
+++ b/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
@@ -17,6 +17,7 @@
 package android.arch.persistence.room.parser
 
 import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.CoreMatchers.not
 import org.hamcrest.MatcherAssert.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -99,6 +100,36 @@
     }
 
     @Test
+    fun tablePrefixInInsert_set() {
+        // this is an invalid query, b/64539805
+        val query = SqlParser.parse("UPDATE trips SET trips.title=:title")
+        assertThat(query.errors, not(emptyList()))
+    }
+
+    @Test
+    fun tablePrefixInInsert_where() {
+        val query = SqlParser.parse("UPDATE trips SET title=:title WHERE trips.id=:id")
+        assertThat(query.errors, `is`(emptyList()))
+    }
+
+    @Test
+    fun tablePrefixInSelect_projection() {
+        val query = SqlParser.parse("SELECT a.name, b.last_name from user a, book b")
+        assertThat(query.errors, `is`(emptyList()))
+        assertThat(query.tables, `is`(setOf(Table("user", "a"),
+                Table("book", "b"))))
+    }
+
+    @Test
+    fun tablePrefixInSelect_where() {
+        val query = SqlParser.parse("SELECT a.name, b.last_name from user a, book b" +
+                " WHERE a.name = b.name")
+        assertThat(query.errors, `is`(emptyList()))
+        assertThat(query.tables, `is`(setOf(Table("user", "a"),
+                Table("book", "b"))))
+    }
+
+    @Test
     fun findBindVariables() {
         assertVariables("select * from users")
         assertVariables("select * from users where name like ?", "?")
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
index 0b184a9..f601a86 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
@@ -29,6 +29,7 @@
 import android.arch.persistence.room.Update;
 import android.arch.persistence.room.integration.testapp.TestDatabase;
 import android.arch.persistence.room.integration.testapp.vo.AvgWeightByAge;
+import android.arch.persistence.room.integration.testapp.vo.NameAndLastName;
 import android.arch.persistence.room.integration.testapp.vo.User;
 import android.database.Cursor;
 
@@ -208,6 +209,9 @@
     @Query("SELECT COUNT(*) from user")
     public abstract Integer getUserCount();
 
+    @Query("SELECT u.mName, u.mLastName from user u where mId = :id")
+    public abstract NameAndLastName getNameAndLastName(int id);
+
     @Transaction
     public void insertBothByAnnotation(final User a, final User b) {
         insert(a);
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/SimpleEntityReadWriteTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/SimpleEntityReadWriteTest.java
index f8049f3..c5015f2 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/SimpleEntityReadWriteTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/SimpleEntityReadWriteTest.java
@@ -35,6 +35,7 @@
 import android.arch.persistence.room.integration.testapp.dao.UserDao;
 import android.arch.persistence.room.integration.testapp.dao.UserPetDao;
 import android.arch.persistence.room.integration.testapp.vo.BlobEntity;
+import android.arch.persistence.room.integration.testapp.vo.NameAndLastName;
 import android.arch.persistence.room.integration.testapp.vo.Pet;
 import android.arch.persistence.room.integration.testapp.vo.Product;
 import android.arch.persistence.room.integration.testapp.vo.User;
@@ -524,4 +525,13 @@
         assertTrue("SQLiteConstraintException expected", caught);
         assertThat(mUserDao.count(), is(0));
     }
+
+    @Test
+    public void tablePrefix_simpleSelect() {
+        User user = TestUtil.createUser(3);
+        mUserDao.insert(user);
+        NameAndLastName result = mUserDao.getNameAndLastName(3);
+        assertThat(result.getName(), is(user.getName()));
+        assertThat(result.getLastName(), is(user.getLastName()));
+    }
 }
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/NameAndLastName.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/NameAndLastName.java
new file mode 100644
index 0000000..29e2554
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/NameAndLastName.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017 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.arch.persistence.room.integration.testapp.vo;
+
+
+public class NameAndLastName {
+    private String mName;
+    private String mLastName;
+
+    public NameAndLastName(String name, String lastName) {
+        mName = name;
+        mLastName = lastName;
+    }
+
+    public String getName() {
+        return mName;
+    }
+
+    public String getLastName() {
+        return mLastName;
+    }
+}