Further simplify the link type check routine

Bug: 180477804
Test: m nothing
Change-Id: I216be96cf844fe42ba0cec467eea8520ff4ef4f2
diff --git a/java/java.go b/java/java.go
index ecd0589..dbfad02 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1014,6 +1014,7 @@
 const (
 	// TODO(jiyong) rename these for better readability. Make the allowed
 	// and disallowed link types explicit
+	// order is important here. See rank()
 	javaCore linkType = iota
 	javaSdk
 	javaSystem
@@ -1041,6 +1042,12 @@
 	}
 }
 
+// rank determins the total order among linkTypes. A link type of rank A can link to another link
+// type of rank B only when B <= A
+func (lt linkType) rank() int {
+	return int(lt)
+}
+
 type linkTypeContext interface {
 	android.Module
 	getLinkType(name string) (ret linkType, stubs bool)
@@ -1101,34 +1108,7 @@
 	}
 	otherLinkType, _ := to.getLinkType(ctx.OtherModuleName(to))
 
-	violation := false
-	switch myLinkType {
-	case javaCore:
-		if otherLinkType != javaCore {
-			violation = true
-		}
-	case javaSdk:
-		if otherLinkType != javaCore && otherLinkType != javaSdk {
-			violation = true
-		}
-	case javaSystem:
-		if otherLinkType == javaPlatform || otherLinkType == javaModule || otherLinkType == javaSystemServer {
-			violation = true
-		}
-	case javaModule:
-		if otherLinkType == javaPlatform || otherLinkType == javaSystemServer {
-			violation = true
-		}
-	case javaSystemServer:
-		if otherLinkType == javaPlatform {
-			violation = true
-		}
-	case javaPlatform:
-		// no restriction on link-type
-		break
-	}
-
-	if violation {
+	if myLinkType.rank() < otherLinkType.rank() {
 		ctx.ModuleErrorf("compiles against %v, but dependency %q is compiling against %v. "+
 			"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 "+