Merge "Improve java.go readability." am: 9f315dea28
am: b163cc04ce
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1627239 Change-Id: Ia0b76e8b4bb0c366a9254052e2f2fe5bfc74701d
This commit is contained in:
commit
b348954705
|
@ -302,7 +302,7 @@ func (a *AndroidApp) checkAppSdkVersions(ctx android.ModuleContext) {
|
||||||
// This check is enforced for "updatable" APKs (including APK-in-APEX).
|
// This check is enforced for "updatable" APKs (including APK-in-APEX).
|
||||||
// b/155209650: until min_sdk_version is properly supported, use sdk_version instead.
|
// b/155209650: until min_sdk_version is properly supported, use sdk_version instead.
|
||||||
// because, sdk_version is overridden by min_sdk_version (if set as smaller)
|
// because, sdk_version is overridden by min_sdk_version (if set as smaller)
|
||||||
// and linkType is checked with dependencies so we can be sure that the whole dependency tree
|
// and sdkLinkType is checked with dependencies so we can be sure that the whole dependency tree
|
||||||
// will meet the requirements.
|
// will meet the requirements.
|
||||||
func (a *AndroidApp) checkJniLibsSdkVersion(ctx android.ModuleContext, minSdkVersion sdkVersion) {
|
func (a *AndroidApp) checkJniLibsSdkVersion(ctx android.ModuleContext, minSdkVersion sdkVersion) {
|
||||||
// It's enough to check direct JNI deps' sdk_version because all transitive deps from JNI deps are checked in cc.checkLinkType()
|
// It's enough to check direct JNI deps' sdk_version because all transitive deps from JNI deps are checked in cc.checkLinkType()
|
||||||
|
|
215
java/java.go
215
java/java.go
|
@ -37,6 +37,36 @@ import (
|
||||||
func init() {
|
func init() {
|
||||||
RegisterJavaBuildComponents(android.InitRegistrationContext)
|
RegisterJavaBuildComponents(android.InitRegistrationContext)
|
||||||
|
|
||||||
|
RegisterJavaSdkMemberTypes()
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterJavaBuildComponents(ctx android.RegistrationContext) {
|
||||||
|
ctx.RegisterModuleType("java_defaults", DefaultsFactory)
|
||||||
|
|
||||||
|
ctx.RegisterModuleType("java_library", LibraryFactory)
|
||||||
|
ctx.RegisterModuleType("java_library_static", LibraryStaticFactory)
|
||||||
|
ctx.RegisterModuleType("java_library_host", LibraryHostFactory)
|
||||||
|
ctx.RegisterModuleType("java_binary", BinaryFactory)
|
||||||
|
ctx.RegisterModuleType("java_binary_host", BinaryHostFactory)
|
||||||
|
ctx.RegisterModuleType("java_test", TestFactory)
|
||||||
|
ctx.RegisterModuleType("java_test_helper_library", TestHelperLibraryFactory)
|
||||||
|
ctx.RegisterModuleType("java_test_host", TestHostFactory)
|
||||||
|
ctx.RegisterModuleType("java_test_import", JavaTestImportFactory)
|
||||||
|
ctx.RegisterModuleType("java_import", ImportFactory)
|
||||||
|
ctx.RegisterModuleType("java_import_host", ImportFactoryHost)
|
||||||
|
ctx.RegisterModuleType("java_device_for_host", DeviceForHostFactory)
|
||||||
|
ctx.RegisterModuleType("java_host_for_device", HostForDeviceFactory)
|
||||||
|
ctx.RegisterModuleType("dex_import", DexImportFactory)
|
||||||
|
|
||||||
|
ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||||
|
ctx.BottomUp("dexpreopt_tool_deps", dexpreoptToolDepsMutator).Parallel()
|
||||||
|
})
|
||||||
|
|
||||||
|
ctx.RegisterSingletonType("logtags", LogtagsSingleton)
|
||||||
|
ctx.RegisterSingletonType("kythe_java_extract", kytheExtractJavaFactory)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterJavaSdkMemberTypes() {
|
||||||
// Register sdk member types.
|
// Register sdk member types.
|
||||||
android.RegisterSdkMemberType(javaHeaderLibsSdkMemberType)
|
android.RegisterSdkMemberType(javaHeaderLibsSdkMemberType)
|
||||||
|
|
||||||
|
@ -89,85 +119,7 @@ func init() {
|
||||||
PropertyName: "java_tests",
|
PropertyName: "java_tests",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
|
||||||
|
|
||||||
func RegisterJavaBuildComponents(ctx android.RegistrationContext) {
|
|
||||||
ctx.RegisterModuleType("java_defaults", DefaultsFactory)
|
|
||||||
|
|
||||||
ctx.RegisterModuleType("java_library", LibraryFactory)
|
|
||||||
ctx.RegisterModuleType("java_library_static", LibraryStaticFactory)
|
|
||||||
ctx.RegisterModuleType("java_library_host", LibraryHostFactory)
|
|
||||||
ctx.RegisterModuleType("java_binary", BinaryFactory)
|
|
||||||
ctx.RegisterModuleType("java_binary_host", BinaryHostFactory)
|
|
||||||
ctx.RegisterModuleType("java_test", TestFactory)
|
|
||||||
ctx.RegisterModuleType("java_test_helper_library", TestHelperLibraryFactory)
|
|
||||||
ctx.RegisterModuleType("java_test_host", TestHostFactory)
|
|
||||||
ctx.RegisterModuleType("java_test_import", JavaTestImportFactory)
|
|
||||||
ctx.RegisterModuleType("java_import", ImportFactory)
|
|
||||||
ctx.RegisterModuleType("java_import_host", ImportFactoryHost)
|
|
||||||
ctx.RegisterModuleType("java_device_for_host", DeviceForHostFactory)
|
|
||||||
ctx.RegisterModuleType("java_host_for_device", HostForDeviceFactory)
|
|
||||||
ctx.RegisterModuleType("dex_import", DexImportFactory)
|
|
||||||
|
|
||||||
ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
|
||||||
ctx.BottomUp("dexpreopt_tool_deps", dexpreoptToolDepsMutator).Parallel()
|
|
||||||
})
|
|
||||||
|
|
||||||
ctx.RegisterSingletonType("logtags", LogtagsSingleton)
|
|
||||||
ctx.RegisterSingletonType("kythe_java_extract", kytheExtractJavaFactory)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (j *Module) CheckStableSdkVersion() error {
|
|
||||||
sdkVersion := j.sdkVersion()
|
|
||||||
if sdkVersion.stable() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if sdkVersion.kind == sdkCorePlatform {
|
|
||||||
if useLegacyCorePlatformApiByName(j.BaseModuleName()) {
|
|
||||||
return fmt.Errorf("non stable SDK %v - uses legacy core platform", sdkVersion)
|
|
||||||
} else {
|
|
||||||
// Treat stable core platform as stable.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return fmt.Errorf("non stable SDK %v", sdkVersion)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (j *Module) checkSdkVersions(ctx android.ModuleContext) {
|
|
||||||
if j.RequiresStableAPIs(ctx) {
|
|
||||||
if sc, ok := ctx.Module().(sdkContext); ok {
|
|
||||||
if !sc.sdkVersion().specified() {
|
|
||||||
ctx.PropertyErrorf("sdk_version",
|
|
||||||
"sdk_version must have a value when the module is located at vendor or product(only if PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE is set).")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.VisitDirectDeps(func(module android.Module) {
|
|
||||||
tag := ctx.OtherModuleDependencyTag(module)
|
|
||||||
switch module.(type) {
|
|
||||||
// TODO(satayev): cover other types as well, e.g. imports
|
|
||||||
case *Library, *AndroidLibrary:
|
|
||||||
switch tag {
|
|
||||||
case bootClasspathTag, libTag, staticLibTag, java9LibTag:
|
|
||||||
checkLinkType(ctx, j, module.(linkTypeContext), tag.(dependencyTag))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (j *Module) checkPlatformAPI(ctx android.ModuleContext) {
|
|
||||||
if sc, ok := ctx.Module().(sdkContext); ok {
|
|
||||||
usePlatformAPI := proptools.Bool(j.deviceProperties.Platform_apis)
|
|
||||||
sdkVersionSpecified := sc.sdkVersion().specified()
|
|
||||||
if usePlatformAPI && sdkVersionSpecified {
|
|
||||||
ctx.PropertyErrorf("platform_apis", "platform_apis must be false when sdk_version is not empty.")
|
|
||||||
} else if !usePlatformAPI && !sdkVersionSpecified {
|
|
||||||
ctx.PropertyErrorf("platform_apis", "platform_apis must be true when sdk_version is empty.")
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO:
|
// TODO:
|
||||||
|
@ -179,7 +131,8 @@ func (j *Module) checkPlatformAPI(ctx android.ModuleContext) {
|
||||||
// DroidDoc
|
// DroidDoc
|
||||||
// Findbugs
|
// Findbugs
|
||||||
|
|
||||||
type CompilerProperties struct {
|
// Properties that are common to most Java modules, i.e. whether it's a host or device module.
|
||||||
|
type CommonProperties struct {
|
||||||
// list of source files used to compile the Java module. May be .java, .kt, .logtags, .proto,
|
// list of source files used to compile the Java module. May be .java, .kt, .logtags, .proto,
|
||||||
// or .aidl files.
|
// or .aidl files.
|
||||||
Srcs []string `android:"path,arch_variant"`
|
Srcs []string `android:"path,arch_variant"`
|
||||||
|
@ -312,7 +265,9 @@ type CompilerProperties struct {
|
||||||
Hiddenapi_additional_annotations []string
|
Hiddenapi_additional_annotations []string
|
||||||
}
|
}
|
||||||
|
|
||||||
type CompilerDeviceProperties struct {
|
// Properties that are specific to device modules. Host module factories should not add these when
|
||||||
|
// constructing a new module.
|
||||||
|
type DeviceProperties struct {
|
||||||
// if not blank, set to the version of the sdk to compile against.
|
// if not blank, set to the version of the sdk to compile against.
|
||||||
// Defaults to compiling against the current platform.
|
// Defaults to compiling against the current platform.
|
||||||
Sdk_version *string
|
Sdk_version *string
|
||||||
|
@ -421,9 +376,9 @@ type Module struct {
|
||||||
// Functionality common to Module and Import.
|
// Functionality common to Module and Import.
|
||||||
embeddableInModuleAndImport
|
embeddableInModuleAndImport
|
||||||
|
|
||||||
properties CompilerProperties
|
properties CommonProperties
|
||||||
protoProperties android.ProtoProperties
|
protoProperties android.ProtoProperties
|
||||||
deviceProperties CompilerDeviceProperties
|
deviceProperties DeviceProperties
|
||||||
|
|
||||||
// jar file containing header classes including static library dependencies, suitable for
|
// jar file containing header classes including static library dependencies, suitable for
|
||||||
// inserting into the bootclasspath/classpath of another compile
|
// inserting into the bootclasspath/classpath of another compile
|
||||||
|
@ -508,6 +463,62 @@ type Module struct {
|
||||||
hideApexVariantFromMake bool
|
hideApexVariantFromMake bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (j *Module) CheckStableSdkVersion() error {
|
||||||
|
sdkVersion := j.sdkVersion()
|
||||||
|
if sdkVersion.stable() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if sdkVersion.kind == sdkCorePlatform {
|
||||||
|
if useLegacyCorePlatformApiByName(j.BaseModuleName()) {
|
||||||
|
return fmt.Errorf("non stable SDK %v - uses legacy core platform", sdkVersion)
|
||||||
|
} else {
|
||||||
|
// Treat stable core platform as stable.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("non stable SDK %v", sdkVersion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// checkSdkVersions enforces restrictions around SDK dependencies.
|
||||||
|
func (j *Module) checkSdkVersions(ctx android.ModuleContext) {
|
||||||
|
if j.RequiresStableAPIs(ctx) {
|
||||||
|
if sc, ok := ctx.Module().(sdkContext); ok {
|
||||||
|
if !sc.sdkVersion().specified() {
|
||||||
|
ctx.PropertyErrorf("sdk_version",
|
||||||
|
"sdk_version must have a value when the module is located at vendor or product(only if PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE is set).")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure this module doesn't statically link to modules with lower-ranked SDK link type.
|
||||||
|
// See rank() for details.
|
||||||
|
ctx.VisitDirectDeps(func(module android.Module) {
|
||||||
|
tag := ctx.OtherModuleDependencyTag(module)
|
||||||
|
switch module.(type) {
|
||||||
|
// TODO(satayev): cover other types as well, e.g. imports
|
||||||
|
case *Library, *AndroidLibrary:
|
||||||
|
switch tag {
|
||||||
|
case bootClasspathTag, libTag, staticLibTag, java9LibTag:
|
||||||
|
j.checkSdkLinkType(ctx, module.(moduleWithSdkDep), tag.(dependencyTag))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *Module) checkPlatformAPI(ctx android.ModuleContext) {
|
||||||
|
if sc, ok := ctx.Module().(sdkContext); ok {
|
||||||
|
usePlatformAPI := proptools.Bool(j.deviceProperties.Platform_apis)
|
||||||
|
sdkVersionSpecified := sc.sdkVersion().specified()
|
||||||
|
if usePlatformAPI && sdkVersionSpecified {
|
||||||
|
ctx.PropertyErrorf("platform_apis", "platform_apis must be false when sdk_version is not empty.")
|
||||||
|
} else if !usePlatformAPI && !sdkVersionSpecified {
|
||||||
|
ctx.PropertyErrorf("platform_apis", "platform_apis must be true when sdk_version is empty.")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (j *Module) addHostProperties() {
|
func (j *Module) addHostProperties() {
|
||||||
j.AddProperties(
|
j.AddProperties(
|
||||||
&j.properties,
|
&j.properties,
|
||||||
|
@ -1008,13 +1019,13 @@ func checkProducesJars(ctx android.ModuleContext, dep android.SourceFileProducer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type linkType int
|
type sdkLinkType int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// TODO(jiyong) rename these for better readability. Make the allowed
|
// TODO(jiyong) rename these for better readability. Make the allowed
|
||||||
// and disallowed link types explicit
|
// and disallowed link types explicit
|
||||||
// order is important here. See rank()
|
// order is important here. See rank()
|
||||||
javaCore linkType = iota
|
javaCore sdkLinkType = iota
|
||||||
javaSdk
|
javaSdk
|
||||||
javaSystem
|
javaSystem
|
||||||
javaModule
|
javaModule
|
||||||
|
@ -1022,7 +1033,7 @@ const (
|
||||||
javaPlatform
|
javaPlatform
|
||||||
)
|
)
|
||||||
|
|
||||||
func (lt linkType) String() string {
|
func (lt sdkLinkType) String() string {
|
||||||
switch lt {
|
switch lt {
|
||||||
case javaCore:
|
case javaCore:
|
||||||
return "core Java API"
|
return "core Java API"
|
||||||
|
@ -1041,18 +1052,19 @@ func (lt linkType) String() string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// rank determins the total order among linkTypes. A link type of rank A can link to another link
|
// rank determines the total order among sdkLinkType. An SDK link type of rank A can link to
|
||||||
// type of rank B only when B <= A
|
// another SDK link type of rank B only when B <= A. For example, a module linking to Android SDK
|
||||||
func (lt linkType) rank() int {
|
// can't statically depend on modules that use Platform API.
|
||||||
|
func (lt sdkLinkType) rank() int {
|
||||||
return int(lt)
|
return int(lt)
|
||||||
}
|
}
|
||||||
|
|
||||||
type linkTypeContext interface {
|
type moduleWithSdkDep interface {
|
||||||
android.Module
|
android.Module
|
||||||
getLinkType(name string) (ret linkType, stubs bool)
|
getSdkLinkType(name string) (ret sdkLinkType, stubs bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Module) getLinkType(name string) (ret linkType, stubs bool) {
|
func (m *Module) getSdkLinkType(name string) (ret sdkLinkType, stubs bool) {
|
||||||
switch name {
|
switch name {
|
||||||
case "core.current.stubs", "legacy.core.platform.api.stubs", "stable.core.platform.api.stubs",
|
case "core.current.stubs", "legacy.core.platform.api.stubs", "stable.core.platform.api.stubs",
|
||||||
"stub-annotations", "private-stub-annotations-jar",
|
"stub-annotations", "private-stub-annotations-jar",
|
||||||
|
@ -1096,23 +1108,26 @@ func (m *Module) getLinkType(name string) (ret linkType, stubs bool) {
|
||||||
return javaSdk, false
|
return javaSdk, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkLinkType(ctx android.ModuleContext, from *Module, to linkTypeContext, tag dependencyTag) {
|
// checkSdkLinkType make sures the given dependency doesn't have a lower SDK link type rank than
|
||||||
|
// this module's. See the comment on rank() for details and an example.
|
||||||
|
func (j *Module) checkSdkLinkType(
|
||||||
|
ctx android.ModuleContext, dep moduleWithSdkDep, tag dependencyTag) {
|
||||||
if ctx.Host() {
|
if ctx.Host() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
myLinkType, stubs := from.getLinkType(ctx.ModuleName())
|
myLinkType, stubs := j.getSdkLinkType(ctx.ModuleName())
|
||||||
if stubs {
|
if stubs {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
otherLinkType, _ := to.getLinkType(ctx.OtherModuleName(to))
|
depLinkType, _ := dep.getSdkLinkType(ctx.OtherModuleName(dep))
|
||||||
|
|
||||||
if myLinkType.rank() < otherLinkType.rank() {
|
if myLinkType.rank() < depLinkType.rank() {
|
||||||
ctx.ModuleErrorf("compiles against %v, but dependency %q is compiling against %v. "+
|
ctx.ModuleErrorf("compiles against %v, but dependency %q is compiling against %v. "+
|
||||||
"In order to fix this, consider adjusting sdk_version: OR platform_apis: "+
|
"In order to fix this, consider adjusting sdk_version: OR platform_apis: "+
|
||||||
"property of the source or target module so that target module is built "+
|
"property of the source or target module so that target module is built "+
|
||||||
"with the same or smaller API set when compared to the source.",
|
"with the same or smaller API set when compared to the source.",
|
||||||
myLinkType, ctx.OtherModuleName(to), otherLinkType)
|
myLinkType, ctx.OtherModuleName(dep), depLinkType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1133,7 +1148,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
linkType, _ := j.getLinkType(ctx.ModuleName())
|
sdkLinkType, _ := j.getSdkLinkType(ctx.ModuleName())
|
||||||
|
|
||||||
ctx.VisitDirectDeps(func(module android.Module) {
|
ctx.VisitDirectDeps(func(module android.Module) {
|
||||||
otherName := ctx.OtherModuleName(module)
|
otherName := ctx.OtherModuleName(module)
|
||||||
|
@ -1157,7 +1172,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||||
}
|
}
|
||||||
} else if ctx.OtherModuleHasProvider(module, JavaInfoProvider) {
|
} else if ctx.OtherModuleHasProvider(module, JavaInfoProvider) {
|
||||||
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo)
|
dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo)
|
||||||
if linkType != javaPlatform &&
|
if sdkLinkType != javaPlatform &&
|
||||||
ctx.OtherModuleHasProvider(module, SyspropPublicStubInfoProvider) {
|
ctx.OtherModuleHasProvider(module, SyspropPublicStubInfoProvider) {
|
||||||
// dep is a sysprop implementation library, but this module is not linking against
|
// dep is a sysprop implementation library, but this module is not linking against
|
||||||
// the platform, so it gets the sysprop public stubs library instead. Replace
|
// the platform, so it gets the sysprop public stubs library instead. Replace
|
||||||
|
@ -3332,8 +3347,8 @@ func DefaultsFactory() android.Module {
|
||||||
module := &Defaults{}
|
module := &Defaults{}
|
||||||
|
|
||||||
module.AddProperties(
|
module.AddProperties(
|
||||||
&CompilerProperties{},
|
&CommonProperties{},
|
||||||
&CompilerDeviceProperties{},
|
&DeviceProperties{},
|
||||||
&DexProperties{},
|
&DexProperties{},
|
||||||
&DexpreoptProperties{},
|
&DexpreoptProperties{},
|
||||||
&android.ProtoProperties{},
|
&android.ProtoProperties{},
|
||||||
|
|
|
@ -94,7 +94,7 @@ func protoDeps(ctx android.BottomUpMutatorContext, p *android.ProtoProperties) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func protoFlags(ctx android.ModuleContext, j *CompilerProperties, p *android.ProtoProperties,
|
func protoFlags(ctx android.ModuleContext, j *CommonProperties, p *android.ProtoProperties,
|
||||||
flags javaBuilderFlags) javaBuilderFlags {
|
flags javaBuilderFlags) javaBuilderFlags {
|
||||||
|
|
||||||
flags.proto = android.GetProtoFlags(ctx, p)
|
flags.proto = android.GetProtoFlags(ctx, p)
|
||||||
|
|
|
@ -1681,7 +1681,7 @@ func (s *defaultNamingScheme) apiModuleName(scope *apiScope, baseName string) st
|
||||||
|
|
||||||
var _ sdkLibraryComponentNamingScheme = (*defaultNamingScheme)(nil)
|
var _ sdkLibraryComponentNamingScheme = (*defaultNamingScheme)(nil)
|
||||||
|
|
||||||
func moduleStubLinkType(name string) (stub bool, ret linkType) {
|
func moduleStubLinkType(name string) (stub bool, ret sdkLinkType) {
|
||||||
// This suffix-based approach is fragile and could potentially mis-trigger.
|
// This suffix-based approach is fragile and could potentially mis-trigger.
|
||||||
// TODO(b/155164730): Clean this up when modules no longer reference sdk_lib stubs directly.
|
// TODO(b/155164730): Clean this up when modules no longer reference sdk_lib stubs directly.
|
||||||
if strings.HasSuffix(name, ".stubs.public") || strings.HasSuffix(name, "-stubs-publicapi") {
|
if strings.HasSuffix(name, ".stubs.public") || strings.HasSuffix(name, "-stubs-publicapi") {
|
||||||
|
|
Loading…
Reference in New Issue