diff --git a/build.sbt b/build.sbt index b27abb23..627669f2 100644 --- a/build.sbt +++ b/build.sbt @@ -18,6 +18,7 @@ lazy val V = def scala3 = "3.0.1" def metals = "0.10.6-M1" def scalameta = "4.4.26" + def semanticdbKotlinc = "0.0.2" def testcontainers = "0.39.3" def requests = "0.6.5" } @@ -156,6 +157,7 @@ lazy val cli = project "sbtSourcegraphVersion" -> com.sourcegraph.sbtsourcegraph.BuildInfo.version, "semanticdbVersion" -> V.scalameta, + "semanticdbKotlincVersion" -> V.semanticdbKotlinc, "mtagsVersion" -> V.metals, "scala211" -> V.scala211, "scala212" -> V.scala212, @@ -172,7 +174,8 @@ lazy val cli = project "org.scala-lang.modules" %% "scala-xml" % "1.3.0", "com.lihaoyi" %% "requests" % V.requests, "org.scalameta" %% "moped" % V.moped, - "org.scalameta" %% "ascii-graphs" % "0.1.2" + "org.scalameta" %% "ascii-graphs" % "0.1.2", + "org.jetbrains.kotlin" % "kotlin-compiler-embeddable" % "1.5.21" ), (Compile / resourceGenerators) += Def diff --git a/lsif-java/src/main/scala/com/sourcegraph/lsif_java/Dependencies.scala b/lsif-java/src/main/scala/com/sourcegraph/lsif_java/Dependencies.scala index ae324795..fc8c915f 100644 --- a/lsif-java/src/main/scala/com/sourcegraph/lsif_java/Dependencies.scala +++ b/lsif-java/src/main/scala/com/sourcegraph/lsif_java/Dependencies.scala @@ -4,9 +4,9 @@ import java.io.File import java.nio.file.Path import scala.concurrent.duration.Duration +import scala.util.Try import scala.xml.XML -import com.sourcegraph.lsif_java.BuildInfo import coursier.Fetch import coursier.Repositories import coursier.Resolve @@ -41,6 +41,37 @@ object Dependencies { Repositories.centralGcs ) + /** + * Attempts to find the "common definitions" JAR for a potentially + * MultiPlatform Project. We only support JVM for now, native and JS are not + * supported. If it ends with '-jvm', we search for a JAR with the classifier + * truncated. If it does not end with -jvm, we search for a JAR with the + * -common classifier. This is non-exhaustive, and the classifiers are + * completely arbitrary. + */ + def kotlinMPPCommon( + group: String, + artifact: String, + version: String + ): Option[Path] = + Try { + val task = Fetch[Task](Cache.default) + .withClassifiers(Set(Classifier.sources)) + .addRepositories(defaultExtraRepositories: _*) + + if (artifact.endsWith("-jvm")) { + val dependency = Dependencies + .parseDependency(s"$group:${artifact.stripSuffix("-jvm")}:$version") + val result = task.addDependencies(dependency).runResult() + return Some(result.files.head.toPath) + } + + val dependency = Dependencies + .parseDependency(s"$group:$artifact-common:$version") + val result = task.addDependencies(dependency).runResult() + result.files.head.toPath + }.toOption + def resolveDependencies( dependencies: List[String], transitive: Boolean = true diff --git a/lsif-java/src/main/scala/com/sourcegraph/lsif_java/buildtools/LsifBuildTool.scala b/lsif-java/src/main/scala/com/sourcegraph/lsif_java/buildtools/LsifBuildTool.scala index 05a441bb..f6b628ce 100644 --- a/lsif-java/src/main/scala/com/sourcegraph/lsif_java/buildtools/LsifBuildTool.scala +++ b/lsif-java/src/main/scala/com/sourcegraph/lsif_java/buildtools/LsifBuildTool.scala @@ -1,6 +1,7 @@ package com.sourcegraph.lsif_java.buildtools import java.io.File +import java.io.FileOutputStream import java.io.IOException import java.net.URLClassLoader import java.nio.file.FileSystems @@ -17,9 +18,11 @@ import java.util.Collections import java.util.Optional import java.util.ServiceLoader import java.util.concurrent.TimeUnit +import java.util.jar.JarFile import scala.collection.mutable.ListBuffer import scala.jdk.CollectionConverters._ +import scala.language.postfixOps import scala.util.Failure import scala.util.Success import scala.util.Try @@ -46,6 +49,14 @@ import moped.macros.ClassShape import moped.parsers.JsonParser import moped.reporters.Diagnostic import moped.reporters.Input +import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.ParseCommandLineArgumentsKt.parseCommandLineArguments +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation +import org.jetbrains.kotlin.cli.common.messages.MessageCollector +import org.jetbrains.kotlin.cli.common.messages.MessageRenderer +import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler +import org.jetbrains.kotlin.config.Services import os.CommandResult import os.ProcessOutput.Readlines import os.SubprocessException @@ -72,9 +83,12 @@ class LsifBuildTool(index: IndexCommand) extends BuildTool("LSIF", index) { private val scalaPattern = FileSystems .getDefault .getPathMatcher("glob:**.scala") + private val kotlinPattern = FileSystems + .getDefault + .getPathMatcher("glob:**.kt") private val allPatterns = FileSystems .getDefault - .getPathMatcher("glob:**.{java,scala}") + .getPathMatcher("glob:**.{java,scala,kt}") private val moduleInfo = Paths.get("module-info.java") override def usedInCurrentDirectory(): Boolean = @@ -139,20 +153,26 @@ class LsifBuildTool(index: IndexCommand) extends BuildTool("LSIF", index) { throw new NoSuchFileException(sourceroot.toString) } val allSourceFiles = collectAllSourceFiles(sourceroot) - val javaFiles = allSourceFiles.filter(path => javaPattern.matches(path)) - val scalaFiles = allSourceFiles.filter(path => scalaPattern.matches(path)) - if (javaFiles.isEmpty && scalaFiles.isEmpty) { + val javaFiles = allSourceFiles.filter(javaPattern.matches) + val scalaFiles = allSourceFiles.filter(scalaPattern.matches) + val kotlinFiles = allSourceFiles.filter(kotlinPattern.matches) + if (javaFiles.isEmpty && scalaFiles.isEmpty && kotlinFiles.isEmpty) { index .app .warning( - s"doing nothing, no files matching pattern '$sourceroot/**.{java,scala}'" + s"doing nothing, no files matching pattern '$sourceroot/**.{java,scala,kt}'" ) return CommandResult(0, Nil) } - val errors = ListBuffer.empty[Try[Unit]] - compileJavaFiles(tmp, deps, config, javaFiles) - .recover(e => errors.addOne(Failure(e))) - compileScalaFiles(deps, scalaFiles).recover(e => errors.addOne(Failure(e))) + + val compileAttemtps = ListBuffer.empty[Try[Unit]] + compileAttemtps += compileJavaFiles(tmp, deps, config, javaFiles) + compileAttemtps += compileScalaFiles(deps, scalaFiles) + compileAttemtps += compileKotlinFiles(deps, config, kotlinFiles) + val errors = compileAttemtps.collect { case Failure(exception) => + exception + } + if (index.cleanup) { Files.walkFileTree(tmp, new DeleteVisitor) } @@ -168,14 +188,141 @@ class LsifBuildTool(index: IndexCommand) extends BuildTool("LSIF", index) { .info( "Some SemanticDB files got generated even if there were compile errors. " + "In most cases, this means that lsif-java managed to index everything " + - "except the locations that had compile errors and you can ignore the compile errors." + - errors.mkString("\n") + "except the locations that had compile errors and you can ignore the compile errors." ) + errors.foreach { error => + index.app.reporter.info(error.getMessage()) + } } CommandResult(0, Nil) } } + private def compileKotlinFiles( + deps: Dependencies, + config: Config, + allKotlinFiles: List[Path] + ): Try[Unit] = { + if (allKotlinFiles.isEmpty) + return Success() + val filesPaths = allKotlinFiles.map(_.toString) + + val plugin = + Dependencies + .resolveDependencies( + List( + s"com.sourcegraph:semanticdb-kotlinc:${BuildInfo.semanticdbKotlincVersion}" + ), + transitive = false + ) + .classpath + .head + + val self = config.dependencies.head + val commonKotlinFiles: List[Path] = + Dependencies + .kotlinMPPCommon(self.groupId, self.artifactId, self.version) match { + case Some(common) => + val outdir = Files.createTempDirectory("lsifjava-kotlin") + val file = common.toFile + val basename = file + .getName + .substring(0, file.getName.lastIndexOf(".")) + val newFiles = ListBuffer[Path]() + val jar = new JarFile(file) + val enu = jar.entries + while (enu.hasMoreElements) { + val entry = enu.nextElement + val entryPath = + if (entry.getName.startsWith(basename)) + entry.getName.substring(basename.length) + else + entry.getName + + if (entry.isDirectory) { + new File(outdir.toString, entryPath).mkdirs + } else if (entry.getName.endsWith(".kt")) { + val newFile = new File(outdir.toString, entryPath) + newFiles.addOne(newFile.toPath) + val istream = jar.getInputStream(entry) + val ostream = new FileOutputStream(newFile) + Iterator + .continually(istream.read) + .takeWhile(-1 !=) + .foreach(ostream.write) + ostream.close() + istream.close() + } + } + newFiles.toList + case None => + List[Path]() + } + + val kargs: K2JVMCompilerArguments = new K2JVMCompilerArguments() + val args = ListBuffer[String]( + "-nowarn", + "-no-reflect", + "-no-stdlib", + "-Xmulti-platform", + "-Xno-check-actual", + "-Xopt-in=kotlin.RequiresOptIn", + "-Xopt-in=kotlin.ExperimentalUnsignedTypes", + "-Xopt-in=kotlin.ExperimentalStdlibApi", + "-Xopt-in=kotlin.ExperimentalMultiplatform", + "-Xopt-in=kotlin.contracts.ExperimentalContracts", + "-Xallow-kotlin-package", + s"-Xplugin=$plugin", + "-P", + s"plugin:semanticdb-kotlinc:sourceroot=$sourceroot", + "-P", + s"plugin:semanticdb-kotlinc:targetroot=$targetroot", + "-classpath", + deps.classpathSyntax + ) + + if (commonKotlinFiles.nonEmpty) { + args += + s"-Xcommon-sources=${commonKotlinFiles.map(_.toAbsolutePath.toString).mkString(",")}" + } + + args ++= filesPaths ++ commonKotlinFiles.map(_.toAbsolutePath.toString) + + parseCommandLineArguments(args.asJava, kargs) + + val exit = new K2JVMCompiler().exec( + new MessageCollector { + private val errors = new util.LinkedList[String] + override def clear(): Unit = errors.clear() + + override def hasErrors: Boolean = !errors.isEmpty + + override def report( + compilerMessageSeverity: CompilerMessageSeverity, + s: String, + compilerMessageSourceLocation: CompilerMessageSourceLocation + ): Unit = { + if ( + s.endsWith("without a body must be abstract") || + s.endsWith("must have a body") + ) + return // we get these when indexing the stdlib, no other solution found yet + val msg = MessageRenderer + .PLAIN_FULL_PATHS + .render(compilerMessageSeverity, s, compilerMessageSourceLocation) + index.app.reporter.debug(msg) + errors.push(msg) + } + }, + Services.EMPTY, + kargs + ) + if (exit.getCode == 0) + Success(()) + else + Failure(new Exception(exit.toString)) + } + private def compileScalaFiles( deps: Dependencies, allScalaFiles: List[Path] diff --git a/lsif-java/src/main/scala/com/sourcegraph/lsif_java/commands/IndexDependencyCommand.scala b/lsif-java/src/main/scala/com/sourcegraph/lsif_java/commands/IndexDependencyCommand.scala index 3236c1df..7a031abd 100644 --- a/lsif-java/src/main/scala/com/sourcegraph/lsif_java/commands/IndexDependencyCommand.scala +++ b/lsif-java/src/main/scala/com/sourcegraph/lsif_java/commands/IndexDependencyCommand.scala @@ -9,52 +9,53 @@ import java.nio.file.StandardOpenOption import java.util.jar.JarFile import com.sourcegraph.io.AbsolutePath +import com.sourcegraph.io.DeleteVisitor import com.sourcegraph.lsif_java.Dependencies import com.sourcegraph.lsif_semanticdb.JavaVersion +import moped.annotations.DeprecatedName +import moped.annotations.Hidden import moped.cli.Command import moped.cli.CommandParser final case class IndexDependencyCommand( - target: Path = Paths.get("maven"), + @DeprecatedName("target", "Use --output instead", "0.6.10") output: Path = + Paths.get("maven"), index: IndexCommand = IndexCommand(), - dependency: String = "" + @Hidden + snapshotCommand: SnapshotLsifCommand = SnapshotLsifCommand(), + dependency: String = "", + provided: List[String] = Nil, + snapshot: Boolean = false ) extends Command { def app = index.app private val absoluteTarget = AbsolutePath - .of(target, app.env.workingDirectory) + .of(output, app.env.workingDirectory) .resolve(dependency.replace(":", "__")) + private val indexTarget = + if (!snapshot) + absoluteTarget + else + Files.createTempDirectory("lsif-java-index") + private val snapshotTarget = absoluteTarget def run(): Int = { if (dependency == "") { app.reporter.error("dependency can't be empty") 1 } else { val deps = Dependencies - .resolveDependencies(List(dependency), transitive = false) + .resolveDependencies(dependency :: provided, transitive = false) deps.sources.headOption match { + case None => + app.reporter.error(s"no sources for dependency '$dependency'") + 1 case Some(sources) => unzipJar(sources) deps.classpath.headOption match { + case None => + app.reporter.error(s"no classpath for dependency '$dependency'") + 1 case Some(classpath) => - Option( - JavaVersion.classfileJvmVersion(classpath).orElse(8) - ) match { - case Some(jvmVersion) => - val config = - s"""{"kind":"maven","jvm":"$jvmVersion","dependencies":["$dependency"]}""" - Files.createDirectories(absoluteTarget) - Files.write( - absoluteTarget.resolve("lsif-java.json"), - config.getBytes(StandardCharsets.UTF_8), - StandardOpenOption.CREATE, - StandardOpenOption.TRUNCATE_EXISTING - ) - index - .copy( - buildTool = Some("lsif"), - app = app - .withEnv(app.env.withWorkingDirectory(absoluteTarget)) - ) - .run() + inferJvmVersion(classpath) match { case None => app .reporter @@ -62,19 +63,52 @@ final case class IndexDependencyCommand( s"failed to infer JVM version for classpath '$classpath'" ) 1 + case Some(jvmVersion) => + val exit = indexJar(jvmVersion) + if (exit == 0 && snapshot) { + try { + snapshotCommand + .copy( + output = snapshotTarget, + app = app + .withEnv(app.env.withWorkingDirectory(indexTarget)) + ) + .run() + } finally { + Files.walkFileTree(indexTarget, new DeleteVisitor()) + } + } else { + exit + } } - case None => - app.reporter.error(s"no classpath for dependency '$dependency'") - 1 } - case None => - app.reporter.error(s"no sources for dependency '$dependency'") - 1 } - 1 } } + private def inferJvmVersion(jar: Path): Option[Int] = { + Option(JavaVersion.classfileJvmVersion(jar).orElse(8)) + .map(JavaVersion.roundToNearestStableRelease(_)) + } + + private def indexJar(jvmVersion: Int): Int = { + val config = + s"""{"kind":"maven","jvm":"$jvmVersion","dependencies":["$dependency"]}""" + Files.createDirectories(indexTarget) + Files.write( + indexTarget.resolve("lsif-java.json"), + config.getBytes(StandardCharsets.UTF_8), + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING + ) + index + .copy( + buildTool = Some("lsif"), + app = app.withEnv(app.env.withWorkingDirectory(indexTarget)) + ) + .run() + } + private def unzipJar(file: Path): Unit = { val jar = new JarFile(file.toFile()) try { @@ -82,7 +116,7 @@ final case class IndexDependencyCommand( while (entries.hasMoreElements()) { val entry = entries.nextElement() if (!entry.isDirectory()) { - val out = absoluteTarget.resolve(entry.getName()) + val out = indexTarget.resolve(entry.getName()) Files.createDirectories(out.getParent()) val in = jar.getInputStream(entry) try Files.copy(in, out, StandardCopyOption.REPLACE_EXISTING) diff --git a/semanticdb-java/src/main/protobuf/semanticdb.proto b/semanticdb-java/src/main/protobuf/semanticdb.proto index 97f6eb63..039d8d23 100644 --- a/semanticdb-java/src/main/protobuf/semanticdb.proto +++ b/semanticdb-java/src/main/protobuf/semanticdb.proto @@ -33,6 +33,7 @@ enum Language { UNKNOWN_LANGUAGE = 0; SCALA = 1; JAVA = 2; + KOTLIN = 3; } message Range { diff --git a/tests/snapshots/src/main/generated/BaseByteRenderer.scala b/tests/snapshots/src/main/generated/BaseByteRenderer.scala index 4f6b1555..e9310d05 100644 --- a/tests/snapshots/src/main/generated/BaseByteRenderer.scala +++ b/tests/snapshots/src/main/generated/BaseByteRenderer.scala @@ -22,39 +22,39 @@ import upickle.core.{ArrVisitor, ObjVisitor} * benefits from receiving data in batches, rather than elem by elem. */ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] -// ^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer# -// ^ definition ujson/BaseByteRenderer#[T] +// ^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer# class BaseByteRenderer[T <: Output] +// ^ definition ujson/BaseByteRenderer#[T] T <: Output // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^ reference upickle/core/ByteOps. // ^^^^^^ reference upickle/core/ByteOps.Output# (out: T, -// ^^^ definition ujson/BaseByteRenderer#out. +// ^^^ definition ujson/BaseByteRenderer#out. private[this] val out: T // ^ reference ujson/BaseByteRenderer#[T] indent: Int = -1, -// ^^^^^^ definition ujson/BaseByteRenderer#indent. +// ^^^^^^ definition ujson/BaseByteRenderer#indent. private[this] val indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false) extends JsVisitor[T, T]{ -// ^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#escapeUnicode. +// ^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#escapeUnicode. private[this] val escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^^^^^^ reference ujson/JsVisitor# // ^ reference ujson/BaseByteRenderer#[T] // ^ reference ujson/BaseByteRenderer#[T] // reference java/lang/Object#``(). private[this] val elemBuilder = new upickle.core.ByteBuilder -// ^^^^^^^^^^^ definition ujson/BaseByteRenderer#elemBuilder. +// ^^^^^^^^^^^ definition ujson/BaseByteRenderer#elemBuilder. private[this] val elemBuilder: ByteBuilder // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^ reference upickle/core/ByteBuilder# // reference upickle/core/ByteBuilder#``(). private[this] val unicodeCharBuilder = new upickle.core.CharBuilder() -// ^^^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#unicodeCharBuilder. +// ^^^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#unicodeCharBuilder. private[this] val unicodeCharBuilder: CharBuilder // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^ reference upickle/core/CharBuilder# // reference upickle/core/CharBuilder#``(). def flushByteBuilder() = { -// ^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#flushByteBuilder(). +// ^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#flushByteBuilder(). def flushByteBuilder(): Unit elemBuilder.writeOutToIfLongerThan(out, if (depth == 0) 0 else 1000) // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#elemBuilder. // ^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/ByteBuilder#writeOutToIfLongerThan(). @@ -64,15 +64,15 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } private[this] var depth: Int = 0 -// ^^^^^ definition ujson/BaseByteRenderer#depth(). +// ^^^^^ definition ujson/BaseByteRenderer#depth(). private[this] var depth: Int // ^^^ reference scala/Int# private[this] var commaBuffered = false -// ^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#commaBuffered(). +// ^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#commaBuffered(). private[this] var commaBuffered: Boolean def flushBuffer() = { -// ^^^^^^^^^^^ definition ujson/BaseByteRenderer#flushBuffer(). +// ^^^^^^^^^^^ definition ujson/BaseByteRenderer#flushBuffer(). def flushBuffer(): Unit if (commaBuffered) { // ^^^^^^^^^^^^^ reference ujson/BaseByteRenderer#commaBuffered(). commaBuffered = false @@ -85,11 +85,12 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } } def visitArray(length: Int, index: Int) = new ArrVisitor[T, T] { -// ^^^^^^^^^^ definition ujson/BaseByteRenderer#visitArray(). -// ^^^^^^ definition ujson/BaseByteRenderer#visitArray().(length) +// ^^^^^^^^^^ definition ujson/BaseByteRenderer#visitArray(). def visitArray(length: Int, index: Int): { def subVisitor: BaseByteRenderer[T] } +// ^^^^^^ definition ujson/BaseByteRenderer#visitArray().(length) length: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/BaseByteRenderer#visitArray().(index) +// ^^^^^ definition ujson/BaseByteRenderer#visitArray().(index) index: Int // ^^^ reference scala/Int# +// definition local1 final class $anon // ^^^^^^^^^^ reference upickle/core/ArrVisitor# // ^ reference ujson/BaseByteRenderer#[T] // ^ reference ujson/BaseByteRenderer#[T] @@ -106,13 +107,13 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] renderIndent() // ^^^^^^^^^^^^ reference ujson/BaseByteRenderer#renderIndent(). def subVisitor = BaseByteRenderer.this -// ^^^^^^^^^^ definition local0 +// ^^^^^^^^^^ definition local0 def subVisitor: BaseByteRenderer[T] // ^^^^^^^^^^^^^^^^ reference ujson/BaseByteRenderer# def visitValue(v: T, index: Int): Unit = { -// ^^^^^^^^^^ definition local1 -// ^ definition local2 +// ^^^^^^^^^^ definition local2 def visitValue(v: T, index: Int): Unit +// ^ definition local4 v: T // ^ reference ujson/BaseByteRenderer#[T] -// ^^^^^ definition local3 +// ^^^^^ definition local5 index: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# flushBuffer() @@ -121,8 +122,8 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] // ^^^^^^^^^^^^^ reference ujson/BaseByteRenderer#commaBuffered(). } def visitEnd(index: Int) = { -// ^^^^^^^^ definition local4 -// ^^^^^ definition local5 +// ^^^^^^^^ definition local3 def visitEnd(index: Int): T +// ^^^^^ definition local6 index: Int // ^^^ reference scala/Int# commaBuffered = false // ^^^^^^^^^^^^^ reference ujson/BaseByteRenderer#commaBuffered(). @@ -142,11 +143,12 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } def visitObject(length: Int, index: Int) = new ObjVisitor[T, T] { -// ^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitObject(). -// ^^^^^^ definition ujson/BaseByteRenderer#visitObject().(length) +// ^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitObject(). def visitObject(length: Int, index: Int): { def subVisitor: BaseByteRenderer[T]; def visitKey(index: Int): BaseByteRenderer[T] } +// ^^^^^^ definition ujson/BaseByteRenderer#visitObject().(length) length: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/BaseByteRenderer#visitObject().(index) +// ^^^^^ definition ujson/BaseByteRenderer#visitObject().(index) index: Int // ^^^ reference scala/Int# +// definition local10 final class $anon // ^^^^^^^^^^ reference upickle/core/ObjVisitor# // ^ reference ujson/BaseByteRenderer#[T] // ^ reference ujson/BaseByteRenderer#[T] @@ -162,16 +164,16 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] renderIndent() // ^^^^^^^^^^^^ reference ujson/BaseByteRenderer#renderIndent(). def subVisitor = BaseByteRenderer.this -// ^^^^^^^^^^ definition local6 +// ^^^^^^^^^^ definition local7 def subVisitor: BaseByteRenderer[T] // ^^^^^^^^^^^^^^^^ reference ujson/BaseByteRenderer# def visitKey(index: Int) = BaseByteRenderer.this -// ^^^^^^^^ definition local7 -// ^^^^^ definition local8 +// ^^^^^^^^ definition local8 def visitKey(index: Int): BaseByteRenderer[T] +// ^^^^^ definition local9 index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^^^^^ reference ujson/BaseByteRenderer# def visitKeyValue(s: Any): Unit = { -// ^^^^^^^^^^^^^ definition local9 -// ^ definition local10 +// ^^^^^^^^^^^^^ definition local11 def visitKeyValue(s: Any): Unit +// ^ definition local14 s: Any // ^^^ reference scala/Any# // ^^^^ reference scala/Unit# elemBuilder.append(':') @@ -184,18 +186,18 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] // ^^^^^^ reference upickle/core/ByteBuilder#append(). } def visitValue(v: T, index: Int): Unit = { -// ^^^^^^^^^^ definition local11 -// ^ definition local12 +// ^^^^^^^^^^ definition local12 def visitValue(v: T, index: Int): Unit +// ^ definition local15 v: T // ^ reference ujson/BaseByteRenderer#[T] -// ^^^^^ definition local13 +// ^^^^^ definition local16 index: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# commaBuffered = true // ^^^^^^^^^^^^^ reference ujson/BaseByteRenderer#commaBuffered(). } def visitEnd(index: Int) = { -// ^^^^^^^^ definition local14 -// ^^^^^ definition local15 +// ^^^^^^^^ definition local13 def visitEnd(index: Int): T +// ^^^^^ definition local17 index: Int // ^^^ reference scala/Int# commaBuffered = false // ^^^^^^^^^^^^^ reference ujson/BaseByteRenderer#commaBuffered(). @@ -215,8 +217,8 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } def visitNull(index: Int) = { -// ^^^^^^^^^ definition ujson/BaseByteRenderer#visitNull(). -// ^^^^^ definition ujson/BaseByteRenderer#visitNull().(index) +// ^^^^^^^^^ definition ujson/BaseByteRenderer#visitNull(). def visitNull(index: Int): T +// ^^^^^ definition ujson/BaseByteRenderer#visitNull().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#flushBuffer(). @@ -242,8 +244,8 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } def visitFalse(index: Int) = { -// ^^^^^^^^^^ definition ujson/BaseByteRenderer#visitFalse(). -// ^^^^^ definition ujson/BaseByteRenderer#visitFalse().(index) +// ^^^^^^^^^^ definition ujson/BaseByteRenderer#visitFalse(). def visitFalse(index: Int): T +// ^^^^^ definition ujson/BaseByteRenderer#visitFalse().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#flushBuffer(). @@ -272,8 +274,8 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } def visitTrue(index: Int) = { -// ^^^^^^^^^ definition ujson/BaseByteRenderer#visitTrue(). -// ^^^^^ definition ujson/BaseByteRenderer#visitTrue().(index) +// ^^^^^^^^^ definition ujson/BaseByteRenderer#visitTrue(). def visitTrue(index: Int): T +// ^^^^^ definition ujson/BaseByteRenderer#visitTrue().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#flushBuffer(). @@ -299,14 +301,14 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, index: Int) = { -// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitFloat64StringParts(). -// ^ definition ujson/BaseByteRenderer#visitFloat64StringParts().(s) +// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitFloat64StringParts(). def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, index: Int): T +// ^ definition ujson/BaseByteRenderer#visitFloat64StringParts().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^ definition ujson/BaseByteRenderer#visitFloat64StringParts().(decIndex) +// ^^^^^^^^ definition ujson/BaseByteRenderer#visitFloat64StringParts().(decIndex) decIndex: Int // ^^^ reference scala/Int# -// ^^^^^^^^ definition ujson/BaseByteRenderer#visitFloat64StringParts().(expIndex) +// ^^^^^^^^ definition ujson/BaseByteRenderer#visitFloat64StringParts().(expIndex) expIndex: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/BaseByteRenderer#visitFloat64StringParts().(index) +// ^^^^^ definition ujson/BaseByteRenderer#visitFloat64StringParts().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#flushBuffer(). @@ -316,23 +318,23 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] // ^ reference ujson/BaseByteRenderer#visitFloat64StringParts().(s) // ^^^^^^ reference java/lang/CharSequence#length(). var i = 0 -// ^ definition local16 +// ^ definition local18 i: Int val sLength = s.length -// ^^^^^^^ definition local17 +// ^^^^^^^ definition local19 sLength: Int // ^ reference ujson/BaseByteRenderer#visitFloat64StringParts().(s) // ^^^^^^ reference java/lang/CharSequence#length(). while(i < sLength){ -// ^ reference local16 +// ^ reference local18 // ^ reference scala/Int#`<`(+3). -// ^^^^^^^ reference local17 +// ^^^^^^^ reference local19 elemBuilder.appendUnsafeC(s.charAt(i)) // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#elemBuilder. // ^^^^^^^^^^^^^ reference upickle/core/ByteBuilder#appendUnsafeC(). // ^ reference ujson/BaseByteRenderer#visitFloat64StringParts().(s) // ^^^^^^ reference java/lang/CharSequence#charAt(). -// ^ reference local16 +// ^ reference local18 i += 1 -// ^ reference local16 +// ^ reference local18 // ^^ reference scala/Int#`+`(+4). } flushByteBuilder() @@ -342,10 +344,10 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } override def visitFloat64(d: Double, index: Int) = { -// ^^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitFloat64(). -// ^ definition ujson/BaseByteRenderer#visitFloat64().(d) +// ^^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitFloat64(). def visitFloat64(d: Double, index: Int): T +// ^ definition ujson/BaseByteRenderer#visitFloat64().(d) d: Double // ^^^^^^ reference scala/Double# -// ^^^^^ definition ujson/BaseByteRenderer#visitFloat64().(index) +// ^^^^^ definition ujson/BaseByteRenderer#visitFloat64().(index) index: Int // ^^^ reference scala/Int# d match{ // ^ reference ujson/BaseByteRenderer#visitFloat64().(d) @@ -358,30 +360,30 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] // ^^^^^^^^^^^^^^^^ reference scala/Double.NegativeInfinity. // ^^^^^^^^^^^^^^^^^^ reference ujson/BaseByteRenderer#visitNonNullString(). case d if java.lang.Double.isNaN(d) => visitNonNullString("NaN", -1) -// ^ definition local18 +// ^ definition local21 d: Double // ^^^^ reference java/ // ^^^^ reference java/lang/ // ^^^^^^ reference java/lang/Double# // ^^^^^ reference java/lang/Double#isNaN(+1). -// ^ reference local18 +// ^ reference local21 // ^^^^^^^^^^^^^^^^^^ reference ujson/BaseByteRenderer#visitNonNullString(). case d => -// ^ definition local19 +// ^ definition local22 d: Double val i = d.toInt -// ^ definition local20 -// ^ reference local19 +// ^ definition local23 i: Int +// ^ reference local22 // ^^^^^ reference scala/Double#toInt(). if (d == i) visitFloat64StringParts(i.toString, -1, -1, index) -// ^ reference local19 +// ^ reference local22 // ^^ reference scala/Double#`==`(+3). -// ^ reference local20 +// ^ reference local23 // ^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/BaseByteRenderer#visitFloat64StringParts(). -// ^ reference local20 +// ^ reference local23 // ^^^^^^^^ reference scala/Any#toString(). // ^^^^^ reference ujson/BaseByteRenderer#visitFloat64().(index) else super.visitFloat64(d, index) // ^^^^^^^^^^^^ reference ujson/JsVisitor#visitFloat64(). -// ^ reference local19 +// ^ reference local22 // ^^^^^ reference ujson/BaseByteRenderer#visitFloat64().(index) flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#flushBuffer(). @@ -394,10 +396,10 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] def visitString(s: CharSequence, index: Int) = { -// ^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitString(). -// ^ definition ujson/BaseByteRenderer#visitString().(s) +// ^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitString(). def visitString(s: CharSequence, index: Int): T +// ^ definition ujson/BaseByteRenderer#visitString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^ definition ujson/BaseByteRenderer#visitString().(index) +// ^^^^^ definition ujson/BaseByteRenderer#visitString().(index) index: Int // ^^^ reference scala/Int# if (s eq null) visitNull(index) @@ -412,10 +414,10 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } def visitNonNullString(s: CharSequence, index: Int) = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitNonNullString(). -// ^ definition ujson/BaseByteRenderer#visitNonNullString().(s) +// ^^^^^^^^^^^^^^^^^^ definition ujson/BaseByteRenderer#visitNonNullString(). def visitNonNullString(s: CharSequence, index: Int): T +// ^ definition ujson/BaseByteRenderer#visitNonNullString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^ definition ujson/BaseByteRenderer#visitNonNullString().(index) +// ^^^^^ definition ujson/BaseByteRenderer#visitNonNullString().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#flushBuffer(). @@ -435,32 +437,32 @@ class BaseByteRenderer[T <: upickle.core.ByteOps.Output] } final def renderIndent() = { -// ^^^^^^^^^^^^ definition ujson/BaseByteRenderer#renderIndent(). +// ^^^^^^^^^^^^ definition ujson/BaseByteRenderer#renderIndent(). final def renderIndent(): Unit if (indent == -1) () // ^^^^^^ reference ujson/BaseByteRenderer#indent. // ^^ reference scala/Int#`==`(+3). else { var i = indent * depth -// ^ definition local21 +// ^ definition local24 i: Int // ^^^^^^ reference ujson/BaseByteRenderer#indent. // ^ reference scala/Int#`*`(+3). // ^^^^^ reference ujson/BaseByteRenderer#depth(). elemBuilder.ensureLength(i + 1) // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#elemBuilder. // ^^^^^^^^^^^^ reference upickle/core/ByteBuilder#ensureLength(). -// ^ reference local21 +// ^ reference local24 // ^ reference scala/Int#`+`(+4). elemBuilder.appendUnsafe('\n') // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#elemBuilder. // ^^^^^^^^^^^^ reference upickle/core/ByteBuilder#appendUnsafe(). while(i > 0) { -// ^ reference local21 +// ^ reference local24 // ^ reference scala/Int#`>`(+3). elemBuilder.appendUnsafe(' ') // ^^^^^^^^^^^ reference ujson/BaseByteRenderer#elemBuilder. // ^^^^^^^^^^^^ reference upickle/core/ByteBuilder#appendUnsafe(). i -= 1 -// ^ reference local21 +// ^ reference local24 // ^^ reference scala/Int#`-`(+3). } } diff --git a/tests/snapshots/src/main/generated/BaseCharRenderer.scala b/tests/snapshots/src/main/generated/BaseCharRenderer.scala index bf99637f..1f4cc3c7 100644 --- a/tests/snapshots/src/main/generated/BaseCharRenderer.scala +++ b/tests/snapshots/src/main/generated/BaseCharRenderer.scala @@ -22,39 +22,39 @@ import upickle.core.{ArrVisitor, ObjVisitor} * benefits from receiving data in batches, rather than elem by elem. */ class BaseCharRenderer[T <: upickle.core.CharOps.Output] -// ^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer# -// ^ definition ujson/BaseCharRenderer#[T] +// ^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer# class BaseCharRenderer[T <: Output] +// ^ definition ujson/BaseCharRenderer#[T] T <: Output // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^ reference upickle/core/CharOps. // ^^^^^^ reference upickle/core/CharOps.Output# (out: T, -// ^^^ definition ujson/BaseCharRenderer#out. +// ^^^ definition ujson/BaseCharRenderer#out. private[this] val out: T // ^ reference ujson/BaseCharRenderer#[T] indent: Int = -1, -// ^^^^^^ definition ujson/BaseCharRenderer#indent. +// ^^^^^^ definition ujson/BaseCharRenderer#indent. private[this] val indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false) extends JsVisitor[T, T]{ -// ^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#escapeUnicode. +// ^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#escapeUnicode. private[this] val escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^^^^^^ reference ujson/JsVisitor# // ^ reference ujson/BaseCharRenderer#[T] // ^ reference ujson/BaseCharRenderer#[T] // reference java/lang/Object#``(). private[this] val elemBuilder = new upickle.core.CharBuilder -// ^^^^^^^^^^^ definition ujson/BaseCharRenderer#elemBuilder. +// ^^^^^^^^^^^ definition ujson/BaseCharRenderer#elemBuilder. private[this] val elemBuilder: CharBuilder // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^ reference upickle/core/CharBuilder# // reference upickle/core/CharBuilder#``(). private[this] val unicodeCharBuilder = new upickle.core.CharBuilder() -// ^^^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#unicodeCharBuilder. +// ^^^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#unicodeCharBuilder. private[this] val unicodeCharBuilder: CharBuilder // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^ reference upickle/core/CharBuilder# // reference upickle/core/CharBuilder#``(). def flushCharBuilder() = { -// ^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#flushCharBuilder(). +// ^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#flushCharBuilder(). def flushCharBuilder(): Unit elemBuilder.writeOutToIfLongerThan(out, if (depth == 0) 0 else 1000) // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#elemBuilder. // ^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/CharBuilder#writeOutToIfLongerThan(). @@ -64,15 +64,15 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } private[this] var depth: Int = 0 -// ^^^^^ definition ujson/BaseCharRenderer#depth(). +// ^^^^^ definition ujson/BaseCharRenderer#depth(). private[this] var depth: Int // ^^^ reference scala/Int# private[this] var commaBuffered = false -// ^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#commaBuffered(). +// ^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#commaBuffered(). private[this] var commaBuffered: Boolean def flushBuffer() = { -// ^^^^^^^^^^^ definition ujson/BaseCharRenderer#flushBuffer(). +// ^^^^^^^^^^^ definition ujson/BaseCharRenderer#flushBuffer(). def flushBuffer(): Unit if (commaBuffered) { // ^^^^^^^^^^^^^ reference ujson/BaseCharRenderer#commaBuffered(). commaBuffered = false @@ -85,11 +85,12 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } } def visitArray(length: Int, index: Int) = new ArrVisitor[T, T] { -// ^^^^^^^^^^ definition ujson/BaseCharRenderer#visitArray(). -// ^^^^^^ definition ujson/BaseCharRenderer#visitArray().(length) +// ^^^^^^^^^^ definition ujson/BaseCharRenderer#visitArray(). def visitArray(length: Int, index: Int): { def subVisitor: BaseCharRenderer[T] } +// ^^^^^^ definition ujson/BaseCharRenderer#visitArray().(length) length: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/BaseCharRenderer#visitArray().(index) +// ^^^^^ definition ujson/BaseCharRenderer#visitArray().(index) index: Int // ^^^ reference scala/Int# +// definition local1 final class $anon // ^^^^^^^^^^ reference upickle/core/ArrVisitor# // ^ reference ujson/BaseCharRenderer#[T] // ^ reference ujson/BaseCharRenderer#[T] @@ -106,13 +107,13 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] renderIndent() // ^^^^^^^^^^^^ reference ujson/BaseCharRenderer#renderIndent(). def subVisitor = BaseCharRenderer.this -// ^^^^^^^^^^ definition local0 +// ^^^^^^^^^^ definition local0 def subVisitor: BaseCharRenderer[T] // ^^^^^^^^^^^^^^^^ reference ujson/BaseCharRenderer# def visitValue(v: T, index: Int): Unit = { -// ^^^^^^^^^^ definition local1 -// ^ definition local2 +// ^^^^^^^^^^ definition local2 def visitValue(v: T, index: Int): Unit +// ^ definition local4 v: T // ^ reference ujson/BaseCharRenderer#[T] -// ^^^^^ definition local3 +// ^^^^^ definition local5 index: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# flushBuffer() @@ -121,8 +122,8 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] // ^^^^^^^^^^^^^ reference ujson/BaseCharRenderer#commaBuffered(). } def visitEnd(index: Int) = { -// ^^^^^^^^ definition local4 -// ^^^^^ definition local5 +// ^^^^^^^^ definition local3 def visitEnd(index: Int): T +// ^^^^^ definition local6 index: Int // ^^^ reference scala/Int# commaBuffered = false // ^^^^^^^^^^^^^ reference ujson/BaseCharRenderer#commaBuffered(). @@ -142,11 +143,12 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } def visitObject(length: Int, index: Int) = new ObjVisitor[T, T] { -// ^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitObject(). -// ^^^^^^ definition ujson/BaseCharRenderer#visitObject().(length) +// ^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitObject(). def visitObject(length: Int, index: Int): { def subVisitor: BaseCharRenderer[T]; def visitKey(index: Int): BaseCharRenderer[T] } +// ^^^^^^ definition ujson/BaseCharRenderer#visitObject().(length) length: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/BaseCharRenderer#visitObject().(index) +// ^^^^^ definition ujson/BaseCharRenderer#visitObject().(index) index: Int // ^^^ reference scala/Int# +// definition local10 final class $anon // ^^^^^^^^^^ reference upickle/core/ObjVisitor# // ^ reference ujson/BaseCharRenderer#[T] // ^ reference ujson/BaseCharRenderer#[T] @@ -162,16 +164,16 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] renderIndent() // ^^^^^^^^^^^^ reference ujson/BaseCharRenderer#renderIndent(). def subVisitor = BaseCharRenderer.this -// ^^^^^^^^^^ definition local6 +// ^^^^^^^^^^ definition local7 def subVisitor: BaseCharRenderer[T] // ^^^^^^^^^^^^^^^^ reference ujson/BaseCharRenderer# def visitKey(index: Int) = BaseCharRenderer.this -// ^^^^^^^^ definition local7 -// ^^^^^ definition local8 +// ^^^^^^^^ definition local8 def visitKey(index: Int): BaseCharRenderer[T] +// ^^^^^ definition local9 index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^^^^^ reference ujson/BaseCharRenderer# def visitKeyValue(s: Any): Unit = { -// ^^^^^^^^^^^^^ definition local9 -// ^ definition local10 +// ^^^^^^^^^^^^^ definition local11 def visitKeyValue(s: Any): Unit +// ^ definition local14 s: Any // ^^^ reference scala/Any# // ^^^^ reference scala/Unit# elemBuilder.append(':') @@ -184,18 +186,18 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] // ^^^^^^ reference upickle/core/CharBuilder#append(+1). } def visitValue(v: T, index: Int): Unit = { -// ^^^^^^^^^^ definition local11 -// ^ definition local12 +// ^^^^^^^^^^ definition local12 def visitValue(v: T, index: Int): Unit +// ^ definition local15 v: T // ^ reference ujson/BaseCharRenderer#[T] -// ^^^^^ definition local13 +// ^^^^^ definition local16 index: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# commaBuffered = true // ^^^^^^^^^^^^^ reference ujson/BaseCharRenderer#commaBuffered(). } def visitEnd(index: Int) = { -// ^^^^^^^^ definition local14 -// ^^^^^ definition local15 +// ^^^^^^^^ definition local13 def visitEnd(index: Int): T +// ^^^^^ definition local17 index: Int // ^^^ reference scala/Int# commaBuffered = false // ^^^^^^^^^^^^^ reference ujson/BaseCharRenderer#commaBuffered(). @@ -215,8 +217,8 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } def visitNull(index: Int) = { -// ^^^^^^^^^ definition ujson/BaseCharRenderer#visitNull(). -// ^^^^^ definition ujson/BaseCharRenderer#visitNull().(index) +// ^^^^^^^^^ definition ujson/BaseCharRenderer#visitNull(). def visitNull(index: Int): T +// ^^^^^ definition ujson/BaseCharRenderer#visitNull().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#flushBuffer(). @@ -242,8 +244,8 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } def visitFalse(index: Int) = { -// ^^^^^^^^^^ definition ujson/BaseCharRenderer#visitFalse(). -// ^^^^^ definition ujson/BaseCharRenderer#visitFalse().(index) +// ^^^^^^^^^^ definition ujson/BaseCharRenderer#visitFalse(). def visitFalse(index: Int): T +// ^^^^^ definition ujson/BaseCharRenderer#visitFalse().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#flushBuffer(). @@ -272,8 +274,8 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } def visitTrue(index: Int) = { -// ^^^^^^^^^ definition ujson/BaseCharRenderer#visitTrue(). -// ^^^^^ definition ujson/BaseCharRenderer#visitTrue().(index) +// ^^^^^^^^^ definition ujson/BaseCharRenderer#visitTrue(). def visitTrue(index: Int): T +// ^^^^^ definition ujson/BaseCharRenderer#visitTrue().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#flushBuffer(). @@ -299,14 +301,14 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, index: Int) = { -// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitFloat64StringParts(). -// ^ definition ujson/BaseCharRenderer#visitFloat64StringParts().(s) +// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitFloat64StringParts(). def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, index: Int): T +// ^ definition ujson/BaseCharRenderer#visitFloat64StringParts().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^ definition ujson/BaseCharRenderer#visitFloat64StringParts().(decIndex) +// ^^^^^^^^ definition ujson/BaseCharRenderer#visitFloat64StringParts().(decIndex) decIndex: Int // ^^^ reference scala/Int# -// ^^^^^^^^ definition ujson/BaseCharRenderer#visitFloat64StringParts().(expIndex) +// ^^^^^^^^ definition ujson/BaseCharRenderer#visitFloat64StringParts().(expIndex) expIndex: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/BaseCharRenderer#visitFloat64StringParts().(index) +// ^^^^^ definition ujson/BaseCharRenderer#visitFloat64StringParts().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#flushBuffer(). @@ -316,23 +318,23 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] // ^ reference ujson/BaseCharRenderer#visitFloat64StringParts().(s) // ^^^^^^ reference java/lang/CharSequence#length(). var i = 0 -// ^ definition local16 +// ^ definition local18 i: Int val sLength = s.length -// ^^^^^^^ definition local17 +// ^^^^^^^ definition local19 sLength: Int // ^ reference ujson/BaseCharRenderer#visitFloat64StringParts().(s) // ^^^^^^ reference java/lang/CharSequence#length(). while(i < sLength){ -// ^ reference local16 +// ^ reference local18 // ^ reference scala/Int#`<`(+3). -// ^^^^^^^ reference local17 +// ^^^^^^^ reference local19 elemBuilder.appendUnsafeC(s.charAt(i)) // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#elemBuilder. // ^^^^^^^^^^^^^ reference upickle/core/CharBuilder#appendUnsafeC(). // ^ reference ujson/BaseCharRenderer#visitFloat64StringParts().(s) // ^^^^^^ reference java/lang/CharSequence#charAt(). -// ^ reference local16 +// ^ reference local18 i += 1 -// ^ reference local16 +// ^ reference local18 // ^^ reference scala/Int#`+`(+4). } flushCharBuilder() @@ -342,10 +344,10 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } override def visitFloat64(d: Double, index: Int) = { -// ^^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitFloat64(). -// ^ definition ujson/BaseCharRenderer#visitFloat64().(d) +// ^^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitFloat64(). def visitFloat64(d: Double, index: Int): T +// ^ definition ujson/BaseCharRenderer#visitFloat64().(d) d: Double // ^^^^^^ reference scala/Double# -// ^^^^^ definition ujson/BaseCharRenderer#visitFloat64().(index) +// ^^^^^ definition ujson/BaseCharRenderer#visitFloat64().(index) index: Int // ^^^ reference scala/Int# d match{ // ^ reference ujson/BaseCharRenderer#visitFloat64().(d) @@ -358,30 +360,30 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] // ^^^^^^^^^^^^^^^^ reference scala/Double.NegativeInfinity. // ^^^^^^^^^^^^^^^^^^ reference ujson/BaseCharRenderer#visitNonNullString(). case d if java.lang.Double.isNaN(d) => visitNonNullString("NaN", -1) -// ^ definition local18 +// ^ definition local21 d: Double // ^^^^ reference java/ // ^^^^ reference java/lang/ // ^^^^^^ reference java/lang/Double# // ^^^^^ reference java/lang/Double#isNaN(+1). -// ^ reference local18 +// ^ reference local21 // ^^^^^^^^^^^^^^^^^^ reference ujson/BaseCharRenderer#visitNonNullString(). case d => -// ^ definition local19 +// ^ definition local22 d: Double val i = d.toInt -// ^ definition local20 -// ^ reference local19 +// ^ definition local23 i: Int +// ^ reference local22 // ^^^^^ reference scala/Double#toInt(). if (d == i) visitFloat64StringParts(i.toString, -1, -1, index) -// ^ reference local19 +// ^ reference local22 // ^^ reference scala/Double#`==`(+3). -// ^ reference local20 +// ^ reference local23 // ^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/BaseCharRenderer#visitFloat64StringParts(). -// ^ reference local20 +// ^ reference local23 // ^^^^^^^^ reference scala/Any#toString(). // ^^^^^ reference ujson/BaseCharRenderer#visitFloat64().(index) else super.visitFloat64(d, index) // ^^^^^^^^^^^^ reference ujson/JsVisitor#visitFloat64(). -// ^ reference local19 +// ^ reference local22 // ^^^^^ reference ujson/BaseCharRenderer#visitFloat64().(index) flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#flushBuffer(). @@ -394,10 +396,10 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] def visitString(s: CharSequence, index: Int) = { -// ^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitString(). -// ^ definition ujson/BaseCharRenderer#visitString().(s) +// ^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitString(). def visitString(s: CharSequence, index: Int): T +// ^ definition ujson/BaseCharRenderer#visitString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^ definition ujson/BaseCharRenderer#visitString().(index) +// ^^^^^ definition ujson/BaseCharRenderer#visitString().(index) index: Int // ^^^ reference scala/Int# if (s eq null) visitNull(index) @@ -412,10 +414,10 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } def visitNonNullString(s: CharSequence, index: Int) = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitNonNullString(). -// ^ definition ujson/BaseCharRenderer#visitNonNullString().(s) +// ^^^^^^^^^^^^^^^^^^ definition ujson/BaseCharRenderer#visitNonNullString(). def visitNonNullString(s: CharSequence, index: Int): T +// ^ definition ujson/BaseCharRenderer#visitNonNullString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^ definition ujson/BaseCharRenderer#visitNonNullString().(index) +// ^^^^^ definition ujson/BaseCharRenderer#visitNonNullString().(index) index: Int // ^^^ reference scala/Int# flushBuffer() // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#flushBuffer(). @@ -435,32 +437,32 @@ class BaseCharRenderer[T <: upickle.core.CharOps.Output] } final def renderIndent() = { -// ^^^^^^^^^^^^ definition ujson/BaseCharRenderer#renderIndent(). +// ^^^^^^^^^^^^ definition ujson/BaseCharRenderer#renderIndent(). final def renderIndent(): Unit if (indent == -1) () // ^^^^^^ reference ujson/BaseCharRenderer#indent. // ^^ reference scala/Int#`==`(+3). else { var i = indent * depth -// ^ definition local21 +// ^ definition local24 i: Int // ^^^^^^ reference ujson/BaseCharRenderer#indent. // ^ reference scala/Int#`*`(+3). // ^^^^^ reference ujson/BaseCharRenderer#depth(). elemBuilder.ensureLength(i + 1) // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#elemBuilder. // ^^^^^^^^^^^^ reference upickle/core/CharBuilder#ensureLength(). -// ^ reference local21 +// ^ reference local24 // ^ reference scala/Int#`+`(+4). elemBuilder.appendUnsafe('\n') // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#elemBuilder. // ^^^^^^^^^^^^ reference upickle/core/CharBuilder#appendUnsafe(). while(i > 0) { -// ^ reference local21 +// ^ reference local24 // ^ reference scala/Int#`>`(+3). elemBuilder.appendUnsafe(' ') // ^^^^^^^^^^^ reference ujson/BaseCharRenderer#elemBuilder. // ^^^^^^^^^^^^ reference upickle/core/CharBuilder#appendUnsafe(). i -= 1 -// ^ reference local21 +// ^ reference local24 // ^^ reference scala/Int#`-`(+3). } } diff --git a/tests/snapshots/src/main/generated/ByteParser.scala b/tests/snapshots/src/main/generated/ByteParser.scala index e9b6785a..46ac91be 100644 --- a/tests/snapshots/src/main/generated/ByteParser.scala +++ b/tests/snapshots/src/main/generated/ByteParser.scala @@ -38,27 +38,27 @@ import scala.annotation.{switch, tailrec} * to construct the `CharSequences` that `visitString` requires, etc. */ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ -// ^^^^^^^^^^ definition ujson/ByteParser# -// ^ definition ujson/ByteParser#[J] -// definition ujson/ByteParser#``(). +// ^^^^^^^^^^ definition ujson/ByteParser# abstract class ByteParser[J] +// ^ definition ujson/ByteParser#[J] J +// definition ujson/ByteParser#``(). def this() // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingByteParser# private[this] val elemOps = upickle.core.ByteOps -// ^^^^^^^ definition ujson/ByteParser#elemOps. +// ^^^^^^^ definition ujson/ByteParser#elemOps. private[this] val elemOps: // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^ reference upickle/core/ByteOps. private[this] val outputBuilder = new upickle.core.ByteBuilder() -// ^^^^^^^^^^^^^ definition ujson/ByteParser#outputBuilder. +// ^^^^^^^^^^^^^ definition ujson/ByteParser#outputBuilder. private[this] val outputBuilder: ByteBuilder // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^ reference upickle/core/ByteBuilder# // reference upickle/core/ByteBuilder#``(). def requestUntilOrThrow(i: Int) = { -// ^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#requestUntilOrThrow(). -// ^ definition ujson/ByteParser#requestUntilOrThrow().(i) +// ^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#requestUntilOrThrow(). def requestUntilOrThrow(i: Int): Unit +// ^ definition ujson/ByteParser#requestUntilOrThrow().(i) i: Int // ^^^ reference scala/Int# if (requestUntil(i)) throw new IncompleteParseException("exhausted input") // ^^^^^^^^^^^^ reference upickle/core/BufferingByteParser#requestUntil(). @@ -67,8 +67,8 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // reference ujson/IncompleteParseException#``(). } override def getByteSafe(i: Int): Byte = { -// ^^^^^^^^^^^ definition ujson/ByteParser#getByteSafe(). -// ^ definition ujson/ByteParser#getByteSafe().(i) +// ^^^^^^^^^^^ definition ujson/ByteParser#getByteSafe(). def getByteSafe(i: Int): Byte +// ^ definition ujson/ByteParser#getByteSafe().(i) i: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Byte# requestUntilOrThrow(i) @@ -83,8 +83,8 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * Return true iff 'i' is at or beyond the end of the input (EOF). */ protected[this] def atEof(i: Int) = requestUntil(i) -// ^^^^^ definition ujson/ByteParser#atEof(). -// ^ definition ujson/ByteParser#atEof().(i) +// ^^^^^ definition ujson/ByteParser#atEof(). def atEof(i: Int): Boolean +// ^ definition ujson/ByteParser#atEof().(i) i: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference upickle/core/BufferingByteParser#requestUntil(). // ^ reference ujson/ByteParser#atEof().(i) @@ -93,7 +93,7 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * Should be called when parsing is finished. */ protected[this] def close(): Unit -// ^^^^^ definition ujson/ByteParser#close(). +// ^^^^^ definition ujson/ByteParser#close(). def close(): Unit // ^^^^ reference scala/Unit# /** @@ -102,31 +102,31 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ @inline private[this] final val ARRBEG = 6 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^^ definition ujson/ByteParser#ARRBEG. +// ^^^^^^ definition ujson/ByteParser#ARRBEG. @inline private[this] final val ARRBEG: 6 @inline private[this] final val OBJBEG = 7 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^^ definition ujson/ByteParser#OBJBEG. +// ^^^^^^ definition ujson/ByteParser#OBJBEG. @inline private[this] final val OBJBEG: 7 @inline private[this] final val DATA = 1 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^ definition ujson/ByteParser#DATA. +// ^^^^ definition ujson/ByteParser#DATA. @inline private[this] final val DATA: 1 @inline private[this] final val KEY = 2 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^ definition ujson/ByteParser#KEY. +// ^^^ definition ujson/ByteParser#KEY. @inline private[this] final val KEY: 2 @inline private[this] final val COLON = 3 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^ definition ujson/ByteParser#COLON. +// ^^^^^ definition ujson/ByteParser#COLON. @inline private[this] final val COLON: 3 @inline private[this] final val ARREND = 4 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^^ definition ujson/ByteParser#ARREND. +// ^^^^^^ definition ujson/ByteParser#ARREND. @inline private[this] final val ARREND: 4 @inline private[this] final val OBJEND = 5 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^^ definition ujson/ByteParser#OBJEND. +// ^^^^^^ definition ujson/ByteParser#OBJEND. @inline private[this] final val OBJEND: 5 /** * Parse the JSON document into a single JSON value. @@ -136,59 +136,58 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * multiple top-level objects are not allowed. */ final def parse(facade: Visitor[_, J]): J = { -// ^^^^^ definition ujson/ByteParser#parse(). -// ^^^^^^ definition ujson/ByteParser#parse().(facade) +// ^^^^^ definition ujson/ByteParser#parse(). final def parse(facade: Visitor[local0, J[): J +// ^^^^^^ definition ujson/ByteParser#parse().(facade) facade: Visitor[local0, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^ reference ujson/ByteParser#[J] val (value, i) = parseTopLevel(0, facade) -// ^^^^^ definition local0 -// ^ definition local1 -// reference scala/Tuple2.apply(). +// ^^^^^ definition local2 value: J +// ^ definition local3 i: Int // ^^^^^^^^^^^^^ reference ujson/ByteParser#parseTopLevel(). // ^^^^^^ reference ujson/ByteParser#parse().(facade) var j = i -// ^ definition local3 -// ^ reference local1 +// ^ definition local4 j: Int +// ^ reference local3 while (!atEof(j)) { // ^ reference scala/Boolean#`unary_!`(). // ^^^^^ reference ujson/ByteParser#atEof(). -// ^ reference local3 +// ^ reference local4 (getByteSafe(j): @switch) match { // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local3 +// ^ reference local4 case '\n' | ' ' | '\t' | '\r' => j += 1 -// ^ reference local3 +// ^ reference local4 // ^^ reference scala/Int#`+`(+4). case _ => die(j, "expected whitespace or eof") // ^^^ reference ujson/ByteParser#die(). -// ^ reference local3 +// ^ reference local4 } } if (!atEof(j)) die(j, "expected eof") // ^ reference scala/Boolean#`unary_!`(). // ^^^^^ reference ujson/ByteParser#atEof(). -// ^ reference local3 +// ^ reference local4 // ^^^ reference ujson/ByteParser#die(). -// ^ reference local3 +// ^ reference local4 close() // ^^^^^ reference ujson/ByteParser#close(). value -// ^^^^^ reference local0 +// ^^^^^ reference local2 } /** * Used to generate error messages with character info and offsets. */ protected[this] def die(i: Int, msg: String): Nothing = { -// ^^^ definition ujson/ByteParser#die(). -// ^ definition ujson/ByteParser#die().(i) +// ^^^ definition ujson/ByteParser#die(). def die(i: Int, msg: String): Nothing +// ^ definition ujson/ByteParser#die().(i) i: Int // ^^^ reference scala/Int# -// ^^^ definition ujson/ByteParser#die().(msg) +// ^^^ definition ujson/ByteParser#die().(msg) msg: String // ^^^^^^ reference scala/Predef.String# // ^^^^^^^ reference scala/Nothing# val out = new upickle.core.ByteBuilder() -// ^^^ definition local4 +// ^^^ definition local6 out: ByteBuilder // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^ reference upickle/core/ByteBuilder# @@ -204,12 +203,11 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^^^^^ reference upickle/core/CharBuilder# // reference upickle/core/CharBuilder#``(). out, -// ^^^ reference local4 +// ^^^ reference local6 new ArrayCharSequence(Array(elemOps.toInt(getByteSafe(i)).toChar)), // ^^^^^^^^^^^^^^^^^ reference scala/Predef.ArrayCharSequence# // reference scala/Predef.ArrayCharSequence#``(). // ^^^^^ reference scala/Array. -// reference scala/Array.apply(+4). // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^ reference upickle/core/ByteOps.toInt(). // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). @@ -219,16 +217,14 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^ reference upickle/core/RenderUtils.escapeByte().(unicode) ) val s = "%s got %s" format (msg, out.makeString()) -// ^ definition local5 -// reference scala/Predef.augmentString(). +// ^ definition local7 s: String // ^^^^^^ reference scala/collection/StringOps#format(). // ^^^ reference ujson/ByteParser#die().(msg) -// ^^^ reference local4 +// ^^^ reference local6 // ^^^^^^^^^^ reference upickle/core/ByteBuilder#makeString(). throw ParseException(s, i) // ^^^^^^^^^^^^^^ reference ujson/ParseException. -// reference ujson/ParseException.apply(). -// ^ reference local5 +// ^ reference local7 // ^ reference ujson/ByteParser#die().(i) } @@ -243,163 +239,163 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * number. */ protected[this] final def parseNum(i: Int, ctxt: ObjArrVisitor[Any, J], facade: Visitor[_, J]): Int = { -// ^^^^^^^^ definition ujson/ByteParser#parseNum(). -// ^ definition ujson/ByteParser#parseNum().(i) +// ^^^^^^^^ definition ujson/ByteParser#parseNum(). final def parseNum(i: Int, ctxt: ObjArrVisitor[Any, J], facade: Visitor[local8, J[): Int +// ^ definition ujson/ByteParser#parseNum().(i) i: Int // ^^^ reference scala/Int# -// ^^^^ definition ujson/ByteParser#parseNum().(ctxt) +// ^^^^ definition ujson/ByteParser#parseNum().(ctxt) ctxt: ObjArrVisitor[Any, J] // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^^^ reference scala/Any# // ^ reference ujson/ByteParser#[J] -// ^^^^^^ definition ujson/ByteParser#parseNum().(facade) +// ^^^^^^ definition ujson/ByteParser#parseNum().(facade) facade: Visitor[local8, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^^^ reference scala/Int# var j = i -// ^ definition local6 +// ^ definition local9 j: Int // ^ reference ujson/ByteParser#parseNum().(i) var c = getByteSafe(j) -// ^ definition local7 +// ^ definition local10 c: Byte // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 var decIndex = -1 -// ^^^^^^^^ definition local8 +// ^^^^^^^^ definition local11 decIndex: Int var expIndex = -1 -// ^^^^^^^^ definition local9 +// ^^^^^^^^ definition local12 expIndex: Int if (c == '-') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Byte#`==`(+2). j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 } if (c == '0') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Byte#`==`(+2). j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 } else { val j0 = j -// ^^ definition local10 -// ^ reference local6 +// ^^ definition local13 j0: Int +// ^ reference local9 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^ reference upickle/core/ByteOps.within(). -// ^ reference local7 +// ^ reference local10 j += 1; -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 } if (j == j0) die(i, "expected digit") -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`==`(+3). -// ^^ reference local10 +// ^^ reference local13 // ^^^ reference ujson/ByteParser#die(). // ^ reference ujson/ByteParser#parseNum().(i) } if (c == '.') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Byte#`==`(+2). decIndex = j - i -// ^^^^^^^^ reference local8 -// ^ reference local6 +// ^^^^^^^^ reference local11 +// ^ reference local9 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseNum().(i) j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 val j0 = j -// ^^ definition local11 -// ^ reference local6 +// ^^ definition local15 j0: Int +// ^ reference local9 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^ reference upickle/core/ByteOps.within(). -// ^ reference local7 +// ^ reference local10 j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 } if (j0 == j) die(i, "expected digit") -// ^^ reference local11 +// ^^ reference local15 // ^^ reference scala/Int#`==`(+3). -// ^ reference local6 +// ^ reference local9 // ^^^ reference ujson/ByteParser#die(). // ^ reference ujson/ByteParser#parseNum().(i) } if (c == 'e' || c == 'E') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Byte#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Byte#`==`(+2). expIndex = j - i -// ^^^^^^^^ reference local9 -// ^ reference local6 +// ^^^^^^^^ reference local12 +// ^ reference local9 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseNum().(i) j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 if (c == '+' || c == '-') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Byte#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Byte#`==`(+2). j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 } val j0 = j -// ^^ definition local12 -// ^ reference local6 +// ^^ definition local17 j0: Int +// ^ reference local9 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^ reference upickle/core/ByteOps.within(). -// ^ reference local7 +// ^ reference local10 j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local6 +// ^ reference local9 } if (j0 == j) die(i, "expected digit") -// ^^ reference local12 +// ^^ reference local17 // ^^ reference scala/Int#`==`(+3). -// ^ reference local6 +// ^ reference local9 // ^^^ reference ujson/ByteParser#die(). // ^ reference ujson/ByteParser#parseNum().(i) } @@ -409,31 +405,31 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/ByteParser#parseNum().(facade) -// ^^^^^^^^ reference local8 -// ^^^^^^^^ reference local9 +// ^^^^^^^^ reference local11 +// ^^^^^^^^ reference local12 // ^ reference ujson/ByteParser#parseNum().(i) -// ^ reference local6 +// ^ reference local9 // ^ reference ujson/ByteParser#parseNum().(i) j -// ^ reference local6 +// ^ reference local9 } def visitFloat64StringPartsWithWrapper(facade: Visitor[_, J], -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper(). -// ^^^^^^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(facade) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper(). def visitFloat64StringPartsWithWrapper(facade: Visitor[local19, J[, decIndex: Int, expIndex: Int, i: Int, j: Int): J +// ^^^^^^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(facade) facade: Visitor[local19, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] decIndex: Int, -// ^^^^^^^^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(decIndex) +// ^^^^^^^^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(decIndex) decIndex: Int // ^^^ reference scala/Int# expIndex: Int, -// ^^^^^^^^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(expIndex) +// ^^^^^^^^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(expIndex) expIndex: Int // ^^^ reference scala/Int# i: Int, -// ^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(i) +// ^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(i) i: Int // ^^^ reference scala/Int# j: Int) = { -// ^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(j) +// ^ definition ujson/ByteParser#visitFloat64StringPartsWithWrapper().(j) j: Int // ^^^ reference scala/Int# facade.visitFloat64StringParts( // ^^^^^^ reference ujson/ByteParser#visitFloat64StringPartsWithWrapper().(facade) @@ -468,211 +464,211 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * This method has all the same caveats as the previous method. */ protected[this] final def parseNumTopLevel(i: Int, facade: Visitor[_, J]): (J, Int) = { -// ^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseNumTopLevel(). -// ^ definition ujson/ByteParser#parseNumTopLevel().(i) +// ^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseNumTopLevel(). final def parseNumTopLevel(i: Int, facade: Visitor[local20, J[): (J, Int) +// ^ definition ujson/ByteParser#parseNumTopLevel().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/ByteParser#parseNumTopLevel().(facade) +// ^^^^^^ definition ujson/ByteParser#parseNumTopLevel().(facade) facade: Visitor[local20, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^ reference ujson/ByteParser#[J] // ^^^ reference scala/Int# var j = i -// ^ definition local13 +// ^ definition local21 j: Int // ^ reference ujson/ByteParser#parseNumTopLevel().(i) var c = getByteSafe(j) -// ^ definition local14 +// ^ definition local22 c: Byte // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 var decIndex = -1 -// ^^^^^^^^ definition local15 +// ^^^^^^^^ definition local23 decIndex: Int var expIndex = -1 -// ^^^^^^^^ definition local16 +// ^^^^^^^^ definition local24 expIndex: Int if (c == '-') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Byte#`==`(+2). // any valid input will require at least one digit after - j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 } if (c == '0') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Byte#`==`(+2). j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). if (atEof(j)) { // ^^^^^ reference ujson/ByteParser#atEof(). -// ^ reference local13 +// ^ reference local21 return (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/ByteParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/ByteParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } c = getByteSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 } else { val j0 = j -// ^^ definition local17 -// ^ reference local13 +// ^^ definition local25 j0: Int +// ^ reference local21 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^ reference upickle/core/ByteOps.within(). -// ^ reference local14 +// ^ reference local22 j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). if (atEof(j)) { // ^^^^^ reference ujson/ByteParser#atEof(). -// ^ reference local13 +// ^ reference local21 return (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/ByteParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/ByteParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } c = getByteSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 } if (j0 == j) die(i, "expected digit") -// ^^ reference local17 +// ^^ reference local25 // ^^ reference scala/Int#`==`(+3). -// ^ reference local13 +// ^ reference local21 // ^^^ reference ujson/ByteParser#die(). // ^ reference ujson/ByteParser#parseNumTopLevel().(i) } if (c == '.') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Byte#`==`(+2). // any valid input will require at least one digit after . decIndex = j - i -// ^^^^^^^^ reference local15 -// ^ reference local13 +// ^^^^^^^^ reference local23 +// ^ reference local21 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseNumTopLevel().(i) j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 val j0 = j -// ^^ definition local18 -// ^ reference local13 +// ^^ definition local27 j0: Int +// ^ reference local21 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^ reference upickle/core/ByteOps.within(). -// ^ reference local14 +// ^ reference local22 j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). if (atEof(j)) { // ^^^^^ reference ujson/ByteParser#atEof(). -// ^ reference local13 +// ^ reference local21 return (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/ByteParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/ByteParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } c = getByteSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 } if(j0 == j) die(i, "expected digit") -// ^^ reference local18 +// ^^ reference local27 // ^^ reference scala/Int#`==`(+3). -// ^ reference local13 +// ^ reference local21 // ^^^ reference ujson/ByteParser#die(). // ^ reference ujson/ByteParser#parseNumTopLevel().(i) } if (c == 'e' || c == 'E') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Byte#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Byte#`==`(+2). // any valid input will require at least one digit after e, e+, etc expIndex = j - i -// ^^^^^^^^ reference local16 -// ^ reference local13 +// ^^^^^^^^ reference local24 +// ^ reference local21 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseNumTopLevel().(i) j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 if (c == '+' || c == '-') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Byte#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Byte#`==`(+2). j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). c = getByteSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 } val j0 = j -// ^^ definition local19 -// ^ reference local13 +// ^^ definition local29 j0: Int +// ^ reference local21 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^ reference upickle/core/ByteOps.within(). -// ^ reference local14 +// ^ reference local22 j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). if (atEof(j)) { // ^^^^^ reference ujson/ByteParser#atEof(). -// ^ reference local13 +// ^ reference local21 return (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/ByteParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/ByteParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } c = getByteSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local13 +// ^ reference local21 } if (j0 == j) die(i, "expected digit") -// ^^ reference local19 +// ^^ reference local29 // ^^ reference scala/Int#`==`(+3). -// ^ reference local13 +// ^ reference local21 // ^^^ reference ujson/ByteParser#die(). // ^ reference ujson/ByteParser#parseNumTopLevel().(i) } @@ -680,11 +676,11 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/ByteParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/ByteParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } /** @@ -694,8 +690,8 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * This is why it can only return Char instead of Int. */ protected[this] final def descape(i: Int): Char = { -// ^^^^^^^ definition ujson/ByteParser#descape(). -// ^ definition ujson/ByteParser#descape().(i) +// ^^^^^^^ definition ujson/ByteParser#descape(). final def descape(i: Int): Char +// ^ definition ujson/ByteParser#descape().(i) i: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Char# import upickle.core.RenderUtils.hex @@ -704,10 +700,10 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^^^^^ reference upickle/core/RenderUtils. // ^^^ reference upickle/core/RenderUtils.hex(). var x = 0 -// ^ definition local20 +// ^ definition local31 x: Int x = (x << 4) | hex(getByteSafe(i+2).toInt) -// ^ reference local20 -// ^ reference local20 +// ^ reference local31 +// ^ reference local31 // ^^ reference scala/Int#`<<`(). // ^ reference scala/Int#`|`(+3). // ^^^ reference upickle/core/RenderUtils.hex(). @@ -716,8 +712,8 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^ reference scala/Int#`+`(+4). // ^^^^^ reference scala/Byte#toInt(). x = (x << 4) | hex(getByteSafe(i+3).toInt) -// ^ reference local20 -// ^ reference local20 +// ^ reference local31 +// ^ reference local31 // ^^ reference scala/Int#`<<`(). // ^ reference scala/Int#`|`(+3). // ^^^ reference upickle/core/RenderUtils.hex(). @@ -726,8 +722,8 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^ reference scala/Int#`+`(+4). // ^^^^^ reference scala/Byte#toInt(). x = (x << 4) | hex(getByteSafe(i+4).toInt) -// ^ reference local20 -// ^ reference local20 +// ^ reference local31 +// ^ reference local31 // ^^ reference scala/Int#`<<`(). // ^ reference scala/Int#`|`(+3). // ^^^ reference upickle/core/RenderUtils.hex(). @@ -736,8 +732,8 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^ reference scala/Int#`+`(+4). // ^^^^^ reference scala/Byte#toInt(). x = (x << 4) | hex(getByteSafe(i+5).toInt) -// ^ reference local20 -// ^ reference local20 +// ^ reference local31 +// ^ reference local31 // ^^ reference scala/Int#`<<`(). // ^ reference scala/Int#`|`(+3). // ^^^ reference upickle/core/RenderUtils.hex(). @@ -746,7 +742,7 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^ reference scala/Int#`+`(+4). // ^^^^^ reference scala/Byte#toInt(). x.toChar -// ^ reference local20 +// ^ reference local31 // ^^^^^^ reference scala/Int#toChar(). } @@ -757,10 +753,10 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * Note that this method assumes that the first character has already been checked. */ protected[this] final def parseTrue(i: Int, facade: Visitor[_, J]): J = { -// ^^^^^^^^^ definition ujson/ByteParser#parseTrue(). -// ^ definition ujson/ByteParser#parseTrue().(i) +// ^^^^^^^^^ definition ujson/ByteParser#parseTrue(). final def parseTrue(i: Int, facade: Visitor[local32, J[): J +// ^ definition ujson/ByteParser#parseTrue().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/ByteParser#parseTrue().(facade) +// ^^^^^^ definition ujson/ByteParser#parseTrue().(facade) facade: Visitor[local32, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^ reference ujson/ByteParser#[J] @@ -800,10 +796,10 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * Note that this method assumes that the first character has already been checked. */ protected[this] final def parseFalse(i: Int, facade: Visitor[_, J]): J = { -// ^^^^^^^^^^ definition ujson/ByteParser#parseFalse(). -// ^ definition ujson/ByteParser#parseFalse().(i) +// ^^^^^^^^^^ definition ujson/ByteParser#parseFalse(). final def parseFalse(i: Int, facade: Visitor[local33, J[): J +// ^ definition ujson/ByteParser#parseFalse().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/ByteParser#parseFalse().(facade) +// ^^^^^^ definition ujson/ByteParser#parseFalse().(facade) facade: Visitor[local33, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^ reference ujson/ByteParser#[J] @@ -849,10 +845,10 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * Note that this method assumes that the first character has already been checked. */ protected[this] final def parseNull(i: Int, facade: Visitor[_, J]): J = { -// ^^^^^^^^^ definition ujson/ByteParser#parseNull(). -// ^ definition ujson/ByteParser#parseNull().(i) +// ^^^^^^^^^ definition ujson/ByteParser#parseNull(). final def parseNull(i: Int, facade: Visitor[local34, J[): J +// ^ definition ujson/ByteParser#parseNull().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/ByteParser#parseNull().(facade) +// ^^^^^^ definition ujson/ByteParser#parseNull().(facade) facade: Visitor[local34, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^ reference ujson/ByteParser#[J] @@ -887,10 +883,10 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ } protected[this] final def parseTopLevel(i: Int, facade: Visitor[_, J]): (J, Int) = { -// ^^^^^^^^^^^^^ definition ujson/ByteParser#parseTopLevel(). -// ^ definition ujson/ByteParser#parseTopLevel().(i) +// ^^^^^^^^^^^^^ definition ujson/ByteParser#parseTopLevel(). final def parseTopLevel(i: Int, facade: Visitor[local35, J[): (J, Int) +// ^ definition ujson/ByteParser#parseTopLevel().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/ByteParser#parseTopLevel().(facade) +// ^^^^^^ definition ujson/ByteParser#parseTopLevel().(facade) facade: Visitor[local35, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^ reference ujson/ByteParser#[J] @@ -902,7 +898,6 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ catch reject(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseTopLevel().(i) -// reference scala/Function1#apply(). } /** * Parse and return the next JSON value and the position beyond it. @@ -911,10 +906,10 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^ reference scala/annotation/tailrec# // reference scala/annotation/tailrec#``(). protected[this] final def parseTopLevel0(i: Int, facade: Visitor[_, J]): (J, Int) = { -// ^^^^^^^^^^^^^^ definition ujson/ByteParser#parseTopLevel0(). -// ^ definition ujson/ByteParser#parseTopLevel0().(i) +// ^^^^^^^^^^^^^^ definition ujson/ByteParser#parseTopLevel0(). @tailrec final def parseTopLevel0(i: Int, facade: Visitor[local38, J[): (J, Int) +// ^ definition ujson/ByteParser#parseTopLevel0().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/ByteParser#parseTopLevel0().(facade) +// ^^^^^^ definition ujson/ByteParser#parseTopLevel0().(facade) facade: Visitor[local38, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^ reference ujson/ByteParser#[J] @@ -995,24 +990,24 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ } def reject(j: Int): PartialFunction[Throwable, Nothing] = { -// ^^^^^^ definition ujson/ByteParser#reject(). -// ^ definition ujson/ByteParser#reject().(j) +// ^^^^^^ definition ujson/ByteParser#reject(). def reject(j: Int): PartialFunction[Throwable, Nothing] +// ^ definition ujson/ByteParser#reject().(j) j: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^^^^ reference scala/PartialFunction# // ^^^^^^^^^ reference scala/package.Throwable# // ^^^^^^^ reference scala/Nothing# +// definition local39 @SerialVersionUID final class $anonfun case e: Abort => -// ^ definition local21 +// ^ definition local46 e: Abort // ^^^^^ reference upickle/core/Abort# throw new AbortException(e.msg, j, -1, -1, e) // ^^^^^^^^^^^^^^ reference upickle/core/AbortException# // reference upickle/core/AbortException#``(). -// ^ reference local21 +// ^ reference local46 // ^^^ reference upickle/core/Abort#msg. // ^ reference ujson/ByteParser#reject().(j) -// ^ reference local21 +// ^ reference local46 } -// reference scala/Function1#apply(). /** * Tail-recursive parsing method to do the bulk of JSON parsing. * @@ -1034,18 +1029,18 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^ reference scala/annotation/tailrec# // reference scala/annotation/tailrec#``(). protected[this] final def parseNested(state: Int, -// ^^^^^^^^^^^ definition ujson/ByteParser#parseNested(). -// ^^^^^ definition ujson/ByteParser#parseNested().(state) +// ^^^^^^^^^^^ definition ujson/ByteParser#parseNested(). @tailrec final def parseNested(state: Int, i: Int, stackHead: ObjArrVisitor[local50, J[, stackTail: List[ObjArrVisitor[local51, J[]): (J, Int) +// ^^^^^ definition ujson/ByteParser#parseNested().(state) state: Int // ^^^ reference scala/Int# i: Int, -// ^ definition ujson/ByteParser#parseNested().(i) +// ^ definition ujson/ByteParser#parseNested().(i) i: Int // ^^^ reference scala/Int# stackHead: ObjArrVisitor[_, J], -// ^^^^^^^^^ definition ujson/ByteParser#parseNested().(stackHead) +// ^^^^^^^^^ definition ujson/ByteParser#parseNested().(stackHead) stackHead: ObjArrVisitor[local50, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/ByteParser#[J] stackTail: List[ObjArrVisitor[_, J]]) : (J, Int) = { -// ^^^^^^^^^ definition ujson/ByteParser#parseNested().(stackTail) +// ^^^^^^^^^ definition ujson/ByteParser#parseNested().(stackTail) stackTail: List[ObjArrVisitor[local51, J[] // ^^^^ reference scala/package.List# // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/ByteParser#[J] @@ -1070,17 +1065,16 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^ reference ujson/ByteParser#KEY. // ^^^^^^ reference ujson/ByteParser#OBJBEG. val nextJ = try parseStringKey(i, stackHead) catch reject(i) -// ^^^^^ definition local22 +// ^^^^^ definition local52 nextJ: Int // ^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringKey(). // ^ reference ujson/ByteParser#parseNested().(i) // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(COLON, nextJ, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^ reference ujson/ByteParser#COLON. -// ^^^^^ reference local22 +// ^^^^^ reference local52 // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) @@ -1088,18 +1082,17 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^ reference ujson/ByteParser#DATA. // ^^^^^^ reference ujson/ByteParser#ARRBEG. val nextJ = try parseStringValue(i, stackHead) catch reject(i) -// ^^^^^ definition local23 +// ^^^^^ definition local55 nextJ: Int // ^^^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringValue(). // ^ reference ujson/ByteParser#parseNested().(i) // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), nextJ, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/ByteParser#collectionEndFor(). // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) -// ^^^^^ reference local23 +// ^^^^^ reference local55 // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) @@ -1133,7 +1126,7 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^ reference ujson/ByteParser#parseNested().(state) // ^ reference ujson/ByteParser#parseNested().(i) val ctx = -// ^^^ definition local24 +// ^^^ definition local58 ctx: ArrVisitor[local59, J[ try stackHead.subVisitor.asInstanceOf[Visitor[_, J]].visitArray(-1, i) // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). @@ -1145,14 +1138,13 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ catch reject(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(ARRBEG, i + 1, ctx, stackHead :: stackTail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^ reference ujson/ByteParser#ARRBEG. // ^ reference ujson/ByteParser#parseNested().(i) // ^ reference scala/Int#`+`(+4). -// ^^^ reference local24 -// ^^^^^^^^^ reference local25 +// ^^^ reference local58 +// ^^^^^^^^^ reference local62 // ^^ reference scala/collection/immutable/List#`::`(). // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) @@ -1162,7 +1154,7 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^ reference ujson/ByteParser#parseNested().(state) // ^ reference ujson/ByteParser#parseNested().(i) val ctx = -// ^^^ definition local27 +// ^^^ definition local63 ctx: ObjVisitor[local64, J[ try stackHead.subVisitor.asInstanceOf[Visitor[_, J]].visitObject(-1, i) // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). @@ -1174,14 +1166,13 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ catch reject(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(OBJBEG, i + 1, ctx, stackHead :: stackTail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^ reference ujson/ByteParser#OBJBEG. // ^ reference ujson/ByteParser#parseNested().(i) // ^ reference scala/Int#`+`(+4). -// ^^^ reference local27 -// ^^^^^^^^^ reference local28 +// ^^^ reference local63 +// ^^^^^^^^^ reference local67 // ^^ reference scala/collection/immutable/List#`::`(). // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) @@ -1191,7 +1182,7 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^ reference ujson/ByteParser#parseNested().(state) // ^ reference ujson/ByteParser#parseNested().(i) val ctx = -// ^^^ definition local29 +// ^^^ definition local68 ctx: Int try parseNum(i, stackHead.narrow, stackHead.subVisitor.asInstanceOf[Visitor[_, J]]) // ^^^^^^^^ reference ujson/ByteParser#parseNum(). // ^ reference ujson/ByteParser#parseNested().(i) @@ -1205,12 +1196,11 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ catch reject(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), ctx, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/ByteParser#collectionEndFor(). // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) -// ^^^ reference local29 +// ^^^ reference local68 // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackHead) // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) @@ -1237,7 +1227,6 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ catch reject(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), i + 4, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/ByteParser#collectionEndFor(). @@ -1270,7 +1259,6 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ catch reject(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), i + 5, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/ByteParser#collectionEndFor(). @@ -1303,7 +1291,6 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ catch reject(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), i + 4, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/ByteParser#collectionEndFor(). @@ -1354,21 +1341,21 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^ reference ujson/ByteParser#parseNested().(i) case Some(t) => t // ^^^^ reference scala/Some. -// ^ definition local30 -// ^ reference local30 +// ^ definition local77 t: (J, Int) +// ^ reference local77 case None => // ^^^^ reference scala/None. val stackTailHead = stackTail.head -// ^^^^^^^^^^^^^ definition local31 +// ^^^^^^^^^^^^^ definition local78 stackTailHead: ObjArrVisitor[local51, J[ // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) // ^^^^ reference scala/collection/IterableOps#head(). parseNested(collectionEndFor(stackTailHead), i + 1, stackTailHead, stackTail.tail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/ByteParser#collectionEndFor(). -// ^^^^^^^^^^^^^ reference local31 +// ^^^^^^^^^^^^^ reference local78 // ^ reference ujson/ByteParser#parseNested().(i) // ^ reference scala/Int#`+`(+4). -// ^^^^^^^^^^^^^ reference local31 +// ^^^^^^^^^^^^^ reference local78 // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) // ^^^^ reference scala/collection/IterableOps#tail(). } @@ -1391,21 +1378,21 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^ reference ujson/ByteParser#parseNested().(i) case Some(t) => t // ^^^^ reference scala/Some. -// ^ definition local32 -// ^ reference local32 +// ^ definition local79 t: (J, Int) +// ^ reference local79 case None => // ^^^^ reference scala/None. val stackTailHead = stackTail.head -// ^^^^^^^^^^^^^ definition local33 +// ^^^^^^^^^^^^^ definition local80 stackTailHead: ObjArrVisitor[local51, J[ // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) // ^^^^ reference scala/collection/IterableOps#head(). parseNested(collectionEndFor(stackTailHead), i + 1, stackTailHead, stackTail.tail) // ^^^^^^^^^^^ reference ujson/ByteParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/ByteParser#collectionEndFor(). -// ^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^ reference local80 // ^ reference ujson/ByteParser#parseNested().(i) // ^ reference scala/Int#`+`(+4). -// ^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^ reference local80 // ^^^^^^^^^ reference ujson/ByteParser#parseNested().(stackTail) // ^^^^ reference scala/collection/IterableOps#tail(). } @@ -1424,13 +1411,13 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ def dieWithFailureMessage(i: Int, state: Int) = { -// ^^^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#dieWithFailureMessage(). -// ^ definition ujson/ByteParser#dieWithFailureMessage().(i) +// ^^^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#dieWithFailureMessage(). def dieWithFailureMessage(i: Int, state: Int): Nothing +// ^ definition ujson/ByteParser#dieWithFailureMessage().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/ByteParser#dieWithFailureMessage().(state) +// ^^^^^ definition ujson/ByteParser#dieWithFailureMessage().(state) state: Int // ^^^ reference scala/Int# val expected = state match{ -// ^^^^^^^^ definition local34 +// ^^^^^^^^ definition local81 expected: String // ^^^^^ reference ujson/ByteParser#dieWithFailureMessage().(state) case ARRBEG => "json value or ]" // ^^^^^^ reference ujson/ByteParser#ARRBEG. @@ -1450,16 +1437,15 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ die(i, s"expected $expected") // ^^^ reference ujson/ByteParser#die(). // ^ reference ujson/ByteParser#dieWithFailureMessage().(i) -// reference scala/StringContext.apply(). // ^ reference scala/StringContext#s(). -// ^^^^^^^^ reference local34 +// ^^^^^^^^ reference local81 } def failIfNotData(state: Int, i: Int) = (state: @switch) match{ -// ^^^^^^^^^^^^^ definition ujson/ByteParser#failIfNotData(). -// ^^^^^ definition ujson/ByteParser#failIfNotData().(state) +// ^^^^^^^^^^^^^ definition ujson/ByteParser#failIfNotData(). def failIfNotData(state: Int, i: Int): Unit +// ^^^^^ definition ujson/ByteParser#failIfNotData().(state) state: Int // ^^^ reference scala/Int# -// ^ definition ujson/ByteParser#failIfNotData().(i) +// ^ definition ujson/ByteParser#failIfNotData().(i) i: Int // ^^^ reference scala/Int# // ^^^^^ reference ujson/ByteParser#failIfNotData().(state) case DATA | ARRBEG => // do nothing @@ -1472,39 +1458,36 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ } def tryCloseCollection(stackHead: ObjArrVisitor[_, J], stackTail: List[ObjArrVisitor[_, J]], i: Int) = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#tryCloseCollection(). -// ^^^^^^^^^ definition ujson/ByteParser#tryCloseCollection().(stackHead) +// ^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#tryCloseCollection(). def tryCloseCollection(stackHead: ObjArrVisitor[local82, J[, stackTail: List[ObjArrVisitor[local83, J[], i: Int): Option[(J, Int)] +// ^^^^^^^^^ definition ujson/ByteParser#tryCloseCollection().(stackHead) stackHead: ObjArrVisitor[local82, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/ByteParser#[J] -// ^^^^^^^^^ definition ujson/ByteParser#tryCloseCollection().(stackTail) +// ^^^^^^^^^ definition ujson/ByteParser#tryCloseCollection().(stackTail) stackTail: List[ObjArrVisitor[local83, J[] // ^^^^ reference scala/package.List# // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/ByteParser#[J] -// ^ definition ujson/ByteParser#tryCloseCollection().(i) +// ^ definition ujson/ByteParser#tryCloseCollection().(i) i: Int // ^^^ reference scala/Int# if (stackTail.isEmpty) { // ^^^^^^^^^ reference ujson/ByteParser#tryCloseCollection().(stackTail) // ^^^^^^^ reference scala/collection/immutable/List#isEmpty(). Some(try stackHead.visitEnd(i) catch reject(i), i + 1) // ^^^^ reference scala/Some. -// reference scala/Some.apply(). // ^^^^^^^^^ reference ujson/ByteParser#tryCloseCollection().(stackHead) // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). // ^ reference ujson/ByteParser#tryCloseCollection().(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#tryCloseCollection().(i) -// reference scala/Function1#apply(). // ^ reference ujson/ByteParser#tryCloseCollection().(i) // ^ reference scala/Int#`+`(+4). -// reference scala/Tuple2.apply(). } else { val ctxt2 = stackTail.head.narrow -// ^^^^^ definition local35 +// ^^^^^ definition local86 ctxt2: ObjArrVisitor[Any, J] // ^^^^^^^^^ reference ujson/ByteParser#tryCloseCollection().(stackTail) // ^^^^ reference scala/collection/IterableOps#head(). // ^^^^^^ reference upickle/core/ObjArrVisitor#narrow(). try ctxt2.visitValue(stackHead.visitEnd(i), i) catch reject(i) -// ^^^^^ reference local35 +// ^^^^^ reference local86 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^ reference ujson/ByteParser#tryCloseCollection().(stackHead) // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). @@ -1512,15 +1495,14 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^ reference ujson/ByteParser#tryCloseCollection().(i) // ^^^^^^ reference ujson/ByteParser#reject(). // ^ reference ujson/ByteParser#tryCloseCollection().(i) -// reference scala/Function1#apply(). None // ^^^^ reference scala/None. } } def collectionEndFor(stackHead: ObjArrVisitor[_, _]) = { -// ^^^^^^^^^^^^^^^^ definition ujson/ByteParser#collectionEndFor(). -// ^^^^^^^^^ definition ujson/ByteParser#collectionEndFor().(stackHead) +// ^^^^^^^^^^^^^^^^ definition ujson/ByteParser#collectionEndFor(). def collectionEndFor(stackHead: ObjArrVisitor[local89, local90[): Int +// ^^^^^^^^^ definition ujson/ByteParser#collectionEndFor().(stackHead) stackHead: ObjArrVisitor[local89, local90[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# if (stackHead.isObj) OBJEND // ^^^^^^^^^ reference ujson/ByteParser#collectionEndFor().(stackHead) @@ -1538,50 +1520,49 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * chars. */ protected[this] final def parseStringSimple(i: Int): Int = { -// ^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringSimple(). -// ^ definition ujson/ByteParser#parseStringSimple().(i) +// ^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringSimple(). final def parseStringSimple(i: Int): Int +// ^ definition ujson/ByteParser#parseStringSimple().(i) i: Int // ^^^ reference scala/Int# // ^^^ reference scala/Int# var j = i -// ^ definition local36 +// ^ definition local91 j: Int // ^ reference ujson/ByteParser#parseStringSimple().(i) var c = elemOps.toUnsignedInt(getByteSafe(j)) -// ^ definition local37 +// ^ definition local92 c: Int // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^^^^^^^^ reference upickle/core/ByteOps.toUnsignedInt(). // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local36 +// ^ reference local91 while (c != '"') { -// ^ reference local37 +// ^ reference local92 // ^^ reference scala/Int#`!=`(+2). if (c < ' ') die(j, s"control char (${c}) in string") -// ^ reference local37 +// ^ reference local92 // ^ reference scala/Int#`<`(+2). // ^^^ reference ujson/ByteParser#die(). -// ^ reference local36 -// reference scala/StringContext.apply(). +// ^ reference local91 // ^ reference scala/StringContext#s(). -// ^ reference local37 +// ^ reference local92 if (c == '\\' || c > 127) return -1 - j -// ^ reference local37 +// ^ reference local92 // ^^ reference scala/Int#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local37 +// ^ reference local92 // ^ reference scala/Int#`>`(+3). // ^ reference scala/Int#`-`(+3). -// ^ reference local36 +// ^ reference local91 j += 1 -// ^ reference local36 +// ^ reference local91 // ^^ reference scala/Int#`+`(+4). c = elemOps.toUnsignedInt(getByteSafe(j)) -// ^ reference local37 +// ^ reference local92 // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^^^^^^^^ reference upickle/core/ByteOps.toUnsignedInt(). // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local36 +// ^ reference local91 } j + 1 -// ^ reference local36 +// ^ reference local91 // ^ reference scala/Int#`+`(+4). } @@ -1589,101 +1570,99 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * Parse a string that is known to have escape sequences. */ protected[this] final def parseStringComplex(i0: Int): Int = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringComplex(). -// ^^ definition ujson/ByteParser#parseStringComplex().(i0) +// ^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringComplex(). final def parseStringComplex(i0: Int): Int +// ^^ definition ujson/ByteParser#parseStringComplex().(i0) i0: Int // ^^^ reference scala/Int# // ^^^ reference scala/Int# var i = i0 -// ^ definition local38 +// ^ definition local94 i: Int // ^^ reference ujson/ByteParser#parseStringComplex().(i0) var c = elemOps.toUnsignedInt(getByteSafe(i)) -// ^ definition local39 +// ^ definition local95 c: Int // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^^^^^^^^ reference upickle/core/ByteOps.toUnsignedInt(). // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local38 +// ^ reference local94 while (c != '"') { -// ^ reference local39 +// ^ reference local95 // ^^ reference scala/Int#`!=`(+2). if (c < ' ') die(i, s"control char (${c}) in string") -// ^ reference local39 +// ^ reference local95 // ^ reference scala/Int#`<`(+2). // ^^^ reference ujson/ByteParser#die(). -// ^ reference local38 -// reference scala/StringContext.apply(). +// ^ reference local94 // ^ reference scala/StringContext#s(). -// ^ reference local39 +// ^ reference local95 else if (c == '\\') { -// ^ reference local39 +// ^ reference local95 // ^^ reference scala/Int#`==`(+2). (getByteSafe(i + 1): @switch) match { // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local38 +// ^ reference local94 // ^ reference scala/Int#`+`(+4). case 'b' => { outputBuilder.append('\b'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case 'f' => { outputBuilder.append('\f'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case 'n' => { outputBuilder.append('\n'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case 'r' => { outputBuilder.append('\r'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case 't' => { outputBuilder.append('\t'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case '"' => { outputBuilder.append('"'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case '/' => { outputBuilder.append('/'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case '\\' => { outputBuilder.append('\\'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). // if there's a problem then descape will explode case 'u' => val d = descape(i) -// ^ definition local40 +// ^ definition local97 d: Char // ^^^^^^^ reference ujson/ByteParser#descape(). -// ^ reference local38 +// ^ reference local94 outputBuilder.appendC(d) // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^^ reference upickle/core/ByteAppendC#appendC(). -// ^ reference local40 +// ^ reference local97 i += 6 -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case c => die(i + 1, s"illegal escape sequence after \\") -// ^ definition local41 +// ^ definition local98 c: Byte // ^^^ reference ujson/ByteParser#die(). -// ^ reference local38 +// ^ reference local94 // ^ reference scala/Int#`+`(+4). -// reference scala/StringContext.apply(). // ^ reference scala/StringContext#s(). } } else { @@ -1695,21 +1674,21 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ outputBuilder.append(c) // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^ reference upickle/core/ByteBuilder#append(). -// ^ reference local39 +// ^ reference local95 i += 1 -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). } c = elemOps.toUnsignedInt(getByteSafe(i)) -// ^ reference local39 +// ^ reference local95 // ^^^^^^^ reference ujson/ByteParser#elemOps. // ^^^^^^^^^^^^^ reference upickle/core/ByteOps.toUnsignedInt(). // ^^^^^^^^^^^ reference ujson/ByteParser#getByteSafe(). -// ^ reference local38 +// ^ reference local94 } i + 1 -// ^ reference local38 +// ^ reference local94 // ^ reference scala/Int#`+`(+4). } @@ -1722,21 +1701,21 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ * interpret a multi-char code point incorrectly. */ protected[this] final def parseStringValue(i: Int, stackHead: ObjArrVisitor[_, J]): Int = { -// ^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringValue(). -// ^ definition ujson/ByteParser#parseStringValue().(i) +// ^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringValue(). final def parseStringValue(i: Int, stackHead: ObjArrVisitor[local99, J[): Int +// ^ definition ujson/ByteParser#parseStringValue().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^^^^ definition ujson/ByteParser#parseStringValue().(stackHead) +// ^^^^^^^^^ definition ujson/ByteParser#parseStringValue().(stackHead) stackHead: ObjArrVisitor[local99, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/ByteParser#[J] // ^^^ reference scala/Int# val k = parseStringSimple(i + 1) -// ^ definition local42 +// ^ definition local100 k: Int // ^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringSimple(). // ^ reference ujson/ByteParser#parseStringValue().(i) // ^ reference scala/Int#`+`(+4). if (k >= 0) { -// ^ reference local42 +// ^ reference local100 // ^^ reference scala/Int#`>=`(+3). visitString(i, unsafeCharSeqForRange(i + 1, k - i - 2), stackHead) // ^^^^^^^^^^^ reference ujson/ByteParser#visitString(). @@ -1744,19 +1723,19 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingByteParser#unsafeCharSeqForRange(). // ^ reference ujson/ByteParser#parseStringValue().(i) // ^ reference scala/Int#`+`(+4). -// ^ reference local42 +// ^ reference local100 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseStringValue().(i) // ^ reference scala/Int#`-`(+3). // ^^^^^^^^^ reference ujson/ByteParser#parseStringValue().(stackHead) k -// ^ reference local42 +// ^ reference local100 } else { val k2 = parseStringToOutputBuilder(i, k) -// ^^ definition local43 +// ^^ definition local101 k2: Int // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringToOutputBuilder(). // ^ reference ujson/ByteParser#parseStringValue().(i) -// ^ reference local42 +// ^ reference local100 visitString(i, outputBuilder.makeString(), stackHead) // ^^^^^^^^^^^ reference ujson/ByteParser#visitString(). // ^ reference ujson/ByteParser#parseStringValue().(i) @@ -1764,26 +1743,26 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^^^^ reference upickle/core/ByteBuilder#makeString(). // ^^^^^^^^^ reference ujson/ByteParser#parseStringValue().(stackHead) k2 -// ^^ reference local43 +// ^^ reference local101 } } protected[this] final def parseStringKey(i: Int, stackHead: ObjArrVisitor[_, J]): Int = { -// ^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringKey(). -// ^ definition ujson/ByteParser#parseStringKey().(i) +// ^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringKey(). final def parseStringKey(i: Int, stackHead: ObjArrVisitor[local102, J[): Int +// ^ definition ujson/ByteParser#parseStringKey().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^^^^ definition ujson/ByteParser#parseStringKey().(stackHead) +// ^^^^^^^^^ definition ujson/ByteParser#parseStringKey().(stackHead) stackHead: ObjArrVisitor[local102, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/ByteParser#[J] // ^^^ reference scala/Int# val k = parseStringSimple(i + 1) -// ^ definition local44 +// ^ definition local103 k: Int // ^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringSimple(). // ^ reference ujson/ByteParser#parseStringKey().(i) // ^ reference scala/Int#`+`(+4). if (k >= 0) { -// ^ reference local44 +// ^ reference local103 // ^^ reference scala/Int#`>=`(+3). visitStringKey(i, unsafeCharSeqForRange(i + 1, k - i - 2), stackHead) // ^^^^^^^^^^^^^^ reference ujson/ByteParser#visitStringKey(). @@ -1791,19 +1770,19 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingByteParser#unsafeCharSeqForRange(). // ^ reference ujson/ByteParser#parseStringKey().(i) // ^ reference scala/Int#`+`(+4). -// ^ reference local44 +// ^ reference local103 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseStringKey().(i) // ^ reference scala/Int#`-`(+3). // ^^^^^^^^^ reference ujson/ByteParser#parseStringKey().(stackHead) k -// ^ reference local44 +// ^ reference local103 } else { val k2 = parseStringToOutputBuilder(i, k) -// ^^ definition local45 +// ^^ definition local104 k2: Int // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringToOutputBuilder(). // ^ reference ujson/ByteParser#parseStringKey().(i) -// ^ reference local44 +// ^ reference local103 visitStringKey(i, outputBuilder.makeString(), stackHead) // ^^^^^^^^^^^^^^ reference ujson/ByteParser#visitStringKey(). // ^ reference ujson/ByteParser#parseStringKey().(i) @@ -1811,16 +1790,16 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^^^^ reference upickle/core/ByteBuilder#makeString(). // ^^^^^^^^^ reference ujson/ByteParser#parseStringKey().(stackHead) k2 -// ^^ reference local45 +// ^^ reference local104 } } def parseStringToOutputBuilder(i: Int, k: Int) = { -// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringToOutputBuilder(). -// ^ definition ujson/ByteParser#parseStringToOutputBuilder().(i) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringToOutputBuilder(). def parseStringToOutputBuilder(i: Int, k: Int): Int +// ^ definition ujson/ByteParser#parseStringToOutputBuilder().(i) i: Int // ^^^ reference scala/Int# -// ^ definition ujson/ByteParser#parseStringToOutputBuilder().(k) +// ^ definition ujson/ByteParser#parseStringToOutputBuilder().(k) k: Int // ^^^ reference scala/Int# outputBuilder.reset() // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. @@ -1836,26 +1815,26 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseStringToOutputBuilder().(i) val k2 = parseStringComplex(-k - 1) -// ^^ definition local46 +// ^^ definition local105 k2: Int // ^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringComplex(). // ^ reference scala/Int#`unary_-`(). // ^ reference ujson/ByteParser#parseStringToOutputBuilder().(k) // ^ reference scala/Int#`-`(+3). k2 -// ^^ reference local46 +// ^^ reference local105 } def visitString(i: Int, s: CharSequence, stackHead: ObjArrVisitor[_, J]) = { -// ^^^^^^^^^^^ definition ujson/ByteParser#visitString(). -// ^ definition ujson/ByteParser#visitString().(i) +// ^^^^^^^^^^^ definition ujson/ByteParser#visitString(). def visitString(i: Int, s: CharSequence, stackHead: ObjArrVisitor[local106, J[): Unit +// ^ definition ujson/ByteParser#visitString().(i) i: Int // ^^^ reference scala/Int# -// ^ definition ujson/ByteParser#visitString().(s) +// ^ definition ujson/ByteParser#visitString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^^ definition ujson/ByteParser#visitString().(stackHead) +// ^^^^^^^^^ definition ujson/ByteParser#visitString().(stackHead) stackHead: ObjArrVisitor[local106, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/ByteParser#[J] val v = stackHead.subVisitor.visitString(s, i) -// ^ definition local47 +// ^ definition local107 v: Any // ^^^^^^^^^ reference ujson/ByteParser#visitString().(stackHead) // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). @@ -1865,33 +1844,33 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ // ^^^^^^^^^ reference ujson/ByteParser#visitString().(stackHead) // ^^^^^^ reference upickle/core/ObjArrVisitor#narrow(). // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). -// ^ reference local47 +// ^ reference local107 // ^ reference ujson/ByteParser#visitString().(i) } def visitStringKey(i: Int, s: CharSequence, stackHead: ObjArrVisitor[_, J]) = { -// ^^^^^^^^^^^^^^ definition ujson/ByteParser#visitStringKey(). -// ^ definition ujson/ByteParser#visitStringKey().(i) +// ^^^^^^^^^^^^^^ definition ujson/ByteParser#visitStringKey(). def visitStringKey(i: Int, s: CharSequence, stackHead: ObjArrVisitor[local108, J[): Unit +// ^ definition ujson/ByteParser#visitStringKey().(i) i: Int // ^^^ reference scala/Int# -// ^ definition ujson/ByteParser#visitStringKey().(s) +// ^ definition ujson/ByteParser#visitStringKey().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^^ definition ujson/ByteParser#visitStringKey().(stackHead) +// ^^^^^^^^^ definition ujson/ByteParser#visitStringKey().(stackHead) stackHead: ObjArrVisitor[local108, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/ByteParser#[J] val obj = stackHead.asInstanceOf[ObjVisitor[Any, _]] -// ^^^ definition local48 +// ^^^ definition local109 obj: ObjVisitor[Any, Any] // ^^^^^^^^^ reference ujson/ByteParser#visitStringKey().(stackHead) // ^^^^^^^^^^^^ reference scala/Any#asInstanceOf(). // ^^^^^^^^^^ reference upickle/core/ObjVisitor# // ^^^ reference scala/Any# val keyVisitor = obj.visitKey(i) -// ^^^^^^^^^^ definition local49 -// ^^^ reference local48 +// ^^^^^^^^^^ definition local110 keyVisitor: Visitor[local111, Any[ +// ^^^ reference local109 // ^^^^^^^^ reference upickle/core/ObjVisitor#visitKey(). // ^ reference ujson/ByteParser#visitStringKey().(i) obj.visitKeyValue(keyVisitor.visitString(s, i)) -// ^^^ reference local48 +// ^^^ reference local109 // ^^^^^^^^^^^^^ reference upickle/core/ObjVisitor#visitKeyValue(). -// ^^^^^^^^^^ reference local49 +// ^^^^^^^^^^ reference local110 // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). // ^ reference ujson/ByteParser#visitStringKey().(s) // ^ reference ujson/ByteParser#visitStringKey().(i) @@ -1899,54 +1878,54 @@ abstract class ByteParser[J] extends upickle.core.BufferingByteParser{ protected[this] final def parseStringTopLevel(i: Int, facade: Visitor[_, J]): (J, Int) = { -// ^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringTopLevel(). -// ^ definition ujson/ByteParser#parseStringTopLevel().(i) +// ^^^^^^^^^^^^^^^^^^^ definition ujson/ByteParser#parseStringTopLevel(). final def parseStringTopLevel(i: Int, facade: Visitor[local112, J[): (J, Int) +// ^ definition ujson/ByteParser#parseStringTopLevel().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/ByteParser#parseStringTopLevel().(facade) +// ^^^^^^ definition ujson/ByteParser#parseStringTopLevel().(facade) facade: Visitor[local112, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteParser#[J] // ^ reference ujson/ByteParser#[J] // ^^^ reference scala/Int# val k = parseStringSimple(i + 1) -// ^ definition local50 +// ^ definition local113 k: Int // ^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringSimple(). // ^ reference ujson/ByteParser#parseStringTopLevel().(i) // ^ reference scala/Int#`+`(+4). if (k >= 0) { -// ^ reference local50 +// ^ reference local113 // ^^ reference scala/Int#`>=`(+3). val res = facade.visitString(unsafeCharSeqForRange(i + 1, k - i - 2), i) -// ^^^ definition local51 +// ^^^ definition local114 res: J // ^^^^^^ reference ujson/ByteParser#parseStringTopLevel().(facade) // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). // ^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingByteParser#unsafeCharSeqForRange(). // ^ reference ujson/ByteParser#parseStringTopLevel().(i) // ^ reference scala/Int#`+`(+4). -// ^ reference local50 +// ^ reference local113 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseStringTopLevel().(i) // ^ reference scala/Int#`-`(+3). // ^ reference ujson/ByteParser#parseStringTopLevel().(i) (res, k) -// ^^^ reference local51 -// ^ reference local50 +// ^^^ reference local114 +// ^ reference local113 } else { val k2 = parseStringToOutputBuilder(i, k) -// ^^ definition local52 +// ^^ definition local115 k2: Int // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ByteParser#parseStringToOutputBuilder(). // ^ reference ujson/ByteParser#parseStringTopLevel().(i) -// ^ reference local50 +// ^ reference local113 val res = facade.visitString(outputBuilder.makeString(), i) -// ^^^ definition local53 +// ^^^ definition local116 res: J // ^^^^^^ reference ujson/ByteParser#parseStringTopLevel().(facade) // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). // ^^^^^^^^^^^^^ reference ujson/ByteParser#outputBuilder. // ^^^^^^^^^^ reference upickle/core/ByteBuilder#makeString(). // ^ reference ujson/ByteParser#parseStringTopLevel().(i) (res, k2) -// ^^^ reference local53 -// ^^ reference local52 +// ^^^ reference local116 +// ^^ reference local115 } } } diff --git a/tests/snapshots/src/main/generated/CharParser.scala b/tests/snapshots/src/main/generated/CharParser.scala index 80ed9e0c..0065bc59 100644 --- a/tests/snapshots/src/main/generated/CharParser.scala +++ b/tests/snapshots/src/main/generated/CharParser.scala @@ -38,27 +38,27 @@ import scala.annotation.{switch, tailrec} * to construct the `CharSequences` that `visitString` requires, etc. */ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ -// ^^^^^^^^^^ definition ujson/CharParser# -// ^ definition ujson/CharParser#[J] -// definition ujson/CharParser#``(). +// ^^^^^^^^^^ definition ujson/CharParser# abstract class CharParser[J] +// ^ definition ujson/CharParser#[J] J +// definition ujson/CharParser#``(). def this() // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingCharParser# private[this] val elemOps = upickle.core.CharOps -// ^^^^^^^ definition ujson/CharParser#elemOps. +// ^^^^^^^ definition ujson/CharParser#elemOps. private[this] val elemOps: // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^ reference upickle/core/CharOps. private[this] val outputBuilder = new upickle.core.CharBuilder() -// ^^^^^^^^^^^^^ definition ujson/CharParser#outputBuilder. +// ^^^^^^^^^^^^^ definition ujson/CharParser#outputBuilder. private[this] val outputBuilder: CharBuilder // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^ reference upickle/core/CharBuilder# // reference upickle/core/CharBuilder#``(). def requestUntilOrThrow(i: Int) = { -// ^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#requestUntilOrThrow(). -// ^ definition ujson/CharParser#requestUntilOrThrow().(i) +// ^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#requestUntilOrThrow(). def requestUntilOrThrow(i: Int): Unit +// ^ definition ujson/CharParser#requestUntilOrThrow().(i) i: Int // ^^^ reference scala/Int# if (requestUntil(i)) throw new IncompleteParseException("exhausted input") // ^^^^^^^^^^^^ reference upickle/core/BufferingCharParser#requestUntil(). @@ -67,8 +67,8 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // reference ujson/IncompleteParseException#``(). } override def getCharSafe(i: Int): Char = { -// ^^^^^^^^^^^ definition ujson/CharParser#getCharSafe(). -// ^ definition ujson/CharParser#getCharSafe().(i) +// ^^^^^^^^^^^ definition ujson/CharParser#getCharSafe(). def getCharSafe(i: Int): Char +// ^ definition ujson/CharParser#getCharSafe().(i) i: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Char# requestUntilOrThrow(i) @@ -83,8 +83,8 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * Return true iff 'i' is at or beyond the end of the input (EOF). */ protected[this] def atEof(i: Int) = requestUntil(i) -// ^^^^^ definition ujson/CharParser#atEof(). -// ^ definition ujson/CharParser#atEof().(i) +// ^^^^^ definition ujson/CharParser#atEof(). def atEof(i: Int): Boolean +// ^ definition ujson/CharParser#atEof().(i) i: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference upickle/core/BufferingCharParser#requestUntil(). // ^ reference ujson/CharParser#atEof().(i) @@ -93,7 +93,7 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * Should be called when parsing is finished. */ protected[this] def close(): Unit -// ^^^^^ definition ujson/CharParser#close(). +// ^^^^^ definition ujson/CharParser#close(). def close(): Unit // ^^^^ reference scala/Unit# /** @@ -102,31 +102,31 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ @inline private[this] final val ARRBEG = 6 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^^ definition ujson/CharParser#ARRBEG. +// ^^^^^^ definition ujson/CharParser#ARRBEG. @inline private[this] final val ARRBEG: 6 @inline private[this] final val OBJBEG = 7 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^^ definition ujson/CharParser#OBJBEG. +// ^^^^^^ definition ujson/CharParser#OBJBEG. @inline private[this] final val OBJBEG: 7 @inline private[this] final val DATA = 1 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^ definition ujson/CharParser#DATA. +// ^^^^ definition ujson/CharParser#DATA. @inline private[this] final val DATA: 1 @inline private[this] final val KEY = 2 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^ definition ujson/CharParser#KEY. +// ^^^ definition ujson/CharParser#KEY. @inline private[this] final val KEY: 2 @inline private[this] final val COLON = 3 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^ definition ujson/CharParser#COLON. +// ^^^^^ definition ujson/CharParser#COLON. @inline private[this] final val COLON: 3 @inline private[this] final val ARREND = 4 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^^ definition ujson/CharParser#ARREND. +// ^^^^^^ definition ujson/CharParser#ARREND. @inline private[this] final val ARREND: 4 @inline private[this] final val OBJEND = 5 // ^^^^^^ reference scala/inline# // reference scala/inline#``(). -// ^^^^^^ definition ujson/CharParser#OBJEND. +// ^^^^^^ definition ujson/CharParser#OBJEND. @inline private[this] final val OBJEND: 5 /** * Parse the JSON document into a single JSON value. @@ -136,59 +136,58 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * multiple top-level objects are not allowed. */ final def parse(facade: Visitor[_, J]): J = { -// ^^^^^ definition ujson/CharParser#parse(). -// ^^^^^^ definition ujson/CharParser#parse().(facade) +// ^^^^^ definition ujson/CharParser#parse(). final def parse(facade: Visitor[local0, J[): J +// ^^^^^^ definition ujson/CharParser#parse().(facade) facade: Visitor[local0, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^ reference ujson/CharParser#[J] val (value, i) = parseTopLevel(0, facade) -// ^^^^^ definition local0 -// ^ definition local1 -// reference scala/Tuple2.apply(). +// ^^^^^ definition local2 value: J +// ^ definition local3 i: Int // ^^^^^^^^^^^^^ reference ujson/CharParser#parseTopLevel(). // ^^^^^^ reference ujson/CharParser#parse().(facade) var j = i -// ^ definition local3 -// ^ reference local1 +// ^ definition local4 j: Int +// ^ reference local3 while (!atEof(j)) { // ^ reference scala/Boolean#`unary_!`(). // ^^^^^ reference ujson/CharParser#atEof(). -// ^ reference local3 +// ^ reference local4 (getCharSafe(j): @switch) match { // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local3 +// ^ reference local4 case '\n' | ' ' | '\t' | '\r' => j += 1 -// ^ reference local3 +// ^ reference local4 // ^^ reference scala/Int#`+`(+4). case _ => die(j, "expected whitespace or eof") // ^^^ reference ujson/CharParser#die(). -// ^ reference local3 +// ^ reference local4 } } if (!atEof(j)) die(j, "expected eof") // ^ reference scala/Boolean#`unary_!`(). // ^^^^^ reference ujson/CharParser#atEof(). -// ^ reference local3 +// ^ reference local4 // ^^^ reference ujson/CharParser#die(). -// ^ reference local3 +// ^ reference local4 close() // ^^^^^ reference ujson/CharParser#close(). value -// ^^^^^ reference local0 +// ^^^^^ reference local2 } /** * Used to generate error messages with character info and offsets. */ protected[this] def die(i: Int, msg: String): Nothing = { -// ^^^ definition ujson/CharParser#die(). -// ^ definition ujson/CharParser#die().(i) +// ^^^ definition ujson/CharParser#die(). def die(i: Int, msg: String): Nothing +// ^ definition ujson/CharParser#die().(i) i: Int // ^^^ reference scala/Int# -// ^^^ definition ujson/CharParser#die().(msg) +// ^^^ definition ujson/CharParser#die().(msg) msg: String // ^^^^^^ reference scala/Predef.String# // ^^^^^^^ reference scala/Nothing# val out = new upickle.core.CharBuilder() -// ^^^ definition local4 +// ^^^ definition local6 out: CharBuilder // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^ reference upickle/core/CharBuilder# @@ -204,12 +203,11 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^^^^^ reference upickle/core/CharBuilder# // reference upickle/core/CharBuilder#``(). out, -// ^^^ reference local4 +// ^^^ reference local6 new ArrayCharSequence(Array(elemOps.toInt(getCharSafe(i)).toChar)), // ^^^^^^^^^^^^^^^^^ reference scala/Predef.ArrayCharSequence# // reference scala/Predef.ArrayCharSequence#``(). // ^^^^^ reference scala/Array. -// reference scala/Array.apply(+4). // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^ reference upickle/core/CharOps.toInt(). // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). @@ -219,16 +217,14 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^ reference upickle/core/RenderUtils.escapeChar().(unicode) ) val s = "%s got %s" format (msg, out.makeString()) -// ^ definition local5 -// reference scala/Predef.augmentString(). +// ^ definition local7 s: String // ^^^^^^ reference scala/collection/StringOps#format(). // ^^^ reference ujson/CharParser#die().(msg) -// ^^^ reference local4 +// ^^^ reference local6 // ^^^^^^^^^^ reference upickle/core/CharBuilder#makeString(). throw ParseException(s, i) // ^^^^^^^^^^^^^^ reference ujson/ParseException. -// reference ujson/ParseException.apply(). -// ^ reference local5 +// ^ reference local7 // ^ reference ujson/CharParser#die().(i) } @@ -243,163 +239,163 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * number. */ protected[this] final def parseNum(i: Int, ctxt: ObjArrVisitor[Any, J], facade: Visitor[_, J]): Int = { -// ^^^^^^^^ definition ujson/CharParser#parseNum(). -// ^ definition ujson/CharParser#parseNum().(i) +// ^^^^^^^^ definition ujson/CharParser#parseNum(). final def parseNum(i: Int, ctxt: ObjArrVisitor[Any, J], facade: Visitor[local8, J[): Int +// ^ definition ujson/CharParser#parseNum().(i) i: Int // ^^^ reference scala/Int# -// ^^^^ definition ujson/CharParser#parseNum().(ctxt) +// ^^^^ definition ujson/CharParser#parseNum().(ctxt) ctxt: ObjArrVisitor[Any, J] // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^^^ reference scala/Any# // ^ reference ujson/CharParser#[J] -// ^^^^^^ definition ujson/CharParser#parseNum().(facade) +// ^^^^^^ definition ujson/CharParser#parseNum().(facade) facade: Visitor[local8, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^^^ reference scala/Int# var j = i -// ^ definition local6 +// ^ definition local9 j: Int // ^ reference ujson/CharParser#parseNum().(i) var c = getCharSafe(j) -// ^ definition local7 +// ^ definition local10 c: Char // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 var decIndex = -1 -// ^^^^^^^^ definition local8 +// ^^^^^^^^ definition local11 decIndex: Int var expIndex = -1 -// ^^^^^^^^ definition local9 +// ^^^^^^^^ definition local12 expIndex: Int if (c == '-') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Char#`==`(+2). j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 } if (c == '0') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Char#`==`(+2). j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 } else { val j0 = j -// ^^ definition local10 -// ^ reference local6 +// ^^ definition local13 j0: Int +// ^ reference local9 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^ reference upickle/core/CharOps.within(). -// ^ reference local7 +// ^ reference local10 j += 1; -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 } if (j == j0) die(i, "expected digit") -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`==`(+3). -// ^^ reference local10 +// ^^ reference local13 // ^^^ reference ujson/CharParser#die(). // ^ reference ujson/CharParser#parseNum().(i) } if (c == '.') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Char#`==`(+2). decIndex = j - i -// ^^^^^^^^ reference local8 -// ^ reference local6 +// ^^^^^^^^ reference local11 +// ^ reference local9 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseNum().(i) j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 val j0 = j -// ^^ definition local11 -// ^ reference local6 +// ^^ definition local15 j0: Int +// ^ reference local9 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^ reference upickle/core/CharOps.within(). -// ^ reference local7 +// ^ reference local10 j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 } if (j0 == j) die(i, "expected digit") -// ^^ reference local11 +// ^^ reference local15 // ^^ reference scala/Int#`==`(+3). -// ^ reference local6 +// ^ reference local9 // ^^^ reference ujson/CharParser#die(). // ^ reference ujson/CharParser#parseNum().(i) } if (c == 'e' || c == 'E') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Char#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Char#`==`(+2). expIndex = j - i -// ^^^^^^^^ reference local9 -// ^ reference local6 +// ^^^^^^^^ reference local12 +// ^ reference local9 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseNum().(i) j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 if (c == '+' || c == '-') { -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Char#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local7 +// ^ reference local10 // ^^ reference scala/Char#`==`(+2). j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 } val j0 = j -// ^^ definition local12 -// ^ reference local6 +// ^^ definition local17 j0: Int +// ^ reference local9 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^ reference upickle/core/CharOps.within(). -// ^ reference local7 +// ^ reference local10 j += 1 -// ^ reference local6 +// ^ reference local9 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local7 +// ^ reference local10 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local6 +// ^ reference local9 } if (j0 == j) die(i, "expected digit") -// ^^ reference local12 +// ^^ reference local17 // ^^ reference scala/Int#`==`(+3). -// ^ reference local6 +// ^ reference local9 // ^^^ reference ujson/CharParser#die(). // ^ reference ujson/CharParser#parseNum().(i) } @@ -409,31 +405,31 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/CharParser#parseNum().(facade) -// ^^^^^^^^ reference local8 -// ^^^^^^^^ reference local9 +// ^^^^^^^^ reference local11 +// ^^^^^^^^ reference local12 // ^ reference ujson/CharParser#parseNum().(i) -// ^ reference local6 +// ^ reference local9 // ^ reference ujson/CharParser#parseNum().(i) j -// ^ reference local6 +// ^ reference local9 } def visitFloat64StringPartsWithWrapper(facade: Visitor[_, J], -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper(). -// ^^^^^^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(facade) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper(). def visitFloat64StringPartsWithWrapper(facade: Visitor[local19, J[, decIndex: Int, expIndex: Int, i: Int, j: Int): J +// ^^^^^^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(facade) facade: Visitor[local19, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] decIndex: Int, -// ^^^^^^^^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(decIndex) +// ^^^^^^^^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(decIndex) decIndex: Int // ^^^ reference scala/Int# expIndex: Int, -// ^^^^^^^^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(expIndex) +// ^^^^^^^^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(expIndex) expIndex: Int // ^^^ reference scala/Int# i: Int, -// ^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(i) +// ^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(i) i: Int // ^^^ reference scala/Int# j: Int) = { -// ^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(j) +// ^ definition ujson/CharParser#visitFloat64StringPartsWithWrapper().(j) j: Int // ^^^ reference scala/Int# facade.visitFloat64StringParts( // ^^^^^^ reference ujson/CharParser#visitFloat64StringPartsWithWrapper().(facade) @@ -468,211 +464,211 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * This method has all the same caveats as the previous method. */ protected[this] final def parseNumTopLevel(i: Int, facade: Visitor[_, J]): (J, Int) = { -// ^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseNumTopLevel(). -// ^ definition ujson/CharParser#parseNumTopLevel().(i) +// ^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseNumTopLevel(). final def parseNumTopLevel(i: Int, facade: Visitor[local20, J[): (J, Int) +// ^ definition ujson/CharParser#parseNumTopLevel().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/CharParser#parseNumTopLevel().(facade) +// ^^^^^^ definition ujson/CharParser#parseNumTopLevel().(facade) facade: Visitor[local20, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^ reference ujson/CharParser#[J] // ^^^ reference scala/Int# var j = i -// ^ definition local13 +// ^ definition local21 j: Int // ^ reference ujson/CharParser#parseNumTopLevel().(i) var c = getCharSafe(j) -// ^ definition local14 +// ^ definition local22 c: Char // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 var decIndex = -1 -// ^^^^^^^^ definition local15 +// ^^^^^^^^ definition local23 decIndex: Int var expIndex = -1 -// ^^^^^^^^ definition local16 +// ^^^^^^^^ definition local24 expIndex: Int if (c == '-') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Char#`==`(+2). // any valid input will require at least one digit after - j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 } if (c == '0') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Char#`==`(+2). j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). if (atEof(j)) { // ^^^^^ reference ujson/CharParser#atEof(). -// ^ reference local13 +// ^ reference local21 return (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/CharParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/CharParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } c = getCharSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 } else { val j0 = j -// ^^ definition local17 -// ^ reference local13 +// ^^ definition local25 j0: Int +// ^ reference local21 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^ reference upickle/core/CharOps.within(). -// ^ reference local14 +// ^ reference local22 j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). if (atEof(j)) { // ^^^^^ reference ujson/CharParser#atEof(). -// ^ reference local13 +// ^ reference local21 return (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/CharParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/CharParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } c = getCharSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 } if (j0 == j) die(i, "expected digit") -// ^^ reference local17 +// ^^ reference local25 // ^^ reference scala/Int#`==`(+3). -// ^ reference local13 +// ^ reference local21 // ^^^ reference ujson/CharParser#die(). // ^ reference ujson/CharParser#parseNumTopLevel().(i) } if (c == '.') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Char#`==`(+2). // any valid input will require at least one digit after . decIndex = j - i -// ^^^^^^^^ reference local15 -// ^ reference local13 +// ^^^^^^^^ reference local23 +// ^ reference local21 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseNumTopLevel().(i) j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 val j0 = j -// ^^ definition local18 -// ^ reference local13 +// ^^ definition local27 j0: Int +// ^ reference local21 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^ reference upickle/core/CharOps.within(). -// ^ reference local14 +// ^ reference local22 j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). if (atEof(j)) { // ^^^^^ reference ujson/CharParser#atEof(). -// ^ reference local13 +// ^ reference local21 return (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/CharParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/CharParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } c = getCharSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 } if(j0 == j) die(i, "expected digit") -// ^^ reference local18 +// ^^ reference local27 // ^^ reference scala/Int#`==`(+3). -// ^ reference local13 +// ^ reference local21 // ^^^ reference ujson/CharParser#die(). // ^ reference ujson/CharParser#parseNumTopLevel().(i) } if (c == 'e' || c == 'E') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Char#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Char#`==`(+2). // any valid input will require at least one digit after e, e+, etc expIndex = j - i -// ^^^^^^^^ reference local16 -// ^ reference local13 +// ^^^^^^^^ reference local24 +// ^ reference local21 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseNumTopLevel().(i) j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 if (c == '+' || c == '-') { -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Char#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local14 +// ^ reference local22 // ^^ reference scala/Char#`==`(+2). j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). c = getCharSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 } val j0 = j -// ^^ definition local19 -// ^ reference local13 +// ^^ definition local29 j0: Int +// ^ reference local21 while (elemOps.within('0', c, '9')) { // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^ reference upickle/core/CharOps.within(). -// ^ reference local14 +// ^ reference local22 j += 1 -// ^ reference local13 +// ^ reference local21 // ^^ reference scala/Int#`+`(+4). if (atEof(j)) { // ^^^^^ reference ujson/CharParser#atEof(). -// ^ reference local13 +// ^ reference local21 return (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/CharParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/CharParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } c = getCharSafe(j) -// ^ reference local14 +// ^ reference local22 // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local13 +// ^ reference local21 } if (j0 == j) die(i, "expected digit") -// ^^ reference local19 +// ^^ reference local29 // ^^ reference scala/Int#`==`(+3). -// ^ reference local13 +// ^ reference local21 // ^^^ reference ujson/CharParser#die(). // ^ reference ujson/CharParser#parseNumTopLevel().(i) } @@ -680,11 +676,11 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ (visitFloat64StringPartsWithWrapper(facade, decIndex, expIndex, i, j), j) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#visitFloat64StringPartsWithWrapper(). // ^^^^^^ reference ujson/CharParser#parseNumTopLevel().(facade) -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local16 +// ^^^^^^^^ reference local23 +// ^^^^^^^^ reference local24 // ^ reference ujson/CharParser#parseNumTopLevel().(i) -// ^ reference local13 -// ^ reference local13 +// ^ reference local21 +// ^ reference local21 } /** @@ -694,8 +690,8 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * This is why it can only return Char instead of Int. */ protected[this] final def descape(i: Int): Char = { -// ^^^^^^^ definition ujson/CharParser#descape(). -// ^ definition ujson/CharParser#descape().(i) +// ^^^^^^^ definition ujson/CharParser#descape(). final def descape(i: Int): Char +// ^ definition ujson/CharParser#descape().(i) i: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Char# import upickle.core.RenderUtils.hex @@ -704,10 +700,10 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^^^^^ reference upickle/core/RenderUtils. // ^^^ reference upickle/core/RenderUtils.hex(). var x = 0 -// ^ definition local20 +// ^ definition local31 x: Int x = (x << 4) | hex(getCharSafe(i+2).toInt) -// ^ reference local20 -// ^ reference local20 +// ^ reference local31 +// ^ reference local31 // ^^ reference scala/Int#`<<`(). // ^ reference scala/Int#`|`(+3). // ^^^ reference upickle/core/RenderUtils.hex(). @@ -716,8 +712,8 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^ reference scala/Int#`+`(+4). // ^^^^^ reference scala/Char#toInt(). x = (x << 4) | hex(getCharSafe(i+3).toInt) -// ^ reference local20 -// ^ reference local20 +// ^ reference local31 +// ^ reference local31 // ^^ reference scala/Int#`<<`(). // ^ reference scala/Int#`|`(+3). // ^^^ reference upickle/core/RenderUtils.hex(). @@ -726,8 +722,8 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^ reference scala/Int#`+`(+4). // ^^^^^ reference scala/Char#toInt(). x = (x << 4) | hex(getCharSafe(i+4).toInt) -// ^ reference local20 -// ^ reference local20 +// ^ reference local31 +// ^ reference local31 // ^^ reference scala/Int#`<<`(). // ^ reference scala/Int#`|`(+3). // ^^^ reference upickle/core/RenderUtils.hex(). @@ -736,8 +732,8 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^ reference scala/Int#`+`(+4). // ^^^^^ reference scala/Char#toInt(). x = (x << 4) | hex(getCharSafe(i+5).toInt) -// ^ reference local20 -// ^ reference local20 +// ^ reference local31 +// ^ reference local31 // ^^ reference scala/Int#`<<`(). // ^ reference scala/Int#`|`(+3). // ^^^ reference upickle/core/RenderUtils.hex(). @@ -746,7 +742,7 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^ reference scala/Int#`+`(+4). // ^^^^^ reference scala/Char#toInt(). x.toChar -// ^ reference local20 +// ^ reference local31 // ^^^^^^ reference scala/Int#toChar(). } @@ -757,10 +753,10 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * Note that this method assumes that the first character has already been checked. */ protected[this] final def parseTrue(i: Int, facade: Visitor[_, J]): J = { -// ^^^^^^^^^ definition ujson/CharParser#parseTrue(). -// ^ definition ujson/CharParser#parseTrue().(i) +// ^^^^^^^^^ definition ujson/CharParser#parseTrue(). final def parseTrue(i: Int, facade: Visitor[local32, J[): J +// ^ definition ujson/CharParser#parseTrue().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/CharParser#parseTrue().(facade) +// ^^^^^^ definition ujson/CharParser#parseTrue().(facade) facade: Visitor[local32, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^ reference ujson/CharParser#[J] @@ -800,10 +796,10 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * Note that this method assumes that the first character has already been checked. */ protected[this] final def parseFalse(i: Int, facade: Visitor[_, J]): J = { -// ^^^^^^^^^^ definition ujson/CharParser#parseFalse(). -// ^ definition ujson/CharParser#parseFalse().(i) +// ^^^^^^^^^^ definition ujson/CharParser#parseFalse(). final def parseFalse(i: Int, facade: Visitor[local33, J[): J +// ^ definition ujson/CharParser#parseFalse().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/CharParser#parseFalse().(facade) +// ^^^^^^ definition ujson/CharParser#parseFalse().(facade) facade: Visitor[local33, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^ reference ujson/CharParser#[J] @@ -849,10 +845,10 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * Note that this method assumes that the first character has already been checked. */ protected[this] final def parseNull(i: Int, facade: Visitor[_, J]): J = { -// ^^^^^^^^^ definition ujson/CharParser#parseNull(). -// ^ definition ujson/CharParser#parseNull().(i) +// ^^^^^^^^^ definition ujson/CharParser#parseNull(). final def parseNull(i: Int, facade: Visitor[local34, J[): J +// ^ definition ujson/CharParser#parseNull().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/CharParser#parseNull().(facade) +// ^^^^^^ definition ujson/CharParser#parseNull().(facade) facade: Visitor[local34, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^ reference ujson/CharParser#[J] @@ -887,10 +883,10 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ } protected[this] final def parseTopLevel(i: Int, facade: Visitor[_, J]): (J, Int) = { -// ^^^^^^^^^^^^^ definition ujson/CharParser#parseTopLevel(). -// ^ definition ujson/CharParser#parseTopLevel().(i) +// ^^^^^^^^^^^^^ definition ujson/CharParser#parseTopLevel(). final def parseTopLevel(i: Int, facade: Visitor[local35, J[): (J, Int) +// ^ definition ujson/CharParser#parseTopLevel().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/CharParser#parseTopLevel().(facade) +// ^^^^^^ definition ujson/CharParser#parseTopLevel().(facade) facade: Visitor[local35, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^ reference ujson/CharParser#[J] @@ -902,7 +898,6 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ catch reject(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseTopLevel().(i) -// reference scala/Function1#apply(). } /** * Parse and return the next JSON value and the position beyond it. @@ -911,10 +906,10 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^ reference scala/annotation/tailrec# // reference scala/annotation/tailrec#``(). protected[this] final def parseTopLevel0(i: Int, facade: Visitor[_, J]): (J, Int) = { -// ^^^^^^^^^^^^^^ definition ujson/CharParser#parseTopLevel0(). -// ^ definition ujson/CharParser#parseTopLevel0().(i) +// ^^^^^^^^^^^^^^ definition ujson/CharParser#parseTopLevel0(). @tailrec final def parseTopLevel0(i: Int, facade: Visitor[local38, J[): (J, Int) +// ^ definition ujson/CharParser#parseTopLevel0().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/CharParser#parseTopLevel0().(facade) +// ^^^^^^ definition ujson/CharParser#parseTopLevel0().(facade) facade: Visitor[local38, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^ reference ujson/CharParser#[J] @@ -995,24 +990,24 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ } def reject(j: Int): PartialFunction[Throwable, Nothing] = { -// ^^^^^^ definition ujson/CharParser#reject(). -// ^ definition ujson/CharParser#reject().(j) +// ^^^^^^ definition ujson/CharParser#reject(). def reject(j: Int): PartialFunction[Throwable, Nothing] +// ^ definition ujson/CharParser#reject().(j) j: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^^^^ reference scala/PartialFunction# // ^^^^^^^^^ reference scala/package.Throwable# // ^^^^^^^ reference scala/Nothing# +// definition local39 @SerialVersionUID final class $anonfun case e: Abort => -// ^ definition local21 +// ^ definition local46 e: Abort // ^^^^^ reference upickle/core/Abort# throw new AbortException(e.msg, j, -1, -1, e) // ^^^^^^^^^^^^^^ reference upickle/core/AbortException# // reference upickle/core/AbortException#``(). -// ^ reference local21 +// ^ reference local46 // ^^^ reference upickle/core/Abort#msg. // ^ reference ujson/CharParser#reject().(j) -// ^ reference local21 +// ^ reference local46 } -// reference scala/Function1#apply(). /** * Tail-recursive parsing method to do the bulk of JSON parsing. * @@ -1034,18 +1029,18 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^ reference scala/annotation/tailrec# // reference scala/annotation/tailrec#``(). protected[this] final def parseNested(state: Int, -// ^^^^^^^^^^^ definition ujson/CharParser#parseNested(). -// ^^^^^ definition ujson/CharParser#parseNested().(state) +// ^^^^^^^^^^^ definition ujson/CharParser#parseNested(). @tailrec final def parseNested(state: Int, i: Int, stackHead: ObjArrVisitor[local50, J[, stackTail: List[ObjArrVisitor[local51, J[]): (J, Int) +// ^^^^^ definition ujson/CharParser#parseNested().(state) state: Int // ^^^ reference scala/Int# i: Int, -// ^ definition ujson/CharParser#parseNested().(i) +// ^ definition ujson/CharParser#parseNested().(i) i: Int // ^^^ reference scala/Int# stackHead: ObjArrVisitor[_, J], -// ^^^^^^^^^ definition ujson/CharParser#parseNested().(stackHead) +// ^^^^^^^^^ definition ujson/CharParser#parseNested().(stackHead) stackHead: ObjArrVisitor[local50, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/CharParser#[J] stackTail: List[ObjArrVisitor[_, J]]) : (J, Int) = { -// ^^^^^^^^^ definition ujson/CharParser#parseNested().(stackTail) +// ^^^^^^^^^ definition ujson/CharParser#parseNested().(stackTail) stackTail: List[ObjArrVisitor[local51, J[] // ^^^^ reference scala/package.List# // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/CharParser#[J] @@ -1070,17 +1065,16 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^ reference ujson/CharParser#KEY. // ^^^^^^ reference ujson/CharParser#OBJBEG. val nextJ = try parseStringKey(i, stackHead) catch reject(i) -// ^^^^^ definition local22 +// ^^^^^ definition local52 nextJ: Int // ^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringKey(). // ^ reference ujson/CharParser#parseNested().(i) // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(COLON, nextJ, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^ reference ujson/CharParser#COLON. -// ^^^^^ reference local22 +// ^^^^^ reference local52 // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) @@ -1088,18 +1082,17 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^ reference ujson/CharParser#DATA. // ^^^^^^ reference ujson/CharParser#ARRBEG. val nextJ = try parseStringValue(i, stackHead) catch reject(i) -// ^^^^^ definition local23 +// ^^^^^ definition local55 nextJ: Int // ^^^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringValue(). // ^ reference ujson/CharParser#parseNested().(i) // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), nextJ, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/CharParser#collectionEndFor(). // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) -// ^^^^^ reference local23 +// ^^^^^ reference local55 // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) @@ -1133,7 +1126,7 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^ reference ujson/CharParser#parseNested().(state) // ^ reference ujson/CharParser#parseNested().(i) val ctx = -// ^^^ definition local24 +// ^^^ definition local58 ctx: ArrVisitor[local59, J[ try stackHead.subVisitor.asInstanceOf[Visitor[_, J]].visitArray(-1, i) // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). @@ -1145,14 +1138,13 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ catch reject(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(ARRBEG, i + 1, ctx, stackHead :: stackTail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^ reference ujson/CharParser#ARRBEG. // ^ reference ujson/CharParser#parseNested().(i) // ^ reference scala/Int#`+`(+4). -// ^^^ reference local24 -// ^^^^^^^^^ reference local25 +// ^^^ reference local58 +// ^^^^^^^^^ reference local62 // ^^ reference scala/collection/immutable/List#`::`(). // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) @@ -1162,7 +1154,7 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^ reference ujson/CharParser#parseNested().(state) // ^ reference ujson/CharParser#parseNested().(i) val ctx = -// ^^^ definition local27 +// ^^^ definition local63 ctx: ObjVisitor[local64, J[ try stackHead.subVisitor.asInstanceOf[Visitor[_, J]].visitObject(-1, i) // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). @@ -1174,14 +1166,13 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ catch reject(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(OBJBEG, i + 1, ctx, stackHead :: stackTail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^ reference ujson/CharParser#OBJBEG. // ^ reference ujson/CharParser#parseNested().(i) // ^ reference scala/Int#`+`(+4). -// ^^^ reference local27 -// ^^^^^^^^^ reference local28 +// ^^^ reference local63 +// ^^^^^^^^^ reference local67 // ^^ reference scala/collection/immutable/List#`::`(). // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) @@ -1191,7 +1182,7 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^ reference ujson/CharParser#parseNested().(state) // ^ reference ujson/CharParser#parseNested().(i) val ctx = -// ^^^ definition local29 +// ^^^ definition local68 ctx: Int try parseNum(i, stackHead.narrow, stackHead.subVisitor.asInstanceOf[Visitor[_, J]]) // ^^^^^^^^ reference ujson/CharParser#parseNum(). // ^ reference ujson/CharParser#parseNested().(i) @@ -1205,12 +1196,11 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ catch reject(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), ctx, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/CharParser#collectionEndFor(). // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) -// ^^^ reference local29 +// ^^^ reference local68 // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackHead) // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) @@ -1237,7 +1227,6 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ catch reject(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), i + 4, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/CharParser#collectionEndFor(). @@ -1270,7 +1259,6 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ catch reject(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), i + 5, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/CharParser#collectionEndFor(). @@ -1303,7 +1291,6 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ catch reject(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#parseNested().(i) -// reference scala/Function1#apply(). parseNested(collectionEndFor(stackHead), i + 4, stackHead, stackTail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/CharParser#collectionEndFor(). @@ -1354,21 +1341,21 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^ reference ujson/CharParser#parseNested().(i) case Some(t) => t // ^^^^ reference scala/Some. -// ^ definition local30 -// ^ reference local30 +// ^ definition local77 t: (J, Int) +// ^ reference local77 case None => // ^^^^ reference scala/None. val stackTailHead = stackTail.head -// ^^^^^^^^^^^^^ definition local31 +// ^^^^^^^^^^^^^ definition local78 stackTailHead: ObjArrVisitor[local51, J[ // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) // ^^^^ reference scala/collection/IterableOps#head(). parseNested(collectionEndFor(stackTailHead), i + 1, stackTailHead, stackTail.tail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/CharParser#collectionEndFor(). -// ^^^^^^^^^^^^^ reference local31 +// ^^^^^^^^^^^^^ reference local78 // ^ reference ujson/CharParser#parseNested().(i) // ^ reference scala/Int#`+`(+4). -// ^^^^^^^^^^^^^ reference local31 +// ^^^^^^^^^^^^^ reference local78 // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) // ^^^^ reference scala/collection/IterableOps#tail(). } @@ -1391,21 +1378,21 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^ reference ujson/CharParser#parseNested().(i) case Some(t) => t // ^^^^ reference scala/Some. -// ^ definition local32 -// ^ reference local32 +// ^ definition local79 t: (J, Int) +// ^ reference local79 case None => // ^^^^ reference scala/None. val stackTailHead = stackTail.head -// ^^^^^^^^^^^^^ definition local33 +// ^^^^^^^^^^^^^ definition local80 stackTailHead: ObjArrVisitor[local51, J[ // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) // ^^^^ reference scala/collection/IterableOps#head(). parseNested(collectionEndFor(stackTailHead), i + 1, stackTailHead, stackTail.tail) // ^^^^^^^^^^^ reference ujson/CharParser#parseNested(). // ^^^^^^^^^^^^^^^^ reference ujson/CharParser#collectionEndFor(). -// ^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^ reference local80 // ^ reference ujson/CharParser#parseNested().(i) // ^ reference scala/Int#`+`(+4). -// ^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^ reference local80 // ^^^^^^^^^ reference ujson/CharParser#parseNested().(stackTail) // ^^^^ reference scala/collection/IterableOps#tail(). } @@ -1424,13 +1411,13 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ def dieWithFailureMessage(i: Int, state: Int) = { -// ^^^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#dieWithFailureMessage(). -// ^ definition ujson/CharParser#dieWithFailureMessage().(i) +// ^^^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#dieWithFailureMessage(). def dieWithFailureMessage(i: Int, state: Int): Nothing +// ^ definition ujson/CharParser#dieWithFailureMessage().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/CharParser#dieWithFailureMessage().(state) +// ^^^^^ definition ujson/CharParser#dieWithFailureMessage().(state) state: Int // ^^^ reference scala/Int# val expected = state match{ -// ^^^^^^^^ definition local34 +// ^^^^^^^^ definition local81 expected: String // ^^^^^ reference ujson/CharParser#dieWithFailureMessage().(state) case ARRBEG => "json value or ]" // ^^^^^^ reference ujson/CharParser#ARRBEG. @@ -1450,16 +1437,15 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ die(i, s"expected $expected") // ^^^ reference ujson/CharParser#die(). // ^ reference ujson/CharParser#dieWithFailureMessage().(i) -// reference scala/StringContext.apply(). // ^ reference scala/StringContext#s(). -// ^^^^^^^^ reference local34 +// ^^^^^^^^ reference local81 } def failIfNotData(state: Int, i: Int) = (state: @switch) match{ -// ^^^^^^^^^^^^^ definition ujson/CharParser#failIfNotData(). -// ^^^^^ definition ujson/CharParser#failIfNotData().(state) +// ^^^^^^^^^^^^^ definition ujson/CharParser#failIfNotData(). def failIfNotData(state: Int, i: Int): Unit +// ^^^^^ definition ujson/CharParser#failIfNotData().(state) state: Int // ^^^ reference scala/Int# -// ^ definition ujson/CharParser#failIfNotData().(i) +// ^ definition ujson/CharParser#failIfNotData().(i) i: Int // ^^^ reference scala/Int# // ^^^^^ reference ujson/CharParser#failIfNotData().(state) case DATA | ARRBEG => // do nothing @@ -1472,39 +1458,36 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ } def tryCloseCollection(stackHead: ObjArrVisitor[_, J], stackTail: List[ObjArrVisitor[_, J]], i: Int) = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#tryCloseCollection(). -// ^^^^^^^^^ definition ujson/CharParser#tryCloseCollection().(stackHead) +// ^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#tryCloseCollection(). def tryCloseCollection(stackHead: ObjArrVisitor[local82, J[, stackTail: List[ObjArrVisitor[local83, J[], i: Int): Option[(J, Int)] +// ^^^^^^^^^ definition ujson/CharParser#tryCloseCollection().(stackHead) stackHead: ObjArrVisitor[local82, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/CharParser#[J] -// ^^^^^^^^^ definition ujson/CharParser#tryCloseCollection().(stackTail) +// ^^^^^^^^^ definition ujson/CharParser#tryCloseCollection().(stackTail) stackTail: List[ObjArrVisitor[local83, J[] // ^^^^ reference scala/package.List# // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/CharParser#[J] -// ^ definition ujson/CharParser#tryCloseCollection().(i) +// ^ definition ujson/CharParser#tryCloseCollection().(i) i: Int // ^^^ reference scala/Int# if (stackTail.isEmpty) { // ^^^^^^^^^ reference ujson/CharParser#tryCloseCollection().(stackTail) // ^^^^^^^ reference scala/collection/immutable/List#isEmpty(). Some(try stackHead.visitEnd(i) catch reject(i), i + 1) // ^^^^ reference scala/Some. -// reference scala/Some.apply(). // ^^^^^^^^^ reference ujson/CharParser#tryCloseCollection().(stackHead) // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). // ^ reference ujson/CharParser#tryCloseCollection().(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#tryCloseCollection().(i) -// reference scala/Function1#apply(). // ^ reference ujson/CharParser#tryCloseCollection().(i) // ^ reference scala/Int#`+`(+4). -// reference scala/Tuple2.apply(). } else { val ctxt2 = stackTail.head.narrow -// ^^^^^ definition local35 +// ^^^^^ definition local86 ctxt2: ObjArrVisitor[Any, J] // ^^^^^^^^^ reference ujson/CharParser#tryCloseCollection().(stackTail) // ^^^^ reference scala/collection/IterableOps#head(). // ^^^^^^ reference upickle/core/ObjArrVisitor#narrow(). try ctxt2.visitValue(stackHead.visitEnd(i), i) catch reject(i) -// ^^^^^ reference local35 +// ^^^^^ reference local86 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^ reference ujson/CharParser#tryCloseCollection().(stackHead) // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). @@ -1512,15 +1495,14 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^ reference ujson/CharParser#tryCloseCollection().(i) // ^^^^^^ reference ujson/CharParser#reject(). // ^ reference ujson/CharParser#tryCloseCollection().(i) -// reference scala/Function1#apply(). None // ^^^^ reference scala/None. } } def collectionEndFor(stackHead: ObjArrVisitor[_, _]) = { -// ^^^^^^^^^^^^^^^^ definition ujson/CharParser#collectionEndFor(). -// ^^^^^^^^^ definition ujson/CharParser#collectionEndFor().(stackHead) +// ^^^^^^^^^^^^^^^^ definition ujson/CharParser#collectionEndFor(). def collectionEndFor(stackHead: ObjArrVisitor[local89, local90[): Int +// ^^^^^^^^^ definition ujson/CharParser#collectionEndFor().(stackHead) stackHead: ObjArrVisitor[local89, local90[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# if (stackHead.isObj) OBJEND // ^^^^^^^^^ reference ujson/CharParser#collectionEndFor().(stackHead) @@ -1538,50 +1520,49 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * chars. */ protected[this] final def parseStringSimple(i: Int): Int = { -// ^^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringSimple(). -// ^ definition ujson/CharParser#parseStringSimple().(i) +// ^^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringSimple(). final def parseStringSimple(i: Int): Int +// ^ definition ujson/CharParser#parseStringSimple().(i) i: Int // ^^^ reference scala/Int# // ^^^ reference scala/Int# var j = i -// ^ definition local36 +// ^ definition local91 j: Int // ^ reference ujson/CharParser#parseStringSimple().(i) var c = elemOps.toUnsignedInt(getCharSafe(j)) -// ^ definition local37 +// ^ definition local92 c: Int // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^^^^^^^^ reference upickle/core/CharOps.toUnsignedInt(). // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local36 +// ^ reference local91 while (c != '"') { -// ^ reference local37 +// ^ reference local92 // ^^ reference scala/Int#`!=`(+2). if (c < ' ') die(j, s"control char (${c}) in string") -// ^ reference local37 +// ^ reference local92 // ^ reference scala/Int#`<`(+2). // ^^^ reference ujson/CharParser#die(). -// ^ reference local36 -// reference scala/StringContext.apply(). +// ^ reference local91 // ^ reference scala/StringContext#s(). -// ^ reference local37 +// ^ reference local92 if (c == '\\' || c > 127) return -1 - j -// ^ reference local37 +// ^ reference local92 // ^^ reference scala/Int#`==`(+2). // ^^ reference scala/Boolean#`||`(). -// ^ reference local37 +// ^ reference local92 // ^ reference scala/Int#`>`(+3). // ^ reference scala/Int#`-`(+3). -// ^ reference local36 +// ^ reference local91 j += 1 -// ^ reference local36 +// ^ reference local91 // ^^ reference scala/Int#`+`(+4). c = elemOps.toUnsignedInt(getCharSafe(j)) -// ^ reference local37 +// ^ reference local92 // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^^^^^^^^ reference upickle/core/CharOps.toUnsignedInt(). // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local36 +// ^ reference local91 } j + 1 -// ^ reference local36 +// ^ reference local91 // ^ reference scala/Int#`+`(+4). } @@ -1589,101 +1570,99 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * Parse a string that is known to have escape sequences. */ protected[this] final def parseStringComplex(i0: Int): Int = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringComplex(). -// ^^ definition ujson/CharParser#parseStringComplex().(i0) +// ^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringComplex(). final def parseStringComplex(i0: Int): Int +// ^^ definition ujson/CharParser#parseStringComplex().(i0) i0: Int // ^^^ reference scala/Int# // ^^^ reference scala/Int# var i = i0 -// ^ definition local38 +// ^ definition local94 i: Int // ^^ reference ujson/CharParser#parseStringComplex().(i0) var c = elemOps.toUnsignedInt(getCharSafe(i)) -// ^ definition local39 +// ^ definition local95 c: Int // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^^^^^^^^ reference upickle/core/CharOps.toUnsignedInt(). // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local38 +// ^ reference local94 while (c != '"') { -// ^ reference local39 +// ^ reference local95 // ^^ reference scala/Int#`!=`(+2). if (c < ' ') die(i, s"control char (${c}) in string") -// ^ reference local39 +// ^ reference local95 // ^ reference scala/Int#`<`(+2). // ^^^ reference ujson/CharParser#die(). -// ^ reference local38 -// reference scala/StringContext.apply(). +// ^ reference local94 // ^ reference scala/StringContext#s(). -// ^ reference local39 +// ^ reference local95 else if (c == '\\') { -// ^ reference local39 +// ^ reference local95 // ^^ reference scala/Int#`==`(+2). (getCharSafe(i + 1): @switch) match { // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local38 +// ^ reference local94 // ^ reference scala/Int#`+`(+4). case 'b' => { outputBuilder.append('\b'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(+1). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case 'f' => { outputBuilder.append('\f'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(+1). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case 'n' => { outputBuilder.append('\n'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(+1). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case 'r' => { outputBuilder.append('\r'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(+1). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case 't' => { outputBuilder.append('\t'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(+1). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case '"' => { outputBuilder.append('"'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(+1). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case '/' => { outputBuilder.append('/'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(+1). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case '\\' => { outputBuilder.append('\\'); i += 2 } // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(+1). -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). // if there's a problem then descape will explode case 'u' => val d = descape(i) -// ^ definition local40 +// ^ definition local97 d: Char // ^^^^^^^ reference ujson/CharParser#descape(). -// ^ reference local38 +// ^ reference local94 outputBuilder.appendC(d) // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^^ reference upickle/core/CharAppendC#appendC(). -// ^ reference local40 +// ^ reference local97 i += 6 -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). case c => die(i + 1, s"illegal escape sequence after \\") -// ^ definition local41 +// ^ definition local98 c: Char // ^^^ reference ujson/CharParser#die(). -// ^ reference local38 +// ^ reference local94 // ^ reference scala/Int#`+`(+4). -// reference scala/StringContext.apply(). // ^ reference scala/StringContext#s(). } } else { @@ -1695,21 +1674,21 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ outputBuilder.append(c) // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^ reference upickle/core/CharBuilder#append(). -// ^ reference local39 +// ^ reference local95 i += 1 -// ^ reference local38 +// ^ reference local94 // ^^ reference scala/Int#`+`(+4). } c = elemOps.toUnsignedInt(getCharSafe(i)) -// ^ reference local39 +// ^ reference local95 // ^^^^^^^ reference ujson/CharParser#elemOps. // ^^^^^^^^^^^^^ reference upickle/core/CharOps.toUnsignedInt(). // ^^^^^^^^^^^ reference ujson/CharParser#getCharSafe(). -// ^ reference local38 +// ^ reference local94 } i + 1 -// ^ reference local38 +// ^ reference local94 // ^ reference scala/Int#`+`(+4). } @@ -1722,21 +1701,21 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ * interpret a multi-char code point incorrectly. */ protected[this] final def parseStringValue(i: Int, stackHead: ObjArrVisitor[_, J]): Int = { -// ^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringValue(). -// ^ definition ujson/CharParser#parseStringValue().(i) +// ^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringValue(). final def parseStringValue(i: Int, stackHead: ObjArrVisitor[local99, J[): Int +// ^ definition ujson/CharParser#parseStringValue().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^^^^ definition ujson/CharParser#parseStringValue().(stackHead) +// ^^^^^^^^^ definition ujson/CharParser#parseStringValue().(stackHead) stackHead: ObjArrVisitor[local99, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/CharParser#[J] // ^^^ reference scala/Int# val k = parseStringSimple(i + 1) -// ^ definition local42 +// ^ definition local100 k: Int // ^^^^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringSimple(). // ^ reference ujson/CharParser#parseStringValue().(i) // ^ reference scala/Int#`+`(+4). if (k >= 0) { -// ^ reference local42 +// ^ reference local100 // ^^ reference scala/Int#`>=`(+3). visitString(i, unsafeCharSeqForRange(i + 1, k - i - 2), stackHead) // ^^^^^^^^^^^ reference ujson/CharParser#visitString(). @@ -1744,19 +1723,19 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingCharParser#unsafeCharSeqForRange(). // ^ reference ujson/CharParser#parseStringValue().(i) // ^ reference scala/Int#`+`(+4). -// ^ reference local42 +// ^ reference local100 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseStringValue().(i) // ^ reference scala/Int#`-`(+3). // ^^^^^^^^^ reference ujson/CharParser#parseStringValue().(stackHead) k -// ^ reference local42 +// ^ reference local100 } else { val k2 = parseStringToOutputBuilder(i, k) -// ^^ definition local43 +// ^^ definition local101 k2: Int // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringToOutputBuilder(). // ^ reference ujson/CharParser#parseStringValue().(i) -// ^ reference local42 +// ^ reference local100 visitString(i, outputBuilder.makeString(), stackHead) // ^^^^^^^^^^^ reference ujson/CharParser#visitString(). // ^ reference ujson/CharParser#parseStringValue().(i) @@ -1764,26 +1743,26 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^^^^ reference upickle/core/CharBuilder#makeString(). // ^^^^^^^^^ reference ujson/CharParser#parseStringValue().(stackHead) k2 -// ^^ reference local43 +// ^^ reference local101 } } protected[this] final def parseStringKey(i: Int, stackHead: ObjArrVisitor[_, J]): Int = { -// ^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringKey(). -// ^ definition ujson/CharParser#parseStringKey().(i) +// ^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringKey(). final def parseStringKey(i: Int, stackHead: ObjArrVisitor[local102, J[): Int +// ^ definition ujson/CharParser#parseStringKey().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^^^^ definition ujson/CharParser#parseStringKey().(stackHead) +// ^^^^^^^^^ definition ujson/CharParser#parseStringKey().(stackHead) stackHead: ObjArrVisitor[local102, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/CharParser#[J] // ^^^ reference scala/Int# val k = parseStringSimple(i + 1) -// ^ definition local44 +// ^ definition local103 k: Int // ^^^^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringSimple(). // ^ reference ujson/CharParser#parseStringKey().(i) // ^ reference scala/Int#`+`(+4). if (k >= 0) { -// ^ reference local44 +// ^ reference local103 // ^^ reference scala/Int#`>=`(+3). visitStringKey(i, unsafeCharSeqForRange(i + 1, k - i - 2), stackHead) // ^^^^^^^^^^^^^^ reference ujson/CharParser#visitStringKey(). @@ -1791,19 +1770,19 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingCharParser#unsafeCharSeqForRange(). // ^ reference ujson/CharParser#parseStringKey().(i) // ^ reference scala/Int#`+`(+4). -// ^ reference local44 +// ^ reference local103 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseStringKey().(i) // ^ reference scala/Int#`-`(+3). // ^^^^^^^^^ reference ujson/CharParser#parseStringKey().(stackHead) k -// ^ reference local44 +// ^ reference local103 } else { val k2 = parseStringToOutputBuilder(i, k) -// ^^ definition local45 +// ^^ definition local104 k2: Int // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringToOutputBuilder(). // ^ reference ujson/CharParser#parseStringKey().(i) -// ^ reference local44 +// ^ reference local103 visitStringKey(i, outputBuilder.makeString(), stackHead) // ^^^^^^^^^^^^^^ reference ujson/CharParser#visitStringKey(). // ^ reference ujson/CharParser#parseStringKey().(i) @@ -1811,16 +1790,16 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^^^^ reference upickle/core/CharBuilder#makeString(). // ^^^^^^^^^ reference ujson/CharParser#parseStringKey().(stackHead) k2 -// ^^ reference local45 +// ^^ reference local104 } } def parseStringToOutputBuilder(i: Int, k: Int) = { -// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringToOutputBuilder(). -// ^ definition ujson/CharParser#parseStringToOutputBuilder().(i) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringToOutputBuilder(). def parseStringToOutputBuilder(i: Int, k: Int): Int +// ^ definition ujson/CharParser#parseStringToOutputBuilder().(i) i: Int // ^^^ reference scala/Int# -// ^ definition ujson/CharParser#parseStringToOutputBuilder().(k) +// ^ definition ujson/CharParser#parseStringToOutputBuilder().(k) k: Int // ^^^ reference scala/Int# outputBuilder.reset() // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. @@ -1836,26 +1815,26 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseStringToOutputBuilder().(i) val k2 = parseStringComplex(-k - 1) -// ^^ definition local46 +// ^^ definition local105 k2: Int // ^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringComplex(). // ^ reference scala/Int#`unary_-`(). // ^ reference ujson/CharParser#parseStringToOutputBuilder().(k) // ^ reference scala/Int#`-`(+3). k2 -// ^^ reference local46 +// ^^ reference local105 } def visitString(i: Int, s: CharSequence, stackHead: ObjArrVisitor[_, J]) = { -// ^^^^^^^^^^^ definition ujson/CharParser#visitString(). -// ^ definition ujson/CharParser#visitString().(i) +// ^^^^^^^^^^^ definition ujson/CharParser#visitString(). def visitString(i: Int, s: CharSequence, stackHead: ObjArrVisitor[local106, J[): Unit +// ^ definition ujson/CharParser#visitString().(i) i: Int // ^^^ reference scala/Int# -// ^ definition ujson/CharParser#visitString().(s) +// ^ definition ujson/CharParser#visitString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^^ definition ujson/CharParser#visitString().(stackHead) +// ^^^^^^^^^ definition ujson/CharParser#visitString().(stackHead) stackHead: ObjArrVisitor[local106, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/CharParser#[J] val v = stackHead.subVisitor.visitString(s, i) -// ^ definition local47 +// ^ definition local107 v: Any // ^^^^^^^^^ reference ujson/CharParser#visitString().(stackHead) // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). @@ -1865,33 +1844,33 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ // ^^^^^^^^^ reference ujson/CharParser#visitString().(stackHead) // ^^^^^^ reference upickle/core/ObjArrVisitor#narrow(). // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). -// ^ reference local47 +// ^ reference local107 // ^ reference ujson/CharParser#visitString().(i) } def visitStringKey(i: Int, s: CharSequence, stackHead: ObjArrVisitor[_, J]) = { -// ^^^^^^^^^^^^^^ definition ujson/CharParser#visitStringKey(). -// ^ definition ujson/CharParser#visitStringKey().(i) +// ^^^^^^^^^^^^^^ definition ujson/CharParser#visitStringKey(). def visitStringKey(i: Int, s: CharSequence, stackHead: ObjArrVisitor[local108, J[): Unit +// ^ definition ujson/CharParser#visitStringKey().(i) i: Int // ^^^ reference scala/Int# -// ^ definition ujson/CharParser#visitStringKey().(s) +// ^ definition ujson/CharParser#visitStringKey().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^^ definition ujson/CharParser#visitStringKey().(stackHead) +// ^^^^^^^^^ definition ujson/CharParser#visitStringKey().(stackHead) stackHead: ObjArrVisitor[local108, J[ // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# // ^ reference ujson/CharParser#[J] val obj = stackHead.asInstanceOf[ObjVisitor[Any, _]] -// ^^^ definition local48 +// ^^^ definition local109 obj: ObjVisitor[Any, Any] // ^^^^^^^^^ reference ujson/CharParser#visitStringKey().(stackHead) // ^^^^^^^^^^^^ reference scala/Any#asInstanceOf(). // ^^^^^^^^^^ reference upickle/core/ObjVisitor# // ^^^ reference scala/Any# val keyVisitor = obj.visitKey(i) -// ^^^^^^^^^^ definition local49 -// ^^^ reference local48 +// ^^^^^^^^^^ definition local110 keyVisitor: Visitor[local111, Any[ +// ^^^ reference local109 // ^^^^^^^^ reference upickle/core/ObjVisitor#visitKey(). // ^ reference ujson/CharParser#visitStringKey().(i) obj.visitKeyValue(keyVisitor.visitString(s, i)) -// ^^^ reference local48 +// ^^^ reference local109 // ^^^^^^^^^^^^^ reference upickle/core/ObjVisitor#visitKeyValue(). -// ^^^^^^^^^^ reference local49 +// ^^^^^^^^^^ reference local110 // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). // ^ reference ujson/CharParser#visitStringKey().(s) // ^ reference ujson/CharParser#visitStringKey().(i) @@ -1899,54 +1878,54 @@ abstract class CharParser[J] extends upickle.core.BufferingCharParser{ protected[this] final def parseStringTopLevel(i: Int, facade: Visitor[_, J]): (J, Int) = { -// ^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringTopLevel(). -// ^ definition ujson/CharParser#parseStringTopLevel().(i) +// ^^^^^^^^^^^^^^^^^^^ definition ujson/CharParser#parseStringTopLevel(). final def parseStringTopLevel(i: Int, facade: Visitor[local112, J[): (J, Int) +// ^ definition ujson/CharParser#parseStringTopLevel().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/CharParser#parseStringTopLevel().(facade) +// ^^^^^^ definition ujson/CharParser#parseStringTopLevel().(facade) facade: Visitor[local112, J[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharParser#[J] // ^ reference ujson/CharParser#[J] // ^^^ reference scala/Int# val k = parseStringSimple(i + 1) -// ^ definition local50 +// ^ definition local113 k: Int // ^^^^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringSimple(). // ^ reference ujson/CharParser#parseStringTopLevel().(i) // ^ reference scala/Int#`+`(+4). if (k >= 0) { -// ^ reference local50 +// ^ reference local113 // ^^ reference scala/Int#`>=`(+3). val res = facade.visitString(unsafeCharSeqForRange(i + 1, k - i - 2), i) -// ^^^ definition local51 +// ^^^ definition local114 res: J // ^^^^^^ reference ujson/CharParser#parseStringTopLevel().(facade) // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). // ^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingCharParser#unsafeCharSeqForRange(). // ^ reference ujson/CharParser#parseStringTopLevel().(i) // ^ reference scala/Int#`+`(+4). -// ^ reference local50 +// ^ reference local113 // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseStringTopLevel().(i) // ^ reference scala/Int#`-`(+3). // ^ reference ujson/CharParser#parseStringTopLevel().(i) (res, k) -// ^^^ reference local51 -// ^ reference local50 +// ^^^ reference local114 +// ^ reference local113 } else { val k2 = parseStringToOutputBuilder(i, k) -// ^^ definition local52 +// ^^ definition local115 k2: Int // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference ujson/CharParser#parseStringToOutputBuilder(). // ^ reference ujson/CharParser#parseStringTopLevel().(i) -// ^ reference local50 +// ^ reference local113 val res = facade.visitString(outputBuilder.makeString(), i) -// ^^^ definition local53 +// ^^^ definition local116 res: J // ^^^^^^ reference ujson/CharParser#parseStringTopLevel().(facade) // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). // ^^^^^^^^^^^^^ reference ujson/CharParser#outputBuilder. // ^^^^^^^^^^ reference upickle/core/CharBuilder#makeString(). // ^ reference ujson/CharParser#parseStringTopLevel().(i) (res, k2) -// ^^^ reference local53 -// ^^ reference local52 +// ^^^ reference local116 +// ^^ reference local115 } } } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ActivityRecyclerPool.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ActivityRecyclerPool.kt new file mode 100644 index 00000000..fd1efdc0 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ActivityRecyclerPool.kt @@ -0,0 +1,248 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper +import android.os.Build +import androidx.core.view.ViewCompat +// ^^^^^^^^ reference androidx/ +import androidx.lifecycle.Lifecycle +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^ reference androidx/lifecycle/ +// ^^^^^^^^^ reference androidx/lifecycle/Lifecycle# +import androidx.lifecycle.LifecycleObserver +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^ reference androidx/lifecycle/ +// ^^^^^^^^^^^^^^^^^ reference androidx/lifecycle/LifecycleObserver# +import androidx.lifecycle.LifecycleOwner +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^ reference androidx/lifecycle/ +// ^^^^^^^^^^^^^^ reference androidx/lifecycle/LifecycleOwner# +import androidx.lifecycle.OnLifecycleEvent +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^ reference androidx/lifecycle/ +// ^^^^^^^^^^^^^^^^ reference androidx/lifecycle/OnLifecycleEvent# +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ +import java.lang.ref.WeakReference +// ^^^^ reference java/ +// ^^^^ reference java/lang/ +// ^^^ reference java/lang/ref/ +// ^^^^^^^^^^^^^ reference java/lang/ref/WeakReference# +import java.util.ArrayList +// ^^^^ reference java/ +// ^^^^ reference java/util/ +// ^^^^^^^^^ reference java/util/ArrayList# + +internal class ActivityRecyclerPool { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool# +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#``(). + + /** + * Store one unique pool per activity. They are cleared out when activities are destroyed, so this + * only needs to hold pools for active activities. + */ + private val pools = ArrayList(5) +// ^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#pools. +// ^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#getPools(). +// ^^^^^^^^^ reference java/util/ArrayList#``(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/PoolReference# + + @JvmOverloads +// ^^^^^^^^^^^^ reference kotlin/jvm/JvmOverloads#``(). + fun getPool( +// ^^^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#getPool(). + context: Context, +// ^^^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#getPool().(context) + poolFactory: () -> RecyclerView.RecycledViewPool +// ^^^^^^^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#getPool().(poolFactory) + ): PoolReference { +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/PoolReference# + + val iterator = pools.iterator() +// ^^^^^^^^ definition local0 +// ^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#pools. +// ^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#getPools(). +// ^^^^^^^^ reference java/util/ArrayList#iterator(). + var poolToUse: PoolReference? = null +// ^^^^^^^^^ definition local1 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/PoolReference# + + while (iterator.hasNext()) { +// ^^^^^^^^ reference local0 +// ^^^^^^^ reference kotlin/collections/MutableIterator#hasNext(). + val poolReference = iterator.next() +// ^^^^^^^^^^^^^ definition local2 +// ^^^^^^^^ reference local0 +// ^^^^ reference kotlin/collections/MutableIterator#next(). + when { + poolReference.context === context -> { +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^ reference com/airbnb/epoxy/PoolReference#context. +// ^^^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#getPool().(context) + if (poolToUse != null) { +// ^^^^^^^^^ reference local1 +// ^^ reference com/airbnb/epoxy/PoolReference#equals(+-1). + throw IllegalStateException("A pool was already found") +// ^^^^^^^^^^^^^^^^^^^^^ reference kotlin/IllegalStateException#``(+1). + } + poolToUse = poolReference +// ^^^^^^^^^ reference local1 +// ^^^^^^^^^^^^^ reference local2 + // finish iterating to remove any old contexts + } + poolReference.context.isActivityDestroyed() -> { +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^ reference com/airbnb/epoxy/PoolReference#context. + // A pool from a different activity that was destroyed. + // Clear the pool references to allow the activity to be GC'd + poolReference.viewPool.clear() +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^ reference com/airbnb/epoxy/PoolReference#viewPool. +// ^^^^^^^^ reference com/airbnb/epoxy/PoolReference#getViewPool(). + iterator.remove() +// ^^^^^^^^ reference local0 +// ^^^^^^ reference kotlin/collections/MutableIterator#remove(). + } + } + } + + if (poolToUse == null) { +// ^^^^^^^^^ reference local1 +// ^^ reference com/airbnb/epoxy/PoolReference#equals(+-1). + poolToUse = PoolReference(context, poolFactory(), this) +// ^^^^^^^^^ reference local1 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/PoolReference#``(). +// ^^^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#getPool().(context) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#getPool().(poolFactory) +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool# + context.lifecycle()?.addObserver(poolToUse) +// ^^^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#getPool().(context) +// ^^^^^^^^^ reference local1 + pools.add(poolToUse) +// ^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#pools. +// ^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#getPools(). +// ^^^ reference java/util/ArrayList#add(+1). +// ^^^^^^^^^ reference local1 + } + + return poolToUse +// ^^^^^^^^^ reference local1 + } + + fun clearIfDestroyed(pool: PoolReference) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#clearIfDestroyed(). +// ^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#clearIfDestroyed().(pool) +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/PoolReference# + if (pool.context.isActivityDestroyed()) { +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#clearIfDestroyed().(pool) +// ^^^^^^^ reference com/airbnb/epoxy/PoolReference#context. + pool.viewPool.clear() +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#clearIfDestroyed().(pool) +// ^^^^^^^^ reference com/airbnb/epoxy/PoolReference#viewPool. +// ^^^^^^^^ reference com/airbnb/epoxy/PoolReference#getViewPool(). + pools.remove(pool) +// ^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#pools. +// ^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#getPools(). +// ^^^^^^ reference java/util/ArrayList#remove(). +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#clearIfDestroyed().(pool) + } + } + + private fun Context.lifecycle(): Lifecycle? { +// ^^^^^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPool#lifecycle(). +// ^^^^^^^^^ reference androidx/lifecycle/Lifecycle# + if (this is LifecycleOwner) { +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#lifecycle(). +// ^^^^^^^^^^^^^^ reference androidx/lifecycle/LifecycleOwner# + return lifecycle + } + + if (this is ContextWrapper) { +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#lifecycle(). + return baseContext.lifecycle() + } + + return null + } +} + +internal class PoolReference( +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/PoolReference# +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/PoolReference#``(). + context: Context, +// ^^^^^^^ definition com/airbnb/epoxy/PoolReference#``().(context) + val viewPool: RecyclerView.RecycledViewPool, +// ^^^^^^^^ definition com/airbnb/epoxy/PoolReference#viewPool. +// ^^^^^^^^ definition com/airbnb/epoxy/PoolReference#getViewPool(). +// ^^^^^^^^ definition com/airbnb/epoxy/PoolReference#``().(viewPool) + private val parent: ActivityRecyclerPool +// ^^^^^^ definition com/airbnb/epoxy/PoolReference#parent. +// ^^^^^^ definition com/airbnb/epoxy/PoolReference#getParent(). +// ^^^^^^ definition com/airbnb/epoxy/PoolReference#``().(parent) +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool# +) : LifecycleObserver { +// ^^^^^^^^^^^^^^^^^ reference androidx/lifecycle/LifecycleObserver# + private val contextReference: WeakReference = WeakReference(context) +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PoolReference#contextReference. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PoolReference#getContextReference(). +// ^^^^^^^^^^^^^ reference java/lang/ref/WeakReference# +// ^^^^^^^^^^^^^ reference java/lang/ref/WeakReference#``(). +// ^^^^^^^ reference com/airbnb/epoxy/PoolReference#``().(context) + + val context: Context? get() = contextReference.get() +// ^^^^^^^ definition com/airbnb/epoxy/PoolReference#context. +// ^^^ definition com/airbnb/epoxy/PoolReference#getContext(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/PoolReference#contextReference. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/PoolReference#getContextReference(). +// ^^^ reference java/lang/ref/WeakReference#get(). + + fun clearIfDestroyed() { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PoolReference#clearIfDestroyed(). + parent.clearIfDestroyed(this) +// ^^^^^^ reference com/airbnb/epoxy/PoolReference#parent. +// ^^^^^^ reference com/airbnb/epoxy/PoolReference#getParent(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#clearIfDestroyed(). +// ^^^^ reference com/airbnb/epoxy/PoolReference# + } + + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) +// ^^^^^^^^^^^^^^^^ reference androidx/lifecycle/OnLifecycleEvent#``(). +// ^^^^^^^^^ reference androidx/lifecycle/Lifecycle# +// ^^^^^ reference androidx/lifecycle/Lifecycle#Event# +// ^^^^^^^^^^ reference androidx/lifecycle/Lifecycle#Event#ON_DESTROY# + fun onContextDestroyed() { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PoolReference#onContextDestroyed(). + clearIfDestroyed() +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/PoolReference#clearIfDestroyed(). + } +} + +internal fun Context?.isActivityDestroyed(): Boolean { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ActivityRecyclerPoolKt#isActivityDestroyed(). +// ^^^^^^^ reference kotlin/Boolean# + if (this == null) { +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPoolKt#isActivityDestroyed(). + return true + } + + if (this !is Activity) { +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPoolKt#isActivityDestroyed(). + return (this as? ContextWrapper)?.baseContext?.isActivityDestroyed() ?: false +// ^^^^ reference com/airbnb/epoxy/ActivityRecyclerPoolKt#isActivityDestroyed(). + } + + if (isFinishing) { + return true + } + + return if (Build.VERSION.SDK_INT >= 17) { + isDestroyed + } else { + // Use this as a proxy for being destroyed on older devices + !ViewCompat.isAttachedToWindow(window.decorView) + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/AfterPropsSet.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/AfterPropsSet.java deleted file mode 100644 index b0289b77..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/AfterPropsSet.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * This can be used to annotate methods inside classes with a {@link com.airbnb.epoxy.ModelView} - * annotation. Methods with this annotation will be called after a view instance is bound to a - * model and all model props have been set. This is useful if you need to wait until multiple props - * are set before doing certain initialization. - *

- * Methods with this annotation will be called after both the initial bind when the view comes on - * screen, and after partial binds when an onscreen view is updated. - */ -@Target(ElementType.METHOD) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^^ reference java/lang/annotation/ElementType#METHOD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface AfterPropsSet { -// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/AfterPropsSet# @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) public @interface AfterPropsSet -} - diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/AutoModel.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/AutoModel.java deleted file mode 100644 index 66e646d6..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/AutoModel.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * Used to annotate model fields in an EpoxyController. Model fields annotated with this should not - * be assigned a value directly; a model will automatically be created for them. A stable ID will - * also be generated and assigned to the model. This ID will be the same across all instances of the - * adapter, so it can be used for saving state of a model. - */ -@Target(ElementType.FIELD) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^ reference java/lang/annotation/ElementType#FIELD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface AutoModel { -// ^^^^^^^^^ definition com/airbnb/epoxy/AutoModel# @Target(ElementType.FIELD) @Retention(RetentionPolicy.CLASS) public @interface AutoModel - -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/BaseEpoxyAdapter.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/BaseEpoxyAdapter.java index a2439e1d..163c39a8 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/BaseEpoxyAdapter.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/BaseEpoxyAdapter.java @@ -95,25 +95,13 @@ public abstract class BaseEpoxyAdapter private final SpanSizeLookup spanSizeLookup = new SpanSizeLookup() { // ^^^^^^^^^^^^^^ reference _root_/ // ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#spanSizeLookup. private final unresolved_type spanSizeLookup -// ^^^^^^^^^^^^^^ reference _root_/ @Override -// ^^^^^^^^ reference java/lang/Override# public int getSpanSize(int position) { -// ^^^^^^^^^^^ definition local1 @Override public int getSpanSize(int position) -// ^^^^^^^^ definition local2 int position try { return getModelForPosition(position) -// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getModelForPosition(). -// ^^^^^^^^ reference local2 .spanSize(spanCount, position, getItemCount()); -// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#spanSize(). -// ^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#spanCount. -// ^^^^^^^^ reference local2 -// ^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getItemCount(). } catch (IndexOutOfBoundsException e) { -// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference java/lang/IndexOutOfBoundsException# -// ^ definition local3 IndexOutOfBoundsException e // There seems to be a GridLayoutManager bug where when the user is in accessibility mode // it incorrectly uses an outdated view position // when calling this method. This crashes when a view is animating out, when it is @@ -122,8 +110,6 @@ public int getSpanSize(int position) { // library fixes this // TODO: (eli_hart 8/23/16) Figure out if this has been fixed in new support library onExceptionSwallowed(e); -// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#onExceptionSwallowed(). -// ^ reference local3 return 1; } } @@ -147,7 +133,7 @@ public BaseEpoxyAdapter() { protected void onExceptionSwallowed(RuntimeException exception) { // ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onExceptionSwallowed(). protected void onExceptionSwallowed(RuntimeException exception) // ^^^^^^^^^^^^^^^^ reference java/lang/RuntimeException# -// ^^^^^^^^^ definition local4 RuntimeException exception +// ^^^^^^^^^ definition local0 RuntimeException exception } @@ -177,14 +163,14 @@ public boolean isEmpty() { // ^^^^^^^^ reference java/lang/Override# public long getItemId(int position) { // ^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#getItemId(). @Override public long getItemId(int position) -// ^^^^^^^^ definition local5 int position +// ^^^^^^^^ definition local1 int position // This does not call getModelForPosition so that we don't use the id of the empty model when // hidden, // so that the id stays constant when gone vs shown return getCurrentModels().get(position).id(); // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getCurrentModels(). // ^^^ reference java/util/List#get(). -// ^^^^^^^^ reference local5 +// ^^^^^^^^ reference local1 // ^^ reference com/airbnb/epoxy/EpoxyModel#id(). } @@ -192,12 +178,12 @@ public long getItemId(int position) { // ^^^^^^^^ reference java/lang/Override# public int getItemViewType(int position) { // ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#getItemViewType(). @Override public int getItemViewType(int position) -// ^^^^^^^^ definition local6 int position +// ^^^^^^^^ definition local2 int position return viewTypeManager.getViewTypeAndRememberModel(getModelForPosition(position)); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#viewTypeManager. // ^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewTypeManager#getViewTypeAndRememberModel(). // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getModelForPosition(). -// ^^^^^^^^ reference local6 +// ^^^^^^^^ reference local2 } @Override @@ -206,25 +192,25 @@ public EpoxyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# // ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onCreateViewHolder(). @Override public EpoxyViewHolder onCreateViewHolder(unresolved_type parent, int viewType) // ^^^^^^^^^ reference _root_/ -// ^^^^^^ definition local7 unresolved_type parent -// ^^^^^^^^ definition local8 int viewType +// ^^^^^^ definition local3 unresolved_type parent +// ^^^^^^^^ definition local4 int viewType EpoxyModel model = viewTypeManager.getModelForViewType(this, viewType); // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^ definition local9 EpoxyModel model +// ^^^^^ definition local5 EpoxyModel model // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#viewTypeManager. // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewTypeManager#getModelForViewType(). -// ^^^^^^^^ reference local8 +// ^^^^^^^^ reference local4 View view = model.buildView(parent); // ^^^^ reference _root_/ -// ^^^^ definition local10 unresolved_type view -// ^^^^^ reference local9 +// ^^^^ definition local6 unresolved_type view +// ^^^^^ reference local5 // ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#buildView(). -// ^^^^^^ reference local7 +// ^^^^^^ reference local3 return new EpoxyViewHolder(parent, view, model.shouldSaveViewState()); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#``(). -// ^^^^^^ reference local7 -// ^^^^ reference local10 -// ^^^^^ reference local9 +// ^^^^^^ reference local3 +// ^^^^ reference local6 +// ^^^^^ reference local5 // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#shouldSaveViewState(). } @@ -233,12 +219,12 @@ public EpoxyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { public void onBindViewHolder(EpoxyViewHolder holder, int position) { // ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onBindViewHolder(). @Override public void onBindViewHolder(EpoxyViewHolder holder, int position) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local11 EpoxyViewHolder holder -// ^^^^^^^^ definition local12 int position +// ^^^^^^ definition local7 EpoxyViewHolder holder +// ^^^^^^^^ definition local8 int position onBindViewHolder(holder, position, Collections.emptyList()); // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#onBindViewHolder(+1). -// ^^^^^^ reference local11 -// ^^^^^^^^ reference local12 +// ^^^^^^ reference local7 +// ^^^^^^^^ reference local8 // ^^^^^^^^^^^ reference java/util/Collections# // ^^^^^^^^^ reference java/util/Collections#emptyList(). } @@ -248,41 +234,41 @@ public void onBindViewHolder(EpoxyViewHolder holder, int position) { public void onBindViewHolder(EpoxyViewHolder holder, int position, List payloads) { // ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onBindViewHolder(+1). @Override public void onBindViewHolder(EpoxyViewHolder holder, int position, List payloads) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local13 EpoxyViewHolder holder -// ^^^^^^^^ definition local14 int position +// ^^^^^^ definition local9 EpoxyViewHolder holder +// ^^^^^^^^ definition local10 int position // ^^^^ reference java/util/List# // ^^^^^^ reference java/lang/Object# -// ^^^^^^^^ definition local15 List payloads +// ^^^^^^^^ definition local11 List payloads EpoxyModel modelToShow = getModelForPosition(position); // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^^^^^ definition local16 EpoxyModel modelToShow +// ^^^^^^^^^^^ definition local12 EpoxyModel modelToShow // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getModelForPosition(). -// ^^^^^^^^ reference local14 +// ^^^^^^^^ reference local10 EpoxyModel previouslyBoundModel = null; // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^^^^^^^^^^^^^^ definition local17 EpoxyModel previouslyBoundModel +// ^^^^^^^^^^^^^^^^^^^^ definition local13 EpoxyModel previouslyBoundModel if (diffPayloadsEnabled()) { // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#diffPayloadsEnabled(). previouslyBoundModel = DiffPayload.getModelFromPayload(payloads, getItemId(position)); -// ^^^^^^^^^^^^^^^^^^^^ reference local17 +// ^^^^^^^^^^^^^^^^^^^^ reference local13 // ^^^^^^^^^^^ reference com/airbnb/epoxy/DiffPayload# // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffPayload#getModelFromPayload(). -// ^^^^^^^^ reference local15 +// ^^^^^^^^ reference local11 // ^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getItemId(). -// ^^^^^^^^ reference local14 +// ^^^^^^^^ reference local10 } holder.bind(modelToShow, previouslyBoundModel, payloads, position); -// ^^^^^^ reference local13 +// ^^^^^^ reference local9 // ^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#bind(). -// ^^^^^^^^^^^ reference local16 -// ^^^^^^^^^^^^^^^^^^^^ reference local17 -// ^^^^^^^^ reference local15 -// ^^^^^^^^ reference local14 +// ^^^^^^^^^^^ reference local12 +// ^^^^^^^^^^^^^^^^^^^^ reference local13 +// ^^^^^^^^ reference local11 +// ^^^^^^^^ reference local10 if (payloads.isEmpty()) { -// ^^^^^^^^ reference local15 +// ^^^^^^^^ reference local11 // ^^^^^^^ reference java/util/List#isEmpty(). // We only apply saved state to the view on initial bind, not on model updates. // Since view state should be independent of model props, we should not need to apply state @@ -290,29 +276,29 @@ public void onBindViewHolder(EpoxyViewHolder holder, int position, List viewHolderState.restore(holder); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#viewHolderState. // ^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#restore(). -// ^^^^^^ reference local13 +// ^^^^^^ reference local9 } boundViewHolders.put(holder); // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#boundViewHolders. // ^^^ reference com/airbnb/epoxy/BoundViewHolders#put(). -// ^^^^^^ reference local13 +// ^^^^^^ reference local9 if (diffPayloadsEnabled()) { // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#diffPayloadsEnabled(). onModelBound(holder, modelToShow, position, previouslyBoundModel); // ^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#onModelBound(+1). -// ^^^^^^ reference local13 -// ^^^^^^^^^^^ reference local16 -// ^^^^^^^^ reference local14 -// ^^^^^^^^^^^^^^^^^^^^ reference local17 +// ^^^^^^ reference local9 +// ^^^^^^^^^^^ reference local12 +// ^^^^^^^^ reference local10 +// ^^^^^^^^^^^^^^^^^^^^ reference local13 } else { onModelBound(holder, modelToShow, position, payloads); // ^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#onModelBound(). -// ^^^^^^ reference local13 -// ^^^^^^^^^^^ reference local16 -// ^^^^^^^^ reference local14 -// ^^^^^^^^ reference local15 +// ^^^^^^ reference local9 +// ^^^^^^^^^^^ reference local12 +// ^^^^^^^^ reference local10 +// ^^^^^^^^ reference local11 } } @@ -328,38 +314,38 @@ boolean diffPayloadsEnabled() { protected void onModelBound(EpoxyViewHolder holder, EpoxyModel model, int position, // ^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onModelBound(). protected void onModelBound(EpoxyViewHolder holder, EpoxyModel model, int position, List payloads) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local18 EpoxyViewHolder holder +// ^^^^^^ definition local14 EpoxyViewHolder holder // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^ definition local19 EpoxyModel model -// ^^^^^^^^ definition local20 int position +// ^^^^^ definition local15 EpoxyModel model +// ^^^^^^^^ definition local16 int position @Nullable List payloads) { // ^^^^^^^^ reference androidx/annotation/Nullable# // ^^^^ reference java/util/List# // ^^^^^^ reference java/lang/Object# -// ^^^^^^^^ definition local21 @Nullable List payloads +// ^^^^^^^^ definition local17 @Nullable List payloads onModelBound(holder, model, position); // ^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#onModelBound(+2). -// ^^^^^^ reference local18 -// ^^^^^ reference local19 -// ^^^^^^^^ reference local20 +// ^^^^^^ reference local14 +// ^^^^^ reference local15 +// ^^^^^^^^ reference local16 } void onModelBound(EpoxyViewHolder holder, EpoxyModel model, int position, // ^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onModelBound(+1). void onModelBound(EpoxyViewHolder holder, EpoxyModel model, int position, EpoxyModel previouslyBoundModel) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local22 EpoxyViewHolder holder +// ^^^^^^ definition local18 EpoxyViewHolder holder // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^ definition local23 EpoxyModel model -// ^^^^^^^^ definition local24 int position +// ^^^^^ definition local19 EpoxyModel model +// ^^^^^^^^ definition local20 int position @Nullable EpoxyModel previouslyBoundModel) { // ^^^^^^^^ reference androidx/annotation/Nullable# // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^^^^^^^^^^^^^^ definition local25 @Nullable EpoxyModel previouslyBoundModel +// ^^^^^^^^^^^^^^^^^^^^ definition local21 @Nullable EpoxyModel previouslyBoundModel onModelBound(holder, model, position); // ^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#onModelBound(+2). -// ^^^^^^ reference local22 -// ^^^^^ reference local23 -// ^^^^^^^^ reference local24 +// ^^^^^^ reference local18 +// ^^^^^ reference local19 +// ^^^^^^^^ reference local20 } /** @@ -369,10 +355,10 @@ void onModelBound(EpoxyViewHolder holder, EpoxyModel model, int position, protected void onModelBound(EpoxyViewHolder holder, EpoxyModel model, int position) { // ^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onModelBound(+2). protected void onModelBound(EpoxyViewHolder holder, EpoxyModel model, int position) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local26 EpoxyViewHolder holder +// ^^^^^^ definition local22 EpoxyViewHolder holder // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^ definition local27 EpoxyModel model -// ^^^^^^^^ definition local28 int position +// ^^^^^ definition local23 EpoxyModel model +// ^^^^^^^^ definition local24 int position } @@ -391,11 +377,11 @@ protected BoundViewHolders getBoundViewHolders() { EpoxyModel getModelForPosition(int position) { //^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# // ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#getModelForPosition(). EpoxyModel getModelForPosition(int position) -// ^^^^^^^^ definition local29 int position +// ^^^^^^^^ definition local25 int position return getCurrentModels().get(position); // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getCurrentModels(). // ^^^ reference java/util/List#get(). -// ^^^^^^^^ reference local29 +// ^^^^^^^^ reference local25 } @Override @@ -403,28 +389,28 @@ EpoxyModel getModelForPosition(int position) { public void onViewRecycled(EpoxyViewHolder holder) { // ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onViewRecycled(). @Override public void onViewRecycled(EpoxyViewHolder holder) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local30 EpoxyViewHolder holder +// ^^^^^^ definition local26 EpoxyViewHolder holder viewHolderState.save(holder); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#viewHolderState. // ^^^^ reference com/airbnb/epoxy/ViewHolderState#save(+1). -// ^^^^^^ reference local30 +// ^^^^^^ reference local26 boundViewHolders.remove(holder); // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#boundViewHolders. // ^^^^^^ reference com/airbnb/epoxy/BoundViewHolders#remove(). -// ^^^^^^ reference local30 +// ^^^^^^ reference local26 EpoxyModel model = holder.getModel(); // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^ definition local31 EpoxyModel model -// ^^^^^^ reference local30 +// ^^^^^ definition local27 EpoxyModel model +// ^^^^^^ reference local26 // ^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getModel(). holder.unbind(); -// ^^^^^^ reference local30 +// ^^^^^^ reference local26 // ^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#unbind(). onModelUnbound(holder, model); // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#onModelUnbound(). -// ^^^^^^ reference local30 -// ^^^^^ reference local31 +// ^^^^^^ reference local26 +// ^^^^^ reference local27 } @CallSuper @@ -435,7 +421,7 @@ public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) { // ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onDetachedFromRecyclerView(). @CallSuper @Override public void onDetachedFromRecyclerView(unresolved_type recyclerView) // ^^^^^^^ reference androidx/annotation/NonNull# // ^^^^^^^^^^^^ reference _root_/ -// ^^^^^^^^^^^^ definition local32 @NonNull unresolved_type recyclerView +// ^^^^^^^^^^^^ definition local28 @NonNull unresolved_type recyclerView // The last model is saved for optimization, but holding onto it can leak anything saved inside // the model (like a click listener that references a Fragment). This is only needed during // the viewholder creation phase, so it is safe to clear now. @@ -451,9 +437,9 @@ public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) { protected void onModelUnbound(EpoxyViewHolder holder, EpoxyModel model) { // ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onModelUnbound(). protected void onModelUnbound(EpoxyViewHolder holder, EpoxyModel model) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local33 EpoxyViewHolder holder +// ^^^^^^ definition local29 EpoxyViewHolder holder // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^ definition local34 EpoxyModel model +// ^^^^^ definition local30 EpoxyModel model } @@ -464,14 +450,14 @@ protected void onModelUnbound(EpoxyViewHolder holder, EpoxyModel model) { public boolean onFailedToRecycleView(EpoxyViewHolder holder) { // ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onFailedToRecycleView(). @CallSuper @Override public boolean onFailedToRecycleView(EpoxyViewHolder holder) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local35 EpoxyViewHolder holder +// ^^^^^^ definition local31 EpoxyViewHolder holder //noinspection unchecked,rawtypes return ((EpoxyModel) holder.getModel()).onFailedToRecycleView(holder.objectToBind()); // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^ reference local35 +// ^^^^^^ reference local31 // ^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getModel(). // ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#onFailedToRecycleView(). -// ^^^^^^ reference local35 +// ^^^^^^ reference local31 // ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#objectToBind(). } @@ -482,14 +468,14 @@ public boolean onFailedToRecycleView(EpoxyViewHolder holder) { public void onViewAttachedToWindow(EpoxyViewHolder holder) { // ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onViewAttachedToWindow(). @CallSuper @Override public void onViewAttachedToWindow(EpoxyViewHolder holder) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local36 EpoxyViewHolder holder +// ^^^^^^ definition local32 EpoxyViewHolder holder //noinspection unchecked,rawtypes ((EpoxyModel) holder.getModel()).onViewAttachedToWindow(holder.objectToBind()); // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^ reference local36 +// ^^^^^^ reference local32 // ^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getModel(). // ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#onViewAttachedToWindow(). -// ^^^^^^ reference local36 +// ^^^^^^ reference local32 // ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#objectToBind(). } @@ -500,32 +486,32 @@ public void onViewAttachedToWindow(EpoxyViewHolder holder) { public void onViewDetachedFromWindow(EpoxyViewHolder holder) { // ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onViewDetachedFromWindow(). @CallSuper @Override public void onViewDetachedFromWindow(EpoxyViewHolder holder) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local37 EpoxyViewHolder holder +// ^^^^^^ definition local33 EpoxyViewHolder holder //noinspection unchecked,rawtypes ((EpoxyModel) holder.getModel()).onViewDetachedFromWindow(holder.objectToBind()); // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^ reference local37 +// ^^^^^^ reference local33 // ^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getModel(). // ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#onViewDetachedFromWindow(). -// ^^^^^^ reference local37 +// ^^^^^^ reference local33 // ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#objectToBind(). } public void onSaveInstanceState(Bundle outState) { // ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onSaveInstanceState(). public void onSaveInstanceState(unresolved_type outState) // ^^^^^^ reference _root_/ -// ^^^^^^^^ definition local38 unresolved_type outState +// ^^^^^^^^ definition local34 unresolved_type outState // Save the state of currently bound views first so they are included. Views that were // scrolled off and unbound will already have had // their state saved. for (EpoxyViewHolder holder : boundViewHolders) { // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local39 EpoxyViewHolder holder +// ^^^^^^ definition local35 EpoxyViewHolder holder // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#boundViewHolders. viewHolderState.save(holder); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#viewHolderState. // ^^^^ reference com/airbnb/epoxy/ViewHolderState#save(+1). -// ^^^^^^ reference local39 +// ^^^^^^ reference local35 } if (viewHolderState.size() > 0 && !hasStableIds()) { @@ -537,7 +523,7 @@ public void onSaveInstanceState(Bundle outState) { } outState.putParcelable(SAVED_STATE_ARG_VIEW_HOLDERS, viewHolderState); -// ^^^^^^^^ reference local38 +// ^^^^^^^^ reference local34 // ^^^^^^^^^^^^^ reference putParcelable# // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#SAVED_STATE_ARG_VIEW_HOLDERS. // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#viewHolderState. @@ -547,7 +533,7 @@ public void onRestoreInstanceState(@Nullable Bundle inState) { // ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#onRestoreInstanceState(). public void onRestoreInstanceState(unresolved_type inState) // ^^^^^^^^ reference androidx/annotation/Nullable# // ^^^^^^ reference _root_/ -// ^^^^^^^ definition local40 @Nullable unresolved_type inState +// ^^^^^^^ definition local36 @Nullable unresolved_type inState // To simplify things we enforce that state is restored before views are bound, otherwise it // is more difficult to update view state once they are bound if (boundViewHolders.size() > 0) { @@ -560,10 +546,10 @@ public void onRestoreInstanceState(@Nullable Bundle inState) { } if (inState != null) { -// ^^^^^^^ reference local40 +// ^^^^^^^ reference local36 viewHolderState = inState.getParcelable(SAVED_STATE_ARG_VIEW_HOLDERS); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#viewHolderState. -// ^^^^^^^ reference local40 +// ^^^^^^^ reference local36 // ^^^^^^^^^^^^^ reference getParcelable# // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#SAVED_STATE_ARG_VIEW_HOLDERS. if (viewHolderState == null) { @@ -585,23 +571,23 @@ public void onRestoreInstanceState(@Nullable Bundle inState) { protected int getModelPosition(EpoxyModel model) { // ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#getModelPosition(). protected int getModelPosition(EpoxyModel model) // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^ definition local41 EpoxyModel model +// ^^^^^ definition local37 EpoxyModel model int size = getCurrentModels().size(); -// ^^^^ definition local42 int size +// ^^^^ definition local38 int size // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getCurrentModels(). // ^^^^ reference java/util/List#size(). for (int i = 0; i < size; i++) { -// ^ definition local43 int i -// ^ reference local43 -// ^^^^ reference local42 -// ^ reference local43 +// ^ definition local39 int i +// ^ reference local39 +// ^^^^ reference local38 +// ^ reference local39 if (model == getCurrentModels().get(i)) { -// ^^^^^ reference local41 +// ^^^^^ reference local37 // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getCurrentModels(). // ^^^ reference java/util/List#get(). -// ^ reference local43 +// ^ reference local39 return i; -// ^ reference local43 +// ^ reference local39 } } @@ -630,10 +616,10 @@ public SpanSizeLookup getSpanSizeLookup() { */ public void setSpanCount(int spanCount) { // ^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#setSpanCount(). public void setSpanCount(int spanCount) -// ^^^^^^^^^ definition local44 int spanCount +// ^^^^^^^^^ definition local40 int spanCount this.spanCount = spanCount; // ^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#spanCount. -// ^^^^^^^^^ reference local44 +// ^^^^^^^^^ reference local40 } public int getSpanCount() { @@ -663,7 +649,7 @@ public void setupStickyHeaderView(@NotNull View stickyHeader) { // ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#setupStickyHeaderView(). @Override public void setupStickyHeaderView(unresolved_type stickyHeader) // ^^^^^^^ reference org/jetbrains/annotations/NotNull# // ^^^^ reference _root_/ -// ^^^^^^^^^^^^ definition local45 @NotNull unresolved_type stickyHeader +// ^^^^^^^^^^^^ definition local41 @NotNull unresolved_type stickyHeader // no-op } @@ -680,7 +666,7 @@ public void teardownStickyHeaderView(@NotNull View stickyHeader) { // ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#teardownStickyHeaderView(). @Override public void teardownStickyHeaderView(unresolved_type stickyHeader) // ^^^^^^^ reference org/jetbrains/annotations/NotNull# // ^^^^ reference _root_/ -// ^^^^^^^^^^^^ definition local46 @NotNull unresolved_type stickyHeader +// ^^^^^^^^^^^^ definition local42 @NotNull unresolved_type stickyHeader // no-op } @@ -695,7 +681,7 @@ public void teardownStickyHeaderView(@NotNull View stickyHeader) { // ^^^^^^^^ reference java/lang/Override# public boolean isStickyHeader(int position) { // ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/BaseEpoxyAdapter#isStickyHeader(). @Override public boolean isStickyHeader(int position) -// ^^^^^^^^ definition local47 int position +// ^^^^^^^^ definition local43 int position return false; } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/CallbackProp.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/CallbackProp.java deleted file mode 100644 index 897bf9ac..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/CallbackProp.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * A convenient replacement for {@link ModelProp} when the prop represents a callback or listener. - *

- * This is the same as using {@link ModelProp} with the options {@link - * com.airbnb.epoxy.ModelProp.Option#NullOnRecycle} and - * {@link com.airbnb.epoxy.ModelProp.Option#DoNotHash} - *

- * This can only be used on setters who's parameter is marked as nullable. The prop will be set to - * null when the view is recycled to ensure that the listener is not leaked. - *

- * Be aware that since this applies the option {@link com.airbnb.epoxy.ModelProp.Option#DoNotHash} - * changing the value of the listener will not trigger an update to the view. - */ -@Target({ElementType.METHOD, ElementType.FIELD}) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^^ reference java/lang/annotation/ElementType#METHOD. -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^ reference java/lang/annotation/ElementType#FIELD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface CallbackProp { -// ^^^^^^^^^^^^ definition com/airbnb/epoxy/CallbackProp# @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.CLASS) public @interface CallbackProp -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/Carousel.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/Carousel.java index 52dce887..2dd25f9a 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/Carousel.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/Carousel.java @@ -131,7 +131,6 @@ public SnapHelper buildSnapHelper(Context context) { // ^^^^^^^ reference _root_/ // ^^^^^^^ definition local3 unresolved_type context return new LinearSnapHelper(); -// ^^^^^^^^^^^^^^^^ reference ``# } }; diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/DiffHelper.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/DiffHelper.java index 36729b09..3eb988af 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/DiffHelper.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/DiffHelper.java @@ -89,247 +89,93 @@ class DiffHelper { // ^^^^^^^^^^^^ reference RecyclerView/ // ^^^^^^^^^^^^^^^^^^^ reference RecyclerView/AdapterDataObserver# // ^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#observer. private final unresolved_type observer -// ^^^^^^^^^^^^ reference RecyclerView/ -// ^^^^^^^^^^^^^^^^^^^ reference RecyclerView/AdapterDataObserver# @Override -// ^^^^^^^^ reference java/lang/Override# public void onChanged() { -// ^^^^^^^^^ definition local3 @Override public void onChanged() throw new UnsupportedOperationException( -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference java/lang/UnsupportedOperationException#``(+1). "Diffing is enabled. You should use notifyModelsChanged instead of notifyDataSetChanged"); } @Override -// ^^^^^^^^ reference java/lang/Override# public void onItemRangeChanged(int positionStart, int itemCount) { -// ^^^^^^^^^^^^^^^^^^ definition local4 @Override public void onItemRangeChanged(int positionStart, int itemCount) -// ^^^^^^^^^^^^^ definition local8 int positionStart -// ^^^^^^^^^ definition local9 int itemCount for (int i = positionStart; i < positionStart + itemCount; i++) { -// ^ definition local10 int i -// ^^^^^^^^^^^^^ reference local8 -// ^ reference local10 -// ^^^^^^^^^^^^^ reference local8 -// ^^^^^^^^^ reference local9 -// ^ reference local10 currentStateList.get(i).hashCode = adapter.getCurrentModels().get(i).hashCode(); -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^ reference java/util/ArrayList#get(). -// ^ reference local10 -// ^^^^^^^^ reference com/airbnb/epoxy/ModelState#hashCode. -// ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getCurrentModels(). -// ^^^ reference java/util/List#get(). -// ^ reference local10 -// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#hashCode(). } } @Override -// ^^^^^^^^ reference java/lang/Override# public void onItemRangeInserted(int positionStart, int itemCount) { -// ^^^^^^^^^^^^^^^^^^^ definition local5 @Override public void onItemRangeInserted(int positionStart, int itemCount) -// ^^^^^^^^^^^^^ definition local11 int positionStart -// ^^^^^^^^^ definition local12 int itemCount if (itemCount == 0) { -// ^^^^^^^^^ reference local12 // no-op return; } if (itemCount == 1 || positionStart == currentStateList.size()) { -// ^^^^^^^^^ reference local12 -// ^^^^^^^^^^^^^ reference local11 -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^^ reference java/util/ArrayList#size(). for (int i = positionStart; i < positionStart + itemCount; i++) { -// ^ definition local13 int i -// ^^^^^^^^^^^^^ reference local11 -// ^ reference local13 -// ^^^^^^^^^^^^^ reference local11 -// ^^^^^^^^^ reference local12 -// ^ reference local13 currentStateList.add(i, createStateForPosition(i)); -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^ reference java/util/ArrayList#add(+2). -// ^ reference local13 -// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#createStateForPosition(). -// ^ reference local13 } } else { // Add in a batch since multiple insertions to the middle of the list are slow List newModels = new ArrayList<>(itemCount); -// ^^^^ reference java/util/List# -// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^ definition local14 List newModels -// ^^^^^^^^^ reference java/util/ArrayList#``(). -// ^^^^^^^^^ reference local12 for (int i = positionStart; i < positionStart + itemCount; i++) { -// ^ definition local15 int i -// ^^^^^^^^^^^^^ reference local11 -// ^ reference local15 -// ^^^^^^^^^^^^^ reference local11 -// ^^^^^^^^^ reference local12 -// ^ reference local15 newModels.add(createStateForPosition(i)); -// ^^^^^^^^^ reference local14 -// ^^^ reference java/util/List#add(). -// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#createStateForPosition(). -// ^ reference local15 } currentStateList.addAll(positionStart, newModels); -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^^^^ reference java/util/ArrayList#addAll(+1). -// ^^^^^^^^^^^^^ reference local11 -// ^^^^^^^^^ reference local14 } // Update positions of affected items int size = currentStateList.size(); -// ^^^^ definition local16 int size -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^^ reference java/util/ArrayList#size(). for (int i = positionStart + itemCount; i < size; i++) { -// ^ definition local17 int i -// ^^^^^^^^^^^^^ reference local11 -// ^^^^^^^^^ reference local12 -// ^ reference local17 -// ^^^^ reference local16 -// ^ reference local17 currentStateList.get(i).position += itemCount; -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^ reference java/util/ArrayList#get(). -// ^ reference local17 -// ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^ reference local12 } } @Override -// ^^^^^^^^ reference java/lang/Override# public void onItemRangeRemoved(int positionStart, int itemCount) { -// ^^^^^^^^^^^^^^^^^^ definition local6 @Override public void onItemRangeRemoved(int positionStart, int itemCount) -// ^^^^^^^^^^^^^ definition local18 int positionStart -// ^^^^^^^^^ definition local19 int itemCount if (itemCount == 0) { -// ^^^^^^^^^ reference local19 // no-op return; } List modelsToRemove = -// ^^^^ reference java/util/List# -// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^^^^^ definition local20 List modelsToRemove currentStateList.subList(positionStart, positionStart + itemCount); -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^^^^^ reference java/util/ArrayList#subList(). -// ^^^^^^^^^^^^^ reference local18 -// ^^^^^^^^^^^^^ reference local18 -// ^^^^^^^^^ reference local19 for (ModelState model : modelsToRemove) { -// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^ definition local21 ModelState model -// ^^^^^^^^^^^^^^ reference local20 currentStateMap.remove(model.id); -// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateMap. -// ^^^^^^ reference java/util/Map#remove(). -// ^^^^^ reference local21 -// ^^ reference com/airbnb/epoxy/ModelState#id. } modelsToRemove.clear(); -// ^^^^^^^^^^^^^^ reference local20 -// ^^^^^ reference java/util/List#clear(). // Update positions of affected items int size = currentStateList.size(); -// ^^^^ definition local22 int size -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^^ reference java/util/ArrayList#size(). for (int i = positionStart; i < size; i++) { -// ^ definition local23 int i -// ^^^^^^^^^^^^^ reference local18 -// ^ reference local23 -// ^^^^ reference local22 -// ^ reference local23 currentStateList.get(i).position -= itemCount; -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^ reference java/util/ArrayList#get(). -// ^ reference local23 -// ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^ reference local19 } } @Override -// ^^^^^^^^ reference java/lang/Override# public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { -// ^^^^^^^^^^^^^^^^ definition local7 @Override public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) -// ^^^^^^^^^^^^ definition local24 int fromPosition -// ^^^^^^^^^^ definition local25 int toPosition -// ^^^^^^^^^ definition local26 int itemCount if (fromPosition == toPosition) { -// ^^^^^^^^^^^^ reference local24 -// ^^^^^^^^^^ reference local25 // no-op return; } if (itemCount != 1) { -// ^^^^^^^^^ reference local26 throw new IllegalArgumentException("Moving more than 1 item at a time is not " -// ^^^^^^^^^^^^^^^^^^^^^^^^ reference java/lang/IllegalArgumentException#``(+1). + "supported. Number of items moved: " + itemCount); -// ^^^^^^^^^ reference local26 } ModelState model = currentStateList.remove(fromPosition); -// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^ definition local27 ModelState model -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^^^^ reference java/util/ArrayList#remove(). -// ^^^^^^^^^^^^ reference local24 model.position = toPosition; -// ^^^^^ reference local27 -// ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^ reference local25 currentStateList.add(toPosition, model); -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^ reference java/util/ArrayList#add(+2). -// ^^^^^^^^^^ reference local25 -// ^^^^^ reference local27 if (fromPosition < toPosition) { -// ^^^^^^^^^^^^ reference local24 -// ^^^^^^^^^^ reference local25 // shift the affected items left for (int i = fromPosition; i < toPosition; i++) { -// ^ definition local28 int i -// ^^^^^^^^^^^^ reference local24 -// ^ reference local28 -// ^^^^^^^^^^ reference local25 -// ^ reference local28 currentStateList.get(i).position--; -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^ reference java/util/ArrayList#get(). -// ^ reference local28 -// ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. } } else { // shift the affected items right for (int i = toPosition + 1; i <= fromPosition; i++) { -// ^ definition local29 int i -// ^^^^^^^^^^ reference local25 -// ^ reference local29 -// ^^^^^^^^^^^^ reference local24 -// ^ reference local29 currentStateList.get(i).position++; -// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^ reference java/util/ArrayList#get(). -// ^ reference local29 -// ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. } } } @@ -343,12 +189,12 @@ void notifyModelChanges() { // ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#notifyModelChanges(). void notifyModelChanges() UpdateOpHelper updateOpHelper = new UpdateOpHelper(); // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper# -// ^^^^^^^^^^^^^^ definition local30 UpdateOpHelper updateOpHelper +// ^^^^^^^^^^^^^^ definition local2 UpdateOpHelper updateOpHelper // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#``(). buildDiff(updateOpHelper); // ^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#buildDiff(). -// ^^^^^^^^^^^^^^ reference local30 +// ^^^^^^^^^^^^^^ reference local2 // Send out the proper notify calls for the diff. We remove our // observer first so that we don't react to our own notify calls @@ -358,7 +204,7 @@ void notifyModelChanges() { // ^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#observer. notifyChanges(updateOpHelper); // ^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#notifyChanges(). -// ^^^^^^^^^^^^^^ reference local30 +// ^^^^^^^^^^^^^^ reference local2 adapter.registerAdapterDataObserver(observer); // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#registerAdapterDataObserver# @@ -368,14 +214,14 @@ void notifyModelChanges() { private void notifyChanges(UpdateOpHelper opHelper) { // ^^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#notifyChanges(). private void notifyChanges(UpdateOpHelper opHelper) // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper# -// ^^^^^^^^ definition local31 UpdateOpHelper opHelper +// ^^^^^^^^ definition local3 UpdateOpHelper opHelper for (UpdateOp op : opHelper.opList) { // ^^^^^^^^ reference com/airbnb/epoxy/UpdateOp# -// ^^ definition local32 UpdateOp op -// ^^^^^^^^ reference local31 +// ^^ definition local4 UpdateOp op +// ^^^^^^^^ reference local3 // ^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#opList. switch (op.type) { -// ^^ reference local32 +// ^^ reference local4 // ^^^^ reference com/airbnb/epoxy/UpdateOp#type. case UpdateOp.ADD: // ^^^^^^^^ reference com/airbnb/epoxy/UpdateOp# @@ -383,9 +229,9 @@ private void notifyChanges(UpdateOpHelper opHelper) { adapter.notifyItemRangeInserted(op.positionStart, op.itemCount); // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#notifyItemRangeInserted# -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#positionStart. -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#itemCount. break; case UpdateOp.MOVE: @@ -394,9 +240,9 @@ private void notifyChanges(UpdateOpHelper opHelper) { adapter.notifyItemMoved(op.positionStart, op.itemCount); // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#notifyItemMoved# -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#positionStart. -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#itemCount. break; case UpdateOp.REMOVE: @@ -405,9 +251,9 @@ private void notifyChanges(UpdateOpHelper opHelper) { adapter.notifyItemRangeRemoved(op.positionStart, op.itemCount); // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#notifyItemRangeRemoved# -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#positionStart. -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#itemCount. break; case UpdateOp.UPDATE: @@ -415,33 +261,33 @@ private void notifyChanges(UpdateOpHelper opHelper) { // ^^^^^^ reference com/airbnb/epoxy/UpdateOp#UPDATE. if (immutableModels && op.payloads != null) { // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#immutableModels. -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#payloads. adapter.notifyItemRangeChanged(op.positionStart, op.itemCount, // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#notifyItemRangeChanged# -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#positionStart. -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#itemCount. new DiffPayload(op.payloads)); // ^^^^^^^^^^^ reference com/airbnb/epoxy/DiffPayload#``(). -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#payloads. } else { adapter.notifyItemRangeChanged(op.positionStart, op.itemCount); // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#notifyItemRangeChanged# -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#positionStart. -// ^^ reference local32 +// ^^ reference local4 // ^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#itemCount. } break; default: throw new IllegalArgumentException("Unknown type: " + op.type); // ^^^^^^^^^^^^^^^^^^^^^^^^ reference java/lang/IllegalArgumentException#``(+1). -// ^^ reference local32 +// ^^ reference local4 // ^^^^ reference com/airbnb/epoxy/UpdateOp#type. } } @@ -455,7 +301,7 @@ private UpdateOpHelper buildDiff(UpdateOpHelper updateOpHelper) { // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper# // ^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#buildDiff(). private UpdateOpHelper buildDiff(UpdateOpHelper updateOpHelper) // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper# -// ^^^^^^^^^^^^^^ definition local33 UpdateOpHelper updateOpHelper +// ^^^^^^^^^^^^^^ definition local5 UpdateOpHelper updateOpHelper prepareStateForDiff(); // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#prepareStateForDiff(). @@ -466,37 +312,37 @@ private UpdateOpHelper buildDiff(UpdateOpHelper updateOpHelper) { // the change, this way subsequent operations will use the correct, updated positions. collectRemovals(updateOpHelper); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#collectRemovals(). -// ^^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^^ reference local5 // Only need to check for insertions if new list is bigger boolean hasInsertions = -// ^^^^^^^^^^^^^ definition local34 boolean hasInsertions +// ^^^^^^^^^^^^^ definition local6 boolean hasInsertions oldStateList.size() - updateOpHelper.getNumRemovals() != currentStateList.size(); // ^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateList. // ^^^^ reference java/util/ArrayList#size(). -// ^^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^^ reference local5 // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#getNumRemovals(). // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. // ^^^^ reference java/util/ArrayList#size(). if (hasInsertions) { -// ^^^^^^^^^^^^^ reference local34 +// ^^^^^^^^^^^^^ reference local6 collectInsertions(updateOpHelper); // ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#collectInsertions(). -// ^^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^^ reference local5 } collectMoves(updateOpHelper); // ^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#collectMoves(). -// ^^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^^ reference local5 collectChanges(updateOpHelper); // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#collectChanges(). -// ^^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^^ reference local5 resetOldState(); // ^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#resetOldState(). return updateOpHelper; -// ^^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^^ reference local5 } private void resetOldState() { @@ -525,118 +371,118 @@ private void prepareStateForDiff() { ArrayList tempList = oldStateList; // ^^^^^^^^^ reference java/util/ArrayList# // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^ definition local35 ArrayList tempList +// ^^^^^^^^ definition local7 ArrayList tempList // ^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateList. oldStateList = currentStateList; // ^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateList. // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. currentStateList = tempList; // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^^^^^^ reference local35 +// ^^^^^^^^ reference local7 Map tempMap = oldStateMap; // ^^^ reference java/util/Map# // ^^^^ reference java/lang/Long# // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^ definition local36 Map tempMap +// ^^^^^^^ definition local8 Map tempMap // ^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateMap. oldStateMap = currentStateMap; // ^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateMap. // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateMap. currentStateMap = tempMap; // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateMap. -// ^^^^^^^ reference local36 +// ^^^^^^^ reference local8 // Remove all pairings in the old states so we can tell which of them were removed. The items // that still exist in the new list will be paired when we build the current list state below for (ModelState modelState : oldStateList) { // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^ definition local37 ModelState modelState +// ^^^^^^^^^^ definition local9 ModelState modelState // ^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateList. modelState.pair = null; -// ^^^^^^^^^^ reference local37 +// ^^^^^^^^^^ reference local9 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. } int modelCount = adapter.getCurrentModels().size(); -// ^^^^^^^^^^ definition local38 int modelCount +// ^^^^^^^^^^ definition local10 int modelCount // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getCurrentModels(). // ^^^^ reference java/util/List#size(). currentStateList.ensureCapacity(modelCount); // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. // ^^^^^^^^^^^^^^ reference java/util/ArrayList#ensureCapacity(). -// ^^^^^^^^^^ reference local38 +// ^^^^^^^^^^ reference local10 for (int i = 0; i < modelCount; i++) { -// ^ definition local39 int i -// ^ reference local39 -// ^^^^^^^^^^ reference local38 -// ^ reference local39 +// ^ definition local11 int i +// ^ reference local11 +// ^^^^^^^^^^ reference local10 +// ^ reference local11 currentStateList.add(createStateForPosition(i)); // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. -// ^^^ reference java/util/ArrayList#add(+1). +// ^^^ reference java/util/ArrayList#add(). // ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#createStateForPosition(). -// ^ reference local39 +// ^ reference local11 } } private ModelState createStateForPosition(int position) { // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# // ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#createStateForPosition(). private ModelState createStateForPosition(int position) -// ^^^^^^^^ definition local40 int position +// ^^^^^^^^ definition local12 int position EpoxyModel model = adapter.getCurrentModels().get(position); // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^ definition local41 EpoxyModel model +// ^^^^^ definition local13 EpoxyModel model // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getCurrentModels(). // ^^^ reference java/util/List#get(). -// ^^^^^^^^ reference local40 +// ^^^^^^^^ reference local12 model.addedToAdapter = true; -// ^^^^^ reference local41 +// ^^^^^ reference local13 // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#addedToAdapter. ModelState state = ModelState.build(model, position, immutableModels); // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^ definition local42 ModelState state +// ^^^^^ definition local14 ModelState state // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# // ^^^^^ reference com/airbnb/epoxy/ModelState#build(). -// ^^^^^ reference local41 -// ^^^^^^^^ reference local40 +// ^^^^^ reference local13 +// ^^^^^^^^ reference local12 // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#immutableModels. ModelState previousValue = currentStateMap.put(state.id, state); // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^^^^ definition local43 ModelState previousValue +// ^^^^^^^^^^^^^ definition local15 ModelState previousValue // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateMap. // ^^^ reference java/util/Map#put(). -// ^^^^^ reference local42 +// ^^^^^ reference local14 // ^^ reference com/airbnb/epoxy/ModelState#id. -// ^^^^^ reference local42 +// ^^^^^ reference local14 if (previousValue != null) { -// ^^^^^^^^^^^^^ reference local43 +// ^^^^^^^^^^^^^ reference local15 int previousPosition = previousValue.position; -// ^^^^^^^^^^^^^^^^ definition local44 int previousPosition -// ^^^^^^^^^^^^^ reference local43 +// ^^^^^^^^^^^^^^^^ definition local16 int previousPosition +// ^^^^^^^^^^^^^ reference local15 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. EpoxyModel previousModel = adapter.getCurrentModels().get(previousPosition); // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^^^^^^^ definition local45 EpoxyModel previousModel +// ^^^^^^^^^^^^^ definition local17 EpoxyModel previousModel // ^^^^^^^ reference com/airbnb/epoxy/DiffHelper#adapter. // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/BaseEpoxyAdapter#getCurrentModels(). // ^^^ reference java/util/List#get(). -// ^^^^^^^^^^^^^^^^ reference local44 +// ^^^^^^^^^^^^^^^^ reference local16 throw new IllegalStateException("Two models have the same ID. ID's must be unique!" // ^^^^^^^^^^^^^^^^^^^^^ reference java/lang/IllegalStateException#``(+1). + " Model at position " + position + ": " + model -// ^^^^^^^^ reference local40 -// ^^^^^ reference local41 +// ^^^^^^^^ reference local12 +// ^^^^^ reference local13 + " Model at position " + previousPosition + ": " + previousModel); -// ^^^^^^^^^^^^^^^^ reference local44 -// ^^^^^^^^^^^^^ reference local45 +// ^^^^^^^^^^^^^^^^ reference local16 +// ^^^^^^^^^^^^^ reference local17 } return state; -// ^^^^^ reference local42 +// ^^^^^ reference local14 } /** @@ -647,44 +493,44 @@ private ModelState createStateForPosition(int position) { private void collectRemovals(UpdateOpHelper helper) { // ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#collectRemovals(). private void collectRemovals(UpdateOpHelper helper) // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper# -// ^^^^^^ definition local46 UpdateOpHelper helper +// ^^^^^^ definition local18 UpdateOpHelper helper for (ModelState state : oldStateList) { // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^ definition local47 ModelState state +// ^^^^^ definition local19 ModelState state // ^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateList. // Update the position of the item to take into account previous removals, // so that future operations will reference the correct position state.position -= helper.getNumRemovals(); -// ^^^^^ reference local47 +// ^^^^^ reference local19 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^ reference local46 +// ^^^^^^ reference local18 // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#getNumRemovals(). // This is our first time going through the list, so we // look up the item with the matching id in the new // list and hold a reference to it so that we can access it quickly in the future state.pair = currentStateMap.get(state.id); -// ^^^^^ reference local47 +// ^^^^^ reference local19 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateMap. // ^^^ reference java/util/Map#get(). -// ^^^^^ reference local47 +// ^^^^^ reference local19 // ^^ reference com/airbnb/epoxy/ModelState#id. if (state.pair != null) { -// ^^^^^ reference local47 +// ^^^^^ reference local19 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. state.pair.pair = state; -// ^^^^^ reference local47 +// ^^^^^ reference local19 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^ reference com/airbnb/epoxy/ModelState#pair. -// ^^^^^ reference local47 +// ^^^^^ reference local19 continue; } helper.remove(state.position); -// ^^^^^^ reference local46 +// ^^^^^^ reference local18 // ^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#remove(). -// ^^^^^ reference local47 +// ^^^^^ reference local19 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. } } @@ -697,42 +543,42 @@ private void collectRemovals(UpdateOpHelper helper) { private void collectInsertions(UpdateOpHelper helper) { // ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#collectInsertions(). private void collectInsertions(UpdateOpHelper helper) // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper# -// ^^^^^^ definition local48 UpdateOpHelper helper +// ^^^^^^ definition local20 UpdateOpHelper helper Iterator oldItemIterator = oldStateList.iterator(); // ^^^^^^^^ reference java/util/Iterator# // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^^^^^^ definition local49 Iterator oldItemIterator +// ^^^^^^^^^^^^^^^ definition local21 Iterator oldItemIterator // ^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateList. // ^^^^^^^^ reference java/util/ArrayList#iterator(). for (ModelState itemToInsert : currentStateList) { // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^^^ definition local50 ModelState itemToInsert +// ^^^^^^^^^^^^ definition local22 ModelState itemToInsert // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. if (itemToInsert.pair != null) { -// ^^^^^^^^^^^^ reference local50 +// ^^^^^^^^^^^^ reference local22 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // Update the position of the next item in the old list to take any insertions into account ModelState nextOldItem = getNextItemWithPair(oldItemIterator); // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^^ definition local51 ModelState nextOldItem +// ^^^^^^^^^^^ definition local23 ModelState nextOldItem // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#getNextItemWithPair(). -// ^^^^^^^^^^^^^^^ reference local49 +// ^^^^^^^^^^^^^^^ reference local21 if (nextOldItem != null) { -// ^^^^^^^^^^^ reference local51 +// ^^^^^^^^^^^ reference local23 nextOldItem.position += helper.getNumInsertions(); -// ^^^^^^^^^^^ reference local51 +// ^^^^^^^^^^^ reference local23 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^ reference local48 +// ^^^^^^ reference local20 // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#getNumInsertions(). } continue; } helper.add(itemToInsert.position); -// ^^^^^^ reference local48 +// ^^^^^^ reference local20 // ^^^ reference com/airbnb/epoxy/UpdateOpHelper#add(). -// ^^^^^^^^^^^^ reference local50 +// ^^^^^^^^^^^^ reference local22 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. } } @@ -743,67 +589,67 @@ private void collectInsertions(UpdateOpHelper helper) { private void collectChanges(UpdateOpHelper helper) { // ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#collectChanges(). private void collectChanges(UpdateOpHelper helper) // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper# -// ^^^^^^ definition local52 UpdateOpHelper helper +// ^^^^^^ definition local24 UpdateOpHelper helper for (ModelState newItem : currentStateList) { // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^ definition local53 ModelState newItem +// ^^^^^^^ definition local25 ModelState newItem // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. ModelState previousItem = newItem.pair; // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^^^ definition local54 ModelState previousItem -// ^^^^^^^ reference local53 +// ^^^^^^^^^^^^ definition local26 ModelState previousItem +// ^^^^^^^ reference local25 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. if (previousItem == null) { -// ^^^^^^^^^^^^ reference local54 +// ^^^^^^^^^^^^ reference local26 continue; } // We use equals when we know the models are immutable and available, otherwise we have to // rely on the stored hashCode boolean modelChanged; -// ^^^^^^^^^^^^ definition local55 boolean modelChanged +// ^^^^^^^^^^^^ definition local27 boolean modelChanged if (immutableModels) { // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#immutableModels. // Make sure that the old model hasn't changed, otherwise comparing it with the new one // won't be accurate. if (previousItem.model.isDebugValidationEnabled()) { -// ^^^^^^^^^^^^ reference local54 +// ^^^^^^^^^^^^ reference local26 // ^^^^^ reference com/airbnb/epoxy/ModelState#model. // ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#isDebugValidationEnabled(). previousItem.model -// ^^^^^^^^^^^^ reference local54 +// ^^^^^^^^^^^^ reference local26 // ^^^^^ reference com/airbnb/epoxy/ModelState#model. .validateStateHasNotChangedSinceAdded("Model was changed before it could be diffed.", // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#validateStateHasNotChangedSinceAdded(). previousItem.position); -// ^^^^^^^^^^^^ reference local54 +// ^^^^^^^^^^^^ reference local26 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. } modelChanged = !previousItem.model.equals(newItem.model); -// ^^^^^^^^^^^^ reference local55 -// ^^^^^^^^^^^^ reference local54 +// ^^^^^^^^^^^^ reference local27 +// ^^^^^^^^^^^^ reference local26 // ^^^^^ reference com/airbnb/epoxy/ModelState#model. // ^^^^^^ reference com/airbnb/epoxy/EpoxyModel#equals(). -// ^^^^^^^ reference local53 +// ^^^^^^^ reference local25 // ^^^^^ reference com/airbnb/epoxy/ModelState#model. } else { modelChanged = previousItem.hashCode != newItem.hashCode; -// ^^^^^^^^^^^^ reference local55 -// ^^^^^^^^^^^^ reference local54 +// ^^^^^^^^^^^^ reference local27 +// ^^^^^^^^^^^^ reference local26 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#hashCode. -// ^^^^^^^ reference local53 +// ^^^^^^^ reference local25 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#hashCode. } if (modelChanged) { -// ^^^^^^^^^^^^ reference local55 +// ^^^^^^^^^^^^ reference local27 helper.update(newItem.position, previousItem.model); -// ^^^^^^ reference local52 +// ^^^^^^ reference local24 // ^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#update(+1). -// ^^^^^^^ reference local53 +// ^^^^^^^ reference local25 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^^^ reference local54 +// ^^^^^^^^^^^^ reference local26 // ^^^^^ reference com/airbnb/epoxy/ModelState#model. } } @@ -815,31 +661,31 @@ private void collectChanges(UpdateOpHelper helper) { private void collectMoves(UpdateOpHelper helper) { // ^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#collectMoves(). private void collectMoves(UpdateOpHelper helper) // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper# -// ^^^^^^ definition local56 UpdateOpHelper helper +// ^^^^^^ definition local28 UpdateOpHelper helper // This walks through both the new and old list simultaneous and checks for position changes. Iterator oldItemIterator = oldStateList.iterator(); // ^^^^^^^^ reference java/util/Iterator# // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^^^^^^ definition local57 Iterator oldItemIterator +// ^^^^^^^^^^^^^^^ definition local29 Iterator oldItemIterator // ^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#oldStateList. // ^^^^^^^^ reference java/util/ArrayList#iterator(). ModelState nextOldItem = null; // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^^^^ definition local58 ModelState nextOldItem +// ^^^^^^^^^^^ definition local30 ModelState nextOldItem for (ModelState newItem : currentStateList) { // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^ definition local59 ModelState newItem +// ^^^^^^^ definition local31 ModelState newItem // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#currentStateList. if (newItem.pair == null) { -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // This item was inserted. However, insertions are done at the item's final position, and // aren't smart about inserting at a different position to take future moves into account. // As the old state list is updated to reflect moves, it needs to also consider insertions // affected by those moves in order for the final change set to be correct if (helper.moves.isEmpty()) { -// ^^^^^^ reference local56 +// ^^^^^^ reference local28 // ^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#moves. // ^^^^^^^ reference java/util/List#isEmpty(). // There have been no moves, so the item is still at it's correct position @@ -850,7 +696,7 @@ private void collectMoves(UpdateOpHelper helper) { // (for optimization purposes), but we can create a pair for this item to // track its position in the old list and move it back to its final position if necessary newItem.pairWithSelf(); -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelState#pairWithSelf(). } } @@ -866,129 +712,129 @@ private void collectMoves(UpdateOpHelper helper) { // already iterated through are guaranteed to have their pair // be already in the right spot, which won't be affected by future MOVEs. if (nextOldItem == null) { -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 nextOldItem = getNextItemWithPair(oldItemIterator); -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#getNextItemWithPair(). -// ^^^^^^^^^^^^^^^ reference local57 +// ^^^^^^^^^^^^^^^ reference local29 // We've already iterated through all old items and moved each // item once. However, subsequent moves may have shifted an item out of // its correct space once it was already moved. We finish // iterating through all the new items to ensure everything is still correct if (nextOldItem == null) { -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 nextOldItem = newItem.pair; -// ^^^^^^^^^^^ reference local58 -// ^^^^^^^ reference local59 +// ^^^^^^^^^^^ reference local30 +// ^^^^^^^ reference local31 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. } } while (nextOldItem != null) { -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // Make sure the positions are updated to the latest // move operations before we calculate the next move updateItemPosition(newItem.pair, helper.moves); // ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#updateItemPosition(). -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. -// ^^^^^^ reference local56 +// ^^^^^^ reference local28 // ^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#moves. updateItemPosition(nextOldItem, helper.moves); // ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#updateItemPosition(). -// ^^^^^^^^^^^ reference local58 -// ^^^^^^ reference local56 +// ^^^^^^^^^^^ reference local30 +// ^^^^^^ reference local28 // ^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#moves. // The item is the same and its already in the correct place if (newItem.id == nextOldItem.id && newItem.position == nextOldItem.position) { -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^ reference com/airbnb/epoxy/ModelState#id. -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^ reference com/airbnb/epoxy/ModelState#id. -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. nextOldItem = null; -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 break; } int newItemDistance = newItem.pair.position - newItem.position; -// ^^^^^^^^^^^^^^^ definition local60 int newItemDistance -// ^^^^^^^ reference local59 +// ^^^^^^^^^^^^^^^ definition local32 int newItemDistance +// ^^^^^^^ reference local31 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. int oldItemDistance = nextOldItem.pair.position - nextOldItem.position; -// ^^^^^^^^^^^^^^^ definition local61 int oldItemDistance -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^^^^^ definition local33 int oldItemDistance +// ^^^^^^^^^^^ reference local30 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. // Both items are already in the correct position if (newItemDistance == 0 && oldItemDistance == 0) { -// ^^^^^^^^^^^^^^^ reference local60 -// ^^^^^^^^^^^^^^^ reference local61 +// ^^^^^^^^^^^^^^^ reference local32 +// ^^^^^^^^^^^^^^^ reference local33 nextOldItem = null; -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 break; } if (oldItemDistance > newItemDistance) { -// ^^^^^^^^^^^^^^^ reference local61 -// ^^^^^^^^^^^^^^^ reference local60 +// ^^^^^^^^^^^^^^^ reference local33 +// ^^^^^^^^^^^^^^^ reference local32 helper.move(nextOldItem.position, nextOldItem.pair.position); -// ^^^^^^ reference local56 +// ^^^^^^ reference local28 // ^^^^ reference com/airbnb/epoxy/UpdateOpHelper#move(). -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. nextOldItem.position = nextOldItem.pair.position; -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. nextOldItem.lastMoveOp = helper.getNumMoves(); -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState#lastMoveOp. -// ^^^^^^ reference local56 +// ^^^^^^ reference local28 // ^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#getNumMoves(). nextOldItem = getNextItemWithPair(oldItemIterator); -// ^^^^^^^^^^^ reference local58 +// ^^^^^^^^^^^ reference local30 // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/DiffHelper#getNextItemWithPair(). -// ^^^^^^^^^^^^^^^ reference local57 +// ^^^^^^^^^^^^^^^ reference local29 } else { helper.move(newItem.pair.position, newItem.position); -// ^^^^^^ reference local56 +// ^^^^^^ reference local28 // ^^^^ reference com/airbnb/epoxy/UpdateOpHelper#move(). -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. newItem.pair.position = newItem.position; -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. newItem.pair.lastMoveOp = helper.getNumMoves(); -// ^^^^^^^ reference local59 +// ^^^^^^^ reference local31 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState#lastMoveOp. -// ^^^^^^ reference local56 +// ^^^^^^ reference local28 // ^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOpHelper#getNumMoves(). break; } @@ -1004,64 +850,64 @@ private void collectMoves(UpdateOpHelper helper) { private void updateItemPosition(ModelState item, List moveOps) { // ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#updateItemPosition(). private void updateItemPosition(ModelState item, List moveOps) // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^ definition local62 ModelState item +// ^^^^ definition local34 ModelState item // ^^^^ reference java/util/List# // ^^^^^^^^ reference com/airbnb/epoxy/UpdateOp# -// ^^^^^^^ definition local63 List moveOps +// ^^^^^^^ definition local35 List moveOps int size = moveOps.size(); -// ^^^^ definition local64 int size -// ^^^^^^^ reference local63 +// ^^^^ definition local36 int size +// ^^^^^^^ reference local35 // ^^^^ reference java/util/List#size(). for (int i = item.lastMoveOp; i < size; i++) { -// ^ definition local65 int i -// ^^^^ reference local62 +// ^ definition local37 int i +// ^^^^ reference local34 // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState#lastMoveOp. -// ^ reference local65 -// ^^^^ reference local64 -// ^ reference local65 +// ^ reference local37 +// ^^^^ reference local36 +// ^ reference local37 UpdateOp moveOp = moveOps.get(i); // ^^^^^^^^ reference com/airbnb/epoxy/UpdateOp# -// ^^^^^^ definition local66 UpdateOp moveOp -// ^^^^^^^ reference local63 +// ^^^^^^ definition local38 UpdateOp moveOp +// ^^^^^^^ reference local35 // ^^^ reference java/util/List#get(). -// ^ reference local65 +// ^ reference local37 int fromPosition = moveOp.positionStart; -// ^^^^^^^^^^^^ definition local67 int fromPosition -// ^^^^^^ reference local66 +// ^^^^^^^^^^^^ definition local39 int fromPosition +// ^^^^^^ reference local38 // ^^^^^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#positionStart. int toPosition = moveOp.itemCount; -// ^^^^^^^^^^ definition local68 int toPosition -// ^^^^^^ reference local66 +// ^^^^^^^^^^ definition local40 int toPosition +// ^^^^^^ reference local38 // ^^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#itemCount. if (item.position > fromPosition && item.position <= toPosition) { -// ^^^^ reference local62 +// ^^^^ reference local34 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^^^ reference local67 -// ^^^^ reference local62 +// ^^^^^^^^^^^^ reference local39 +// ^^^^ reference local34 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^ reference local68 +// ^^^^^^^^^^ reference local40 item.position--; -// ^^^^ reference local62 +// ^^^^ reference local34 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. } else if (item.position < fromPosition && item.position >= toPosition) { -// ^^^^ reference local62 +// ^^^^ reference local34 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^^^ reference local67 -// ^^^^ reference local62 +// ^^^^^^^^^^^^ reference local39 +// ^^^^ reference local34 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. -// ^^^^^^^^^^ reference local68 +// ^^^^^^^^^^ reference local40 item.position++; -// ^^^^ reference local62 +// ^^^^ reference local34 // ^^^^^^^^ reference com/airbnb/epoxy/ModelState#position. } } item.lastMoveOp = size; -// ^^^^ reference local62 +// ^^^^ reference local34 // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState#lastMoveOp. -// ^^^^ reference local64 +// ^^^^ reference local36 } /** @@ -1074,29 +920,29 @@ private ModelState getNextItemWithPair(Iterator iterator) { // ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/DiffHelper#getNextItemWithPair(). @Nullable private ModelState getNextItemWithPair(Iterator iterator) // ^^^^^^^^ reference java/util/Iterator# // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^ definition local69 Iterator iterator +// ^^^^^^^^ definition local41 Iterator iterator ModelState nextItem = null; // ^^^^^^^^^^ reference com/airbnb/epoxy/ModelState# -// ^^^^^^^^ definition local70 ModelState nextItem +// ^^^^^^^^ definition local42 ModelState nextItem while (nextItem == null && iterator.hasNext()) { -// ^^^^^^^^ reference local70 -// ^^^^^^^^ reference local69 +// ^^^^^^^^ reference local42 +// ^^^^^^^^ reference local41 // ^^^^^^^ reference java/util/Iterator#hasNext(). nextItem = iterator.next(); -// ^^^^^^^^ reference local70 -// ^^^^^^^^ reference local69 +// ^^^^^^^^ reference local42 +// ^^^^^^^^ reference local41 // ^^^^ reference java/util/Iterator#next(). if (nextItem.pair == null) { -// ^^^^^^^^ reference local70 +// ^^^^^^^^ reference local42 // ^^^^ reference com/airbnb/epoxy/ModelState#pair. // Skip this one and go on to the next nextItem = null; -// ^^^^^^^^ reference local70 +// ^^^^^^^^ reference local42 } } return nextItem; -// ^^^^^^^^ reference local70 +// ^^^^^^^^ reference local42 } } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/DiffResult.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/DiffResult.java index e2f8c13d..573d23c1 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/DiffResult.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/DiffResult.java @@ -184,7 +184,6 @@ public void dispatchTo(Adapter adapter) { // ^^^^^^^ definition local9 unresolved_type adapter dispatchTo(new AdapterListUpdateCallback(adapter)); // ^^^^^^^^^^ reference com/airbnb/epoxy/DiffResult#dispatchTo(). -// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference ``# // ^^^^^^^ reference local9 } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyAsyncUtil.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyAsyncUtil.java index 9cbfc235..f9badfe0 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyAsyncUtil.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyAsyncUtil.java @@ -107,7 +107,6 @@ public static Handler createHandler(Looper looper, boolean async) { if (!async) { // ^^^^^ reference local1 return new Handler(looper); -// ^^^^^^^ reference ``# // ^^^^^^ reference local0 } @@ -148,7 +147,6 @@ public static Handler createHandler(Looper looper, boolean async) { } return new Handler(looper); -// ^^^^^^^ reference ``# // ^^^^^^ reference local0 } @@ -163,7 +161,6 @@ public static Looper buildBackgroundLooper(String threadName) { HandlerThread handlerThread = new HandlerThread(threadName); // ^^^^^^^^^^^^^ reference _root_/ // ^^^^^^^^^^^^^ definition local4 unresolved_type handlerThread -// ^^^^^^^^^^^^^ reference ``# // ^^^^^^^^^^ reference local3 handlerThread.start(); // ^^^^^^^^^^^^^ reference local4 diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyAttribute.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyAttribute.java deleted file mode 100644 index c10a0b6b..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyAttribute.java +++ /dev/null @@ -1,134 +0,0 @@ - -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * Used to annotate fields on EpoxyModel classes in order to generate a subclass of that model with - * getters, setters, equals, and hashcode for the annotated fields. - */ -@Target(ElementType.FIELD) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^ reference java/lang/annotation/ElementType#FIELD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface EpoxyAttribute { -// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute# @Target(ElementType.FIELD) @Retention(RetentionPolicy.CLASS) public @interface EpoxyAttribute - /** - * Options that can be included on the attribute to affect how the model's generated class is - * created. - */ - enum Option { -// ^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#Option# public enum Option -// ^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#Option#``(). private Option() - /** - * A getter is generated for this attribute by default. Add this option to prevent a getter from - * being generated. - */ - NoGetter, -// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#Option#NoGetter. Option.NoGetter /* ordinal 0 */ - /** - * A setter is generated for this attribute by default. Add this option to prevent a setter from - * being generated. - */ - NoSetter, -// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#Option#NoSetter. Option.NoSetter /* ordinal 1 */ - /** - * By default every attribute's hashCode and equals method is called when determining the - * model's state. This option can be used to exclude an attribute's hashCode/equals from - * contributing to the state. - *

- * This is useful for objects that may change without actually changing the model's state. A - * common case is an anonymous click listener that gets recreated with every bind call. - *

- * When this is used, the attribute will affect the model state solely based on whether it is - * null or non null. - *

- * A good rule of thumb for whether to use this on an attribute is, "If this is the only - * attribute that changed do I still need to rebind and update the view?" If the answer if no - * then you can use this to prevent the rebind. - */ - DoNotHash, -// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#Option#DoNotHash. Option.DoNotHash /* ordinal 2 */ - /** - * This is meant to be used in conjunction with {@link PackageEpoxyConfig#requireHashCode()}. - * When that is enabled every attribute must implement hashCode/equals. However, there are some - * valid cases where the attribute type does not implement hashCode/equals, but it should still - * be hashed at runtime and contribute to the model's state. Use this option on an attribute in - * that case to tell the processor to let it pass the hashCode/equals validation. - *

- * An example case is AutoValue classes, where the generated class correctly implements - * hashCode/equals at runtime. - *

- * If you use this it is your responsibility to ensure that the object assigned to the attribute - * at runtime correctly implements hashCode/equals. If you don't want the attribute to - * contribute to model state you should use {@link Option#DoNotHash} instead. -// ^^^^^^ reference com/airbnb/epoxy/EpoxyAttribute#Option#``(). -// ^^^^^^ reference com/airbnb/epoxy/EpoxyAttribute#Option#``(). -// ^^^^^^ reference com/airbnb/epoxy/EpoxyAttribute#Option#``(). - */ - IgnoreRequireHashCode, -// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#Option#IgnoreRequireHashCode. Option.IgnoreRequireHashCode /* ordinal 3 */ - /** - * This attribute is used in {@link Object#toString()} implementation by default. - * Add this option to prevent this attribute being used in {@link Object#toString()}. - */ - DoNotUseInToString -// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#Option#DoNotUseInToString. Option.DoNotUseInToString /* ordinal 4 */ - } - - /** Specify any {@link Option} values that should be used when generating the model class. */ -// ^^^^^^ reference com/airbnb/epoxy/EpoxyAttribute#Option#``(). -// ^^^^^^ reference com/airbnb/epoxy/EpoxyAttribute#Option#``(). - Option[] value() default {}; -//^^^^^^ reference com/airbnb/epoxy/EpoxyAttribute#Option# -// ^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#value(). public abstract Option[] value() - - /** - * Whether or not to include this attribute in equals and hashCode calculations. - *

- * It may be useful to disable this for objects that get recreated without the underlying data - * changing such as a click listener that gets created inline in every bind call. - * - * @deprecated Use {@link Option#DoNotHash} instead. - */ - @Deprecated -// ^^^^^^^^^^ reference java/lang/Deprecated# - boolean hash() default true; -// ^^^^ definition com/airbnb/epoxy/EpoxyAttribute#hash(). @Deprecated public abstract boolean hash() - - /** - * Whether or not to generate setter for this attribute. - *

- * It may be useful to disable this for attribute which can be immutable and doesn't require - * setter. - * - * @deprecated Use {@link Option#NoSetter} instead. - */ - @Deprecated -// ^^^^^^^^^^ reference java/lang/Deprecated# - boolean setter() default true; -// ^^^^^^ definition com/airbnb/epoxy/EpoxyAttribute#setter(). @Deprecated public abstract boolean setter() -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyControllerAdapter.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyControllerAdapter.java index b03f9d5a..6175f6b1 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyControllerAdapter.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyControllerAdapter.java @@ -498,7 +498,7 @@ void moveModel(int fromPosition, int toPosition) { updatedList.add(toPosition, updatedList.remove(fromPosition)); // ^^^^^^^^^^^ reference local30 -// ^^^ reference java/util/ArrayList#add(+2). +// ^^^ reference java/util/ArrayList#add(+1). // ^^^^^^^^^^ reference local29 // ^^^^^^^^^^^ reference local30 // ^^^^^^ reference java/util/ArrayList#remove(). @@ -573,49 +573,19 @@ void notifyModelChanged(int position) { // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# // ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyControllerAdapter#ITEM_CALLBACK. private static final unresolved_type ITEM_CALLBACK new ItemCallback>() { -// ^^^^^^^^^^^^ reference _root_/ -// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# @Override -// ^^^^^^^^ reference java/lang/Override# public boolean areItemsTheSame(EpoxyModel oldItem, EpoxyModel newItem) { -// ^^^^^^^^^^^^^^^ definition local36 @Override public boolean areItemsTheSame(EpoxyModel oldItem, EpoxyModel newItem) -// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^ definition local39 EpoxyModel oldItem -// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^ definition local40 EpoxyModel newItem return oldItem.id() == newItem.id(); -// ^^^^^^^ reference local39 -// ^^ reference com/airbnb/epoxy/EpoxyModel#id(). -// ^^^^^^^ reference local40 -// ^^ reference com/airbnb/epoxy/EpoxyModel#id(). } @Override -// ^^^^^^^^ reference java/lang/Override# public boolean areContentsTheSame(EpoxyModel oldItem, EpoxyModel newItem) { -// ^^^^^^^^^^^^^^^^^^ definition local37 @Override public boolean areContentsTheSame(EpoxyModel oldItem, EpoxyModel newItem) -// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^ definition local41 EpoxyModel oldItem -// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^ definition local42 EpoxyModel newItem return oldItem.equals(newItem); -// ^^^^^^^ reference local41 -// ^^^^^^ reference com/airbnb/epoxy/EpoxyModel#equals(). -// ^^^^^^^ reference local42 } @Override -// ^^^^^^^^ reference java/lang/Override# public Object getChangePayload(EpoxyModel oldItem, EpoxyModel newItem) { -// ^^^^^^ reference java/lang/Object# -// ^^^^^^^^^^^^^^^^ definition local38 @Override public Object getChangePayload(EpoxyModel oldItem, EpoxyModel newItem) -// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^ definition local43 EpoxyModel oldItem -// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel# -// ^^^^^^^ definition local44 EpoxyModel newItem return new DiffPayload(oldItem); -// ^^^^^^^^^^^ reference com/airbnb/epoxy/DiffPayload#``(+1). -// ^^^^^^^ reference local43 } }; @@ -627,11 +597,11 @@ public Object getChangePayload(EpoxyModel oldItem, EpoxyModel newItem) { // ^^^^^^^^ reference java/lang/Override# public boolean isStickyHeader(int position) { // ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyControllerAdapter#isStickyHeader(). @Override public boolean isStickyHeader(int position) -// ^^^^^^^^ definition local45 int position +// ^^^^^^^^ definition local35 int position return epoxyController.isStickyHeader(position); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyControllerAdapter#epoxyController. // ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyController#isStickyHeader(). -// ^^^^^^^^ reference local45 +// ^^^^^^^^ reference local35 } /** @@ -644,11 +614,11 @@ public void setupStickyHeaderView(@NotNull View stickyHeader) { // ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyControllerAdapter#setupStickyHeaderView(). @Override public void setupStickyHeaderView(unresolved_type stickyHeader) // ^^^^^^^ reference org/jetbrains/annotations/NotNull# // ^^^^ reference _root_/ -// ^^^^^^^^^^^^ definition local46 @NotNull unresolved_type stickyHeader +// ^^^^^^^^^^^^ definition local36 @NotNull unresolved_type stickyHeader epoxyController.setupStickyHeaderView(stickyHeader); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyControllerAdapter#epoxyController. // ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyController#setupStickyHeaderView(). -// ^^^^^^^^^^^^ reference local46 +// ^^^^^^^^^^^^ reference local36 } /** @@ -661,10 +631,10 @@ public void teardownStickyHeaderView(@NotNull View stickyHeader) { // ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyControllerAdapter#teardownStickyHeaderView(). @Override public void teardownStickyHeaderView(unresolved_type stickyHeader) // ^^^^^^^ reference org/jetbrains/annotations/NotNull# // ^^^^ reference _root_/ -// ^^^^^^^^^^^^ definition local47 @NotNull unresolved_type stickyHeader +// ^^^^^^^^^^^^ definition local37 @NotNull unresolved_type stickyHeader epoxyController.teardownStickyHeaderView(stickyHeader); // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyControllerAdapter#epoxyController. // ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyController#teardownStickyHeaderView(). -// ^^^^^^^^^^^^ reference local47 +// ^^^^^^^^^^^^ reference local37 } } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyDataBindingLayouts.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyDataBindingLayouts.java deleted file mode 100644 index e02e4b26..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyDataBindingLayouts.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -import androidx.annotation.LayoutRes; -// ^^^^^^^^ reference androidx/ -// ^^^^^^^^^^ reference androidx/annotation/ -// ^^^^^^^^^ reference androidx/annotation/LayoutRes# - -/** - * Used to specify a list of databinding layout resources that you want EpoxyModels generated for. - * The models will be generated in the same package as this annotation. Every layout must be a valid - * databinding layout. The name of the generated model will be based on the layout resource name. - *

- * The layouts must not specify a custom databinding class name or package via the - * class="com.example.CustomClassName" override in the layout xml. - *

- * Alternatively you can use {@link EpoxyDataBindingPattern} to avoid explicitly declaring each - * layout. - */ -@Target(ElementType.TYPE) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^ reference java/lang/annotation/ElementType#TYPE. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface EpoxyDataBindingLayouts { -// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyDataBindingLayouts# @Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface EpoxyDataBindingLayouts - /** A list of databinding layout resources that should have EpoxyModel's generated for them. */ - @LayoutRes int[] value(); -// ^^^^^^^^^ reference androidx/annotation/LayoutRes# -// ^^^^^ definition com/airbnb/epoxy/EpoxyDataBindingLayouts#value(). @LayoutRes public abstract int[] value() - - /** - * If true, any variable whose type does not implement equals and hashcode will have the - * {@link EpoxyAttribute.Option#DoNotHash} behavior applied to them automatically. - *

- * This is generally helpful for listeners - other variables should almost always implement - * equals and hashcode. - *

- * For details on the nuances of this, see https://github.com/airbnb/epoxy/wiki/DoNotHash - */ - boolean enableDoNotHash() default true; -// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyDataBindingLayouts#enableDoNotHash(). public abstract boolean enableDoNotHash() -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyDataBindingPattern.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyDataBindingPattern.java deleted file mode 100644 index 52a62d54..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyDataBindingPattern.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * Used to specify a naming pattern for the databinding layouts that you want models generated for. - * Use this instead of {@link EpoxyDataBindingLayouts} to avoid having to explicitly list every - * databinding layout. - *

- * The layouts must not specify a custom databinding class name or package via the - * class="com.example.CustomClassName" override in the layout xml. - */ -@Target(ElementType.TYPE) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^ reference java/lang/annotation/ElementType#TYPE. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface EpoxyDataBindingPattern { -// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyDataBindingPattern# @Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface EpoxyDataBindingPattern - /** - * The R class used in this module (eg "com.example.app.R.class"). This is needed so Epoxy can - * look up layout files. - */ - Class rClass(); -//^^^^^ reference java/lang/Class# -// ^^^^^^ definition com/airbnb/epoxy/EpoxyDataBindingPattern#rClass(). public abstract Class rClass() - /** - * A string prefix that your databinding layouts start with. Epoxy will generate a model for each - * databinding layout whose name starts with this. - *

- * For example, if you set this prefix to "view_holder" and you have a "view_holder_header.xml" - * databinding layout, Epoxy will generate a HeaderBindingModel_ class for that layout. - */ - String layoutPrefix(); -//^^^^^^ reference java/lang/String# -// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyDataBindingPattern#layoutPrefix(). public abstract String layoutPrefix() - - /** - * If true, any variable whose type does not implement equals and hashcode will have the - * {@link EpoxyAttribute.Option#DoNotHash} behavior applied to them automatically. - *

- * This is generally helpful for listeners - other variables should almost always implement - * equals and hashcode. - *

- * For details on the nuances of this, see https://github.com/airbnb/epoxy/wiki/DoNotHash - */ - boolean enableDoNotHash() default true; -// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyDataBindingPattern#enableDoNotHash(). public abstract boolean enableDoNotHash() -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyModelClass.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyModelClass.java deleted file mode 100644 index 3adc4033..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyModelClass.java +++ /dev/null @@ -1,63 +0,0 @@ - -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -import androidx.annotation.LayoutRes; -// ^^^^^^^^ reference androidx/ -// ^^^^^^^^^^ reference androidx/annotation/ -// ^^^^^^^^^ reference androidx/annotation/LayoutRes# - -/** - * Used to annotate EpoxyModel classes in order to generate a subclass of that model with getters, - * setters, equals, and hashcode for the annotated fields, as well as other helper methods and - * boilerplate reduction. - */ -@Target(ElementType.TYPE) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^ reference java/lang/annotation/ElementType#TYPE. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface EpoxyModelClass { -// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyModelClass# @Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface EpoxyModelClass - /** - * A layout resource that should be used as the default layout for the model. If you set this you - * don't have to implement `getDefaultLayout`; it will be generated for you. - */ - @LayoutRes int layout() default 0; -// ^^^^^^^^^ reference androidx/annotation/LayoutRes# -// ^^^^^^ definition com/airbnb/epoxy/EpoxyModelClass#layout(). @LayoutRes public abstract int layout() - - /** - * If true, any layout file name that has {@link #layout()} as a prefix will be included as a - * method on the generated model. - *

- * For example, if the layout is "R.layout.my_view" then any layouts in the form of - * "R.layout.my_view_*" will result in a generated method like "with*Layout" that will apply that - * other layout instead of the default. - */ - boolean useLayoutOverloads() default false; -// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyModelClass#useLayoutOverloads(). public abstract boolean useLayoutOverloads() -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyModelGroup.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyModelGroup.java index 9178ecbc..62649500 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyModelGroup.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyModelGroup.java @@ -632,7 +632,6 @@ protected final ModelGroupHolder createNewHolder(@NonNull ViewParent parent) { // ^^^^^^^^^^ reference _root_/ // ^^^^^^ definition local65 @NonNull unresolved_type parent return new ModelGroupHolder(parent); -// ^^^^^^^^^^^^^^^^ reference ``# // ^^^^^^ reference local65 } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyRecyclerView.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyRecyclerView.kt new file mode 100644 index 00000000..04dc10c7 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyRecyclerView.kt @@ -0,0 +1,1158 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +import android.content.Context +import android.util.AttributeSet +import android.util.TypedValue +import android.view.ViewGroup +import androidx.annotation.CallSuper +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^^^^^ reference androidx/annotation/CallSuper# +import androidx.annotation.DimenRes +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^^^^ reference androidx/annotation/DimenRes# +import androidx.annotation.Dimension +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^^^^^ reference androidx/annotation/Dimension# +import androidx.annotation.Px +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^ reference androidx/annotation/Px# +import androidx.recyclerview.widget.GridLayoutManager +// ^^^^^^^^ reference androidx/ +import androidx.recyclerview.widget.LinearLayoutManager +// ^^^^^^^^ reference androidx/ +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ +import com.airbnb.epoxy.preload.EpoxyModelPreloader +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +import com.airbnb.epoxy.preload.EpoxyPreloader +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader# +import com.airbnb.epoxy.preload.PreloadErrorHandler +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# +import com.airbnb.epoxy.preload.PreloadRequestHolder +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +import com.airbnb.epoxy.preload.ViewMetadata +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +import com.airbnb.viewmodeladapter.R +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ + +/** + * A RecyclerView implementation that makes for easier integration with Epoxy. The goal of this + * class is to reduce boilerplate in setting up a RecyclerView by applying common defaults. + * Additionally, several performance optimizations are made. + * + * Improvements in this class are: + * + * 1. A single view pool is automatically shared between all [EpoxyRecyclerView] instances in + * the same activity. This should increase view recycling potential and increase performance when + * nested RecyclerViews are used. See [.initViewPool]. + * + * 2. A layout manager is automatically added with assumed defaults. See [createLayoutManager] + * + * 3. Fixed size is enabled if this view's size is MATCH_PARENT + * + * 4. If a [GridLayoutManager] is used this will automatically sync the span count with the + * [EpoxyController]. See [syncSpanCount] + * + * 5. Helper methods like [withModels], [setModels], [buildModelsWith] + * make it simpler to set up simple RecyclerViews. + * + * 6. Set an EpoxyController and build models in one step - + * [setControllerAndBuildModels] or [withModels] + * + * 7. Support for automatic item spacing. See [.setItemSpacingPx] + * + * 8. Defaults for usage as a nested recyclerview are provided in [Carousel]. + * + * 9. [setClipToPadding] is set to false by default since that behavior is commonly + * desired in a scrolling list + */ +open class EpoxyRecyclerView @JvmOverloads constructor( +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView# +// ^^^^^^^^^^^^ reference kotlin/jvm/JvmOverloads#``(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#``(). + context: Context, +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#``().(context) + attrs: AttributeSet? = null, +// ^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#``().(attrs) + defStyleAttr: Int = 0 +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#``().(defStyleAttr) +// ^^^ reference kotlin/Int# +) : RecyclerView(context, attrs, defStyleAttr) { +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#``().(context) +// ^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#``().(attrs) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#``().(defStyleAttr) + + protected val spacingDecorator = EpoxyItemSpacingDecorator() +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#spacingDecorator. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getSpacingDecorator(). + + private var epoxyController: EpoxyController? = null +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + + /** + * The adapter that was removed because the RecyclerView was detached from the window. We save it + * so we can reattach it if the RecyclerView is reattached to window. This allows us to + * automatically restore the adapter, without risking leaking the RecyclerView if this view is + * never used again. + * + * Since the adapter is removed this recyclerview won't get adapter changes, but that's fine since + * the view isn't attached to window and isn't being drawn. + * + * This reference is cleared if another adapter is manually set, so we don't override the user's + * adapter choice. + * + * @see .setRemoveAdapterWhenDetachedFromWindow + */ + private var removedAdapter: RecyclerView.Adapter<*>? = null +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#removedAdapter. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getRemovedAdapter(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setRemovedAdapter(). + + private var removeAdapterWhenDetachedFromWindow = true +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#removeAdapterWhenDetachedFromWindow. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getRemoveAdapterWhenDetachedFromWindow(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setRemoveAdapterWhenDetachedFromWindow(). + + private var delayMsWhenRemovingAdapterOnDetach: Int = DEFAULT_ADAPTER_REMOVAL_DELAY_MS +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#delayMsWhenRemovingAdapterOnDetach. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getDelayMsWhenRemovingAdapterOnDetach(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setDelayMsWhenRemovingAdapterOnDetach(). +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#Companion#DEFAULT_ADAPTER_REMOVAL_DELAY_MS. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#Companion#getDEFAULT_ADAPTER_REMOVAL_DELAY_MS(). + + /** + * Tracks whether [.removeAdapterRunnable] has been posted to run + * later. This lets us know if we should cancel the runnable at certain times. This removes the + * overhead of needlessly attempting to remove the runnable when it isn't posted. + */ + private var isRemoveAdapterRunnablePosted: Boolean = false +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#isRemoveAdapterRunnablePosted. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getIsRemoveAdapterRunnablePosted(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setIsRemoveAdapterRunnablePosted(). +// ^^^^^^^ reference kotlin/Boolean# + private val removeAdapterRunnable = Runnable { +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#removeAdapterRunnable. +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getRemoveAdapterRunnable(). +// ^^^^^^^^ reference java/lang/Runnable# + if (isRemoveAdapterRunnablePosted) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#isRemoveAdapterRunnablePosted. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getIsRemoveAdapterRunnablePosted(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setIsRemoveAdapterRunnablePosted(). + // Canceling a runnable doesn't work accurately when a view switches between + // attached/detached, so we manually check that this should still be run + isRemoveAdapterRunnablePosted = false +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#isRemoveAdapterRunnablePosted. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getIsRemoveAdapterRunnablePosted(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setIsRemoveAdapterRunnablePosted(). + removeAdapter() +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removeAdapter(). + } + } + + private val preloadScrollListeners: MutableList> = mutableListOf() +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#preloadScrollListeners. +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getPreloadScrollListeners(). +// ^^^^^^^^^^^ reference kotlin/collections/MutableList# +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader# +// ^^^^^^^^^^^^^ reference kotlin/collections/CollectionsKt#mutableListOf(). + + private val preloadConfigs: MutableList> = mutableListOf() +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#preloadConfigs. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#getPreloadConfigs(). +// ^^^^^^^^^^^ reference kotlin/collections/MutableList# +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig# +// ^^^^^^^^^^^^^ reference kotlin/collections/CollectionsKt#mutableListOf(). + + private class PreloadConfig, U : ViewMetadata?, P : PreloadRequestHolder>( +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig# +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#``(). +// ^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#[T] +// ^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# + val maxPreload: Int, +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#maxPreload. +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getMaxPreload(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#``().(maxPreload) +// ^^^ reference kotlin/Int# + val errorHandler: PreloadErrorHandler, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#errorHandler. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getErrorHandler(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#``().(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# + val preloader: EpoxyModelPreloader, +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#preloader. +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getPreloader(). +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#``().(preloader) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#[T] +// ^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#[U] +// ^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#[P] + val requestHolderFactory: () -> P +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#requestHolderFactory. +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getRequestHolderFactory(). +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#``().(requestHolderFactory) +// ^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#[P] + ) + + /** + * Setup a preloader to fetch content for a model's view before it is bound. + * This can be called multiple times if you would like to add separate preloaders + * for different models or content types. + * + * Preloaders are automatically attached and run, and are updated if the adapter changes. + * + * @param maxPreloadDistance How many items to prefetch ahead of the last bound item + * @param errorHandler Called when the preloader encounters an exception. We recommend throwing an + * exception in debug builds, and logging an error in production. + * @param preloader Describes how view content for the EpoxyModel should be preloaded + * @param requestHolderFactory Should create and return a new [PreloadRequestHolder] each time it is invoked + */ + fun , U : ViewMetadata?, P : PreloadRequestHolder> addPreloader( +// ^ definition com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().[T] +// ^ definition com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#addPreloader(). + maxPreloadDistance: Int = 3, +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().(maxPreloadDistance) +// ^^^ reference kotlin/Int# + errorHandler: PreloadErrorHandler, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# + preloader: EpoxyModelPreloader, +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().(preloader) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().[T] +// ^ reference com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().[U] +// ^ reference com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().[P] + requestHolderFactory: () -> P +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().(requestHolderFactory) +// ^ reference com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().[P] + ) { + preloadConfigs.add( +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#preloadConfigs. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getPreloadConfigs(). +// ^^^ reference kotlin/collections/MutableList#add(). + PreloadConfig( +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#``(). + maxPreloadDistance, +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().(maxPreloadDistance) + errorHandler, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().(errorHandler) + preloader, +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().(preloader) + requestHolderFactory +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#addPreloader().(requestHolderFactory) + ) + ) + + updatePreloaders() +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#updatePreloaders(). + } + + /** + * Clears all preloaders added with [addPreloader] + */ + fun clearPreloaders() { +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#clearPreloaders(). + preloadConfigs.clear() +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#preloadConfigs. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getPreloadConfigs(). +// ^^^^^ reference kotlin/collections/MutableList#clear(). + updatePreloaders() +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#updatePreloaders(). + } + + private fun updatePreloaders() { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#updatePreloaders(). + preloadScrollListeners.forEach { removeOnScrollListener(it) } +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#preloadScrollListeners. +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getPreloadScrollListeners(). +// ^^^^^^^ reference kotlin/collections/CollectionsKt#forEach(+10). +// ^^ reference local0 + preloadScrollListeners.clear() +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#preloadScrollListeners. +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getPreloadScrollListeners(). +// ^^^^^ reference kotlin/collections/MutableList#clear(). + val currAdapter = adapter ?: return +// ^^^^^^^^^^^ definition local1 + + preloadConfigs.forEach { preloadConfig -> +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#preloadConfigs. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getPreloadConfigs(). +// ^^^^^^^ reference kotlin/collections/CollectionsKt#forEach(+10). +// ^^^^^^^^^^^^^ definition local2 + + if (currAdapter is EpoxyAdapter) { +// ^^^^^^^^^^^ reference local1 + EpoxyPreloader.with( +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader# + currAdapter, +// ^^^^^^^^^^^ reference local1 + preloadConfig.requestHolderFactory, +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#requestHolderFactory. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getRequestHolderFactory(). + preloadConfig.errorHandler, +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#errorHandler. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getErrorHandler(). + preloadConfig.maxPreload, +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#maxPreload. +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getMaxPreload(). + listOf(preloadConfig.preloader) +// ^^^^^^ reference kotlin/collections/CollectionsKt#listOf(). +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#preloader. +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getPreloader(). + ) + } else { + epoxyController?.let { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + EpoxyPreloader.with( +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader# + it, + preloadConfig.requestHolderFactory, +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#requestHolderFactory. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getRequestHolderFactory(). + preloadConfig.errorHandler, +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#errorHandler. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getErrorHandler(). + preloadConfig.maxPreload, +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#maxPreload. +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getMaxPreload(). + listOf(preloadConfig.preloader) +// ^^^^^^ reference kotlin/collections/CollectionsKt#listOf(). +// ^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#preloader. +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#PreloadConfig#getPreloader(). + ) + } + }?.let { + preloadScrollListeners.add(it) +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#preloadScrollListeners. +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getPreloadScrollListeners(). +// ^^^ reference kotlin/collections/MutableList#add(). + addOnScrollListener(it) + } + } + } + + /** + * If set to true, any adapter set on this recyclerview will be removed when this view is detached + * from the window. This is useful to prevent leaking a reference to this RecyclerView. This is + * useful in cases where the same adapter can be used across multiple views (views which can be + * destroyed and recreated), such as with fragments. In that case the adapter is not necessarily + * cleared from previous RecyclerViews, so the adapter will continue to hold a reference to those + * views and leak them. More details at https://github.com/airbnb/epoxy/wiki/Avoiding-Memory-Leaks#parent-view + * + * The default is true, but you can disable this if you don't want your adapter detached + * automatically. + * + * If the adapter is removed via this setting, it will be re-set on the RecyclerView if the + * RecyclerView is re-attached to the window at a later point. + */ + fun setRemoveAdapterWhenDetachedFromWindow(removeAdapterWhenDetachedFromWindow: Boolean) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setRemoveAdapterWhenDetachedFromWindow(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setRemoveAdapterWhenDetachedFromWindow().(removeAdapterWhenDetachedFromWindow) +// ^^^^^^^ reference kotlin/Boolean# + this.removeAdapterWhenDetachedFromWindow = removeAdapterWhenDetachedFromWindow +// ^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removeAdapterWhenDetachedFromWindow. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getRemoveAdapterWhenDetachedFromWindow(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setRemoveAdapterWhenDetachedFromWindow(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setRemoveAdapterWhenDetachedFromWindow().(removeAdapterWhenDetachedFromWindow) + } + + /** + * If [.setRemoveAdapterWhenDetachedFromWindow] is set to true, this is the delay + * in milliseconds between when [.onDetachedFromWindow] is called and when the adapter is + * actually removed. + * + * By default a delay of {@value #DEFAULT_ADAPTER_REMOVAL_DELAY_MS} ms is used so that view + * transitions can complete before the adapter is removed. Otherwise if the adapter is removed + * before transitions finish it can clear the screen and break the transition. A notable case is + * fragment transitions, in which the fragment view is detached from window before the transition + * ends. + */ + fun setDelayMsWhenRemovingAdapterOnDetach(delayMsWhenRemovingAdapterOnDetach: Int) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setDelayMsWhenRemovingAdapterOnDetach(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setDelayMsWhenRemovingAdapterOnDetach().(delayMsWhenRemovingAdapterOnDetach) +// ^^^ reference kotlin/Int# + this.delayMsWhenRemovingAdapterOnDetach = delayMsWhenRemovingAdapterOnDetach +// ^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#delayMsWhenRemovingAdapterOnDetach. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getDelayMsWhenRemovingAdapterOnDetach(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setDelayMsWhenRemovingAdapterOnDetach(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setDelayMsWhenRemovingAdapterOnDetach().(delayMsWhenRemovingAdapterOnDetach) + } + + init { + + if (attrs != null) { +// ^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#``().(attrs) + val a = context.obtainStyledAttributes( +// ^ definition local3 +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#``().(context) + attrs, R.styleable.EpoxyRecyclerView, +// ^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#``().(attrs) + defStyleAttr, 0 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#``().(defStyleAttr) + ) + setItemSpacingPx( +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingPx(). + a.getDimensionPixelSize( +// ^ reference local3 + R.styleable.EpoxyRecyclerView_itemSpacing, + 0 + ) + ) + a.recycle() +// ^ reference local3 + } + + init() +// ^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#init(). + } + + @CallSuper +// ^^^^^^^^^ reference androidx/annotation/CallSuper#``(). + protected open fun init() { +// ^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#init(). + clipToPadding = false + initViewPool() +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#initViewPool(). + } + + /** + * Get or create a view pool to use for this RecyclerView. By default the same pool is shared for + * all [EpoxyRecyclerView] usages in the same Activity. + * + * @see .createViewPool + * @see .shouldShareViewPoolAcrossContext + */ + private fun initViewPool() { +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#initViewPool(). + if (!shouldShareViewPoolAcrossContext()) { +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#shouldShareViewPoolAcrossContext(). + setRecycledViewPool(createViewPool()) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#createViewPool(). + return + } + + setRecycledViewPool( + ACTIVITY_RECYCLER_POOL.getPool( +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#Companion#ACTIVITY_RECYCLER_POOL. +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#Companion#getACTIVITY_RECYCLER_POOL(). +// ^^^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#getPool(). + context + ) { createViewPool() }.viewPool +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#createViewPool(). +// ^^^^^^^^ reference com/airbnb/epoxy/PoolReference#viewPool. +// ^^^^^^^^ reference com/airbnb/epoxy/PoolReference#getViewPool(). + ) + } + + /** + * Create a new instance of a view pool to use with this recyclerview. By default a [ ] is used. + */ + protected open fun createViewPool(): RecyclerView.RecycledViewPool { +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#createViewPool(). + return UnboundedViewPool() +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#``(). + } + + /** + * To maximize view recycling by default we share the same view pool across all instances in the same Activity. This behavior can be disabled by returning + * false here. + */ + open fun shouldShareViewPoolAcrossContext(): Boolean { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#shouldShareViewPoolAcrossContext(). +// ^^^^^^^ reference kotlin/Boolean# + return true + } + + override fun setLayoutParams(params: ViewGroup.LayoutParams) { +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setLayoutParams(). +// ^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setLayoutParams().(params) + val isFirstParams = layoutParams == null +// ^^^^^^^^^^^^^ definition local4 + super.setLayoutParams(params) +// ^^^^^ reference kotlin/Any# +// ^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setLayoutParams().(params) + + if (isFirstParams) { +// ^^^^^^^^^^^^^ reference local4 + // Set a default layout manager if one was not set via xml + // We need layout params for this to guess at the right size and type + if (layoutManager == null) { + layoutManager = createLayoutManager() +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#createLayoutManager(). + } + } + } + + /** + * Create a new [androidx.recyclerview.widget.RecyclerView.LayoutManager] + * instance to use for this RecyclerView. + * + * By default a LinearLayoutManager is used, and a reasonable default is chosen for scrolling + * direction based on layout params. + * + * If the RecyclerView is set to match parent size then the scrolling orientation is set to + * vertical and [.setHasFixedSize] is set to true. + * + * If the height is set to wrap_content then the scrolling orientation is set to horizontal, and + * [.setClipToPadding] is set to false. + */ + protected open fun createLayoutManager(): RecyclerView.LayoutManager { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#createLayoutManager(). + val layoutParams = layoutParams +// ^^^^^^^^^^^^ definition local5 + + // 0 represents matching constraints in a LinearLayout or ConstraintLayout + if (layoutParams.height == RecyclerView.LayoutParams.MATCH_PARENT || layoutParams.height == 0) { +// ^^^^^^^^^^^^ reference local5 +// ^^^^^^^^^^^^ reference local5 + + if (layoutParams.width == RecyclerView.LayoutParams.MATCH_PARENT || layoutParams.width == 0) { +// ^^^^^^^^^^^^ reference local5 +// ^^^^^^^^^^^^ reference local5 + // If we are filling as much space as possible then we usually are fixed size + setHasFixedSize(true) + } + + // A sane default is a vertically scrolling linear layout + return LinearLayoutManager(context) + } else { + // This is usually the case for horizontally scrolling carousels and should be a sane + // default + return LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) + } + } + + override fun setLayoutManager(layout: RecyclerView.LayoutManager?) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setLayoutManager(). +// ^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setLayoutManager().(layout) + super.setLayoutManager(layout) +// ^^^^^ reference kotlin/Any# +// ^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setLayoutManager().(layout) + syncSpanCount() +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#syncSpanCount(). + } + + /** + * If a grid layout manager is set we sync the span count between the layout and the epoxy + * adapter automatically. + */ + private fun syncSpanCount() { +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#syncSpanCount(). + val layout = layoutManager +// ^^^^^^ definition local6 + val controller = epoxyController +// ^^^^^^^^^^ definition local7 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + if (layout is GridLayoutManager && controller != null) { +// ^^^^^^ reference local6 +// ^^^^^^^^^^ reference local7 + + if (controller.spanCount != layout.spanCount || layout.spanSizeLookup !== controller.spanSizeLookup) { +// ^^^^^^^^^^ reference local7 +// ^^^^^^ reference local6 +// ^^^^^^ reference local6 +// ^^^^^^^^^^ reference local7 + controller.spanCount = layout.spanCount +// ^^^^^^^^^^ reference local7 +// ^^^^^^ reference local6 + layout.spanSizeLookup = controller.spanSizeLookup +// ^^^^^^ reference local6 +// ^^^^^^^^^^ reference local7 + } + } + } + + override fun requestLayout() { +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#requestLayout(). + // Grid layout manager calls this when the span count is changed. Its the easiest way to + // detect a span count change and update our controller accordingly. + syncSpanCount() +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#syncSpanCount(). + super.requestLayout() +// ^^^^^ reference kotlin/Any# + } + + fun setItemSpacingRes(@DimenRes itemSpacingRes: Int) { +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingRes(). +// ^^^^^^^^ reference androidx/annotation/DimenRes#``(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingRes().(itemSpacingRes) +// ^^^ reference kotlin/Int# + setItemSpacingPx(resToPx(itemSpacingRes)) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingPx(). +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#resToPx(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingRes().(itemSpacingRes) + } + + fun setItemSpacingDp(@Dimension(unit = Dimension.DP) dp: Int) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingDp(). +// ^^^^^^^^^ reference androidx/annotation/Dimension#``(). +// ^^^^ reference androidx/annotation/Dimension#``().(unit) +// ^^^^^^^^^ reference androidx/annotation/Dimension# +// ^^ reference androidx/annotation/Dimension#DP. +// ^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingDp().(dp) +// ^^^ reference kotlin/Int# + setItemSpacingPx(dpToPx(dp)) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingPx(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#dpToPx(). +// ^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingDp().(dp) + } + + /** + * Set a pixel value to use as spacing between items. If this is a positive number an item + * decoration will be added to space all items this far apart from each other. If the value is 0 + * or negative no extra spacing will be used, and any previous spacing will be removed. + * + * This only works if a [LinearLayoutManager] or [GridLayoutManager] is used with this + * RecyclerView. + * + * This can also be set via the `app:itemSpacing` styleable attribute. + * + * @see .setItemSpacingDp + * @see .setItemSpacingRes + */ + open fun setItemSpacingPx(@Px spacingPx: Int) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingPx(). +// ^^ reference androidx/annotation/Px#``(). +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingPx().(spacingPx) +// ^^^ reference kotlin/Int# + removeItemDecoration(spacingDecorator) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#spacingDecorator. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getSpacingDecorator(). + spacingDecorator.pxBetweenItems = spacingPx +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#spacingDecorator. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getSpacingDecorator(). +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingPx().(spacingPx) + + if (spacingPx > 0) { +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setItemSpacingPx().(spacingPx) +// ^ reference kotlin/Int#compareTo(+3). + addItemDecoration(spacingDecorator) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#spacingDecorator. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getSpacingDecorator(). + } + } + + /** + * Set a list of [EpoxyModel]'s to show in this RecyclerView. + * + * Alternatively you can set an [EpoxyController] to handle building models dynamically. + * + * @see withModels + * @see setController + * @see setControllerAndBuildModels + * @see buildModelsWith + */ + + open fun setModels(models: List>) { +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setModels(). +// ^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setModels().(models) +// ^^^^ reference kotlin/collections/List# + val controller = (epoxyController as? SimpleEpoxyController) +// ^^^^^^^^^^ definition local8 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + ?: SimpleEpoxyController().also { + setController(it) +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setController(). + } + + controller.setModels(models) +// ^^^^^^^^^^ reference local8 +// ^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setModels().(models) + } + + /** + * Set an EpoxyController to populate this RecyclerView. This does not make the controller build + * its models, that must be done separately via [requestModelBuild]. + * + * Use this if you don't want [requestModelBuild] called automatically. Common cases + * are if you are using [TypedEpoxyController] (in which case you must call setData on the + * controller), or if you have not otherwise populated your controller's data yet. + * + * Otherwise if you want models built automatically for you use [setControllerAndBuildModels] + * + * The controller can be cleared with [clear] + * + * @see .setControllerAndBuildModels + * @see .buildModelsWith + * @see .setModels + */ + + fun setController(controller: EpoxyController) { +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setController(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setController().(controller) + epoxyController = controller +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setController().(controller) + adapter = controller.adapter +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setController().(controller) + syncSpanCount() +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#syncSpanCount(). + } + + /** + * Set an EpoxyController to populate this RecyclerView, and tell the controller to build + * models. + * + * The controller can be cleared with [clear] + * + * @see setController + * @see buildModelsWith + * @see setModels + */ + fun setControllerAndBuildModels(controller: EpoxyController) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setControllerAndBuildModels(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setControllerAndBuildModels().(controller) + controller.requestModelBuild() +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setControllerAndBuildModels().(controller) + setController(controller) +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setController(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setControllerAndBuildModels().(controller) + } + + /** + * The simplest way to add models to the RecyclerView without needing to create an EpoxyController. + * This is intended for Kotlin usage, and has the EpoxyController as the lambda receiver so + * models can be added easily. + * + * Multiple calls to this will reuse the same underlying EpoxyController so views in the + * RecyclerView will be reused. + * + * The Java equivalent is [buildModelsWith]. + */ + fun withModels(buildModels: EpoxyController.() -> Unit) { +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#withModels(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#withModels().(buildModels) +// ^^^^ reference kotlin/Unit# + val controller = (epoxyController as? WithModelsController) +// ^^^^^^^^^^ definition local9 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController# + ?: WithModelsController().also { setController(it) } +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#``(). +// ^^^^ reference kotlin/StandardKt#also(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setController(). +// ^^ reference local10 + + controller.callback = buildModels +// ^^^^^^^^^^ reference local9 +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#callback. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#getCallback(). +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#setCallback(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#withModels().(buildModels) + controller.requestModelBuild() +// ^^^^^^^^^^ reference local9 + } + + private class WithModelsController : EpoxyController() { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController# +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#``(). + var callback: EpoxyController.() -> Unit = {} +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#callback. +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#getCallback(). +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#setCallback(). +// ^^^^ reference kotlin/Unit# + + override fun buildModels() { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#buildModels(). + callback(this) +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#callback. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#getCallback(). +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController#setCallback(). +// ^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#WithModelsController# + } + } + + /** + * Allows you to build models via a callback instead of needing to create a new EpoxyController + * class. This is useful if your models are simple and you would like to simply declare them in + * your activity/fragment. + * + * Multiple calls to this will reuse the same underlying EpoxyController so views in the + * RecyclerView will be reused. + * + * Another useful pattern is having your Activity or Fragment implement [ModelBuilderCallback]. + * + * If you're using Kotlin, prefer [withModels]. + * + * @see setController + * @see setControllerAndBuildModels + * @see setModels + */ + fun buildModelsWith(callback: ModelBuilderCallback) { +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#buildModelsWith(). +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#buildModelsWith().(callback) +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallback# + val controller = (epoxyController as? ModelBuilderCallbackController) +// ^^^^^^^^^^ definition local11 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController# + ?: ModelBuilderCallbackController().also { setController(it) } +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#``(). +// ^^^^ reference kotlin/StandardKt#also(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setController(). +// ^^ reference local12 + + controller.callback = callback +// ^^^^^^^^^^ reference local11 +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#callback. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#getCallback(). +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#setCallback(). +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#buildModelsWith().(callback) + controller.requestModelBuild() +// ^^^^^^^^^^ reference local11 + } + + private class ModelBuilderCallbackController : EpoxyController() { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#``(). + var callback: ModelBuilderCallback = object : ModelBuilderCallback { +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#callback. +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#getCallback(). +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#setCallback(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallback# +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallback# + override fun buildModels(controller: EpoxyController) { +// ^^^^^^^^^^^ definition local13 +// ^^^^^^^^^^ definition local14 + } + } + + override fun buildModels() { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#buildModels(). + callback.buildModels(this) +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#callback. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#getCallback(). +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController#setCallback(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallback#buildModels(). +// ^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallbackController# + } + } + + /** + * A callback for creating models without needing a custom EpoxyController class. Used with [buildModelsWith] + */ + interface ModelBuilderCallback { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallback# + /** + * Analagous to [EpoxyController.buildModels]. You should create new model instances and + * add them to the given controller. [AutoModel] cannot be used with models added this + * way. + */ + fun buildModels(controller: EpoxyController) +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallback#buildModels(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#ModelBuilderCallback#buildModels().(controller) + } + + /** + * Request that the currently set EpoxyController has its models rebuilt. You can use this to + * avoid saving your controller as a field. + * + * You cannot use this if your controller is a [TypedEpoxyController] or if you set + * models via [setModels]. In that case you must set data directly on the + * controller or set models again. + */ + fun requestModelBuild() { +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#requestModelBuild(). + if (epoxyController == null) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + throw IllegalStateException("A controller must be set before requesting a model build.") +// ^^^^^^^^^^^^^^^^^^^^^ reference kotlin/IllegalStateException#``(+1). + } + + if (epoxyController is SimpleEpoxyController) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + throw IllegalStateException("Models were set with #setModels, they can not be rebuilt.") +// ^^^^^^^^^^^^^^^^^^^^^ reference kotlin/IllegalStateException#``(+1). + } + + epoxyController!!.requestModelBuild() +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + } + + /** + * Clear the currently set EpoxyController or Adapter as well as any models that are displayed. + * + * Any pending requests to the EpoxyController to build models are canceled. + * + * Any existing child views are recycled to the view pool. + */ + open fun clear() { +// ^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#clear(). + // The controller is cleared so the next time models are set we can create a fresh one. + epoxyController?.cancelPendingModelBuild() +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + epoxyController = null +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#epoxyController. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getEpoxyController(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setEpoxyController(). + + // We use swapAdapter instead of setAdapter so that the view pool is not cleared. + // 'removeAndRecycleExistingViews=true' is used in case this is a nested recyclerview + // and we want to recycle the views back to a shared view pool + swapAdapter(null, true) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#swapAdapter(). + } + + @Px +// ^^ reference androidx/annotation/Px#``(). + protected fun dpToPx(@Dimension(unit = Dimension.DP) dp: Int): Int { +// ^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#dpToPx(). +// ^^^^^^^^^ reference androidx/annotation/Dimension#``(). +// ^^^^ reference androidx/annotation/Dimension#``().(unit) +// ^^^^^^^^^ reference androidx/annotation/Dimension# +// ^^ reference androidx/annotation/Dimension#DP. +// ^^ definition com/airbnb/epoxy/EpoxyRecyclerView#dpToPx().(dp) +// ^^^ reference kotlin/Int# +// ^^^ reference kotlin/Int# + return TypedValue + .applyDimension( + TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), +// ^^ reference com/airbnb/epoxy/EpoxyRecyclerView#dpToPx().(dp) +// ^^^^^^^ reference kotlin/Int#toFloat(). + resources.displayMetrics + ).toInt() + } + + @Px +// ^^ reference androidx/annotation/Px#``(). + protected fun resToPx(@DimenRes itemSpacingRes: Int): Int { +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#resToPx(). +// ^^^^^^^^ reference androidx/annotation/DimenRes#``(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#resToPx().(itemSpacingRes) +// ^^^ reference kotlin/Int# +// ^^^ reference kotlin/Int# + return resources.getDimensionPixelOffset(itemSpacingRes) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#resToPx().(itemSpacingRes) + } + + override fun setAdapter(adapter: RecyclerView.Adapter<*>?) { +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setAdapter(). +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#setAdapter().(adapter) + super.setAdapter(adapter) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setAdapter().(adapter) + + clearRemovedAdapterAndCancelRunnable() +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#clearRemovedAdapterAndCancelRunnable(). + updatePreloaders() +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#updatePreloaders(). + } + + override fun swapAdapter( +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#swapAdapter(). + adapter: RecyclerView.Adapter<*>?, +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#swapAdapter().(adapter) + removeAndRecycleExistingViews: Boolean +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#swapAdapter().(removeAndRecycleExistingViews) +// ^^^^^^^ reference kotlin/Boolean# + ) { + super.swapAdapter(adapter, removeAndRecycleExistingViews) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#swapAdapter().(adapter) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#swapAdapter().(removeAndRecycleExistingViews) + + clearRemovedAdapterAndCancelRunnable() +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#clearRemovedAdapterAndCancelRunnable(). + updatePreloaders() +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#updatePreloaders(). + } + + public override fun onAttachedToWindow() { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#onAttachedToWindow(). + super.onAttachedToWindow() +// ^^^^^ reference kotlin/Any# + + if (removedAdapter != null) { +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removedAdapter. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getRemovedAdapter(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setRemovedAdapter(). + // Restore the adapter that was removed when the view was detached from window + swapAdapter(removedAdapter, false) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#swapAdapter(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removedAdapter. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getRemovedAdapter(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setRemovedAdapter(). + } + clearRemovedAdapterAndCancelRunnable() +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#clearRemovedAdapterAndCancelRunnable(). + } + + public override fun onDetachedFromWindow() { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#onDetachedFromWindow(). + super.onDetachedFromWindow() +// ^^^^^ reference kotlin/Any# + preloadScrollListeners.forEach { it.cancelPreloadRequests() } +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#preloadScrollListeners. +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getPreloadScrollListeners(). +// ^^^^^^^ reference kotlin/collections/CollectionsKt#forEach(+10). +// ^^ reference local15 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#cancelPreloadRequests(). + + if (removeAdapterWhenDetachedFromWindow) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removeAdapterWhenDetachedFromWindow. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getRemoveAdapterWhenDetachedFromWindow(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setRemoveAdapterWhenDetachedFromWindow(). + if (delayMsWhenRemovingAdapterOnDetach > 0) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#delayMsWhenRemovingAdapterOnDetach. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getDelayMsWhenRemovingAdapterOnDetach(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setDelayMsWhenRemovingAdapterOnDetach(). +// ^ reference kotlin/Int#compareTo(+3). + + isRemoveAdapterRunnablePosted = true +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#isRemoveAdapterRunnablePosted. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getIsRemoveAdapterRunnablePosted(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setIsRemoveAdapterRunnablePosted(). + postDelayed(removeAdapterRunnable, delayMsWhenRemovingAdapterOnDetach.toLong()) +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removeAdapterRunnable. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getRemoveAdapterRunnable(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#delayMsWhenRemovingAdapterOnDetach. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getDelayMsWhenRemovingAdapterOnDetach(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setDelayMsWhenRemovingAdapterOnDetach(). +// ^^^^^^ reference kotlin/Int#toLong(). + } else { + removeAdapter() +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removeAdapter(). + } + } + clearPoolIfActivityIsDestroyed() +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#clearPoolIfActivityIsDestroyed(). + } + + private fun removeAdapter() { +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#removeAdapter(). + val currentAdapter = adapter +// ^^^^^^^^^^^^^^ definition local16 + if (currentAdapter != null) { +// ^^^^^^^^^^^^^^ reference local16 + // Clear the adapter so the adapter releases its reference to this RecyclerView. + // Views are recycled so they can return to a view pool (default behavior is to not recycle + // them). + swapAdapter(null, true) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#swapAdapter(). + // Keep a reference to the removed adapter so we can add it back if the recyclerview is + // attached again. + removedAdapter = currentAdapter +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removedAdapter. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getRemovedAdapter(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setRemovedAdapter(). +// ^^^^^^^^^^^^^^ reference local16 + } + + // Do this after clearing the adapter, since that sends views back to the pool + clearPoolIfActivityIsDestroyed() +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#clearPoolIfActivityIsDestroyed(). + } + + private fun clearRemovedAdapterAndCancelRunnable() { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#clearRemovedAdapterAndCancelRunnable(). + removedAdapter = null +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removedAdapter. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getRemovedAdapter(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setRemovedAdapter(). + if (isRemoveAdapterRunnablePosted) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#isRemoveAdapterRunnablePosted. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getIsRemoveAdapterRunnablePosted(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setIsRemoveAdapterRunnablePosted(). + removeCallbacks(removeAdapterRunnable) +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#removeAdapterRunnable. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getRemoveAdapterRunnable(). + isRemoveAdapterRunnablePosted = false +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#isRemoveAdapterRunnablePosted. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#getIsRemoveAdapterRunnablePosted(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyRecyclerView#setIsRemoveAdapterRunnablePosted(). + } + } + + private fun clearPoolIfActivityIsDestroyed() { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#clearPoolIfActivityIsDestroyed(). + // Views in the pool hold context references which can keep the activity from being GC'd, + // plus they can hold significant memory resources. We should clear it asap after the pool + // is no longer needed - the main signal we use for this is that the activity is destroyed. + if (context.isActivityDestroyed()) { + recycledViewPool.clear() + } + } + + companion object { + private const val DEFAULT_ADAPTER_REMOVAL_DELAY_MS = 2000 +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#Companion#DEFAULT_ADAPTER_REMOVAL_DELAY_MS. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#Companion#getDEFAULT_ADAPTER_REMOVAL_DELAY_MS(). + + /** + * Store one unique pool per activity. They are cleared out when activities are destroyed, so this + * only needs to hold pools for active activities. + */ + private val ACTIVITY_RECYCLER_POOL = ActivityRecyclerPool() +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#Companion#ACTIVITY_RECYCLER_POOL. +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyRecyclerView#Companion#getACTIVITY_RECYCLER_POOL(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ActivityRecyclerPool#``(). + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyTouchHelper.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyTouchHelper.java index 0238286d..2a9091af 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyTouchHelper.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyTouchHelper.java @@ -391,7 +391,6 @@ public ItemTouchHelper andCallbacks(final DragCallbacks callbacks) { // ^^^^^^^^^^^^^^^ reference _root_/ // ^^^^^^^^^^^^^^^ definition local18 unresolved_type itemTouchHelper new ItemTouchHelper(new EpoxyModelTouchCallback(controller, targetModelClass) { -// ^^^^^^^^^^^^^^^ reference ``# // ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModelTouchCallback# // ^ reference com/airbnb/epoxy/EpoxyTouchHelper#DragBuilder4#[U] // ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyTouchHelper#DragBuilder4#controller. @@ -848,7 +847,6 @@ public ItemTouchHelper andCallbacks(final SwipeCallbacks callbacks) { // ^^^^^^^^^^^^^^^ reference _root_/ // ^^^^^^^^^^^^^^^ definition local70 unresolved_type itemTouchHelper new ItemTouchHelper(new EpoxyModelTouchCallback(null, targetModelClass) { -// ^^^^^^^^^^^^^^^ reference ``# // ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModelTouchCallback# // ^ reference com/airbnb/epoxy/EpoxyTouchHelper#SwipeBuilder3#[U] // ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyTouchHelper#SwipeBuilder3#targetModelClass. diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyVisibilityItem.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyVisibilityItem.kt new file mode 100644 index 00000000..ee94edd7 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyVisibilityItem.kt @@ -0,0 +1,651 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +import android.graphics.Rect +import android.view.View +import android.view.ViewGroup +import androidx.annotation.IntRange +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^^^^ reference androidx/annotation/IntRange# +import androidx.annotation.Px +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^ reference androidx/annotation/Px# +import androidx.annotation.VisibleForTesting +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^^^^^^^^^^^^^ reference androidx/annotation/VisibleForTesting# +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ + +/** + * This class represent an item in a [android.view.ViewGroup] and it is + * being reused with multiple model via the update method. There is 1:1 relationship between an + * EpoxyVisibilityItem and a child within the [android.view.ViewGroup]. + * + * It contains the logic to compute the visibility state of an item. It will also invoke the + * visibility callbacks on [com.airbnb.epoxy.EpoxyViewHolder] + * + * This class should remain non-public and is intended to be used by [EpoxyVisibilityTracker] + * only. + */ +@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) +//^^^^^^^^^^^^^^^^ reference androidx/annotation/VisibleForTesting#``(). +// ^^^^^^^^^ reference androidx/annotation/VisibleForTesting#``().(otherwise) +// ^^^^^^^^^^^^^^^^^ reference androidx/annotation/VisibleForTesting# +// ^^^^^^^^^^^^^^^ reference androidx/annotation/VisibleForTesting#PACKAGE_PRIVATE. +class EpoxyVisibilityItem(adapterPosition: Int? = null) { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem# +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#``(). +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#``().(adapterPosition) +// ^^^ reference kotlin/Int# + + private val localVisibleRect = Rect() +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#localVisibleRect. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getLocalVisibleRect(). + + var adapterPosition = RecyclerView.NO_POSITION +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#adapterPosition. +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getAdapterPosition(). + private set +// ^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setAdapterPosition(). + + @Px +// ^^ reference androidx/annotation/Px#``(). + private var height = 0 +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#height. +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getHeight(). +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setHeight(). + + @Px +// ^^ reference androidx/annotation/Px#``(). + private var width = 0 +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#width. +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getWidth(). +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setWidth(). + + @Px +// ^^ reference androidx/annotation/Px#``(). + private var visibleHeight = 0 +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). + + @Px +// ^^ reference androidx/annotation/Px#``(). + private var visibleWidth = 0 +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). + + @Px +// ^^ reference androidx/annotation/Px#``(). + private var viewportHeight = 0 +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#viewportHeight. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getViewportHeight(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setViewportHeight(). + + @Px +// ^^ reference androidx/annotation/Px#``(). + private var viewportWidth = 0 +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#viewportWidth. +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getViewportWidth(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setViewportWidth(). + private var partiallyVisible = false +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#partiallyVisible. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getPartiallyVisible(). +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setPartiallyVisible(). + private var fullyVisible = false +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#fullyVisible. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getFullyVisible(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setFullyVisible(). + private var visible = false +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#visible. +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getVisible(). +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setVisible(). + private var focusedVisible = false +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#focusedVisible. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getFocusedVisible(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setFocusedVisible(). + private var viewVisibility = View.GONE +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). + + /** Store last value for de-duping */ + private var lastVisibleHeightNotified: Int? = null +// ^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibleHeightNotified. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibleHeightNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibleHeightNotified(). +// ^^^ reference kotlin/Int# + private var lastVisibleWidthNotified: Int? = null +// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibleWidthNotified. +// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibleWidthNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibleWidthNotified(). +// ^^^ reference kotlin/Int# + private var lastVisibilityNotified: Int? = null +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibilityNotified. +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibilityNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibilityNotified(). +// ^^^ reference kotlin/Int# + + init { + adapterPosition?.let { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#``().(adapterPosition) +// ^^^ reference kotlin/StandardKt#let(). + reset(it) +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#reset(). +// ^^ reference local0 + } + } + + /** + * Update the visibility item according the current layout. + * + * @param view the current [com.airbnb.epoxy.EpoxyViewHolder]'s itemView + * @param parent the [android.view.ViewGroup] + * @return true if the view has been measured + */ + fun update(view: View, parent: ViewGroup, detachEvent: Boolean): Boolean { +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#update(). +// ^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#update().(view) +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#update().(parent) +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#update().(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# +// ^^^^^^^ reference kotlin/Boolean# + // Clear the rect before calling getLocalVisibleRect + localVisibleRect.setEmpty() +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#localVisibleRect. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLocalVisibleRect(). + val viewDrawn = view.getLocalVisibleRect(localVisibleRect) && !detachEvent +// ^^^^^^^^^ definition local1 +// ^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#update().(view) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#localVisibleRect. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLocalVisibleRect(). +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#update().(detachEvent) + height = view.height +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#height. +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getHeight(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setHeight(). +// ^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#update().(view) + width = view.width +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#width. +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getWidth(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setWidth(). +// ^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#update().(view) + viewportHeight = parent.height +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewportHeight. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewportHeight(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewportHeight(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#update().(parent) + viewportWidth = parent.width +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewportWidth. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewportWidth(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewportWidth(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#update().(parent) + visibleHeight = if (viewDrawn) localVisibleRect.height() else 0 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). +// ^^^^^^^^^ reference local1 +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#localVisibleRect. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLocalVisibleRect(). + visibleWidth = if (viewDrawn) localVisibleRect.width() else 0 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). +// ^^^^^^^^^ reference local1 +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#localVisibleRect. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLocalVisibleRect(). + viewVisibility = view.visibility +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). +// ^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#update().(view) + return height > 0 && width > 0 +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#height. +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getHeight(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setHeight(). +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#width. +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getWidth(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setWidth(). +// ^ reference kotlin/Int#compareTo(+3). + } + + fun reset(newAdapterPosition: Int) { +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#reset(). +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#reset().(newAdapterPosition) +// ^^^ reference kotlin/Int# + fullyVisible = false +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#fullyVisible. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFullyVisible(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFullyVisible(). + visible = false +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visible. +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisible(). +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisible(). + focusedVisible = false +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#focusedVisible. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFocusedVisible(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFocusedVisible(). + adapterPosition = newAdapterPosition +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#adapterPosition. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getAdapterPosition(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#reset().(newAdapterPosition) + lastVisibleHeightNotified = null +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibleHeightNotified. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibleHeightNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibleHeightNotified(). + lastVisibleWidthNotified = null +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibleWidthNotified. +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibleWidthNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibleWidthNotified(). + lastVisibilityNotified = null +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibilityNotified. +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibilityNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibilityNotified(). + } + + fun handleVisible(epoxyHolder: EpoxyViewHolder, detachEvent: Boolean) { +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleVisible(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleVisible().(epoxyHolder) +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleVisible().(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# + val previousVisible = visible +// ^^^^^^^^^^^^^^^ definition local2 +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visible. +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisible(). +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisible(). + visible = !detachEvent && isVisible() +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visible. +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisible(). +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisible(). +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleVisible().(detachEvent) +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#isVisible(). + if (visible != previousVisible) { +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visible. +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisible(). +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisible(). +// ^^ reference kotlin/Boolean#equals(). +// ^^^^^^^^^^^^^^^ reference local2 + if (visible) { +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visible. +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisible(). +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisible(). + epoxyHolder.visibilityStateChanged(VisibilityState.VISIBLE) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleVisible().(epoxyHolder) + } else { + epoxyHolder.visibilityStateChanged(VisibilityState.INVISIBLE) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleVisible().(epoxyHolder) + } + } + } + + fun handleFocus(epoxyHolder: EpoxyViewHolder, detachEvent: Boolean) { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleFocus(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleFocus().(epoxyHolder) +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleFocus().(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# + val previousFocusedVisible = focusedVisible +// ^^^^^^^^^^^^^^^^^^^^^^ definition local3 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#focusedVisible. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFocusedVisible(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFocusedVisible(). + focusedVisible = !detachEvent && isInFocusVisible() +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#focusedVisible. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFocusedVisible(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFocusedVisible(). +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleFocus().(detachEvent) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#isInFocusVisible(). + if (focusedVisible != previousFocusedVisible) { +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#focusedVisible. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFocusedVisible(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFocusedVisible(). +// ^^ reference kotlin/Boolean#equals(). +// ^^^^^^^^^^^^^^^^^^^^^^ reference local3 + if (focusedVisible) { +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#focusedVisible. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFocusedVisible(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFocusedVisible(). + epoxyHolder.visibilityStateChanged(VisibilityState.FOCUSED_VISIBLE) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleFocus().(epoxyHolder) + } else { + epoxyHolder.visibilityStateChanged(VisibilityState.UNFOCUSED_VISIBLE) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleFocus().(epoxyHolder) + } + } + } + + fun handlePartialImpressionVisible( +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handlePartialImpressionVisible(). + epoxyHolder: EpoxyViewHolder, +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handlePartialImpressionVisible().(epoxyHolder) + detachEvent: Boolean, +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handlePartialImpressionVisible().(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# + @IntRange(from = 0, to = 100) thresholdPercentage: Int +// ^^^^^^^^ reference androidx/annotation/IntRange#``(). +// ^^^^ reference androidx/annotation/IntRange#``().(from) +// ^^ reference androidx/annotation/IntRange#``().(to) +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handlePartialImpressionVisible().(thresholdPercentage) +// ^^^ reference kotlin/Int# + ) { + val previousPartiallyVisible = partiallyVisible +// ^^^^^^^^^^^^^^^^^^^^^^^^ definition local4 +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#partiallyVisible. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getPartiallyVisible(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setPartiallyVisible(). + partiallyVisible = !detachEvent && isPartiallyVisible(thresholdPercentage) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#partiallyVisible. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getPartiallyVisible(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setPartiallyVisible(). +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handlePartialImpressionVisible().(detachEvent) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#isPartiallyVisible(). +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handlePartialImpressionVisible().(thresholdPercentage) + if (partiallyVisible != previousPartiallyVisible) { +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#partiallyVisible. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getPartiallyVisible(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setPartiallyVisible(). +// ^^ reference kotlin/Boolean#equals(). +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference local4 + if (partiallyVisible) { +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#partiallyVisible. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getPartiallyVisible(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setPartiallyVisible(). + epoxyHolder.visibilityStateChanged(VisibilityState.PARTIAL_IMPRESSION_VISIBLE) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handlePartialImpressionVisible().(epoxyHolder) + } else { + epoxyHolder.visibilityStateChanged(VisibilityState.PARTIAL_IMPRESSION_INVISIBLE) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handlePartialImpressionVisible().(epoxyHolder) + } + } + } + + fun handleFullImpressionVisible(epoxyHolder: EpoxyViewHolder, detachEvent: Boolean) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleFullImpressionVisible(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleFullImpressionVisible().(epoxyHolder) +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleFullImpressionVisible().(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# + val previousFullyVisible = fullyVisible +// ^^^^^^^^^^^^^^^^^^^^ definition local5 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#fullyVisible. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFullyVisible(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFullyVisible(). + fullyVisible = !detachEvent && isFullyVisible() +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#fullyVisible. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFullyVisible(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFullyVisible(). +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleFullImpressionVisible().(detachEvent) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#isFullyVisible(). + if (fullyVisible != previousFullyVisible) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#fullyVisible. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFullyVisible(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFullyVisible(). +// ^^ reference kotlin/Boolean#equals(). +// ^^^^^^^^^^^^^^^^^^^^ reference local5 + if (fullyVisible) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#fullyVisible. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getFullyVisible(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setFullyVisible(). + epoxyHolder.visibilityStateChanged(VisibilityState.FULL_IMPRESSION_VISIBLE) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleFullImpressionVisible().(epoxyHolder) + } + } + } + + fun handleChanged(epoxyHolder: EpoxyViewHolder, visibilityChangedEnabled: Boolean): Boolean { +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleChanged(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleChanged().(epoxyHolder) +// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#handleChanged().(visibilityChangedEnabled) +// ^^^^^^^ reference kotlin/Boolean# +// ^^^^^^^ reference kotlin/Boolean# + var changed = false +// ^^^^^^^ definition local6 + if (visibleHeight != lastVisibleHeightNotified || visibleWidth != lastVisibleWidthNotified || viewVisibility != lastVisibilityNotified) { +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). +// ^^ reference kotlin/Int#equals(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibleHeightNotified. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibleHeightNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibleHeightNotified(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). +// ^^ reference kotlin/Int#equals(). +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibleWidthNotified. +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibleWidthNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibleWidthNotified(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibilityNotified. +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibilityNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibilityNotified(). + if (visibilityChangedEnabled) { +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleChanged().(visibilityChangedEnabled) + if (viewVisibility == View.GONE) { +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). + epoxyHolder.visibilityChanged(0f, 0f, 0, 0) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleChanged().(epoxyHolder) + } else { + epoxyHolder.visibilityChanged( +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#handleChanged().(epoxyHolder) + 100f / height * visibleHeight, +// ^ reference kotlin/Float#div(+3). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#height. +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getHeight(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setHeight(). +// ^ reference kotlin/Float#times(+3). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). + 100f / width * visibleWidth, +// ^ reference kotlin/Float#div(+3). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#width. +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getWidth(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setWidth(). +// ^ reference kotlin/Float#times(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). + visibleHeight, visibleWidth +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). + ) + } + } + lastVisibleHeightNotified = visibleHeight +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibleHeightNotified. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibleHeightNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibleHeightNotified(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). + lastVisibleWidthNotified = visibleWidth +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibleWidthNotified. +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibleWidthNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibleWidthNotified(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). + lastVisibilityNotified = viewVisibility +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#lastVisibilityNotified. +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getLastVisibilityNotified(). +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setLastVisibilityNotified(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). + changed = true +// ^^^^^^^ reference local6 + } + return changed +// ^^^^^^^ reference local6 + } + + private fun isVisible(): Boolean { +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#isVisible(). +// ^^^^^^^ reference kotlin/Boolean# + return viewVisibility == View.VISIBLE && visibleHeight > 0 && visibleWidth > 0 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). +// ^ reference kotlin/Int#compareTo(+3). + } + + private fun isInFocusVisible(): Boolean { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#isInFocusVisible(). +// ^^^^^^^ reference kotlin/Boolean# + val halfViewportArea = viewportHeight * viewportWidth / 2 +// ^^^^^^^^^^^^^^^^ definition local7 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewportHeight. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewportHeight(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewportHeight(). +// ^ reference kotlin/Int#times(+3). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewportWidth. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewportWidth(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewportWidth(). +// ^ reference kotlin/Int#div(+3). + val totalArea = height * width +// ^^^^^^^^^ definition local8 +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#height. +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getHeight(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setHeight(). +// ^ reference kotlin/Int#times(+3). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#width. +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getWidth(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setWidth(). + val visibleArea = visibleHeight * visibleWidth +// ^^^^^^^^^^^ definition local9 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). +// ^ reference kotlin/Int#times(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). + // The model has entered the focused range either if it is larger than half of the viewport + // and it occupies at least half of the viewport or if it is smaller than half of the viewport + // and it is fully visible. + return viewVisibility == View.VISIBLE && +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). + if (totalArea >= halfViewportArea) visibleArea >= halfViewportArea else totalArea == visibleArea +// ^^^^^^^^^ reference local8 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^^^^^ reference local7 +// ^^^^^^^^^^^ reference local9 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^^^^^ reference local7 +// ^^^^^^^^^ reference local8 +// ^^ reference kotlin/Int#equals(). +// ^^^^^^^^^^^ reference local9 + } + + private fun isPartiallyVisible( +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#isPartiallyVisible(). + @IntRange( +// ^^^^^^^^ reference androidx/annotation/IntRange#``(). + from = 0, +// ^^^^ reference androidx/annotation/IntRange#``().(from) + to = 100 +// ^^ reference androidx/annotation/IntRange#``().(to) + ) thresholdPercentage: Int +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#isPartiallyVisible().(thresholdPercentage) +// ^^^ reference kotlin/Int# + ): Boolean { +// ^^^^^^^ reference kotlin/Boolean# + // special case 0%: trigger as soon as some pixels are one the screen + if (thresholdPercentage == 0) return isVisible() +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#isPartiallyVisible().(thresholdPercentage) +// ^^ reference kotlin/Int#equals(). +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#isVisible(). + val totalArea = height * width +// ^^^^^^^^^ definition local10 +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#height. +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getHeight(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setHeight(). +// ^ reference kotlin/Int#times(+3). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#width. +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getWidth(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setWidth(). + val visibleArea = visibleHeight * visibleWidth +// ^^^^^^^^^^^ definition local11 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). +// ^ reference kotlin/Int#times(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). + val visibleAreaPercentage = visibleArea / totalArea.toFloat() * 100 +// ^^^^^^^^^^^^^^^^^^^^^ definition local12 +// ^^^^^^^^^^^ reference local11 +// ^ reference kotlin/Int#div(+2). +// ^^^^^^^^^ reference local10 +// ^^^^^^^ reference kotlin/Int#toFloat(). +// ^ reference kotlin/Float#times(+3). + return viewVisibility == View.VISIBLE && visibleAreaPercentage >= thresholdPercentage +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). +// ^^^^^^^^^^^^^^^^^^^^^ reference local12 +// ^^ reference kotlin/Float#compareTo(+3). +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#isPartiallyVisible().(thresholdPercentage) + } + + private fun isFullyVisible(): Boolean { +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#isFullyVisible(). +// ^^^^^^^ reference kotlin/Boolean# + return viewVisibility == View.VISIBLE && visibleHeight == height && visibleWidth == width +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#viewVisibility. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getViewVisibility(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setViewVisibility(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleHeight. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleHeight(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleHeight(). +// ^^ reference kotlin/Int#equals(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#height. +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getHeight(). +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setHeight(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#visibleWidth. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getVisibleWidth(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setVisibleWidth(). +// ^^ reference kotlin/Int#equals(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#width. +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getWidth(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#setWidth(). + } + + fun shiftBy(offsetPosition: Int) { +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#shiftBy(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityItem#shiftBy().(offsetPosition) +// ^^^ reference kotlin/Int# + adapterPosition += offsetPosition +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#adapterPosition. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getAdapterPosition(). + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyVisibilityTracker.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyVisibilityTracker.kt new file mode 100644 index 00000000..13599a09 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/EpoxyVisibilityTracker.kt @@ -0,0 +1,1138 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +import android.util.Log +import android.util.SparseArray +import android.view.View +import androidx.annotation.IdRes +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^ reference androidx/annotation/IdRes# +import androidx.annotation.IntRange +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^^^^ reference androidx/annotation/IntRange# +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ +import com.airbnb.viewmodeladapter.R +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +import java.util.ArrayList +// ^^^^ reference java/ +// ^^^^ reference java/util/ +// ^^^^^^^^^ reference java/util/ArrayList# +import java.util.HashMap +// ^^^^ reference java/ +// ^^^^ reference java/util/ +// ^^^^^^^ reference java/util/HashMap# + +/** + * A simple way to track visibility events on [com.airbnb.epoxy.EpoxyModel]. + * + * [EpoxyVisibilityTracker] works with any [androidx.recyclerview.widget.RecyclerView] + * backed by an Epoxy controller. Once attached the events will be forwarded to the Epoxy model (or + * to the Epoxy view when using annotations). + * + * Note that support for visibility events on an [EpoxyModelGroup] is somewhat limited. Only model + * additions will receive visibility events. Models that are removed from the group will not receive + * events (e.g. [VisibilityState.INVISIBLE]) because the model group does not keep a reference, + * nor does it get notified of model removals. + * + * @see OnVisibilityChanged + * + * @see OnVisibilityStateChanged + * + * @see OnModelVisibilityChangedListener + * + * @see OnModelVisibilityStateChangedListener + */ +class EpoxyVisibilityTracker { +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker# +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#``(). + + /** + * Used to listen to [RecyclerView.ItemAnimator] ending animations. + */ + private val itemAnimatorFinishedListener = +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#itemAnimatorFinishedListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getItemAnimatorFinishedListener(). + RecyclerView.ItemAnimator.ItemAnimatorFinishedListener { + processChangeEvent( +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent(). + "ItemAnimatorFinishedListener.onAnimationsFinished", + /* don't check item animator to prevent recursion */ false + ) + } + + /** Maintain visibility item indexed by view id (identity hashcode) */ + private val visibilityIdToItemMap = SparseArray() +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItemMap. +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItemMap(). +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem# + private val visibilityIdToItems: MutableList = ArrayList() +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItems. +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItems(). +// ^^^^^^^^^^^ reference kotlin/collections/MutableList# +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem# +// ^^^^^^^^^ reference java/util/ArrayList#``(+1). + + /** listener used to process scroll, layout and attach events */ + private val listener = Listener() +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#listener. +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getListener(). +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#``(). + + /** listener used to process data events */ + private val observer = DataObserver() +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#observer. +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getObserver(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#``(). + + private var attachedRecyclerView: RecyclerView? = null +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + + private var lastAdapterSeen: RecyclerView.Adapter<*>? = null +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#lastAdapterSeen. +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getLastAdapterSeen(). +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#setLastAdapterSeen(). + + /** All nested visibility trackers */ + private val nestedTrackers: MutableMap = HashMap() +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#nestedTrackers. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getNestedTrackers(). +// ^^^^^^^^^^ reference kotlin/collections/MutableMap# +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker# +// ^^^^^^^ reference java/util/HashMap#``(+2). + + /** This flag is for optimizing the process on detach. If detach is from data changed then it + * need to re-process all views, else no need (ex: scroll). */ + private var visibleDataChanged = false +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + + /** + * Enable or disable visibility changed event. Default is `true`, disable it if you don't need + * (triggered by every pixel scrolled). + * + * @see OnVisibilityChanged + * + * @see OnModelVisibilityChangedListener + */ + var onChangedEnabled = true +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#onChangedEnabled. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getOnChangedEnabled(). +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#setOnChangedEnabled(). + + /** + * Set the threshold of percentage visible area to identify the partial impression view state. + * + * @param thresholdPercentage Percentage of visible area of an element in the range [0..100]. + * Defaults to `null`, which disables + * [VisibilityState.PARTIAL_IMPRESSION_VISIBLE] and + * [VisibilityState.PARTIAL_IMPRESSION_INVISIBLE] events. + */ + @IntRange(from = 0, to = 100) +// ^^^^^^^^ reference androidx/annotation/IntRange#``(). +// ^^^^ reference androidx/annotation/IntRange#``().(from) +// ^^ reference androidx/annotation/IntRange#``().(to) + var partialImpressionThresholdPercentage: Int? = null +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#partialImpressionThresholdPercentage. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#getPartialImpressionThresholdPercentage(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#setPartialImpressionThresholdPercentage(). +// ^^^ reference kotlin/Int# + + /** + * Attach the tracker. + * + * @param recyclerView The recyclerview that the EpoxyController has its adapter added to. + */ + fun attach(recyclerView: RecyclerView) { +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#attach(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#attach().(recyclerView) + attachedRecyclerView = recyclerView +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attach().(recyclerView) + recyclerView.addOnScrollListener(listener) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attach().(recyclerView) +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#listener. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getListener(). + recyclerView.addOnLayoutChangeListener(listener) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attach().(recyclerView) +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#listener. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getListener(). + recyclerView.addOnChildAttachStateChangeListener(listener) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attach().(recyclerView) +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#listener. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getListener(). + setTracker(recyclerView, this) +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#setTracker(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attach().(recyclerView) +// ^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker# + } + + /** + * Detach the tracker + * + * @param recyclerView The recycler view that the EpoxyController has its adapter added to. + */ + fun detach(recyclerView: RecyclerView) { +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#detach(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#detach().(recyclerView) + recyclerView.removeOnScrollListener(listener) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#detach().(recyclerView) +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#listener. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getListener(). + recyclerView.removeOnLayoutChangeListener(listener) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#detach().(recyclerView) +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#listener. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getListener(). + recyclerView.removeOnChildAttachStateChangeListener(listener) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#detach().(recyclerView) +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#listener. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getListener(). + setTracker(recyclerView, null) +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#setTracker(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#detach().(recyclerView) + attachedRecyclerView = null +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + } + + /** + * The tracker is storing visibility states internally and is using if to send events, only the + * difference is sent. Use this method to clear the states and thus regenerate the visibility + * events. This may be useful when you change the adapter on the [RecyclerView]. + */ + fun clearVisibilityStates() { +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#clearVisibilityStates(). + // Clear our visibility items + visibilityIdToItemMap.clear() +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItemMap. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItemMap(). + visibilityIdToItems.clear() +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItems. +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItems(). +// ^^^^^ reference kotlin/collections/MutableList#clear(). + } + + /** + * Calling this method will make the visibility tracking check and trigger events if necessary. It + * is particularly useful when the visibility of an Epoxy model is changed outside of an Epoxy + * RecyclerView. + * + * An example is when you nest an horizontal Epoxy backed RecyclerView in a non Epoxy vertical + * RecyclerView. When the vertical RecyclerView scroll you want to notify the visibility tracker + * attached on the horizontal RecyclerView. + */ + fun requestVisibilityCheck() { +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#requestVisibilityCheck(). + processChangeEvent("requestVisibilityCheck") +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent(). + } + + /** + * Process a change event. + * @param debug: string for debug usually the source of the call + * @param checkItemAnimator: true if it need to check if ItemAnimator is running + */ + private fun processChangeEvent(debug: String, checkItemAnimator: Boolean = true) { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent(). +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent().(debug) +// ^^^^^^ reference kotlin/String# +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent().(checkItemAnimator) +// ^^^^^^^ reference kotlin/Boolean# + + // Only if attached + val recyclerView = attachedRecyclerView ?: return +// ^^^^^^^^^^^^ definition local0 +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + + val itemAnimator = recyclerView.itemAnimator +// ^^^^^^^^^^^^ definition local1 +// ^^^^^^^^^^^^ reference local0 + if (checkItemAnimator && itemAnimator != null) { +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent().(checkItemAnimator) +// ^^^^^^^^^^^^ reference local1 + // `itemAnimatorFinishedListener.onAnimationsFinished` will process visibility check + // - If the animations are running `onAnimationsFinished` will be invoked on animations end. + // - If the animations are not running `onAnimationsFinished` will be invoked right away. + if (itemAnimator.isRunning(itemAnimatorFinishedListener)) { +// ^^^^^^^^^^^^ reference local1 +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#itemAnimatorFinishedListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getItemAnimatorFinishedListener(). + // If running process visibility now as `onAnimationsFinished` was not yet called + processChangeEventWithDetachedView(null, debug) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent().(debug) + } + } else { + processChangeEventWithDetachedView(null, debug) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent().(debug) + } + } + + private fun processChangeEventWithDetachedView(detachedView: View?, debug: String) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView().(detachedView) +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView().(debug) +// ^^^^^^ reference kotlin/String# + + // Only if attached + val recyclerView = attachedRecyclerView ?: return +// ^^^^^^^^^^^^ definition local2 +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + + // On every every events lookup for a new adapter + processNewAdapterIfNecessary() +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processNewAdapterIfNecessary(). + + // Process the detached child if any + detachedView?.let { processChild(it, true, debug) } +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView().(detachedView) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView().(debug) + + // Process all attached children + for (i in 0 until recyclerView.childCount) { +// ^ definition local3 +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^^^^ reference local2 + val child = recyclerView.getChildAt(i) +// ^^^^^ definition local4 +// ^^^^^^^^^^^^ reference local2 +// ^ reference local3 + if (child != null && child !== detachedView) { +// ^^^^^ reference local4 +// ^^^^^ reference local4 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView().(detachedView) + // Is some case the detached child is still in the recycler view. Don't process it as it + // was already processed. + processChild(child, false, debug) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(). +// ^^^^^ reference local4 +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView().(debug) + } + } + } + + /** + * If there is a new adapter on the attached RecyclerView it will register the data observer and + * clear the current visibility states + */ + private fun processNewAdapterIfNecessary() { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processNewAdapterIfNecessary(). + attachedRecyclerView?.adapter?.let { adapter -> +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). +// ^^^^^^^ definition local5 + if (lastAdapterSeen != adapter) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#lastAdapterSeen. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getLastAdapterSeen(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setLastAdapterSeen(). +// ^^^^^^^ reference local5 + // Unregister the old adapter + lastAdapterSeen?.unregisterAdapterDataObserver(observer) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#lastAdapterSeen. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getLastAdapterSeen(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setLastAdapterSeen(). +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#observer. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getObserver(). + // Register the new adapter + adapter.registerAdapterDataObserver(observer) +// ^^^^^^^ reference local5 +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#observer. +// ^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getObserver(). + lastAdapterSeen = adapter +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#lastAdapterSeen. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getLastAdapterSeen(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setLastAdapterSeen(). +// ^^^^^^^ reference local5 + } + } + } + + /** + * Don't call this method directly, it is called from + * [EpoxyVisibilityTracker.processVisibilityEvents] + * + * @param child the view to process for visibility event + * @param detachEvent true if the child was just detached + * @param eventOriginForDebug a debug strings used for logs + */ + private fun processChild(child: View, detachEvent: Boolean, eventOriginForDebug: String) { +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(). +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(child) +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(eventOriginForDebug) +// ^^^^^^ reference kotlin/String# + + // Only if attached + val recyclerView = attachedRecyclerView ?: return +// ^^^^^^^^^^^^ definition local6 +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + + // Preemptive check for child's parent validity to prevent `IllegalArgumentException` in + // `getChildViewHolder`. + val isParentValid = child.parent == null || child.parent === recyclerView +// ^^^^^^^^^^^^^ definition local7 +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(child) +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(child) +// ^^^^^^^^^^^^ reference local6 + val viewHolder = if (isParentValid) recyclerView.getChildViewHolder(child) else null +// ^^^^^^^^^^ definition local8 +// ^^^^^^^^^^^^^ reference local7 +// ^^^^^^^^^^^^ reference local6 +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(child) + if (viewHolder is EpoxyViewHolder) { +// ^^^^^^^^^^ reference local8 + val epoxyHolder = viewHolder.holder +// ^^^^^^^^^^^ definition local9 +// ^^^^^^^^^^ reference local8 + processChild(recyclerView, child, detachEvent, eventOriginForDebug, viewHolder) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1). +// ^^^^^^^^^^^^ reference local6 +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(child) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(detachEvent) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(eventOriginForDebug) +// ^^^^^^^^^^ reference local8 + if (epoxyHolder is ModelGroupHolder) { +// ^^^^^^^^^^^ reference local9 +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder# + processModelGroupChildren(recyclerView, epoxyHolder, detachEvent, eventOriginForDebug) +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren(). +// ^^^^^^^^^^^^ reference local6 +// ^^^^^^^^^^^ reference local9 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(detachEvent) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild().(eventOriginForDebug) + } + } + } + + /** + * Loop through the children of the model group and process visibility events on each one in + * relation to the model group's layout. This will attach or detach trackers to any nested + * [RecyclerView]s. + * + * @param epoxyHolder the [ModelGroupHolder] with children to process + * @param detachEvent true if the child was just detached + * @param eventOriginForDebug a debug strings used for logs + */ + private fun processModelGroupChildren( +// ^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren(). + recyclerView: RecyclerView, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(recyclerView) + epoxyHolder: ModelGroupHolder, +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(epoxyHolder) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder# + detachEvent: Boolean, +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# + eventOriginForDebug: String +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(eventOriginForDebug) +// ^^^^^^ reference kotlin/String# + ) { + // Iterate through models in the group and process each of them instead of the group + for (groupChildHolder in epoxyHolder.viewHolders) { +// ^^^^^^^^^^^^^^^^ definition local10 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(epoxyHolder) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#viewHolders. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolders(). + // Since the group is likely using a ViewGroup other than a RecyclerView, handle the + // potential of a nested RecyclerView. This cannot be done through the normal flow + // without recursively searching through the view children. + if (groupChildHolder.itemView is RecyclerView) { +// ^^^^^^^^^^^^^^^^ reference local10 + if (detachEvent) { +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(detachEvent) + processChildRecyclerViewDetached(groupChildHolder.itemView) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewDetached(). +// ^^^^^^^^^^^^^^^^ reference local10 + } else { + processChildRecyclerViewAttached(groupChildHolder.itemView) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewAttached(). +// ^^^^^^^^^^^^^^^^ reference local10 + } + } + processChild( +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1). + recyclerView, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(recyclerView) + groupChildHolder.itemView, +// ^^^^^^^^^^^^^^^^ reference local10 + detachEvent, +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(detachEvent) + eventOriginForDebug, +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processModelGroupChildren().(eventOriginForDebug) + groupChildHolder +// ^^^^^^^^^^^^^^^^ reference local10 + ) + } + } + + /** + * Process visibility events for a view and propagate to a nested tracker if the view is a + * [RecyclerView]. + * + * @param child the view to process for visibility event + * @param detachEvent true if the child was just detached + * @param eventOriginForDebug a debug strings used for logs + * @param viewHolder the view holder for the child view + */ + private fun processChild( +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1). + recyclerView: RecyclerView, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(recyclerView) + child: View, +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(child) + detachEvent: Boolean, +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# + eventOriginForDebug: String, +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(eventOriginForDebug) +// ^^^^^^ reference kotlin/String# + viewHolder: EpoxyViewHolder +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(viewHolder) + ) { + val changed = processVisibilityEvents( +// ^^^^^^^ definition local11 +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents(). + recyclerView, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(recyclerView) + viewHolder, +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(viewHolder) + detachEvent, +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(detachEvent) + eventOriginForDebug +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(eventOriginForDebug) + ) + if (changed && child is RecyclerView) { +// ^^^^^^^ reference local11 +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(child) + nestedTrackers[child]?.processChangeEvent("parent") +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#nestedTrackers. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getNestedTrackers(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(+1).(child) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent(). + } + } + + /** + * Call this methods every time something related to ui (scroll, layout, ...) or something related + * to data changed. + * + * @param recyclerView the recycler view + * @param epoxyHolder the [RecyclerView] + * @param detachEvent true if the event originated from a view detached from the + * recycler view + * @param eventOriginForDebug a debug strings used for logs + * @return true if changed + */ + private fun processVisibilityEvents( +// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents(). + recyclerView: RecyclerView, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(recyclerView) + epoxyHolder: EpoxyViewHolder, +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) + detachEvent: Boolean, +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(detachEvent) +// ^^^^^^^ reference kotlin/Boolean# + eventOriginForDebug: String +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(eventOriginForDebug) +// ^^^^^^ reference kotlin/String# + ): Boolean { +// ^^^^^^^ reference kotlin/Boolean# + if (DEBUG_LOG) { +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#DEBUG_LOG. +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getDEBUG_LOG(). + Log.d( + TAG, +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG. +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG(). + "$eventOriginForDebug.processVisibilityEvents " + +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(eventOriginForDebug) +// ^ reference kotlin/String#plus(). + "${System.identityHashCode(epoxyHolder)}, " + +// ^^^^^^ reference java/lang/System# +// ^^^^^^^^^^^^^^^^ reference java/lang/System#identityHashCode(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) +// ^ reference kotlin/String#plus(). + "$detachEvent, ${epoxyHolder.adapterPosition}" +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(detachEvent) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) + ) + } + val itemView = epoxyHolder.itemView +// ^^^^^^^^ definition local12 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) + val id = System.identityHashCode(itemView) +// ^^ definition local13 +// ^^^^^^ reference java/lang/System# +// ^^^^^^^^^^^^^^^^ reference java/lang/System#identityHashCode(). +// ^^^^^^^^ reference local12 + var vi = visibilityIdToItemMap[id] +// ^^ definition local14 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItemMap. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItemMap(). +// ^^ reference local13 + if (vi == null) { +// ^^ reference local14 + // New view discovered, assign an EpoxyVisibilityItem + vi = EpoxyVisibilityItem(epoxyHolder.adapterPosition) +// ^^ reference local14 +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#``(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) + visibilityIdToItemMap.put(id, vi) +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItemMap. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItemMap(). +// ^^ reference local13 +// ^^ reference local14 + visibilityIdToItems.add(vi) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItems. +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItems(). +// ^^^ reference kotlin/collections/MutableList#add(). +// ^^ reference local14 + } else if (epoxyHolder.adapterPosition != RecyclerView.NO_POSITION && +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) + vi.adapterPosition != epoxyHolder.adapterPosition +// ^^ reference local14 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) + ) { + // EpoxyVisibilityItem being re-used for a different adapter position + vi.reset(epoxyHolder.adapterPosition) +// ^^ reference local14 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) + } + var changed = false +// ^^^^^^^ definition local15 + if (vi.update(itemView, recyclerView, detachEvent)) { +// ^^ reference local14 +// ^^^^^^^^ reference local12 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(recyclerView) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(detachEvent) + // View is measured, process events + vi.handleVisible(epoxyHolder, detachEvent) +// ^^ reference local14 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(detachEvent) + partialImpressionThresholdPercentage?.let { percentage -> +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#partialImpressionThresholdPercentage. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getPartialImpressionThresholdPercentage(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setPartialImpressionThresholdPercentage(). +// ^^^ reference kotlin/StandardKt#let(). +// ^^^^^^^^^^ definition local16 + vi.handlePartialImpressionVisible( +// ^^ reference local14 + epoxyHolder, detachEvent, +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(detachEvent) + percentage +// ^^^^^^^^^^ reference local16 + ) + } + vi.handleFocus(epoxyHolder, detachEvent) +// ^^ reference local14 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(detachEvent) + vi.handleFullImpressionVisible(epoxyHolder, detachEvent) +// ^^ reference local14 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(detachEvent) + changed = vi.handleChanged(epoxyHolder, onChangedEnabled) +// ^^^^^^^ reference local15 +// ^^ reference local14 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processVisibilityEvents().(epoxyHolder) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#onChangedEnabled. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getOnChangedEnabled(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setOnChangedEnabled(). + } + return changed +// ^^^^^^^ reference local15 + } + + private fun processChildRecyclerViewAttached(childRecyclerView: RecyclerView) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewAttached(). +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewAttached().(childRecyclerView) + // Register itself in the EpoxyVisibilityTracker. This will take care of nested list + // tracking (ex: carousel) + val tracker = getTracker(childRecyclerView) ?: EpoxyVisibilityTracker().let { nested -> +// ^^^^^^^ definition local17 +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTracker(). +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewAttached().(childRecyclerView) +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#``(). +// ^^^ reference kotlin/StandardKt#let(). +// ^^^^^^ definition local18 + nested.partialImpressionThresholdPercentage = partialImpressionThresholdPercentage +// ^^^^^^ reference local18 +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#partialImpressionThresholdPercentage. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getPartialImpressionThresholdPercentage(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setPartialImpressionThresholdPercentage(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#partialImpressionThresholdPercentage. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getPartialImpressionThresholdPercentage(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setPartialImpressionThresholdPercentage(). + nested.attach(childRecyclerView) +// ^^^^^^ reference local18 +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attach(). +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewAttached().(childRecyclerView) + nested +// ^^^^^^ reference local18 + } + nestedTrackers[childRecyclerView] = tracker +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#nestedTrackers. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getNestedTrackers(). +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewAttached().(childRecyclerView) +// ^^^^^^^ reference local17 + } + + private fun processChildRecyclerViewDetached(childRecyclerView: RecyclerView) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewDetached(). +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewDetached().(childRecyclerView) + nestedTrackers.remove(childRecyclerView) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#nestedTrackers. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getNestedTrackers(). +// ^^^^^^ reference kotlin/collections/MutableMap#remove(). +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewDetached().(childRecyclerView) + } + + /** + * Helper class that host the [androidx.recyclerview.widget.RecyclerView] listener + * implementations + */ + private inner class Listener : +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener# +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#``(). + RecyclerView.OnScrollListener(), + View.OnLayoutChangeListener, + RecyclerView.OnChildAttachStateChangeListener { + override fun onLayoutChange( +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange(). + recyclerView: View, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(recyclerView) + left: Int, +// ^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(left) +// ^^^ reference kotlin/Int# + top: Int, +// ^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(top) +// ^^^ reference kotlin/Int# + right: Int, +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(right) +// ^^^ reference kotlin/Int# + bottom: Int, +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(bottom) +// ^^^ reference kotlin/Int# + oldLeft: Int, +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(oldLeft) +// ^^^ reference kotlin/Int# + oldTop: Int, +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(oldTop) +// ^^^ reference kotlin/Int# + oldRight: Int, +// ^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(oldRight) +// ^^^ reference kotlin/Int# + oldBottom: Int +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onLayoutChange().(oldBottom) +// ^^^ reference kotlin/Int# + ) { + processChangeEvent("onLayoutChange") +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent(). + } + + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onScrolled(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onScrolled().(recyclerView) +// ^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onScrolled().(dx) +// ^^^ reference kotlin/Int# +// ^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onScrolled().(dy) +// ^^^ reference kotlin/Int# + processChangeEvent("onScrolled") +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEvent(). + } + + override fun onChildViewAttachedToWindow(child: View) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewAttachedToWindow(). +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewAttachedToWindow().(child) + if (child is RecyclerView) { +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewAttachedToWindow().(child) + processChildRecyclerViewAttached(child) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewAttached(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewAttachedToWindow().(child) + } + processChild(child, false, "onChildViewAttachedToWindow") +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewAttachedToWindow().(child) + } + + override fun onChildViewDetachedFromWindow(child: View) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewDetachedFromWindow(). +// ^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewDetachedFromWindow().(child) + if (child is RecyclerView) { +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewDetachedFromWindow().(child) + processChildRecyclerViewDetached(child) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChildRecyclerViewDetached(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewDetachedFromWindow().(child) + } + if (visibleDataChanged) { +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + // On detach event caused by data set changed we need to re-process all children because + // the removal caused the others views to changes. + processChangeEventWithDetachedView(child, "onChildViewDetachedFromWindow") +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChangeEventWithDetachedView(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewDetachedFromWindow().(child) + visibleDataChanged = false +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + } else { + processChild(child, true, "onChildViewDetachedFromWindow") +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#processChild(). +// ^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Listener#onChildViewDetachedFromWindow().(child) + } + } + } + + /** + * The layout/scroll events are not enough to detect all sort of visibility changes. We also + * need to look at the data events from the adapter. + */ + internal inner class DataObserver : RecyclerView.AdapterDataObserver() { +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver# +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#``(). + /** + * Clear the current visibility statues + */ + override fun onChanged() { +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onChanged(). + if (notEpoxyManaged(attachedRecyclerView)) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + return + } + if (DEBUG_LOG) { +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#DEBUG_LOG. +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getDEBUG_LOG(). + Log.d(TAG, "onChanged()") +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG. +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG(). + } + visibilityIdToItemMap.clear() +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItemMap. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItemMap(). + visibilityIdToItems.clear() +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItems. +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItems(). +// ^^^^^ reference kotlin/collections/MutableList#clear(). + visibleDataChanged = true +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + } + + /** + * For all items after the inserted range shift each [EpoxyVisibilityTracker] adapter + * position by inserted item count. + */ + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeInserted(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeInserted().(positionStart) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeInserted().(itemCount) +// ^^^ reference kotlin/Int# + if (notEpoxyManaged(attachedRecyclerView)) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + return + } + if (DEBUG_LOG) { +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#DEBUG_LOG. +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getDEBUG_LOG(). + Log.d(TAG, "onItemRangeInserted($positionStart, $itemCount)") +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG. +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeInserted().(positionStart) +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeInserted().(itemCount) + } + for (item in visibilityIdToItems) { +// ^^^^ definition local19 +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItems. +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItems(). + if (item.adapterPosition >= positionStart) { +// ^^^^ reference local19 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#adapterPosition. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getAdapterPosition(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeInserted().(positionStart) + visibleDataChanged = true +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + item.shiftBy(itemCount) +// ^^^^ reference local19 +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#shiftBy(). +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeInserted().(itemCount) + } + } + } + + /** + * For all items after the removed range reverse-shift each [EpoxyVisibilityTracker] + * adapter position by removed item count + */ + override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeRemoved(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeRemoved().(positionStart) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeRemoved().(itemCount) +// ^^^ reference kotlin/Int# + if (notEpoxyManaged(attachedRecyclerView)) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + return + } + if (DEBUG_LOG) { +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#DEBUG_LOG. +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getDEBUG_LOG(). + Log.d(TAG, "onItemRangeRemoved($positionStart, $itemCount)") +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG. +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeRemoved().(positionStart) +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeRemoved().(itemCount) + } + for (item in visibilityIdToItems) { +// ^^^^ definition local20 +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItems. +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItems(). + if (item.adapterPosition >= positionStart) { +// ^^^^ reference local20 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#adapterPosition. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getAdapterPosition(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeRemoved().(positionStart) + visibleDataChanged = true +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + item.shiftBy(-itemCount) +// ^^^^ reference local20 +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#shiftBy(). +// ^ reference kotlin/Int#unaryMinus(). +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeRemoved().(itemCount) + } + } + } + + /** + * This is a bit more complex, for move we need to first swap the moved position then shift the + * items between the swap. To simplify we split any range passed to individual item moved. + * + * ps: anyway [androidx.recyclerview.widget.AdapterListUpdateCallback] + * does not seem to use range for moved items. + */ + override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeMoved(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeMoved().(fromPosition) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeMoved().(toPosition) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeMoved().(itemCount) +// ^^^ reference kotlin/Int# + if (notEpoxyManaged(attachedRecyclerView)) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + return + } + for (i in 0 until itemCount) { +// ^ definition local21 +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeMoved().(itemCount) + onItemMoved(fromPosition + i, toPosition + i) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeMoved().(fromPosition) +// ^ reference kotlin/Int#plus(+3). +// ^ reference local21 +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemRangeMoved().(toPosition) +// ^ reference kotlin/Int#plus(+3). +// ^ reference local21 + } + } + + private fun onItemMoved(fromPosition: Int, toPosition: Int) { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(toPosition) +// ^^^ reference kotlin/Int# + if (notEpoxyManaged(attachedRecyclerView)) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#attachedRecyclerView. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getAttachedRecyclerView(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setAttachedRecyclerView(). + return + } + if (DEBUG_LOG) { +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#DEBUG_LOG. +// ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getDEBUG_LOG(). + Log.d(TAG, "onItemRangeMoved($fromPosition, $fromPosition, 1)") +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG. +// ^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) + } + for (item in visibilityIdToItems) { +// ^^^^ definition local22 +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibilityIdToItems. +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibilityIdToItems(). + val position = item.adapterPosition +// ^^^^^^^^ definition local23 +// ^^^^ reference local22 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#adapterPosition. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#getAdapterPosition(). + if (position == fromPosition) { +// ^^^^^^^^ reference local23 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) + // We found the item to be moved, just swap the position. + item.shiftBy(toPosition - fromPosition) +// ^^^^ reference local22 +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#shiftBy(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(toPosition) +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) + visibleDataChanged = true +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + } else if (fromPosition < toPosition) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(toPosition) + // Item will be moved down in the list + if (position in (fromPosition + 1)..toPosition) { +// ^^^^^^^^ reference local23 +// ^^ reference kotlin/ranges/IntRange#contains(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) +// ^ reference kotlin/Int#plus(+3). +// ^^ reference kotlin/Int#rangeTo(+1). +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(toPosition) + // Item is between the moved from and to indexes, it should move up + item.shiftBy(-1) +// ^^^^ reference local22 +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#shiftBy(). +// ^ reference kotlin/Int#unaryMinus(). + visibleDataChanged = true +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + } + } else if (fromPosition > toPosition) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(toPosition) + // Item will be moved up in the list + if (position in toPosition until fromPosition) { +// ^^^^^^^^ reference local23 +// ^^ reference kotlin/ranges/IntRange#contains(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(toPosition) +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#onItemMoved().(fromPosition) + // Item is between the moved to and from indexes, it should move down + item.shiftBy(1) +// ^^^^ reference local22 +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityItem#shiftBy(). + visibleDataChanged = true +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#visibleDataChanged. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#getVisibleDataChanged(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#setVisibleDataChanged(). + } + } + } + } + + /** + * @param recyclerView the recycler view + * @return true if managed by an [BaseEpoxyAdapter] + */ + private fun notEpoxyManaged(recyclerView: RecyclerView?): Boolean { +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged().(recyclerView) +// ^^^^^^^ reference kotlin/Boolean# + return recyclerView == null || recyclerView.adapter !is BaseEpoxyAdapter +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged().(recyclerView) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#DataObserver#notEpoxyManaged().(recyclerView) + } + } + + companion object { + private const val TAG = "EpoxyVisibilityTracker" +// ^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG. +// ^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG(). + + @IdRes +// ^^^^^ reference androidx/annotation/IdRes#``(). + private val TAG_ID = R.id.epoxy_visibility_tracker +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG_ID. +// ^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG_ID(). + + /** + * @param recyclerView the view. + * @return the tracker for the given [RecyclerView]. Null if no tracker was attached. + */ + private fun getTracker(recyclerView: RecyclerView): EpoxyVisibilityTracker? { +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTracker(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTracker().(recyclerView) +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker# + return recyclerView.getTag(TAG_ID) as EpoxyVisibilityTracker? +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTracker().(recyclerView) +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG_ID. +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG_ID(). +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker# + } + + /** + * Store the tracker for the given [RecyclerView]. + * @param recyclerView the view + * @param tracker the tracker + */ + private fun setTracker( +// ^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#setTracker(). + recyclerView: RecyclerView, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#setTracker().(recyclerView) + tracker: EpoxyVisibilityTracker? +// ^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#setTracker().(tracker) +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker# + ) { + recyclerView.setTag(TAG_ID, tracker) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#setTracker().(recyclerView) +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#TAG_ID. +// ^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getTAG_ID(). +// ^^^^^^^ reference com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#setTracker().(tracker) + } + + // Not actionable at runtime. It is only useful for internal test-troubleshooting. + const val DEBUG_LOG = false +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#DEBUG_LOG. +// ^^^^^^^^^ definition com/airbnb/epoxy/EpoxyVisibilityTracker#Companion#getDEBUG_LOG(). + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/GroupModel.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/GroupModel.kt new file mode 100644 index 00000000..0b51a5c3 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/GroupModel.kt @@ -0,0 +1,51 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +import androidx.annotation.LayoutRes +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^^^^^ reference androidx/annotation/LayoutRes# + +/** + * An [EpoxyModelGroup] usable in a DSL manner via the [group] extension. + *

+ * Example: + * ``` + * group { + * id("photos") + * layout(R.layout.photo_grid) + * + * // add your models here, example: + * for (photo in photos) { + * imageView { + * id(photo.id) + * url(photo.url) + * } + * } + * } + * ``` + */ +@EpoxyModelClass +//^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModelClass#``(). +abstract class GroupModel : EpoxyModelGroup, ModelCollector { +// ^^^^^^^^^^ definition com/airbnb/epoxy/GroupModel# +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelCollector# + constructor() : super() +// ^^^^^^^^^^^ definition com/airbnb/epoxy/GroupModel#``(). + constructor(@LayoutRes layoutRes: Int) : super(layoutRes) +// ^^^^^^^^^^^ definition com/airbnb/epoxy/GroupModel#``(+1). +// ^^^^^^^^^ reference androidx/annotation/LayoutRes#``(). +// ^^^^^^^^^ definition com/airbnb/epoxy/GroupModel#``(+1).(layoutRes) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ reference com/airbnb/epoxy/GroupModel#``(+1).(layoutRes) + + override fun add(model: EpoxyModel<*>) { +// ^^^ definition com/airbnb/epoxy/GroupModel#add(). +// ^^^^^ definition com/airbnb/epoxy/GroupModel#add().(model) + super.addModel(model) +// ^^^^^ reference com/airbnb/epoxy/ModelCollector# +// ^^^^^ reference com/airbnb/epoxy/GroupModel#add().(model) + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/InternalExposer.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/InternalExposer.kt new file mode 100644 index 00000000..cd553b93 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/InternalExposer.kt @@ -0,0 +1,23 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +/** + * Exposes package private things as internal so files in other packages can use them. + */ + +internal fun EpoxyViewHolder.objectToBindInternal() = objectToBind() +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/InternalExposerKt#objectToBindInternal(). + +internal fun EpoxyModel<*>.viewTypeInternal() = viewType +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/InternalExposerKt#viewTypeInternal(). +internal fun BaseEpoxyAdapter.boundViewHoldersInternal() = boundViewHolders +// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/InternalExposerKt#boundViewHoldersInternal(). +internal fun BaseEpoxyAdapter.getModelForPositionInternal(position: Int): EpoxyModel<*>? { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/InternalExposerKt#getModelForPositionInternal(). +// ^^^^^^^^ definition com/airbnb/epoxy/InternalExposerKt#getModelForPositionInternal().(position) +// ^^^ reference kotlin/Int# + return getModelForPosition(position) +// ^^^^^^^^ reference com/airbnb/epoxy/InternalExposerKt#getModelForPositionInternal().(position) +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelCollector.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelCollector.kt new file mode 100644 index 00000000..3b9d6be5 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelCollector.kt @@ -0,0 +1,16 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +/** + * Interface used to collect models. Used by [EpoxyController]. It is also convenient to build DSL + * helpers for carousel: @link https://github.com/airbnb/epoxy/issues/847. + */ +interface ModelCollector { +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelCollector# + + fun add(model: EpoxyModel<*>) +// ^^^ definition com/airbnb/epoxy/ModelCollector#add(). +// ^^^^^ definition com/airbnb/epoxy/ModelCollector#add().(model) +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelGroupHolder.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelGroupHolder.kt new file mode 100644 index 00000000..3ec1aeaf --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelGroupHolder.kt @@ -0,0 +1,670 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +import android.view.View +import android.view.ViewGroup +import android.view.ViewParent +import android.view.ViewStub +import androidx.annotation.VisibleForTesting +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^^^^^^^^^^^^^ reference androidx/annotation/VisibleForTesting# +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ +import com.airbnb.viewmodeladapter.R +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +import java.util.ArrayList +// ^^^^ reference java/ +// ^^^^ reference java/util/ +// ^^^^^^^^^ reference java/util/ArrayList# + +class ModelGroupHolder(private val modelGroupParent: ViewParent) : EpoxyHolder() { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder# +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#``(). +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#modelGroupParent. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getModelGroupParent(). +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#``().(modelGroupParent) + val viewHolders = ArrayList(4) +// ^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#viewHolders. +// ^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getViewHolders(). + + /** Use parent pool or create a local pool */ + @VisibleForTesting +// ^^^^^^^^^^^^^^^^^ reference androidx/annotation/VisibleForTesting#``(). + val viewPool = findViewPool(modelGroupParent) +// ^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#viewPool. +// ^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getViewPool(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#Companion#findViewPool(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#modelGroupParent. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getModelGroupParent(). + + /** + * Get the root view group (aka + * [androidx.recyclerview.widget.RecyclerView.ViewHolder.itemView]. + * You can override [EpoxyModelGroup.bind] and use this method to make custom + * changes to the root view. + */ + lateinit var rootView: ViewGroup +// ^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#rootView. +// ^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getRootView(). + private set +// ^^^ definition com/airbnb/epoxy/ModelGroupHolder#setRootView(). + + private lateinit var childContainer: ViewGroup +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#childContainer. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getChildContainer(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#setChildContainer(). + private lateinit var stubs: List +// ^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#stubs. +// ^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getStubs(). +// ^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#setStubs(). +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData# + private var boundGroup: EpoxyModelGroup? = null +// ^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#boundGroup. +// ^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getBoundGroup(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#setBoundGroup(). + + private fun usingStubs(): Boolean = stubs.isNotEmpty() +// ^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#usingStubs(). +// ^^^^^^^ reference kotlin/Boolean# +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#stubs. +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getStubs(). +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setStubs(). +// ^^^^^^^^^^ reference kotlin/collections/CollectionsKt#isNotEmpty(+9). + + override fun bindView(itemView: View) { +// ^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#bindView(). +// ^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#bindView().(itemView) + if (itemView !is ViewGroup) { +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#bindView().(itemView) + throw IllegalStateException( +// ^^^^^^^^^^^^^^^^^^^^^ reference kotlin/IllegalStateException#``(+1). + "The layout provided to EpoxyModelGroup must be a ViewGroup" + ) + } + + rootView = itemView +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#rootView. +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getRootView(). +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#bindView().(itemView) + childContainer = findChildContainer(rootView) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#childContainer. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getChildContainer(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setChildContainer(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#findChildContainer(). +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#rootView. +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getRootView(). + + stubs = if (childContainer.childCount != 0) { +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#stubs. +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getStubs(). +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setStubs(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#childContainer. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getChildContainer(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setChildContainer(). + createViewStubData(childContainer) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#createViewStubData(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#childContainer. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getChildContainer(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setChildContainer(). + } else { + emptyList() +// ^^^^^^^^^ reference kotlin/collections/CollectionsKt#emptyList(). + } + } + + /** + * By default the outermost viewgroup is used as the container that views are added to. However, + * users can specify a different, nested view group to use as the child container by marking it + * with a special id. + */ + private fun findChildContainer(outermostRoot: ViewGroup): ViewGroup { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#findChildContainer(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#findChildContainer().(outermostRoot) + val customRoot = outermostRoot.findViewById(R.id.epoxy_model_group_child_container) +// ^^^^^^^^^^ definition local0 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#findChildContainer().(outermostRoot) + + return customRoot as? ViewGroup ?: outermostRoot +// ^^^^^^^^^^ reference local0 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#findChildContainer().(outermostRoot) + } + + private fun createViewStubData(viewGroup: ViewGroup): List { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#createViewStubData(). +// ^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#createViewStubData().(viewGroup) +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData# + return ArrayList(4).apply { +// ^^^^^^^^^ reference java/util/ArrayList#``(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData# +// ^^^^^ reference kotlin/StandardKt#apply(). + + collectViewStubs(viewGroup, this) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#collectViewStubs(). +// ^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#createViewStubData().(viewGroup) +// ^^^^ reference + + if (isEmpty()) { +// ^^^^^^^ reference java/util/ArrayList#isEmpty(). + throw IllegalStateException( +// ^^^^^^^^^^^^^^^^^^^^^ reference kotlin/IllegalStateException#``(+1). + "No view stubs found. If viewgroup is not empty it must contain ViewStubs." + ) + } + } + } + + private fun collectViewStubs( +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#collectViewStubs(). + viewGroup: ViewGroup, +// ^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#collectViewStubs().(viewGroup) + stubs: ArrayList +// ^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#collectViewStubs().(stubs) +// ^^^^^^^^^ reference java/util/ArrayList# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData# + ) { + for (i in 0 until viewGroup.childCount) { +// ^ definition local1 +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#collectViewStubs().(viewGroup) + val child = viewGroup.getChildAt(i) +// ^^^^^ definition local2 +// ^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#collectViewStubs().(viewGroup) +// ^ reference local1 + + if (child is ViewGroup) { +// ^^^^^ reference local2 + collectViewStubs(child, stubs) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#collectViewStubs(). +// ^^^^^ reference local2 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#collectViewStubs().(stubs) + } else if (child is ViewStub) { +// ^^^^^ reference local2 + stubs.add(ViewStubData(viewGroup, child, i)) +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#collectViewStubs().(stubs) +// ^^^ reference java/util/ArrayList#add(+1). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#``(). +// ^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#collectViewStubs().(viewGroup) +// ^^^^^ reference local2 +// ^ reference local1 + } + } + } + + fun bindGroupIfNeeded(group: EpoxyModelGroup) { +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#bindGroupIfNeeded(). +// ^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#bindGroupIfNeeded().(group) + val previouslyBoundGroup = this.boundGroup +// ^^^^^^^^^^^^^^^^^^^^ definition local3 +// ^^^^ reference com/airbnb/epoxy/ModelGroupHolder# +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#boundGroup. +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getBoundGroup(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setBoundGroup(). + + if (previouslyBoundGroup === group) { +// ^^^^^^^^^^^^^^^^^^^^ reference local3 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#bindGroupIfNeeded().(group) + return + } else if (previouslyBoundGroup != null) { +// ^^^^^^^^^^^^^^^^^^^^ reference local3 + // A different group is being bound; this can happen when an onscreen model is changed. + // The models or their layouts could have changed, so views may need to be updated + + if (previouslyBoundGroup.models.size > group.models.size) { +// ^^^^^^^^^^^^^^^^^^^^ reference local3 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#bindGroupIfNeeded().(group) + for (i in previouslyBoundGroup.models.size - 1 downTo group.models.size) { +// ^ definition local4 +// ^^^^^^^^^^^^^^^^^^^^ reference local3 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#bindGroupIfNeeded().(group) + removeAndRecycleView(i) +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#removeAndRecycleView(). +// ^ reference local4 + } + } + } + + this.boundGroup = group +// ^^^^ reference com/airbnb/epoxy/ModelGroupHolder# +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#boundGroup. +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getBoundGroup(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setBoundGroup(). +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#bindGroupIfNeeded().(group) + val models = group.models +// ^^^^^^ definition local5 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#bindGroupIfNeeded().(group) + val modelCount = models.size +// ^^^^^^^^^^ definition local6 +// ^^^^^^ reference local5 + + if (usingStubs() && stubs.size < modelCount) { +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#usingStubs(). +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#stubs. +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getStubs(). +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setStubs(). +// ^^^^ reference kotlin/collections/List#size. +// ^^^^ reference kotlin/collections/List#getSize(). +// ^^^^^^^^^^ reference local6 + throw IllegalStateException( +// ^^^^^^^^^^^^^^^^^^^^^ reference kotlin/IllegalStateException#``(+1). + "Insufficient view stubs for EpoxyModelGroup. $modelCount models were provided but only ${stubs.size} view stubs exist." +// ^^^^^^^^^^ reference local6 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#stubs. +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getStubs(). +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setStubs(). +// ^^^^ reference kotlin/collections/List#size. +// ^^^^ reference kotlin/collections/List#getSize(). + ) + } + viewHolders.ensureCapacity(modelCount) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#viewHolders. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolders(). +// ^^^^^^^^^^ reference local6 + + for (i in 0 until modelCount) { +// ^ definition local7 +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^^ reference local6 + val model = models[i] +// ^^^^^ definition local8 +// ^^^^^^ reference local5 +// ^ reference local7 + val previouslyBoundModel = previouslyBoundGroup?.models?.getOrNull(i) +// ^^^^^^^^^^^^^^^^^^^^ definition local9 +// ^^^^^^^^^^^^^^^^^^^^ reference local3 +// ^ reference local7 + val stubData = stubs.getOrNull(i) +// ^^^^^^^^ definition local10 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#stubs. +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getStubs(). +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setStubs(). +// ^^^^^^^^^ reference kotlin/collections/CollectionsKt#getOrNull(+9). +// ^ reference local7 + val parent = stubData?.viewGroup ?: childContainer +// ^^^^^^ definition local11 +// ^^^^^^^^ reference local10 +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewGroup. +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewGroup(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#childContainer. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getChildContainer(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setChildContainer(). + + if (previouslyBoundModel != null) { +// ^^^^^^^^^^^^^^^^^^^^ reference local9 + if (areSameViewType(previouslyBoundModel, model)) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#areSameViewType(). +// ^^^^^^^^^^^^^^^^^^^^ reference local9 +// ^^^^^ reference local8 + continue + } + + removeAndRecycleView(i) +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#removeAndRecycleView(). +// ^ reference local7 + } + + val holder = getViewHolder(parent, model) +// ^^^^^^ definition local12 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolder(). +// ^^^^^^ reference local11 +// ^^^^^ reference local8 + + if (stubData == null) { +// ^^^^^^^^ reference local10 +// ^^ reference com/airbnb/epoxy/ViewStubData#equals(+-1). + childContainer.addView(holder.itemView, i) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#childContainer. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getChildContainer(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setChildContainer(). +// ^^^^^^ reference local12 +// ^ reference local7 + } else { + stubData.setView(holder.itemView, group.useViewStubLayoutParams(model, i)) +// ^^^^^^^^ reference local10 +// ^^^^^^^ reference com/airbnb/epoxy/ViewStubData#setView(). +// ^^^^^^ reference local12 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#bindGroupIfNeeded().(group) +// ^^^^^ reference local8 +// ^ reference local7 + } + + viewHolders.add(i, holder) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#viewHolders. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolders(). +// ^ reference local7 +// ^^^^^^ reference local12 + } + } + + private fun areSameViewType(model1: EpoxyModel<*>, model2: EpoxyModel<*>?): Boolean { +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#areSameViewType(). +// ^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#areSameViewType().(model1) +// ^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#areSameViewType().(model2) +// ^^^^^^^ reference kotlin/Boolean# + return ViewTypeManager.getViewType(model1) == ViewTypeManager.getViewType(model2) +// ^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#areSameViewType().(model1) +// ^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#areSameViewType().(model2) + } + + private fun getViewHolder(parent: ViewGroup, model: EpoxyModel<*>): EpoxyViewHolder { +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getViewHolder(). +// ^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getViewHolder().(parent) +// ^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#getViewHolder().(model) + val viewType = ViewTypeManager.getViewType(model) +// ^^^^^^^^ definition local13 +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolder().(model) + val recycledView = viewPool.getRecycledView(viewType) +// ^^^^^^^^^^^^ definition local14 +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#viewPool. +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewPool(). +// ^^^^^^^^ reference local13 + + return recycledView as? EpoxyViewHolder +// ^^^^^^^^^^^^ reference local14 + ?: HELPER_ADAPTER.createViewHolder( +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#Companion#HELPER_ADAPTER. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#Companion#getHELPER_ADAPTER(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#createViewHolder(). + modelGroupParent, +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#modelGroupParent. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getModelGroupParent(). + model, +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolder().(model) + parent, +// ^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolder().(parent) + viewType +// ^^^^^^^^ reference local13 + ) + } + + fun unbindGroup() { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#unbindGroup(). + if (boundGroup == null) { +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#boundGroup. +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getBoundGroup(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setBoundGroup(). + throw IllegalStateException("Group is not bound") +// ^^^^^^^^^^^^^^^^^^^^^ reference kotlin/IllegalStateException#``(+1). + } + + repeat(viewHolders.size) { +// ^^^^^^ reference kotlin/StandardKt#repeat(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#viewHolders. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolders(). + // Remove from the end for more efficient list actions + removeAndRecycleView(viewHolders.size - 1) +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#removeAndRecycleView(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#viewHolders. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolders(). + } + + boundGroup = null +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#boundGroup. +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getBoundGroup(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setBoundGroup(). + } + + private fun removeAndRecycleView(modelPosition: Int) { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#removeAndRecycleView(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#removeAndRecycleView().(modelPosition) +// ^^^ reference kotlin/Int# + if (usingStubs()) { +// ^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#usingStubs(). + stubs[modelPosition].resetStub() +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#stubs. +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getStubs(). +// ^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setStubs(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#removeAndRecycleView().(modelPosition) +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#resetStub(). + } else { + childContainer.removeViewAt(modelPosition) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#childContainer. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getChildContainer(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#setChildContainer(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#removeAndRecycleView().(modelPosition) + } + + val viewHolder = viewHolders.removeAt(modelPosition) +// ^^^^^^^^^^ definition local15 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#viewHolders. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewHolders(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#removeAndRecycleView().(modelPosition) + viewHolder.unbind() +// ^^^^^^^^^^ reference local15 + viewPool.putRecycledView(viewHolder) +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#viewPool. +// ^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#getViewPool(). +// ^^^^^^^^^^ reference local15 + } + + companion object { + + private val HELPER_ADAPTER = HelperAdapter() +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#Companion#HELPER_ADAPTER. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#Companion#getHELPER_ADAPTER(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#``(). + + private fun findViewPool(view: ViewParent): RecyclerView.RecycledViewPool { +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelGroupHolder#Companion#findViewPool(). +// ^^^^ definition com/airbnb/epoxy/ModelGroupHolder#Companion#findViewPool().(view) + var viewPool: RecyclerView.RecycledViewPool? = null +// ^^^^^^^^ definition local16 + while (viewPool == null) { +// ^^^^^^^^ reference local16 + viewPool = if (view is RecyclerView) { +// ^^^^^^^^ reference local16 +// ^^^^ reference com/airbnb/epoxy/ModelGroupHolder#Companion#findViewPool().(view) + view.recycledViewPool +// ^^^^ reference com/airbnb/epoxy/ModelGroupHolder#Companion#findViewPool().(view) + } else { + val parent = view.parent +// ^^^^^^ definition local17 +// ^^^^ reference com/airbnb/epoxy/ModelGroupHolder#Companion#findViewPool().(view) + if (parent is ViewParent) { +// ^^^^^^ reference local17 + findViewPool(parent) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder#Companion#findViewPool(). +// ^^^^^^ reference local17 + } else { + // This model group is is not in a RecyclerView + LocalGroupRecycledViewPool() +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/LocalGroupRecycledViewPool#``(). + } + } + } + return viewPool +// ^^^^^^^^ reference local16 + } + } +} + +private class ViewStubData( +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/ViewStubData# +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#``(). + val viewGroup: ViewGroup, +// ^^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#viewGroup. +// ^^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#getViewGroup(). +// ^^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#``().(viewGroup) + val viewStub: ViewStub, +// ^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#viewStub. +// ^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#getViewStub(). +// ^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#``().(viewStub) + val position: Int +// ^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#position. +// ^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#getPosition(). +// ^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#``().(position) +// ^^^ reference kotlin/Int# +) { + + fun setView(view: View, useStubLayoutParams: Boolean) { +// ^^^^^^^ definition com/airbnb/epoxy/ViewStubData#setView(). +// ^^^^ definition com/airbnb/epoxy/ViewStubData#setView().(view) +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#setView().(useStubLayoutParams) +// ^^^^^^^ reference kotlin/Boolean# + removeCurrentView() +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#removeCurrentView(). + + // Carry over the stub id manually since we aren't inflating via the stub + val inflatedId = viewStub.inflatedId +// ^^^^^^^^^^ definition local18 +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewStub. +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewStub(). + if (inflatedId != View.NO_ID) { +// ^^^^^^^^^^ reference local18 + view.id = inflatedId +// ^^^^ reference com/airbnb/epoxy/ViewStubData#setView().(view) +// ^^^^^^^^^^ reference local18 + } + + if (useStubLayoutParams) { +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#setView().(useStubLayoutParams) + viewGroup.addView(view, position, viewStub.layoutParams) +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewGroup. +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewGroup(). +// ^^^^ reference com/airbnb/epoxy/ViewStubData#setView().(view) +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#position. +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getPosition(). +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewStub. +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewStub(). + } else { + viewGroup.addView(view, position) +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewGroup. +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewGroup(). +// ^^^^ reference com/airbnb/epoxy/ViewStubData#setView().(view) +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#position. +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getPosition(). + } + } + + fun resetStub() { +// ^^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#resetStub(). + removeCurrentView() +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#removeCurrentView(). + viewGroup.addView(viewStub, position) +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewGroup. +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewGroup(). +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewStub. +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewStub(). +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#position. +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getPosition(). + } + + private fun removeCurrentView() { +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ViewStubData#removeCurrentView(). + val view = viewGroup.getChildAt(position) +// ^^^^ definition local19 +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewGroup. +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewGroup(). +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#position. +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getPosition(). + ?: throw IllegalStateException("No view exists at position $position") +// ^^^^^^^^^^^^^^^^^^^^^ reference kotlin/IllegalStateException#``(+1). +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#position. +// ^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getPosition(). + viewGroup.removeView(view) +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#viewGroup. +// ^^^^^^^^^ reference com/airbnb/epoxy/ViewStubData#getViewGroup(). +// ^^^^ reference local19 + } +} + +/** + * Local pool to the [ModelGroupHolder] + */ +private class LocalGroupRecycledViewPool : RecyclerView.RecycledViewPool() +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/LocalGroupRecycledViewPool# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/LocalGroupRecycledViewPool#``(). + +/** + * A viewholder's viewtype can only be set internally in an adapter when the viewholder + * is created. To work around that we do the creation in an adapter. + */ +private class HelperAdapter : RecyclerView.Adapter() { +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter# +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#``(). + + private var model: EpoxyModel<*>? = null +// ^^^^^ definition com/airbnb/epoxy/HelperAdapter#model. +// ^^^^^ definition com/airbnb/epoxy/HelperAdapter#getModel(). +// ^^^^^ definition com/airbnb/epoxy/HelperAdapter#setModel(). + private var modelGroupParent: ViewParent? = null +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#modelGroupParent. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#getModelGroupParent(). +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#setModelGroupParent(). + + fun createViewHolder( +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#createViewHolder(). + modelGroupParent: ViewParent, +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#createViewHolder().(modelGroupParent) + model: EpoxyModel<*>, +// ^^^^^ definition com/airbnb/epoxy/HelperAdapter#createViewHolder().(model) + parent: ViewGroup, +// ^^^^^^ definition com/airbnb/epoxy/HelperAdapter#createViewHolder().(parent) + viewType: Int +// ^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#createViewHolder().(viewType) +// ^^^ reference kotlin/Int# + ): EpoxyViewHolder { + this.model = model +// ^^^^ reference com/airbnb/epoxy/HelperAdapter# +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#model. +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#getModel(). +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#setModel(). +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#createViewHolder().(model) + this.modelGroupParent = modelGroupParent +// ^^^^ reference com/airbnb/epoxy/HelperAdapter# +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#modelGroupParent. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#getModelGroupParent(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#setModelGroupParent(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#createViewHolder().(modelGroupParent) + val viewHolder = createViewHolder(parent, viewType) +// ^^^^^^^^^^ definition local20 +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#createViewHolder(). +// ^^^^^^ reference com/airbnb/epoxy/HelperAdapter#createViewHolder().(parent) +// ^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#createViewHolder().(viewType) + this.model = null +// ^^^^ reference com/airbnb/epoxy/HelperAdapter# +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#model. +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#getModel(). +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#setModel(). + this.modelGroupParent = null +// ^^^^ reference com/airbnb/epoxy/HelperAdapter# +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#modelGroupParent. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#getModelGroupParent(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#setModelGroupParent(). + return viewHolder +// ^^^^^^^^^^ reference local20 + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EpoxyViewHolder { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#onCreateViewHolder(). +// ^^^^^^ definition com/airbnb/epoxy/HelperAdapter#onCreateViewHolder().(parent) +// ^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#onCreateViewHolder().(viewType) +// ^^^ reference kotlin/Int# + return EpoxyViewHolder(modelGroupParent, model!!.buildView(parent), model!!.shouldSaveViewState()) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#modelGroupParent. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#getModelGroupParent(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/HelperAdapter#setModelGroupParent(). +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#model. +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#getModel(). +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#setModel(). +// ^^^^^^ reference com/airbnb/epoxy/HelperAdapter#onCreateViewHolder().(parent) +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#model. +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#getModel(). +// ^^^^^ reference com/airbnb/epoxy/HelperAdapter#setModel(). + } + + override fun onBindViewHolder(holder: EpoxyViewHolder, position: Int) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#onBindViewHolder(). +// ^^^^^^ definition com/airbnb/epoxy/HelperAdapter#onBindViewHolder().(holder) +// ^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#onBindViewHolder().(position) +// ^^^ reference kotlin/Int# + } + + override fun getItemCount() = 1 +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/HelperAdapter#getItemCount(). +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelList.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelList.java index 5ec45f1c..43c97e41 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelList.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelList.java @@ -184,7 +184,7 @@ public boolean add(EpoxyModel epoxyModel) { // ^^^^ reference java/util/ArrayList#size(). return super.add(epoxyModel); // ^^^^^ reference com/airbnb/epoxy/ModelList#super. -// ^^^ reference java/util/ArrayList#add(+1). +// ^^^ reference java/util/ArrayList#add(). // ^^^^^^^^^^ reference local13 } @@ -200,7 +200,7 @@ public void add(int index, EpoxyModel element) { // ^^^^^ reference local14 super.add(index, element); // ^^^^^ reference com/airbnb/epoxy/ModelList#super. -// ^^^ reference java/util/ArrayList#add(+2). +// ^^^ reference java/util/ArrayList#add(+1). // ^^^^^ reference local14 // ^^^^^^^ reference local15 } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelProp.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelProp.java deleted file mode 100644 index c68151f6..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelProp.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * Used in conjunction with {@link ModelView} to automatically generate EpoxyModels from custom - * views - https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations - *

- * This annotation should be used on setter methods within a custom view class. Setters annotated - * with this will have a corresponding field on the generated model. - *

- * Alternatively, if your setter has no side effects, you can use this annotation on a field to have - * Epoxy set that field directly and avoid the boiler plate of a setter. - *

- * For convenience you can use {@link TextProp} instead for props representing text. - *

- * Similarly you can use {@link CallbackProp} for props representing listeners or callbacks. - *

- * Alternatively, the {@link #options()} parameter can be used to configure a prop. - */ -@Target({ElementType.METHOD, ElementType.FIELD}) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^^ reference java/lang/annotation/ElementType#METHOD. -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^ reference java/lang/annotation/ElementType#FIELD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface ModelProp { -// ^^^^^^^^^ definition com/airbnb/epoxy/ModelProp# @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.CLASS) public @interface ModelProp - - enum Option { -// ^^^^^^ definition com/airbnb/epoxy/ModelProp#Option# public enum Option -// ^^^^^^ definition com/airbnb/epoxy/ModelProp#Option#``(). private Option() - /** - * By default every prop's hashCode and equals method is called when determining the - * model's state. This option can be used to exclude an prop's hashCode/equals from - * contributing to the state. - *

- * This is useful for props that may change without actually changing the model's state. A - * common case is an anonymous click listener that gets recreated with every bind call. - *

- * When this is used, the prop will affect the model state solely based on whether it is - * null or non null. - *

- * A good rule of thumb for whether to use this on an prop is, "If this is the only - * prop that changed do I still need to rebind and update the view?" If the answer if no - * then you can use this to prevent the rebind. - */ - DoNotHash, -// ^^^^^^^^^ definition com/airbnb/epoxy/ModelProp#Option#DoNotHash. Option.DoNotHash /* ordinal 0 */ - /** - * This is meant to be used in conjunction with {@link PackageEpoxyConfig#requireHashCode()}. - * When that is enabled every prop must implement hashCode/equals. However, there are some - * valid cases where the prop type does not implement hashCode/equals, but it should still - * be hashed at runtime and contribute to the model's state. Use this option on an prop in - * that case to tell the processor to let it pass the hashCode/equals validation. - *

- * An example case is AutoValue classes, where the generated class correctly implements - * hashCode/equals at runtime. - *

- * If you use this it is your responsibility to ensure that the object assigned to the prop - * at runtime correctly implements hashCode/equals. If you don't want the prop to - * contribute to model state you should use {@link Option#DoNotHash} instead. -// ^^^^^^ reference com/airbnb/epoxy/ModelProp#Option#``(). - */ - IgnoreRequireHashCode, -// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelProp#Option#IgnoreRequireHashCode. Option.IgnoreRequireHashCode /* ordinal 1 */ - /** - * Setters with a type of {@link CharSequence} can add this option to have {@link - * androidx.annotation.StringRes} and {@link androidx.annotation.PluralsRes} - * overload methods generated on the model, so users can set the string via a resource. - */ - GenerateStringOverloads, -// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelProp#Option#GenerateStringOverloads. Option.GenerateStringOverloads /* ordinal 2 */ - /** - * Setters with a param annotated with @Nullable can use this to have null set when the view is - * recycled. - */ - NullOnRecycle -// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelProp#Option#NullOnRecycle. Option.NullOnRecycle /* ordinal 3 */ - } - - /** Specify any {@link Option} values that should be used when generating the model class. */ -// ^^^^^^ reference com/airbnb/epoxy/ModelProp#Option#``(). -// ^^^^^^ reference com/airbnb/epoxy/ModelProp#Option#``(). -// ^^^^^^ reference com/airbnb/epoxy/ModelProp#Option#``(). - Option[] options() default {}; -//^^^^^^ reference com/airbnb/epoxy/ModelProp#Option# -// ^^^^^^^ definition com/airbnb/epoxy/ModelProp#options(). public abstract Option[] options() - - /** - * The same as {@link #options()}, but this allows the shortcut of setting an option eg - * "@ModelProp(DoNotHash)". - */ - Option[] value() default {}; -//^^^^^^ reference com/airbnb/epoxy/ModelProp#Option# -// ^^^^^ definition com/airbnb/epoxy/ModelProp#value(). public abstract Option[] value() - - /** - * The name of the constant field that should be used as the default value for this prop. The - * default value will be used if the prop value isn't set on the model. - *

- * For example, you would define a constant in your view class like static final int - * DEFAULT_NUM_LINES = 3, and then set this parameter to "DEFAULT_NUM_LINES" so that the - * annotation processor knows what constant to reference. - *

- * The name of the constant must be used instead of referencing the constant directly since - * objects are not valid annotation parameters. - */ - String defaultValue() default ""; -//^^^^^^ reference java/lang/String# -// ^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelProp#defaultValue(). public abstract String defaultValue() - - /** - * Specify an optional group name. Multiple props with the same group name will only allow one of - * the props to be set on the view. - *

- * https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations#prop-groups - */ - String group() default ""; -//^^^^^^ reference java/lang/String# -// ^^^^^ definition com/airbnb/epoxy/ModelProp#group(). public abstract String group() -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelView.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelView.java deleted file mode 100644 index efd0d9ce..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ModelView.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -import androidx.annotation.LayoutRes; -// ^^^^^^^^ reference androidx/ -// ^^^^^^^^^^ reference androidx/annotation/ -// ^^^^^^^^^ reference androidx/annotation/LayoutRes# - -/** - * An annotation on custom view classes to automatically generate an EpoxyModel for that view. Used - * in conjunction with {@link ModelProp} - *

- * See https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations - */ -@Target(ElementType.TYPE) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^ reference java/lang/annotation/ElementType#TYPE. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface ModelView { -// ^^^^^^^^^ definition com/airbnb/epoxy/ModelView# @Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface ModelView - - /** - * Use with {@link #autoLayout()} to declare what layout parameters should be used to size your - * view when it is added to a RecyclerView. This maps to the LayoutParams options {@code - * layout_width} and {@code layout_height}. - */ - enum Size { -// ^^^^ definition com/airbnb/epoxy/ModelView#Size# public enum Size -// ^^^^ definition com/airbnb/epoxy/ModelView#Size#``(). private Size() - NONE, -// ^^^^ definition com/airbnb/epoxy/ModelView#Size#NONE. Size.NONE /* ordinal 0 */ - WRAP_WIDTH_WRAP_HEIGHT, -// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelView#Size#WRAP_WIDTH_WRAP_HEIGHT. Size.WRAP_WIDTH_WRAP_HEIGHT /* ordinal 1 */ - WRAP_WIDTH_MATCH_HEIGHT, -// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelView#Size#WRAP_WIDTH_MATCH_HEIGHT. Size.WRAP_WIDTH_MATCH_HEIGHT /* ordinal 2 */ - MATCH_WIDTH_WRAP_HEIGHT, -// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelView#Size#MATCH_WIDTH_WRAP_HEIGHT. Size.MATCH_WIDTH_WRAP_HEIGHT /* ordinal 3 */ - MATCH_WIDTH_MATCH_HEIGHT -// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelView#Size#MATCH_WIDTH_MATCH_HEIGHT. Size.MATCH_WIDTH_MATCH_HEIGHT /* ordinal 4 */ - } - - /** - * If set to an option besides {@link Size#NONE} Epoxy will create an instance of this view -// ^^^^ reference com/airbnb/epoxy/ModelView#Size#``(). -// ^^^^ reference com/airbnb/epoxy/ModelView#Size#``(). -// ^^^^ reference com/airbnb/epoxy/ModelView#Size#``(). -// ^^^^ reference com/airbnb/epoxy/ModelView#Size#``(). -// ^^^^ reference com/airbnb/epoxy/ModelView#Size#``(). - * programmatically at runtime instead of inflating the view from xml. This is an alternative to - * using {@link #defaultLayout()}, and is a good option if you just need to specify layout - * parameters on your view with no other styling. - *

- * The size option you choose will define which layout parameters Epoxy uses at runtime when - * creating the view. - */ - Size autoLayout() default Size.NONE; -//^^^^ reference com/airbnb/epoxy/ModelView#Size# -// ^^^^^^^^^^ definition com/airbnb/epoxy/ModelView#autoLayout(). public abstract Size autoLayout() -// ^^^^ reference com/airbnb/epoxy/ModelView#Size# -// ^^^^ reference com/airbnb/epoxy/ModelView#Size#NONE. - - /** - * The layout file to use in the generated model to inflate the view. This is required unless a - * default pattern is set via {@link PackageModelViewConfig} or {@link #autoLayout()} is used. - *

- * Overrides any default set in {@link PackageModelViewConfig} - */ - @LayoutRes int defaultLayout() default 0; -// ^^^^^^^^^ reference androidx/annotation/LayoutRes# -// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelView#defaultLayout(). @LayoutRes public abstract int defaultLayout() - /** - * An optional EpoxyModel subclass to use as the base class of the generated view. A default can - * also be set with {@link PackageModelViewConfig} - *

- * * Overrides any default set in {@link PackageModelViewConfig} - */ - Class baseModelClass() default Void.class; -//^^^^^ reference java/lang/Class# -// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelView#baseModelClass(). public abstract Class baseModelClass() -// ^^^^ reference java/lang/Void# -// ^^^^^ reference java/lang/Void#class. - /** - * Whether the model should save view state when unbound. - *

- * see: EpoxyModel#shouldSaveViewState - */ - boolean saveViewState() default false; -// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/ModelView#saveViewState(). public abstract boolean saveViewState() - /** - * True to have the generated model take up the total available span count. False to instead use a - * span count of 1. If you need to programmatically determine your model's span size you can use - * the spanSizeCallback method on EpoxyModel. - */ - boolean fullSpan() default true; -// ^^^^^^^^ definition com/airbnb/epoxy/ModelView#fullSpan(). public abstract boolean fullSpan() -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnViewRecycled.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnViewRecycled.java deleted file mode 100644 index ae1d1980..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnViewRecycled.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * This can be used to annotate methods inside classes with a {@link com.airbnb.epoxy.ModelView} - * annotation. Methods with this annotation will be called when the view is recycled by the - * RecyclerView. - */ -@Target(ElementType.METHOD) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^^ reference java/lang/annotation/ElementType#METHOD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface OnViewRecycled { -// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/OnViewRecycled# @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) public @interface OnViewRecycled -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnVisibilityChanged.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnVisibilityChanged.java deleted file mode 100644 index cfc6b9de..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnVisibilityChanged.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * This can be used to annotate methods inside classes with a {@link ModelView} annotation. Methods - * with this annotation will be called when visibility part of the view change. - *

- * Annotated methods should follow this signature : - * `@OnVisibilityChanged - * public void method( - * float percentVisibleHeight, float percentVisibleWidth: Float, - * int visibleHeight, int visibleWidth - * )` - *

- * The equivalent methods on the model is {@link com.airbnb.epoxy.EpoxyModel#onVisibilityChanged} - *

- * @see OnModelVisibilityChangedListener - */ -@Target(ElementType.METHOD) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^^ reference java/lang/annotation/ElementType#METHOD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface OnVisibilityChanged { -// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/OnVisibilityChanged# @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) public @interface OnVisibilityChanged -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnVisibilityStateChanged.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnVisibilityStateChanged.java deleted file mode 100644 index cb23eac4..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/OnVisibilityStateChanged.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * This can be used to annotate methods inside classes with a {@link ModelView} annotation. Methods - * with this annotation will be called when the visibility state is changed. - *

- * Annotated methods should follow this signature : - * `@OnVisibilityStateChanged - * public void method(@Visibility int state)` - *

- * Possible States are declared in {@link com.airbnb.epoxy.VisibilityState}. - *

- * The equivalent methods on the model is - * {@link com.airbnb.epoxy.EpoxyModel#onVisibilityStateChanged} - *

- * @see OnModelVisibilityStateChangedListener - */ -@SuppressWarnings("JavadocReference") -//^^^^^^^^^^^^^^^ reference java/lang/SuppressWarnings# -@Target(ElementType.METHOD) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^^ reference java/lang/annotation/ElementType#METHOD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface OnVisibilityStateChanged { -// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/OnVisibilityStateChanged# @SuppressWarnings("JavadocReference") @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) public @interface OnVisibilityStateChanged -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/PackageEpoxyConfig.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/PackageEpoxyConfig.java deleted file mode 100644 index 7b9a769d..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/PackageEpoxyConfig.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * Use this annotation on any class or interface in your package to specify default behavior for the Epoxy - * annotation processor for that package. You can only have one instance of this annotation per - * package. - *

- * If an instance of this annotation is not found in a package then the default values are used. - *

- * See https://github.com/airbnb/epoxy/wiki/Configuration for more details on these options. - */ -@Target(ElementType.TYPE) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^ reference java/lang/annotation/ElementType#TYPE. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface PackageEpoxyConfig { -// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageEpoxyConfig# @Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface PackageEpoxyConfig - boolean REQUIRE_HASHCODE_DEFAULT = false; -// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageEpoxyConfig#REQUIRE_HASHCODE_DEFAULT. public static final boolean REQUIRE_HASHCODE_DEFAULT - boolean REQUIRE_ABSTRACT_MODELS_DEFAULT = false; -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageEpoxyConfig#REQUIRE_ABSTRACT_MODELS_DEFAULT. public static final boolean REQUIRE_ABSTRACT_MODELS_DEFAULT - boolean IMPLICITLY_ADD_AUTO_MODELS_DEFAULT = false; -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageEpoxyConfig#IMPLICITLY_ADD_AUTO_MODELS_DEFAULT. public static final boolean IMPLICITLY_ADD_AUTO_MODELS_DEFAULT - /** - * If true, all fields marked with {@link com.airbnb.epoxy.EpoxyAttribute} must have a type that - * implements hashCode and equals (besides the default Object implementation), or the attribute - * must set DoNotHash as an option. - *

- * Setting this to true is useful for ensuring that all model attributes correctly implement - * hashCode and equals, or use DoNotHash (eg for click listeners). It is a common mistake to miss - * these, which leads to invalid model state and incorrect diffing. - *

- * The check is done at compile time and compilation will fail if a hashCode validation fails. - *

- * Since it is done at compile time this can only check the direct type of the field. Interfaces - * or classes will pass the check if they either have an abstract hashCode/equals method (since it - * is assumed that the object at runtime will implement it) or their class hierarchy must have an - * implementation of hashCode/equals besides the default Object implementation. - *

- * If an attribute is an Iterable or Array then the type of object in that collection must - * implement hashCode/equals. - */ - boolean requireHashCode() default REQUIRE_HASHCODE_DEFAULT; -// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageEpoxyConfig#requireHashCode(). public abstract boolean requireHashCode() -// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/PackageEpoxyConfig#REQUIRE_HASHCODE_DEFAULT. - - /** - * If true, all classes that contains {@link com.airbnb.epoxy.EpoxyAttribute} or {@link - * com.airbnb.epoxy.EpoxyModelClass} annotations in your project must be abstract. Otherwise - * compilation will fail. - *

- * Forcing models to be abstract can prevent the mistake of using the original model class instead - * of the generated class. - */ - boolean requireAbstractModels() default REQUIRE_ABSTRACT_MODELS_DEFAULT; -// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageEpoxyConfig#requireAbstractModels(). public abstract boolean requireAbstractModels() -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/PackageEpoxyConfig#REQUIRE_ABSTRACT_MODELS_DEFAULT. - - /** - * If true, models in an EpoxyController that use the {@link AutoModel} annotation don't need to - * be explicitly added to the controller with ".addTo". Instead, they will be added automatically - * after they are modified. - *

- * For more details, see the wiki: - * https://github.com/airbnb/epoxy/wiki/Epoxy-Controller#implicit-adding - */ - boolean implicitlyAddAutoModels() default IMPLICITLY_ADD_AUTO_MODELS_DEFAULT; -// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageEpoxyConfig#implicitlyAddAutoModels(). public abstract boolean implicitlyAddAutoModels() -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/PackageEpoxyConfig#IMPLICITLY_ADD_AUTO_MODELS_DEFAULT. -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/PackageModelViewConfig.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/PackageModelViewConfig.java deleted file mode 100644 index dafa6774..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/PackageModelViewConfig.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -/** - * Settings that apply to all views annotated with {@link com.airbnb.epoxy.ModelView} in this - * package. Also applies to subpackages, unless other package config values are set in those sub - * packages. - */ -@Target(ElementType.TYPE) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^ reference java/lang/annotation/ElementType#TYPE. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface PackageModelViewConfig { -// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig# @Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface PackageModelViewConfig - /** - * The R class used in this module (eg "com.example.app.R.class"). This is needed so Epoxy can - * look up layout files. - */ - Class rClass(); -//^^^^^ reference java/lang/Class# -// ^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#rClass(). public abstract Class rClass() - /** - * A default layout pattern to be used for specifying layouts for generated models. If this is set - * then a layout can be omitted from a view's {@link com.airbnb.epoxy.ModelView} annotation. - *

- * The "%s" placeholder represents the view's name in snack case. For example, the default value - * will use a layout resource of "R.layout.my_view" for the MyView class. If the layout name is - * changed to "view_holder_%s" then the layout used would be "R.layout.view_holder_my_view". - */ - String defaultLayoutPattern() default "%s"; -//^^^^^^ reference java/lang/String# -// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#defaultLayoutPattern(). public abstract String defaultLayoutPattern() - - /** An optional EpoxyModel subclass that generated models should extend. */ - Class defaultBaseModelClass() default Void.class; -//^^^^^ reference java/lang/Class# -// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#defaultBaseModelClass(). public abstract Class defaultBaseModelClass() -// ^^^^ reference java/lang/Void# -// ^^^^^ reference java/lang/Void#class. - - /** - * If true, any layout file name that has a view's default layout as a prefix will be included as - * a method on the generated model for that view. - *

- * For example, if the layout is "R.layout.my_view" then any layouts in the form of - * "R.layout.my_view_*" will result in a generated method like "with*Layout" that will apply that - * other layout instead of the default. - */ - boolean useLayoutOverloads() default false; -// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#useLayoutOverloads(). public abstract boolean useLayoutOverloads() - - /** - * Suffix, which will be appended to generated model's names. "Model_" is a default value. - */ - String generatedModelSuffix() default "Model_"; -//^^^^^^ reference java/lang/String# -// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#generatedModelSuffix(). public abstract String generatedModelSuffix() - - /** - * Controls whether "builder" setter functions that returns the model type will be duplicated - * from super model classes with the function return type updated to use the generated model name. - * This helps make all setters (such as id(...) ) return the same generated model so they can be - * chained in a builder pattern. This is mainly intended for Java usage and is generally - * unnecessary when using models in kotlin, especially if the generated kotlin model - * build extension functions are used. Disabling this can greatly reduce the number of - * methods generated on models. - * - * Default is false. This may also be set project wide with an annotation processor option. - */ - Option disableGenerateBuilderOverloads() default Option.Default; -//^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option# -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#disableGenerateBuilderOverloads(). public abstract Option disableGenerateBuilderOverloads() -// ^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option# -// ^^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option#Default. - - /** - * Controls whether getter functions (that return the value of each attribute) are generated - * on models. - * - * Disabling this can greatly reduce the number of methods generated on models. - * - * Default is false. This may also be set project wide with an annotation processor option. - */ - Option disableGenerateGetters() default Option.Default; -//^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option# -// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#disableGenerateGetters(). public abstract Option disableGenerateGetters() -// ^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option# -// ^^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option#Default. - - /** - * Controls whether the "reset" function (that clears all attribute values) are generated - * on models. This function is generally legacy and is not recommended to be used with the modern - * immutable model approach of EpoxyControllers. - * - * Disabling this reduces the amount of generated code. - * - * Default is false. This may also be set project wide with an annotation processor option. - */ - Option disableGenerateReset() default Option.Default; -//^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option# -// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#disableGenerateReset(). public abstract Option disableGenerateReset() -// ^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option# -// ^^^^^^^ reference com/airbnb/epoxy/PackageModelViewConfig#Option#Default. - - /** - * Enable or Disable an option, or inherit the default. - */ - enum Option { -// ^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#Option# public enum Option -// ^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#Option#``(). private Option() - Default, -// ^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#Option#Default. Option.Default /* ordinal 0 */ - Enabled, -// ^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#Option#Enabled. Option.Enabled /* ordinal 1 */ - Disabled -// ^^^^^^^^ definition com/airbnb/epoxy/PackageModelViewConfig#Option#Disabled. Option.Disabled /* ordinal 2 */ - } -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/QuantityStringResAttribute.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/QuantityStringResAttribute.java index b53ca8c3..bb408a81 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/QuantityStringResAttribute.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/QuantityStringResAttribute.java @@ -147,7 +147,7 @@ public boolean equals(Object o) { // Probably incorrect - comparing Object[] arrays with Arrays.equals return Arrays.equals(formatArgs, that.formatArgs); // ^^^^^^ reference java/util/Arrays# -// ^^^^^^ reference java/util/Arrays#equals(+16). +// ^^^^^^ reference java/util/Arrays#equals(+8). // ^^^^^^^^^^ reference com/airbnb/epoxy/QuantityStringResAttribute#formatArgs. // ^^^^ reference local7 // ^^^^^^^^^^ reference com/airbnb/epoxy/QuantityStringResAttribute#formatArgs. diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/StringAttributeData.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/StringAttributeData.java index e943dcb1..00197417 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/StringAttributeData.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/StringAttributeData.java @@ -292,7 +292,7 @@ public boolean equals(Object o) { return Arrays.equals(formatArgs, that.formatArgs); // ^^^^^^ reference java/util/Arrays# -// ^^^^^^ reference java/util/Arrays#equals(+16). +// ^^^^^^ reference java/util/Arrays#equals(+8). // ^^^^^^^^^^ reference com/airbnb/epoxy/StringAttributeData#formatArgs. // ^^^^ reference local11 // ^^^^^^^^^^ reference com/airbnb/epoxy/StringAttributeData#formatArgs. diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/TextProp.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/TextProp.java deleted file mode 100644 index e554c2fc..00000000 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/TextProp.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.airbnb.epoxy; - -import java.lang.annotation.ElementType; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -import java.lang.annotation.Retention; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^ reference java/lang/annotation/Retention# -import java.lang.annotation.RetentionPolicy; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -import java.lang.annotation.Target; -// ^^^^ reference java/ -// ^^^^ reference java/lang/ -// ^^^^^^^^^^ reference java/lang/annotation/ -// ^^^^^^ reference java/lang/annotation/Target# - -import androidx.annotation.StringRes; -// ^^^^^^^^ reference androidx/ -// ^^^^^^^^^^ reference androidx/annotation/ -// ^^^^^^^^^ reference androidx/annotation/StringRes# - -/** - * A convenient replacement for {@link ModelProp} when the prop represents text. - *

- * This can only be used when the setter parameter is a {@link CharSequence} - *

- * This is the same as using {@link ModelProp} with the option {@link - * com.airbnb.epoxy.ModelProp.Option#GenerateStringOverloads} - */ -@Target({ElementType.METHOD, ElementType.FIELD}) -//^^^^^ reference java/lang/annotation/Target# -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^^ reference java/lang/annotation/ElementType#METHOD. -// ^^^^^^^^^^^ reference java/lang/annotation/ElementType# -// ^^^^^ reference java/lang/annotation/ElementType#FIELD. -@Retention(RetentionPolicy.CLASS) -//^^^^^^^^ reference java/lang/annotation/Retention# -// ^^^^^^^^^^^^^^^ reference java/lang/annotation/RetentionPolicy# -// ^^^^^ reference java/lang/annotation/RetentionPolicy#CLASS. -public @interface TextProp { -// ^^^^^^^^ definition com/airbnb/epoxy/TextProp# @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.CLASS) public @interface TextProp - - @StringRes int defaultRes() default 0; -// ^^^^^^^^^ reference androidx/annotation/StringRes# -// ^^^^^^^^^^ definition com/airbnb/epoxy/TextProp#defaultRes(). @StringRes public abstract int defaultRes() -} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/UnboundedViewPool.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/UnboundedViewPool.kt new file mode 100644 index 00000000..aeb37d1d --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/UnboundedViewPool.kt @@ -0,0 +1,114 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +import android.util.SparseArray +import androidx.recyclerview.widget.RecyclerView.RecycledViewPool +// ^^^^^^^^ reference androidx/ +import androidx.recyclerview.widget.RecyclerView.ViewHolder +// ^^^^^^^^ reference androidx/ +import java.util.LinkedList +// ^^^^ reference java/ +// ^^^^ reference java/util/ +// ^^^^^^^^^^ reference java/util/LinkedList# +import java.util.Queue +// ^^^^ reference java/ +// ^^^^ reference java/util/ +// ^^^^^ reference java/util/Queue# + +/** + * Like its parent, UnboundedViewPool lets you share Views between multiple RecyclerViews. However + * there is no maximum number of recycled views that it will store. This usually ends up being + * optimal, barring any hard memory constraints, as RecyclerViews do not recycle more Views than + * they need. + */ +internal class UnboundedViewPool : RecycledViewPool() { +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool# +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#``(). + + private val scrapHeaps = SparseArray>() +// ^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#scrapHeaps. +// ^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#getScrapHeaps(). +// ^^^^^ reference java/util/Queue# + + override fun clear() { +// ^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#clear(). + scrapHeaps.clear() +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#scrapHeaps. +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getScrapHeaps(). + } + + override fun setMaxRecycledViews(viewType: Int, max: Int) { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#setMaxRecycledViews(). +// ^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#setMaxRecycledViews().(viewType) +// ^^^ reference kotlin/Int# +// ^^^ definition com/airbnb/epoxy/UnboundedViewPool#setMaxRecycledViews().(max) +// ^^^ reference kotlin/Int# + throw UnsupportedOperationException( +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference kotlin/UnsupportedOperationException#``(+1). + "UnboundedViewPool does not support setting a maximum number of recycled views" + ) + } + + override fun getRecycledView(viewType: Int): ViewHolder? { +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#getRecycledView(). +// ^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#getRecycledView().(viewType) +// ^^^ reference kotlin/Int# + val scrapHeap = scrapHeaps.get(viewType) +// ^^^^^^^^^ definition local0 +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#scrapHeaps. +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getScrapHeaps(). +// ^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getRecycledView().(viewType) + return scrapHeap?.poll() +// ^^^^^^^^^ reference local0 + } + + override fun putRecycledView(viewHolder: ViewHolder) { +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#putRecycledView(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#putRecycledView().(viewHolder) + getScrapHeapForType(viewHolder.itemViewType).add(viewHolder) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getScrapHeapForType(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#putRecycledView().(viewHolder) +// ^^^ reference java/util/Queue#add(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#putRecycledView().(viewHolder) + } + + override fun getRecycledViewCount(viewType: Int): Int { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#getRecycledViewCount(). +// ^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#getRecycledViewCount().(viewType) +// ^^^ reference kotlin/Int# +// ^^^ reference kotlin/Int# + return scrapHeaps.get(viewType)?.size ?: 0 +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#scrapHeaps. +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getScrapHeaps(). +// ^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getRecycledViewCount().(viewType) + } + + private fun getScrapHeapForType(viewType: Int): Queue { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#getScrapHeapForType(). +// ^^^^^^^^ definition com/airbnb/epoxy/UnboundedViewPool#getScrapHeapForType().(viewType) +// ^^^ reference kotlin/Int# +// ^^^^^ reference java/util/Queue# + var scrapHeap: Queue? = scrapHeaps.get(viewType) +// ^^^^^^^^^ definition local1 +// ^^^^^ reference java/util/Queue# +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#scrapHeaps. +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getScrapHeaps(). +// ^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getScrapHeapForType().(viewType) + if (scrapHeap == null) { +// ^^^^^^^^^ reference local1 +// ^^ reference java/util/Queue#equals(). + scrapHeap = LinkedList() +// ^^^^^^^^^ reference local1 +// ^^^^^^^^^^ reference java/util/LinkedList#``(). + scrapHeaps.put(viewType, scrapHeap) +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#scrapHeaps. +// ^^^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getScrapHeaps(). +// ^^^^^^^^ reference com/airbnb/epoxy/UnboundedViewPool#getScrapHeapForType().(viewType) +// ^^^^^^^^^ reference local1 + } + return scrapHeap +// ^^^^^^^^^ reference local1 + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/UpdateOp.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/UpdateOp.java index b2734210..26e7516c 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/UpdateOp.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/UpdateOp.java @@ -169,7 +169,7 @@ void addPayload(@Nullable EpoxyModel payload) { payloads.add(payload); // ^^^^^^^^ reference com/airbnb/epoxy/UpdateOp#payloads. -// ^^^ reference java/util/ArrayList#add(+1). +// ^^^ reference java/util/ArrayList#add(). // ^^^^^^^ reference local8 } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ViewHolderState.java b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ViewHolderState.java index f1400c63..c261d47f 100644 --- a/tests/snapshots/src/main/generated/com/airbnb/epoxy/ViewHolderState.java +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/ViewHolderState.java @@ -118,69 +118,32 @@ public void writeToParcel(Parcel dest, int flags) { // ^^^^^^^ reference _root_/ // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState# // ^^^^^^^ definition com/airbnb/epoxy/ViewHolderState#CREATOR. public static final unresolved_type CREATOR -// ^^^^^^^ reference _root_/ -// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState# public ViewHolderState[] newArray(int size) { -// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState# -// ^^^^^^^^ definition local6 public ViewHolderState[] newArray(int size) -// ^^^^ definition local8 int size return new ViewHolderState[size]; -// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState# -// ^^^^ reference local8 } public ViewHolderState createFromParcel(Parcel source) { -// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState# -// ^^^^^^^^^^^^^^^^ definition local7 public ViewHolderState createFromParcel(unresolved_type source) -// ^^^^^^ reference _root_/ -// ^^^^^^ definition local9 unresolved_type source int size = source.readInt(); -// ^^^^ definition local10 int size -// ^^^^^^ reference local9 -// ^^^^^^^ reference readInt# ViewHolderState state = new ViewHolderState(size); -// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState# -// ^^^^^ definition local11 ViewHolderState state -// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#``(+1). -// ^^^^ reference local10 for (int i = 0; i < size; i++) { -// ^ definition local12 int i -// ^ reference local12 -// ^^^^ reference local10 -// ^ reference local12 long key = source.readLong(); -// ^^^ definition local13 long key -// ^^^^^^ reference local9 -// ^^^^^^^^ reference readLong# ViewState value = source.readParcelable(ViewState.class.getClassLoader()); -// ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# -// ^^^^^ definition local14 ViewState value -// ^^^^^^ reference local9 -// ^^^^^^^^^^^^^^ reference readParcelable# -// ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# -// ^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState#class. -// ^^^^^^^^^^^^^^ reference java/lang/Class#getClassLoader(). state.put(key, value); -// ^^^^^ reference local11 -// ^^^ reference androidx/collection/LongSparseArray#put(). -// ^^^ reference local13 -// ^^^^^ reference local14 } return state; -// ^^^^^ reference local11 } }; public boolean hasStateForHolder(EpoxyViewHolder holder) { // ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ViewHolderState#hasStateForHolder(). public boolean hasStateForHolder(EpoxyViewHolder holder) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local15 EpoxyViewHolder holder +// ^^^^^^ definition local5 EpoxyViewHolder holder return get(holder.getItemId()) != null; // ^^^ reference androidx/collection/LongSparseArray#get(). -// ^^^^^^ reference local15 +// ^^^^^^ reference local5 // ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getItemId# } @@ -188,14 +151,14 @@ public void save(Collection holders) { // ^^^^ definition com/airbnb/epoxy/ViewHolderState#save(). public void save(Collection holders) // ^^^^^^^^^^ reference java/util/Collection# // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^^ definition local16 Collection holders +// ^^^^^^^ definition local6 Collection holders for (EpoxyViewHolder holder : holders) { // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local17 EpoxyViewHolder holder -// ^^^^^^^ reference local16 +// ^^^^^^ definition local7 EpoxyViewHolder holder +// ^^^^^^^ reference local6 save(holder); // ^^^^ reference com/airbnb/epoxy/ViewHolderState#save(+1). -// ^^^^^^ reference local17 +// ^^^^^^ reference local7 } } @@ -203,9 +166,9 @@ public void save(Collection holders) { public void save(EpoxyViewHolder holder) { // ^^^^ definition com/airbnb/epoxy/ViewHolderState#save(+1). public void save(EpoxyViewHolder holder) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local18 EpoxyViewHolder holder +// ^^^^^^ definition local8 EpoxyViewHolder holder if (!holder.getModel().shouldSaveViewState()) { -// ^^^^^^ reference local18 +// ^^^^^^ reference local8 // ^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getModel(). // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#shouldSaveViewState(). return; @@ -216,27 +179,27 @@ public void save(EpoxyViewHolder holder) { // should have identical ids for all its views, and will just overwrite the previous state. ViewState state = get(holder.getItemId()); // ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# -// ^^^^^ definition local19 ViewState state +// ^^^^^ definition local9 ViewState state // ^^^ reference androidx/collection/LongSparseArray#get(). -// ^^^^^^ reference local18 +// ^^^^^^ reference local8 // ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getItemId# if (state == null) { -// ^^^^^ reference local19 +// ^^^^^ reference local9 state = new ViewState(); -// ^^^^^ reference local19 +// ^^^^^ reference local9 // ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState#``(). } state.save(holder.itemView); -// ^^^^^ reference local19 +// ^^^^^ reference local9 // ^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState#save(). -// ^^^^^^ reference local18 +// ^^^^^^ reference local8 // ^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#itemView# put(holder.getItemId(), state); // ^^^ reference androidx/collection/LongSparseArray#put(). -// ^^^^^^ reference local18 +// ^^^^^^ reference local8 // ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getItemId# -// ^^^^^ reference local19 +// ^^^^^ reference local9 } /** @@ -246,9 +209,9 @@ public void save(EpoxyViewHolder holder) { public void restore(EpoxyViewHolder holder) { // ^^^^^^^ definition com/airbnb/epoxy/ViewHolderState#restore(). public void restore(EpoxyViewHolder holder) // ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder# -// ^^^^^^ definition local20 EpoxyViewHolder holder +// ^^^^^^ definition local10 EpoxyViewHolder holder if (!holder.getModel().shouldSaveViewState()) { -// ^^^^^^ reference local20 +// ^^^^^^ reference local10 // ^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getModel(). // ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyModel#shouldSaveViewState(). return; @@ -256,22 +219,22 @@ public void restore(EpoxyViewHolder holder) { ViewState state = get(holder.getItemId()); // ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# -// ^^^^^ definition local21 ViewState state +// ^^^^^ definition local11 ViewState state // ^^^ reference androidx/collection/LongSparseArray#get(). -// ^^^^^^ reference local20 +// ^^^^^^ reference local10 // ^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#getItemId# if (state != null) { -// ^^^^^ reference local21 +// ^^^^^ reference local11 state.restore(holder.itemView); -// ^^^^^ reference local21 +// ^^^^^ reference local11 // ^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState#restore(). -// ^^^^^^ reference local20 +// ^^^^^^ reference local10 // ^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#itemView# } else { // The first time a model is bound it won't have previous state. We need to make sure // the view is reset to its initial state to clear any changes from previously bound models holder.restoreInitialViewState(); -// ^^^^^^ reference local20 +// ^^^^^^ reference local10 // ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/EpoxyViewHolder#restoreInitialViewState(). } } @@ -292,66 +255,66 @@ public static class ViewState extends SparseArray implements Parcela private ViewState(int size, int[] keys, Parcelable[] values) { // ^^^^^^^^^ definition com/airbnb/epoxy/ViewHolderState#ViewState#``(+1). private ViewState(int size, int[] keys, unresolved_type[] values) -// ^^^^ definition local22 int size -// ^^^^ definition local23 int[] keys +// ^^^^ definition local12 int size +// ^^^^ definition local13 int[] keys // ^^^^^^^^^^ reference _root_/ -// ^^^^^^ definition local24 unresolved_type[] values +// ^^^^^^ definition local14 unresolved_type[] values super(size); -// ^^^^ reference local22 +// ^^^^ reference local12 for (int i = 0; i < size; ++i) { -// ^ definition local25 int i -// ^ reference local25 -// ^^^^ reference local22 -// ^ reference local25 +// ^ definition local15 int i +// ^ reference local15 +// ^^^^ reference local12 +// ^ reference local15 put(keys[i], values[i]); // ^^^ reference androidx/collection/LongSparseArray#put(). -// ^^^^ reference local23 -// ^ reference local25 -// ^^^^^^ reference local24 -// ^ reference local25 +// ^^^^ reference local13 +// ^ reference local15 +// ^^^^^^ reference local14 +// ^ reference local15 } } public void save(View view) { // ^^^^ definition com/airbnb/epoxy/ViewHolderState#ViewState#save(). public void save(unresolved_type view) // ^^^^ reference _root_/ -// ^^^^ definition local26 unresolved_type view +// ^^^^ definition local16 unresolved_type view int originalId = view.getId(); -// ^^^^^^^^^^ definition local27 int originalId -// ^^^^ reference local26 +// ^^^^^^^^^^ definition local17 int originalId +// ^^^^ reference local16 // ^^^^^ reference getId# setIdIfNoneExists(view); // ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState#setIdIfNoneExists(). -// ^^^^ reference local26 +// ^^^^ reference local16 view.saveHierarchyState(this); -// ^^^^ reference local26 +// ^^^^ reference local16 // ^^^^^^^^^^^^^^^^^^ reference saveHierarchyState# view.setId(originalId); -// ^^^^ reference local26 +// ^^^^ reference local16 // ^^^^^ reference setId# -// ^^^^^^^^^^ reference local27 +// ^^^^^^^^^^ reference local17 } public void restore(View view) { // ^^^^^^^ definition com/airbnb/epoxy/ViewHolderState#ViewState#restore(). public void restore(unresolved_type view) // ^^^^ reference _root_/ -// ^^^^ definition local28 unresolved_type view +// ^^^^ definition local18 unresolved_type view int originalId = view.getId(); -// ^^^^^^^^^^ definition local29 int originalId -// ^^^^ reference local28 +// ^^^^^^^^^^ definition local19 int originalId +// ^^^^ reference local18 // ^^^^^ reference getId# setIdIfNoneExists(view); // ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState#setIdIfNoneExists(). -// ^^^^ reference local28 +// ^^^^ reference local18 view.restoreHierarchyState(this); -// ^^^^ reference local28 +// ^^^^ reference local18 // ^^^^^^^^^^^^^^^^^^^^^ reference restoreHierarchyState# view.setId(originalId); -// ^^^^ reference local28 +// ^^^^ reference local18 // ^^^^^ reference setId# -// ^^^^^^^^^^ reference local29 +// ^^^^^^^^^^ reference local19 } /** @@ -363,14 +326,14 @@ public void restore(View view) { private void setIdIfNoneExists(View view) { // ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/ViewHolderState#ViewState#setIdIfNoneExists(). private void setIdIfNoneExists(unresolved_type view) // ^^^^ reference _root_/ -// ^^^^ definition local30 unresolved_type view +// ^^^^ definition local20 unresolved_type view if (view.getId() == View.NO_ID) { -// ^^^^ reference local30 +// ^^^^ reference local20 // ^^^^^ reference getId# // ^^^^ reference _root_/ // ^^^^^ reference NO_ID# view.setId(R.id.view_model_state_saving_id); -// ^^^^ reference local30 +// ^^^^ reference local20 // ^^^^^ reference setId# // ^ reference R/ // ^^ reference R/id# @@ -390,48 +353,48 @@ public int describeContents() { public void writeToParcel(Parcel parcel, int flags) { // ^^^^^^^^^^^^^ definition com/airbnb/epoxy/ViewHolderState#ViewState#writeToParcel(). @Override public void writeToParcel(unresolved_type parcel, int flags) // ^^^^^^ reference _root_/ -// ^^^^^^ definition local31 unresolved_type parcel -// ^^^^^ definition local32 int flags +// ^^^^^^ definition local21 unresolved_type parcel +// ^^^^^ definition local22 int flags int size = size(); -// ^^^^ definition local33 int size +// ^^^^ definition local23 int size // ^^^^ reference androidx/collection/LongSparseArray#size(). int[] keys = new int[size]; -// ^^^^ definition local34 int[] keys -// ^^^^ reference local33 +// ^^^^ definition local24 int[] keys +// ^^^^ reference local23 Parcelable[] values = new Parcelable[size]; // ^^^^^^^^^^ reference _root_/ -// ^^^^^^ definition local35 unresolved_type[] values +// ^^^^^^ definition local25 unresolved_type[] values // ^^^^^^^^^^ reference _root_/ -// ^^^^ reference local33 +// ^^^^ reference local23 for (int i = 0; i < size; ++i) { -// ^ definition local36 int i -// ^ reference local36 -// ^^^^ reference local33 -// ^ reference local36 +// ^ definition local26 int i +// ^ reference local26 +// ^^^^ reference local23 +// ^ reference local26 keys[i] = keyAt(i); -// ^^^^ reference local34 -// ^ reference local36 +// ^^^^ reference local24 +// ^ reference local26 // ^^^^^ reference androidx/collection/LongSparseArray#keyAt(). -// ^ reference local36 +// ^ reference local26 values[i] = valueAt(i); -// ^^^^^^ reference local35 -// ^ reference local36 +// ^^^^^^ reference local25 +// ^ reference local26 // ^^^^^^^ reference androidx/collection/LongSparseArray#valueAt(). -// ^ reference local36 +// ^ reference local26 } parcel.writeInt(size); -// ^^^^^^ reference local31 +// ^^^^^^ reference local21 // ^^^^^^^^ reference writeInt# -// ^^^^ reference local33 +// ^^^^ reference local23 parcel.writeIntArray(keys); -// ^^^^^^ reference local31 +// ^^^^^^ reference local21 // ^^^^^^^^^^^^^ reference writeIntArray# -// ^^^^ reference local34 +// ^^^^ reference local24 parcel.writeParcelableArray(values, flags); -// ^^^^^^ reference local31 +// ^^^^^^ reference local21 // ^^^^^^^^^^^^^^^^^^^^ reference writeParcelableArray# -// ^^^^^^ reference local35 -// ^^^^^ reference local32 +// ^^^^^^ reference local25 +// ^^^^^ reference local22 } public static final Creator CREATOR = @@ -439,63 +402,23 @@ public void writeToParcel(Parcel parcel, int flags) { // ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# // ^^^^^^^ definition com/airbnb/epoxy/ViewHolderState#ViewState#CREATOR. public static final unresolved_type CREATOR new Parcelable.ClassLoaderCreator() { -// ^^^^^^^^^^ reference Parcelable/ -// ^^^^^^^^^^^^^^^^^^ reference Parcelable/ClassLoaderCreator# -// ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# @Override -// ^^^^^^^^ reference java/lang/Override# public ViewState createFromParcel(Parcel source, ClassLoader loader) { -// ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# -// ^^^^^^^^^^^^^^^^ definition local38 @Override public ViewState createFromParcel(unresolved_type source, ClassLoader loader) -// ^^^^^^ reference _root_/ -// ^^^^^^ definition local41 unresolved_type source -// ^^^^^^^^^^^ reference java/lang/ClassLoader# -// ^^^^^^ definition local42 ClassLoader loader int size = source.readInt(); -// ^^^^ definition local43 int size -// ^^^^^^ reference local41 -// ^^^^^^^ reference readInt# int[] keys = new int[size]; -// ^^^^ definition local44 int[] keys -// ^^^^ reference local43 source.readIntArray(keys); -// ^^^^^^ reference local41 -// ^^^^^^^^^^^^ reference readIntArray# -// ^^^^ reference local44 Parcelable[] values = source.readParcelableArray(loader); -// ^^^^^^^^^^ reference _root_/ -// ^^^^^^ definition local45 unresolved_type[] values -// ^^^^^^ reference local41 -// ^^^^^^^^^^^^^^^^^^^ reference readParcelableArray# -// ^^^^^^ reference local42 return new ViewState(size, keys, values); -// ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState#``(+1). -// ^^^^ reference local43 -// ^^^^ reference local44 -// ^^^^^^ reference local45 } @Override -// ^^^^^^^^ reference java/lang/Override# public ViewState createFromParcel(Parcel source) { -// ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# -// ^^^^^^^^^^^^^^^^ definition local39 @Override public ViewState createFromParcel(unresolved_type source) -// ^^^^^^ reference _root_/ -// ^^^^^^ definition local46 unresolved_type source return createFromParcel(source, null); -// ^^^^^^^^^^^^^^^^ reference local38 -// ^^^^^^ reference local46 } @Override -// ^^^^^^^^ reference java/lang/Override# public ViewState[] newArray(int size) { -// ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# -// ^^^^^^^^ definition local40 @Override public ViewState[] newArray(int size) -// ^^^^ definition local47 int size return new ViewState[size]; -// ^^^^^^^^^ reference com/airbnb/epoxy/ViewHolderState#ViewState# -// ^^^^ reference local47 } }; } diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/WrappedEpoxyModelClickListener.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/WrappedEpoxyModelClickListener.kt new file mode 100644 index 00000000..31d2b2e8 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/WrappedEpoxyModelClickListener.kt @@ -0,0 +1,342 @@ +package com.airbnb.epoxy +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +import android.view.View +import android.view.View.OnClickListener +import android.view.View.OnLongClickListener +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ + +/** + * Used in the generated models to transform normal view click listeners to model click + * listeners. + */ +class WrappedEpoxyModelClickListener, V> : OnClickListener, OnLongClickListener { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener# +// ^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#[T] +// ^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#[V] + // Save the original click listener to call back to when clicked. + // This also lets us call back to the original hashCode and equals methods + private val originalClickListener: OnModelClickListener? +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[T] +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[V] + private val originalLongClickListener: OnModelLongClickListener? +// ^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[T] +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[V] + + constructor(clickListener: OnModelClickListener?) { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#``(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#``().(clickListener) +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[T] +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[V] + requireNotNull(clickListener) { +// ^^^^^^^^^^^^^^ reference kotlin/PreconditionsKt#requireNotNull(+1). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#``().(clickListener) + "Click listener cannot be null" + } + + this.originalClickListener = clickListener +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener# +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#``().(clickListener) + originalLongClickListener = null +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). + } + + constructor(clickListener: OnModelLongClickListener?) { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#``(+1). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#``(+1).(clickListener) +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[T] +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[V] + requireNotNull(clickListener) { +// ^^^^^^^^^^^^^^ reference kotlin/PreconditionsKt#requireNotNull(+1). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#``(+1).(clickListener) + "Click listener cannot be null" + } + + this.originalLongClickListener = clickListener +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener# +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#``(+1).(clickListener) + originalClickListener = null +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). + } + + override fun onClick(view: View) { +// ^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#onClick(). +// ^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#onClick().(view) + val modelInfo = getClickedModelInfo(view) ?: return +// ^^^^^^^^^ definition local0 +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getClickedModelInfo(). +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#onClick().(view) + + @Suppress("UNCHECKED_CAST") +// ^^^^^^^^ reference kotlin/Suppress#``(). + originalClickListener?.onClick( +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). + modelInfo.model as T, +// ^^^^^^^^^ reference local0 +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#model. +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getModel(). +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[T] + modelInfo.boundObject as V, +// ^^^^^^^^^ reference local0 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#boundObject. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getBoundObject(). +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[V] + view, +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#onClick().(view) + modelInfo.adapterPosition +// ^^^^^^^^^ reference local0 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#adapterPosition. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getAdapterPosition(). + ) ?: error("Original click listener is null") +// ^^^^^ reference kotlin/PreconditionsKt#error(). + } + + override fun onLongClick(view: View): Boolean { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#onLongClick(). +// ^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#onLongClick().(view) +// ^^^^^^^ reference kotlin/Boolean# + val modelInfo = getClickedModelInfo(view) ?: return false +// ^^^^^^^^^ definition local1 +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getClickedModelInfo(). +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#onLongClick().(view) + + @Suppress("UNCHECKED_CAST") +// ^^^^^^^^ reference kotlin/Suppress#``(). + return originalLongClickListener?.onLongClick( +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). + modelInfo.model as T, +// ^^^^^^^^^ reference local1 +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#model. +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getModel(). +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[T] + modelInfo.boundObject as V, +// ^^^^^^^^^ reference local1 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#boundObject. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getBoundObject(). +// ^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#[V] + view, +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#onLongClick().(view) + modelInfo.adapterPosition +// ^^^^^^^^^ reference local1 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#adapterPosition. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getAdapterPosition(). + ) ?: error("Original long click listener is null") +// ^^^^^ reference kotlin/PreconditionsKt#error(). + } + + private fun getClickedModelInfo(view: View): ClickedModelInfo? { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#getClickedModelInfo(). +// ^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#getClickedModelInfo().(view) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo# + val epoxyHolder = ListenersUtils.getEpoxyHolderForChildView(view) +// ^^^^^^^^^^^ definition local2 +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getClickedModelInfo().(view) + ?: error("Could not find RecyclerView holder for clicked view") +// ^^^^^ reference kotlin/PreconditionsKt#error(). + + val adapterPosition = epoxyHolder.adapterPosition +// ^^^^^^^^^^^^^^^ definition local3 +// ^^^^^^^^^^^ reference local2 + if (adapterPosition == RecyclerView.NO_POSITION) return null +// ^^^^^^^^^^^^^^^ reference local3 + + val boundObject = epoxyHolder.objectToBind() +// ^^^^^^^^^^^ definition local4 +// ^^^^^^^^^^^ reference local2 + + val holderToUse = if (boundObject is ModelGroupHolder) { +// ^^^^^^^^^^^ definition local5 +// ^^^^^^^^^^^ reference local4 +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/ModelGroupHolder# + // For a model group the clicked view could belong to any of the nested models in the group. + // We check the viewholder of each model to see if the clicked view is in that hierarchy + // in order to figure out which model it belongs to. + // If it doesn't match any of the nested models then it could be set by the top level + // parent model. + boundObject.viewHolders +// ^^^^^^^^^^^ reference local4 + .firstOrNull { view in it.itemView.allViewsInHierarchy } +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getClickedModelInfo().(view) + ?: epoxyHolder +// ^^^^^^^^^^^ reference local2 + } else { + epoxyHolder +// ^^^^^^^^^^^ reference local2 + } + + // We return the holder and position because since we may be returning a nested group + // holder the callee cannot use that to get the adapter position of the main model. + return ClickedModelInfo( +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#``(). + holderToUse.model, +// ^^^^^^^^^^^ reference local5 + adapterPosition, +// ^^^^^^^^^^^^^^^ reference local3 + holderToUse.objectToBind() +// ^^^^^^^^^^^ reference local5 + ) + } + + private class ClickedModelInfo( +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo# +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#``(). + val model: EpoxyModel<*>, +// ^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#model. +// ^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getModel(). +// ^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#``().(model) + val adapterPosition: Int, +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#adapterPosition. +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getAdapterPosition(). +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#``().(adapterPosition) +// ^^^ reference kotlin/Int# + val boundObject: Any +// ^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#boundObject. +// ^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#getBoundObject(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#ClickedModelInfo#``().(boundObject) +// ^^^ reference kotlin/Any# + ) + + /** + * Returns a sequence of this View plus any and all children, recursively. + */ + private val View.allViewsInHierarchy: Sequence +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#allViewsInHierarchy. +// ^^^^^^^^ reference kotlin/sequences/Sequence# + get() { +// ^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#getAllViewsInHierarchy(). + return if (this is ViewGroup) { +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#allViewsInHierarchy. + children.flatMap { + sequenceOf(it) + if (it is ViewGroup) it.allViewsInHierarchy else emptySequence() + }.plus(this) +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#allViewsInHierarchy. + } else { + sequenceOf(this) +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#allViewsInHierarchy. + } + } + + /** Returns a [Sequence] over the child views in this view group. */ + internal val ViewGroup.children: Sequence +// ^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#children. +// ^^^^^^^^ reference kotlin/sequences/Sequence# + get() = object : Sequence { +// ^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#getChildren(). +// ^^^^^^^^ reference kotlin/sequences/Sequence# + override fun iterator() = this@children.iterator() +// ^^^^^^^^ definition local6 +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#children. + } + + /** Returns a [MutableIterator] over the views in this view group. */ + internal operator fun ViewGroup.iterator() = object : MutableIterator { +// ^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#iterator(). +// ^^^^^^^^^^^^^^^ reference kotlin/collections/MutableIterator# + private var index = 0 +// ^^^^^ definition local7 +// ^^^^^ definition local8 +// ^^^^^ definition local9 + override fun hasNext() = index < childCount +// ^^^^^^^ definition local10 +// ^^^^^ reference local7 +// ^^^^^ reference local8 +// ^^^^^ reference local9 + override fun next() = getChildAt(index++) ?: throw IndexOutOfBoundsException() +// ^^^^ definition local11 +// ^^^^^ reference local7 +// ^^^^^ reference local8 +// ^^^^^ reference local9 +// ^^ reference kotlin/Int#inc(). + override fun remove() = removeViewAt(--index) +// ^^^^^^ definition local12 +// ^^ reference kotlin/Int#dec(). +// ^^^^^ reference local7 +// ^^^^^ reference local8 +// ^^^^^ reference local9 + } + + override fun equals(other: Any?): Boolean { +// ^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#equals(). +// ^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#equals().(other) +// ^^^ reference kotlin/Any# +// ^^^^^^^ reference kotlin/Boolean# + if (this === other) { +// ^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener# +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#equals().(other) + return true + } + + if (other !is WrappedEpoxyModelClickListener<*, *>) { +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#equals().(other) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener# + return false + } + + if (if (originalClickListener != null) { +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). + originalClickListener != other.originalClickListener +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#equals().(other) +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). + } else { + other.originalClickListener != null +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#equals().(other) +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). + } + ) { + return false + } + return if (originalLongClickListener != null) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). + originalLongClickListener == other.originalLongClickListener +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#equals().(other) +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). + } else { + other.originalLongClickListener == null +// ^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#equals().(other) +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). + } + } + + override fun hashCode(): Int { +// ^^^^^^^^ definition com/airbnb/epoxy/WrappedEpoxyModelClickListener#hashCode(). +// ^^^ reference kotlin/Int# + var result = originalClickListener?.hashCode() ?: 0 +// ^^^^^^ definition local13 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalClickListener. +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalClickListener(). + result = 31 * result + (originalLongClickListener?.hashCode() ?: 0) +// ^^^^^^ reference local13 +// ^ reference kotlin/Int#times(+3). +// ^^^^^^ reference local13 +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#originalLongClickListener. +// ^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/WrappedEpoxyModelClickListener#getOriginalLongClickListener(). + return result +// ^^^^^^ reference local13 + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/EpoxyModelPreloader.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/EpoxyModelPreloader.kt new file mode 100644 index 00000000..67447b0b --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/EpoxyModelPreloader.kt @@ -0,0 +1,305 @@ +package com.airbnb.epoxy.preload +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ + +import android.view.View +import com.airbnb.epoxy.EpoxyModel +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ + +/** + * Describes how view content for an EpoxyModel should be preloaded. + * + * @param T The type of EpoxyModel that this preloader applies to + * @param U The type of view metadata to provide to the request builder. + * @param P The type of [PreloadRequestHolder] that will execute the preload request + */ +abstract class EpoxyModelPreloader, U : ViewMetadata?, P : PreloadRequestHolder>( +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#``(). +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#[T] +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# + + val modelType: Class, +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#modelType. +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#getModelType(). +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#``().(modelType) +// ^^^^^ reference java/lang/Class# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#[T] + + /** + * A list of view ids, one for each view that should be preloaded. + * This should be left empty if the EpoxyModel's type uses the [Preloadable] interface. + */ + val preloadableViewIds: List +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#preloadableViewIds. +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#getPreloadableViewIds(). +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#``().(preloadableViewIds) +// ^^^^ reference kotlin/collections/List# +// ^^^ reference kotlin/Int# +) { + + /** + * An optional signature to differentiate views within the same model. This is useful if your EpoxyModel can contain varying amounts of preloadable views, + * or preloadable views of varying sizes. + * + * By default the model's class, span size, and layout resource, are used to differentiate views. This signature allows additional differentiation. + * For example, if your EpoxyModel shows an preloadable view that varies between portrait or landscape, this orientation will affect the view dimensions. + * In this case you could return a boolean here to differentiate the two cases so that the preloaded data has the correct orientation. + * + * The returned object can be anything, but it must implement [Object.hashCode] + */ + open fun viewSignature(epoxyModel: T): Any? = null +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#viewSignature(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#viewSignature().(epoxyModel) +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#[T] +// ^^^ reference kotlin/Any# + + /** + * Provide optional metadata about a view. This can be used in [EpoxyModelPreloader.buildRequest] + * + * A preload request works best if it exactly matches the actual request (in order to match cache keys exactly) + * Things such as request transformations, thumbnails, or crop type can affect the cache key. + * If your preloadable view is configurable you can capture those options via this metadata. + */ + abstract fun buildViewMetadata(view: View): U +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#buildViewMetadata(). +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#buildViewMetadata().(view) +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#[U] + + /** + * Start a preload request with the given target. + * + * @param epoxyModel The EpoxyModel whose content is being preloaded. + * @param preloadTarget The target to ues to create and store the request. + * @param viewData Information about the view that will hold the preloaded content. + */ + abstract fun startPreload( +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#startPreload(). + epoxyModel: T, +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#startPreload().(epoxyModel) +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#[T] + preloadTarget: P, +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#startPreload().(preloadTarget) +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#[P] + viewData: ViewData +// ^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#startPreload().(viewData) +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#[U] + ) + + companion object { + + /** + * Helper to create a [EpoxyModelPreloader]. + * + * @param viewSignature see [EpoxyModelPreloader.viewSignature] + * @param preloadableViewIds see [EpoxyModelPreloader.preloadableViewIds] + * @param viewMetadata see [EpoxyModelPreloader.buildViewMetadata] + * @param doPreload see [EpoxyModelPreloader.startPreload] + */ + inline fun , P : PreloadRequestHolder> with( +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().[T] +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(). + preloadableViewIds: List = emptyList(), +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().(preloadableViewIds) +// ^^^^ reference kotlin/collections/List# +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ reference kotlin/collections/CollectionsKt#emptyList(). + noinline doPreload: (epoxyModel: T, preloadTarget: P, viewData: ViewData) -> Unit +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().(doPreload) +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().epoxyModel. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().[T] +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().preloadTarget. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().[P] +// ^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().viewData. +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^^^^ reference kotlin/Unit# + ): EpoxyModelPreloader = +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().[T] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().[P] + with( +// ^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1). + preloadableViewIds, +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().(preloadableViewIds) + viewMetadata = { ViewMetadata.getDefault(it) }, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(viewMetadata) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#Companion# +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault(). +// ^^ reference local0 + viewSignature = { null }, +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(viewSignature) + doPreload = doPreload +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(doPreload) +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with().(doPreload) + ) + + /** + * Helper to create a [EpoxyModelPreloader]. + * + * @param viewSignature see [EpoxyModelPreloader.viewSignature] + * @param preloadableViewIds see [EpoxyModelPreloader.preloadableViewIds] + * @param viewMetadata see [EpoxyModelPreloader.buildViewMetadata] + * @param doPreload see [EpoxyModelPreloader.startPreload] + */ + inline fun , U : ViewMetadata?, P : PreloadRequestHolder> with( +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[T] +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1). + preloadableViewIds: List = emptyList(), +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(preloadableViewIds) +// ^^^^ reference kotlin/collections/List# +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ reference kotlin/collections/CollectionsKt#emptyList(). + noinline viewMetadata: (View) -> U, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(viewMetadata) +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).``. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[U] + noinline viewSignature: (T) -> Any? = { _ -> null }, +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(viewSignature) +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).``. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[T] +// ^^^ reference kotlin/Any# +// ^ definition local1 + noinline doPreload: (epoxyModel: T, preloadTarget: P, viewData: ViewData) -> Unit +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(doPreload) +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).epoxyModel. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[T] +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).preloadTarget. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[P] +// ^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).viewData. +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[U] +// ^^^^ reference kotlin/Unit# + ): EpoxyModelPreloader = +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[T] +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[U] +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[P] + with( +// ^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2). + preloadableViewIds = preloadableViewIds, +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(preloadableViewIds) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(preloadableViewIds) + epoxyModelClass = T::class.java, +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(epoxyModelClass) +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).[T] +// ^^^^ reference kotlin/jvm/JvmClassMappingKt#java. + viewMetadata = viewMetadata, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(viewMetadata) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(viewMetadata) + viewSignature = viewSignature, +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(viewSignature) +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(viewSignature) + doPreload = doPreload +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(doPreload) +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+1).(doPreload) + ) + + /** + * Helper to create a [EpoxyModelPreloader]. This is similar to the other helper methods but not inlined so it can be used with Java. + * + * @param epoxyModelClass The specific type of EpoxyModel that this preloader is for. + * @param viewSignature see [EpoxyModelPreloader.viewSignature] + * @param preloadableViewIds see [EpoxyModelPreloader.preloadableViewIds] + * @param viewMetadata see [EpoxyModelPreloader.buildViewMetadata] + * @param doPreload see [EpoxyModelPreloader.startPreload] + */ + fun , U : ViewMetadata?, P : PreloadRequestHolder> with( +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[T] +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2). + preloadableViewIds: List = emptyList(), +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(preloadableViewIds) +// ^^^^ reference kotlin/collections/List# +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ reference kotlin/collections/CollectionsKt#emptyList(). + epoxyModelClass: Class, +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(epoxyModelClass) +// ^^^^^ reference java/lang/Class# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[T] + viewMetadata: (View) -> U, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(viewMetadata) +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).``. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[U] + viewSignature: (T) -> Any? = { _ -> null }, +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(viewSignature) +// ^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).``. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[T] +// ^^^ reference kotlin/Any# +// ^ definition local2 + doPreload: (epoxyModel: T, preloadTarget: P, viewData: ViewData) -> Unit +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(doPreload) +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).epoxyModel. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[T] +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).preloadTarget. +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[P] +// ^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).viewData. +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[U] +// ^^^^ reference kotlin/Unit# + ): EpoxyModelPreloader = object : EpoxyModelPreloader( +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[T] +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[U] +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[P] +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#``(). +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[T] +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[U] +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[P] + modelType = epoxyModelClass, +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#``().(modelType) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(epoxyModelClass) + preloadableViewIds = preloadableViewIds +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#``().(preloadableViewIds) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(preloadableViewIds) + ) { + + override fun buildViewMetadata(view: View) = viewMetadata(view) +// ^^^^^^^^^^^^^^^^^ definition local3 +// ^^^^ definition local4 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(viewMetadata) +// ^^^^ reference local4 + + override fun viewSignature(epoxyModel: T) = viewSignature(epoxyModel) +// ^^^^^^^^^^^^^ definition local5 +// ^^^^^^^^^^ definition local6 +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[T] +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(viewSignature) +// ^^^^^^^^^^ reference local6 + + override fun startPreload(epoxyModel: T, preloadTarget: P, viewData: ViewData) { +// ^^^^^^^^^^^^ definition local7 +// ^^^^^^^^^^ definition local8 +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[T] +// ^^^^^^^^^^^^^ definition local9 +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[P] +// ^^^^^^^^ definition local10 +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).[U] + doPreload(epoxyModel, preloadTarget, viewData) +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#Companion#with(+2).(doPreload) +// ^^^^^^^^^^ reference local8 +// ^^^^^^^^^^^^^ reference local9 +// ^^^^^^^^ reference local10 + } + } + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/EpoxyPreloader.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/EpoxyPreloader.kt new file mode 100644 index 00000000..614d86f2 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/EpoxyPreloader.kt @@ -0,0 +1,739 @@ +package com.airbnb.epoxy.preload +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ + +import android.content.Context +import android.view.View +import android.widget.ImageView +import androidx.annotation.IdRes +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^^^^ reference androidx/annotation/IdRes# +import androidx.annotation.Px +// ^^^^^^^^ reference androidx/ +// ^^^^^^^^^^ reference androidx/annotation/ +// ^^ reference androidx/annotation/Px# +import androidx.recyclerview.widget.LinearLayoutManager +// ^^^^^^^^ reference androidx/ +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ +import com.airbnb.epoxy.BaseEpoxyAdapter +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import com.airbnb.epoxy.EpoxyAdapter +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import com.airbnb.epoxy.EpoxyController +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import com.airbnb.epoxy.EpoxyModel +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import com.airbnb.epoxy.getModelForPositionInternal +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/InternalExposerKt#getModelForPositionInternal(). +import kotlin.math.max +// ^^^^^^ reference kotlin/ +// ^^^^ reference kotlin/math/ +import kotlin.math.min +// ^^^^^^ reference kotlin/ +// ^^^^ reference kotlin/math/ + +/** + * A scroll listener that prefetches view content. + * + * To use this, create implementations of [EpoxyModelPreloader] for each EpoxyModel class that you want to preload. + * Then, use the [EpoxyPreloader.with] methods to create an instance that preloads models of that type. + * Finally, add the resulting scroll listener to your RecyclerView. + * + * If you are using [com.airbnb.epoxy.EpoxyRecyclerView] then use [com.airbnb.epoxy.EpoxyRecyclerView.addPreloader] + * to setup the preloader as a listener. + * + * Otherwise there is a [RecyclerView.addEpoxyPreloader] extension for easy usage. + */ +class EpoxyPreloader

private constructor( +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader# +// ^ definition com/airbnb/epoxy/preload/EpoxyPreloader#[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(). + private val adapter: BaseEpoxyAdapter, +// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#adapter. +// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getAdapter(). +// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``().(adapter) + preloadTargetFactory: () -> P, +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``().(preloadTargetFactory) +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P] + errorHandler: PreloadErrorHandler, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``().(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# + private val maxItemsToPreload: Int, +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload. +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload(). +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``().(maxItemsToPreload) +// ^^^ reference kotlin/Int# + modelPreloaders: List> +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``().(modelPreloaders) +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P] +) : RecyclerView.OnScrollListener() { + + private var lastVisibleRange: IntRange = IntRange.EMPTY +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange(). +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange(). +// ^^^^^^^^ reference kotlin/ranges/IntRange# +// ^^^^^^^^ reference kotlin/ranges/IntRange#Companion# +// ^^^^^ reference kotlin/ranges/IntRange#Companion#EMPTY. +// ^^^^^ reference kotlin/ranges/IntRange#Companion#getEMPTY(). + private var lastPreloadRange: IntProgression = IntRange.EMPTY +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#lastPreloadRange. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getLastPreloadRange(). +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#setLastPreloadRange(). +// ^^^^^^^^^^^^^^ reference kotlin/ranges/IntProgression# +// ^^^^^^^^ reference kotlin/ranges/IntRange#Companion# +// ^^^^^ reference kotlin/ranges/IntRange#Companion#EMPTY. +// ^^^^^ reference kotlin/ranges/IntRange#Companion#getEMPTY(). + private var totalItemCount = -1 +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#totalItemCount. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getTotalItemCount(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#setTotalItemCount(). +// ^ reference kotlin/Int#unaryMinus(). + private var scrollState: Int = RecyclerView.SCROLL_STATE_IDLE +// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#scrollState. +// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getScrollState(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#setScrollState(). +// ^^^ reference kotlin/Int# + + private val modelPreloaders: Map>, EpoxyModelPreloader<*, *, out P>> = +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#modelPreloaders. +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getModelPreloaders(). +// ^^^ reference kotlin/collections/Map# +// ^^^^^ reference java/lang/Class# +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P] + modelPreloaders.associateBy { it.modelType } +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``().(modelPreloaders) +// ^^^^^^^^^^^ reference kotlin/collections/CollectionsKt#associateBy(+18). +// ^^ reference local0 +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#modelType. +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#getModelType(). + + private val requestHolderFactory = +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#requestHolderFactory. +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getRequestHolderFactory(). + PreloadTargetProvider(maxItemsToPreload, preloadTargetFactory) +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#``(). +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload. +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``().(preloadTargetFactory) + + private val viewDataCache = PreloadableViewDataProvider(adapter, errorHandler) +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#viewDataCache. +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getViewDataCache(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#``(). +// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getAdapter(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``().(errorHandler) + + constructor( +// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+1). + epoxyController: EpoxyController, +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(epoxyController) + requestHolderFactory: () -> P, +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(requestHolderFactory) +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P] + errorHandler: PreloadErrorHandler, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# + maxItemsToPreload: Int, +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(maxItemsToPreload) +// ^^^ reference kotlin/Int# + modelPreloaders: List> +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(modelPreloaders) +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P] + ) : this( + epoxyController.adapter, +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(epoxyController) + requestHolderFactory, +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(requestHolderFactory) + errorHandler, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(errorHandler) + maxItemsToPreload, +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(maxItemsToPreload) + modelPreloaders +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+1).(modelPreloaders) + ) + + constructor( +// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+2). + adapter: EpoxyAdapter, +// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(adapter) + requestHolderFactory: () -> P, +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(requestHolderFactory) +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P] + errorHandler: PreloadErrorHandler, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# + maxItemsToPreload: Int, +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(maxItemsToPreload) +// ^^^ reference kotlin/Int# + modelPreloaders: List> +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(modelPreloaders) +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P] + ) : this( + adapter as BaseEpoxyAdapter, +// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(adapter) + requestHolderFactory, +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(requestHolderFactory) + errorHandler, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(errorHandler) + maxItemsToPreload, +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(maxItemsToPreload) + modelPreloaders +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#``(+2).(modelPreloaders) + ) + + init { + require(maxItemsToPreload > 0) { +// ^^^^^^^ reference kotlin/PreconditionsKt#require(+1). +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload. +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload(). +// ^ reference kotlin/Int#compareTo(+3). + "maxItemsToPreload must be greater than 0. Was $maxItemsToPreload" +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload. +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload(). + } + } + + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrollStateChanged(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrollStateChanged().(recyclerView) +// ^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrollStateChanged().(newState) +// ^^^ reference kotlin/Int# + scrollState = newState +// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#scrollState. +// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getScrollState(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setScrollState(). +// ^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrollStateChanged().(newState) + } + + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(recyclerView) +// ^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dx) +// ^^^ reference kotlin/Int# +// ^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dy) +// ^^^ reference kotlin/Int# + if (dx == 0 && dy == 0) { +// ^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dx) +// ^^ reference kotlin/Int#equals(). +// ^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dy) +// ^^ reference kotlin/Int#equals(). + // Sometimes flings register a bunch of 0 dx/dy scroll events. To avoid redundant prefetching we just skip these + // Additionally, the first RecyclerView layout notifies a scroll of 0, since that can be an important time for + // performance (eg page load) we avoid prefetching at the same time. + return + } + + if (dx.isFling() || dy.isFling()) { +// ^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dx) +// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isFling(). +// ^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dy) +// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isFling(). + // We avoid preloading during flings for two reasons + // 1. Image requests are expensive and we don't want to drop frames on fling + // 2. We'll likely scroll past the preloading item anyway + return + } + + // Update item count before anything else because validations depend on it + totalItemCount = recyclerView.adapter?.itemCount ?: 0 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#totalItemCount. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getTotalItemCount(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setTotalItemCount(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(recyclerView) + + val layoutManager = recyclerView.layoutManager as LinearLayoutManager +// ^^^^^^^^^^^^^ definition local1 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(recyclerView) + val firstVisiblePosition = layoutManager.findFirstVisibleItemPosition() +// ^^^^^^^^^^^^^^^^^^^^ definition local2 +// ^^^^^^^^^^^^^ reference local1 + val lastVisiblePosition = layoutManager.findLastVisibleItemPosition() +// ^^^^^^^^^^^^^^^^^^^ definition local3 +// ^^^^^^^^^^^^^ reference local1 + + if (firstVisiblePosition.isInvalid() || lastVisiblePosition.isInvalid()) { +// ^^^^^^^^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^^^^^^^^^^ reference local3 + lastVisibleRange = IntRange.EMPTY +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange(). +// ^^^^^^^^ reference kotlin/ranges/IntRange#Companion# +// ^^^^^ reference kotlin/ranges/IntRange#Companion#EMPTY. +// ^^^^^ reference kotlin/ranges/IntRange#Companion#getEMPTY(). + lastPreloadRange = IntRange.EMPTY +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastPreloadRange. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastPreloadRange(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastPreloadRange(). +// ^^^^^^^^ reference kotlin/ranges/IntRange#Companion# +// ^^^^^ reference kotlin/ranges/IntRange#Companion#EMPTY. +// ^^^^^ reference kotlin/ranges/IntRange#Companion#getEMPTY(). + return + } + + val visibleRange = IntRange(firstVisiblePosition, lastVisiblePosition) +// ^^^^^^^^^^^^ definition local4 +// ^^^^^^^^ reference kotlin/ranges/IntRange#``(). +// ^^^^^^^^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^^^^^^^^^^ reference local3 + if (visibleRange == lastVisibleRange) { +// ^^^^^^^^^^^^ reference local4 +// ^^ reference kotlin/ranges/IntRange#equals(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange(). + return + } + + val isIncreasing = +// ^^^^^^^^^^^^ definition local5 + visibleRange.first > lastVisibleRange.first || visibleRange.last > lastVisibleRange.last +// ^^^^^^^^^^^^ reference local4 +// ^^^^^ reference kotlin/ranges/IntRange#first. +// ^^^^^ reference kotlin/ranges/IntRange#getFirst(). +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange(). +// ^^^^^ reference kotlin/ranges/IntRange#first. +// ^^^^^ reference kotlin/ranges/IntRange#getFirst(). +// ^^^^^^^^^^^^ reference local4 +// ^^^^ reference kotlin/ranges/IntRange#last. +// ^^^^ reference kotlin/ranges/IntRange#getLast(). +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange(). +// ^^^^ reference kotlin/ranges/IntRange#last. +// ^^^^ reference kotlin/ranges/IntRange#getLast(). + + val preloadRange = +// ^^^^^^^^^^^^ definition local6 + calculatePreloadRange(firstVisiblePosition, lastVisiblePosition, isIncreasing) +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange(). +// ^^^^^^^^^^^^^^^^^^^^ reference local2 +// ^^^^^^^^^^^^^^^^^^^ reference local3 +// ^^^^^^^^^^^^ reference local5 + + // Start preload for any items that weren't already preloaded + preloadRange +// ^^^^^^^^^^^^ reference local6 + .subtract(lastPreloadRange) +// ^^^^^^^^ reference kotlin/collections/CollectionsKt#subtract(+9). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastPreloadRange. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastPreloadRange(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastPreloadRange(). + .forEach { preloadAdapterPosition(it) } +// ^^^^^^^ reference kotlin/collections/CollectionsKt#forEach(+10). +// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition(). +// ^^ reference local7 + + lastVisibleRange = visibleRange +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange(). +// ^^^^^^^^^^^^ reference local4 + lastPreloadRange = preloadRange +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastPreloadRange. +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastPreloadRange(). +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastPreloadRange(). +// ^^^^^^^^^^^^ reference local6 + } + + /** + * @receiver The number of pixels scrolled. + * @return True if this distance is large enough to be considered a fast fling. + */ + private fun Int.isFling() = Math.abs(this) > FLING_THRESHOLD_PX +// ^^^ reference kotlin/Int# +// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#isFling(). +// ^^^^ reference java/lang/Math# +// ^^^ reference java/lang/Math#abs(). +// ^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isFling(). +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#FLING_THRESHOLD_PX. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#getFLING_THRESHOLD_PX(). + + private fun calculatePreloadRange( +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange(). + firstVisiblePosition: Int, +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(firstVisiblePosition) +// ^^^ reference kotlin/Int# + lastVisiblePosition: Int, +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(lastVisiblePosition) +// ^^^ reference kotlin/Int# + isIncreasing: Boolean +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(isIncreasing) +// ^^^^^^^ reference kotlin/Boolean# + ): IntProgression { +// ^^^^^^^^^^^^^^ reference kotlin/ranges/IntProgression# + val from = if (isIncreasing) lastVisiblePosition + 1 else firstVisiblePosition - 1 +// ^^^^ definition local8 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(isIncreasing) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(lastVisiblePosition) +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(firstVisiblePosition) +// ^ reference kotlin/Int#minus(+3). + val to = from + if (isIncreasing) maxItemsToPreload - 1 else 1 - maxItemsToPreload +// ^^ definition local9 +// ^^^^ reference local8 +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(isIncreasing) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload. +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload(). +// ^ reference kotlin/Int#minus(+3). +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload. +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload(). + + return IntProgression.fromClosedRange( +// ^^^^^^^^^^^^^^ reference kotlin/ranges/IntProgression#Companion# +// ^^^^^^^^^^^^^^^ reference kotlin/ranges/IntProgression#Companion#fromClosedRange(). + rangeStart = from.clampToAdapterRange(), +// ^^^^^^^^^^ reference kotlin/ranges/IntProgression#Companion#fromClosedRange().(rangeStart) +// ^^^^ reference local8 +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#clampToAdapterRange(). + rangeEnd = to.clampToAdapterRange(), +// ^^^^^^^^ reference kotlin/ranges/IntProgression#Companion#fromClosedRange().(rangeEnd) +// ^^ reference local9 +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#clampToAdapterRange(). + step = if (isIncreasing) 1 else -1 +// ^^^^ reference kotlin/ranges/IntProgression#Companion#fromClosedRange().(step) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(isIncreasing) +// ^ reference kotlin/Int#unaryMinus(). + ) + } + + /** Check if an item index is valid. It may not be if the adapter is empty, or if adapter changes have been dispatched since the last layout pass. */ + private fun Int.isInvalid() = this == RecyclerView.NO_POSITION || this >= totalItemCount +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#isInvalid(). +// ^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isInvalid(). +// ^^ reference kotlin/Int#equals(). +// ^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isInvalid(). +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#totalItemCount. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getTotalItemCount(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setTotalItemCount(). + + private fun Int.clampToAdapterRange() = min(totalItemCount - 1, max(this, 0)) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#clampToAdapterRange(). +// ^^^ reference kotlin/math/MathKt#min(+2). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#totalItemCount. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getTotalItemCount(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setTotalItemCount(). +// ^ reference kotlin/Int#minus(+3). +// ^^^ reference kotlin/math/MathKt#max(+2). +// ^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#clampToAdapterRange(). + + private fun preloadAdapterPosition(position: Int) { +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition(). +// ^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition().(position) +// ^^^ reference kotlin/Int# + @Suppress("UNCHECKED_CAST") +// ^^^^^^^^ reference kotlin/Suppress#``(). + val epoxyModel = adapter.getModelForPositionInternal(position) as? EpoxyModel +// ^^^^^^^^^^ definition local10 +// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getAdapter(). +// ^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition().(position) +// ^^^ reference kotlin/Any# + ?: return + + @Suppress("UNCHECKED_CAST") +// ^^^^^^^^ reference kotlin/Suppress#``(). + val preloader = +// ^^^^^^^^^ definition local11 + modelPreloaders[epoxyModel::class.java] as? EpoxyModelPreloader, ViewMetadata?, P> +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#modelPreloaders. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getModelPreloaders(). +// ^^^^^^^^^^ reference local10 +// ^^^^ reference kotlin/jvm/JvmClassMappingKt#java. +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P] + ?: return + + viewDataCache +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#viewDataCache. +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getViewDataCache(). + .dataForModel(preloader, epoxyModel, position) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel(). +// ^^^^^^^^^ reference local11 +// ^^^^^^^^^^ reference local10 +// ^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition().(position) + .forEach { viewData -> +// ^^^^^^^ reference kotlin/collections/CollectionsKt#forEach(+10). +// ^^^^^^^^ definition local12 + val preloadTarget = requestHolderFactory.next() +// ^^^^^^^^^^^^^ definition local13 +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#requestHolderFactory. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getRequestHolderFactory(). +// ^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#next(). + preloader.startPreload(epoxyModel, preloadTarget, viewData) +// ^^^^^^^^^ reference local11 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#startPreload(). +// ^^^^^^^^^^ reference local10 +// ^^^^^^^^^^^^^ reference local13 +// ^^^^^^^^ reference local12 + } + } + + /** + * Cancels all current preload requests in progress. + */ + fun cancelPreloadRequests() { +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#cancelPreloadRequests(). + requestHolderFactory.clearAll() +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#requestHolderFactory. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getRequestHolderFactory(). +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#clearAll(). + } + + companion object { + + /** + * + * Represents a threshold for fast scrolling. + * This is a bit arbitrary and was determined by looking at values while flinging vs slow scrolling. + * Ideally it would be based on DP, but this is simpler. + */ + private const val FLING_THRESHOLD_PX = 75 +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#FLING_THRESHOLD_PX. +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#getFLING_THRESHOLD_PX(). + + /** + * Helper to create a preload scroll listener. Add the result to your RecyclerView. + * for different models or content types. + * + * @param maxItemsToPreload How many items to prefetch ahead of the last bound item + * @param errorHandler Called when the preloader encounters an exception. By default this throws only + * if the app is not in a debuggle model + * @param modelPreloader Describes how view content for the EpoxyModel should be preloaded + * @param requestHolderFactory Should create and return a new [PreloadRequestHolder] each time it is invoked + */ + fun

with( +// ^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(). + epoxyController: EpoxyController, +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(epoxyController) + requestHolderFactory: () -> P, +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(requestHolderFactory) +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().[P] + errorHandler: PreloadErrorHandler, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# + maxItemsToPreload: Int, +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(maxItemsToPreload) +// ^^^ reference kotlin/Int# + modelPreloader: EpoxyModelPreloader, out ViewMetadata?, out P> +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(modelPreloader) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().[P] + ): EpoxyPreloader

= +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().[P] + with( + epoxyController, +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(epoxyController) + requestHolderFactory, +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(requestHolderFactory) + errorHandler, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(errorHandler) + maxItemsToPreload, +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(maxItemsToPreload) + listOf(modelPreloader) +// ^^^^^^ reference kotlin/collections/CollectionsKt#listOf(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(modelPreloader) + ) + + fun

with( +// ^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1). + epoxyController: EpoxyController, +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(epoxyController) + requestHolderFactory: () -> P, +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(requestHolderFactory) +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).[P] + errorHandler: PreloadErrorHandler, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# + maxItemsToPreload: Int, +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(maxItemsToPreload) +// ^^^ reference kotlin/Int# + modelPreloaders: List, out ViewMetadata?, out P>> +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(modelPreloaders) +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).[P] + ): EpoxyPreloader

{ +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).[P] + + return EpoxyPreloader( + epoxyController, +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(epoxyController) + requestHolderFactory, +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(requestHolderFactory) + errorHandler, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(errorHandler) + maxItemsToPreload, +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(maxItemsToPreload) + modelPreloaders +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(modelPreloaders) + ) + } + + /** Helper to create a preload scroll listener. Add the result to your RecyclerView. */ + fun

with( +// ^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2). + epoxyAdapter: EpoxyAdapter, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(epoxyAdapter) + requestHolderFactory: () -> P, +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(requestHolderFactory) +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).[P] + errorHandler: PreloadErrorHandler, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# + maxItemsToPreload: Int, +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(maxItemsToPreload) +// ^^^ reference kotlin/Int# + modelPreloaders: List, out ViewMetadata?, out P>> +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(modelPreloaders) +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).[P] + ): EpoxyPreloader

{ +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader# +// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).[P] + + return EpoxyPreloader( + epoxyAdapter, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(epoxyAdapter) + requestHolderFactory, +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(requestHolderFactory) + errorHandler, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(errorHandler) + maxItemsToPreload, +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(maxItemsToPreload) + modelPreloaders +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(modelPreloaders) + ) + } + } +} + +class EpoxyPreloadException(errorMessage: String) : RuntimeException(errorMessage) +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloadException# +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloadException#``(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloadException#``().(errorMessage) +// ^^^^^^ reference kotlin/String# +// ^^^^^^^^^^^^^^^^ reference kotlin/RuntimeException#``(+1). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloadException#``().(errorMessage) + +typealias PreloadErrorHandler = (Context, RuntimeException) -> Unit +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadErrorHandler# +// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloaderKt#``. +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloaderKt#``. +// ^^^^^^^^^^^^^^^^ reference kotlin/RuntimeException# +// ^^^^ reference kotlin/Unit# + +/** + * Data about an image view to be preloaded. This data is used to construct a Glide image request. + * + * @param metadata Any custom, additional data that the [EpoxyModelPreloader] chooses to provide that may be necessary to create the image request. + */ +class ViewData( +// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData# +// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData#``(). +// ^ definition com/airbnb/epoxy/preload/ViewData#[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# + @IdRes val viewId: Int, +// ^^^^^ reference androidx/annotation/IdRes#``(). +// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#viewId. +// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#getViewId(). +// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#``().(viewId) +// ^^^ reference kotlin/Int# + @Px val width: Int, +// ^^ reference androidx/annotation/Px#``(). +// ^^^^^ definition com/airbnb/epoxy/preload/ViewData#width. +// ^^^^^ definition com/airbnb/epoxy/preload/ViewData#getWidth(). +// ^^^^^ definition com/airbnb/epoxy/preload/ViewData#``().(width) +// ^^^ reference kotlin/Int# + @Px val height: Int, +// ^^ reference androidx/annotation/Px#``(). +// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#height. +// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#getHeight(). +// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#``().(height) +// ^^^ reference kotlin/Int# + val metadata: U +// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData#metadata. +// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData#getMetadata(). +// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData#``().(metadata) +// ^ reference com/airbnb/epoxy/preload/ViewData#[U] +) + +interface ViewMetadata { +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/ViewMetadata# + companion object { + fun getDefault(view: View): ViewMetadata? { +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault(). +// ^^^^ definition com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# + return when (view) { +// ^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault().(view) + is ImageView -> ImageViewMetadata(view.scaleType) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ImageViewMetadata#``(). +// ^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault().(view) + else -> null + } + } + } +} + +/** + * Default implementation of [ViewMetadata] for an ImageView. + * This data can help the preload request know how to configure itself. + */ +open class ImageViewMetadata( +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata# +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata#``(). + val scaleType: ImageView.ScaleType +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata#scaleType. +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata#getScaleType(). +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata#``().(scaleType) +) : ViewMetadata +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloadTargetProvider.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloadTargetProvider.kt new file mode 100644 index 00000000..7ff6888c --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloadTargetProvider.kt @@ -0,0 +1,80 @@ +package com.airbnb.epoxy.preload +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ + +import java.util.ArrayDeque +// ^^^^ reference java/ +// ^^^^ reference java/util/ +// ^^^^^^^^^^ reference java/util/ArrayDeque# + +internal class PreloadTargetProvider

( +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadTargetProvider# +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadTargetProvider#``(). +// ^ definition com/airbnb/epoxy/preload/PreloadTargetProvider#[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# + maxPreload: Int, +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadTargetProvider#``().(maxPreload) +// ^^^ reference kotlin/Int# + requestHolderFactory: () -> P +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadTargetProvider#``().(requestHolderFactory) +// ^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#[P] +) { + private val queue = ArrayDeque

((0 until maxPreload).map { requestHolderFactory() }) +// ^^^^^ definition com/airbnb/epoxy/preload/PreloadTargetProvider#queue. +// ^^^^^ definition com/airbnb/epoxy/preload/PreloadTargetProvider#getQueue(). +// ^^^^^^^^^^ reference java/util/ArrayDeque#``(+2). +// ^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#[P] +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#``().(maxPreload) +// ^^^ reference kotlin/collections/CollectionsKt#map(+9). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#``().(requestHolderFactory) + + internal fun next(): P { +// ^^^^ definition com/airbnb/epoxy/preload/PreloadTargetProvider#next(). +// ^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#[P] + val result = queue.poll() +// ^^^^^^ definition local0 +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#queue. +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#getQueue(). +// ^^^^ reference java/util/ArrayDeque#poll(). + queue.offer(result) +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#queue. +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#getQueue(). +// ^^^^^ reference java/util/ArrayDeque#offer(). +// ^^^^^^ reference local0 + result.clear() +// ^^^^^^ reference local0 +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder#clear(). + return result +// ^^^^^^ reference local0 + } + + fun clearAll() { +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadTargetProvider#clearAll(). + queue.forEach { it.clear() } +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#queue. +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#getQueue(). +// ^^^^^^^ reference kotlin/collections/CollectionsKt#forEach(+10). +// ^^ reference local1 +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder#clear(). + } +} + +/** + * This is responsible for holding details for a preloading request. + * Your implementation can do anything it wants with the request, but it must + * cancel and clear itself when [clear] is called. + * + * It is also recommended that your implementation calls [clear] when your request finishes loading + * to avoid unnecessarily hanging onto the request result (assuming the result is also stored in + * cache). Otherwise this holder can be stored in a pool for later use and may leak the preloaded + * data. + */ +interface PreloadRequestHolder { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadRequestHolder# + /** Clear any ongoing preload request. */ + fun clear() +// ^^^^^ definition com/airbnb/epoxy/preload/PreloadRequestHolder#clear(). +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/Preloadable.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/Preloadable.kt new file mode 100644 index 00000000..1805489a --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/Preloadable.kt @@ -0,0 +1,21 @@ +package com.airbnb.epoxy.preload +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ + +import android.view.View + +/** + * Declares Views that should be preloaded. This can either be implemented by a custom view or by an [EpoxyHolder]. + * + * The preloadable views can be recursive ie if [Preloadable.viewsToPreload] includes any views that are themselves Preloadable those nested + * views will instead by used. + */ +interface Preloadable { +// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/Preloadable# + val viewsToPreload: List +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/Preloadable#viewsToPreload. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/Preloadable#getViewsToPreload(). +// ^^^^ reference kotlin/collections/List# +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloadableViewDataProvider.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloadableViewDataProvider.kt new file mode 100644 index 00000000..c6e1188e --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloadableViewDataProvider.kt @@ -0,0 +1,397 @@ +package com.airbnb.epoxy.preload +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ + +import android.view.View +import androidx.core.view.ViewCompat +// ^^^^^^^^ reference androidx/ +import com.airbnb.epoxy.BaseEpoxyAdapter +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import com.airbnb.epoxy.EpoxyModel +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import com.airbnb.epoxy.boundViewHoldersInternal +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/InternalExposerKt#boundViewHoldersInternal(). +import com.airbnb.epoxy.objectToBindInternal +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/InternalExposerKt#objectToBindInternal(). +import com.airbnb.epoxy.viewTypeInternal +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/InternalExposerKt#viewTypeInternal(). + +/** + * In order to preload content we need to know the size of the view that they it be loaded into. + * This class provides the view size, as well as other view metadata that might be necessary to construct the preload request. + */ +internal class PreloadableViewDataProvider( +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#``(). + val adapter: BaseEpoxyAdapter, +// ^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#adapter. +// ^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#getAdapter(). +// ^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#``().(adapter) + val errorHandler: PreloadErrorHandler +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#errorHandler. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#getErrorHandler(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#``().(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# +) { + + /** + * A given model class might have different sized preloadable views depending on configuration. + * We use this cache key to separate view configurations. + */ + private data class CacheKey( +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey# +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#``(). + val epoxyModelClass: Class>, +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#epoxyModelClass. +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#getEpoxyModelClass(). +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#``().(epoxyModelClass) +// ^^^^^ reference java/lang/Class# + val spanSize: Int, +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#spanSize. +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#getSpanSize(). +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#``().(spanSize) +// ^^^ reference kotlin/Int# + val viewType: Int, +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#viewType. +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#getViewType(). +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#``().(viewType) +// ^^^ reference kotlin/Int# + /** An optional, custom signature provided by the model preloader. This allows the user to specify custom cache mixins */ + val signature: Any? +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#signature. +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#getSignature(). +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#``().(signature) +// ^^^ reference kotlin/Any# + ) + + private val cache = mutableMapOf>?>() +// ^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#cache. +// ^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#getCache(). +// ^^^^^^^^^^^^ reference kotlin/collections/MapsKt#mutableMapOf(). +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey# +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# + + /** @return A list containing the data necessary to load each view in the given model. */ + fun , U : ViewMetadata?, P : PreloadRequestHolder> dataForModel( +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[T] +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel(). + preloader: EpoxyModelPreloader, +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().(preloader) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[T] +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[U] +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[P] + epoxyModel: T, +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().(epoxyModel) +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[T] + position: Int +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().(position) +// ^^^ reference kotlin/Int# + ): List> { +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[U] + val cacheKey = cacheKey(preloader, epoxyModel, position) +// ^^^^^^^^ definition local0 +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey(). +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().(preloader) +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().(epoxyModel) +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().(position) + + @Suppress("UNCHECKED_CAST") +// ^^^^^^^^ reference kotlin/Suppress#``(). + return cache.getOrPut(cacheKey) { +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cache. +// ^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#getCache(). +// ^^^^^^^^ reference kotlin/collections/MapsKt#getOrPut(+1). +// ^^^^^^^^ reference local0 + // Look up view data based on currently bound views. This can be null if a matching view type is not found. + // In that case we save the null so we know to try the lookup again next time. + findViewData(preloader, epoxyModel, cacheKey) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData(). +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().(preloader) +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().(epoxyModel) +// ^^^^^^^^ reference local0 + } as? List> ?: return emptyList() +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().[U] +// ^^^^^^^^^ reference kotlin/collections/CollectionsKt#emptyList(). + } + + private fun > cacheKey( +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().[T] +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey(). + preloader: EpoxyModelPreloader, +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(preloader) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().[T] + epoxyModel: T, +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(epoxyModel) +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().[T] + position: Int +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(position) +// ^^^ reference kotlin/Int# + ): CacheKey { +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey# + val modelSpanSize = if (adapter.isMultiSpan) { +// ^^^^^^^^^^^^^ definition local1 +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#getAdapter(). + epoxyModel.spanSize(adapter.spanCount, position, adapter.itemCount) +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(epoxyModel) +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#getAdapter(). +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(position) +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#getAdapter(). + } else { + 1 + } + + return CacheKey( +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#``(). + epoxyModel.javaClass, +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(epoxyModel) + modelSpanSize, +// ^^^^^^^^^^^^^ reference local1 + epoxyModel.viewTypeInternal(), +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(epoxyModel) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/InternalExposerKt#viewTypeInternal(). + preloader.viewSignature(epoxyModel) +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(preloader) +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#viewSignature(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey().(epoxyModel) + ) + } + + private fun , U : ViewMetadata?, P : PreloadRequestHolder> findViewData( +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[T] +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData(). + preloader: EpoxyModelPreloader, +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(preloader) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[T] +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[U] +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[P] + epoxyModel: T, +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(epoxyModel) +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[T] + cacheKey: CacheKey +// ^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(cacheKey) +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey# + ): List>? { +// ^^^^ reference kotlin/collections/List# +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[U] + // It is a bit tricky to get details on the view to be preloaded, since the view doesn't necessarily exist at the time of preload. + // This approach looks at currently bound views and tries to get one who's cache key is the same as what we need. + // This should mostly work, since RecyclerViews are generally the same type of views shown repeatedly. + // If a model is only shown sporadically we may never be able to get data about it with this approach, which we could address in the future. + + val holderMatch = adapter.boundViewHoldersInternal().find { +// ^^^^^^^^^^^ definition local2 +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#getAdapter(). + val boundModel = it.model +// ^^^^^^^^^^ definition local3 + if (boundModel::class == epoxyModel::class) { +// ^^^^^^^^^^ reference local3 +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(epoxyModel) + @Suppress("UNCHECKED_CAST") +// ^^^^^^^^ reference kotlin/Suppress#``(). + // We need the view sizes, but viewholders can be bound without actually being laid out on screen yet + ViewCompat.isAttachedToWindow(it.itemView) && + ViewCompat.isLaidOut(it.itemView) && + cacheKey(preloader, boundModel as T, it.adapterPosition) == cacheKey +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#cacheKey(). +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(preloader) +// ^^^^^^^^^^ reference local3 +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().[T] +// ^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#CacheKey#equals(). +// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(cacheKey) + } else { + false + } + } + + val rootView = holderMatch?.itemView ?: return null +// ^^^^^^^^ definition local4 +// ^^^^^^^^^^^ reference local2 + + val boundObject = holderMatch.objectToBindInternal() // Allows usage of view holder models +// ^^^^^^^^^^^ definition local5 +// ^^^^^^^^^^^ reference local2 + + val preloadableViews: List = when { +// ^^^^^^^^^^^^^^^^ definition local6 +// ^^^^ reference kotlin/collections/List# + preloader.preloadableViewIds.isNotEmpty() -> rootView.findViews( +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(preloader) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#preloadableViewIds. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#getPreloadableViewIds(). +// ^^^^^^^^^^ reference kotlin/collections/CollectionsKt#isNotEmpty(+9). +// ^^^^^^^^ reference local4 +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews(). + preloader.preloadableViewIds, +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(preloader) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#preloadableViewIds. +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#getPreloadableViewIds(). + epoxyModel +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(epoxyModel) + ) + rootView is Preloadable -> rootView.viewsToPreload +// ^^^^^^^^ reference local4 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/Preloadable# +// ^^^^^^^^ reference local4 + boundObject is Preloadable -> boundObject.viewsToPreload +// ^^^^^^^^^^^ reference local5 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/Preloadable# +// ^^^^^^^^^^^ reference local5 + else -> emptyList() +// ^^^^^^^^^ reference kotlin/collections/CollectionsKt#emptyList(). + } + + if (preloadableViews.isEmpty()) { +// ^^^^^^^^^^^^^^^^ reference local6 +// ^^^^^^^ reference kotlin/collections/List#isEmpty(). + errorHandler(rootView.context, EpoxyPreloadException("No preloadable views were found in ${epoxyModel.javaClass.simpleName}")) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#errorHandler. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#getErrorHandler(). +// ^^^^^^^^ reference local4 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloadException#``(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(epoxyModel) + } + + return preloadableViews +// ^^^^^^^^^^^^^^^^ reference local6 + .flatMap { it.recursePreloadableViews() } +// ^^^^^^^ reference kotlin/collections/CollectionsKt#flatMap(+10). +// ^^ reference local7 + .mapNotNull { it.buildData(preloader, epoxyModel) } +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(preloader) +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViewData().(epoxyModel) + } + + /** Returns child views with the given view ids. */ + private fun > View.findViews( +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews().[T] +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews(). + viewIds: List, +// ^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews().(viewIds) +// ^^^^ reference kotlin/collections/List# +// ^^^ reference kotlin/Int# + epoxyModel: T +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews().(epoxyModel) +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews().[T] + ): List { +// ^^^^ reference kotlin/collections/List# + return viewIds.mapNotNull { id -> +// ^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews().(viewIds) +// ^^^^^^^^^^ reference kotlin/collections/CollectionsKt#mapNotNull(+1). +// ^^ definition local8 + findViewById(id).apply { +// ^^ reference local8 + if (this == null) errorHandler(context, EpoxyPreloadException("View with id $id in ${epoxyModel.javaClass.simpleName} could not be found.")) +// ^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews(). +// ^^ reference local8 +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#findViews().(epoxyModel) + } + } + } + + /** If a View with the [Preloadable] interface is used we want to get all of the preloadable views contained in that Preloadable instead. */ + private fun T.recursePreloadableViews(): List { +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#recursePreloadableViews().[T] +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#recursePreloadableViews().[T] +// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#recursePreloadableViews(). +// ^^^^ reference kotlin/collections/List# + return if (this is Preloadable) { +// ^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#recursePreloadableViews(). +// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/Preloadable# + viewsToPreload.flatMap { it.recursePreloadableViews() } +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/Preloadable#viewsToPreload. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/Preloadable#getViewsToPreload(). +// ^^^^^^^ reference kotlin/collections/CollectionsKt#flatMap(+10). +// ^^ reference local9 + } else { + listOf(this) +// ^^^^^^ reference kotlin/collections/CollectionsKt#listOf(). +// ^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#recursePreloadableViews(). + } + } + + private fun , U : ViewMetadata?, P : PreloadRequestHolder> View.buildData( +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().[T] +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData(). + preloader: EpoxyModelPreloader, +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().(preloader) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().[T] +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().[U] +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().[P] + epoxyModel: T +// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().(epoxyModel) +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().[T] + ): ViewData? { +// ^^^^^^^^ reference com/airbnb/epoxy/preload/ViewData# +// ^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().[U] + + // Glide's internal size determiner takes view dimensions and subtracts padding to get target size. + // TODO: We could support size overrides by allowing the preloader to specify a size override callback + val width = width - paddingLeft - paddingRight +// ^^^^^ definition local10 + val height = height - paddingTop - paddingBottom +// ^^^^^^ definition local11 + + if (width <= 0 || height <= 0) { +// ^^^^^ reference local10 +// ^^^^^^ reference local11 + // If no placeholder or aspect ratio is used then the view might be empty before its content loads + errorHandler(context, EpoxyPreloadException("${this.javaClass.simpleName} in ${epoxyModel.javaClass.simpleName} has zero size. A size must be set to allow preloading.")) +// ^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().(epoxyModel) + return null + } + + return ViewData( + id, + width, +// ^^^^^ reference local10 + height, +// ^^^^^^ reference local11 + preloader.buildViewMetadata(this) +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData().(preloader) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#buildViewMetadata(). +// ^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#buildData(). + ) + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloaderExtensions.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloaderExtensions.kt new file mode 100644 index 00000000..039cd368 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/preload/PreloaderExtensions.kt @@ -0,0 +1,79 @@ +package com.airbnb.epoxy.preload +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^ reference com/airbnb/epoxy/preload/ + +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ +import com.airbnb.epoxy.EpoxyController +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import com.airbnb.epoxy.EpoxyModel +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import com.airbnb.epoxy.utils.isDebuggable +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^ reference com/airbnb/epoxy/utils/ +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/utils/utilsKt#isDebuggable. + +/** + * Helper to create and add an [EpoxyPreloader] to this RecyclerView. + * + * If you are using [com.airbnb.epoxy.EpoxyRecyclerView], prefer[com.airbnb.epoxy.EpoxyRecyclerView.addPreloader] + * instead. + * + * @param maxPreloadDistance How many items to prefetch ahead of the last bound item + * @param errorHandler Called when the preloader encounters an exception. By default this throws only + * if the app is not in a debuggle model + * @param preloader Describes how view content for the EpoxyModel should be preloaded + * @param requestHolderFactory Should create and return a new [PreloadRequestHolder] each time it is invoked + */ +fun , U : ViewMetadata?, P : PreloadRequestHolder> RecyclerView.addEpoxyPreloader( +// ^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().[T] +// ^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().[U] +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata# +// ^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().[P] +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder# +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader(). + epoxyController: EpoxyController, +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(epoxyController) + maxPreloadDistance: Int = 3, +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(maxPreloadDistance) +// ^^^ reference kotlin/Int# + errorHandler: PreloadErrorHandler = { context, err -> if (!context.isDebuggable) throw err }, +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(errorHandler) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler# +// ^^^^^^^ definition local0 +// ^^^ definition local1 +// ^^^^^^^ reference local0 +// ^^^ reference local1 + preloader: EpoxyModelPreloader, +// ^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(preloader) +// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader# +// ^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().[T] +// ^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().[U] +// ^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().[P] + requestHolderFactory: () -> P +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(requestHolderFactory) +// ^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().[P] +) { + EpoxyPreloader.with( + epoxyController, +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(epoxyController) + requestHolderFactory, +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(requestHolderFactory) + errorHandler, +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(errorHandler) + maxPreloadDistance, +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(maxPreloadDistance) + preloader +// ^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloaderExtensionsKt#addEpoxyPreloader().(preloader) + ).let { + addOnScrollListener(it) + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks.kt new file mode 100644 index 00000000..d70bc9e3 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks.kt @@ -0,0 +1,55 @@ +package com.airbnb.epoxy.stickyheader +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/ + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ + +/** + * Adds sticky headers capabilities to any [RecyclerView.Adapter] + * combined with [StickyHeaderLinearLayoutManager]. + */ +interface StickyHeaderCallbacks { +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks# + + /** + * Return true if the view at the specified [position] needs to be sticky + * else false. + */ + fun isStickyHeader(position: Int): Boolean +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks#isStickyHeader(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks#isStickyHeader().(position) +// ^^^ reference kotlin/Int# +// ^^^^^^^ reference kotlin/Boolean# + + //region Optional callbacks + + /** + * Callback to adjusts any necessary properties of the [stickyHeader] view + * that is being used as a sticky, eg. elevation. + * Default behaviour is no-op. + * + * [teardownStickyHeaderView] will be called sometime after this method + * and before any other calls to this method go through. + */ + fun setupStickyHeaderView(stickyHeader: View) = Unit +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks#setupStickyHeaderView(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks#setupStickyHeaderView().(stickyHeader) +// ^^^^ reference kotlin/Unit# + + /** + * Callback to revert any properties changed in [setupStickyHeaderView]. + * Default behaviour is no-op. + * + * Called after [setupStickyHeaderView]. + */ + fun teardownStickyHeaderView(stickyHeader: View) = Unit +// ^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks#teardownStickyHeaderView(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderCallbacks#teardownStickyHeaderView().(stickyHeader) +// ^^^^ reference kotlin/Unit# + + //endregion +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager.kt new file mode 100644 index 00000000..552c4328 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager.kt @@ -0,0 +1,1735 @@ +package com.airbnb.epoxy.stickyheader +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/ + +import android.content.Context +import android.graphics.PointF +import android.os.Build +import android.os.Parcelable +import android.view.View +import android.view.ViewGroup +import android.view.ViewTreeObserver +import androidx.recyclerview.widget.LinearLayoutManager +// ^^^^^^^^ reference androidx/ +import androidx.recyclerview.widget.RecyclerView +// ^^^^^^^^ reference androidx/ +import com.airbnb.epoxy.BaseEpoxyAdapter +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +import kotlinx.android.parcel.Parcelize +// ^^^^^^^ reference kotlinx/ +// ^^^^^^^ reference kotlinx/android/ +// ^^^^^^ reference kotlinx/android/parcel/ +// ^^^^^^^^^ reference kotlinx/android/parcel/Parcelize# + +/** + * Adds sticky headers capabilities to your [RecyclerView.Adapter]. + * The adapter / controller must override [StickyHeaderCallbacks.isStickyHeader] to + * indicate which items are sticky. + * + * Example usage: + * ``` + * class StickyHeaderController() : EpoxyController() { + * override fun isStickyHeader(position: Int) { + * // Write your logic to tell which item is sticky. + * } + * } + * ``` + */ +class StickyHeaderLinearLayoutManager @JvmOverloads constructor( +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# +// ^^^^^^^^^^^^ reference kotlin/jvm/JvmOverloads#``(). +// ^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#``(). + context: Context, +// ^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#``().(context) + orientation: Int = RecyclerView.VERTICAL, +// ^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#``().(orientation) +// ^^^ reference kotlin/Int# + reverseLayout: Boolean = false +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#``().(reverseLayout) +// ^^^^^^^ reference kotlin/Boolean# +) : LinearLayoutManager(context, orientation, reverseLayout) { +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#``().(context) +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#``().(orientation) +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#``().(reverseLayout) + + private var adapter: BaseEpoxyAdapter? = null +// ^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). + + // Translation for header + private var translationX: Float = 0f +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationX. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationX(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationX(). +// ^^^^^ reference kotlin/Float# + private var translationY: Float = 0f +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationY. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationY(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationY(). +// ^^^^^ reference kotlin/Float# + + // Header positions for the currently displayed list and their observer. + private val headerPositions = mutableListOf() +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^^^^^^^^ reference kotlin/collections/CollectionsKt#mutableListOf(). +// ^^^ reference kotlin/Int# + private val headerPositionsObserver = HeaderPositionsAdapterDataObserver() +// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositionsObserver. +// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositionsObserver(). +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#``(). + + // Sticky header's ViewHolder and dirty state. + private var stickyHeader: View? = null +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). + private var stickyHeaderPosition = RecyclerView.NO_POSITION +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeaderPosition. +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeaderPosition(). +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderPosition(). + + // Save / Restore scroll state + private var scrollPosition = RecyclerView.NO_POSITION +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollPosition. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollPosition(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollPosition(). + private var scrollOffset = 0 +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollOffset. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollOffset(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollOffset(). + + override fun onAttachedToWindow(recyclerView: RecyclerView) { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAttachedToWindow(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAttachedToWindow().(recyclerView) + super.onAttachedToWindow(recyclerView) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAttachedToWindow().(recyclerView) + setAdapter(recyclerView.adapter) +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAttachedToWindow().(recyclerView) + } + + override fun onAdapterChanged(oldAdapter: RecyclerView.Adapter<*>?, newAdapter: RecyclerView.Adapter<*>?) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAdapterChanged(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAdapterChanged().(oldAdapter) +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAdapterChanged().(newAdapter) + super.onAdapterChanged(oldAdapter, newAdapter) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAdapterChanged().(oldAdapter) +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAdapterChanged().(newAdapter) + setAdapter(newAdapter) +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onAdapterChanged().(newAdapter) + } + + @Suppress("UNCHECKED_CAST") +// ^^^^^^^^ reference kotlin/Suppress#``(). + private fun setAdapter(newAdapter: RecyclerView.Adapter<*>?) { +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter().(newAdapter) + adapter?.unregisterAdapterDataObserver(headerPositionsObserver) +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositionsObserver. +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositionsObserver(). + if (newAdapter is BaseEpoxyAdapter) { +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter().(newAdapter) + adapter = newAdapter +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter().(newAdapter) + adapter?.registerAdapterDataObserver(headerPositionsObserver) +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositionsObserver. +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositionsObserver(). + headerPositionsObserver.onChanged() +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositionsObserver. +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositionsObserver(). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onChanged(). + } else { + adapter = null +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). + headerPositions.clear() +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^ reference kotlin/collections/MutableList#clear(). + } + } + + override fun onSaveInstanceState(): Parcelable { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onSaveInstanceState(). + return SavedState( +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#``(). + superState = super.onSaveInstanceState(), +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#``().(superState) +// ^^^^^ reference kotlin/Any# + scrollPosition = scrollPosition, +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#``().(scrollPosition) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollPosition. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollPosition(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollPosition(). + scrollOffset = scrollOffset +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#``().(scrollOffset) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollOffset. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollOffset(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollOffset(). + ) + } + + override fun onRestoreInstanceState(state: Parcelable?) { +// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onRestoreInstanceState(). +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onRestoreInstanceState().(state) + (state as? SavedState)?.let { +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onRestoreInstanceState().(state) +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState# +// ^^^ reference kotlin/StandardKt#let(). + scrollPosition = it.scrollPosition +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollPosition. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollPosition(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollPosition(). +// ^^ reference local0 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#scrollPosition. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#getScrollPosition(). + scrollOffset = it.scrollOffset +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollOffset. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollOffset(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollOffset(). +// ^^ reference local0 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#scrollOffset. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#getScrollOffset(). + super.onRestoreInstanceState(it.superState) +// ^^^^^ reference kotlin/Any# +// ^^ reference local0 +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#superState. +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#getSuperState(). + } + } + + override fun scrollVerticallyBy(dy: Int, recycler: RecyclerView.Recycler, state: RecyclerView.State?): Int { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollVerticallyBy(). +// ^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollVerticallyBy().(dy) +// ^^^ reference kotlin/Int# +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollVerticallyBy().(recycler) +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollVerticallyBy().(state) +// ^^^ reference kotlin/Int# + val scrolled = restoreView { super.scrollVerticallyBy(dy, recycler, state) } +// ^^^^^^^^ definition local1 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollVerticallyBy().(dy) +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollVerticallyBy().(recycler) +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollVerticallyBy().(state) + if (scrolled != 0) { +// ^^^^^^^^ reference local1 +// ^^ reference kotlin/Unit#equals(). + updateStickyHeader(recycler, false) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollVerticallyBy().(recycler) + } + return scrolled +// ^^^^^^^^ reference local1 + } + + override fun scrollHorizontallyBy(dx: Int, recycler: RecyclerView.Recycler, state: RecyclerView.State?): Int { +// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollHorizontallyBy(). +// ^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollHorizontallyBy().(dx) +// ^^^ reference kotlin/Int# +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollHorizontallyBy().(recycler) +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollHorizontallyBy().(state) +// ^^^ reference kotlin/Int# + val scrolled = restoreView { super.scrollHorizontallyBy(dx, recycler, state) } +// ^^^^^^^^ definition local2 +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollHorizontallyBy().(dx) +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollHorizontallyBy().(recycler) +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollHorizontallyBy().(state) + if (scrolled != 0) { +// ^^^^^^^^ reference local2 +// ^^ reference kotlin/Unit#equals(). + updateStickyHeader(recycler, false) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollHorizontallyBy().(recycler) + } + return scrolled +// ^^^^^^^^ reference local2 + } + + override fun onLayoutChildren(recycler: RecyclerView.Recycler, state: RecyclerView.State) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onLayoutChildren(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onLayoutChildren().(recycler) +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onLayoutChildren().(state) + restoreView { super.onLayoutChildren(recycler, state) } +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onLayoutChildren().(recycler) +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onLayoutChildren().(state) + if (!state.isPreLayout) { +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onLayoutChildren().(state) + updateStickyHeader(recycler, true) +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onLayoutChildren().(recycler) + } + } + + override fun scrollToPosition(position: Int) = scrollToPositionWithOffset(position, INVALID_OFFSET) +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPosition(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPosition().(position) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPosition().(position) + + override fun scrollToPositionWithOffset(position: Int, offset: Int) = scrollToPositionWithOffset(position, offset, true) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset().(position) +// ^^^ reference kotlin/Int# +// ^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset().(offset) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset().(position) +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset().(offset) + + private fun scrollToPositionWithOffset(position: Int, offset: Int, adjustForStickyHeader: Boolean) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^^^ reference kotlin/Int# +// ^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(offset) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(adjustForStickyHeader) +// ^^^^^^^ reference kotlin/Boolean# + // Reset pending scroll. + setScrollState(RecyclerView.NO_POSITION, INVALID_OFFSET) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollState(). + + // Adjusting is disabled. + if (!adjustForStickyHeader) { +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(adjustForStickyHeader) + super.scrollToPositionWithOffset(position, offset) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(offset) + return + } + + // There is no header above or the position is a header. + val headerIndex = findHeaderIndexOrBefore(position) +// ^^^^^^^^^^^ definition local3 +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrBefore(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) + if (headerIndex == -1 || findHeaderIndex(position) != -1) { +// ^^^^^^^^^^^ reference local3 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndex(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). + super.scrollToPositionWithOffset(position, offset) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(offset) + return + } + + // The position is right below a header, scroll to the header. + if (findHeaderIndex(position - 1) != -1) { +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndex(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^ reference kotlin/Int#minus(+3). +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). + super.scrollToPositionWithOffset(position - 1, offset) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(offset) + return + } + + // Current sticky header is the same as at the position. Adjust the scroll offset and reset pending scroll. + if (stickyHeader != null && headerIndex == findHeaderIndex(stickyHeaderPosition)) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^^^^^^^^ reference local3 +// ^^ reference kotlin/Int#equals(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndex(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeaderPosition. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeaderPosition(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderPosition(). + val adjustedOffset = (if (offset != INVALID_OFFSET) offset else 0) + stickyHeader!!.height +// ^^^^^^^^^^^^^^ definition local4 +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(offset) +// ^^ reference kotlin/Int#equals(). +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(offset) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). + super.scrollToPositionWithOffset(position, adjustedOffset) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^^^^^^^^^^^^^^ reference local4 + return + } + + // Remember this position and offset and scroll to it to trigger creating the sticky header. + setScrollState(position, offset) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollState(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(offset) + super.scrollToPositionWithOffset(position, offset) +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(position) +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(+1).(offset) + } + + //region Computation + // Mainly [RecyclerView] functionality by removing sticky header from calculations + + override fun computeVerticalScrollExtent(state: RecyclerView.State): Int = restoreView { super.computeVerticalScrollExtent(state) } +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollExtent(). +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollExtent().(state) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollExtent().(state) + + override fun computeVerticalScrollOffset(state: RecyclerView.State): Int = restoreView { super.computeVerticalScrollOffset(state) } +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollOffset(). +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollOffset().(state) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollOffset().(state) + + override fun computeVerticalScrollRange(state: RecyclerView.State): Int = restoreView { super.computeVerticalScrollRange(state) } +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollRange(). +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollRange().(state) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeVerticalScrollRange().(state) + + override fun computeHorizontalScrollExtent(state: RecyclerView.State): Int = restoreView { super.computeHorizontalScrollExtent(state) } +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollExtent(). +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollExtent().(state) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollExtent().(state) + + override fun computeHorizontalScrollOffset(state: RecyclerView.State): Int = restoreView { super.computeHorizontalScrollOffset(state) } +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollOffset(). +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollOffset().(state) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollOffset().(state) + + override fun computeHorizontalScrollRange(state: RecyclerView.State): Int = restoreView { super.computeHorizontalScrollRange(state) } +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollRange(). +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollRange().(state) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeHorizontalScrollRange().(state) + + override fun computeScrollVectorForPosition(targetPosition: Int): PointF? = restoreView { super.computeScrollVectorForPosition(targetPosition) } +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeScrollVectorForPosition(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeScrollVectorForPosition().(targetPosition) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#computeScrollVectorForPosition().(targetPosition) + + override fun onFocusSearchFailed( +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed(). + focused: View, +// ^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed().(focused) + focusDirection: Int, +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed().(focusDirection) +// ^^^ reference kotlin/Int# + recycler: RecyclerView.Recycler, +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed().(recycler) + state: RecyclerView.State +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed().(state) + ): View? = restoreView { super.onFocusSearchFailed(focused, focusDirection, recycler, state) } +// ^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^ reference kotlin/Any# +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed().(focused) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed().(focusDirection) +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed().(recycler) +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#onFocusSearchFailed().(state) + + /** + * Perform the [operation] without the sticky header view by + * detaching the view -> performing operation -> detaching the view. + */ + private fun restoreView(operation: () -> T): T { +// ^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView().[T] +// ^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView(). +// ^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView().(operation) +// ^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView().[T] +// ^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView().[T] + stickyHeader?.let(this::detachView) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# + val result = operation() +// ^^^^^^ definition local5 +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#restoreView().(operation) + stickyHeader?.let(this::attachView) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# + return result +// ^^^^^^ reference local5 + } + + //endregion + + /** + * Offsets the vertical location of the sticky header relative to the its default position. + */ + fun setStickyHeaderTranslationY(translationY: Float) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderTranslationY(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderTranslationY().(translationY) +// ^^^^^ reference kotlin/Float# + this.translationY = translationY +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationY. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationY(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationY(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderTranslationY().(translationY) + requestLayout() + } + + /** + * Offsets the horizontal location of the sticky header relative to the its default position. + */ + fun setStickyHeaderTranslationX(translationX: Float) { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderTranslationX(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderTranslationX().(translationX) +// ^^^^^ reference kotlin/Float# + this.translationX = translationX +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationX. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationX(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationX(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderTranslationX().(translationX) + requestLayout() + } + + /** + * Returns true if `view` is the current sticky header. + */ + fun isStickyHeader(view: View): Boolean = view === stickyHeader +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isStickyHeader(). +// ^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isStickyHeader().(view) +// ^^^^^^^ reference kotlin/Boolean# +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isStickyHeader().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). + + /** + * Updates the sticky header state (creation, binding, display), to be called whenever there's a layout or scroll + */ + private fun updateStickyHeader(recycler: RecyclerView.Recycler, layout: Boolean) { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader().(recycler) +// ^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader().(layout) +// ^^^^^^^ reference kotlin/Boolean# + val headerCount = headerPositions.size +// ^^^^^^^^^^^ definition local6 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^ reference kotlin/collections/MutableList#size. +// ^^^^ reference kotlin/collections/MutableList#getSize(). + val childCount = childCount +// ^^^^^^^^^^ definition local7 + if (headerCount > 0 && childCount > 0) { +// ^^^^^^^^^^^ reference local6 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^ reference local7 + // Find first valid child. + var anchorView: View? = null +// ^^^^^^^^^^ definition local8 + var anchorIndex = -1 +// ^^^^^^^^^^^ definition local9 +// ^ reference kotlin/Int#unaryMinus(). + var anchorPos = -1 +// ^^^^^^^^^ definition local10 +// ^ reference kotlin/Int#unaryMinus(). + for (i in 0 until childCount) { +// ^ definition local11 +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^^ reference local7 + val child = getChildAt(i) +// ^^^^^ definition local12 +// ^ reference local11 + val params = child!!.layoutParams as RecyclerView.LayoutParams +// ^^^^^^ definition local13 +// ^^^^^ reference local12 + if (isViewValidAnchor(child, params)) { +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor(). +// ^^^^^ reference local12 +// ^^^^^^ reference local13 + anchorView = child +// ^^^^^^^^^^ reference local8 +// ^^^^^ reference local12 + anchorIndex = i +// ^^^^^^^^^^^ reference local9 +// ^ reference local11 + anchorPos = params.viewAdapterPosition +// ^^^^^^^^^ reference local10 +// ^^^^^^ reference local13 + break + } + } + if (anchorView != null && anchorPos != -1) { +// ^^^^^^^^^^ reference local8 +// ^^^^^^^^^ reference local10 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). + val headerIndex = findHeaderIndexOrBefore(anchorPos) +// ^^^^^^^^^^^ definition local14 +// ^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrBefore(). +// ^^^^^^^^^ reference local10 + val headerPos = if (headerIndex != -1) headerPositions[headerIndex] else -1 +// ^^^^^^^^^ definition local15 +// ^^^^^^^^^^^ reference local14 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^^^^^^ reference local14 +// ^ reference kotlin/Int#unaryMinus(). + val nextHeaderPos = if (headerCount > headerIndex + 1) headerPositions[headerIndex + 1] else -1 +// ^^^^^^^^^^^^^ definition local16 +// ^^^^^^^^^^^ reference local6 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^ reference local14 +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^^^^^^ reference local14 +// ^ reference kotlin/Int#plus(+3). +// ^ reference kotlin/Int#unaryMinus(). + + // Show sticky header if: + // - There's one to show; + // - It's on the edge or it's not the anchor view; + // - Isn't followed by another sticky header; + if (headerPos != -1 && +// ^^^^^^^^^ reference local15 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). + (headerPos != anchorPos || isViewOnBoundary(anchorView)) && +// ^^^^^^^^^ reference local15 +// ^^ reference kotlin/Int#equals(). +// ^^^^^^^^^ reference local10 +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary(). +// ^^^^^^^^^^ reference local8 + nextHeaderPos != headerPos + 1 +// ^^^^^^^^^^^^^ reference local16 +// ^^ reference kotlin/Int#equals(). +// ^^^^^^^^^ reference local15 +// ^ reference kotlin/Int#plus(+3). + ) { + // 1. Ensure existing sticky header, if any, is of correct type. + if (stickyHeader != null && getItemViewType(stickyHeader!!) != adapter?.getItemViewType(headerPos)) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^ reference local15 + // A sticky header was shown before but is not of the correct type. Scrap it. + scrapStickyHeader(recycler) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrapStickyHeader(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader().(recycler) + } + + // 2. Ensure sticky header is created, if absent, or bound, if being laid out or the position changed. + if (stickyHeader == null) createStickyHeader(recycler, headerPos) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#createStickyHeader(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader().(recycler) +// ^^^^^^^^^ reference local15 + // 3. Bind the sticky header + if (layout || getPosition(stickyHeader!!) != headerPos) bindStickyHeader(recycler, stickyHeader!!, headerPos) +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader().(layout) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^^^^^^ reference local15 +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader().(recycler) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^^^^^^ reference local15 + + // 4. Draw the sticky header using translation values which depend on orientation, direction and + // position of the next header view. + stickyHeader?.let { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). + val nextHeaderView: View? = if (nextHeaderPos != -1) { +// ^^^^^^^^^^^^^^ definition local17 +// ^^^^^^^^^^^^^ reference local16 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). + val nextHeaderView = getChildAt(anchorIndex + (nextHeaderPos - anchorPos)) +// ^^^^^^^^^^^^^^ definition local18 +// ^^^^^^^^^^^ reference local9 +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^^^^^ reference local16 +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^ reference local10 + // The header view itself is added to the RecyclerView. Discard it if it comes up. + if (nextHeaderView === stickyHeader) null else nextHeaderView +// ^^^^^^^^^^^^^^ reference local18 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^^^^^^^^^^^ reference local18 + } else null + it.translationX = getX(it, nextHeaderView) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX(). +// ^^^^^^^^^^^^^^ reference local17 + it.translationY = getY(it, nextHeaderView) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY(). +// ^^^^^^^^^^^^^^ reference local17 + } + return + } + } + } + + if (stickyHeader != null) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). + scrapStickyHeader(recycler) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrapStickyHeader(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#updateStickyHeader().(recycler) + } + } + + /** + * Creates [RecyclerView.ViewHolder] for [position], including measure / layout, and assigns it to + * [stickyHeader]. + */ + private fun createStickyHeader(recycler: RecyclerView.Recycler, position: Int) { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#createStickyHeader(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#createStickyHeader().(recycler) +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#createStickyHeader().(position) +// ^^^ reference kotlin/Int# + val stickyHeader = recycler.getViewForPosition(position) +// ^^^^^^^^^^^^ definition local19 +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#createStickyHeader().(recycler) +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#createStickyHeader().(position) + + // Setup sticky header if the adapter requires it. + adapter?.setupStickyHeaderView(stickyHeader) +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^^^^ reference local19 + + // Add sticky header as a child view, to be detached / reattached whenever LinearLayoutManager#fill() is called, + // which happens on layout and scroll (see overrides). + addView(stickyHeader) +// ^^^^^^^^^^^^ reference local19 + measureAndLayout(stickyHeader) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout(). +// ^^^^^^^^^^^^ reference local19 + + // Ignore sticky header, as it's fully managed by this LayoutManager. + ignoreView(stickyHeader) +// ^^^^^^^^^^^^ reference local19 + + this.stickyHeader = stickyHeader +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^^^^^^^^^^^^ reference local19 + this.stickyHeaderPosition = position +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeaderPosition. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeaderPosition(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderPosition(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#createStickyHeader().(position) + } + + /** + * Binds the [stickyHeader] for the given [position]. + */ + private fun bindStickyHeader(recycler: RecyclerView.Recycler, stickyHeader: View, position: Int) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(recycler) +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(stickyHeader) +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(position) +// ^^^ reference kotlin/Int# + // Bind the sticky header. + recycler.bindViewToPosition(stickyHeader, position) +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(recycler) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(stickyHeader) +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(position) + stickyHeaderPosition = position +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeaderPosition. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeaderPosition(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderPosition(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(position) + measureAndLayout(stickyHeader) +// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(stickyHeader) + + // If we have a pending scroll wait until the end of layout and scroll again. + if (scrollPosition != RecyclerView.NO_POSITION) { +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollPosition. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollPosition(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollPosition(). + stickyHeader.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(stickyHeader) + override fun onGlobalLayout() { +// ^^^^^^^^^^^^^^ definition local20 + if (Build.VERSION.SDK_INT < 16) stickyHeader.viewTreeObserver.removeGlobalOnLayoutListener(this) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(stickyHeader) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().``# + else stickyHeader.viewTreeObserver.removeOnGlobalLayoutListener(this) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().(stickyHeader) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#bindStickyHeader().``# + if (scrollPosition != RecyclerView.NO_POSITION) { +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollPosition. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollPosition(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollPosition(). + scrollToPositionWithOffset(scrollPosition, scrollOffset) +// ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollToPositionWithOffset(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollPosition. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollPosition(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollPosition(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollOffset. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollOffset(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollOffset(). + setScrollState(RecyclerView.NO_POSITION, INVALID_OFFSET) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollState(). + } + } + }) + } + } + + /** + * Measures and lays out [stickyHeader]. + */ + private fun measureAndLayout(stickyHeader: View) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout().(stickyHeader) + measureChildWithMargins(stickyHeader, 0, 0) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout().(stickyHeader) + when (orientation) { + VERTICAL -> stickyHeader.layout(paddingLeft, 0, width - paddingRight, stickyHeader.measuredHeight) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout().(stickyHeader) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout().(stickyHeader) + else -> stickyHeader.layout(0, paddingTop, stickyHeader.measuredWidth, height - paddingBottom) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout().(stickyHeader) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#measureAndLayout().(stickyHeader) + } + } + + /** + * Returns [stickyHeader] to the [RecyclerView]'s [RecyclerView.RecycledViewPool], assigning it + * to `null`. + * + * @param recycler If passed, the sticky header will be returned to the recycled view pool. + */ + private fun scrapStickyHeader(recycler: RecyclerView.Recycler?) { +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrapStickyHeader(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrapStickyHeader().(recycler) + val stickyHeader = stickyHeader ?: return +// ^^^^^^^^^^^^ definition local21 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). + this.stickyHeader = null +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). + this.stickyHeaderPosition = RecyclerView.NO_POSITION +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager# +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeaderPosition. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeaderPosition(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderPosition(). + + // Revert translation values. + stickyHeader.translationX = 0f +// ^^^^^^^^^^^^ reference local21 + stickyHeader.translationY = 0f +// ^^^^^^^^^^^^ reference local21 + + // Teardown holder if the adapter requires it. + adapter?.teardownStickyHeaderView(stickyHeader) +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^^^^^^^^^^^^ reference local21 + + // Stop ignoring sticky header so that it can be recycled. + stopIgnoringView(stickyHeader) +// ^^^^^^^^^^^^ reference local21 + + // Remove and recycle sticky header. + removeView(stickyHeader) +// ^^^^^^^^^^^^ reference local21 + recycler?.recycleView(stickyHeader) +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrapStickyHeader().(recycler) +// ^^^^^^^^^^^^ reference local21 + } + + /** + * Returns true when `view` is a valid anchor, ie. the first view to be valid and visible. + */ + private fun isViewValidAnchor(view: View, params: RecyclerView.LayoutParams): Boolean { +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor(). +// ^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(params) +// ^^^^^^^ reference kotlin/Boolean# + return when { + !params.isItemRemoved && !params.isViewInvalid -> when (orientation) { +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(params) +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(params) + VERTICAL -> when { + reverseLayout -> view.top + view.translationY <= height + translationY +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationY. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationY(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationY(). + else -> view.bottom - view.translationY >= translationY +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationY. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationY(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationY(). + } + else -> when { + reverseLayout -> view.left + view.translationX <= width + translationX +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationX. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationX(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationX(). + else -> view.right - view.translationX >= translationX +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewValidAnchor().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationX. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationX(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationX(). + } + } + else -> false + } + } + + /** + * Returns true when the `view` is at the edge of the parent [RecyclerView]. + */ + private fun isViewOnBoundary(view: View): Boolean { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary(). +// ^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^^^^ reference kotlin/Boolean# + return when (orientation) { + VERTICAL -> when { + reverseLayout -> view.bottom - view.translationY > height + translationY +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationY. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationY(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationY(). + else -> view.top + view.translationY < translationY +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationY. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationY(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationY(). + } + else -> when { + reverseLayout -> view.right - view.translationX > width + translationX +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationX. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationX(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationX(). + else -> view.left + view.translationX < translationX +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#isViewOnBoundary().(view) +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationX. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationX(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationX(). + } + } + } + + /** + * Returns the position in the Y axis to position the header appropriately, depending on orientation, direction and + * [android.R.attr.clipToPadding]. + */ + private fun getY(headerView: View, nextHeaderView: View?): Float { +// ^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(headerView) +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(nextHeaderView) +// ^^^^^ reference kotlin/Float# + when (orientation) { + VERTICAL -> { + var y = translationY +// ^ definition local22 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationY. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationY(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationY(). + if (reverseLayout) { + y += (height - headerView.height).toFloat() +// ^ reference local22 +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(headerView) + } + if (nextHeaderView != null) { +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(nextHeaderView) + val bottomMargin = (nextHeaderView.layoutParams as? ViewGroup.MarginLayoutParams)?.bottomMargin ?: 0 +// ^^^^^^^^^^^^ definition local23 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(nextHeaderView) + val topMargin = (nextHeaderView.layoutParams as? ViewGroup.MarginLayoutParams)?.topMargin ?: 0 +// ^^^^^^^^^ definition local24 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(nextHeaderView) + y = when { +// ^ reference local22 + reverseLayout -> (nextHeaderView.bottom + bottomMargin).toFloat().coerceAtLeast(y) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(nextHeaderView) +// ^^^^^^^^^^^^ reference local23 +// ^ reference local22 + else -> (nextHeaderView.top - topMargin - headerView.height).toFloat().coerceAtMost(y) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(nextHeaderView) +// ^^^^^^^^^ reference local24 +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getY().(headerView) +// ^ reference local22 + } + } + return y +// ^ reference local22 + } + else -> return translationY +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationY. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationY(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationY(). + } + } + + /** + * Returns the position in the X axis to position the header appropriately, depending on orientation, direction and + * [android.R.attr.clipToPadding]. + */ + private fun getX(headerView: View, nextHeaderView: View?): Float { +// ^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(headerView) +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(nextHeaderView) +// ^^^^^ reference kotlin/Float# + when (orientation) { + HORIZONTAL -> { + var x = translationX +// ^ definition local25 +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationX. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationX(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationX(). + if (reverseLayout) { + x += (width - headerView.width).toFloat() +// ^ reference local25 +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(headerView) + } + if (nextHeaderView != null) { +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(nextHeaderView) + val leftMargin = (nextHeaderView.layoutParams as? ViewGroup.MarginLayoutParams)?.leftMargin ?: 0 +// ^^^^^^^^^^ definition local26 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(nextHeaderView) + val rightMargin = (nextHeaderView.layoutParams as? ViewGroup.MarginLayoutParams)?.rightMargin ?: 0 +// ^^^^^^^^^^^ definition local27 +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(nextHeaderView) + x = when { +// ^ reference local25 + reverseLayout -> (nextHeaderView.right + rightMargin).toFloat().coerceAtLeast(x) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(nextHeaderView) +// ^^^^^^^^^^^ reference local27 +// ^ reference local25 + else -> (nextHeaderView.left - leftMargin - headerView.width).toFloat().coerceAtMost(x) +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(nextHeaderView) +// ^^^^^^^^^^ reference local26 +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getX().(headerView) +// ^ reference local25 + } + } + return x +// ^ reference local25 + } + else -> return translationX +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#translationX. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getTranslationX(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setTranslationX(). + } + } + + /** + * Finds the header index of `position` in `headerPositions`. + */ + private fun findHeaderIndex(position: Int): Int { +// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndex(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndex().(position) +// ^^^ reference kotlin/Int# +// ^^^ reference kotlin/Int# + var low = 0 +// ^^^ definition local28 + var high = headerPositions.size - 1 +// ^^^^ definition local29 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^ reference kotlin/collections/MutableList#size. +// ^^^^ reference kotlin/collections/MutableList#getSize(). +// ^ reference kotlin/Int#minus(+3). + while (low <= high) { +// ^^^ reference local28 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^ reference local29 + val middle = (low + high) / 2 +// ^^^^^^ definition local30 +// ^^^ reference local28 +// ^ reference kotlin/Int#plus(+3). +// ^^^^ reference local29 +// ^ reference kotlin/Int#div(+3). + when { + headerPositions[middle] > position -> high = middle - 1 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^ reference local30 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndex().(position) +// ^^^^ reference local29 +// ^^^^^^ reference local30 +// ^ reference kotlin/Int#minus(+3). + headerPositions[middle] < position -> low = middle + 1 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^ reference local30 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndex().(position) +// ^^^ reference local28 +// ^^^^^^ reference local30 +// ^ reference kotlin/Int#plus(+3). + else -> return middle +// ^^^^^^ reference local30 + } + } + return -1 +// ^ reference kotlin/Int#unaryMinus(). + } + + /** + * Finds the header index of `position` or the one before it in `headerPositions`. + */ + private fun findHeaderIndexOrBefore(position: Int): Int { +// ^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrBefore(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrBefore().(position) +// ^^^ reference kotlin/Int# +// ^^^ reference kotlin/Int# + var low = 0 +// ^^^ definition local31 + var high = headerPositions.size - 1 +// ^^^^ definition local32 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^ reference kotlin/collections/MutableList#size. +// ^^^^ reference kotlin/collections/MutableList#getSize(). +// ^ reference kotlin/Int#minus(+3). + while (low <= high) { +// ^^^ reference local31 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^ reference local32 + val middle = (low + high) / 2 +// ^^^^^^ definition local33 +// ^^^ reference local31 +// ^ reference kotlin/Int#plus(+3). +// ^^^^ reference local32 +// ^ reference kotlin/Int#div(+3). + when { + headerPositions[middle] > position -> high = middle - 1 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^ reference local33 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrBefore().(position) +// ^^^^ reference local32 +// ^^^^^^ reference local33 +// ^ reference kotlin/Int#minus(+3). + middle < headerPositions.size - 1 && headerPositions[middle + 1] <= position -> low = middle + 1 +// ^^^^^^ reference local33 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^ reference kotlin/collections/MutableList#size. +// ^^^^ reference kotlin/collections/MutableList#getSize(). +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^ reference local33 +// ^ reference kotlin/Int#plus(+3). +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrBefore().(position) +// ^^^ reference local31 +// ^^^^^^ reference local33 +// ^ reference kotlin/Int#plus(+3). + else -> return middle +// ^^^^^^ reference local33 + } + } + return -1 +// ^ reference kotlin/Int#unaryMinus(). + } + + /** + * Finds the header index of `position` or the one next to it in `headerPositions`. + */ + private fun findHeaderIndexOrNext(position: Int): Int { +// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext().(position) +// ^^^ reference kotlin/Int# +// ^^^ reference kotlin/Int# + var low = 0 +// ^^^ definition local34 + var high = headerPositions.size - 1 +// ^^^^ definition local35 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^ reference kotlin/collections/MutableList#size. +// ^^^^ reference kotlin/collections/MutableList#getSize(). +// ^ reference kotlin/Int#minus(+3). + while (low <= high) { +// ^^^ reference local34 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^ reference local35 + val middle = (low + high) / 2 +// ^^^^^^ definition local36 +// ^^^ reference local34 +// ^ reference kotlin/Int#plus(+3). +// ^^^^ reference local35 +// ^ reference kotlin/Int#div(+3). + when { + middle > 0 && headerPositions[middle - 1] >= position -> high = middle - 1 +// ^^^^^^ reference local36 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^ reference local36 +// ^ reference kotlin/Int#minus(+3). +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext().(position) +// ^^^^ reference local35 +// ^^^^^^ reference local36 +// ^ reference kotlin/Int#minus(+3). + headerPositions[middle] < position -> low = middle + 1 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^ reference local36 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext().(position) +// ^^^ reference local34 +// ^^^^^^ reference local36 +// ^ reference kotlin/Int#plus(+3). + else -> return middle +// ^^^^^^ reference local36 + } + } + return -1 +// ^ reference kotlin/Int#unaryMinus(). + } + + private fun setScrollState(position: Int, offset: Int) { +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollState(). +// ^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollState().(position) +// ^^^ reference kotlin/Int# +// ^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollState().(offset) +// ^^^ reference kotlin/Int# + scrollPosition = position +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollPosition. +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollPosition(). +// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollPosition(). +// ^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollState().(position) + scrollOffset = offset +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrollOffset. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getScrollOffset(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollOffset(). +// ^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setScrollState().(offset) + } + + /** + * Save / restore existing [RecyclerView] state and + * scrolling position and offset. + */ + @Parcelize +// ^^^^^^^^^ reference kotlinx/android/parcel/Parcelize#``(). + data class SavedState( +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState# +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#``(). + val superState: Parcelable?, +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#superState. +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#getSuperState(). +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#``().(superState) + val scrollPosition: Int, +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#scrollPosition. +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#getScrollPosition(). +// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#``().(scrollPosition) +// ^^^ reference kotlin/Int# + val scrollOffset: Int +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#scrollOffset. +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#getScrollOffset(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#SavedState#``().(scrollOffset) +// ^^^ reference kotlin/Int# + ) : Parcelable + + /** + * Handles header positions while adapter changes occur. + * + * This is used in detriment of [RecyclerView.LayoutManager]'s callbacks to control when they're received. + */ + private inner class HeaderPositionsAdapterDataObserver : RecyclerView.AdapterDataObserver() { +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver# +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#``(). + override fun onChanged() { +// ^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onChanged(). + // There's no hint at what changed, so go through the adapter. + headerPositions.clear() +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^ reference kotlin/collections/MutableList#clear(). + val itemCount = adapter?.itemCount ?: 0 +// ^^^^^^^^^ definition local37 +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). + for (i in 0 until itemCount) { +// ^ definition local38 +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^ reference local37 + val isSticky = adapter?.isStickyHeader(i) ?: false +// ^^^^^^^^ definition local39 +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^ reference local38 + if (isSticky) { +// ^^^^^^^^ reference local39 + headerPositions.add(i) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^ reference kotlin/collections/MutableList#add(). +// ^ reference local38 + } + } + + // Remove sticky header immediately if the entry it represents has been removed. A layout will follow. + if (stickyHeader != null && !headerPositions.contains(stickyHeaderPosition)) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^^^ reference kotlin/collections/MutableList#contains(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeaderPosition. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeaderPosition(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderPosition(). + scrapStickyHeader(null) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrapStickyHeader(). + } + } + + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { +// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeInserted(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeInserted().(positionStart) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeInserted().(itemCount) +// ^^^ reference kotlin/Int# + // Shift headers below down. + val headerCount = headerPositions.size +// ^^^^^^^^^^^ definition local40 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^ reference kotlin/collections/MutableList#size. +// ^^^^ reference kotlin/collections/MutableList#getSize(). + if (headerCount > 0) { +// ^^^^^^^^^^^ reference local40 +// ^ reference kotlin/Int#compareTo(+3). + var i = findHeaderIndexOrNext(positionStart) +// ^ definition local41 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeInserted().(positionStart) + while (i != -1 && i < headerCount) { +// ^ reference local41 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). +// ^ reference local41 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^ reference local40 + headerPositions[i] = headerPositions[i] + itemCount +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local41 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local41 +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeInserted().(itemCount) + i++ +// ^ reference local41 +// ^^ reference kotlin/Int#inc(). + } + } + + // Add new headers. + for (i in positionStart until positionStart + itemCount) { +// ^ definition local42 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeInserted().(positionStart) +// ^^^^^ reference kotlin/ranges/RangesKt#until(+6). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeInserted().(positionStart) +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeInserted().(itemCount) + val isSticky = adapter?.isStickyHeader(i) ?: false +// ^^^^^^^^ definition local43 +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#adapter. +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getAdapter(). +// ^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setAdapter(). +// ^ reference local42 + if (isSticky) { +// ^^^^^^^^ reference local43 + val headerIndex = findHeaderIndexOrNext(i) +// ^^^^^^^^^^^ definition local44 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext(). +// ^ reference local42 + if (headerIndex != -1) { +// ^^^^^^^^^^^ reference local44 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). + headerPositions.add(headerIndex, i) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^ reference kotlin/collections/MutableList#add(+1). +// ^^^^^^^^^^^ reference local44 +// ^ reference local42 + } else { + headerPositions.add(i) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^ reference kotlin/collections/MutableList#add(). +// ^ reference local42 + } + } + } + } + + override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { +// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved(). +// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved().(positionStart) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved().(itemCount) +// ^^^ reference kotlin/Int# + var headerCount = headerPositions.size +// ^^^^^^^^^^^ definition local45 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^ reference kotlin/collections/MutableList#size. +// ^^^^ reference kotlin/collections/MutableList#getSize(). + if (headerCount > 0) { +// ^^^^^^^^^^^ reference local45 +// ^ reference kotlin/Int#compareTo(+3). + // Remove headers. + for (i in positionStart + itemCount - 1 downTo positionStart) { +// ^ definition local46 +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved().(positionStart) +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved().(itemCount) +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^ reference kotlin/ranges/RangesKt#downTo(+6). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved().(positionStart) + val index = findHeaderIndex(i) +// ^^^^^ definition local47 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndex(). +// ^ reference local46 + if (index != -1) { +// ^^^^^ reference local47 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). + headerPositions.removeAt(index) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^^^ reference kotlin/collections/MutableList#removeAt(). +// ^^^^^ reference local47 + headerCount-- +// ^^^^^^^^^^^ reference local45 +// ^^ reference kotlin/Int#dec(). + } + } + + // Remove sticky header immediately if the entry it represents has been removed. A layout will follow. + if (stickyHeader != null && !headerPositions.contains(stickyHeaderPosition)) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeader. +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeader(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeader(). +// ^ reference kotlin/Boolean#not(). +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^^^ reference kotlin/collections/MutableList#contains(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#stickyHeaderPosition. +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getStickyHeaderPosition(). +// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#setStickyHeaderPosition(). + scrapStickyHeader(null) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#scrapStickyHeader(). + } + + // Shift headers below up. + var i = findHeaderIndexOrNext(positionStart + itemCount) +// ^ definition local48 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext(). +// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved().(positionStart) +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved().(itemCount) + while (i != -1 && i < headerCount) { +// ^ reference local48 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). +// ^ reference local48 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^ reference local45 + headerPositions[i] = headerPositions[i] - itemCount +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local48 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local48 +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeRemoved().(itemCount) + i++ +// ^ reference local48 +// ^^ reference kotlin/Int#inc(). + } + } + } + + override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) { +// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved(). +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(toPosition) +// ^^^ reference kotlin/Int# +// ^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(itemCount) +// ^^^ reference kotlin/Int# + // Shift moved headers by toPosition - fromPosition. + // Shift headers in-between by -itemCount (reverse if upwards). + val headerCount = headerPositions.size +// ^^^^^^^^^^^ definition local49 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^ reference kotlin/collections/MutableList#size. +// ^^^^ reference kotlin/collections/MutableList#getSize(). + if (headerCount > 0) { +// ^^^^^^^^^^^ reference local49 +// ^ reference kotlin/Int#compareTo(+3). + if (fromPosition < toPosition) { +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(toPosition) + var i = findHeaderIndexOrNext(fromPosition) +// ^ definition local50 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext(). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) + while (i != -1 && i < headerCount) { +// ^ reference local50 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). +// ^ reference local50 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^ reference local49 + val headerPos = headerPositions[i] +// ^^^^^^^^^ definition local51 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local50 + if (headerPos >= fromPosition && headerPos < fromPosition + itemCount) { +// ^^^^^^^^^ reference local51 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) +// ^^^^^^^^^ reference local51 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(itemCount) + headerPositions[i] = headerPos - (toPosition - fromPosition) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local50 +// ^^^^^^^^^ reference local51 +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(toPosition) +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) + sortHeaderAtIndex(i) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#sortHeaderAtIndex(). +// ^ reference local50 + } else if (headerPos >= fromPosition + itemCount && headerPos <= toPosition) { +// ^^^^^^^^^ reference local51 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(itemCount) +// ^^^^^^^^^ reference local51 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(toPosition) + headerPositions[i] = headerPos - itemCount +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local50 +// ^^^^^^^^^ reference local51 +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(itemCount) + sortHeaderAtIndex(i) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#sortHeaderAtIndex(). +// ^ reference local50 + } else { + break + } + i++ +// ^ reference local50 +// ^^ reference kotlin/Int#inc(). + } + } else { + var i = findHeaderIndexOrNext(toPosition) +// ^ definition local52 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(toPosition) + loop@ while (i != -1 && i < headerCount) { +// ^ reference local52 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). +// ^ reference local52 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^ reference local49 + val headerPos = headerPositions[i] +// ^^^^^^^^^ definition local53 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local52 + when { + headerPos >= fromPosition && headerPos < fromPosition + itemCount -> { +// ^^^^^^^^^ reference local53 +// ^^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) +// ^^^^^^^^^ reference local53 +// ^ reference kotlin/Int#compareTo(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(itemCount) + headerPositions[i] = headerPos + (toPosition - fromPosition) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local52 +// ^^^^^^^^^ reference local53 +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(toPosition) +// ^ reference kotlin/Int#minus(+3). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) + sortHeaderAtIndex(i) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#sortHeaderAtIndex(). +// ^ reference local52 + } + headerPos in toPosition..fromPosition -> { +// ^^^^^^^^^ reference local53 +// ^^ reference kotlin/ranges/IntRange#contains(). +// ^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(toPosition) +// ^^ reference kotlin/Int#rangeTo(+1). +// ^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(fromPosition) + headerPositions[i] = headerPos + itemCount +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^ reference local52 +// ^^^^^^^^^ reference local53 +// ^ reference kotlin/Int#plus(+3). +// ^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#onItemRangeMoved().(itemCount) + sortHeaderAtIndex(i) +// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#sortHeaderAtIndex(). +// ^ reference local52 + } + else -> break@loop + } + i++ +// ^ reference local52 +// ^^ reference kotlin/Int#inc(). + } + } + } + } + + private fun sortHeaderAtIndex(index: Int) { +// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#sortHeaderAtIndex(). +// ^^^^^ definition com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#sortHeaderAtIndex().(index) +// ^^^ reference kotlin/Int# + val headerPos = headerPositions.removeAt(index) +// ^^^^^^^^^ definition local54 +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^^^^^^ reference kotlin/collections/MutableList#removeAt(). +// ^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#HeaderPositionsAdapterDataObserver#sortHeaderAtIndex().(index) + val headerIndex = findHeaderIndexOrNext(headerPos) +// ^^^^^^^^^^^ definition local55 +// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#findHeaderIndexOrNext(). +// ^^^^^^^^^ reference local54 + if (headerIndex != -1) { +// ^^^^^^^^^^^ reference local55 +// ^^ reference kotlin/Int#equals(). +// ^ reference kotlin/Int#unaryMinus(). + headerPositions.add(headerIndex, headerPos) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^ reference kotlin/collections/MutableList#add(+1). +// ^^^^^^^^^^^ reference local55 +// ^^^^^^^^^ reference local54 + } else { + headerPositions.add(headerPos) +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#headerPositions. +// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/stickyheader/StickyHeaderLinearLayoutManager#getHeaderPositions(). +// ^^^ reference kotlin/collections/MutableList#add(). +// ^^^^^^^^^ reference local54 + } + } + } +} diff --git a/tests/snapshots/src/main/generated/com/airbnb/epoxy/utils/utils.kt b/tests/snapshots/src/main/generated/com/airbnb/epoxy/utils/utils.kt new file mode 100644 index 00000000..479f28d1 --- /dev/null +++ b/tests/snapshots/src/main/generated/com/airbnb/epoxy/utils/utils.kt @@ -0,0 +1,16 @@ +package com.airbnb.epoxy.utils +// ^^^ reference com/ +// ^^^^^^ reference com/airbnb/ +// ^^^^^ reference com/airbnb/epoxy/ +// ^^^^^ reference com/airbnb/epoxy/utils/ + +import android.content.Context +import android.content.pm.ApplicationInfo + +@PublishedApi +//^^^^^^^^^^^ reference kotlin/PublishedApi#``(). +internal val Context.isDebuggable: Boolean +// ^^^^^^^^^^^^ definition com/airbnb/epoxy/utils/utilsKt#isDebuggable. +// ^^^^^^^ reference kotlin/Boolean# + get() = (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE) != 0 +// ^^^ definition com/airbnb/epoxy/utils/utilsKt#getIsDebuggable(). diff --git a/tests/snapshots/src/main/generated/ujson/AstTransformer.scala b/tests/snapshots/src/main/generated/ujson/AstTransformer.scala index 9563be38..4bb890ea 100644 --- a/tests/snapshots/src/main/generated/ujson/AstTransformer.scala +++ b/tests/snapshots/src/main/generated/ujson/AstTransformer.scala @@ -10,108 +10,104 @@ import upickle.core.compat._ // ^^^^^^ reference upickle/core/compat/ trait AstTransformer[I] extends Transformer[I] with JsVisitor[I, I]{ -// ^^^^^^^^^^^^^^ definition ujson/AstTransformer# -// ^ definition ujson/AstTransformer#[I] +// ^^^^^^^^^^^^^^ definition ujson/AstTransformer# trait AstTransformer[I] +// ^ definition ujson/AstTransformer#[I] I // ^^^^^^^^^^^ reference ujson/Transformer# // ^ reference ujson/AstTransformer#[I] // ^^^^^^^^^ reference ujson/JsVisitor# // ^ reference ujson/AstTransformer#[I] // ^ reference ujson/AstTransformer#[I] def apply(t: Readable): I = t.transform(this) -// ^^^^^ definition ujson/AstTransformer#apply(). -// ^ definition ujson/AstTransformer#apply().(t) +// ^^^^^ definition ujson/AstTransformer#apply(). def apply(t: Readable): I +// ^ definition ujson/AstTransformer#apply().(t) t: Readable // ^^^^^^^^ reference ujson/Readable# // ^ reference ujson/AstTransformer#[I] // ^ reference ujson/AstTransformer#apply().(t) // ^^^^^^^^^ reference ujson/Readable#transform(). def transformArray[T](f: Visitor[_, T], items: Iterable[I]) = { -// ^^^^^^^^^^^^^^ definition ujson/AstTransformer#transformArray(). -// ^ definition ujson/AstTransformer#transformArray().[T] -// ^ definition ujson/AstTransformer#transformArray().(f) +// ^^^^^^^^^^^^^^ definition ujson/AstTransformer#transformArray(). def transformArray(f: Visitor[local0, T[, items: Iterable[I]): T +// ^ definition ujson/AstTransformer#transformArray().[T] T +// ^ definition ujson/AstTransformer#transformArray().(f) f: Visitor[local0, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/AstTransformer#transformArray().[T] -// ^^^^^ definition ujson/AstTransformer#transformArray().(items) +// ^^^^^ definition ujson/AstTransformer#transformArray().(items) items: Iterable[I] // ^^^^^^^^ reference scala/package.Iterable# // ^ reference ujson/AstTransformer#[I] val ctx = f.visitArray(items.size, -1).narrow -// ^^^ definition local0 +// ^^^ definition local1 ctx: ArrVisitor[Any, T] // ^ reference ujson/AstTransformer#transformArray().(f) // ^^^^^^^^^^ reference upickle/core/Visitor#visitArray(). // ^^^^^ reference ujson/AstTransformer#transformArray().(items) // ^^^^ reference scala/collection/IterableOnceOps#size(). // ^^^^^^ reference upickle/core/ArrVisitor#narrow(). for(item <- items) ctx.visitValue(transform(item, ctx.subVisitor), -1) -// ^^^^ definition local1 +// ^^^^ definition local2 item: I // ^^^^^ reference ujson/AstTransformer#transformArray().(items) -// ^^^ reference local0 +// ^^^ reference local1 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^ reference ujson/Transformer#transform(). -// ^^^^ reference local1 -// ^^^ reference local0 +// ^^^^ reference local2 +// ^^^ reference local1 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). -// reference scala/collection/IterableOnceOps#foreach(). -// reference local1 ctx.visitEnd(-1) -// ^^^ reference local0 +// ^^^ reference local1 // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). } def transformObject[T](f: Visitor[_, T], items: Iterable[(String, I)]) = { -// ^^^^^^^^^^^^^^^ definition ujson/AstTransformer#transformObject(). -// ^ definition ujson/AstTransformer#transformObject().[T] -// ^ definition ujson/AstTransformer#transformObject().(f) +// ^^^^^^^^^^^^^^^ definition ujson/AstTransformer#transformObject(). def transformObject(f: Visitor[local3, T[, items: Iterable[(String, I)]): T +// ^ definition ujson/AstTransformer#transformObject().[T] T +// ^ definition ujson/AstTransformer#transformObject().(f) f: Visitor[local3, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/AstTransformer#transformObject().[T] -// ^^^^^ definition ujson/AstTransformer#transformObject().(items) +// ^^^^^ definition ujson/AstTransformer#transformObject().(items) items: Iterable[(String, I)] // ^^^^^^^^ reference scala/package.Iterable# // ^^^^^^ reference scala/Predef.String# // ^ reference ujson/AstTransformer#[I] val ctx = f.visitObject(items.size, -1).narrow -// ^^^ definition local3 +// ^^^ definition local4 ctx: ObjVisitor[Any, T] // ^ reference ujson/AstTransformer#transformObject().(f) // ^^^^^^^^^^^ reference upickle/core/Visitor#visitObject(). // ^^^^^ reference ujson/AstTransformer#transformObject().(items) // ^^^^ reference scala/collection/IterableOnceOps#size(). // ^^^^^^ reference upickle/core/ObjVisitor#narrow(). for(kv <- items) { -// ^^ definition local4 +// ^^ definition local5 kv: (String, I) // ^^^^^ reference ujson/AstTransformer#transformObject().(items) val keyVisitor = ctx.visitKey(-1) -// ^^^^^^^^^^ definition local5 -// ^^^ reference local3 +// ^^^^^^^^^^ definition local6 keyVisitor: Visitor[local7, Any[ +// ^^^ reference local4 // ^^^^^^^^ reference upickle/core/ObjVisitor#visitKey(). ctx.visitKeyValue(keyVisitor.visitString(kv._1, -1)) -// ^^^ reference local3 +// ^^^ reference local4 // ^^^^^^^^^^^^^ reference upickle/core/ObjVisitor#visitKeyValue(). -// ^^^^^^^^^^ reference local5 +// ^^^^^^^^^^ reference local6 // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). -// ^^ reference local4 +// ^^ reference local5 // ^^ reference scala/Tuple2#_1. ctx.visitValue(transform(kv._2, ctx.subVisitor), -1) -// ^^^ reference local3 +// ^^^ reference local4 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^ reference ujson/Transformer#transform(). -// ^^ reference local4 +// ^^ reference local5 // ^^ reference scala/Tuple2#_2. -// ^^^ reference local3 +// ^^^ reference local4 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). } -// reference scala/collection/IterableOnceOps#foreach(). -// reference local4 ctx.visitEnd(-1) -// ^^^ reference local3 +// ^^^ reference local4 // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). } class AstObjVisitor[T](build: T => I) -// ^^^^^^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor# -// ^ definition ujson/AstTransformer#AstObjVisitor#[T] -// definition ujson/AstTransformer#AstObjVisitor#``(). -// ^^^^^ definition ujson/AstTransformer#AstObjVisitor#build. +// ^^^^^^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor# class AstObjVisitor[T] +// ^ definition ujson/AstTransformer#AstObjVisitor#[T] T +// definition ujson/AstTransformer#AstObjVisitor#``(). def this(build: (T) => I)(factory: Factory[(String, I), T]) +// ^^^^^ definition ujson/AstTransformer#AstObjVisitor#build. private[this] val build: (T) => I // ^ reference ujson/AstTransformer#AstObjVisitor#[T] // ^ reference ujson/AstTransformer#[I] (implicit factory: Factory[(String, I), T])extends ObjVisitor[I, I] { -// ^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#factory. +// ^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#factory. private[this] implicit val factory: Factory[(String, I), T] // ^^^^^^^ reference upickle/core/compat/package.Factory# // ^^^^^^ reference scala/Predef.String# // ^ reference ujson/AstTransformer#[I] @@ -122,25 +118,25 @@ trait AstTransformer[I] extends Transformer[I] with JsVisitor[I, I]{ // reference java/lang/Object#``(). private[this] var key: String = null -// ^^^ definition ujson/AstTransformer#AstObjVisitor#key(). +// ^^^ definition ujson/AstTransformer#AstObjVisitor#key(). private[this] var key: String // ^^^^^^ reference scala/Predef.String# private[this] val vs = factory.newBuilder -// ^^ definition ujson/AstTransformer#AstObjVisitor#vs. +// ^^ definition ujson/AstTransformer#AstObjVisitor#vs. private[this] val vs: Builder[(String, I), T] // ^^^^^^^ reference ujson/AstTransformer#AstObjVisitor#factory. // ^^^^^^^^^^ reference scala/collection/Factory#newBuilder(). def subVisitor = AstTransformer.this -// ^^^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#subVisitor(). +// ^^^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#subVisitor(). def subVisitor: AstTransformer[I] // ^^^^^^^^^^^^^^ reference ujson/AstTransformer# def visitKey(index: Int) = upickle.core.StringVisitor -// ^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitKey(). -// ^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitKey().(index) +// ^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitKey(). def visitKey(index: Int): StringVisitor +// ^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitKey().(index) index: Int // ^^^ reference scala/Int# // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^^^ reference upickle/core/StringVisitor. def visitKeyValue(s: Any): Unit = key = s.toString -// ^^^^^^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitKeyValue(). -// ^ definition ujson/AstTransformer#AstObjVisitor#visitKeyValue().(s) +// ^^^^^^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitKeyValue(). def visitKeyValue(s: Any): Unit +// ^ definition ujson/AstTransformer#AstObjVisitor#visitKeyValue().(s) s: Any // ^^^ reference scala/Any# // ^^^^ reference scala/Unit# // ^^^ reference ujson/AstTransformer#AstObjVisitor#key(). @@ -148,39 +144,36 @@ trait AstTransformer[I] extends Transformer[I] with JsVisitor[I, I]{ // ^^^^^^^^ reference scala/Any#toString(). def visitValue(v: I, index: Int): Unit = vs += (key -> v) -// ^^^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitValue(). -// ^ definition ujson/AstTransformer#AstObjVisitor#visitValue().(v) +// ^^^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitValue(). def visitValue(v: I, index: Int): Unit +// ^ definition ujson/AstTransformer#AstObjVisitor#visitValue().(v) v: I // ^ reference ujson/AstTransformer#[I] -// ^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitValue().(index) +// ^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitValue().(index) index: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# // ^^ reference ujson/AstTransformer#AstObjVisitor#vs. // ^^ reference scala/collection/mutable/Growable#`+=`(). // ^^^ reference ujson/AstTransformer#AstObjVisitor#key(). -// reference scala/Predef. -// reference scala/Predef.ArrowAssoc(). // ^^ reference scala/Predef.ArrowAssoc#`->`(). // ^ reference ujson/AstTransformer#AstObjVisitor#visitValue().(v) def visitEnd(index: Int) = build(vs.result) -// ^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitEnd(). -// ^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitEnd().(index) +// ^^^^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitEnd(). def visitEnd(index: Int): I +// ^^^^^ definition ujson/AstTransformer#AstObjVisitor#visitEnd().(index) index: Int // ^^^ reference scala/Int# // ^^^^^ reference ujson/AstTransformer#AstObjVisitor#build. -// reference scala/Function1#apply(). // ^^ reference ujson/AstTransformer#AstObjVisitor#vs. // ^^^^^^ reference scala/collection/mutable/Builder#result(). } class AstArrVisitor[T[_]](build: T[I] => I) -// ^^^^^^^^^^^^^ definition ujson/AstTransformer#AstArrVisitor# -// ^ definition ujson/AstTransformer#AstArrVisitor#[T] -// definition ujson/AstTransformer#AstArrVisitor#``(). -// ^^^^^ definition ujson/AstTransformer#AstArrVisitor#build. +// ^^^^^^^^^^^^^ definition ujson/AstTransformer#AstArrVisitor# class AstArrVisitor[T] +// ^ definition ujson/AstTransformer#AstArrVisitor#[T] T +// definition ujson/AstTransformer#AstArrVisitor#``(). def this(build: (T[I]) => I)(factory: Factory[I, T[I]]) +// ^^^^^ definition ujson/AstTransformer#AstArrVisitor#build. private[this] val build: (T[I]) => I // ^ reference ujson/AstTransformer#AstArrVisitor#[T] // ^ reference ujson/AstTransformer#[I] // ^ reference ujson/AstTransformer#[I] (implicit factory: Factory[I, T[I]]) extends ArrVisitor[I, I]{ -// ^^^^^^^ definition ujson/AstTransformer#AstArrVisitor#factory. +// ^^^^^^^ definition ujson/AstTransformer#AstArrVisitor#factory. private[this] implicit val factory: Factory[I, T[I]] // ^^^^^^^ reference upickle/core/compat/package.Factory# // ^ reference ujson/AstTransformer#[I] // ^ reference ujson/AstTransformer#AstArrVisitor#[T] @@ -190,17 +183,17 @@ trait AstTransformer[I] extends Transformer[I] with JsVisitor[I, I]{ // ^ reference ujson/AstTransformer#[I] // reference java/lang/Object#``(). def subVisitor = AstTransformer.this -// ^^^^^^^^^^ definition ujson/AstTransformer#AstArrVisitor#subVisitor(). +// ^^^^^^^^^^ definition ujson/AstTransformer#AstArrVisitor#subVisitor(). def subVisitor: AstTransformer[I] // ^^^^^^^^^^^^^^ reference ujson/AstTransformer# private[this] val vs = factory.newBuilder -// ^^ definition ujson/AstTransformer#AstArrVisitor#vs. +// ^^ definition ujson/AstTransformer#AstArrVisitor#vs. private[this] val vs: Builder[I, T[I]] // ^^^^^^^ reference ujson/AstTransformer#AstArrVisitor#factory. // ^^^^^^^^^^ reference scala/collection/Factory#newBuilder(). def visitValue(v: I, index: Int): Unit = vs += v -// ^^^^^^^^^^ definition ujson/AstTransformer#AstArrVisitor#visitValue(). -// ^ definition ujson/AstTransformer#AstArrVisitor#visitValue().(v) +// ^^^^^^^^^^ definition ujson/AstTransformer#AstArrVisitor#visitValue(). def visitValue(v: I, index: Int): Unit +// ^ definition ujson/AstTransformer#AstArrVisitor#visitValue().(v) v: I // ^ reference ujson/AstTransformer#[I] -// ^^^^^ definition ujson/AstTransformer#AstArrVisitor#visitValue().(index) +// ^^^^^ definition ujson/AstTransformer#AstArrVisitor#visitValue().(index) index: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# // ^^ reference ujson/AstTransformer#AstArrVisitor#vs. @@ -208,11 +201,10 @@ trait AstTransformer[I] extends Transformer[I] with JsVisitor[I, I]{ // ^ reference ujson/AstTransformer#AstArrVisitor#visitValue().(v) def visitEnd(index: Int) = build(vs.result()) -// ^^^^^^^^ definition ujson/AstTransformer#AstArrVisitor#visitEnd(). -// ^^^^^ definition ujson/AstTransformer#AstArrVisitor#visitEnd().(index) +// ^^^^^^^^ definition ujson/AstTransformer#AstArrVisitor#visitEnd(). def visitEnd(index: Int): I +// ^^^^^ definition ujson/AstTransformer#AstArrVisitor#visitEnd().(index) index: Int // ^^^ reference scala/Int# // ^^^^^ reference ujson/AstTransformer#AstArrVisitor#build. -// reference scala/Function1#apply(). // ^^ reference ujson/AstTransformer#AstArrVisitor#vs. // ^^^^^^ reference scala/collection/mutable/Builder#result(). } diff --git a/tests/snapshots/src/main/generated/ujson/ByteArrayParser.scala b/tests/snapshots/src/main/generated/ujson/ByteArrayParser.scala index c65ab645..2c7b965c 100644 --- a/tests/snapshots/src/main/generated/ujson/ByteArrayParser.scala +++ b/tests/snapshots/src/main/generated/ujson/ByteArrayParser.scala @@ -33,10 +33,10 @@ import upickle.core.{ObjArrVisitor, Visitor} * update its own mutable position fields. */ final class ByteArrayParser[J](src: Array[Byte]) extends ByteParser[J]{ -// ^^^^^^^^^^^^^^^ definition ujson/ByteArrayParser# -// ^ definition ujson/ByteArrayParser#[J] -// definition ujson/ByteArrayParser#``(). -// ^^^ definition ujson/ByteArrayParser#src. +// ^^^^^^^^^^^^^^^ definition ujson/ByteArrayParser# final class ByteArrayParser[J] +// ^ definition ujson/ByteArrayParser#[J] J +// definition ujson/ByteArrayParser#``(). def this(src: Array[Byte]) +// ^^^ definition ujson/ByteArrayParser#src. private[this] val src: Array[Byte] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Byte# // ^^^^^^^^^^ reference ujson/ByteParser# @@ -44,25 +44,25 @@ final class ByteArrayParser[J](src: Array[Byte]) extends ByteParser[J]{ // reference ujson/ByteParser#``(). val srcLength = src.length -// ^^^^^^^^^ definition ujson/ByteArrayParser#srcLength. +// ^^^^^^^^^ definition ujson/ByteArrayParser#srcLength. val srcLength: Int // ^^^ reference ujson/ByteArrayParser#src. // ^^^^^^ reference scala/Array#length(). protected[this] final def close() = {} -// ^^^^^ definition ujson/ByteArrayParser#close(). +// ^^^^^ definition ujson/ByteArrayParser#close(). final def close(): Unit // Never grow the buffer since it's a directly using the original override def growBuffer(until: Int): Unit = () -// ^^^^^^^^^^ definition ujson/ByteArrayParser#growBuffer(). -// ^^^^^ definition ujson/ByteArrayParser#growBuffer().(until) +// ^^^^^^^^^^ definition ujson/ByteArrayParser#growBuffer(). def growBuffer(until: Int): Unit +// ^^^^^ definition ujson/ByteArrayParser#growBuffer().(until) until: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# def readDataIntoBuffer(buffer: Array[Byte], bufferOffset: Int) = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/ByteArrayParser#readDataIntoBuffer(). -// ^^^^^^ definition ujson/ByteArrayParser#readDataIntoBuffer().(buffer) +// ^^^^^^^^^^^^^^^^^^ definition ujson/ByteArrayParser#readDataIntoBuffer(). def readDataIntoBuffer(buffer: Array[Byte], bufferOffset: Int): (Array[Byte], Boolean, Int) +// ^^^^^^ definition ujson/ByteArrayParser#readDataIntoBuffer().(buffer) buffer: Array[Byte] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Byte# -// ^^^^^^^^^^^^ definition ujson/ByteArrayParser#readDataIntoBuffer().(bufferOffset) +// ^^^^^^^^^^^^ definition ujson/ByteArrayParser#readDataIntoBuffer().(bufferOffset) bufferOffset: Int // ^^^ reference scala/Int# if(buffer == null) (src, srcLength == 0, srcLength) // ^^^^^^ reference ujson/ByteArrayParser#readDataIntoBuffer().(buffer) @@ -77,18 +77,18 @@ final class ByteArrayParser[J](src: Array[Byte]) extends ByteParser[J]{ } object ByteArrayParser extends Transformer[Array[Byte]]{ -// ^^^^^^^^^^^^^^^ definition ujson/ByteArrayParser. +// ^^^^^^^^^^^^^^^ definition ujson/ByteArrayParser. object ByteArrayParser // ^^^^^^^^^^^ reference ujson/Transformer# // ^^^^^ reference scala/Array# // ^^^^ reference scala/Byte# // reference java/lang/Object#``(). def transform[T](j: Array[Byte], f: Visitor[_, T]) = new ByteArrayParser(j).parse(f) -// ^^^^^^^^^ definition ujson/ByteArrayParser.transform(). -// ^ definition ujson/ByteArrayParser.transform().[T] -// ^ definition ujson/ByteArrayParser.transform().(j) +// ^^^^^^^^^ definition ujson/ByteArrayParser.transform(). def transform(j: Array[Byte], f: Visitor[local0, T[): T +// ^ definition ujson/ByteArrayParser.transform().[T] T +// ^ definition ujson/ByteArrayParser.transform().(j) j: Array[Byte] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Byte# -// ^ definition ujson/ByteArrayParser.transform().(f) +// ^ definition ujson/ByteArrayParser.transform().(f) f: Visitor[local0, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteArrayParser.transform().[T] // ^^^^^^^^^^^^^^^ reference ujson/ByteArrayParser# diff --git a/tests/snapshots/src/main/generated/ujson/ByteBufferParser.scala b/tests/snapshots/src/main/generated/ujson/ByteBufferParser.scala index cc531396..9474a519 100644 --- a/tests/snapshots/src/main/generated/ujson/ByteBufferParser.scala +++ b/tests/snapshots/src/main/generated/ujson/ByteBufferParser.scala @@ -33,20 +33,20 @@ import java.nio.charset.StandardCharsets * update its own mutable position fields. */ final class ByteBufferParser[J](src: ByteBuffer) extends ByteParser[J]{ -// ^^^^^^^^^^^^^^^^ definition ujson/ByteBufferParser# -// ^ definition ujson/ByteBufferParser#[J] -// definition ujson/ByteBufferParser#``(). -// ^^^ definition ujson/ByteBufferParser#src. +// ^^^^^^^^^^^^^^^^ definition ujson/ByteBufferParser# final class ByteBufferParser[J] +// ^ definition ujson/ByteBufferParser#[J] J +// definition ujson/ByteBufferParser#``(). def this(src: ByteBuffer) +// ^^^ definition ujson/ByteBufferParser#src. private[this] val src: ByteBuffer // ^^^^^^^^^^ reference java/nio/ByteBuffer# // ^^^^^^^^^^ reference ujson/ByteParser# // ^ reference ujson/ByteBufferParser#[J] // reference ujson/ByteParser#``(). private[this] final val start = src.position() -// ^^^^^ definition ujson/ByteBufferParser#start. +// ^^^^^ definition ujson/ByteBufferParser#start. private[this] final val start: Int // ^^^ reference ujson/ByteBufferParser#src. // ^^^^^^^^ reference java/nio/Buffer#position(). private[this] final val limit = src.limit() - start -// ^^^^^ definition ujson/ByteBufferParser#limit. +// ^^^^^ definition ujson/ByteBufferParser#limit. private[this] final val limit: Int // ^^^ reference ujson/ByteBufferParser#src. // ^^^^^ reference java/nio/Buffer#limit(). // ^ reference scala/Int#`-`(+3). @@ -54,21 +54,21 @@ final class ByteBufferParser[J](src: ByteBuffer) extends ByteParser[J]{ protected[this] final def close() = { src.position(start) } -// ^^^^^ definition ujson/ByteBufferParser#close(). +// ^^^^^ definition ujson/ByteBufferParser#close(). final def close(): Unit // ^^^ reference ujson/ByteBufferParser#src. // ^^^^^^^^ reference java/nio/ByteBuffer#position(). // ^^^^^ reference ujson/ByteBufferParser#start. override def growBuffer(until: Int): Unit = () -// ^^^^^^^^^^ definition ujson/ByteBufferParser#growBuffer(). -// ^^^^^ definition ujson/ByteBufferParser#growBuffer().(until) +// ^^^^^^^^^^ definition ujson/ByteBufferParser#growBuffer(). def growBuffer(until: Int): Unit +// ^^^^^ definition ujson/ByteBufferParser#growBuffer().(until) until: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# def readDataIntoBuffer(buffer: Array[Byte], bufferOffset: Int) = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/ByteBufferParser#readDataIntoBuffer(). -// ^^^^^^ definition ujson/ByteBufferParser#readDataIntoBuffer().(buffer) +// ^^^^^^^^^^^^^^^^^^ definition ujson/ByteBufferParser#readDataIntoBuffer(). def readDataIntoBuffer(buffer: Array[Byte], bufferOffset: Int): (Array[Byte], Boolean, Int) +// ^^^^^^ definition ujson/ByteBufferParser#readDataIntoBuffer().(buffer) buffer: Array[Byte] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Byte# -// ^^^^^^^^^^^^ definition ujson/ByteBufferParser#readDataIntoBuffer().(bufferOffset) +// ^^^^^^^^^^^^ definition ujson/ByteBufferParser#readDataIntoBuffer().(bufferOffset) bufferOffset: Int // ^^^ reference scala/Int# if(buffer == null) (java.util.Arrays.copyOfRange(src.array(), start, src.limit()), limit == 0, limit) @@ -93,16 +93,16 @@ final class ByteBufferParser[J](src: ByteBuffer) extends ByteParser[J]{ } object ByteBufferParser extends Transformer[ByteBuffer]{ -// ^^^^^^^^^^^^^^^^ definition ujson/ByteBufferParser. +// ^^^^^^^^^^^^^^^^ definition ujson/ByteBufferParser. object ByteBufferParser // ^^^^^^^^^^^ reference ujson/Transformer# // ^^^^^^^^^^ reference java/nio/ByteBuffer# // reference java/lang/Object#``(). def transform[T](j: ByteBuffer, f: Visitor[_, T]) = new ByteBufferParser(j).parse(f) -// ^^^^^^^^^ definition ujson/ByteBufferParser.transform(). -// ^ definition ujson/ByteBufferParser.transform().[T] -// ^ definition ujson/ByteBufferParser.transform().(j) +// ^^^^^^^^^ definition ujson/ByteBufferParser.transform(). def transform(j: ByteBuffer, f: Visitor[local0, T[): T +// ^ definition ujson/ByteBufferParser.transform().[T] T +// ^ definition ujson/ByteBufferParser.transform().(j) j: ByteBuffer // ^^^^^^^^^^ reference java/nio/ByteBuffer# -// ^ definition ujson/ByteBufferParser.transform().(f) +// ^ definition ujson/ByteBufferParser.transform().(f) f: Visitor[local0, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/ByteBufferParser.transform().[T] // ^^^^^^^^^^^^^^^^ reference ujson/ByteBufferParser# diff --git a/tests/snapshots/src/main/generated/ujson/CharSequenceParser.scala b/tests/snapshots/src/main/generated/ujson/CharSequenceParser.scala index 2e5db22e..9c12a56c 100644 --- a/tests/snapshots/src/main/generated/ujson/CharSequenceParser.scala +++ b/tests/snapshots/src/main/generated/ujson/CharSequenceParser.scala @@ -14,25 +14,25 @@ import upickle.core.{ObjArrVisitor, Visitor} */ private[ujson] final class CharSequenceParser[J](cs: CharSequence) extends CharParser[J]{ // ^^^^^ reference ujson/ -// ^^^^^^^^^^^^^^^^^^ definition ujson/CharSequenceParser# -// ^ definition ujson/CharSequenceParser#[J] -// definition ujson/CharSequenceParser#``(). -// ^^ definition ujson/CharSequenceParser#cs. +// ^^^^^^^^^^^^^^^^^^ definition ujson/CharSequenceParser# protected[ujson] final class CharSequenceParser[J] +// ^ definition ujson/CharSequenceParser#[J] J +// definition ujson/CharSequenceParser#``(). def this(cs: CharSequence) +// ^^ definition ujson/CharSequenceParser#cs. private[this] val cs: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# // ^^^^^^^^^^ reference ujson/CharParser# // ^ reference ujson/CharSequenceParser#[J] // reference ujson/CharParser#``(). override def growBuffer(until: Int): Unit = () -// ^^^^^^^^^^ definition ujson/CharSequenceParser#growBuffer(). -// ^^^^^ definition ujson/CharSequenceParser#growBuffer().(until) +// ^^^^^^^^^^ definition ujson/CharSequenceParser#growBuffer(). def growBuffer(until: Int): Unit +// ^^^^^ definition ujson/CharSequenceParser#growBuffer().(until) until: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# def readDataIntoBuffer(buffer: Array[Char], bufferOffset: Int) = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/CharSequenceParser#readDataIntoBuffer(). -// ^^^^^^ definition ujson/CharSequenceParser#readDataIntoBuffer().(buffer) +// ^^^^^^^^^^^^^^^^^^ definition ujson/CharSequenceParser#readDataIntoBuffer(). def readDataIntoBuffer(buffer: Array[Char], bufferOffset: Int): (Array[Char], Boolean, Int) +// ^^^^^^ definition ujson/CharSequenceParser#readDataIntoBuffer().(buffer) buffer: Array[Char] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Char# -// ^^^^^^^^^^^^ definition ujson/CharSequenceParser#readDataIntoBuffer().(bufferOffset) +// ^^^^^^^^^^^^ definition ujson/CharSequenceParser#readDataIntoBuffer().(bufferOffset) bufferOffset: Int // ^^^ reference scala/Int# if(buffer == null) (cs.toString.toCharArray, cs.length == 0, cs.length) // ^^^^^^ reference ujson/CharSequenceParser#readDataIntoBuffer().(buffer) @@ -49,20 +49,20 @@ private[ujson] final class CharSequenceParser[J](cs: CharSequence) extends CharP // ^^^^^^ reference ujson/CharSequenceParser#readDataIntoBuffer().(buffer) } final def close() = () -// ^^^^^ definition ujson/CharSequenceParser#close(). +// ^^^^^ definition ujson/CharSequenceParser#close(). final def close(): Unit } object CharSequenceParser extends Transformer[CharSequence]{ -// ^^^^^^^^^^^^^^^^^^ definition ujson/CharSequenceParser. +// ^^^^^^^^^^^^^^^^^^ definition ujson/CharSequenceParser. object CharSequenceParser // ^^^^^^^^^^^ reference ujson/Transformer# // ^^^^^^^^^^^^ reference java/lang/CharSequence# // reference java/lang/Object#``(). def transform[T](j: CharSequence, f: Visitor[_, T]) = new CharSequenceParser(j).parse(f) -// ^^^^^^^^^ definition ujson/CharSequenceParser.transform(). -// ^ definition ujson/CharSequenceParser.transform().[T] -// ^ definition ujson/CharSequenceParser.transform().(j) +// ^^^^^^^^^ definition ujson/CharSequenceParser.transform(). def transform(j: CharSequence, f: Visitor[local0, T[): T +// ^ definition ujson/CharSequenceParser.transform().[T] T +// ^ definition ujson/CharSequenceParser.transform().(j) j: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^ definition ujson/CharSequenceParser.transform().(f) +// ^ definition ujson/CharSequenceParser.transform().(f) f: Visitor[local0, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/CharSequenceParser.transform().[T] // ^^^^^^^^^^^^^^^^^^ reference ujson/CharSequenceParser# diff --git a/tests/snapshots/src/main/generated/ujson/Exceptions.scala b/tests/snapshots/src/main/generated/ujson/Exceptions.scala index e689c3a6..9dc265e2 100644 --- a/tests/snapshots/src/main/generated/ujson/Exceptions.scala +++ b/tests/snapshots/src/main/generated/ujson/Exceptions.scala @@ -3,15 +3,15 @@ package ujson sealed trait ParsingFailedException extends Exception -// ^^^^^^^^^^^^^^^^^^^^^^ definition ujson/ParsingFailedException# +// ^^^^^^^^^^^^^^^^^^^^^^ definition ujson/ParsingFailedException# sealed trait ParsingFailedException // ^^^^^^^^^ reference scala/package.Exception# case class ParseException(clue: String, index: Int) -// ^^^^^^^^^^^^^^ definition ujson/ParseException# -// definition ujson/ParseException#``(). -// ^^^^ definition ujson/ParseException#clue. +// ^^^^^^^^^^^^^^ definition ujson/ParseException# case class ParseException(clue: String, index: Int) extends Exception with ParsingFailedException +// definition ujson/ParseException#``(). def this(clue: String, index: Int) +// ^^^^ definition ujson/ParseException#clue. val clue: String // ^^^^^^ reference scala/Predef.String# -// ^^^^^ definition ujson/ParseException#index. +// ^^^^^ definition ujson/ParseException#index. val index: Int // ^^^ reference scala/Int# extends Exception(clue + " at index " + index) with ParsingFailedException // ^^^^^^^^^ reference scala/package.Exception# @@ -23,9 +23,9 @@ case class ParseException(clue: String, index: Int) // ^^^^^^^^^^^^^^^^^^^^^^ reference ujson/ParsingFailedException# case class IncompleteParseException(msg: String) -// ^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/IncompleteParseException# -// definition ujson/IncompleteParseException#``(). -// ^^^ definition ujson/IncompleteParseException#msg. +// ^^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/IncompleteParseException# case class IncompleteParseException(msg: String) extends Exception with ParsingFailedException +// definition ujson/IncompleteParseException#``(). def this(msg: String) +// ^^^ definition ujson/IncompleteParseException#msg. val msg: String // ^^^^^^ reference scala/Predef.String# extends Exception(msg) with ParsingFailedException // ^^^^^^^^^ reference scala/package.Exception# diff --git a/tests/snapshots/src/main/generated/ujson/IndexedValue.scala b/tests/snapshots/src/main/generated/ujson/IndexedValue.scala index 2b892cb7..78a392a4 100644 --- a/tests/snapshots/src/main/generated/ujson/IndexedValue.scala +++ b/tests/snapshots/src/main/generated/ujson/IndexedValue.scala @@ -29,35 +29,35 @@ import upickle.core.{Visitor, ObjVisitor, ArrVisitor, Abort, AbortException} * something goes wrong */ sealed trait IndexedValue { -// ^^^^^^^^^^^^ definition ujson/IndexedValue# +// ^^^^^^^^^^^^ definition ujson/IndexedValue# sealed trait IndexedValue def index: Int -// ^^^^^ definition ujson/IndexedValue#index(). +// ^^^^^ definition ujson/IndexedValue#index(). def index: Int // ^^^ reference scala/Int# } object IndexedValue extends Transformer[IndexedValue]{ -// ^^^^^^^^^^^^ definition ujson/IndexedValue. +// ^^^^^^^^^^^^ definition ujson/IndexedValue. object IndexedValue // ^^^^^^^^^^^ reference ujson/Transformer# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). case class Str(index: Int, value0: java.lang.CharSequence) extends IndexedValue -// ^^^ definition ujson/IndexedValue.Str# -// definition ujson/IndexedValue.Str#``(). -// ^^^^^ definition ujson/IndexedValue.Str#index. +// ^^^ definition ujson/IndexedValue.Str# case class Str(index: Int, value0: CharSequence) extends IndexedValue +// definition ujson/IndexedValue.Str#``(). def this(index: Int, value0: CharSequence) +// ^^^^^ definition ujson/IndexedValue.Str#index. val index: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/IndexedValue.Str#value0. +// ^^^^^^ definition ujson/IndexedValue.Str#value0. val value0: CharSequence // ^^^^ reference java/ // ^^^^ reference java/lang/ // ^^^^^^^^^^^^ reference java/lang/CharSequence# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). case class Obj(index: Int, value0: (java.lang.CharSequence, IndexedValue)*) extends IndexedValue -// ^^^ definition ujson/IndexedValue.Obj# -// definition ujson/IndexedValue.Obj#``(). -// ^^^^^ definition ujson/IndexedValue.Obj#index. +// ^^^ definition ujson/IndexedValue.Obj# case class Obj(index: Int, value0: (CharSequence, IndexedValue)*) extends IndexedValue +// definition ujson/IndexedValue.Obj#``(). def this(index: Int, value0: (CharSequence, IndexedValue)*) +// ^^^^^ definition ujson/IndexedValue.Obj#index. val index: Int // ^^^ reference scala/Int# -// ^^^^^^ definition ujson/IndexedValue.Obj#value0. +// ^^^^^^ definition ujson/IndexedValue.Obj#value0. val value0: (CharSequence, IndexedValue)* // ^^^^ reference java/ // ^^^^ reference java/lang/ // ^^^^^^^^^^^^ reference java/lang/CharSequence# @@ -65,73 +65,73 @@ object IndexedValue extends Transformer[IndexedValue]{ // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). case class Arr(index: Int, value: IndexedValue*) extends IndexedValue -// ^^^ definition ujson/IndexedValue.Arr# -// definition ujson/IndexedValue.Arr#``(). -// ^^^^^ definition ujson/IndexedValue.Arr#index. +// ^^^ definition ujson/IndexedValue.Arr# case class Arr(index: Int, value: IndexedValue*) extends IndexedValue +// definition ujson/IndexedValue.Arr#``(). def this(index: Int, value: IndexedValue*) +// ^^^^^ definition ujson/IndexedValue.Arr#index. val index: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/IndexedValue.Arr#value. +// ^^^^^ definition ujson/IndexedValue.Arr#value. val value: IndexedValue* // ^^^^^^^^^^^^ reference ujson/IndexedValue# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). case class Num(index: Int, s: CharSequence, decIndex: Int, expIndex: Int) extends IndexedValue -// ^^^ definition ujson/IndexedValue.Num# -// definition ujson/IndexedValue.Num#``(). -// ^^^^^ definition ujson/IndexedValue.Num#index. +// ^^^ definition ujson/IndexedValue.Num# case class Num(index: Int, s: CharSequence, decIndex: Int, expIndex: Int) extends IndexedValue +// definition ujson/IndexedValue.Num#``(). def this(index: Int, s: CharSequence, decIndex: Int, expIndex: Int) +// ^^^^^ definition ujson/IndexedValue.Num#index. val index: Int // ^^^ reference scala/Int# -// ^ definition ujson/IndexedValue.Num#s. +// ^ definition ujson/IndexedValue.Num#s. val s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^ definition ujson/IndexedValue.Num#decIndex. +// ^^^^^^^^ definition ujson/IndexedValue.Num#decIndex. val decIndex: Int // ^^^ reference scala/Int# -// ^^^^^^^^ definition ujson/IndexedValue.Num#expIndex. +// ^^^^^^^^ definition ujson/IndexedValue.Num#expIndex. val expIndex: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). case class NumRaw(index: Int, d: Double) extends IndexedValue -// ^^^^^^ definition ujson/IndexedValue.NumRaw# -// definition ujson/IndexedValue.NumRaw#``(). -// ^^^^^ definition ujson/IndexedValue.NumRaw#index. +// ^^^^^^ definition ujson/IndexedValue.NumRaw# case class NumRaw(index: Int, d: Double) extends IndexedValue +// definition ujson/IndexedValue.NumRaw#``(). def this(index: Int, d: Double) +// ^^^^^ definition ujson/IndexedValue.NumRaw#index. val index: Int // ^^^ reference scala/Int# -// ^ definition ujson/IndexedValue.NumRaw#d. +// ^ definition ujson/IndexedValue.NumRaw#d. val d: Double // ^^^^^^ reference scala/Double# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). case class False(index: Int) extends IndexedValue{ -// ^^^^^ definition ujson/IndexedValue.False# -// definition ujson/IndexedValue.False#``(). -// ^^^^^ definition ujson/IndexedValue.False#index. +// ^^^^^ definition ujson/IndexedValue.False# case class False(index: Int) extends IndexedValue +// definition ujson/IndexedValue.False#``(). def this(index: Int) +// ^^^^^ definition ujson/IndexedValue.False#index. val index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). def value = false -// ^^^^^ definition ujson/IndexedValue.False#value(). +// ^^^^^ definition ujson/IndexedValue.False#value(). def value: Boolean } case class True(index: Int) extends IndexedValue{ -// ^^^^ definition ujson/IndexedValue.True# -// definition ujson/IndexedValue.True#``(). -// ^^^^^ definition ujson/IndexedValue.True#index. +// ^^^^ definition ujson/IndexedValue.True# case class True(index: Int) extends IndexedValue +// definition ujson/IndexedValue.True#``(). def this(index: Int) +// ^^^^^ definition ujson/IndexedValue.True#index. val index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). def value = true -// ^^^^^ definition ujson/IndexedValue.True#value(). +// ^^^^^ definition ujson/IndexedValue.True#value(). def value: Boolean } case class Null(index: Int) extends IndexedValue{ -// ^^^^ definition ujson/IndexedValue.Null# -// definition ujson/IndexedValue.Null#``(). -// ^^^^^ definition ujson/IndexedValue.Null#index. +// ^^^^ definition ujson/IndexedValue.Null# case class Null(index: Int) extends IndexedValue +// definition ujson/IndexedValue.Null#``(). def this(index: Int) +// ^^^^^ definition ujson/IndexedValue.Null#index. val index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). def value = null -// ^^^^^ definition ujson/IndexedValue.Null#value(). +// ^^^^^ definition ujson/IndexedValue.Null#value(). def value: Null } def transform[T](j: IndexedValue, f: Visitor[_, T]): T = try{ -// ^^^^^^^^^ definition ujson/IndexedValue.transform(). -// ^ definition ujson/IndexedValue.transform().[T] -// ^ definition ujson/IndexedValue.transform().(j) +// ^^^^^^^^^ definition ujson/IndexedValue.transform(). def transform(j: IndexedValue, f: Visitor[local16, T[): T +// ^ definition ujson/IndexedValue.transform().[T] T +// ^ definition ujson/IndexedValue.transform().(j) j: IndexedValue // ^^^^^^^^^^^^ reference ujson/IndexedValue# -// ^ definition ujson/IndexedValue.transform().(f) +// ^ definition ujson/IndexedValue.transform().(f) f: Visitor[local16, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/IndexedValue.transform().[T] // ^ reference ujson/IndexedValue.transform().[T] @@ -140,332 +140,316 @@ object IndexedValue extends Transformer[IndexedValue]{ case IndexedValue.Null(i) => f.visitNull(i) // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^ reference ujson/IndexedValue.Null. -// ^ definition local0 +// ^ definition local17 i: Int // ^ reference ujson/IndexedValue.transform().(f) // ^^^^^^^^^ reference upickle/core/Visitor#visitNull(). -// ^ reference local0 +// ^ reference local17 case IndexedValue.True(i) => f.visitTrue(i) // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^ reference ujson/IndexedValue.True. -// ^ definition local1 +// ^ definition local18 i: Int // ^ reference ujson/IndexedValue.transform().(f) // ^^^^^^^^^ reference upickle/core/Visitor#visitTrue(). -// ^ reference local1 +// ^ reference local18 case IndexedValue.False(i) => f.visitFalse(i) // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^^ reference ujson/IndexedValue.False. -// ^ definition local2 +// ^ definition local19 i: Int // ^ reference ujson/IndexedValue.transform().(f) // ^^^^^^^^^^ reference upickle/core/Visitor#visitFalse(). -// ^ reference local2 +// ^ reference local19 case IndexedValue.Str(i, s) => f.visitString(s, i) // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Str. -// ^ definition local3 -// ^ definition local4 +// ^ definition local20 i: Int +// ^ definition local21 s: CharSequence // ^ reference ujson/IndexedValue.transform().(f) // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). -// ^ reference local4 -// ^ reference local3 +// ^ reference local21 +// ^ reference local20 case IndexedValue.Num(i, s, d, e) => f.visitFloat64StringParts(s, d, e, i) // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Num. -// ^ definition local5 -// ^ definition local6 -// ^ definition local7 -// ^ definition local8 +// ^ definition local22 i: Int +// ^ definition local23 s: CharSequence +// ^ definition local24 d: Int +// ^ definition local25 e: Int // ^ reference ujson/IndexedValue.transform().(f) // ^^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/Visitor#visitFloat64StringParts(). -// ^ reference local6 -// ^ reference local7 -// ^ reference local8 -// ^ reference local5 +// ^ reference local23 +// ^ reference local24 +// ^ reference local25 +// ^ reference local22 case IndexedValue.NumRaw(i, d) => f.visitFloat64(d, i) // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^^^ reference ujson/IndexedValue.NumRaw. -// ^ definition local9 -// ^ definition local10 +// ^ definition local26 i: Int +// ^ definition local27 d: Double // ^ reference ujson/IndexedValue.transform().(f) // ^^^^^^^^^^^^ reference upickle/core/Visitor#visitFloat64(). -// ^ reference local10 -// ^ reference local9 +// ^ reference local27 +// ^ reference local26 case IndexedValue.Arr(i, items @_*) => // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Arr. -// ^ definition local11 -// ^^^^^ definition local12 +// ^ definition local28 i: Int +// ^^^^^ definition local29 items: Seq[IndexedValue] val ctx = f.visitArray(-1, -1).narrow -// ^^^ definition local13 +// ^^^ definition local30 ctx: ArrVisitor[Any, T] // ^ reference ujson/IndexedValue.transform().(f) // ^^^^^^^^^^ reference upickle/core/Visitor#visitArray(). // ^^^^^^ reference upickle/core/ArrVisitor#narrow(). for(item <- items) try ctx.visitValue(transform(item, ctx.subVisitor), item.index) catch reject(item.index) -// ^^^^ definition local14 -// ^^^^^ reference local12 -// ^^^ reference local13 +// ^^^^ definition local31 item: IndexedValue +// ^^^^^ reference local29 +// ^^^ reference local30 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^ reference ujson/IndexedValue.transform(). -// ^^^^ reference local14 -// ^^^ reference local13 +// ^^^^ reference local31 +// ^^^ reference local30 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). -// ^^^^ reference local14 +// ^^^^ reference local31 // ^^^^^ reference ujson/IndexedValue#index(). // ^^^^^^ reference upickle/core/Util.reject(). -// ^^^^ reference local14 +// ^^^^ reference local31 // ^^^^^ reference ujson/IndexedValue#index(). -// reference scala/collection/IterableOnceOps#foreach(). -// reference local14 -// reference scala/Function1#apply(). ctx.visitEnd(i) -// ^^^ reference local13 +// ^^^ reference local30 // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). -// ^ reference local11 +// ^ reference local28 case IndexedValue.Obj(i, items @_*) => // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Obj. -// ^ definition local16 -// ^^^^^ definition local17 +// ^ definition local34 i: Int +// ^^^^^ definition local35 items: Seq[(CharSequence, IndexedValue)] val ctx = f.visitObject(-1, -1).narrow -// ^^^ definition local18 +// ^^^ definition local36 ctx: ObjVisitor[Any, T] // ^ reference ujson/IndexedValue.transform().(f) // ^^^^^^^^^^^ reference upickle/core/Visitor#visitObject(). // ^^^^^^ reference upickle/core/ObjVisitor#narrow(). for((k, item) <- items) { -// ^ definition local21 -// ^^^^ definition local22 +// ^ definition local37 k: CharSequence +// ^^^^ definition local38 item: IndexedValue // ^^^^^ reference scala/collection/IterableOps#withFilter(). val keyVisitor = try ctx.visitKey(i) catch reject(i) -// ^^^^^^^^^^ definition local23 -// ^^^ reference local18 +// ^^^^^^^^^^ definition local40 keyVisitor: Visitor[local41, Any[ +// ^^^ reference local36 // ^^^^^^^^ reference upickle/core/ObjVisitor#visitKey(). -// ^ reference local16 +// ^ reference local34 // ^^^^^^ reference upickle/core/Util.reject(). -// ^ reference local16 -// reference scala/Function1#apply(). +// ^ reference local34 ctx.visitKeyValue(keyVisitor.visitString(k, i)) -// ^^^ reference local18 +// ^^^ reference local36 // ^^^^^^^^^^^^^ reference upickle/core/ObjVisitor#visitKeyValue(). -// ^^^^^^^^^^ reference local23 +// ^^^^^^^^^^ reference local40 // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). -// ^ reference local21 -// ^ reference local16 +// ^ reference local37 +// ^ reference local34 try ctx.visitValue(transform(item, ctx.subVisitor), item.index) catch reject(item.index) -// ^^^ reference local18 +// ^^^ reference local36 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^ reference ujson/IndexedValue.transform(). -// ^^^^ reference local22 -// ^^^ reference local18 +// ^^^^ reference local38 +// ^^^ reference local36 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). -// ^^^^ reference local22 +// ^^^^ reference local38 // ^^^^^ reference ujson/IndexedValue#index(). // ^^^^^^ reference upickle/core/Util.reject(). -// ^^^^ reference local22 +// ^^^^ reference local38 // ^^^^^ reference ujson/IndexedValue#index(). -// reference scala/Function1#apply(). } -// reference scala/collection/IterableOps#withFilter(). -// reference local19 -// reference scala/collection/WithFilter#foreach(). -// reference local20 ctx.visitEnd(i) -// ^^^ reference local18 +// ^^^ reference local36 // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). -// ^ reference local16 +// ^ reference local34 } } catch reject(j.index) // ^^^^^^ reference upickle/core/Util.reject(). // ^ reference ujson/IndexedValue.transform().(j) // ^^^^^ reference ujson/IndexedValue#index(). -// reference scala/Function1#apply(). object Builder extends JsVisitor[IndexedValue, IndexedValue]{ -// ^^^^^^^ definition ujson/IndexedValue.Builder. +// ^^^^^^^ definition ujson/IndexedValue.Builder. object Builder // ^^^^^^^^^ reference ujson/JsVisitor# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // reference java/lang/Object#``(). def visitArray(length: Int, i: Int) = new ArrVisitor[IndexedValue, IndexedValue.Arr] { -// ^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitArray(). -// ^^^^^^ definition ujson/IndexedValue.Builder.visitArray().(length) +// ^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitArray(). def visitArray(length: Int, i: Int): { def subVisitor: Builder } +// ^^^^^^ definition ujson/IndexedValue.Builder.visitArray().(length) length: Int // ^^^ reference scala/Int# -// ^ definition ujson/IndexedValue.Builder.visitArray().(i) +// ^ definition ujson/IndexedValue.Builder.visitArray().(i) i: Int // ^^^ reference scala/Int# +// definition local49 final class $anon // ^^^^^^^^^^ reference upickle/core/ArrVisitor# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Arr# // reference java/lang/Object#``(). val out = mutable.Buffer.empty[IndexedValue] -// ^^^ definition local25 +// ^^^ definition local50 private val out: Buffer[IndexedValue] // ^^^^^^^ reference scala/collection/mutable/ // ^^^^^^ reference scala/collection/mutable/Buffer. // ^^^^^ reference scala/collection/SeqFactory.Delegate#empty(). // ^^^^^^^^^^^^ reference ujson/IndexedValue# def subVisitor = Builder -// ^^^^^^^^^^ definition local26 +// ^^^^^^^^^^ definition local48 def subVisitor: Builder // ^^^^^^^ reference ujson/IndexedValue.Builder. def visitValue(v: IndexedValue, index: Int): Unit = { -// ^^^^^^^^^^ definition local27 -// ^ definition local28 +// ^^^^^^^^^^ definition local51 def visitValue(v: IndexedValue, index: Int): Unit +// ^ definition local53 v: IndexedValue // ^^^^^^^^^^^^ reference ujson/IndexedValue# -// ^^^^^ definition local29 +// ^^^^^ definition local54 index: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# out.append(v) -// ^^^ reference local25 +// ^^^ reference local50 // ^^^^^^ reference scala/collection/mutable/Buffer#append(). -// ^ reference local28 +// ^ reference local53 } def visitEnd(index: Int): IndexedValue.Arr = IndexedValue.Arr(i, out.toSeq:_*) -// ^^^^^^^^ definition local30 -// ^^^^^ definition local31 +// ^^^^^^^^ definition local52 def visitEnd(index: Int): Arr +// ^^^^^ definition local55 index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Arr# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Arr. -// reference ujson/IndexedValue.Arr.apply(). // ^ reference ujson/IndexedValue.Builder.visitArray().(i) -// ^^^ reference local25 +// ^^^ reference local50 // ^^^^^ reference scala/collection/IterableOnceOps#toSeq(). } def visitObject(length: Int, i: Int) = new ObjVisitor[IndexedValue, IndexedValue.Obj] { -// ^^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitObject(). -// ^^^^^^ definition ujson/IndexedValue.Builder.visitObject().(length) +// ^^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitObject(). def visitObject(length: Int, i: Int): { def subVisitor: Builder; def visitKey(index: Int): Builder } +// ^^^^^^ definition ujson/IndexedValue.Builder.visitObject().(length) length: Int // ^^^ reference scala/Int# -// ^ definition ujson/IndexedValue.Builder.visitObject().(i) +// ^ definition ujson/IndexedValue.Builder.visitObject().(i) i: Int // ^^^ reference scala/Int# +// definition local59 final class $anon // ^^^^^^^^^^ reference upickle/core/ObjVisitor# // ^^^^^^^^^^^^ reference ujson/IndexedValue# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Obj# // reference java/lang/Object#``(). val out = mutable.Buffer.empty[(String, IndexedValue)] -// ^^^ definition local32 +// ^^^ definition local60 private val out: Buffer[(String, IndexedValue)] // ^^^^^^^ reference scala/collection/mutable/ // ^^^^^^ reference scala/collection/mutable/Buffer. // ^^^^^ reference scala/collection/SeqFactory.Delegate#empty(). // ^^^^^^ reference scala/Predef.String# // ^^^^^^^^^^^^ reference ujson/IndexedValue# var currentKey: String = _ -// ^^^^^^^^^^ definition local33 +// ^^^^^^^^^^ definition local61 private var currentKey: String // ^^^^^^ reference scala/Predef.String# def subVisitor = Builder -// ^^^^^^^^^^ definition local34 +// ^^^^^^^^^^ definition local56 def subVisitor: Builder // ^^^^^^^ reference ujson/IndexedValue.Builder. def visitKey(index: Int) = IndexedValue.Builder -// ^^^^^^^^ definition local35 -// ^^^^^ definition local36 +// ^^^^^^^^ definition local57 def visitKey(index: Int): Builder +// ^^^^^ definition local58 index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^^^^ reference ujson/IndexedValue.Builder. def visitKeyValue(s: Any): Unit = currentKey = s.asInstanceOf[IndexedValue.Str].value0.toString -// ^^^^^^^^^^^^^ definition local37 -// ^ definition local38 +// ^^^^^^^^^^^^^ definition local63 def visitKeyValue(s: Any): Unit +// ^ definition local67 s: Any // ^^^ reference scala/Any# // ^^^^ reference scala/Unit# -// ^^^^^^^^^^ reference local39 -// ^ reference local38 +// ^^^^^^^^^^ reference local62 +// ^ reference local67 // ^^^^^^^^^^^^ reference scala/Any#asInstanceOf(). // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Str# // ^^^^^^ reference ujson/IndexedValue.Str#value0. // ^^^^^^^^ reference java/lang/Object#toString(). def visitValue(v: IndexedValue, index: Int): Unit = { -// ^^^^^^^^^^ definition local40 -// ^ definition local41 +// ^^^^^^^^^^ definition local64 def visitValue(v: IndexedValue, index: Int): Unit +// ^ definition local68 v: IndexedValue // ^^^^^^^^^^^^ reference ujson/IndexedValue# -// ^^^^^ definition local42 +// ^^^^^ definition local69 index: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# out.append((currentKey, v)) -// ^^^ reference local32 +// ^^^ reference local60 // ^^^^^^ reference scala/collection/mutable/Buffer#append(). -// ^^^^^^^^^^ reference local33 -// ^ reference local41 +// ^^^^^^^^^^ reference local61 +// ^ reference local68 } def visitEnd(index: Int): IndexedValue.Obj = IndexedValue.Obj(i, out.toSeq:_*) -// ^^^^^^^^ definition local43 -// ^^^^^ definition local44 +// ^^^^^^^^ definition local65 def visitEnd(index: Int): Obj +// ^^^^^ definition local70 index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Obj# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Obj. -// reference ujson/IndexedValue.Obj.apply(). // ^ reference ujson/IndexedValue.Builder.visitObject().(i) -// ^^^ reference local32 +// ^^^ reference local60 // ^^^^^ reference scala/collection/IterableOnceOps#toSeq(). } def visitNull(i: Int) = IndexedValue.Null(i) -// ^^^^^^^^^ definition ujson/IndexedValue.Builder.visitNull(). -// ^ definition ujson/IndexedValue.Builder.visitNull().(i) +// ^^^^^^^^^ definition ujson/IndexedValue.Builder.visitNull(). def visitNull(i: Int): Null +// ^ definition ujson/IndexedValue.Builder.visitNull().(i) i: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^ reference ujson/IndexedValue.Null. -// reference ujson/IndexedValue.Null.apply(). // ^ reference ujson/IndexedValue.Builder.visitNull().(i) def visitFalse(i: Int) = IndexedValue.False(i) -// ^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitFalse(). -// ^ definition ujson/IndexedValue.Builder.visitFalse().(i) +// ^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitFalse(). def visitFalse(i: Int): False +// ^ definition ujson/IndexedValue.Builder.visitFalse().(i) i: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^^ reference ujson/IndexedValue.False. -// reference ujson/IndexedValue.False.apply(). // ^ reference ujson/IndexedValue.Builder.visitFalse().(i) def visitTrue(i: Int) = IndexedValue.True(i) -// ^^^^^^^^^ definition ujson/IndexedValue.Builder.visitTrue(). -// ^ definition ujson/IndexedValue.Builder.visitTrue().(i) +// ^^^^^^^^^ definition ujson/IndexedValue.Builder.visitTrue(). def visitTrue(i: Int): True +// ^ definition ujson/IndexedValue.Builder.visitTrue().(i) i: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^ reference ujson/IndexedValue.True. -// reference ujson/IndexedValue.True.apply(). // ^ reference ujson/IndexedValue.Builder.visitTrue().(i) def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, i: Int) = IndexedValue.Num(i, s, decIndex, expIndex) -// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitFloat64StringParts(). -// ^ definition ujson/IndexedValue.Builder.visitFloat64StringParts().(s) +// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitFloat64StringParts(). def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, i: Int): Num +// ^ definition ujson/IndexedValue.Builder.visitFloat64StringParts().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^ definition ujson/IndexedValue.Builder.visitFloat64StringParts().(decIndex) +// ^^^^^^^^ definition ujson/IndexedValue.Builder.visitFloat64StringParts().(decIndex) decIndex: Int // ^^^ reference scala/Int# -// ^^^^^^^^ definition ujson/IndexedValue.Builder.visitFloat64StringParts().(expIndex) +// ^^^^^^^^ definition ujson/IndexedValue.Builder.visitFloat64StringParts().(expIndex) expIndex: Int // ^^^ reference scala/Int# -// ^ definition ujson/IndexedValue.Builder.visitFloat64StringParts().(i) +// ^ definition ujson/IndexedValue.Builder.visitFloat64StringParts().(i) i: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Num. -// reference ujson/IndexedValue.Num.apply(). // ^ reference ujson/IndexedValue.Builder.visitFloat64StringParts().(i) // ^ reference ujson/IndexedValue.Builder.visitFloat64StringParts().(s) // ^^^^^^^^ reference ujson/IndexedValue.Builder.visitFloat64StringParts().(decIndex) // ^^^^^^^^ reference ujson/IndexedValue.Builder.visitFloat64StringParts().(expIndex) override def visitFloat64(d: Double, i: Int) = IndexedValue.NumRaw(i, d) -// ^^^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitFloat64(). -// ^ definition ujson/IndexedValue.Builder.visitFloat64().(d) +// ^^^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitFloat64(). def visitFloat64(d: Double, i: Int): NumRaw +// ^ definition ujson/IndexedValue.Builder.visitFloat64().(d) d: Double // ^^^^^^ reference scala/Double# -// ^ definition ujson/IndexedValue.Builder.visitFloat64().(i) +// ^ definition ujson/IndexedValue.Builder.visitFloat64().(i) i: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^^^^ reference ujson/IndexedValue.NumRaw. -// reference ujson/IndexedValue.NumRaw.apply(). // ^ reference ujson/IndexedValue.Builder.visitFloat64().(i) // ^ reference ujson/IndexedValue.Builder.visitFloat64().(d) def visitString(s: CharSequence, i: Int) = IndexedValue.Str(i, s) -// ^^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitString(). -// ^ definition ujson/IndexedValue.Builder.visitString().(s) +// ^^^^^^^^^^^ definition ujson/IndexedValue.Builder.visitString(). def visitString(s: CharSequence, i: Int): Str +// ^ definition ujson/IndexedValue.Builder.visitString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^ definition ujson/IndexedValue.Builder.visitString().(i) +// ^ definition ujson/IndexedValue.Builder.visitString().(i) i: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^ reference ujson/IndexedValue. // ^^^ reference ujson/IndexedValue.Str. -// reference ujson/IndexedValue.Str.apply(). // ^ reference ujson/IndexedValue.Builder.visitString().(i) // ^ reference ujson/IndexedValue.Builder.visitString().(s) } diff --git a/tests/snapshots/src/main/generated/ujson/InputStreamParser.scala b/tests/snapshots/src/main/generated/ujson/InputStreamParser.scala index 2003ccea..af4e9e8e 100644 --- a/tests/snapshots/src/main/generated/ujson/InputStreamParser.scala +++ b/tests/snapshots/src/main/generated/ujson/InputStreamParser.scala @@ -29,20 +29,20 @@ import upickle.core.{BufferingInputStreamParser, ObjArrVisitor, Visitor} * Generally not meant to be used directly, but via [[ujson.Readable.fromReadable]] */ final class InputStreamParser[J](val inputStream: java.io.InputStream, -// ^^^^^^^^^^^^^^^^^ definition ujson/InputStreamParser# -// ^ definition ujson/InputStreamParser#[J] -// definition ujson/InputStreamParser#``(). -// ^^^^^^^^^^^ definition ujson/InputStreamParser#inputStream. +// ^^^^^^^^^^^^^^^^^ definition ujson/InputStreamParser# final class InputStreamParser[J] +// ^ definition ujson/InputStreamParser#[J] J +// definition ujson/InputStreamParser#``(). def this(inputStream: InputStream, minBufferStartSize: Int, maxBufferStartSize: Int) +// ^^^^^^^^^^^ definition ujson/InputStreamParser#inputStream. val inputStream: InputStream // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^ reference java/io/InputStream# val minBufferStartSize: Int = BufferingInputStreamParser.defaultMinBufferStartSize, -// ^^^^^^^^^^^^^^^^^^ definition ujson/InputStreamParser#minBufferStartSize. +// ^^^^^^^^^^^^^^^^^^ definition ujson/InputStreamParser#minBufferStartSize. val minBufferStartSize: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingInputStreamParser. // ^^^^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingInputStreamParser.defaultMinBufferStartSize. val maxBufferStartSize: Int = BufferingInputStreamParser.defaultMaxBufferStartSize) -// ^^^^^^^^^^^^^^^^^^ definition ujson/InputStreamParser#maxBufferStartSize. +// ^^^^^^^^^^^^^^^^^^ definition ujson/InputStreamParser#maxBufferStartSize. val maxBufferStartSize: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingInputStreamParser. // ^^^^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingInputStreamParser.defaultMaxBufferStartSize. @@ -54,34 +54,34 @@ extends ByteParser[J] with upickle.core.BufferingInputStreamParser{ // ^^^^ reference upickle/core/ // ^^^^^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/BufferingInputStreamParser# protected[this] final def close() = {} -// ^^^^^ definition ujson/InputStreamParser#close(). +// ^^^^^ definition ujson/InputStreamParser#close(). final def close(): Unit } object InputStreamParser extends Transformer[java.io.InputStream]{ -// ^^^^^^^^^^^^^^^^^ definition ujson/InputStreamParser. +// ^^^^^^^^^^^^^^^^^ definition ujson/InputStreamParser. object InputStreamParser // ^^^^^^^^^^^ reference ujson/Transformer# // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^ reference java/io/InputStream# // reference java/lang/Object#``(). def transform[T](j: java.io.InputStream, f: Visitor[_, T]) = { -// ^^^^^^^^^ definition ujson/InputStreamParser.transform(). -// ^ definition ujson/InputStreamParser.transform().[T] -// ^ definition ujson/InputStreamParser.transform().(j) +// ^^^^^^^^^ definition ujson/InputStreamParser.transform(). def transform(j: InputStream, f: Visitor[local0, T[): T +// ^ definition ujson/InputStreamParser.transform().[T] T +// ^ definition ujson/InputStreamParser.transform().(j) j: InputStream // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^ reference java/io/InputStream# -// ^ definition ujson/InputStreamParser.transform().(f) +// ^ definition ujson/InputStreamParser.transform().(f) f: Visitor[local0, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/InputStreamParser.transform().[T] val p = new InputStreamParser[T](j) -// ^ definition local0 +// ^ definition local1 p: InputStreamParser[T] // ^^^^^^^^^^^^^^^^^ reference ujson/InputStreamParser# // ^ reference ujson/InputStreamParser.transform().[T] // reference ujson/InputStreamParser#``(). // ^ reference ujson/InputStreamParser.transform().(j) p.parse(f) -// ^ reference local0 +// ^ reference local1 // ^^^^^ reference ujson/ByteParser#parse(). // ^ reference ujson/InputStreamParser.transform().(f) } diff --git a/tests/snapshots/src/main/generated/ujson/JsVisitor.scala b/tests/snapshots/src/main/generated/ujson/JsVisitor.scala index 3681bb71..363b98fc 100644 --- a/tests/snapshots/src/main/generated/ujson/JsVisitor.scala +++ b/tests/snapshots/src/main/generated/ujson/JsVisitor.scala @@ -14,21 +14,21 @@ import upickle.core.{ArrVisitor, ObjVisitor, Visitor} * not-JSON-related methods to their JSON equivalents. */ trait JsVisitor[-T, +J] extends Visitor[T, J]{ -// ^^^^^^^^^ definition ujson/JsVisitor# -// ^ definition ujson/JsVisitor#[T] -// ^ definition ujson/JsVisitor#[J] +// ^^^^^^^^^ definition ujson/JsVisitor# trait JsVisitor[T, J] +// ^ definition ujson/JsVisitor#[T] T +// ^ definition ujson/JsVisitor#[J] J // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/JsVisitor#[T] // ^ reference ujson/JsVisitor#[J] def visitFloat64(d: Double, index: Int): J = { -// ^^^^^^^^^^^^ definition ujson/JsVisitor#visitFloat64(). -// ^ definition ujson/JsVisitor#visitFloat64().(d) +// ^^^^^^^^^^^^ definition ujson/JsVisitor#visitFloat64(). def visitFloat64(d: Double, index: Int): J +// ^ definition ujson/JsVisitor#visitFloat64().(d) d: Double // ^^^^^^ reference scala/Double# -// ^^^^^ definition ujson/JsVisitor#visitFloat64().(index) +// ^^^^^ definition ujson/JsVisitor#visitFloat64().(index) index: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] val i = d.toLong -// ^ definition local0 +// ^ definition local0 i: Long // ^ reference ujson/JsVisitor#visitFloat64().(d) // ^^^^^^ reference scala/Double#toLong(). if(i == d) visitFloat64StringParts(i.toString, -1, -1, index) @@ -48,30 +48,30 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ } def visitFloat32(d: Float, index: Int): J = visitFloat64(d, index) -// ^^^^^^^^^^^^ definition ujson/JsVisitor#visitFloat32(). -// ^ definition ujson/JsVisitor#visitFloat32().(d) +// ^^^^^^^^^^^^ definition ujson/JsVisitor#visitFloat32(). def visitFloat32(d: Float, index: Int): J +// ^ definition ujson/JsVisitor#visitFloat32().(d) d: Float // ^^^^^ reference scala/Float# -// ^^^^^ definition ujson/JsVisitor#visitFloat32().(index) +// ^^^^^ definition ujson/JsVisitor#visitFloat32().(index) index: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] // ^^^^^^^^^^^^ reference ujson/JsVisitor#visitFloat64(). // ^ reference scala/Float#toDouble(). // ^^^^^ reference ujson/JsVisitor#visitFloat32().(index) def visitInt32(i: Int, index: Int): J = visitFloat64(i, index) -// ^^^^^^^^^^ definition ujson/JsVisitor#visitInt32(). -// ^ definition ujson/JsVisitor#visitInt32().(i) +// ^^^^^^^^^^ definition ujson/JsVisitor#visitInt32(). def visitInt32(i: Int, index: Int): J +// ^ definition ujson/JsVisitor#visitInt32().(i) i: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/JsVisitor#visitInt32().(index) +// ^^^^^ definition ujson/JsVisitor#visitInt32().(index) index: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] // ^^^^^^^^^^^^ reference ujson/JsVisitor#visitFloat64(). // ^ reference scala/Int#toDouble(). // ^^^^^ reference ujson/JsVisitor#visitInt32().(index) def visitInt64(i: Long, index: Int): J = { -// ^^^^^^^^^^ definition ujson/JsVisitor#visitInt64(). -// ^ definition ujson/JsVisitor#visitInt64().(i) +// ^^^^^^^^^^ definition ujson/JsVisitor#visitInt64(). def visitInt64(i: Long, index: Int): J +// ^ definition ujson/JsVisitor#visitInt64().(i) i: Long // ^^^^ reference scala/Long# -// ^^^^^ definition ujson/JsVisitor#visitInt64().(index) +// ^^^^^ definition ujson/JsVisitor#visitInt64().(index) index: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] if (math.abs(i) > math.pow(2, 53) || i == -9223372036854775808L) visitString(i.toString, index) @@ -94,10 +94,10 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ // ^^^^^ reference ujson/JsVisitor#visitInt64().(index) } def visitUInt64(i: Long, index: Int): J = { -// ^^^^^^^^^^^ definition ujson/JsVisitor#visitUInt64(). -// ^ definition ujson/JsVisitor#visitUInt64().(i) +// ^^^^^^^^^^^ definition ujson/JsVisitor#visitUInt64(). def visitUInt64(i: Long, index: Int): J +// ^ definition ujson/JsVisitor#visitUInt64().(i) i: Long // ^^^^ reference scala/Long# -// ^^^^^ definition ujson/JsVisitor#visitUInt64().(index) +// ^^^^^ definition ujson/JsVisitor#visitUInt64().(index) index: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] if (i > math.pow(2, 53) || i < 0) visitString(java.lang.Long.toUnsignedString(i), index) @@ -122,10 +122,10 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ } def visitFloat64String(s: String, index: Int): J = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/JsVisitor#visitFloat64String(). -// ^ definition ujson/JsVisitor#visitFloat64String().(s) +// ^^^^^^^^^^^^^^^^^^ definition ujson/JsVisitor#visitFloat64String(). def visitFloat64String(s: String, index: Int): J +// ^ definition ujson/JsVisitor#visitFloat64String().(s) s: String // ^^^^^^ reference scala/Predef.String# -// ^^^^^ definition ujson/JsVisitor#visitFloat64String().(index) +// ^^^^^ definition ujson/JsVisitor#visitFloat64String().(index) index: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] visitFloat64StringParts( @@ -142,7 +142,7 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ // ^ reference ujson/JsVisitor#visitFloat64String().(s) // ^^^^^^^ reference java/lang/String#indexOf(). case n => n -// ^ definition local1 +// ^ definition local1 n: Int // ^ reference local1 }, -1 @@ -150,24 +150,24 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ } def visitBinary(bytes: Array[Byte], offset: Int, len: Int, index: Int): J = { -// ^^^^^^^^^^^ definition ujson/JsVisitor#visitBinary(). -// ^^^^^ definition ujson/JsVisitor#visitBinary().(bytes) +// ^^^^^^^^^^^ definition ujson/JsVisitor#visitBinary(). def visitBinary(bytes: Array[Byte], offset: Int, len: Int, index: Int): J +// ^^^^^ definition ujson/JsVisitor#visitBinary().(bytes) bytes: Array[Byte] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Byte# -// ^^^^^^ definition ujson/JsVisitor#visitBinary().(offset) +// ^^^^^^ definition ujson/JsVisitor#visitBinary().(offset) offset: Int // ^^^ reference scala/Int# -// ^^^ definition ujson/JsVisitor#visitBinary().(len) +// ^^^ definition ujson/JsVisitor#visitBinary().(len) len: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/JsVisitor#visitBinary().(index) +// ^^^^^ definition ujson/JsVisitor#visitBinary().(index) index: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] val arr = visitArray(len, index) -// ^^^ definition local2 +// ^^^ definition local2 arr: ArrVisitor[T, J] // ^^^^^^^^^^ reference upickle/core/Visitor#visitArray(). // ^^^ reference ujson/JsVisitor#visitBinary().(len) // ^^^^^ reference ujson/JsVisitor#visitBinary().(index) var i = 0 -// ^ definition local3 +// ^ definition local3 i: Int while (i < len){ // ^ reference local3 // ^ reference scala/Int#`<`(+3). @@ -179,7 +179,6 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#subVisitor(). // ^^^^^^^^^^ reference upickle/core/Visitor#visitInt32(). // ^^^^^ reference ujson/JsVisitor#visitBinary().(bytes) -// reference scala/Array#apply(). // ^^^^^^ reference ujson/JsVisitor#visitBinary().(offset) // ^ reference scala/Int#`+`(+4). // ^ reference local3 @@ -198,12 +197,12 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ } def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int): J = visitFloat64StringParts(s, decIndex, expIndex, -1) -// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/JsVisitor#visitFloat64StringParts(). -// ^ definition ujson/JsVisitor#visitFloat64StringParts().(s) +// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/JsVisitor#visitFloat64StringParts(). def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int): J +// ^ definition ujson/JsVisitor#visitFloat64StringParts().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^ definition ujson/JsVisitor#visitFloat64StringParts().(decIndex) +// ^^^^^^^^ definition ujson/JsVisitor#visitFloat64StringParts().(decIndex) decIndex: Int // ^^^ reference scala/Int# -// ^^^^^^^^ definition ujson/JsVisitor#visitFloat64StringParts().(expIndex) +// ^^^^^^^^ definition ujson/JsVisitor#visitFloat64StringParts().(expIndex) expIndex: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] // ^^^^^^^^^^^^^^^^^^^^^^^ reference upickle/core/Visitor#visitFloat64StringParts(). @@ -212,25 +211,25 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ // ^^^^^^^^ reference ujson/JsVisitor#visitFloat64StringParts().(expIndex) def visitExt(tag: Byte, bytes: Array[Byte], offset: Int, len: Int, index: Int): J = { -// ^^^^^^^^ definition ujson/JsVisitor#visitExt(). -// ^^^ definition ujson/JsVisitor#visitExt().(tag) +// ^^^^^^^^ definition ujson/JsVisitor#visitExt(). def visitExt(tag: Byte, bytes: Array[Byte], offset: Int, len: Int, index: Int): J +// ^^^ definition ujson/JsVisitor#visitExt().(tag) tag: Byte // ^^^^ reference scala/Byte# -// ^^^^^ definition ujson/JsVisitor#visitExt().(bytes) +// ^^^^^ definition ujson/JsVisitor#visitExt().(bytes) bytes: Array[Byte] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Byte# -// ^^^^^^ definition ujson/JsVisitor#visitExt().(offset) +// ^^^^^^ definition ujson/JsVisitor#visitExt().(offset) offset: Int // ^^^ reference scala/Int# -// ^^^ definition ujson/JsVisitor#visitExt().(len) +// ^^^ definition ujson/JsVisitor#visitExt().(len) len: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/JsVisitor#visitExt().(index) +// ^^^^^ definition ujson/JsVisitor#visitExt().(index) index: Int // ^^^ reference scala/Int# // ^ reference ujson/JsVisitor#[J] val arr = visitArray(-1, index) -// ^^^ definition local4 +// ^^^ definition local5 arr: ArrVisitor[T, J] // ^^^^^^^^^^ reference upickle/core/Visitor#visitArray(). // ^^^^^ reference ujson/JsVisitor#visitExt().(index) arr.visitValue(visitFloat64(tag, index).asInstanceOf[T], -1) -// ^^^ reference local4 +// ^^^ reference local5 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^^^^ reference ujson/JsVisitor#visitFloat64(). // ^^^ reference scala/Byte#toDouble(). @@ -238,7 +237,7 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ // ^^^^^^^^^^^^ reference scala/Any#asInstanceOf(). // ^ reference ujson/JsVisitor#[T] arr.visitValue(visitBinary(bytes, offset, len, index).asInstanceOf[T], -1) -// ^^^ reference local4 +// ^^^ reference local5 // ^^^^^^^^^^ reference upickle/core/ObjArrVisitor#visitValue(). // ^^^^^^^^^^^ reference ujson/JsVisitor#visitBinary(). // ^^^^^ reference ujson/JsVisitor#visitExt().(bytes) @@ -248,15 +247,15 @@ trait JsVisitor[-T, +J] extends Visitor[T, J]{ // ^^^^^^^^^^^^ reference scala/Any#asInstanceOf(). // ^ reference ujson/JsVisitor#[T] arr.visitEnd(-1) -// ^^^ reference local4 +// ^^^ reference local5 // ^^^^^^^^ reference upickle/core/ObjArrVisitor#visitEnd(). } def visitChar(s: Char, index: Int) = visitString(s.toString, index) -// ^^^^^^^^^ definition ujson/JsVisitor#visitChar(). -// ^ definition ujson/JsVisitor#visitChar().(s) +// ^^^^^^^^^ definition ujson/JsVisitor#visitChar(). def visitChar(s: Char, index: Int): J +// ^ definition ujson/JsVisitor#visitChar().(s) s: Char // ^^^^ reference scala/Char# -// ^^^^^ definition ujson/JsVisitor#visitChar().(index) +// ^^^^^ definition ujson/JsVisitor#visitChar().(index) index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). // ^ reference ujson/JsVisitor#visitChar().(s) diff --git a/tests/snapshots/src/main/generated/ujson/Readable.scala b/tests/snapshots/src/main/generated/ujson/Readable.scala index 8be5d13a..75a16cd9 100644 --- a/tests/snapshots/src/main/generated/ujson/Readable.scala +++ b/tests/snapshots/src/main/generated/ujson/Readable.scala @@ -17,35 +17,35 @@ import upickle.core.{Visitor, ObjArrVisitor} // ^^^^^^^ reference upickle/core/Visitor# // ^^^^^^^^^^^^^ reference upickle/core/ObjArrVisitor# trait Readable { -// ^^^^^^^^ definition ujson/Readable# +// ^^^^^^^^ definition ujson/Readable# trait Readable def transform[T](f: Visitor[_, T]): T -// ^^^^^^^^^ definition ujson/Readable#transform(). -// ^ definition ujson/Readable#transform().[T] -// ^ definition ujson/Readable#transform().(f) +// ^^^^^^^^^ definition ujson/Readable#transform(). def transform(f: Visitor[local0, T[): T +// ^ definition ujson/Readable#transform().[T] T +// ^ definition ujson/Readable#transform().(f) f: Visitor[local0, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/Readable#transform().[T] // ^ reference ujson/Readable#transform().[T] } object Readable extends ReadableLowPri{ -// ^^^^^^^^ definition ujson/Readable. +// ^^^^^^^^ definition ujson/Readable. object Readable // ^^^^^^^^^^^^^^ reference ujson/ReadableLowPri# // reference java/lang/Object#``(). case class fromTransformer[T](t: T, w: Transformer[T]) extends Readable{ -// ^^^^^^^^^^^^^^^ definition ujson/Readable.fromTransformer# -// ^ definition ujson/Readable.fromTransformer#[T] -// definition ujson/Readable.fromTransformer#``(). -// ^ definition ujson/Readable.fromTransformer#t. +// ^^^^^^^^^^^^^^^ definition ujson/Readable.fromTransformer# case class fromTransformer(t: T, w: Transformer[T])[T] extends Readable +// ^ definition ujson/Readable.fromTransformer#[T] T +// definition ujson/Readable.fromTransformer#``(). def this(t: T, w: Transformer[T]) +// ^ definition ujson/Readable.fromTransformer#t. val t: T // ^ reference ujson/Readable.fromTransformer#[T] -// ^ definition ujson/Readable.fromTransformer#w. +// ^ definition ujson/Readable.fromTransformer#w. val w: Transformer[T] // ^^^^^^^^^^^ reference ujson/Transformer# // ^ reference ujson/Readable.fromTransformer#[T] // ^^^^^^^^ reference ujson/Readable# // reference java/lang/Object#``(). def transform[T](f: Visitor[_, T]): T = { -// ^^^^^^^^^ definition ujson/Readable.fromTransformer#transform(). -// ^ definition ujson/Readable.fromTransformer#transform().[T] -// ^ definition ujson/Readable.fromTransformer#transform().(f) +// ^^^^^^^^^ definition ujson/Readable.fromTransformer#transform(). def transform(f: Visitor[local1, T[): T +// ^ definition ujson/Readable.fromTransformer#transform().[T] T +// ^ definition ujson/Readable.fromTransformer#transform().(f) f: Visitor[local1, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/Readable.fromTransformer#transform().[T] // ^ reference ujson/Readable.fromTransformer#transform().[T] @@ -57,8 +57,8 @@ object Readable extends ReadableLowPri{ } } implicit def fromString(s: String): fromTransformer[String] = new fromTransformer(s, StringParser) -// ^^^^^^^^^^ definition ujson/Readable.fromString(). -// ^ definition ujson/Readable.fromString().(s) +// ^^^^^^^^^^ definition ujson/Readable.fromString(). implicit def fromString(s: String): fromTransformer[String] +// ^ definition ujson/Readable.fromString().(s) s: String // ^^^^^^ reference scala/Predef.String# // ^^^^^^^^^^^^^^^ reference ujson/Readable.fromTransformer# // ^^^^^^ reference scala/Predef.String# @@ -67,8 +67,8 @@ object Readable extends ReadableLowPri{ // ^ reference ujson/Readable.fromString().(s) // ^^^^^^^^^^^^ reference ujson/StringParser. implicit def fromCharSequence(s: CharSequence): fromTransformer[CharSequence] = new fromTransformer(s, CharSequenceParser) -// ^^^^^^^^^^^^^^^^ definition ujson/Readable.fromCharSequence(). -// ^ definition ujson/Readable.fromCharSequence().(s) +// ^^^^^^^^^^^^^^^^ definition ujson/Readable.fromCharSequence(). implicit def fromCharSequence(s: CharSequence): fromTransformer[CharSequence] +// ^ definition ujson/Readable.fromCharSequence().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# // ^^^^^^^^^^^^^^^ reference ujson/Readable.fromTransformer# // ^^^^^^^^^^^^ reference java/lang/CharSequence# @@ -77,23 +77,24 @@ object Readable extends ReadableLowPri{ // ^ reference ujson/Readable.fromCharSequence().(s) // ^^^^^^^^^^^^^^^^^^ reference ujson/CharSequenceParser. implicit def fromPath(s: java.nio.file.Path): Readable = new Readable { -// ^^^^^^^^ definition ujson/Readable.fromPath(). -// ^ definition ujson/Readable.fromPath().(s) +// ^^^^^^^^ definition ujson/Readable.fromPath(). implicit def fromPath(s: Path): Readable +// ^ definition ujson/Readable.fromPath().(s) s: Path // ^^^^ reference java/ // ^^^ reference java/nio/ // ^^^^ reference java/nio/file/ // ^^^^ reference java/nio/file/Path# // ^^^^^^^^ reference ujson/Readable# +// definition local3 final class $anon // ^^^^^^^^ reference ujson/Readable# // reference java/lang/Object#``(). override def transform[T](f: Visitor[_, T]) = { -// ^^^^^^^^^ definition local0 -// ^ definition local1 -// ^ definition local2 +// ^^^^^^^^^ definition local4 def transform(f: Visitor[local7, local6[): local6 +// ^ definition local6 T +// ^ definition local5 f: Visitor[local7, local6[ // ^^^^^^^ reference upickle/core/Visitor# -// ^ reference local1 +// ^ reference local6 val inputStream = java.nio.file.Files.newInputStream(s) -// ^^^^^^^^^^^ definition local3 +// ^^^^^^^^^^^ definition local8 inputStream: InputStream // ^^^^ reference java/ // ^^^ reference java/nio/ // ^^^^ reference java/nio/file/ @@ -103,16 +104,16 @@ object Readable extends ReadableLowPri{ try InputStreamParser.transform(inputStream, f) // ^^^^^^^^^^^^^^^^^ reference ujson/InputStreamParser. // ^^^^^^^^^ reference ujson/InputStreamParser.transform(). -// ^^^^^^^^^^^ reference local3 -// ^ reference local2 +// ^^^^^^^^^^^ reference local8 +// ^ reference local5 finally inputStream.close() -// ^^^^^^^^^^^ reference local3 +// ^^^^^^^^^^^ reference local8 // ^^^^^ reference java/io/InputStream#close(). } } implicit def fromFile(s: java.io.File): Readable = fromPath(s.toPath) -// ^^^^^^^^ definition ujson/Readable.fromFile(). -// ^ definition ujson/Readable.fromFile().(s) +// ^^^^^^^^ definition ujson/Readable.fromFile(). implicit def fromFile(s: File): Readable +// ^ definition ujson/Readable.fromFile().(s) s: File // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^ reference java/io/File# @@ -121,8 +122,8 @@ object Readable extends ReadableLowPri{ // ^ reference ujson/Readable.fromFile().(s) // ^^^^^^ reference java/io/File#toPath(). implicit def fromByteBuffer(s: ByteBuffer): fromTransformer[ByteBuffer] = new fromTransformer(s, ByteBufferParser) -// ^^^^^^^^^^^^^^ definition ujson/Readable.fromByteBuffer(). -// ^ definition ujson/Readable.fromByteBuffer().(s) +// ^^^^^^^^^^^^^^ definition ujson/Readable.fromByteBuffer(). implicit def fromByteBuffer(s: ByteBuffer): fromTransformer[ByteBuffer] +// ^ definition ujson/Readable.fromByteBuffer().(s) s: ByteBuffer // ^^^^^^^^^^ reference java/nio/ByteBuffer# // ^^^^^^^^^^^^^^^ reference ujson/Readable.fromTransformer# // ^^^^^^^^^^ reference java/nio/ByteBuffer# @@ -131,8 +132,8 @@ object Readable extends ReadableLowPri{ // ^ reference ujson/Readable.fromByteBuffer().(s) // ^^^^^^^^^^^^^^^^ reference ujson/ByteBufferParser. implicit def fromByteArray(s: Array[Byte]): fromTransformer[Array[Byte]] = new fromTransformer(s, ByteArrayParser) -// ^^^^^^^^^^^^^ definition ujson/Readable.fromByteArray(). -// ^ definition ujson/Readable.fromByteArray().(s) +// ^^^^^^^^^^^^^ definition ujson/Readable.fromByteArray(). implicit def fromByteArray(s: Array[Byte]): fromTransformer[Array[Byte]] +// ^ definition ujson/Readable.fromByteArray().(s) s: Array[Byte] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Byte# // ^^^^^^^^^^^^^^^ reference ujson/Readable.fromTransformer# @@ -145,32 +146,32 @@ object Readable extends ReadableLowPri{ } trait ReadableLowPri{ -// ^^^^^^^^^^^^^^ definition ujson/ReadableLowPri# +// ^^^^^^^^^^^^^^ definition ujson/ReadableLowPri# trait ReadableLowPri implicit def fromReadable[T](s: T)(implicit conv: T => geny.Readable): Readable = new Readable{ -// ^^^^^^^^^^^^ definition ujson/ReadableLowPri#fromReadable(). -// ^ definition ujson/ReadableLowPri#fromReadable().[T] -// ^ definition ujson/ReadableLowPri#fromReadable().(s) +// ^^^^^^^^^^^^ definition ujson/ReadableLowPri#fromReadable(). implicit def fromReadable(s: T)(conv: (T) => Readable): Readable +// ^ definition ujson/ReadableLowPri#fromReadable().[T] T +// ^ definition ujson/ReadableLowPri#fromReadable().(s) s: T // ^ reference ujson/ReadableLowPri#fromReadable().[T] -// ^^^^ definition ujson/ReadableLowPri#fromReadable().(conv) +// ^^^^ definition ujson/ReadableLowPri#fromReadable().(conv) implicit conv: (T) => Readable // ^ reference ujson/ReadableLowPri#fromReadable().[T] // ^^^^ reference geny/ // ^^^^^^^^ reference geny/Readable# // ^^^^^^^^ reference ujson/Readable# +// definition local9 final class $anon // ^^^^^^^^ reference ujson/Readable# // reference java/lang/Object#``(). def transform[T](f: Visitor[_, T]): T = conv(s).readBytesThrough(InputStreamParser.transform(_, f)) -// ^^^^^^^^^ definition local4 -// ^ definition local5 -// ^ definition local6 +// ^^^^^^^^^ definition local10 def transform(f: Visitor[local13, local12[): local12 +// ^ definition local12 T +// ^ definition local11 f: Visitor[local13, local12[ // ^^^^^^^ reference upickle/core/Visitor# -// ^ reference local5 -// ^ reference local5 +// ^ reference local12 +// ^ reference local12 // ^^^^ reference ujson/ReadableLowPri#fromReadable().(conv) -// reference scala/Function1#apply(). // ^ reference ujson/ReadableLowPri#fromReadable().(s) // ^^^^^^^^^^^^^^^^ reference geny/Readable#readBytesThrough(). // ^^^^^^^^^^^^^^^^^ reference ujson/InputStreamParser. // ^^^^^^^^^ reference ujson/InputStreamParser.transform(). -// ^ reference local6 +// ^ reference local11 } } diff --git a/tests/snapshots/src/main/generated/ujson/Renderer.scala b/tests/snapshots/src/main/generated/ujson/Renderer.scala index 572d53e1..e08ebed8 100644 --- a/tests/snapshots/src/main/generated/ujson/Renderer.scala +++ b/tests/snapshots/src/main/generated/ujson/Renderer.scala @@ -20,11 +20,11 @@ import scala.annotation.switch // ^^^^^^ reference scala/annotation/switch# case class BytesRenderer(indent: Int = -1, escapeUnicode: Boolean = false) -// ^^^^^^^^^^^^^ definition ujson/BytesRenderer# -// definition ujson/BytesRenderer#``(). -// ^^^^^^ definition ujson/BytesRenderer#indent. +// ^^^^^^^^^^^^^ definition ujson/BytesRenderer# case class BytesRenderer(indent: Int, escapeUnicode: Boolean) extends BaseByteRenderer[ByteArrayOutputStream] +// definition ujson/BytesRenderer#``(). def this(indent: Int, escapeUnicode: Boolean) +// ^^^^^^ definition ujson/BytesRenderer#indent. val indent: Int // ^^^ reference scala/Int# -// ^^^^^^^^^^^^^ definition ujson/BytesRenderer#escapeUnicode. +// ^^^^^^^^^^^^^ definition ujson/BytesRenderer#escapeUnicode. val escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# extends BaseByteRenderer(new ByteArrayOutputStream(), indent, escapeUnicode){ // ^^^^^^^^^^^^^^^^ reference ujson/BaseByteRenderer# @@ -37,12 +37,12 @@ case class BytesRenderer(indent: Int = -1, escapeUnicode: Boolean = false) case class StringRenderer(indent: Int = -1, -// ^^^^^^^^^^^^^^ definition ujson/StringRenderer# -// definition ujson/StringRenderer#``(). -// ^^^^^^ definition ujson/StringRenderer#indent. +// ^^^^^^^^^^^^^^ definition ujson/StringRenderer# case class StringRenderer(indent: Int, escapeUnicode: Boolean) extends BaseCharRenderer[StringWriter] +// definition ujson/StringRenderer#``(). def this(indent: Int, escapeUnicode: Boolean) +// ^^^^^^ definition ujson/StringRenderer#indent. val indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false) -// ^^^^^^^^^^^^^ definition ujson/StringRenderer#escapeUnicode. +// ^^^^^^^^^^^^^ definition ujson/StringRenderer#escapeUnicode. val escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# extends BaseCharRenderer(new java.io.StringWriter(), indent, escapeUnicode) // ^^^^^^^^^^^^^^^^ reference ujson/BaseCharRenderer# @@ -55,17 +55,17 @@ case class StringRenderer(indent: Int = -1, // ^^^^^^^^^^^^^ reference ujson/StringRenderer#``().(escapeUnicode) case class Renderer(out: java.io.Writer, -// ^^^^^^^^ definition ujson/Renderer# -// definition ujson/Renderer#``(). -// ^^^ definition ujson/Renderer#out. +// ^^^^^^^^ definition ujson/Renderer# case class Renderer(out: Writer, indent: Int, escapeUnicode: Boolean) extends BaseCharRenderer[Writer] +// definition ujson/Renderer#``(). def this(out: Writer, indent: Int, escapeUnicode: Boolean) +// ^^^ definition ujson/Renderer#out. val out: Writer // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^ reference java/io/Writer# indent: Int = -1, -// ^^^^^^ definition ujson/Renderer#indent. +// ^^^^^^ definition ujson/Renderer#indent. val indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false) -// ^^^^^^^^^^^^^ definition ujson/Renderer#escapeUnicode. +// ^^^^^^^^^^^^^ definition ujson/Renderer#escapeUnicode. val escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# extends BaseCharRenderer(out, indent, escapeUnicode) // ^^^^^^^^^^^^^^^^ reference ujson/BaseCharRenderer# diff --git a/tests/snapshots/src/main/generated/ujson/StringParser.scala b/tests/snapshots/src/main/generated/ujson/StringParser.scala index 9ef03b54..451673f8 100644 --- a/tests/snapshots/src/main/generated/ujson/StringParser.scala +++ b/tests/snapshots/src/main/generated/ujson/StringParser.scala @@ -22,29 +22,29 @@ import upickle.core.{ObjArrVisitor, Visitor} */ private[ujson] final class StringParser[J](s: String) extends CharParser[J]{ // ^^^^^ reference ujson/ -// ^^^^^^^^^^^^ definition ujson/StringParser# -// ^ definition ujson/StringParser#[J] -// definition ujson/StringParser#``(). -// ^ definition ujson/StringParser#s. +// ^^^^^^^^^^^^ definition ujson/StringParser# protected[ujson] final class StringParser[J] +// ^ definition ujson/StringParser#[J] J +// definition ujson/StringParser#``(). def this(s: String) +// ^ definition ujson/StringParser#s. private[this] val s: String // ^^^^^^ reference scala/Predef.String# // ^^^^^^^^^^ reference ujson/CharParser# // ^ reference ujson/StringParser#[J] // reference ujson/CharParser#``(). private[this] val sLength = s.length -// ^^^^^^^ definition ujson/StringParser#sLength. +// ^^^^^^^ definition ujson/StringParser#sLength. private[this] val sLength: Int // ^ reference ujson/StringParser#s. // ^^^^^^ reference java/lang/String#length(). override def growBuffer(until: Int): Unit = () -// ^^^^^^^^^^ definition ujson/StringParser#growBuffer(). -// ^^^^^ definition ujson/StringParser#growBuffer().(until) +// ^^^^^^^^^^ definition ujson/StringParser#growBuffer(). def growBuffer(until: Int): Unit +// ^^^^^ definition ujson/StringParser#growBuffer().(until) until: Int // ^^^ reference scala/Int# // ^^^^ reference scala/Unit# def readDataIntoBuffer(buffer: Array[Char], bufferOffset: Int) = { -// ^^^^^^^^^^^^^^^^^^ definition ujson/StringParser#readDataIntoBuffer(). -// ^^^^^^ definition ujson/StringParser#readDataIntoBuffer().(buffer) +// ^^^^^^^^^^^^^^^^^^ definition ujson/StringParser#readDataIntoBuffer(). def readDataIntoBuffer(buffer: Array[Char], bufferOffset: Int): (Array[Char], Boolean, Int) +// ^^^^^^ definition ujson/StringParser#readDataIntoBuffer().(buffer) buffer: Array[Char] // ^^^^^ reference scala/Array# // ^^^^ reference scala/Char# -// ^^^^^^^^^^^^ definition ujson/StringParser#readDataIntoBuffer().(bufferOffset) +// ^^^^^^^^^^^^ definition ujson/StringParser#readDataIntoBuffer().(bufferOffset) bufferOffset: Int // ^^^ reference scala/Int# if(buffer == null) (s.toCharArray, sLength == 0, sLength) // ^^^^^^ reference ujson/StringParser#readDataIntoBuffer().(buffer) @@ -58,20 +58,20 @@ private[ujson] final class StringParser[J](s: String) extends CharParser[J]{ // ^^^^^^ reference ujson/StringParser#readDataIntoBuffer().(buffer) } final def close() = () -// ^^^^^ definition ujson/StringParser#close(). +// ^^^^^ definition ujson/StringParser#close(). final def close(): Unit } object StringParser extends Transformer[String]{ -// ^^^^^^^^^^^^ definition ujson/StringParser. +// ^^^^^^^^^^^^ definition ujson/StringParser. object StringParser // ^^^^^^^^^^^ reference ujson/Transformer# // ^^^^^^ reference scala/Predef.String# // reference java/lang/Object#``(). def transform[T](j: String, f: Visitor[_, T]) = new StringParser(j).parse(f) -// ^^^^^^^^^ definition ujson/StringParser.transform(). -// ^ definition ujson/StringParser.transform().[T] -// ^ definition ujson/StringParser.transform().(j) +// ^^^^^^^^^ definition ujson/StringParser.transform(). def transform(j: String, f: Visitor[local0, T[): T +// ^ definition ujson/StringParser.transform().[T] T +// ^ definition ujson/StringParser.transform().(j) j: String // ^^^^^^ reference scala/Predef.String# -// ^ definition ujson/StringParser.transform().(f) +// ^ definition ujson/StringParser.transform().(f) f: Visitor[local0, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/StringParser.transform().[T] // ^^^^^^^^^^^^ reference ujson/StringParser# diff --git a/tests/snapshots/src/main/generated/ujson/Transformer.scala b/tests/snapshots/src/main/generated/ujson/Transformer.scala index 9e7668bf..8060f76c 100644 --- a/tests/snapshots/src/main/generated/ujson/Transformer.scala +++ b/tests/snapshots/src/main/generated/ujson/Transformer.scala @@ -7,24 +7,23 @@ import upickle.core.Visitor // ^^^^^^^ reference upickle/core/Visitor# trait Transformer[I] { -// ^^^^^^^^^^^ definition ujson/Transformer# -// ^ definition ujson/Transformer#[I] +// ^^^^^^^^^^^ definition ujson/Transformer# trait Transformer[I] +// ^ definition ujson/Transformer#[I] I def transform[T](j: I, f: Visitor[_, T]): T -// ^^^^^^^^^ definition ujson/Transformer#transform(). -// ^ definition ujson/Transformer#transform().[T] -// ^ definition ujson/Transformer#transform().(j) +// ^^^^^^^^^ definition ujson/Transformer#transform(). def transform(j: I, f: Visitor[local0, T[): T +// ^ definition ujson/Transformer#transform().[T] T +// ^ definition ujson/Transformer#transform().(j) j: I // ^ reference ujson/Transformer#[I] -// ^ definition ujson/Transformer#transform().(f) +// ^ definition ujson/Transformer#transform().(f) f: Visitor[local0, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/Transformer#transform().[T] // ^ reference ujson/Transformer#transform().[T] def transformable[T](j: I) = Readable.fromTransformer(j, this) -// ^^^^^^^^^^^^^ definition ujson/Transformer#transformable(). -// ^ definition ujson/Transformer#transformable().[T] -// ^ definition ujson/Transformer#transformable().(j) +// ^^^^^^^^^^^^^ definition ujson/Transformer#transformable(). def transformable(j: I): fromTransformer[I] +// ^ definition ujson/Transformer#transformable().[T] T +// ^ definition ujson/Transformer#transformable().(j) j: I // ^ reference ujson/Transformer#[I] // ^^^^^^^^ reference ujson/Readable. // ^^^^^^^^^^^^^^^ reference ujson/Readable.fromTransformer. -// reference ujson/Readable.fromTransformer.apply(). // ^ reference ujson/Transformer#transformable().(j) } diff --git a/tests/snapshots/src/main/generated/ujson/Value.scala b/tests/snapshots/src/main/generated/ujson/Value.scala index 2b334176..52b6a924 100644 --- a/tests/snapshots/src/main/generated/ujson/Value.scala +++ b/tests/snapshots/src/main/generated/ujson/Value.scala @@ -30,16 +30,15 @@ import scala.collection.mutable.ArrayBuffer // ^^^^^^^^^^^ reference scala/collection/mutable/ArrayBuffer# sealed trait Value extends Readable with geny.Writable{ -// ^^^^^ definition ujson/Value# +// ^^^^^ definition ujson/Value# sealed trait Value // ^^^^^^^^ reference ujson/Readable# // ^^^^ reference geny/ // ^^^^^^^^ reference geny/Writable# override def httpContentType = Some("application/json") -// ^^^^^^^^^^^^^^^ definition ujson/Value#httpContentType(). +// ^^^^^^^^^^^^^^^ definition ujson/Value#httpContentType(). def httpContentType: Some[String] // ^^^^ reference scala/Some. -// reference scala/Some.apply(). def value: Any -// ^^^^^ definition ujson/Value#value(). +// ^^^^^ definition ujson/Value#value(). def value: Any // ^^^ reference scala/Any# /** @@ -47,28 +46,26 @@ sealed trait Value extends Readable with geny.Writable{ * a [[ujson.Str]] */ def str = this match{ -// ^^^ definition ujson/Value#str(). +// ^^^ definition ujson/Value#str(). def str: String case ujson.Str(value) => value // ^^^^^ reference ujson/ // ^^^ reference ujson/Str. -// ^^^^^ definition local0 +// ^^^^^ definition local0 value: String // ^^^^^ reference local0 case _ => throw Value.InvalidData(this, "Expected ujson.Str") // ^^^^^ reference ujson/Value. // ^^^^^^^^^^^ reference ujson/Value.InvalidData. -// reference ujson/Value.InvalidData.apply(). } /** * Returns an Optional `String` value of this [[Value]] in case this [[Value]] is a 'String'. */ def strOpt = this match{ -// ^^^^^^ definition ujson/Value#strOpt(). +// ^^^^^^ definition ujson/Value#strOpt(). def strOpt: Option[String] case Str(value) => Some(value) // ^^^ reference ujson/Str. -// ^^^^^ definition local1 +// ^^^^^ definition local1 value: String // ^^^^ reference scala/Some. -// reference scala/Some.apply(). // ^^^^^ reference local1 case _ => None // ^^^^ reference scala/None. @@ -79,27 +76,25 @@ sealed trait Value extends Readable with geny.Writable{ * a [[ujson.Obj]] */ def obj = this match{ -// ^^^ definition ujson/Value#obj(). +// ^^^ definition ujson/Value#obj(). def obj: LinkedHashMap[String, Value] case ujson.Obj(value) => value // ^^^^^ reference ujson/ // ^^^ reference ujson/Obj. -// ^^^^^ definition local2 +// ^^^^^ definition local2 value: LinkedHashMap[String, Value] // ^^^^^ reference local2 case _ => throw Value.InvalidData(this, "Expected ujson.Obj") // ^^^^^ reference ujson/Value. // ^^^^^^^^^^^ reference ujson/Value.InvalidData. -// reference ujson/Value.InvalidData.apply(). } /** * Returns an Optional key/value map of this [[Value]] in case this [[Value]] is a 'Obj'. */ def objOpt = this match{ -// ^^^^^^ definition ujson/Value#objOpt(). +// ^^^^^^ definition ujson/Value#objOpt(). def objOpt: Option[LinkedHashMap[String, Value]] case Obj(value) => Some(value) // ^^^ reference ujson/Obj. -// ^^^^^ definition local3 +// ^^^^^ definition local3 value: LinkedHashMap[String, Value] // ^^^^ reference scala/Some. -// reference scala/Some.apply(). // ^^^^^ reference local3 case _ => None // ^^^^ reference scala/None. @@ -109,27 +104,25 @@ sealed trait Value extends Readable with geny.Writable{ * a [[ujson.Arr]] */ def arr = this match{ -// ^^^ definition ujson/Value#arr(). +// ^^^ definition ujson/Value#arr(). def arr: ArrayBuffer[Value] case ujson.Arr(value) => value // ^^^^^ reference ujson/ // ^^^ reference ujson/Arr. -// ^^^^^ definition local4 +// ^^^^^ definition local4 value: ArrayBuffer[Value] // ^^^^^ reference local4 case _ => throw Value.InvalidData(this, "Expected ujson.Arr") // ^^^^^ reference ujson/Value. // ^^^^^^^^^^^ reference ujson/Value.InvalidData. -// reference ujson/Value.InvalidData.apply(). } /** * Returns The optional elements of this [[Value]] in case this [[Value]] is a 'Arr'. */ def arrOpt = this match{ -// ^^^^^^ definition ujson/Value#arrOpt(). +// ^^^^^^ definition ujson/Value#arrOpt(). def arrOpt: Option[ArrayBuffer[Value]] case Arr(value) => Some(value) // ^^^ reference ujson/Arr. -// ^^^^^ definition local5 +// ^^^^^ definition local5 value: ArrayBuffer[Value] // ^^^^ reference scala/Some. -// reference scala/Some.apply(). // ^^^^^ reference local5 case _ => None // ^^^^ reference scala/None. @@ -139,27 +132,25 @@ sealed trait Value extends Readable with geny.Writable{ * a [[ujson.Num]] */ def num = this match{ -// ^^^ definition ujson/Value#num(). +// ^^^ definition ujson/Value#num(). def num: Double case ujson.Num(value) => value // ^^^^^ reference ujson/ // ^^^ reference ujson/Num. -// ^^^^^ definition local6 +// ^^^^^ definition local6 value: Double // ^^^^^ reference local6 case _ => throw Value.InvalidData(this, "Expected ujson.Num") // ^^^^^ reference ujson/Value. // ^^^^^^^^^^^ reference ujson/Value.InvalidData. -// reference ujson/Value.InvalidData.apply(). } /** * Returns an Option[Double] in case this [[Value]] is a 'Num'. */ def numOpt = this match{ -// ^^^^^^ definition ujson/Value#numOpt(). +// ^^^^^^ definition ujson/Value#numOpt(). def numOpt: Option[Double] case Num(value) => Some(value) // ^^^ reference ujson/Num. -// ^^^^^ definition local7 +// ^^^^^ definition local7 value: Double // ^^^^ reference scala/Some. -// reference scala/Some.apply(). // ^^^^^ reference local7 case _ => None // ^^^^ reference scala/None. @@ -169,29 +160,25 @@ sealed trait Value extends Readable with geny.Writable{ * a [[ujson.Bool]] */ def bool = this match{ -// ^^^^ definition ujson/Value#bool(). +// ^^^^ definition ujson/Value#bool(). def bool: Boolean case ujson.Bool(value) => value // ^^^^^ reference ujson/ // ^^^^ reference ujson/Bool. -// reference ujson/Bool.unapply(). -// ^^^^^ definition local8 +// ^^^^^ definition local8 value: Boolean // ^^^^^ reference local8 case _ => throw Value.InvalidData(this, "Expected ujson.Bool") // ^^^^^ reference ujson/Value. // ^^^^^^^^^^^ reference ujson/Value.InvalidData. -// reference ujson/Value.InvalidData.apply(). } /** * Returns an Optional `Boolean` value of this [[Value]] in case this [[Value]] is a 'Bool'. */ def boolOpt = this match{ -// ^^^^^^^ definition ujson/Value#boolOpt(). +// ^^^^^^^ definition ujson/Value#boolOpt(). def boolOpt: Option[Boolean] case Bool(value) => Some(value) // ^^^^ reference ujson/Bool. -// reference ujson/Bool.unapply(). -// ^^^^^ definition local9 +// ^^^^^ definition local9 value: Boolean // ^^^^ reference scala/Some. -// reference scala/Some.apply(). // ^^^^^ reference local9 case _ => None // ^^^^ reference scala/None. @@ -200,7 +187,7 @@ sealed trait Value extends Readable with geny.Writable{ * Returns true if the value of this [[Value]] is ujson.Null, false otherwise */ def isNull = this match { -// ^^^^^^ definition ujson/Value#isNull(). +// ^^^^^^ definition ujson/Value#isNull(). def isNull: Boolean case ujson.Null => true // ^^^^^ reference ujson/ // ^^^^ reference ujson/Null. @@ -208,23 +195,21 @@ sealed trait Value extends Readable with geny.Writable{ } def apply(s: Value.Selector): Value = s(this) -// ^^^^^ definition ujson/Value#apply(). -// ^ definition ujson/Value#apply().(s) +// ^^^^^ definition ujson/Value#apply(). def apply(s: Selector): Value +// ^ definition ujson/Value#apply().(s) s: Selector // ^^^^^ reference ujson/Value. // ^^^^^^^^ reference ujson/Value.Selector# // ^^^^^ reference ujson/Value# // ^ reference ujson/Value#apply().(s) -// reference ujson/Value.Selector#apply(). def update(s: Value.Selector, v: Value): Unit = s(this) = v -// ^^^^^^ definition ujson/Value#update(). -// ^ definition ujson/Value#update().(s) +// ^^^^^^ definition ujson/Value#update(). def update(s: Selector, v: Value): Unit +// ^ definition ujson/Value#update().(s) s: Selector // ^^^^^ reference ujson/Value. // ^^^^^^^^ reference ujson/Value.Selector# -// ^ definition ujson/Value#update().(v) +// ^ definition ujson/Value#update().(v) v: Value // ^^^^^ reference ujson/Value# // ^^^^ reference scala/Unit# // ^ reference ujson/Value#update().(s) -// reference ujson/Value.Selector#update(). // ^ reference ujson/Value#update().(v) /** @@ -235,55 +220,51 @@ sealed trait Value extends Readable with geny.Writable{ * of type inference problems in Scala 2.11. */ def update(s: Value.Selector, f: Value => Value): Unit = s(this) = f(s(this)) -// ^^^^^^ definition ujson/Value#update(+1). -// ^ definition ujson/Value#update(+1).(s) +// ^^^^^^ definition ujson/Value#update(+1). def update(s: Selector, f: (Value) => Value): Unit +// ^ definition ujson/Value#update(+1).(s) s: Selector // ^^^^^ reference ujson/Value. // ^^^^^^^^ reference ujson/Value.Selector# -// ^ definition ujson/Value#update(+1).(f) +// ^ definition ujson/Value#update(+1).(f) f: (Value) => Value // ^^^^^ reference ujson/Value# // ^^^^^ reference ujson/Value# // ^^^^ reference scala/Unit# // ^ reference ujson/Value#update(+1).(s) -// reference ujson/Value.Selector#update(). // ^ reference ujson/Value#update(+1).(f) -// reference scala/Function1#apply(). // ^ reference ujson/Value#update(+1).(s) -// reference ujson/Value.Selector#apply(). def transform[T](f: Visitor[_, T]) = Value.transform(this, f) -// ^^^^^^^^^ definition ujson/Value#transform(). -// ^ definition ujson/Value#transform().[T] -// ^ definition ujson/Value#transform().(f) +// ^^^^^^^^^ definition ujson/Value#transform(). def transform(f: Visitor[local10, T[): T +// ^ definition ujson/Value#transform().[T] T +// ^ definition ujson/Value#transform().(f) f: Visitor[local10, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/Value#transform().[T] // ^^^^^ reference ujson/Value. // ^^^^^^^^^ reference ujson/Value.transform(). // ^ reference ujson/Value#transform().(f) override def toString = render() -// ^^^^^^^^ definition ujson/Value#toString(). +// ^^^^^^^^ definition ujson/Value#toString(). def toString(): String // ^^^^^^ reference ujson/Value#render(). def render(indent: Int = -1, escapeUnicode: Boolean = false) = this.transform(StringRenderer(indent, escapeUnicode)).toString -// ^^^^^^ definition ujson/Value#render(). -// ^^^^^^ definition ujson/Value#render().(indent) +// ^^^^^^ definition ujson/Value#render(). def render(indent: Int, escapeUnicode: Boolean): String +// ^^^^^^ definition ujson/Value#render().(indent) default indent: Int // ^^^ reference scala/Int# -// ^^^^^^^^^^^^^ definition ujson/Value#render().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/Value#render().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^^^^^^ reference ujson/Value#transform(). // ^^^^^^^^^^^^^^ reference ujson/StringRenderer. -// reference ujson/StringRenderer.apply(). // ^^^^^^ reference ujson/Value#render().(indent) // ^^^^^^^^^^^^^ reference ujson/Value#render().(escapeUnicode) // ^^^^^^^^ reference java/io/StringWriter#toString(). def writeBytesTo(out: java.io.OutputStream, indent: Int = -1, escapeUnicode: Boolean = false): Unit = { -// ^^^^^^^^^^^^ definition ujson/Value#writeBytesTo(). -// ^^^ definition ujson/Value#writeBytesTo().(out) +// ^^^^^^^^^^^^ definition ujson/Value#writeBytesTo(). def writeBytesTo(out: OutputStream, indent: Int, escapeUnicode: Boolean): Unit +// ^^^ definition ujson/Value#writeBytesTo().(out) out: OutputStream // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^^ reference java/io/OutputStream# -// ^^^^^^ definition ujson/Value#writeBytesTo().(indent) +// ^^^^^^ definition ujson/Value#writeBytesTo().(indent) default indent: Int // ^^^ reference scala/Int# -// ^^^^^^^^^^^^^ definition ujson/Value#writeBytesTo().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/Value#writeBytesTo().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^ reference scala/Unit# this.transform(new ujson.BaseByteRenderer(out, indent, escapeUnicode)) @@ -296,8 +277,8 @@ sealed trait Value extends Readable with geny.Writable{ // ^^^^^^^^^^^^^ reference ujson/Value#writeBytesTo().(escapeUnicode) } def writeBytesTo(out: java.io.OutputStream): Unit = writeBytesTo(out, -1, false) -// ^^^^^^^^^^^^ definition ujson/Value#writeBytesTo(+1). -// ^^^ definition ujson/Value#writeBytesTo(+1).(out) +// ^^^^^^^^^^^^ definition ujson/Value#writeBytesTo(+1). def writeBytesTo(out: OutputStream): Unit +// ^^^ definition ujson/Value#writeBytesTo(+1).(out) out: OutputStream // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^^ reference java/io/OutputStream# @@ -313,84 +294,80 @@ sealed trait Value extends Readable with geny.Writable{ * JSON AST. */ object Value extends AstTransformer[Value]{ -// ^^^^^ definition ujson/Value. +// ^^^^^ definition ujson/Value. object Value // ^^^^^^^^^^^^^^ reference ujson/AstTransformer# // ^^^^^ reference ujson/Value# // reference java/lang/Object#``(). type Value = ujson.Value -// ^^^^^ definition ujson/Value.Value# +// ^^^^^ definition ujson/Value.Value# type Value >: Value <: Value // ^^^^^ reference ujson/ // ^^^^^ reference ujson/Value# sealed trait Selector{ -// ^^^^^^^^ definition ujson/Value.Selector# +// ^^^^^^^^ definition ujson/Value.Selector# sealed trait Selector def apply(x: Value): Value -// ^^^^^ definition ujson/Value.Selector#apply(). -// ^ definition ujson/Value.Selector#apply().(x) +// ^^^^^ definition ujson/Value.Selector#apply(). def apply(x: Value): Value +// ^ definition ujson/Value.Selector#apply().(x) x: Value // ^^^^^ reference ujson/Value.Value# // ^^^^^ reference ujson/Value.Value# def update(x: Value, y: Value): Unit -// ^^^^^^ definition ujson/Value.Selector#update(). -// ^ definition ujson/Value.Selector#update().(x) +// ^^^^^^ definition ujson/Value.Selector#update(). def update(x: Value, y: Value): Unit +// ^ definition ujson/Value.Selector#update().(x) x: Value // ^^^^^ reference ujson/Value.Value# -// ^ definition ujson/Value.Selector#update().(y) +// ^ definition ujson/Value.Selector#update().(y) y: Value // ^^^^^ reference ujson/Value.Value# // ^^^^ reference scala/Unit# } object Selector{ -// ^^^^^^^^ definition ujson/Value.Selector. +// ^^^^^^^^ definition ujson/Value.Selector. object Selector implicit class IntSelector(i: Int) extends Selector{ -// ^^^^^^^^^^^ definition ujson/Value.Selector.IntSelector# -// definition ujson/Value.Selector.IntSelector#``(). -// ^ definition ujson/Value.Selector.IntSelector#i. +// ^^^^^^^^^^^ definition ujson/Value.Selector.IntSelector# implicit class IntSelector +// definition ujson/Value.Selector.IntSelector#``(). def this(i: Int) +// ^ definition ujson/Value.Selector.IntSelector#i. private[this] val i: Int // ^^^ reference scala/Int# // ^^^^^^^^ reference ujson/Value.Selector# // reference java/lang/Object#``(). def apply(x: Value): Value = x.arr(i) -// ^^^^^ definition ujson/Value.Selector.IntSelector#apply(). -// ^ definition ujson/Value.Selector.IntSelector#apply().(x) +// ^^^^^ definition ujson/Value.Selector.IntSelector#apply(). def apply(x: Value): Value +// ^ definition ujson/Value.Selector.IntSelector#apply().(x) x: Value // ^^^^^ reference ujson/Value.Value# // ^^^^^ reference ujson/Value.Value# // ^ reference ujson/Value.Selector.IntSelector#apply().(x) // ^^^ reference ujson/Value#arr(). -// reference scala/collection/mutable/ArrayBuffer#apply(). // ^ reference ujson/Value.Selector.IntSelector#i. def update(x: Value, y: Value) = x.arr(i) = y -// ^^^^^^ definition ujson/Value.Selector.IntSelector#update(). -// ^ definition ujson/Value.Selector.IntSelector#update().(x) +// ^^^^^^ definition ujson/Value.Selector.IntSelector#update(). def update(x: Value, y: Value): Unit +// ^ definition ujson/Value.Selector.IntSelector#update().(x) x: Value // ^^^^^ reference ujson/Value.Value# -// ^ definition ujson/Value.Selector.IntSelector#update().(y) +// ^ definition ujson/Value.Selector.IntSelector#update().(y) y: Value // ^^^^^ reference ujson/Value.Value# // ^ reference ujson/Value.Selector.IntSelector#update().(x) // ^^^ reference ujson/Value#arr(). -// reference scala/collection/mutable/ArrayBuffer#update(). // ^ reference ujson/Value.Selector.IntSelector#i. // ^ reference ujson/Value.Selector.IntSelector#update().(y) } implicit class StringSelector(i: String) extends Selector{ -// ^^^^^^^^^^^^^^ definition ujson/Value.Selector.StringSelector# -// definition ujson/Value.Selector.StringSelector#``(). -// ^ definition ujson/Value.Selector.StringSelector#i. +// ^^^^^^^^^^^^^^ definition ujson/Value.Selector.StringSelector# implicit class StringSelector +// definition ujson/Value.Selector.StringSelector#``(). def this(i: String) +// ^ definition ujson/Value.Selector.StringSelector#i. private[this] val i: String // ^^^^^^ reference scala/Predef.String# // ^^^^^^^^ reference ujson/Value.Selector# // reference java/lang/Object#``(). def apply(x: Value): Value = x.obj(i) -// ^^^^^ definition ujson/Value.Selector.StringSelector#apply(). -// ^ definition ujson/Value.Selector.StringSelector#apply().(x) +// ^^^^^ definition ujson/Value.Selector.StringSelector#apply(). def apply(x: Value): Value +// ^ definition ujson/Value.Selector.StringSelector#apply().(x) x: Value // ^^^^^ reference ujson/Value.Value# // ^^^^^ reference ujson/Value.Value# // ^ reference ujson/Value.Selector.StringSelector#apply().(x) // ^^^ reference ujson/Value#obj(). -// reference scala/collection/MapOps#apply(). // ^ reference ujson/Value.Selector.StringSelector#i. def update(x: Value, y: Value) = x.obj(i) = y -// ^^^^^^ definition ujson/Value.Selector.StringSelector#update(). -// ^ definition ujson/Value.Selector.StringSelector#update().(x) +// ^^^^^^ definition ujson/Value.Selector.StringSelector#update(). def update(x: Value, y: Value): Unit +// ^ definition ujson/Value.Selector.StringSelector#update().(x) x: Value // ^^^^^ reference ujson/Value.Value# -// ^ definition ujson/Value.Selector.StringSelector#update().(y) +// ^ definition ujson/Value.Selector.StringSelector#update().(y) y: Value // ^^^^^ reference ujson/Value.Value# // ^ reference ujson/Value.Selector.StringSelector#update().(x) // ^^^ reference ujson/Value#obj(). -// reference scala/collection/mutable/LinkedHashMap#update(). // ^ reference ujson/Value.Selector.StringSelector#i. // ^ reference ujson/Value.Selector.StringSelector#update().(y) } @@ -400,141 +377,134 @@ object Value extends AstTransformer[Value]{ // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val Str = ujson.Str -// ^^^ definition ujson/Value.Str. +// ^^^ definition ujson/Value.Str. @deprecated val Str: Str.type // ^^^^^ reference ujson/ // ^^^ reference ujson/Str. @deprecated("use ujson.Str") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). type Str = ujson.Str -// ^^^ definition ujson/Value.Str# +// ^^^ definition ujson/Value.Str# type Str >: Str <: Str // ^^^^^ reference ujson/ // ^^^ reference ujson/Str# @deprecated("use ujson.Obj") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val Obj = ujson.Obj -// ^^^ definition ujson/Value.Obj. +// ^^^ definition ujson/Value.Obj. @deprecated val Obj: Obj.type // ^^^^^ reference ujson/ // ^^^ reference ujson/Obj. @deprecated("use ujson.Obj") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). type Obj = ujson.Obj -// ^^^ definition ujson/Value.Obj# +// ^^^ definition ujson/Value.Obj# type Obj >: Obj <: Obj // ^^^^^ reference ujson/ // ^^^ reference ujson/Obj# @deprecated("use ujson.Arr") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val Arr = ujson.Arr -// ^^^ definition ujson/Value.Arr. +// ^^^ definition ujson/Value.Arr. @deprecated val Arr: Arr.type // ^^^^^ reference ujson/ // ^^^ reference ujson/Arr. @deprecated("use ujson.Arr") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). type Arr = ujson.Arr -// ^^^ definition ujson/Value.Arr# +// ^^^ definition ujson/Value.Arr# type Arr >: Arr <: Arr // ^^^^^ reference ujson/ // ^^^ reference ujson/Arr# @deprecated("use ujson.Num") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val Num = ujson.Num -// ^^^ definition ujson/Value.Num. +// ^^^ definition ujson/Value.Num. @deprecated val Num: Num.type // ^^^^^ reference ujson/ // ^^^ reference ujson/Num. @deprecated("use ujson.Num") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). type Num = ujson.Num -// ^^^ definition ujson/Value.Num# +// ^^^ definition ujson/Value.Num# type Num >: Num <: Num // ^^^^^ reference ujson/ // ^^^ reference ujson/Num# @deprecated("use ujson.Bool") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val Bool = ujson.Bool -// ^^^^ definition ujson/Value.Bool. +// ^^^^ definition ujson/Value.Bool. @deprecated val Bool: Bool.type // ^^^^^ reference ujson/ // ^^^^ reference ujson/Bool. @deprecated("use ujson.Bool") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). type Bool = ujson.Bool -// ^^^^ definition ujson/Value.Bool# +// ^^^^ definition ujson/Value.Bool# type Bool >: Bool <: Bool // ^^^^^ reference ujson/ // ^^^^ reference ujson/Bool# @deprecated("use ujson.True") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val True = ujson.True -// ^^^^ definition ujson/Value.True. +// ^^^^ definition ujson/Value.True. @deprecated val True: True.type // ^^^^^ reference ujson/ // ^^^^ reference ujson/True. @deprecated("use ujson.False") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val False = ujson.False -// ^^^^^ definition ujson/Value.False. +// ^^^^^ definition ujson/Value.False. @deprecated val False: False.type // ^^^^^ reference ujson/ // ^^^^^ reference ujson/False. @deprecated("use ujson.Null") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val Null = ujson.Null -// ^^^^ definition ujson/Value.Null. +// ^^^^ definition ujson/Value.Null. @deprecated val Null: Null.type // ^^^^^ reference ujson/ // ^^^^ reference ujson/Null. implicit def JsonableSeq[T](items: TraversableOnce[T]) -// ^^^^^^^^^^^ definition ujson/Value.JsonableSeq(). -// ^ definition ujson/Value.JsonableSeq().[T] -// ^^^^^ definition ujson/Value.JsonableSeq().(items) +// ^^^^^^^^^^^ definition ujson/Value.JsonableSeq(). implicit def JsonableSeq(items: TraversableOnce[T])(f: (T) => Value): Arr +// ^ definition ujson/Value.JsonableSeq().[T] T +// ^^^^^ definition ujson/Value.JsonableSeq().(items) items: TraversableOnce[T] // ^^^^^^^^^^^^^^^ reference scala/package.TraversableOnce# // ^ reference ujson/Value.JsonableSeq().[T] (implicit f: T => Value): Arr = Arr.from(items.map(f)) -// ^ definition ujson/Value.JsonableSeq().(f) +// ^ definition ujson/Value.JsonableSeq().(f) implicit f: (T) => Value // ^ reference ujson/Value.JsonableSeq().[T] // ^^^^^ reference ujson/Value.Value# // ^^^ reference ujson/Value.Arr# // ^^^ reference ujson/Value.Arr. // ^^^^ reference ujson/Arr.from(). // ^^^^^ reference ujson/Value.JsonableSeq().(items) -// reference scala/collection/IterableOnce. -// reference scala/collection/IterableOnce.iterableOnceExtensionMethods(). // ^^^ reference scala/collection/IterableOnceExtensionMethods#map(). // ^ reference ujson/Value.JsonableSeq().(f) -// reference scala/Predef. -// reference scala/Predef.$conforms(). implicit def JsonableDict[T](items: TraversableOnce[(String, T)]) -// ^^^^^^^^^^^^ definition ujson/Value.JsonableDict(). -// ^ definition ujson/Value.JsonableDict().[T] -// ^^^^^ definition ujson/Value.JsonableDict().(items) +// ^^^^^^^^^^^^ definition ujson/Value.JsonableDict(). implicit def JsonableDict(items: TraversableOnce[(String, T)])(f: (T) => Value): Obj +// ^ definition ujson/Value.JsonableDict().[T] T +// ^^^^^ definition ujson/Value.JsonableDict().(items) items: TraversableOnce[(String, T)] // ^^^^^^^^^^^^^^^ reference scala/package.TraversableOnce# // ^^^^^^ reference scala/Predef.String# // ^ reference ujson/Value.JsonableDict().[T] (implicit f: T => Value): Obj = Obj.from(items.map(x => (x._1, f(x._2)))) -// ^ definition ujson/Value.JsonableDict().(f) +// ^ definition ujson/Value.JsonableDict().(f) implicit f: (T) => Value // ^ reference ujson/Value.JsonableDict().[T] // ^^^^^ reference ujson/Value.Value# // ^^^ reference ujson/Value.Obj# // ^^^ reference ujson/Value.Obj. // ^^^^ reference ujson/Obj.from(). // ^^^^^ reference ujson/Value.JsonableDict().(items) -// reference scala/collection/IterableOnce. -// reference scala/collection/IterableOnce.iterableOnceExtensionMethods(). // ^^^ reference scala/collection/IterableOnceExtensionMethods#map(). -// ^ definition local10 -// ^ reference local10 +// ^ definition local11 x: (String, T) +// ^ reference local11 // ^^ reference scala/Tuple2#_1. // ^ reference ujson/Value.JsonableDict().(f) -// reference scala/Function1#apply(). -// ^ reference local10 +// ^ reference local11 // ^^ reference scala/Tuple2#_2. implicit def JsonableBoolean(i: Boolean): Bool = if (i) ujson.True else ujson.False -// ^^^^^^^^^^^^^^^ definition ujson/Value.JsonableBoolean(). -// ^ definition ujson/Value.JsonableBoolean().(i) +// ^^^^^^^^^^^^^^^ definition ujson/Value.JsonableBoolean(). implicit def JsonableBoolean(i: Boolean): Bool +// ^ definition ujson/Value.JsonableBoolean().(i) i: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^ reference ujson/Value.Bool# // ^ reference ujson/Value.JsonableBoolean().(i) @@ -543,77 +513,70 @@ object Value extends AstTransformer[Value]{ // ^^^^^ reference ujson/ // ^^^^^ reference ujson/False. implicit def JsonableByte(i: Byte): Num = Num(i) -// ^^^^^^^^^^^^ definition ujson/Value.JsonableByte(). -// ^ definition ujson/Value.JsonableByte().(i) +// ^^^^^^^^^^^^ definition ujson/Value.JsonableByte(). implicit def JsonableByte(i: Byte): Num +// ^ definition ujson/Value.JsonableByte().(i) i: Byte // ^^^^ reference scala/Byte# // ^^^ reference ujson/Value.Num# // ^^^ reference ujson/Value.Num. -// reference ujson/Num.apply(). // ^ reference scala/Byte#toDouble(). implicit def JsonableShort(i: Short): Num = Num(i) -// ^^^^^^^^^^^^^ definition ujson/Value.JsonableShort(). -// ^ definition ujson/Value.JsonableShort().(i) +// ^^^^^^^^^^^^^ definition ujson/Value.JsonableShort(). implicit def JsonableShort(i: Short): Num +// ^ definition ujson/Value.JsonableShort().(i) i: Short // ^^^^^ reference scala/Short# // ^^^ reference ujson/Value.Num# // ^^^ reference ujson/Value.Num. -// reference ujson/Num.apply(). // ^ reference scala/Short#toDouble(). implicit def JsonableInt(i: Int): Num = Num(i) -// ^^^^^^^^^^^ definition ujson/Value.JsonableInt(). -// ^ definition ujson/Value.JsonableInt().(i) +// ^^^^^^^^^^^ definition ujson/Value.JsonableInt(). implicit def JsonableInt(i: Int): Num +// ^ definition ujson/Value.JsonableInt().(i) i: Int // ^^^ reference scala/Int# // ^^^ reference ujson/Value.Num# // ^^^ reference ujson/Value.Num. -// reference ujson/Num.apply(). // ^ reference scala/Int#toDouble(). implicit def JsonableLong(i: Long): Str = Str(i.toString) -// ^^^^^^^^^^^^ definition ujson/Value.JsonableLong(). -// ^ definition ujson/Value.JsonableLong().(i) +// ^^^^^^^^^^^^ definition ujson/Value.JsonableLong(). implicit def JsonableLong(i: Long): Str +// ^ definition ujson/Value.JsonableLong().(i) i: Long // ^^^^ reference scala/Long# // ^^^ reference ujson/Value.Str# // ^^^ reference ujson/Value.Str. -// reference ujson/Str.apply(). // ^ reference ujson/Value.JsonableLong().(i) // ^^^^^^^^ reference scala/Any#toString(). implicit def JsonableFloat(i: Float): Num = Num(i) -// ^^^^^^^^^^^^^ definition ujson/Value.JsonableFloat(). -// ^ definition ujson/Value.JsonableFloat().(i) +// ^^^^^^^^^^^^^ definition ujson/Value.JsonableFloat(). implicit def JsonableFloat(i: Float): Num +// ^ definition ujson/Value.JsonableFloat().(i) i: Float // ^^^^^ reference scala/Float# // ^^^ reference ujson/Value.Num# // ^^^ reference ujson/Value.Num. -// reference ujson/Num.apply(). // ^ reference scala/Float#toDouble(). implicit def JsonableDouble(i: Double): Num = Num(i) -// ^^^^^^^^^^^^^^ definition ujson/Value.JsonableDouble(). -// ^ definition ujson/Value.JsonableDouble().(i) +// ^^^^^^^^^^^^^^ definition ujson/Value.JsonableDouble(). implicit def JsonableDouble(i: Double): Num +// ^ definition ujson/Value.JsonableDouble().(i) i: Double // ^^^^^^ reference scala/Double# // ^^^ reference ujson/Value.Num# // ^^^ reference ujson/Value.Num. -// reference ujson/Num.apply(). // ^ reference ujson/Value.JsonableDouble().(i) implicit def JsonableNull(i: Null): Null.type = Null -// ^^^^^^^^^^^^ definition ujson/Value.JsonableNull(). -// ^ definition ujson/Value.JsonableNull().(i) +// ^^^^^^^^^^^^ definition ujson/Value.JsonableNull(). implicit def JsonableNull(i: Null): Null.type +// ^ definition ujson/Value.JsonableNull().(i) i: Null // ^^^^ reference scala/Null# // ^^^^ reference ujson/Value.Null. // ^^^^ reference ujson/Value.Null. implicit def JsonableString(s: CharSequence): Str = Str(s.toString) -// ^^^^^^^^^^^^^^ definition ujson/Value.JsonableString(). -// ^ definition ujson/Value.JsonableString().(s) +// ^^^^^^^^^^^^^^ definition ujson/Value.JsonableString(). implicit def JsonableString(s: CharSequence): Str +// ^ definition ujson/Value.JsonableString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# // ^^^ reference ujson/Value.Str# // ^^^ reference ujson/Value.Str. -// reference ujson/Str.apply(). // ^ reference ujson/Value.JsonableString().(s) // ^^^^^^^^ reference java/lang/Object#toString(). def transform[T](j: Value, f: Visitor[_, T]): T = { -// ^^^^^^^^^ definition ujson/Value.transform(). -// ^ definition ujson/Value.transform().[T] -// ^ definition ujson/Value.transform().(j) +// ^^^^^^^^^ definition ujson/Value.transform(). def transform(j: Value, f: Visitor[local12, T[): T +// ^ definition ujson/Value.transform().[T] T +// ^ definition ujson/Value.transform().(j) j: Value // ^^^^^ reference ujson/Value.Value# -// ^ definition ujson/Value.transform().(f) +// ^ definition ujson/Value.transform().(f) f: Visitor[local12, T[ // ^^^^^^^ reference upickle/core/Visitor# // ^ reference ujson/Value.transform().[T] // ^ reference ujson/Value.transform().[T] @@ -637,56 +600,53 @@ object Value extends AstTransformer[Value]{ case ujson.Str(s) => f.visitString(s, -1) // ^^^^^ reference ujson/ // ^^^ reference ujson/Str. -// ^ definition local11 +// ^ definition local13 s: String // ^ reference ujson/Value.transform().(f) // ^^^^^^^^^^^ reference upickle/core/Visitor#visitString(). -// ^ reference local11 +// ^ reference local13 case ujson.Num(d) => f.visitFloat64(d, -1) // ^^^^^ reference ujson/ // ^^^ reference ujson/Num. -// ^ definition local12 +// ^ definition local14 d: Double // ^ reference ujson/Value.transform().(f) // ^^^^^^^^^^^^ reference upickle/core/Visitor#visitFloat64(). -// ^ reference local12 +// ^ reference local14 case ujson.Arr(items) => transformArray(f, items) // ^^^^^ reference ujson/ // ^^^ reference ujson/Arr. -// ^^^^^ definition local13 +// ^^^^^ definition local15 items: ArrayBuffer[Value] // ^^^^^^^^^^^^^^ reference ujson/AstTransformer#transformArray(). // ^ reference ujson/Value.transform().(f) -// ^^^^^ reference local13 +// ^^^^^ reference local15 case ujson.Obj(items) => transformObject(f, items) // ^^^^^ reference ujson/ // ^^^ reference ujson/Obj. -// ^^^^^ definition local14 +// ^^^^^ definition local16 items: LinkedHashMap[String, Value] // ^^^^^^^^^^^^^^^ reference ujson/AstTransformer#transformObject(). // ^ reference ujson/Value.transform().(f) -// ^^^^^ reference local14 +// ^^^^^ reference local16 } } def visitArray(length: Int, index: Int) = new AstArrVisitor[ArrayBuffer](xs => ujson.Arr(xs)) -// ^^^^^^^^^^ definition ujson/Value.visitArray(). -// ^^^^^^ definition ujson/Value.visitArray().(length) +// ^^^^^^^^^^ definition ujson/Value.visitArray(). def visitArray(length: Int, index: Int): AstArrVisitor[ArrayBuffer] +// ^^^^^^ definition ujson/Value.visitArray().(length) length: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/Value.visitArray().(index) +// ^^^^^ definition ujson/Value.visitArray().(index) index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^^ reference ujson/AstTransformer#AstArrVisitor# // ^^^^^^^^^^^ reference scala/collection/mutable/ArrayBuffer# // reference ujson/AstTransformer#AstArrVisitor#``(). -// ^^ definition local15 +// ^^ definition local17 xs: ArrayBuffer[Value] // ^^^^^ reference ujson/ // ^^^ reference ujson/Arr. -// reference ujson/Arr.apply(+1). -// ^^ reference local15 -// reference scala/collection/mutable/ArrayBuffer. -// reference scala/collection/IterableFactory#iterableFactory(). +// ^^ reference local17 def visitObject(length: Int, index: Int) = new AstObjVisitor[mutable.LinkedHashMap[String, Value]](xs => ujson.Obj(xs)) -// ^^^^^^^^^^^ definition ujson/Value.visitObject(). -// ^^^^^^ definition ujson/Value.visitObject().(length) +// ^^^^^^^^^^^ definition ujson/Value.visitObject(). def visitObject(length: Int, index: Int): AstObjVisitor[LinkedHashMap[String, Value]] +// ^^^^^^ definition ujson/Value.visitObject().(length) length: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/Value.visitObject().(index) +// ^^^^^ definition ujson/Value.visitObject().(index) index: Int // ^^^ reference scala/Int# // ^^^^^^^^^^^^^ reference ujson/AstTransformer#AstObjVisitor# // ^^^^^^^ reference scala/collection/mutable/ @@ -694,49 +654,45 @@ object Value extends AstTransformer[Value]{ // ^^^^^^ reference scala/Predef.String# // ^^^^^ reference ujson/Value.Value# // reference ujson/AstTransformer#AstObjVisitor#``(). -// ^^ definition local16 +// ^^ definition local18 xs: LinkedHashMap[String, Value] // ^^^^^ reference ujson/ // ^^^ reference ujson/Obj. -// reference ujson/Obj.apply(+2). -// ^^ reference local16 -// reference scala/collection/mutable/LinkedHashMap. -// reference scala/collection/MapFactory#mapFactory(). +// ^^ reference local18 def visitNull(index: Int) = ujson.Null -// ^^^^^^^^^ definition ujson/Value.visitNull(). -// ^^^^^ definition ujson/Value.visitNull().(index) +// ^^^^^^^^^ definition ujson/Value.visitNull(). def visitNull(index: Int): Null +// ^^^^^ definition ujson/Value.visitNull().(index) index: Int // ^^^ reference scala/Int# // ^^^^^ reference ujson/ // ^^^^ reference ujson/Null. def visitFalse(index: Int) = ujson.False -// ^^^^^^^^^^ definition ujson/Value.visitFalse(). -// ^^^^^ definition ujson/Value.visitFalse().(index) +// ^^^^^^^^^^ definition ujson/Value.visitFalse(). def visitFalse(index: Int): False +// ^^^^^ definition ujson/Value.visitFalse().(index) index: Int // ^^^ reference scala/Int# // ^^^^^ reference ujson/ // ^^^^^ reference ujson/False. def visitTrue(index: Int) = True -// ^^^^^^^^^ definition ujson/Value.visitTrue(). -// ^^^^^ definition ujson/Value.visitTrue().(index) +// ^^^^^^^^^ definition ujson/Value.visitTrue(). def visitTrue(index: Int): True +// ^^^^^ definition ujson/Value.visitTrue().(index) index: Int // ^^^ reference scala/Int# // ^^^^ reference ujson/Value.True. override def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, index: Int) = { -// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/Value.visitFloat64StringParts(). -// ^ definition ujson/Value.visitFloat64StringParts().(s) +// ^^^^^^^^^^^^^^^^^^^^^^^ definition ujson/Value.visitFloat64StringParts(). def visitFloat64StringParts(s: CharSequence, decIndex: Int, expIndex: Int, index: Int): Num +// ^ definition ujson/Value.visitFloat64StringParts().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^^^^ definition ujson/Value.visitFloat64StringParts().(decIndex) +// ^^^^^^^^ definition ujson/Value.visitFloat64StringParts().(decIndex) decIndex: Int // ^^^ reference scala/Int# -// ^^^^^^^^ definition ujson/Value.visitFloat64StringParts().(expIndex) +// ^^^^^^^^ definition ujson/Value.visitFloat64StringParts().(expIndex) expIndex: Int // ^^^ reference scala/Int# -// ^^^^^ definition ujson/Value.visitFloat64StringParts().(index) +// ^^^^^ definition ujson/Value.visitFloat64StringParts().(index) index: Int // ^^^ reference scala/Int# ujson.Num( // ^^^^^ reference ujson/ // ^^^ reference ujson/Num. -// reference ujson/Num.apply(). if (decIndex != -1 || expIndex != -1) s.toString.toDouble // ^^^^^^^^ reference ujson/Value.visitFloat64StringParts().(decIndex) // ^^ reference scala/Int#`!=`(+3). @@ -745,7 +701,6 @@ object Value extends AstTransformer[Value]{ // ^^ reference scala/Int#`!=`(+3). // ^ reference ujson/Value.visitFloat64StringParts().(s) // ^^^^^^^^ reference java/lang/Object#toString(). -// reference scala/Predef.augmentString(). // ^^^^^^^^ reference scala/collection/StringOps#toDouble(). else Util.parseIntegralNum(s, decIndex, expIndex, index) // ^^^^ reference upickle/core/Util. @@ -758,25 +713,23 @@ object Value extends AstTransformer[Value]{ } override def visitFloat64(d: Double, index: Int) = ujson.Num(d) -// ^^^^^^^^^^^^ definition ujson/Value.visitFloat64(). -// ^ definition ujson/Value.visitFloat64().(d) +// ^^^^^^^^^^^^ definition ujson/Value.visitFloat64(). def visitFloat64(d: Double, index: Int): Num +// ^ definition ujson/Value.visitFloat64().(d) d: Double // ^^^^^^ reference scala/Double# -// ^^^^^ definition ujson/Value.visitFloat64().(index) +// ^^^^^ definition ujson/Value.visitFloat64().(index) index: Int // ^^^ reference scala/Int# // ^^^^^ reference ujson/ // ^^^ reference ujson/Num. -// reference ujson/Num.apply(). // ^ reference ujson/Value.visitFloat64().(d) def visitString(s: CharSequence, index: Int) = ujson.Str(s.toString) -// ^^^^^^^^^^^ definition ujson/Value.visitString(). -// ^ definition ujson/Value.visitString().(s) +// ^^^^^^^^^^^ definition ujson/Value.visitString(). def visitString(s: CharSequence, index: Int): Str +// ^ definition ujson/Value.visitString().(s) s: CharSequence // ^^^^^^^^^^^^ reference java/lang/CharSequence# -// ^^^^^ definition ujson/Value.visitString().(index) +// ^^^^^ definition ujson/Value.visitString().(index) index: Int // ^^^ reference scala/Int# // ^^^^^ reference ujson/ // ^^^ reference ujson/Str. -// reference ujson/Str.apply(). // ^ reference ujson/Value.visitString().(s) // ^^^^^^^^ reference java/lang/Object#toString(). @@ -789,32 +742,31 @@ object Value extends AstTransformer[Value]{ * @param msg Human-readable text saying what went wrong */ case class InvalidData(data: Value, msg: String) -// ^^^^^^^^^^^ definition ujson/Value.InvalidData# -// definition ujson/Value.InvalidData#``(). -// ^^^^ definition ujson/Value.InvalidData#data. +// ^^^^^^^^^^^ definition ujson/Value.InvalidData# case class InvalidData(data: Value, msg: String) extends Exception +// definition ujson/Value.InvalidData#``(). def this(data: Value, msg: String) +// ^^^^ definition ujson/Value.InvalidData#data. val data: Value // ^^^^^ reference ujson/Value.Value# -// ^^^ definition ujson/Value.InvalidData#msg. +// ^^^ definition ujson/Value.InvalidData#msg. val msg: String // ^^^^^^ reference scala/Predef.String# extends Exception(s"$msg (data: $data)") // ^^^^^^^^^ reference scala/package.Exception# // reference java/lang/Exception#``(+1). -// reference scala/StringContext.apply(). // ^ reference scala/StringContext#s(). // ^^^ reference ujson/Value.InvalidData#``().(msg) // ^^^^ reference ujson/Value.InvalidData#``().(data) } case class Str(value: String) extends Value -// ^^^ definition ujson/Str# -// definition ujson/Str#``(). -// ^^^^^ definition ujson/Str#value. +// ^^^ definition ujson/Str# case class Str(value: String) extends Value +// definition ujson/Str#``(). def this(value: String) +// ^^^^^ definition ujson/Str#value. val value: String // ^^^^^^ reference scala/Predef.String# // ^^^^^ reference ujson/Value# // reference java/lang/Object#``(). case class Obj(value: mutable.LinkedHashMap[String, Value]) extends Value -// ^^^ definition ujson/Obj# -// definition ujson/Obj#``(). -// ^^^^^ definition ujson/Obj#value. +// ^^^ definition ujson/Obj# case class Obj(value: LinkedHashMap[String, Value]) extends Value +// definition ujson/Obj#``(). def this(value: LinkedHashMap[String, Value]) +// ^^^^^ definition ujson/Obj#value. val value: LinkedHashMap[String, Value] // ^^^^^^^ reference scala/collection/mutable/ // ^^^^^^^^^^^^^ reference scala/collection/mutable/LinkedHashMap# // ^^^^^^ reference scala/Predef.String# @@ -823,23 +775,19 @@ case class Obj(value: mutable.LinkedHashMap[String, Value]) extends Value // reference java/lang/Object#``(). object Obj{ -// ^^^ definition ujson/Obj. +// ^^^ definition ujson/Obj. object Obj implicit def from(items: TraversableOnce[(String, Value)]): Obj = { -// ^^^^ definition ujson/Obj.from(). -// ^^^^^ definition ujson/Obj.from().(items) +// ^^^^ definition ujson/Obj.from(). implicit def from(items: TraversableOnce[(String, Value)]): Obj +// ^^^^^ definition ujson/Obj.from().(items) items: TraversableOnce[(String, Value)] // ^^^^^^^^^^^^^^^ reference scala/package.TraversableOnce# // ^^^^^^ reference scala/Predef.String# // ^^^^^ reference ujson/Value# // ^^^ reference ujson/Obj# Obj(mutable.LinkedHashMap(items.toSeq:_*)) // ^^^ reference ujson/Obj. -// reference ujson/Obj.apply(+2). // ^^^^^^^ reference scala/collection/mutable/ // ^^^^^^^^^^^^^ reference scala/collection/mutable/LinkedHashMap. -// reference scala/collection/MapFactory#apply(). // ^^^^^ reference ujson/Obj.from().(items) -// reference scala/collection/IterableOnce. -// reference scala/collection/IterableOnce.iterableOnceExtensionMethods(). // ^^^^^ reference scala/collection/IterableOnceExtensionMethods#toSeq(). } // Weird telescoped version of `apply(items: (String, Value)*)`, to avoid @@ -847,57 +795,52 @@ object Obj{ // generated by the case class itself // https://github.com/lihaoyi/upickle/issues/230 def apply[V](item: (String, V), -// ^^^^^ definition ujson/Obj.apply(). -// ^ definition ujson/Obj.apply().[V] -// ^^^^ definition ujson/Obj.apply().(item) +// ^^^^^ definition ujson/Obj.apply(). def apply(item: (String, V), items: (String, Value)*)(conv: (V) => Value): Obj +// ^ definition ujson/Obj.apply().[V] V +// ^^^^ definition ujson/Obj.apply().(item) item: (String, V) // ^^^^^^ reference scala/Predef.String# // ^ reference ujson/Obj.apply().[V] items: (String, Value)*)(implicit conv: V => Value): Obj = { -// ^^^^^ definition ujson/Obj.apply().(items) +// ^^^^^ definition ujson/Obj.apply().(items) items: (String, Value)* // ^^^^^^ reference scala/Predef.String# // ^^^^^ reference ujson/Value# -// ^^^^ definition ujson/Obj.apply().(conv) +// ^^^^ definition ujson/Obj.apply().(conv) implicit conv: (V) => Value // ^ reference ujson/Obj.apply().[V] // ^^^^^ reference ujson/Value# // ^^^ reference ujson/Obj# val map = new mutable.LinkedHashMap[String, Value]() -// ^^^ definition local17 +// ^^^ definition local22 map: LinkedHashMap[String, Value] // ^^^^^^^ reference scala/collection/mutable/ // ^^^^^^^^^^^^^ reference scala/collection/mutable/LinkedHashMap# // ^^^^^^ reference scala/Predef.String# // ^^^^^ reference ujson/Value# // reference scala/collection/mutable/LinkedHashMap#``(). map.put(item._1, conv(item._2)) -// ^^^ reference local17 +// ^^^ reference local22 // ^^^ reference scala/collection/mutable/LinkedHashMap#put(). // ^^^^ reference ujson/Obj.apply().(item) // ^^ reference scala/Tuple2#_1. // ^^^^ reference ujson/Obj.apply().(conv) -// reference scala/Function1#apply(). // ^^^^ reference ujson/Obj.apply().(item) // ^^ reference scala/Tuple2#_2. for (i <- items) map.put(i._1, i._2) -// ^ definition local18 +// ^ definition local23 i: (String, Value) // ^^^^^ reference ujson/Obj.apply().(items) -// ^^^ reference local17 +// ^^^ reference local22 // ^^^ reference scala/collection/mutable/LinkedHashMap#put(). -// ^ reference local18 +// ^ reference local23 // ^^ reference scala/Tuple2#_1. -// ^ reference local18 +// ^ reference local23 // ^^ reference scala/Tuple2#_2. -// reference scala/collection/IterableOnceOps#foreach(). -// reference local18 Obj(map) // ^^^ reference ujson/Obj. -// reference ujson/Obj.apply(+2). -// ^^^ reference local17 +// ^^^ reference local22 } def apply(): Obj = Obj(new mutable.LinkedHashMap[String, Value]()) -// ^^^^^ definition ujson/Obj.apply(+1). +// ^^^^^ definition ujson/Obj.apply(+1). def apply(): Obj // ^^^ reference ujson/Obj# // ^^^ reference ujson/Obj. -// reference ujson/Obj.apply(+2). // ^^^^^^^ reference scala/collection/mutable/ // ^^^^^^^^^^^^^ reference scala/collection/mutable/LinkedHashMap# // ^^^^^^ reference scala/Predef.String# @@ -905,59 +848,55 @@ object Obj{ // reference scala/collection/mutable/LinkedHashMap#``(). } case class Arr(value: ArrayBuffer[Value]) extends Value -// ^^^ definition ujson/Arr# -// definition ujson/Arr#``(). -// ^^^^^ definition ujson/Arr#value. +// ^^^ definition ujson/Arr# case class Arr(value: ArrayBuffer[Value]) extends Value +// definition ujson/Arr#``(). def this(value: ArrayBuffer[Value]) +// ^^^^^ definition ujson/Arr#value. val value: ArrayBuffer[Value] // ^^^^^^^^^^^ reference scala/collection/mutable/ArrayBuffer# // ^^^^^ reference ujson/Value# // ^^^^^ reference ujson/Value# // reference java/lang/Object#``(). object Arr{ -// ^^^ definition ujson/Arr. +// ^^^ definition ujson/Arr. object Arr implicit def from[T](items: TraversableOnce[T])(implicit conv: T => Value): Arr = { -// ^^^^ definition ujson/Arr.from(). -// ^ definition ujson/Arr.from().[T] -// ^^^^^ definition ujson/Arr.from().(items) +// ^^^^ definition ujson/Arr.from(). implicit def from(items: TraversableOnce[T])(conv: (T) => Value): Arr +// ^ definition ujson/Arr.from().[T] T +// ^^^^^ definition ujson/Arr.from().(items) items: TraversableOnce[T] // ^^^^^^^^^^^^^^^ reference scala/package.TraversableOnce# // ^ reference ujson/Arr.from().[T] -// ^^^^ definition ujson/Arr.from().(conv) +// ^^^^ definition ujson/Arr.from().(conv) implicit conv: (T) => Value // ^ reference ujson/Arr.from().[T] // ^^^^^ reference ujson/Value# // ^^^ reference ujson/Arr# val buf = new mutable.ArrayBuffer[Value]() -// ^^^ definition local19 +// ^^^ definition local25 buf: ArrayBuffer[Value] // ^^^^^^^ reference scala/collection/mutable/ // ^^^^^^^^^^^ reference scala/collection/mutable/ArrayBuffer# // ^^^^^ reference ujson/Value# // reference scala/collection/mutable/ArrayBuffer#``(+1). items.foreach{ item => // ^^^^^ reference ujson/Arr.from().(items) -// reference scala/collection/IterableOnce. -// reference scala/collection/IterableOnce.iterableOnceExtensionMethods(). // ^^^^^^^ reference scala/collection/IterableOnceExtensionMethods#foreach(). -// ^^^^ definition local20 +// ^^^^ definition local26 item: T buf += (conv(item): Value) -// ^^^ reference local19 +// ^^^ reference local25 // ^^ reference scala/collection/mutable/Growable#`+=`(). // ^^^^ reference ujson/Arr.from().(conv) -// reference scala/Function1#apply(). -// ^^^^ reference local20 +// ^^^^ reference local26 // ^^^^^ reference ujson/Value# } Arr(buf) // ^^^ reference ujson/Arr. -// reference ujson/Arr.apply(+1). -// ^^^ reference local19 +// ^^^ reference local25 } def apply(items: Value*): Arr = { -// ^^^^^ definition ujson/Arr.apply(). -// ^^^^^ definition ujson/Arr.apply().(items) +// ^^^^^ definition ujson/Arr.apply(). def apply(items: Value*): Arr +// ^^^^^ definition ujson/Arr.apply().(items) items: Value* // ^^^^^ reference ujson/Value# // ^^^ reference ujson/Arr# val buf = new mutable.ArrayBuffer[Value](items.length) -// ^^^ definition local21 +// ^^^ definition local27 buf: ArrayBuffer[Value] // ^^^^^^^ reference scala/collection/mutable/ // ^^^^^^^^^^^ reference scala/collection/mutable/ArrayBuffer# // ^^^^^ reference ujson/Value# @@ -967,73 +906,71 @@ object Arr{ items.foreach{ item => // ^^^^^ reference ujson/Arr.apply().(items) // ^^^^^^^ reference scala/collection/IterableOnceOps#foreach(). -// ^^^^ definition local22 +// ^^^^ definition local28 item: Value buf += item -// ^^^ reference local21 +// ^^^ reference local27 // ^^ reference scala/collection/mutable/Growable#`+=`(). -// ^^^^ reference local22 +// ^^^^ reference local28 } Arr(buf) // ^^^ reference ujson/Arr. -// reference ujson/Arr.apply(+1). -// ^^^ reference local21 +// ^^^ reference local27 } } case class Num(value: Double) extends Value -// ^^^ definition ujson/Num# -// definition ujson/Num#``(). -// ^^^^^ definition ujson/Num#value. +// ^^^ definition ujson/Num# case class Num(value: Double) extends Value +// definition ujson/Num#``(). def this(value: Double) +// ^^^^^ definition ujson/Num#value. val value: Double // ^^^^^^ reference scala/Double# // ^^^^^ reference ujson/Value# // reference java/lang/Object#``(). sealed abstract class Bool extends Value{ -// ^^^^ definition ujson/Bool# -// definition ujson/Bool#``(). +// ^^^^ definition ujson/Bool# abstract sealed class Bool +// definition ujson/Bool#``(). def this() // ^^^^^ reference ujson/Value# // reference java/lang/Object#``(). def value: Boolean -// ^^^^^ definition ujson/Bool#value(). +// ^^^^^ definition ujson/Bool#value(). def value: Boolean // ^^^^^^^ reference scala/Boolean# } object Bool{ -// ^^^^ definition ujson/Bool. +// ^^^^ definition ujson/Bool. object Bool def apply(value: Boolean): Bool = if (value) True else False -// ^^^^^ definition ujson/Bool.apply(). -// ^^^^^ definition ujson/Bool.apply().(value) +// ^^^^^ definition ujson/Bool.apply(). def apply(value: Boolean): Bool +// ^^^^^ definition ujson/Bool.apply().(value) value: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^ reference ujson/Bool# // ^^^^^ reference ujson/Bool.apply().(value) // ^^^^ reference ujson/True. // ^^^^^ reference ujson/False. def unapply(bool: Bool): Option[Boolean] = Some(bool.value) -// ^^^^^^^ definition ujson/Bool.unapply(). -// ^^^^ definition ujson/Bool.unapply().(bool) +// ^^^^^^^ definition ujson/Bool.unapply(). def unapply(bool: Bool): Option[Boolean] +// ^^^^ definition ujson/Bool.unapply().(bool) bool: Bool // ^^^^ reference ujson/Bool# // ^^^^^^ reference scala/Option# // ^^^^^^^ reference scala/Boolean# // ^^^^ reference scala/Some. -// reference scala/Some.apply(). // ^^^^ reference ujson/Bool.unapply().(bool) // ^^^^^ reference ujson/Bool#value(). } case object False extends Bool{ -// ^^^^^ definition ujson/False. +// ^^^^^ definition ujson/False. case object False // ^^^^ reference ujson/Bool# // reference ujson/Bool#``(). def value = false -// ^^^^^ definition ujson/False.value(). +// ^^^^^ definition ujson/False.value(). def value: Boolean } case object True extends Bool{ -// ^^^^ definition ujson/True. +// ^^^^ definition ujson/True. case object True // ^^^^ reference ujson/Bool# // reference ujson/Bool#``(). def value = true -// ^^^^^ definition ujson/True.value(). +// ^^^^^ definition ujson/True.value(). def value: Boolean } case object Null extends Value{ -// ^^^^ definition ujson/Null. +// ^^^^ definition ujson/Null. case object Null // ^^^^^ reference ujson/Value# // reference java/lang/Object#``(). def value = null -// ^^^^^ definition ujson/Null.value(). +// ^^^^^ definition ujson/Null.value(). def value: Null } diff --git a/tests/snapshots/src/main/generated/ujson/package.scala b/tests/snapshots/src/main/generated/ujson/package.scala index 6194b526..e85c765e 100644 --- a/tests/snapshots/src/main/generated/ujson/package.scala +++ b/tests/snapshots/src/main/generated/ujson/package.scala @@ -4,13 +4,13 @@ import upickle.core.NoOpVisitor // ^^^^^^^^^^^ reference upickle/core/NoOpVisitor. package object ujson{ -// ^^^^^ definition ujson/package. +// ^^^^^ definition ujson/package. package object ujson def transform[T](t: Readable, v: upickle.core.Visitor[_, T]) = t.transform(v) -// ^^^^^^^^^ definition ujson/package.transform(). -// ^ definition ujson/package.transform().[T] -// ^ definition ujson/package.transform().(t) +// ^^^^^^^^^ definition ujson/package.transform(). def transform(t: Readable, v: Visitor[local0, T[): T +// ^ definition ujson/package.transform().[T] T +// ^ definition ujson/package.transform().(t) t: Readable // ^^^^^^^^ reference ujson/Readable# -// ^ definition ujson/package.transform().(v) +// ^ definition ujson/package.transform().(v) v: Visitor[local0, T[ // ^^^^^^^ reference upickle/ // ^^^^ reference upickle/core/ // ^^^^^^^ reference upickle/core/Visitor# @@ -23,10 +23,10 @@ package object ujson{ * Read the given JSON input as a JSON struct */ def read(s: Readable, trace: Boolean = false): Value.Value = -// ^^^^ definition ujson/package.read(). -// ^ definition ujson/package.read().(s) +// ^^^^ definition ujson/package.read(). def read(s: Readable, trace: Boolean): Value +// ^ definition ujson/package.read().(s) s: Readable // ^^^^^^^^ reference ujson/Readable# -// ^^^^^ definition ujson/package.read().(trace) +// ^^^^^ definition ujson/package.read().(trace) default trace: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^^ reference ujson/Value. // ^^^^^ reference ujson/Value.Value# @@ -41,8 +41,8 @@ package object ujson{ // ^ reference ujson/package.read().(s) def copy(t: Value.Value): Value.Value = transform(t, Value) -// ^^^^ definition ujson/package.copy(). -// ^ definition ujson/package.copy().(t) +// ^^^^ definition ujson/package.copy(). def copy(t: Value): Value +// ^ definition ujson/package.copy().(t) t: Value // ^^^^^ reference ujson/Value. // ^^^^^ reference ujson/Value.Value# // ^^^^^ reference ujson/Value. @@ -55,19 +55,19 @@ package object ujson{ * Write the given JSON struct as a JSON String */ def write(t: Value.Value, -// ^^^^^ definition ujson/package.write(). -// ^ definition ujson/package.write().(t) +// ^^^^^ definition ujson/package.write(). def write(t: Value, indent: Int, escapeUnicode: Boolean): String +// ^ definition ujson/package.write().(t) t: Value // ^^^^^ reference ujson/Value. // ^^^^^ reference ujson/Value.Value# indent: Int = -1, -// ^^^^^^ definition ujson/package.write().(indent) +// ^^^^^^ definition ujson/package.write().(indent) default indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false): String = { -// ^^^^^^^^^^^^^ definition ujson/package.write().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/package.write().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^^^ reference scala/Predef.String# val writer = new java.io.StringWriter -// ^^^^^^ definition local0 +// ^^^^^^ definition local1 writer: StringWriter // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^^ reference java/io/StringWriter# @@ -75,11 +75,11 @@ package object ujson{ writeTo(t, writer, indent, escapeUnicode) // ^^^^^^^ reference ujson/package.writeTo(). // ^ reference ujson/package.write().(t) -// ^^^^^^ reference local0 +// ^^^^^^ reference local1 // ^^^^^^ reference ujson/package.write().(indent) // ^^^^^^^^^^^^^ reference ujson/package.write().(escapeUnicode) writer.toString -// ^^^^^^ reference local0 +// ^^^^^^ reference local1 // ^^^^^^^^ reference java/io/StringWriter#toString(). } @@ -87,46 +87,45 @@ package object ujson{ * Write the given JSON struct as a JSON String to the given Writer */ def writeTo(t: Value.Value, -// ^^^^^^^ definition ujson/package.writeTo(). -// ^ definition ujson/package.writeTo().(t) +// ^^^^^^^ definition ujson/package.writeTo(). def writeTo(t: Value, out: Writer, indent: Int, escapeUnicode: Boolean): Unit +// ^ definition ujson/package.writeTo().(t) t: Value // ^^^^^ reference ujson/Value. // ^^^^^ reference ujson/Value.Value# out: java.io.Writer, -// ^^^ definition ujson/package.writeTo().(out) +// ^^^ definition ujson/package.writeTo().(out) out: Writer // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^ reference java/io/Writer# indent: Int = -1, -// ^^^^^^ definition ujson/package.writeTo().(indent) +// ^^^^^^ definition ujson/package.writeTo().(indent) default indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false): Unit = { -// ^^^^^^^^^^^^^ definition ujson/package.writeTo().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/package.writeTo().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^ reference scala/Unit# transform(t, Renderer(out, indent, escapeUnicode)) // ^^^^^^^^^ reference ujson/package.transform(). // ^ reference ujson/package.writeTo().(t) // ^^^^^^^^ reference ujson/Renderer. -// reference ujson/Renderer.apply(). // ^^^ reference ujson/package.writeTo().(out) // ^^^^^^ reference ujson/package.writeTo().(indent) // ^^^^^^^^^^^^^ reference ujson/package.writeTo().(escapeUnicode) } def writeToOutputStream(t: Value.Value, -// ^^^^^^^^^^^^^^^^^^^ definition ujson/package.writeToOutputStream(). -// ^ definition ujson/package.writeToOutputStream().(t) +// ^^^^^^^^^^^^^^^^^^^ definition ujson/package.writeToOutputStream(). def writeToOutputStream(t: Value, out: OutputStream, indent: Int, escapeUnicode: Boolean): Unit +// ^ definition ujson/package.writeToOutputStream().(t) t: Value // ^^^^^ reference ujson/Value. // ^^^^^ reference ujson/Value.Value# out: java.io.OutputStream, -// ^^^ definition ujson/package.writeToOutputStream().(out) +// ^^^ definition ujson/package.writeToOutputStream().(out) out: OutputStream // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^^ reference java/io/OutputStream# indent: Int = -1, -// ^^^^^^ definition ujson/package.writeToOutputStream().(indent) +// ^^^^^^ definition ujson/package.writeToOutputStream().(indent) default indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false): Unit = { -// ^^^^^^^^^^^^^ definition ujson/package.writeToOutputStream().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/package.writeToOutputStream().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^ reference scala/Unit# transform(t, new BaseByteRenderer(out, indent, escapeUnicode)) @@ -140,18 +139,18 @@ package object ujson{ } def writeToByteArray(t: Value.Value, -// ^^^^^^^^^^^^^^^^ definition ujson/package.writeToByteArray(). -// ^ definition ujson/package.writeToByteArray().(t) +// ^^^^^^^^^^^^^^^^ definition ujson/package.writeToByteArray(). def writeToByteArray(t: Value, indent: Int, escapeUnicode: Boolean): Array[Byte] +// ^ definition ujson/package.writeToByteArray().(t) t: Value // ^^^^^ reference ujson/Value. // ^^^^^ reference ujson/Value.Value# indent: Int = -1, -// ^^^^^^ definition ujson/package.writeToByteArray().(indent) +// ^^^^^^ definition ujson/package.writeToByteArray().(indent) default indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false) = { -// ^^^^^^^^^^^^^ definition ujson/package.writeToByteArray().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/package.writeToByteArray().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# val baos = new java.io.ByteArrayOutputStream -// ^^^^ definition local1 +// ^^^^ definition local2 baos: ByteArrayOutputStream // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^^^^^^^^^^^ reference java/io/ByteArrayOutputStream# @@ -159,11 +158,11 @@ package object ujson{ writeToOutputStream(t, baos, indent, escapeUnicode) // ^^^^^^^^^^^^^^^^^^^ reference ujson/package.writeToOutputStream(). // ^ reference ujson/package.writeToByteArray().(t) -// ^^^^ reference local1 +// ^^^^ reference local2 // ^^^^^^ reference ujson/package.writeToByteArray().(indent) // ^^^^^^^^^^^^^ reference ujson/package.writeToByteArray().(escapeUnicode) baos.toByteArray -// ^^^^ reference local1 +// ^^^^ reference local2 // ^^^^^^^^^^^ reference java/io/ByteArrayOutputStream#toByteArray(). } @@ -171,8 +170,8 @@ package object ujson{ * Parse the given JSON input, failing if it is invalid */ def validate(s: Readable): Unit = transform(s, NoOpVisitor) -// ^^^^^^^^ definition ujson/package.validate(). -// ^ definition ujson/package.validate().(s) +// ^^^^^^^^ definition ujson/package.validate(). def validate(s: Readable): Unit +// ^ definition ujson/package.validate().(s) s: Readable // ^^^^^^^^ reference ujson/Readable# // ^^^^ reference scala/Unit# // ^^^^^^^^^ reference ujson/package.transform(). @@ -183,16 +182,16 @@ package object ujson{ * the configured formatting */ def reformat(s: Readable, indent: Int = -1, escapeUnicode: Boolean = false): String = { -// ^^^^^^^^ definition ujson/package.reformat(). -// ^ definition ujson/package.reformat().(s) +// ^^^^^^^^ definition ujson/package.reformat(). def reformat(s: Readable, indent: Int, escapeUnicode: Boolean): String +// ^ definition ujson/package.reformat().(s) s: Readable // ^^^^^^^^ reference ujson/Readable# -// ^^^^^^ definition ujson/package.reformat().(indent) +// ^^^^^^ definition ujson/package.reformat().(indent) default indent: Int // ^^^ reference scala/Int# -// ^^^^^^^^^^^^^ definition ujson/package.reformat().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/package.reformat().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^^^ reference scala/Predef.String# val writer = new java.io.StringWriter() -// ^^^^^^ definition local2 +// ^^^^^^ definition local3 writer: StringWriter // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^^ reference java/io/StringWriter# @@ -200,11 +199,11 @@ package object ujson{ reformatTo(s, writer, indent, escapeUnicode) // ^^^^^^^^^^ reference ujson/package.reformatTo(). // ^ reference ujson/package.reformat().(s) -// ^^^^^^ reference local2 +// ^^^^^^ reference local3 // ^^^^^^ reference ujson/package.reformat().(indent) // ^^^^^^^^^^^^^ reference ujson/package.reformat().(escapeUnicode) writer.toString -// ^^^^^^ reference local2 +// ^^^^^^ reference local3 // ^^^^^^^^ reference java/io/StringWriter#toString(). } /** @@ -212,23 +211,22 @@ package object ujson{ * the configured formatting to the given Writer */ def reformatTo(s: Readable, out: java.io.Writer, indent: Int = -1, escapeUnicode: Boolean = false): Unit = { -// ^^^^^^^^^^ definition ujson/package.reformatTo(). -// ^ definition ujson/package.reformatTo().(s) +// ^^^^^^^^^^ definition ujson/package.reformatTo(). def reformatTo(s: Readable, out: Writer, indent: Int, escapeUnicode: Boolean): Unit +// ^ definition ujson/package.reformatTo().(s) s: Readable // ^^^^^^^^ reference ujson/Readable# -// ^^^ definition ujson/package.reformatTo().(out) +// ^^^ definition ujson/package.reformatTo().(out) out: Writer // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^ reference java/io/Writer# -// ^^^^^^ definition ujson/package.reformatTo().(indent) +// ^^^^^^ definition ujson/package.reformatTo().(indent) default indent: Int // ^^^ reference scala/Int# -// ^^^^^^^^^^^^^ definition ujson/package.reformatTo().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/package.reformatTo().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^ reference scala/Unit# transform(s, Renderer(out, indent, escapeUnicode)) // ^^^^^^^^^ reference ujson/package.transform(). // ^ reference ujson/package.reformatTo().(s) // ^^^^^^^^ reference ujson/Renderer. -// reference ujson/Renderer.apply(). // ^^^ reference ujson/package.reformatTo().(out) // ^^^^^^ reference ujson/package.reformatTo().(indent) // ^^^^^^^^^^^^^ reference ujson/package.reformatTo().(escapeUnicode) @@ -238,19 +236,19 @@ package object ujson{ * the configured formatting to the given Writer */ def reformatToOutputStream(s: Readable, -// ^^^^^^^^^^^^^^^^^^^^^^ definition ujson/package.reformatToOutputStream(). -// ^ definition ujson/package.reformatToOutputStream().(s) +// ^^^^^^^^^^^^^^^^^^^^^^ definition ujson/package.reformatToOutputStream(). def reformatToOutputStream(s: Readable, out: OutputStream, indent: Int, escapeUnicode: Boolean): Unit +// ^ definition ujson/package.reformatToOutputStream().(s) s: Readable // ^^^^^^^^ reference ujson/Readable# out: java.io.OutputStream, -// ^^^ definition ujson/package.reformatToOutputStream().(out) +// ^^^ definition ujson/package.reformatToOutputStream().(out) out: OutputStream // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^^ reference java/io/OutputStream# indent: Int = -1, -// ^^^^^^ definition ujson/package.reformatToOutputStream().(indent) +// ^^^^^^ definition ujson/package.reformatToOutputStream().(indent) default indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false): Unit = { -// ^^^^^^^^^^^^^ definition ujson/package.reformatToOutputStream().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/package.reformatToOutputStream().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# // ^^^^ reference scala/Unit# transform(s, new BaseByteRenderer(out, indent, escapeUnicode)) @@ -263,17 +261,17 @@ package object ujson{ // ^^^^^^^^^^^^^ reference ujson/package.reformatToOutputStream().(escapeUnicode) } def reformatToByteArray(s: Readable, -// ^^^^^^^^^^^^^^^^^^^ definition ujson/package.reformatToByteArray(). -// ^ definition ujson/package.reformatToByteArray().(s) +// ^^^^^^^^^^^^^^^^^^^ definition ujson/package.reformatToByteArray(). def reformatToByteArray(s: Readable, indent: Int, escapeUnicode: Boolean): Array[Byte] +// ^ definition ujson/package.reformatToByteArray().(s) s: Readable // ^^^^^^^^ reference ujson/Readable# indent: Int = -1, -// ^^^^^^ definition ujson/package.reformatToByteArray().(indent) +// ^^^^^^ definition ujson/package.reformatToByteArray().(indent) default indent: Int // ^^^ reference scala/Int# escapeUnicode: Boolean = false) = { -// ^^^^^^^^^^^^^ definition ujson/package.reformatToByteArray().(escapeUnicode) +// ^^^^^^^^^^^^^ definition ujson/package.reformatToByteArray().(escapeUnicode) default escapeUnicode: Boolean // ^^^^^^^ reference scala/Boolean# val baos = new java.io.ByteArrayOutputStream -// ^^^^ definition local3 +// ^^^^ definition local4 baos: ByteArrayOutputStream // ^^^^ reference java/ // ^^ reference java/io/ // ^^^^^^^^^^^^^^^^^^^^^ reference java/io/ByteArrayOutputStream# @@ -281,11 +279,11 @@ package object ujson{ reformatToOutputStream(s, baos, indent, escapeUnicode) // ^^^^^^^^^^^^^^^^^^^^^^ reference ujson/package.reformatToOutputStream(). // ^ reference ujson/package.reformatToByteArray().(s) -// ^^^^ reference local3 +// ^^^^ reference local4 // ^^^^^^ reference ujson/package.reformatToByteArray().(indent) // ^^^^^^^^^^^^^ reference ujson/package.reformatToByteArray().(escapeUnicode) baos.toByteArray -// ^^^^ reference local3 +// ^^^^ reference local4 // ^^^^^^^^^^^ reference java/io/ByteArrayOutputStream#toByteArray(). } // End ujson @@ -293,12 +291,12 @@ package object ujson{ // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). type Js = Value -// ^^ definition ujson/package.Js# +// ^^ definition ujson/package.Js# type Js >: Value <: Value // ^^^^^ reference ujson/Value# @deprecated("use ujson.Value") // ^^^^^^^^^^ reference scala/deprecated# // reference scala/deprecated#``(). val Js = Value -// ^^ definition ujson/package.Js. +// ^^ definition ujson/package.Js. @deprecated val Js: // ^^^^^ reference ujson/Value. } diff --git a/tests/snapshots/src/main/scala/tests/LibrarySnapshotGenerator.scala b/tests/snapshots/src/main/scala/tests/LibrarySnapshotGenerator.scala index df7c0881..f88811f9 100644 --- a/tests/snapshots/src/main/scala/tests/LibrarySnapshotGenerator.scala +++ b/tests/snapshots/src/main/scala/tests/LibrarySnapshotGenerator.scala @@ -1,108 +1,85 @@ package tests +import java.io.ByteArrayOutputStream +import java.io.PrintStream import java.nio.charset.StandardCharsets import java.nio.file.FileSystems +import java.nio.file.FileVisitResult import java.nio.file.Files import java.nio.file.Path -import java.util.concurrent.atomic.AtomicInteger +import java.nio.file.SimpleFileVisitor +import java.nio.file.attribute.BasicFileAttributes import scala.util.Properties -import scala.meta.inputs.Input -import scala.meta.internal.io.FileIO -import scala.meta.io.AbsolutePath - -import com.sourcegraph.io.DeleteVisitor -import com.sourcegraph.lsif_java.Dependencies -import com.sourcegraph.lsif_java.SemanticdbPrinters +import com.sourcegraph.lsif_java.LsifJava +import moped.reporters.ConsoleReporter class LibrarySnapshotGenerator extends SnapshotGenerator { val scalaPattern = FileSystems.getDefault.getPathMatcher("glob:**.scala") val javaPattern = FileSystems.getDefault.getPathMatcher("glob:**.java") - private case class IndexMetrics(occurrenceCount: Int, linesOfCode: Int) + def runLsifJava(arguments: List[String]): Unit = { + val baos = new ByteArrayOutputStream + val exitCode = LsifJava + .app + .withReporter(ConsoleReporter(new PrintStream(baos))) + .withEnv( + LsifJava + .app + .env + .withStandardOutput(new PrintStream(baos)) + .withStandardError(new PrintStream(baos)) + .withExit(i => throw new RuntimeException(i.toString())) + ) + .run(arguments) + if (exitCode != 0) { + throw new RuntimeException(baos.toString()) + } + } override def run(context: SnapshotContext, handler: SnapshotHandler): Unit = { val gen = new Gen(context, handler) - gen.checkLibrary( - "com.airbnb.android:epoxy:4.3.1", - isIncluded = jar => jar.contains("epoxy") - ) + gen.checkLibrary("com.airbnb.android:epoxy:4.3.1") gen.checkLibrary( "com.lihaoyi:ujson_2.13:1.4.0", provided = List( s"org.scala-lang:scala-library:${Properties.versionNumberString}" - ), - isIncluded = jar => jar.contains("ujson") + ) ) } + private class Gen(context: SnapshotContext, handler: SnapshotHandler) { - def checkLibrary( - name: String, - provided: List[String] = Nil, - isIncluded: String => Boolean = _ => true - ): Unit = { + def checkLibrary(name: String, provided: List[String] = Nil): Unit = { println(s"indexing library '$name'") - val deps = Dependencies.resolveDependencies(name :: provided) - val counter = new AtomicInteger() + val providedArguments = provided.flatMap(p => List("--provided", p)) val targetroot = Files.createTempDirectory("semanticdb-javac") - - val compiler = - new TestCompiler( - deps.classpathSyntax, - javacOptions = List("-Xlint:none"), - scalacOptions = Nil, - targetroot - ) - val timer = new Timer() - val toIndex = deps.sources.filter(p => isIncluded(p.getFileName.toString)) - toIndex.foreach { source => - val metrics = compileSourcesJar(source, compiler) - val i = counter.incrementAndGet() - val message = - f"$i%3s/${toIndex.size} jars; $timer%6s; " + - f"${metrics.occurrenceCount}%,.0f occurrences; " + - f"${metrics.linesOfCode}%,.0f loc; " + f"${source.getFileName}" - println(message) - } - Files.walkFileTree(targetroot, new DeleteVisitor()) - } - - private def compileSourcesJar( - source: Path, - compiler: TestCompiler - ): IndexMetrics = { - var occurrenceCount, linesOfCode = 0 - FileIO - .withJarFileSystem(AbsolutePath(source), create = false, close = true) { - root => - val inputs = - FileIO - .listAllFilesRecursively(root) - .iterator - .filter(file => - javaPattern.matches(file.toNIO) || - scalaPattern.matches(file.toNIO) - ) - .map { file => - val relpath = file.toRelative(root).toString() - val text = FileIO.slurp(file, StandardCharsets.UTF_8) - linesOfCode += text.linesIterator.size - Input.VirtualFile(relpath, text) - } - .toArray - - val result = compiler.compileSemanticdb(inputs) - result - .textDocuments - .getDocumentsList - .forEach { textDocument => - occurrenceCount += textDocument.getOccurrencesCount - val print = SemanticdbPrinters.printTextDocument(textDocument) - val out = context.expectDirectory.resolve(textDocument.getUri) - handler.onSnapshotTest(context, out, () => print) - } + val snapshotDir = Files.createTempDirectory("semanticdb-javac") + runLsifJava( + List( + "index-dependency", + "--snapshot", + "--dependency", + name, + "--output", + snapshotDir.toString() + ) ++ providedArguments + ) + val root = snapshotDir.toFile().listFiles().head.toPath() + Files.walkFileTree( + root, + new SimpleFileVisitor[Path] { + override def visitFile( + file: Path, + attrs: BasicFileAttributes + ): FileVisitResult = { + val print = + new String(Files.readAllBytes(file), StandardCharsets.UTF_8) + val out = context.expectDirectory.resolve(root.relativize(file)) + handler.onSnapshotTest(context, out, () => print) + super.visitFile(file, attrs) + } } - IndexMetrics(occurrenceCount, linesOfCode) + ) } } }