Revert "Revert "Support <dir>:<file> for LOCAL_JAVA_RESOURCE_FILES""

This reverts commit 15a2fa21a8eac50f1f9e92bda35990562d0dc462.

This reapplies I83f3d45bdd156200308dc7ed0e0fea5d895d37a6 without
the error on absolute paths if they are in $(OUT_DIR).

Test: OUT_DIR=/tmp/out mmma -j art/tools/ahat
Change-Id: Ia0b156d21ba4b95eb3004d61f6fae2f4341fd39c
diff --git a/core/java_common.mk b/core/java_common.mk
index dcd3603..0df8945 100644
--- a/core/java_common.mk
+++ b/core/java_common.mk
@@ -105,12 +105,20 @@
   java_resource_file_groups := $(filter-out %:,$(java_resource_file_groups))
 endif # LOCAL_JAVA_RESOURCE_DIRS
 
-LOCAL_JAVA_RESOURCE_FILES := $(strip $(LOCAL_JAVA_RESOURCE_FILES))
 ifneq ($(LOCAL_JAVA_RESOURCE_FILES),)
-  java_resource_file_groups += \
-    $(foreach f,$(LOCAL_JAVA_RESOURCE_FILES), \
-	$(patsubst %/,%,$(dir $(f)))::$(notdir $(f)) \
-     )
+  # Converts LOCAL_JAVA_RESOURCE_FILES := <file> to $(dir $(file))::$(notdir $(file))
+  # and LOCAL_JAVA_RESOURCE_FILES := <dir>:<file> to <dir>::<file>
+  java_resource_file_groups += $(strip $(foreach res,$(LOCAL_JAVA_RESOURCE_FILES), \
+    $(eval _file := $(call word-colon,2,$(res))) \
+    $(if $(_file), \
+      $(eval _base := $(call word-colon,1,$(res))), \
+      $(eval _base := $(dir $(res))) \
+        $(eval _file := $(notdir $(res)))) \
+    $(if $(filter /%, \
+      $(filter-out $(OUT_DIR)/%,$(_base) $(_file))), \
+        $(call pretty-error,LOCAL_JAVA_RESOURCE_FILES may not include absolute paths: $(_base) $(_file))) \
+    $(patsubst %/,%,$(_base))::$(_file)))
+
 endif # LOCAL_JAVA_RESOURCE_FILES
 
 ifdef java_resource_file_groups