Merge "Revert "Revert "Remove desugar support"""
diff --git a/cc/cc.go b/cc/cc.go
index f6b1152..36b2f95 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1202,8 +1202,6 @@
 		if ccDep == nil {
 			// handling for a few module types that aren't cc Module but that are also supported
 			switch depTag {
-			case android.DefaultsDepTag, android.SourceDepTag:
-				// Nothing to do
 			case genSourceDepTag:
 				if genRule, ok := dep.(genrule.SourceFileGenerator); ok {
 					depPaths.GeneratedSources = append(depPaths.GeneratedSources,
@@ -1241,8 +1239,6 @@
 				} else {
 					ctx.ModuleErrorf("module %q is not a genrule", depName)
 				}
-			default:
-				ctx.ModuleErrorf("depends on non-cc module %q", depName)
 			}
 			return
 		}
diff --git a/cc/compiler.go b/cc/compiler.go
index 8f119cf..10cec8c 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -392,6 +392,12 @@
 			fmt.Sprintf("${config.%sGlobalCflags}", hod))
 	}
 
+	if flags.Clang {
+		if strings.HasPrefix(android.PathForModuleSrc(ctx).String(), "external/") {
+			flags.GlobalFlags = append([]string{"${config.ClangExternalCflags}"}, flags.GlobalFlags...)
+		}
+	}
+
 	if ctx.Device() {
 		if Bool(compiler.Properties.Rtti) {
 			flags.CppFlags = append(flags.CppFlags, "-frtti")
diff --git a/cc/config/clang.go b/cc/config/clang.go
index ba1cd3c..22e428f 100644
--- a/cc/config/clang.go
+++ b/cc/config/clang.go
@@ -182,6 +182,11 @@
 		// compatibility.
 		"-Wno-c++98-compat-extra-semi",
 	}, " "))
+
+	// Extra cflags for projects under external/ directory
+	pctx.StaticVariable("ClangExtraExternalCflags", strings.Join([]string{
+		// TODO(yikong): Move -Wno flags here
+	}, " "))
 }
 
 func ClangFilterUnknownCflags(cflags []string) []string {
diff --git a/cc/config/global.go b/cc/config/global.go
index 06f6f9a..c734c2e 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -170,6 +170,8 @@
 	pctx.StaticVariable("CommonClangGlobalCppflags",
 		strings.Join(append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}"), " "))
 
+	pctx.StaticVariable("ClangExternalCflags", "${ClangExtraExternalCflags}")
+
 	// Everything in these lists is a crime against abstraction and dependency tracking.
 	// Do not add anything to this list.
 	pctx.PrefixedExistentPathsForSourcesVariable("CommonGlobalIncludes", "-I",
diff --git a/cc/makevars.go b/cc/makevars.go
index c95bad2..d036bb6 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -83,6 +83,7 @@
 	ctx.Strict("RS_LLVM_AS", "${config.RSLLVMPrebuiltsPath}/llvm-as")
 	ctx.Strict("RS_LLVM_LINK", "${config.RSLLVMPrebuiltsPath}/llvm-link")
 
+	ctx.Strict("CLANG_EXTERNAL_CFLAGS", "${config.ClangExternalCflags}")
 	ctx.Strict("GLOBAL_CFLAGS_NO_OVERRIDE", "${config.NoOverrideGlobalCflags}")
 	ctx.Strict("GLOBAL_CLANG_CFLAGS_NO_OVERRIDE", "${config.ClangExtraNoOverrideCflags}")
 	ctx.Strict("GLOBAL_CPPFLAGS_NO_OVERRIDE", "")
diff --git a/genrule/genrule.go b/genrule/genrule.go
index 42be88f..d03d4ee 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -163,8 +163,6 @@
 	if len(g.properties.Tools) > 0 {
 		ctx.VisitDirectDepsBlueprint(func(module blueprint.Module) {
 			switch ctx.OtherModuleDependencyTag(module) {
-			case android.SourceDepTag:
-				// Nothing to do
 			case hostToolDepTag:
 				tool := ctx.OtherModuleName(module)
 				var path android.OptionalPath
@@ -201,8 +199,6 @@
 				} else {
 					ctx.ModuleErrorf("host tool %q missing output file", tool)
 				}
-			default:
-				ctx.ModuleErrorf("unknown dependency on %q", ctx.OtherModuleName(module))
 			}
 		})
 	}
diff --git a/java/config/error_prone.go b/java/config/error_prone.go
index f203234..2c1c002 100644
--- a/java/config/error_prone.go
+++ b/java/config/error_prone.go
@@ -18,11 +18,13 @@
 
 var (
 	// These will be filled out by external/error_prone/soong/error_prone.go if it is available
-	ErrorProneJavacJar    string
-	ErrorProneJar         string
-	ErrorProneClasspath   string
-	ErrorProneChecksError string
-	ErrorProneFlags       string
+	ErrorProneJavacJar              string
+	ErrorProneJar                   string
+	ErrorProneClasspath             string
+	ErrorProneChecksError           string
+	ErrorProneChecksWarning         string
+	ErrorProneChecksDefaultDisabled string
+	ErrorProneFlags                 string
 )
 
 // Wrapper that grabs value of val late so it can be initialized by a later module's init function
@@ -37,11 +39,14 @@
 	errorProneVar("ErrorProneJavacJar", &ErrorProneJavacJar)
 	errorProneVar("ErrorProneClasspath", &ErrorProneClasspath)
 	errorProneVar("ErrorProneChecksError", &ErrorProneChecksError)
+	errorProneVar("ErrorProneChecksWarning", &ErrorProneChecksWarning)
+	errorProneVar("ErrorProneChecksDefaultDisabled", &ErrorProneChecksDefaultDisabled)
 	errorProneVar("ErrorProneFlags", &ErrorProneFlags)
 
 	pctx.StaticVariable("ErrorProneCmd",
 		"${JavaCmd} -Xmx${JavacHeapSize} -Xbootclasspath/p:${ErrorProneJavacJar} "+
 			"-cp ${ErrorProneJar}:${ErrorProneClasspath} "+
-			"${ErrorProneFlags} ${CommonJdkFlags} ${ErrorProneChecksError}")
+			"${ErrorProneFlags} ${CommonJdkFlags} "+
+			"${ErrorProneChecksError} ${ErrorProneChecksWarning} ${ErrorProneChecksDefaultDisabled}")
 
 }
diff --git a/java/droiddoc.go b/java/droiddoc.go
index beaec11..b641041 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -422,12 +422,16 @@
 		otherName := ctx.OtherModuleName(module)
 		tag := ctx.OtherModuleDependencyTag(module)
 
-		switch dep := module.(type) {
-		case Dependency:
-			switch tag {
-			case bootClasspathTag:
+		switch tag {
+		case bootClasspathTag:
+			if dep, ok := module.(Dependency); ok {
 				deps.bootClasspath = append(deps.bootClasspath, dep.ImplementationJars()...)
-			case libTag:
+			} else {
+				panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
+			}
+		case libTag:
+			switch dep := module.(type) {
+			case Dependency:
 				deps.classpath = append(deps.classpath, dep.ImplementationJars()...)
 				if otherName == String(j.properties.Srcs_lib) {
 					srcs := dep.(SrcDependency).CompiledSrcs()
@@ -447,12 +451,7 @@
 					}
 					deps.srcJars = append(deps.srcJars, dep.(SrcDependency).CompiledSrcJars()...)
 				}
-			default:
-				panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
-			}
-		case SdkLibraryDependency:
-			switch tag {
-			case libTag:
+			case SdkLibraryDependency:
 				sdkVersion := String(j.properties.Sdk_version)
 				linkType := javaSdk
 				if strings.HasPrefix(sdkVersion, "system_") || strings.HasPrefix(sdkVersion, "test_") {
@@ -461,23 +460,9 @@
 					linkType = javaPlatform
 				}
 				deps.classpath = append(deps.classpath, dep.HeaderJars(linkType)...)
-			default:
-				ctx.ModuleErrorf("dependency on java_sdk_library %q can only be in libs", otherName)
-			}
-		case android.SourceFileProducer:
-			switch tag {
-			case libTag:
+			case android.SourceFileProducer:
 				checkProducesJars(ctx, dep)
 				deps.classpath = append(deps.classpath, dep.Srcs()...)
-			case android.DefaultsDepTag, android.SourceDepTag:
-				// Nothing to do
-			default:
-				ctx.ModuleErrorf("dependency on genrule %q may only be in srcs, libs", otherName)
-			}
-		default:
-			switch tag {
-			case android.DefaultsDepTag, android.SourceDepTag, droiddocTemplateTag:
-				// Nothing to do
 			default:
 				ctx.ModuleErrorf("depends on non-java module %q", otherName)
 			}
diff --git a/java/sdk_library.go b/java/sdk_library.go
index d649d5a..abd2dc2 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -356,7 +356,10 @@
 	props.Srcs = append(props.Srcs, module.properties.Api_srcs...)
 	props.Custom_template = proptools.StringPtr("droiddoc-templates-sdk")
 	props.Installable = proptools.BoolPtr(false)
+	// A droiddoc module has only one Libs property and doesn't distinguish between
+	// shared libs and static libs. So we need to add both of these libs to Libs property.
 	props.Libs = module.properties.Libs
+	props.Libs = append(props.Libs, module.properties.Static_libs...)
 	props.Aidl.Include_dirs = module.deviceProperties.Aidl.Include_dirs
 	props.Aidl.Local_include_dirs = module.deviceProperties.Aidl.Local_include_dirs
 
diff --git a/ui/build/paths/config.go b/ui/build/paths/config.go
index f044971..4275601 100644
--- a/ui/build/paths/config.go
+++ b/ui/build/paths/config.go
@@ -59,6 +59,7 @@
 	"awk":       Allowed,
 	"basename":  Allowed,
 	"bash":      Allowed,
+	"bc":        Allowed,
 	"bzip2":     Allowed,
 	"cat":       Allowed,
 	"chmod":     Allowed,
@@ -98,7 +99,10 @@
 	"openssl":   Allowed,
 	"patch":     Allowed,
 	"perl":      Allowed,
+	"pgrep":     Allowed,
+	"pkill":     Allowed,
 	"pstree":    Allowed,
+	"pwd":       Allowed,
 	"python":    Allowed,
 	"python2.7": Allowed,
 	"python3":   Allowed,
@@ -114,6 +118,7 @@
 	"sha1sum":   Allowed,
 	"sha256sum": Allowed,
 	"sha512sum": Allowed,
+	"sleep":     Allowed,
 	"sort":      Allowed,
 	"stat":      Allowed,
 	"sum":       Allowed,