#!/bin/bash # # Copyright (C) 2017 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. JAVAC_SOURCE=1.8 JAVAC_TARGET=1.8 JAVAC_FLAGS="-source ${JAVAC_SOURCE} -target ${JAVAC_TARGET}" # Suppress warning over bootclass path from Java 9 compiler (if used). JAVAC_FLAGS="${JAVAC_FLAGS} -Xlint:-options" # Check interface method defintions cause warnings and {default,static} # interface method invocations fail hard. declare -A SUPPORT_THRESHOLD SUPPORT_THRESHOLD["DefaultDefinition.class"]=0 SUPPORT_THRESHOLD["InvokeStatic.class"]=24 SUPPORT_THRESHOLD["InvokeDefault.class"]=24 SUPPORT_THRESHOLD["StaticDefinition.class"]=0 CLASS_FILES=${!SUPPORT_THRESHOLD[@]} SOURCE_FILES=${CLASS_FILES//class/java} ${JAVAC} ${JAVAC_FLAGS} ${SOURCE_FILES} for API_LEVEL in 19 20 21 22 23 24 25; do echo --------------------- Testing $API_LEVEL ------------------------ for c in $CLASS_FILES; do echo $c dx --dex --dump-width=500 --dump-to=$c.log --min-sdk-version=$API_LEVEL $c if [ $? = 0 ]; then if [[ $API_LEVEL -lt ${SUPPORT_THRESHOLD[$c]} ]]; then echo Unexpected success for $c at API level $API_LEVEL 1>&2 cat $c.log exit 0 fi else if [[ $API_LEVEL -ge ${SUPPORT_THRESHOLD[$c]} ]]; then echo Unexpected failure for $c at API level $API_LEVEL 1>&2 exit 0 fi fi done done # Now repeat with --allowAllInterfaceMethodInvokes which turns hard # failures for {default,static} interface invokes to warnings. EXTRA_DX_FLAG=--allow-all-interface-method-invokes SUPPORT_THRESHOLD["DefaultDefinition.class"]=0 SUPPORT_THRESHOLD["InvokeStatic.class"]=21 SUPPORT_THRESHOLD["InvokeDefault.class"]=0 SUPPORT_THRESHOLD["StaticDefinition.class"]=0 CLASS_FILES=${!SUPPORT_THRESHOLD[@]} SOURCE_FILES=${CLASS_FILES//class/java} ${JAVAC} ${JAVAC_FLAGS} ${SOURCE_FILES} for API_LEVEL in 19 20 21 22 23 24 25; do echo --------------------- Testing $API_LEVEL ------------------------ for c in $CLASS_FILES; do echo $c dx --dex --dump-width=500 --dump-to=$c.log --min-sdk-version=$API_LEVEL $EXTRA_DX_FLAG $c if [ $? = 0 ]; then if [[ $API_LEVEL -lt ${SUPPORT_THRESHOLD[$c]} ]]; then echo Unexpected success for $c at API level $API_LEVEL 1>&2 cat $c.log exit 0 fi else if [[ $API_LEVEL -ge ${SUPPORT_THRESHOLD[$c]} ]]; then echo Unexpected failure for $c at API level $API_LEVEL 1>&2 exit 0 fi fi done done