Add core-lambda-stubs to classpath

Add core-lambda-stubs to the bootclasspath for modules with no
sdk_version or with sdk_version: "current", and to the classpath
for modules that specify a specific sdk_version number.

Fixes compiling modules with lambdas against the SDK.

Bug: 80428539
Test: java_test.go
Change-Id: I5e700f2dd86f1a6b84b7a55dd9bfe21a448d3fb6
diff --git a/java/config/config.go b/java/config/config.go
index d44315c..4a74c7c 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -30,6 +30,7 @@
 	DefaultBootclasspathLibraries = []string{"core-oj", "core-libart"}
 	DefaultSystemModules          = "core-system-modules"
 	DefaultLibraries              = []string{"ext", "framework", "okhttp"}
+	DefaultLambdaStubsLibraries   = []string{"core-lambda-stubs"}
 
 	DefaultJacocoExcludeFilter = []string{"org.junit.*", "org.jacoco.*", "org.mockito.*"}
 
diff --git a/java/java.go b/java/java.go
index 02fdc00..7abd299 100644
--- a/java/java.go
+++ b/java/java.go
@@ -479,6 +479,7 @@
 			sdkDep := decodeSdkDep(ctx, String(j.deviceProperties.Sdk_version))
 			if sdkDep.useDefaultLibs {
 				ctx.AddDependency(ctx.Module(), bootClasspathTag, config.DefaultBootclasspathLibraries...)
+				ctx.AddDependency(ctx.Module(), bootClasspathTag, config.DefaultLambdaStubsLibraries...)
 				if ctx.Config().TargetOpenJDK9() {
 					ctx.AddDependency(ctx.Module(), systemModulesTag, config.DefaultSystemModules)
 				}
@@ -490,10 +491,13 @@
 					ctx.AddDependency(ctx.Module(), systemModulesTag, sdkDep.systemModules)
 				}
 				ctx.AddDependency(ctx.Module(), bootClasspathTag, sdkDep.module)
+				ctx.AddDependency(ctx.Module(), bootClasspathTag, config.DefaultLambdaStubsLibraries...)
 				if Bool(j.deviceProperties.Optimize.Enabled) {
 					ctx.AddDependency(ctx.Module(), proguardRaiseTag, config.DefaultBootclasspathLibraries...)
 					ctx.AddDependency(ctx.Module(), proguardRaiseTag, config.DefaultLibraries...)
 				}
+			} else if sdkDep.useFiles {
+				ctx.AddDependency(ctx.Module(), libTag, config.DefaultLambdaStubsLibraries...)
 			}
 		} else if j.deviceProperties.System_modules == nil {
 			ctx.PropertyErrorf("no_standard_libs",
@@ -625,8 +629,9 @@
 
 func getLinkType(m *Module, name string) linkType {
 	ver := String(m.deviceProperties.Sdk_version)
+	noStdLibs := Bool(m.properties.No_standard_libs)
 	switch {
-	case name == "core.current.stubs" || ver == "core_current":
+	case name == "core.current.stubs" || ver == "core_current" || noStdLibs:
 		return javaCore
 	case name == "android_system_stubs_current" || strings.HasPrefix(ver, "system_"):
 		return javaSystem
diff --git a/java/java_test.go b/java/java_test.go
index baf4b72..03a623b 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -98,6 +98,7 @@
 	extraModules := []string{
 		"core-oj",
 		"core-libart",
+		"core-lambda-stubs",
 		"framework",
 		"ext",
 		"okhttp",
@@ -347,14 +348,14 @@
 }{
 	{
 		name:          "default",
-		bootclasspath: []string{"core-oj", "core-libart"},
+		bootclasspath: []string{"core-oj", "core-libart", "core-lambda-stubs"},
 		system:        "core-system-modules",
 		classpath:     []string{"ext", "framework", "okhttp"},
 	},
 	{
 		name:          "blank sdk version",
 		properties:    `sdk_version: "",`,
-		bootclasspath: []string{"core-oj", "core-libart"},
+		bootclasspath: []string{"core-oj", "core-libart", "core-lambda-stubs"},
 		system:        "core-system-modules",
 		classpath:     []string{"ext", "framework", "okhttp"},
 	},
@@ -364,20 +365,20 @@
 		properties:    `sdk_version: "14",`,
 		bootclasspath: []string{`""`},
 		system:        "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
-		classpath:     []string{"prebuilts/sdk/14/public/android.jar"},
+		classpath:     []string{"prebuilts/sdk/14/public/android.jar", "core-lambda-stubs"},
 	},
 	{
 
 		name:          "current",
 		properties:    `sdk_version: "current",`,
-		bootclasspath: []string{"android_stubs_current"},
+		bootclasspath: []string{"android_stubs_current", "core-lambda-stubs"},
 		system:        "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
 	},
 	{
 
 		name:          "system_current",
 		properties:    `sdk_version: "system_current",`,
-		bootclasspath: []string{"android_system_stubs_current"},
+		bootclasspath: []string{"android_system_stubs_current", "core-lambda-stubs"},
 		system:        "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
 	},
 	{
@@ -386,20 +387,20 @@
 		properties:    `sdk_version: "system_14",`,
 		bootclasspath: []string{`""`},
 		system:        "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
-		classpath:     []string{"prebuilts/sdk/14/system/android.jar"},
+		classpath:     []string{"prebuilts/sdk/14/system/android.jar", "core-lambda-stubs"},
 	},
 	{
 
 		name:          "test_current",
 		properties:    `sdk_version: "test_current",`,
-		bootclasspath: []string{"android_test_stubs_current"},
+		bootclasspath: []string{"android_test_stubs_current", "core-lambda-stubs"},
 		system:        "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
 	},
 	{
 
 		name:          "core_current",
 		properties:    `sdk_version: "core_current",`,
-		bootclasspath: []string{"core.current.stubs"},
+		bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"},
 		system:        "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
 	},
 	{